Automated Source-to-Source Translations to Assist Parallel Programmers
Thesis 2006
Publication Type: MS Thesis
Repository URL:

It is commonly believed that parallel programming can be difficult. Because it is already difficult enough, any automatic ways of simplifying parallel programming are welcome. This thesis describes how source-to-source translators can be used to make parallel programming easier. This thesis describes three source-to-source translators and provide some examples of translated codes. The translators used the ROSE library.

The first source-to-source translator removes global and static variables from a program and encapsulates them in a structure which is allocated on the stack. This translator facilitates the use of any MPI code with AMPI, an adaptive MPI implementation which unfortunately has limited support for MPI applications containing global or static variables. The source-to-source translator just transforms the code a minimal amount so that existing compilers, linkers, and loaders can be used. Thus no special compilers or loaders are required. Requiring special compilers or loaders necessarily would limit the acceptance of AMPI, whereas a source-to-source translator would provide a simple automated way of transforming an MPI code for use on any platform.

The second source-to-source translator inserts calls to functions for tracing an application. The traces are used for post-mortem performance analysis. The translator inserts a Projections function tracing call at the beginning and end of each function in the source code. Thus an existing MPI application can be analyzed for performance function by function, without any need for the user to manually modify the application's code.

The third source-to-source translator automatically creates PUP routines for Charm++ applications. PUP routines are functions that serialize the state of a migratable object. PUP routines are normally created by hand, which leaves room for programmer error. For example, it is easy to overlook a member variable in a class. The source-to-source translator, however, can easily iterate through all member variables and add each to the PUP routine.

AMPI shows great potential for improving the performance of scientific simulations that use MPI. AMPI adaptively manages parallel resources, provides runtime instrumented load balancing, fault-tolerance, and supports virtualization. These features are very useful for dynamic applications and are essential for large scale parallel codes. AMPI augmented with the global variable rewriting translator will be able to provide these features automatically to any C or C++ MPI application. Parallel scientific applications are generally concerned with two main criteria, capabilities and performance. To analyze performance, the source code instrumenting tool will be useful. All AMPI scientific application developers can benefit from this tool. These translation tools will increase the productivity of parallel programmers.

Isaac Dooley Automated Source-to-Source Translations to Assist Parallel Programmers 2006 Masters Thesis Dept. of Computer Science, University of Illinois
Research Areas