The final exam will combine
parts of Project 1 and Project 2 to focus on optimization issues
for image convolution.
This final exam is a 'take home' exam. You are expected to work
on it completely by yourself. It is due Thursday May 3rd 2012 at
8:59pm Chicago time, the day before the final exam. By that time
you should have set up a web page with your solution, and
emailed the location of that web page to Andy. During the
scheduled final exam time we will meet in class and you will
have 10 minutes to briefly describe your work to the class, very
likely by going through your web pages. We won't have time for a
question / answer period; this way we can get through everyone
within two hours.
The final will focus on using OpenCL to perform convolution on a
large image. You should then optimize and document the benefits
of various optimizations to the code. Your grade will be based
on the number of optimizations that you evaluate and the quality
of the web-based documentation for your testing. When reading
through your web site someone new to OpenCL should get a better
idea where they should focus their energy in optimizing their
code.
You will very likely need to run the convolution code multiple
times on each pass to document improvements. You should break
out the times for setup and data transfer to/from the GPU from
the time to do the image convolution itself. You should look at
different sized kernels and different sized images (512x512,
1024x1024, 2048x2048). I suggest setting up an automated way to
do multiple runs with different parameters or code being run so
you can gather data efficiently.
Your job is to show how much of an affect different
optimizations have compared to a naive OpenCL version of the
algorithm with no optimizations on your card, or multiple cards
if you choose.
You can use OpenCV to deal with the image data, or
libraries for tiff, jpeg, etc. You should be able to display the
input and output imagery to verify that your algorithm is doing
the requested work correctly.
Be sure to detail which GPU(s) you are using.
We went through a video and slides in class from ATI on this
topic, and nVidia also has suggestions online for this kind of
optimization.