Success with NSF!
Finally, there is some success with NSF (somewhat old news by now :). I got funding for two projects this summer—first for starting work on source-level modeling of memory behavior of applications and second, in joint work with Andrew Lumsdaine, on a declarative approach to parallel programming. To me both are very interesting directions.
The first idea builds on the notion of reuse distance or stack-distance that has been used before to estimate locality at the binary level. I want to extend that to source level so that it could be used to direct compiler optimizations. Several challenges lie in doing this:
- What is the correlation of source-level reuse distance with the actual memory behavior of the program?
- Can a source-level reuse distance metric be defined that is amenable to efficient computation?
- Can empirical methods be developed to handle those situations in which sources are not available?
However, the potential is great! Such a metric could give compilers a handle on the memory behavior of programs that does not exist today.
The second idea, of declarative approach to parallel programming, is in fact a brainchild of Andrew. Everybody agrees that writing parallel programs is hard. So, we are not even attempting to create a silver bullet that will magically “parallelize” a sequential program. Instead we wish to focus on making the task of writing parallel programs less painful. New programming technologies do not just get adopted overnight. They usually go through a process of validation by advanced users and only then get widely accepted. This is particularly true of high-performance applications that we want to specially target in this research. Rather than create yet another language that will solve all parallel programming problems, we have a relatively modest goal: let users specify parallelism in a way that cleanly separates computation from communication. Given that a lot of performance optimizations in parallel programs is based on communication optimization, this provides a ”declarative” way for the users to specify their program. The intention is not to create a new language, but to only provide an abstraction—similar to what yacc does for writing parsers.
Finally, there is some success with NSF (somewhat old news by now :). I got funding for two projects this summer—first for starting work on source-level modeling of memory behavior of applications and second, in joint work with Andrew Lumsdaine, on a declarative approach to parallel programming. To me both are very interesting directions.
The first idea builds on the notion of reuse distance or stack-distance that has been used before to estimate locality at the binary level. I want to extend that to source level so that it could be used to direct compiler optimizations. Several challenges lie in doing this:
- What is the correlation of source-level reuse distance with the actual memory behavior of the program?
- Can a source-level reuse distance metric be defined that is amenable to efficient computation?
- Can empirical methods be developed to handle those situations in which sources are not available?
However, the potential is great! Such a metric could give compilers a handle on the memory behavior of programs that does not exist today.
The second idea, of declarative approach to parallel programming, is in fact a brainchild of Andrew. Everybody agrees that writing parallel programs is hard. So, we are not even attempting to create a silver bullet that will magically “parallelize” a sequential program. Instead we wish to focus on making the task of writing parallel programs less painful. New programming technologies do not just get adopted overnight. They usually go through a process of validation by advanced users and only then get widely accepted. This is particularly true of high-performance applications that we want to specially target in this research. Rather than create yet another language that will solve all parallel programming problems, we have a relatively modest goal: let users specify parallelism in a way that cleanly separates computation from communication. Given that a lot of performance optimizations in parallel programs is based on communication optimization, this provides a ”declarative” way for the users to specify their program. The intention is not to create a new language, but to only provide an abstraction—similar to what yacc does for writing parsers.
Add comment August 14th, 2008
No Comments