Project 2: Applied Project
CS 441 Project, Dr. Lawlor
A substantial chunk of your course grade comes from the two semester
projects. Project 1 was more research-oriented: write a paper,
and give a talk. Project 2 is more applied and
implementation-oriented: write some code, test it out, speed it up.
Here's what's left of the semester:
November
Mo Tu We Th Fr
3 4 5 6 7
10 11 12 13 14 <- Project topic writeup due
17 18 19 20 21
24 25 26 27 28 <- Rough draft code due, Thanksgiving break
December
Mo Tu We Th Fr
1 2 3 4 5
8 9 10 11 12 <- Presentations, last day of class
15 16 17 18 19 <- Final exam, final code due
22 23 24 25 26
29 30 31
Please have your project 2 topic
(see list below) written up by midnight on Thursday, November 13.
Please write up a little one-page summary in HTML, with lots of
hyperlinks, listing both:
- What you want to build--the problem you're solving, the target hardware, and performance you hope to achieve.
- How you plan to build it--the language, libraries, and your overall plan of attack.
The rough draft code (working,
but not necessarily polished or tuned) is due at midnight on Tuesday, November
25th just before Thanksgiving break.
We'll do the presentations on Tuesday December 9. There are five people in
class, and one 90-minute presentation class, so that's about 15 minutes per
person. You should prepare about 10 minutes of interesting,
informative content, which leaves 5 minutes for questions and 5 minutes
to change speakers. PowerPoint is NOT required, but you MUST have
a clear idea of what you will present AND some sort of
examples/illustrations/code/graphs. Performance numbers are key to your presentation, so benchmark well!
Topics presented in class will appear on the exam, so ask questions if the presenter stops making sense!
The final code is due
at midnight on Tuesday, December 16. This should be fully
working, tuned, benchmarked, and include a short README explaining what
it is, and what performance it gets.
Possible Project 2 Topics
Or choose your own topic! Topics should all be of the form "Build an X", not "Learn about X".
- Use loop unrolling, strength reduction, invariant hoisting, branch folding, and other sequential optimizations to speed up any program of your choice.
- Use bitwise instructions to speed up some small repetitive calculation (SWAR-style, like Sean Anderson's "Bit Twiddling Hacks" or the portable CBL by UAF's own Jim Long).
- Use SSE instructions to speed up a floating-point intensive program of your choice.
- Implement and benchmark a dynamic translation engine for a language and CPU of your choice.
- Use OpenMP to parallelize a program
- Use threads, shared memory, or sockets to parallelize a program
- Use MPI to parallelize any program
- Use some other parallel programming library, like TBB, to parallelize a program.
- Use the graphics card to parallelize a program
- Or, pick your own topic! As long as it's high-performance and architecture-related, it's good!