The BenchGen project aims to synthesize programs that are sufficiently expressive to stress-test computing systems, such as operating systems, compiler optimizations, memory allocation libraries and even computer architectures. BenchGen implements an L-System to generate programs from a seed string and a set of production rules, enabling the creation of large programs through iterative expansion of the L-System. Additionally, our goal is for BenchGen to generate programs that are as similar as possible to widely used benchmarks, such as SPEC CPU 2017 and the LLVM Test Suite. The program generator is entirely written in C++.
BenchGen project is financed by FAPEMIG and sponsored by Google.
After cloning the repository, you can build the project by running the make
command in the src/gen
directory. Notice that CLANG++ is used as the default compiler.
git clone --recurse-submodules https://github.com/lac-dcc/BenchGen.git
cd src/gen
make
To generate a program, you will need to create a file containing the production rules and a file containing the seed string to be used by the L-System.
You can find a set of examples in the directory src/gen
. An example of production rules and seed string is:
Production Rule:
A = IF(A, new new new);
Seed String:
new CALL(new LOOP(A) new new new) contains
To run BenchGen, you need to provide the following five parameters:
- Number of Iterations
- Production Rules (file containing the production rules)
- Seed String File (file containing the seed string)
- Program Name
- Variable Type. (
array
orsortedlist
)
An example of usage is:
./benchGen 1 productionRule.txt seedString.txt myProgram array
After that, BenchGen will generate a program with the following structure:
myProgram/
├── Makefile
├── README.md
└── src
├── func0.c
├── func1.c
├── func2.c
├── func3.c
├── func4.c
├── rng.c
├── myProgram.c
└── myProgram.h
Generated programs have their own README. Here we have a simpler explanation.
Use the following command to compile a generated program:
make
And run a generated program with the following command:
./<program_name>
Generated programs have their own README. Here we have a simpler explanation.
Use the following command to compile a generated program:
make llvm
And run a generated program with the following command:
./<program_name>
The Makefile will generate the programs in .ll format, which will be located in the ./ll directory.
Note: To confirm that the program is running correctly, simply check if it generates messages on stdout.
There are two main directories in the project, src
and Bench-Metrics
:
src: code components of BenchGen can be found in the src
folder, each documented in their own directories.
Bench-Metrics: the Benchmark Metrics is a part of the project that collects metrics from benchmarks.
Visit our documentation avaliable here
The BenchGen project is financed by FAPEMIG and Google. We appreciate their support and contributions to the development of this project.