Development Time Working Group Homepage

Research

The development of High Performance Computing (HPC) programs is crucial to progress in many fields of scientific endeavor. However, HPC machines are difficult to program. Effective programmers are rare because HPC code development requires individuals who are both experts in the HPC architecture and in the application domain. These problems will only increase in the future as tougher problems are attacked and more powerful (yet likely more difficult to program) HPC machines are created. To avoid problems in the future, insight is needed into the process by which codes are created in the first place. We need to understand how effective development of HPC codes currently happens, and where the problems or bottlenecks are.

Our focus is on understanding effective development practices for programs written for high performance computers. Our goal is to measure development time in both student programming and with professional expert programmers. The map above shows the sites that are collaborating with us to conduct studies.

Research Goals

Goal of the High Productivity Systems Project is to decrease the time-to-solution of programs running on High Performance Computers (HPC). In contrast to other domains time-to-solution is defined as time to develop plus time to execute a program. The research of our group is focused on time to develop HPC code. Goal of our work is to understand the development process of code executed on parallel machines to give advise to vendors (e.g. in form of prediction models) and improve learning material for HPC classes. If you like to know more about the DARPA High Productivity Computing Systems project go to: HPCS.

Therefore we are conducting studies with professionals and in classroom. During these studies we are collecting large amounts of workflow data that can be analyzed afterwards to validate hypotheses, find common defects and explore different workflow styles. 

 

Research Areas

The Development Time Working group is currently working in the following research areas:

Workflows

We are analyzing the series of activities performed by developers working on HPC code to look for characteristic workflows, common patterns that can be said to characterize how people go about developing HPC codes. This information can be used to understand: if different types of developers have different working styles; on what activities most developer's time will be spent; whether there are workflows that are particularly effective for novices that could be taught to learners.

Defects

We are collecting empirical knowledge about correctness and performance defects (i.e. bugs) in the domain of HPC. Information about recurring problems in HPC development, will be made available and will be useful for better focusing debuggers and other tools, and for educating novices learning to program HPC codes.

Folklore

We are collecting common assumptions in the HPC community about how effective parallel implementations of programs are developed. We use this "folklore" as the basis for ongoing experiments, which we expect will validate or negate these assumptions. The result is a series of heuristics and guidelines with an ever-growing body of evidence that supports conclusions about the basic phenomena of HPC development. 

Productivity Modeling

In the high performance computing domain, the speed of execution of a program has typically been the primary performance metric. But productivity of the developers creating those programs is also of concern to the community. We are studying the problems of defining and measuring productivity for these machines, and creating a model of productivity that includes both a component for program performance and a component that measures the development time of the program.