CS 553 Programming Assignment #4 — Scheduling Orthogonally with Halide

(Due Wednesday December 3rd at 11:59pm)


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.

Nuts and Bolts

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.

The Writeup

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?

Submitting the Assignment

Create a pdf file of your report and submit it via RamCT. You will also need to submit your mini-cfd-2D.cpp file.

mstrout@cs.colostate.edu, 11/19/14