The goal of this assignment is to practice concurrent programming using the Jocaml programming language.
You are to simulate heat distribution on a two-dimensional surface.
The square grid size is 122 by 122. The initial temperature is 100 degrees for coordinates {(y,0)|30<y<91}, and 20 degrees for all other points in the surface. The temperature for a grid element at a given time step is the average of the grid element's neighbours at the previous time step (boundary elements remain constant over time.) You will simulate heat transfer for 1024 time steps to approximate equilibrium temperatures. You can see a sequential heat-seq.c implementation in C.
Surface temperature grid after 1024 steps. A gridmap viewer implementation written in C++ allows you to visualize your program's output.
Using JoCaml, write a concurrent join calculus-based solution to the heat transfer problem.
Using JoCaml, write a distributed join calculus-based solution to the heat transfer problem.
Distributed computing can help iterative computations perform faster than sequential computation provided that the cost of communication and synchronization is less than the benefit of parallelism. Write an analysis for when you expect a distributed iterative computation to have higher performance than a sequential one (describe assumptions in your analysis: e.g., homogeneous machines and network, data partitioning scheme, and/or computation to communication ratio).
Due Date: April 22nd, 6:00PM
Grading: The assignment will be graded mostly on correctness, but code clarity / readability will also be a factor (comment, comment, comment!).
Submission Requirements: Please submit a ZIP file with your code, including a README file. In the README file, place the names of each group member. Your README file should also have a list of specific features / bugs in your solution. Your ZIP file should be named with your LMS user name(s) as the filename, either userid1.zip or userid1_userid2.zip. Only submit one assignment per pair via LMS.