The main idea of the project is to work on a novel idea that tries to solve a problem related to
dynamic program analysis for reliable concurrent software.
Projects can be one of the following two types:
I encourage you to explore ideas that are high risk, high reward. That is, it's better to work on an
ambitious idea that might not work, rather than an incremental idea that will definitely work.
- Read additional papers about a topic that interests you. Develop a new idea about it.
Write a paper that synthesizes the background work; develops and designs an approach based on your new idea; and proposes
to implement and evaluate it.
- Develop a new idea. Implement and evaluate a design based on this idea.
Write a report about your design, implementation, and evaluation.
Unless you're already familiar with a compiler or runtime infrastructure (see below for examples) in which you could implement an idea
in this area, I suggest the first project as a better alternative, given the time constraints of the quarter (10 weeks).
In either case, if you're interested, we can potentially work together after the quarter to develop
your idea further and submit it for publication.
You can work alone or potentially with another person, depending on the scope of your project.
I think the second project option is more likely to be suitable for working in pairs.
I'll periodically request project proposals and updates from you. In about week 3, I'll ask you to
send me a preliminary project proposal that describes your plans and progress so far, as well as any
help or feedback you need. Describe the area that you're focusing on, additional
papers you plan to read (I can help with this; ask me in advance), the idea you plan to explore (if you have one),
and the infrastructure(s) you might use (for the second project option). Please contact me at least
several days in advance for help with any of this, especially on choosing an area, choosing background papers,
developing an idea, and choosing an infrastructure. We can meet or discuss via e-mail.
Infrastructures (most relevant to the second project option)
The papers we'll read (plus other papers on the course web page)
use the following infrastructures (plus probably other infrastructures that I'm missing):
- Pin and Valgrind: dynamic binary instrumentation frameworks
(existing implementations include Helgrind and AVIO, although AVIO isn't public)
- RoadRunner: dynamic program analysis for concurrency bugs; adds
(several of the papers we'll read are implemented in RoadRunner)
- Jikes RVM: high-performance research Java virtual machine
(Pacer is implemented in Jikes RVM)
- Microsoft tools (.NET/C# and C/C++ frameworks): Microsoft Research has some really great tools
(CHESS is implemented in Microsoft infrastructure)
- Bytecode instrumentation: add static bytecode instrumentation
(example bytecode instrumentation frameworks: BCEL and ASM)
- LLVM: a researcher-friendly compiler framework for C/C++ programs