HPM is a variant of the MATLAB language that improves the
analyzability of the language, namely by introducing static typing and adaptive features for run-time recompilation. Currently, both a frontend and a backend are in the last stage of development and an interface between two modules is under development. HPM framework is intended to be used to program the San Diego Stingray as well as a number of real-time signal processing applications.
Monday, March 26, 2007
High Performance MATLAB
 
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.