This project was adapted from a code by Matthey Bierbaum, which implements a simple agent model of collective motion in mosh pits. Your goal is to understand the performance of the code, tune and parallelize it, and play with it in some interesting way. More specifically, you should do the following:
- Tune the serial code and report on any bottlenecks. Is the time going where you expected? Ideally, both your serial and parallel performance tuning should be informed by profiling experiments.
- Parallelize your code using OpenMP, and spend some time tuning the
parallel implementation. You will need to go beyond just adding
pragmas before your
for
loops to get reasonable speed! - Profile the code and set up strong and weak scaling studies. What is the approximate cost per particle? Per frame? Does it scale linearly? How large a system is tractable? What is the speedup?
- If you have extra time, play a little! Improve or extend the code in some way that appeals to you. If this project appeals to you, extensions could easily be the basis of a class project.