Photo of Charlie Curtsinger

Charlie Curtsinger

Department of Computer Science
Grinnell College
1116 8th Ave.
Grinnell, IA 50112
Noyce Science Center 3827
(641) 269-3127

Summer MAP Opportunities

There are a few possible projects I am considering for this summer, but they all fall under the general heading of systems research. More specifically, I am interested in monitoring and measuring programs as they execute to improve their performance, reliability, or security. Sometimes that means giving developers better information about what a program is doing, while other times we can automatically improve programs without involving a developer at all. I am open to a variety of projects this summer, but it is most likely that we will continue one or both of the projects that started last summer:

Scrambler: Dynamic Layout Adaptation

As a program executes, it spends a significant amount of time accessing memory. Without a little help, memory accesses would be very slow—an instruction that goes all the way out to your computer’s main memory can potentially take ten to a hundred times as long as performing a basic operation like addition or subtraction. Processors make memory accesses faster using caches, which keep a copy of recently-accessed memory near the processor in smaller, faster storage. However, because of how caches are implemented, the exact location of data in memory can have a large effect on how well these caches work.

Scrambler is a system designed to identify and fix programs that have a problem with caches and other similar processor features. Scrambler executes programs on top of a system called LLVM, which makes it possible for us to move pieces of a program while it is executing. While the program runs, Scrambler monitors the performance of the program, identifies pieces of the program that may be in a poor location, and moves them to a new random location. Ending up with part of a program in an poor location is the result of “bad luck,” so moving part of a program to a new location is likely to resolve the problem. If not, Scrambler will detect the issue and move it again.

Currently, Scrambler only moves code in response to poor branch predictor performance; this is a similar problem to the one with caches. This summer, we will add functionality to Scrambler that will allow it to move data in response to poor cache performance. If you are interested in this project you should read Scrambler: Dynamic Layout Adaptation in the ACM Digital Library. This is the work submitted to the ACM Student Research Competition last summer, which won third place at the OOPSLA 2016 SRC in Amsterdam last October.

Energy Profiling with Alpaca

Profilers are tools the measure a program’s execution and offer guidance to developer about how to improve the program’s performance. Most profilers look at time as a measure of performance. While this is certainly important, the amount of energy a program uses is also important. It’s not very difficult to measure the total energy used by a program when it executes, but existing tools do not offer much guidance as to which parts of the program use more energy, or whether different parts of the program use energy at different rates.

Alpaca is an energy profiling tool that gives detailed guidance to help developers find and fix the functions that use energy at a higher-than-average rate (they cause the processor to draw more power). Alpaca works by measuring the energy used by a short burst of a program’s execution. Meanwhile, Alpaca also monitors which functions are executing during that burst. After the execution, we have a long list of (a) functions that ran during some period of time, and (b) the energy used during that time. We then look for patterns; if any time a particular function executes we see an increase in energy use, we can conclude that this part of the program must draw more power than other parts.

While we have tested Alpaca on some small programs, we need to add a few new features to help Alpaca deal with larger programs. Another major part of the project will be testing; we need to design experiments that let us validate Alpaca’s results. Once we believe the system is working as intended, we’ll use Alpaca to find and fix energy problems in real programs. If you are interested in this project you should read Energy Profiling with Alpaca in the ACM Digital Library. This is the work that was submitted and accepted to the ACM Student Research Competition last summer. This work came in fourth place at the OOPSLA 2016 SRC in Amsterdam.


Because almost all of my research work requires C and C++, you will need to complete CSC 161 or an equivalent course to work in my lab this summer. An ideal applicant would have completed CSC 207, CSC 211, and CSC 213, but I understand that most students have not finished all three of these courses. There are many other skills you could bring to the project, such as statistics coursework, experience with scripting languages or data visualization, or just experience tinkering around in C on side projects. Most importantly, you must be interested in the research project and be willing to learn.


While a MAP lasts for ten weeks during the summer, you will need to put in some additional effort before and after the MAP. We will start a weekly discussion group sometime in March to cover topics that will help you prepare for work over the summer. This will require you to read a moderate amount of material on your own, along with a few small independent projects to familiarize yourself with the programming language(s), tools, and techniques we’ll need during the summer. During the summer you are expected to work 40 hours a week for ten weeks. We will work as a group to set regular working hours and meeting times. If your project is successful, we will target some sort of publication toward the end of the summer; that means you may be expected to put in some additional time to prepare a paper and/or poster.

Specific dates for the MAP are negotiable, but my preference is to begin right after finals week. If this is a problem for you, please let me know when you apply.

How to Apply

Please complete all of the steps below to apply for a MAP:

  1. Complete the science division Summer Research Application on sharepoint by February 24th, 2017. You only need to complete this form once for all your MAP applications.
  2. Fill out my application form by February 24th, 2017.
  3. Once you submit you have completed steps 1 and 2, schedule a 15 minute appointment with me during my office hours at If you can’t make it to office hours, email me and we can set up an alternate time. If you are currently studying off campus, let me know and we can have our discussion over email.
  4. Soon after our meeting, I will send you a short programming challenge. Details will be included along with the assignment. All coding challenges must be completed by March 8th; I will give you up to a week to complete the work, so please request the assignment as early as possible.

If you have any questions or concerns about summer research or my application process, feel free to ask me via email, in the hall, or during office hours. You are welcome to drop by any time my door is open, or you can make an appointment if you have more questions that will take a longer time to answer.