This project is to teach you how to benchmark the memory speed of a computer system. You should use C/C++ for implementation and use a Linux/Unix machine for the development and testing. In this assignment, you need to design and implement a member benchmark to measure the memory speed. Your parameter space should include read operations, write operations, sequential access and random access, and varying the concurrency (1 thread, 2 threads, 4 threads, and 8 threads). The metrics you should be measuring is the throughput (Megabytes per second, MB/sec).
You must write the source code from scratch. You can use well known benchmarking software to verify your results, but you must implement your own benchmark. Do not use code you find online, as you will get 0 credits for this assignment.
Experiments should be done in such a way that they take multiple seconds to minutes to run, in order to amortize any startup costs of the experiments.
Not all timing functions have the same accuracy; you must find one that has at least 1ms accuracy or better.
No GUIs are required. Simple command line interfaces are fine
2. What you will submit
Each program must work correctly and be detailed inline documented. You should submit:
1) Manual (20%): A separate (typed) design document (named manual.pdf) should describe:
The overall program design, and design tradeoffs and considered and made.
A manual describing how the program works. The manual should be able to instruct users other than the developer to run the program step by step. The manual should contain example command.
2) Source code (30%): All of the source code. In order to get full credit for the source code, your code must have in-line documents, must compile, and must be able to run by the instructor for verification purpose.
3) Report (50%): A separate report (named report.pdf) should include your computer configuration, benchmark verification and performance test.
Configuration: please describe the hardware specifications your test-bed in details, including processor, memory, cache and etc.
Verification: compare your program to with other commercial benchmarks such as cachebench to convince yourself that it is indeed correct. More information about cachebench could be found on website http://icl.cs.utk.edu/llcbench/cachebench.html
Performance test is one of the most important parts. You must evaluate the developed benchmark varying the parameters mentioned above.
4) Since there are many experiments to run, write scripts to automate the performance evaluation. (10 points)