Technical Overview
-
Symbolic analysis:
- Symbolic analysis is performed via symbolic interpretation. The values
or ranges of values for each variable is tracked, and after interpreting
each statement, its side effects are computed and the affected variables
are modified, resulting in the creation of a new version for that variable.
This variable versioning is implemented directly into the IR, as well as
support for conditional algebra, allowing control sensitive information
to be encoded into expressions of the IR.
-
Pointer Analysis:
- PROMIS uses an effective and powerful axiom-based pointer analysis
technique. Axioms are defined describing the inherent structural information
about data structures and pointer variables are analyzed to
collect data access path information, which is stored in the IR.
Symbolic analysis and pointer analysis can aid one another (through
the disambiguation of pointers and the control sensitive value information
of pointer expressions), facilitating aggressive optimization.
-
Internal Representation (IR):
- Our novel Internal Representation maintains all vital program structures
and is common to both the frontend and backend. PROMIS employs a robust
interface which hides the implementation details of IR data structures
from the compiler developer, resulting in a highly modular compiler
which can be easily interfaced to other front/backends.
-
Support for Java:
- Adding a parser for Java Bytecode to the PROMIS front end will allow us to
research the benefits of parallel optimizations in a Java context.
-
Frontend/Backend Integration:
- Integrated compilation is achieved by the unified internal
representation, which allows dependence information
obtained in the frontend to propagate to the backend.
The IR has three levels of representation and can be lowered or raised
without loss of dependence information; a unique property of the PROMIS IR.
High level analysis and transformation techniques can be seamlessly applied
to the low-level IR.
-
Adaptive, Retargetable Code Generation:
- Through the powerful, multi-level IR and the tightly integrated
UMD (universal machine descriptor) module, PROMIS can be retargeted for
a variety of RISC processors supporting ILP or multithreading.
A powerful feature of PROMIS is its ability to generate adaptive
code aimed at delivering high performance on systems whose
resource availability changes dynamically.
-
C code generator:
- Adding a C Code generator to the PROMIS will allow us to
debug the PROMIS easily and evaluate
the performance of PROMIS generated codes compared with other
C compilers.
-
Support of IML:
- Adding a routine which converts DOALL loops to callers of the
iml_DOALL function will allow us to use the IML as
one of implementations of parallel programming environment.
-
PROMIS Instruction Set Architecture (ISA):
- Developing a Universal Machine Description will be used for PROMIS.
-
Graphical User Interface (GUI):
- The PROMIS GUI provides both a graphical and textual view of
the internal representation, aiding in user assisted optimization.
In addition, a tree structure contains a snapshot of all internal variables
and structures. It allows users to expand and collapse nodes, focusing
on the pertinent areas of interest. A Statistic Collector window displays
various performance characteristics throughout compilation, allowing users
to see the effect of the optimizations in progress. GUI supports a variety
of editing sessions for the compiler and application developer, and is
readily customized for different programming styles and environments.