Project 2: Parallel Implementation
CS 441 Project, Dr. Lawlor
A substantial chunk of your course grade comes from the two
semester
projects. Project 1 was more research-oriented. Project 2
is more applied and implementation-oriented. From the
syllabus:
PROJ2: a software development or
hardware performance analysis project, due in December.
Here's what's left of the semester, before the midterm on December 18:
November
Su Mo Tu We Th Fr Sa
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24 <- code working (thanksgiving)
25 26 27 28 29 30 1
December
Su Mo Tu We Th Fr Sa
2 3 4 5 6 7 8 <- presentations start
9 10 11 12 13 14 15
16 17 18 19 20 21 <- final code & writeup (finals week)
Please have your project 2 topic picked out and some simple project-related code working by Tuesday, November 20.
We'll have some very short (literally 7 minutes total per person) in-class presentations on Thursday, December 6 and Tuesday, December 11. PowerPoint is NOT required, but you MUST have
a clear idea of what you will present AND some sort of
examples/illustrations/code/graphs. I'm most interested in hearing:
- Basically what you did (very short; and a picture is worth a thousand words).
- Things that went wrong, and how you fixed them.
- Things that worked well.
- Interesting things you learned.
Topics presented in class will appear on the final, so do ask questions if the presenter stops making sense!
The final code and short writeup
are due Tuesday, December 18. The writeup, called README (plain text
or HTML), is basically just a one-page-or-less summary of what you did,
what's working, and what you learned. Be sure to give proper
credit to your sources of code and documentation!
Possible Project 2 Topics
Or choose your own topic! Topics should all be implementation work of the form "Write your own X" rather than research work of the form "Learn what people have done about X".
- A portable, well-designed high-performance library to perform any reasonably useful task
- Write a high-performance version of any interesting application
using any more-or-less conventional parallel programming language:
- "Interesting"
applications include:
- Learn OpenGL GLSL or DirectX, and write something interesting, such as a 2D ice solidification simulator or a 3D shadow simulator that runs on the graphics card.
- Find a VHDL-to-FPGA simulator, like Xilinx's ISE, and write some VHDL to do something interesting on the (simulated) FPGA, such as software radio (link, Wired article).
- Write a dynamic translation engine to perform some task on some common CPU using runtime-generated machine code.
In all cases, part of the project is benchmarking--be sure to measure (and improve!) the performance of your implementation.