Project Proposal

Assigned: Tuesday, Apr 19, 2016

Due: Friday, Apr 22, 2016 at 10:30pm

Collaboration: You may work individually or in groups of up to three students. You may use your classmates as a resource, but please cite them.

Overview

For the final project in this class, you will build on at least two of the core areas we covered in this course. Core areas are:

  • Virtualizing the CPU
  • Virtualizing Memory
  • Concurrency on the CPU
  • Concurrency on the GPU
  • Persistence
  • Distributed Systems (not covered, but acceptable)

The specific project is up to you, but you should be prepared to argue that your project bridges two or more areas of systems. It may be tempting to include Persistence by simply writing output to a file; this may be acceptable for sufficiently complex projects, but you should check with me before submitting your proposal.

Your project proposal must:

  1. Describe the purpose and impact of your system
  2. Explain how this system spans at least two of the above key areas
  3. Give a rough description of how you will implement your system

While you are not required to use figures in your proposal, they may make it easier to explain your plans. Your implementation description should describe the major components of the system, a rough timeline for the implementation, and discuss any potential challenges in the implementation. You may want to consider possible alternate solutions if your proposed strategy does not work. You should expect to have at least one but no more than three pages of single-spaced text with a reasonable font.

Project Ideas

Here are a few example projects that would meet the requirements. You are welcome to propose one of these projects if you like, but your proposal must address all three of the requirements above.

File Indexing
Scan the contents of files in a directory and its sub-directories to build an inverted index (mapping words/tokens to the files that contain them) in parallel. Use this index to search for files matching a given query. Bonus: use the inotify library to watch for file changes and update the index.
Networked Multiplayer Worm!
Use the POSIX sockets API to build a multiplayer worm game where players share the same board. You will need to decide which parts of the game to run on a server and which parts run on the clients.
GPU Raytracing
Use the GPU to run the raytracing computations you parallelized in the raytracer lab. You may want to look at the SDL documentation to avoid copying the image data back from the GPU before displaying it.
Working Set Visualization
Use the LD_PRELOAD trick from the malloc lab to figure out which memory is allocated to the program. Periodically, use mprotect to make memory inaccessible every once in a while, then use a signal handler to catch accesses to this memory. Each time you do this you learn which thread accessed which address. Record and analyze this information to learn how much memory in a real program is shared between threads, used primarily by one thread, frequently/infrequently accessed, or other properties of the program’s memory accesses.

Evaluation

Your project proposal will be evaluated using four criteria:

  1. Is the proposal written clearly using correct grammar and spelling?
  2. Does the proposal adequately describe the purpose of the proposed work?
  3. Does the proposed work span at least two key areas of this course?
  4. Is the proposed implementation plan sufficiently detailed?

In addition to the grade for your initial proposal, I will give proposal feedback by April 23rd, 2016. You are required to address any critical issues with your proposal by April 25th at 10:30pm.

Exceptions and Special Cases

If you are interested in a project that does not span two areas of the course, I may still approve the project if it is sufficiently ambitious. If you are considering such a project, please talk to me about it as soon as possible.