Final: Tying it all together (due Friday May 18th)

In this project, you will be comparing the performance of sequential, p-threads, GPU, and MPI versions of the circadian simulation projects. You will also determine what signal timing causes the best synchronization.

  1. Get your circadian simulation code working with MPI. This essentially means turning certain main programs (e.g. sim_stats_ns) into programs using MPI. Not much else needs to change from the sequential version. The Makefile needs to use mpicc as the compiler and you need to remember to run your program with mpirun. I would concentrate on sim_stats_ns.c as the most important main program.
  2. Get sim_stats_ns.c working with CUDA. This means you need to update your kernel to return the statistics instead of the events. To run several networks at once, you should run several blocks.
  3. Compare the performance of the four methods (sequential, p-threads, GPU, and MPI) for the circadian simulations. What are the advantages and drawbacks of each? (e.g. limitations on space, speed)? Feel free to talk about the limitations in terms of the hardward we used for this course (e.g. the p-threads version might be the best, except that it allows us to use only 32 processors at a time, whereas other versions allow more). Be sure to back up your statements with data (i.e. don't just say one method is faster - tell me how much faster it). Include a focussed analysis on the performance when the numer of oscillators in a network is 100. Write this up in a document which includes figures and tables (it is up to you to determine which figures and tables you need, but I suggest that one of those tables be a clear comparison of run-times across the four methods). It will probably be helpful to compare performance by comparing the time-per-processor instead of just the overall time. For the GPU, consider the time per multi-processor.
  4. Push your MPI version one step further. Use it to determine which signal-timing determines the best synchronization: we have been using CT4..CT8 as the signal-sending time, but would it be better to shift the time? You should keep your signal duration as 4 hours and test at least 12 signal-start times (CT0, 2, 4, 6, 7, 8, 10, 12, 14, 16, 18, 20, 22 makes the most sense to me). I would like to see a graph with the signal-starting time (in circadian hours) on the x-axis and the standard deviation of the CT6 crossing-time of the 10th cycle on the y-axis. You may use a network size of 100, if you would like. It is up to you how to design this code.

Extensions

Test additional signal timing options (e.g. make the signal shorter or longer)

Test the performance of multiple network sizes.

Thoroughness is always rewarded. Investigate more and investig

Writeup and Handin

To hand in your project, you will gather all of the necessary files into a proj11 directory.

  1. Create a file named README.txt. Describe the code files (the purpose of each file) along with how to compile and run the code.
  2. Create a second file for your project report. This one should allow for images or tables, so should be in a format such as .docx or .pdf.
  3. You should hand in all code necessary to run your solutions. Place all necessary .h, .c, and Makefile files in proj11 directory along with the README file. Stephanie will probably want to compile and run the code. It should be possible to do so without looking for any more files. Tar/zip up the directory and put it in your Private folder on Courses/CS336.