1. Assignments This project is to teach you how to benchmar

1. Assignments: 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). Other requirements:  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 When you have finished implementing the complete assignment as described above, you should submit your solution to ‘digital drop box’ on blackboard. 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. The timing of each test must be recorded in Tables. In addition, you must produce graphs to showcase the verification and performance test results. Please combine data and plot on the same graph wherever possible, for either compactness reasons, or comparison reasons. Also, you need to explain each graph’s results in words. Hint: graphs with no axis labels, legends, well defined units, and lines that all look the same, are likely very hard to read and understand graphs. You will be penalized if your tables and graphs are not clear to understand. ****: 4) Since there are many experiments to run, write scripts to automate the performance evaluation. (10 points)