The last four weeks of the semester will focus on synthesizing the concepts we’ve covered up to this point in the course. This will include some advanced topics for in-class discussion, but the course project will be the primary vehicle for you to demonstrate your understanding of the course material. You will propose, implement, and present a system that builds on topics from the course.
Your final grade on the project will be based on three components:
You can read about each of the projects components below.
You will begin your work on the course project with a proposal. The purpose of this proposal is to demonstrate that you have thought about how your project will connect important ideas from the class, how you will complete your work on the project, and how you will evaluate your work. The proposal will take the form of a short written document, which you will have a week to prepare.
We’ve explored a wide variety of ideas and technical skills in this course, so there are many possible directions you could take your project. Regardless of the project you choose, you must clearly state a goal, and then combine at least three different concepts we’ve covered in this class in a meaningful way. Concepts from class include, but are not limited to:
Your project does not need to make equal use of all three concepts, but should combine them in an interesting and unexpected way.
As an example, writing a program that runs in a process, opens a file, and uses mmap
to put it in your address space would not be a particularly interesting project and would likely not be approved.
However, a project that uses virtual memory techniques to catch use-after-free errors and records them in a human-readable file format would be an interesting application of these concepts.
If you have a project idea that incorporates a concept that is not in the list above I may approve it. Similarly, if your project is sufficiently complex I may approve it even if you only draw on two of the concepts above. In either case, you will need to discuss this possible project with me before submitting your proposal.
You may work on your project individually, or in groups of up to three students. We will spend some time in class working to identify areas of common interest so you can make informed decisions about the group you work with.
Your project proposal must answer the following questions:
Your proposal should be 2–3 pages of single-spaced text with a reasonable font.
The largest component of this project is the actual implementation. Every group member must play a significant role in the implementation, but you are welcome to divide up implementation tasks. You are required to use C or CUDA for your project. If your project requires the use of another programming language in some limited capacity that may be acceptable, but make sure you talk with me about it first.
Your implementation will be evaluated using several criteria:
The first three questions should be relatively easy to answer, but the fourth and fifth are more difficult. Four weeks is a very short time for a large implementation project, so I understand that you may run into issues and your plans could change. After reviewing your proposal, I will try to offer advice about parts of your project that will be challenging and encourage you to make backup plans if the implementation does not go smoothly.
If your final implementation is missing one of the key concepts you planned in your proposal you can still earn full credit on the project by submitting a short report in place of that part of the implementation. This short report should descrbe what you tried to implement, how it failed, and your best guess as to why that did not work. If you simply ran out of time before reaching an important concept you can describe your plans for the next steps in the project that would draw on this concept. This report is meant to show (in place of actual implementation) that you can connect a class concept with the rest of your project in a non-trivial way. Your report should make a convincing case that, if given sufficient additional time, you could actually complete the implementation including this third concept. You are free to use as much space for this report as you think is necessary, but I would guess that two pages of single-spaced text would be sufficient in most cases.
To show that your system works, you must provide a README file that precisely describes the basic use of your system, including both general instructions and a specific example that walks through an interaction with the system and the expected output.
Your implementation must also include all necessary source and data files and a Makefile that allows me to build your project with the make
command.
Presentation times will depend on the number of project groups, so check back for more details. Regardless of the available time, presentations must answer the following questions:
All group members must participate in the presentation, but it is up to you to decide how to divide the presentation topics.