In this part, we characterize the performance of the different stages of an EDA flow. In order to reproduce, edit the script file and fill in the command name for the tool of your choice.
Execute the scripts on a Linux system where perf
tool is installed. For example:
./1_synth.sh test-run 4 0-3
where test-run
is an arbitrary ID (used to uniquely identify this run), 4
represents the number of CPUs and 0-3
represents the CPU IDs to pin this process on. CPU pinning is important because otherwise, the operating system will keep floating the process between cores depending on the least busy core.
In order to simulate a cloud environment where resources are virtualized and constrained per user, we utilize Linux control groups.
- Create a cgroup using:
cgcreate -t uid:gid -a uid:gid -g subsystems:path
. Read more about this command in this link. - Edit cgroup resources. For example, edit limits files in
/sys/fs/cgroup/cpu/groupname
. - Use
cgexec
to run the experiment. For example,cgexec -g memory,cpu:groupname 1_synth.sh
The output of the performance counters is reported in a file named $RUN_ID-$STAGE-cpu-$CPU_COUNT.perf.data
.
We provide data for the Sparc Core design in the data folder.
Use your favorite scripting language to process and aggregate the data.
For example, to parse the file into a .csv
format, you might use: awk -F ' ' '{ print $2", " $1 }' synth-cpu-1.perf.data | tail -n+3 > data.csv
.
Please, refer to the paper cited in the README for our crunched results.