Add/update filtered-sum-bms benchmark
This commit is contained in:
95
prepare-benchmark.mjs
Executable file
95
prepare-benchmark.mjs
Executable file
@@ -0,0 +1,95 @@
|
||||
#!/usr/bin/zx
|
||||
import fs from 'fs'
|
||||
|
||||
|
||||
// load config from first argument
|
||||
console.log("Loading:", process.argv[3])
|
||||
const config = JSON.parse(await $`cat ${process.argv[3]}`)
|
||||
console.log('Config:', config)
|
||||
|
||||
const matrix = config.matrix
|
||||
const allVariables = Object.keys(matrix)
|
||||
const variables = Object.keys(matrix).filter(variable => variable !== 'SIMULATOR')
|
||||
|
||||
const recordOutput = config.recordOutput || false
|
||||
|
||||
// Create a list of all combinations of variables
|
||||
let combinations = [{}]
|
||||
for (const variable of variables) {
|
||||
const newCombinations = []
|
||||
for (const value of matrix[variable]) {
|
||||
for (const combination of combinations) {
|
||||
newCombinations.push({ ...combination, [variable]: value })
|
||||
}
|
||||
}
|
||||
combinations = newCombinations
|
||||
}
|
||||
|
||||
console.log('Combinations:', combinations.length)
|
||||
|
||||
const matrixBinaryName = `${config.name}_${variables.map(variable => `${variable}_\${${variable}}`).join('_')}.riscv`
|
||||
|
||||
let workflow = `
|
||||
stages:
|
||||
- benchmark
|
||||
|
||||
variables:
|
||||
GIT_DEPTH: "1"
|
||||
`
|
||||
for (const size of config.sizes) {
|
||||
workflow += `
|
||||
${config.name}_${size}:
|
||||
stage: benchmark
|
||||
parallel:
|
||||
matrix:
|
||||
- ${allVariables.map(variable => `${variable}: ${JSON.stringify(matrix[variable])}`).join('\n ')}
|
||||
image:
|
||||
name: quay.io/jonas_peeters/boom:${config.imageTag}
|
||||
tags:
|
||||
- AMD64
|
||||
- AppleSilicon
|
||||
script:
|
||||
- |
|
||||
echo "Run command: (set -o pipefail && time /opt/${size}BoomConfig +permissive +dramsim +dramsim_ini_dir=/opt/dramsim2_ini +max-cycles=1000000000 ${recordOutput ? '+verbose' : ''} +permissive-off /opt/pk ./binaries/${matrixBinaryName} </dev/null)"
|
||||
ls ./binaries/${matrixBinaryName}
|
||||
- bash -c "(set -o pipefail && time /opt/\${{ matrix.SIMULATOR }} +permissive +dramsim +dramsim_ini_dir=/opt/dramsim2_ini +max-cycles=1000000000 ${recordOutput ? '+verbose' : ''} +permissive-off /opt/pk ./binaries/${matrixBinaryName} </dev/null > >(tee -a ${matrixBinaryName}.out) 2> >(tee -a ${matrixBinaryName}.out >/dev/null))"
|
||||
${recordOutput ? ` - |
|
||||
export TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||||
mv ${matrixBinaryName}.out ${matrixBinaryName}_\${TIMESTAMP}.out
|
||||
curl -T ${matrixBinaryName}_\${TIMESTAMP}.out https://files.ham.peeters.page/upload/
|
||||
` : ''
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
const workflowFileName = `.gitlab-ci.yml`
|
||||
fs.writeFileSync(workflowFileName, workflow)
|
||||
|
||||
await $`rm binaries/*`
|
||||
|
||||
for (const combination of combinations) {
|
||||
// Build the binary
|
||||
const $$ = $({
|
||||
verbose: false,
|
||||
shell: '/bin/bash',
|
||||
env: {
|
||||
RISCV: "/home/peeters/riscv/install/gnu-riscv-toolchain",
|
||||
PATH: "$RISCV/bin:$PATH",
|
||||
CC: "/home/peeters/riscv/install/gnu-riscv-toolchain/bin/riscv64-unknown-elf-clang",
|
||||
CXX: "/home/peeters/riscv/install/gnu-riscv-toolchain/bin/riscv64-unknown-elf-clang++",
|
||||
},
|
||||
quiet: true,
|
||||
})
|
||||
const ar = Object.entries(combination).map(([key, value]) => `-D${key}=${value}`)
|
||||
const outputName = `binaries/${config.name}_${Object.entries(combination).map(([key, value]) => `${key}_${value}`).join('_')}.riscv`
|
||||
console.log("Building:", outputName, "with", ar.join(' '))
|
||||
await $$`/home/peeters/riscv/install/gnu-riscv-toolchain/bin/riscv64-unknown-elf-clang++ --target=riscv64-unknown-elf -O2 -fno-common -fno-builtin-printf -Wall -march=rv64imafdc_zicond_zicntr_xbmis0p1 -mabi=lp64d -mcmodel=medlow -menable-experimental-extensions ${config.source} ${ar} -o ${outputName} -lc -fuse-ld=lld -lm -DWITH_PRINTF -g`
|
||||
await $$`/home/peeters/riscv/install/gnu-riscv-toolchain/bin/llvm-objdump -d -S ${outputName} > ${outputName}.asm`
|
||||
}
|
||||
|
||||
if (process.argv[4] !== '--skip-commit') {
|
||||
// Commit the changes
|
||||
await $`git add .`
|
||||
await $`git commit -m "Add/update ${config.name} benchmark"`
|
||||
await $`git push`
|
||||
}
|
||||
Reference in New Issue
Block a user