HPM is a minimally modified version of the MATLAB language that enables both static and run-time optimization for fine-grained parallel
architectures like Raw, T2, and StringRay. Many of the modifications will also be applicable to multicore processors. The HPM system consists of a
language specification, a compiler, and an optimizing run-time system.
MATLAB is the de facto standard language for many computer vision, signal processing, and scientific computing researchers.
Although it is famous
for its versatility as a prototyping language, MATLAB programs can have excellent performance for
matrix-heavy computations, compared even to traditional low-level languages like C or Fortran.
Although matrix operations are inherently parallel, effective parallel MATLAB implementations
remain an area of active research. The focus of our research is the optimization of MATLAB for
tiled, specialized heterogeneous and multicore architectures, which offer a friendlier compiler target than
traditional parallel clusters.
Like many compiler/run-time hybrids, HPM consists of four parts, the front-end, the middle-end, the back-end, and the
run-time system.
The front-end of the HPM framework is responsible for inferring typing and array dimensions information,
which is not typically available from the MATLAB source. Since MATLAB is an interpreted language and
uses implicit type definition, to unveil parallelism, the front-end must be able to
determine types and dimensional information for variables in MATLAB codes. Our current front-end
implementation includes a MATLAB parser, a type inference system, and an array shape inference engine.
Our experiences with the front-end will inform the choice of constructs to add to the MATLAB language
in order to allow better type and array dimension inference,
which in turn will enable more effective program transformations for performance optimization.
The middle-end of HPM framework operates at the symbolic level and is responsible for
high-level transformations that enable parallelism and increase locality in MATLAB computations.
These transformations include array partitioning and representation modification, loop transformations, and memory object
placement and migration optimization. The middle-end will also identify portions of the program that
are isomorphic to the functionality of special purpose functional units and pipelines, such as those
found in the Arsenal and Stringray processors.
The HPM back-end takes the mid-level program representation and maps
the individual instructions and memory objects to cores, and orchestrates and schedules the
communication between the cores over the scalar operand network (SON). Many aspects of
this back-end are similar to the MIT RawCC compiler, which targets the Raw tiled architecture.
Our research focus in the back-end is to develop techniques that reduce the complexity of these phases.
The focus of the run-time system is to allow the execution system to take advantage of
information which is not available at compile time.
The run-time system can transform the running program
as dataset properties change and as faults are detected in the system.
The focus is to increase program execution speed, energy efficiency,
and resilience.