Project Description:
Microsoft Word Version
Modern compilers support parallel processing on the CPU level, instruction level parallelism. In
order for a compiler to take advantage of a multiprocessor or multicomputer system, compilers require the
programmer to define parallel segments, or tasks. This is tedious to perform; in order to alleviate
the burden from the programmer a compiler should be developed to perform such task identification.
The compiler is also required to add in any message passing or inter-process communication required.
There are several issues when developing such a compiler that need to be defined. First, the
compiler needs to define what a task is. Secondly, parameters are needed in order to identify one
task from another. Thirdly, when two tasks are identified all dependencies must be resolved as well
as managed in order for the program to perform as it would in a non-parallel environment. Once
dependencies are resolved, transformation techniques can be used to allow a greater level of
parallelization. After or during the processes the compiler must make note or add in segments for
communication in order to synchronize the results of the application. This proposal will focus on
techniques and algorithms for use in a distributed memory environment, such as that of a cluster.
Results can be tested against applications in several ways. First, the correctness of results from
the compiler can be tested. This requires comparing results from the generated applications on the
parallel compiler and a non-parallel compiler or a compiler with explicit paralellization.
Secondly, performance can be measured by the time that the generated program takes to perform the
specified task. This requires comparing the times from the parallel compiler and an explicit
parallel compiler, a non-parallel compiler can not be used in this instance. Compilation time is
another metric that should be used.
|