Compiler technology => Optimization Targets

Optimization Targets

There are many architectural approaches to achieving high performance in modern computer systems, from embedded processors to supercomputers, and VAST and DEEP can help support all of them:
  • Vector/SIMD Units: VAST can vectorize loops and generate explicit vector instructions. DEEP can report on which hot spots in the code have not been vectorized, and why.
  • Multi-threading and Multiple cores: VAST can detect opportunities for multiple threads in a single program, by parallelizing regions of the input program containing multiple loop nests. VAST automatically deals with creating new parallel routines and identifying and processing shared and private variables. VAST also fully supports the OpenMP standard for user-directed parallelism.
  • VLIW systems: VAST can restructure loop nests to expose additional parallelism for the compiler to include in the very long instruction words. VAST can disambiguate dependencies so that the compiler is freer to overlap instructions. DEEP can report on delivered performance on critical code sections, and the degree of parallelism achieved by metrics such as instruction issue rates on a per-loop basis.
  • Superscalar: Transformations can be similar to VLIW systems; VAST can restructure the program and expose more opportunities for instruction overlap, and DEEP can report on cache misses and load/store counts for critical loops.
  • Integrated DSP units: VAST can insure higher utilization of DSP units by changing loops to use DSP intrinsics and loading special DSP memories.
  • Adaptive/Flexible Systems: These systems can provide high levels of parallel functional units, and thus will flourish with the additional parallelism that VAST can detect and expose through its high-level dependence analysis and code transformations.
  • FPGAs: VAST can generate low-level data dependence information at the intermediate representation level in the compiler, so that all references are connected by data dependence arcs to any dependent reference. This can allow the rest of the compiler to more fully target low-level parallelism such as that available with an FPGA.
  • Others: VAST is frequently used for systems that cross these boundaries or feature new or innovative constructs; VAST is highly customizable and can be useful to just about any computer architecture that features high levels of parallelism.

VAST can support combinations of these targets in one system, for example: in a triple nested loop, parallelizing an outermost loop while unrolling a middle loop and vectorizing an inner loop.

Home Contact Legal

Copyright 2003, 2005 Crescent Bay Software Corp.