The goal of this assignment is to experiment with the various ways to schedule a computation pipeline using Halide. The Computational Fluid Dynamics (CFD) benchmark has been converted to 2D and written in Halide. Your mission will be to do at least three different scheduling strategies (make sure to use tiling in at least one) in an attempt to make the benchmark execute as fast as possible. The winning strategy from the class will get some good chocolate.
Start out by downloading halide and playing around with some of the tutorials. The following works on the "capitol" machines in the department.
wget https://github.com/halide/Halide/releases/download/release_2014_10_09/halide_Linux_64_trunk_c62501f68ab9033d99ae0cc6d0d415646840f303_2014_10_09.tgz tar xzvf halide_Linux_64_trunk_c62501f68ab9033d99ae0cc6d0d415646840f303_2014_10_09.tgz cd halide/tutorial/ more lesson_01_basics.cpp
Next download the benchmark mini-cfd-2D.cpp and start programming some schedules. The instructions for how to compile and run the benchmark are at the top of the file.
Write a report (in latex of course) that briefly (one paragraph) describes each of your scheduling strategies. Also include a graph with one line (with symbols) for each strategy. The y-axis should be boxsize including boxsize=12000. The x-axis should be execution time on one of the "capitol" machines in the department. Your report should have a couple of paragraphs of analysis of the performance of different scheduling strategies. How many operations did each strategy have? How much parallelism? How did the tile sizes or problem size relate to the size of last-level cache?
Create a pdf file of your report and submit it via RamCT.
You will also need to submit your mini-cfd-2D.cpp file.