Course Project Instructions

The 15-869 final project is an opportunity for you (with up to one partner) to perform an in-depth study of your choosing of a visual computing topic. Including the proposal period, you have over eight weeks to complete the project. Expectations for the project are quite high: Graduate students in the class should aim to take on a problem and question for which solutions and answers cannot be found in the literature. You are welcome and encouraged to choose a project that is harmonious with your own research. Undergrads need not meet this novelty bar, but should aim very high.


  • Oct 23 -- Project Proposal Deadline
  • Nov 10 -- Checkpoint 1
  • Nov 24 -- Checkpoint 2
  • Dec 16 -- (4-7pm, GHC 4303) Project Presentations, write-ups due at midnight.


  • Begin by considering themes of the course:
    • The design of good abstractions. One reason that graphics has managed to build very effective systems is that we managed to identify the right abstractions for our needs. Those abstractions present a consistent and intuitive interface for application developers to express computations, and they present a stable interface beneath with system implementations can be heavily optimized. Choosing the right level of abstraction is a key theme in this course, and taking on a design challenge in your project would be very appropriate.
    • Efficient scheduling. Mapping computations to modern machines is an act of scheduling. Managing the conflicting goals of work efficiency, parallel execution, and maximizing locality was pervasive in the course.
    • Deep workload understanding and analysis. Throughout the course we evaluated design decisions through the lens of a specific class of workloads.
    • Energy and efficiency. Energy and efficiency. Energy and efficiency.
  • Be brave and pick a partner that knows things you don't know. In this class we have students with very diverse backgrounds. We have students highly experienced in graphics, and we have other students heavily interested in architecture and systems. It would be great to form teams where knowledge of visual computing and knowledge of systems was combined.
  • Talk with Kayvon early and often. While I won't be able to come up with project ideas for everyone in the class, if you come to me with basic ideas, I will help guide you towards a fun and challenging project.

Proposal Requirements

The purpose of the proposal is two-fold:

Please create a web page for your project. Your project proposal page should contain the following sections:

SUMMARY. Summarize your project in a few sentences. Describe what you plan to do (e.g., build a system, answer a question?) and what you hope your final result will be.

BACKGROUND. Describe what the problem you are trying to solve is. This may include a very basic related work section.

THE CHALLENGE. Describe why the problem is challenging. What aspects of the problem might make it difficult to parallelize? In other words, what to you hope to learn by doing the project?

RESOURCES. Describe the resources (computers, starting code, etc.) you will use. What codebase will you start from? Are you starting from scratch or using an existing piece of code? Is there a book or paper that you are using as a reference? Are there any other resources you need, but haven't figured out how to obtain yet? Could you benefit from access to any special machines?

GOALS/DELIVERABLES. Describe the deliverables or goals of your project.

  • Separate your goals into what you PLAN TO ACHIEVE (what you believe you must get done to have a successful project and get the grade you expect) and an extra goal or two that you HOPE TO ACHIEVE if the project goes really well and you get ahead of schedule. It may not be possible to state precise performance goals at this time, but we encourage you be as precise as possible. If you do state a goal, give some justification of why you think you can achieve it. (e.g., I hope to speed up my starter code 10x, because if I did it would run in real-time)
  • If applicable, describe the demo you plan to show at your final presentation (will it be an interactive demo, will you show an output of the program that is really neat, will you show speedup graphs reaching a certain performance level?)
  • If your project is an analysis project, what are you hoping to learn about the workload or system being studied? What question(s) do you plan to answer?
  • Systems project proposals should describe what the system will be capable of and what performance is hoped to be achieved.

SCHEDULE. Produce a draft schedule for your project. Your schedule should have at least one item to do per week. List what you plan to get done each week from now until finals week in order to meet your project goals. In your schedule we encourage you to be as precise as possible. It's often helpful to work backward from your deliverables and goals, writing down all the little things you'll need to do (establish the dependencies!).

Project Ideas

While I would be most excited if you came up with project ideas completely on your own, the following are a few ideas to get you thinking about projects. I am open to any project idea provided you can convince me it will be a valuable experience, is a challenging body of work, and you can tie the main challenges of the project to topics in the course.

  • Undergrads only: Implement advanced graphics algorithms (rendering, simulation) on a GPU or multi-core CPU and analyze their performance in detail. (you could extend the assignment 1 renderer to do this)
  • Extend the assignment 1 renderer to be a D3D compliant software renderer.
  • Propose an improvement to graphics pipeline algorithms or pipeline scheduling algorithms discussed in class and evaluate the performance of your solution via HW simulation or on a real machine
  • Propose a change to the OpenGL interface and evaluate potential benefits to implementations
  • Implement a simplified graphics pipeline or ray-tracing engine in Verilog.
  • Build a power measurement device that allows you to measure the power consumption of an application or workload on real hardware.
  • Implement a micro-benchmark suite for image-processing applications and evaluate benchmark execution on an architectural simulator. Use of Halide might make it easy to create a parameterizable benchmark suite allowing for benchmark/HW co-optimization.
  • Design an algorithm for determining which pipeline parallelization strategy (or which rasterization algorithm, or whether or not to use deferred shading) is the most efficient answer for a given workload. Can you make the system figure this out on it's own?
  • Design your own programming framework/API for an application domain of your choosing.
  • Study the utility of HW-data-compression techniques for image processing applications.
  • Modify the Halide compiler to add a new language feature.
  • Propose a new programming framework for image processing at scale and implement it on a cluster.
  • Attempt to generalize key hardware components of a GPU to broaden the potential scope of their use (e.g., texture compression, texture filtering)
  • Investigate thread or memory request scheduling policies on a GPU
  • Consider adding programmability to the image processors present in most SoCs. How does your change impact performance and efficiency?
  • Write software benchmarks that allow you to back-engineer the implementation of modern GPUs
  • Build a content-based image retrieval engine that scales across many machines.