|
|
|
|
Projects
ROSE Compiler
ROSE Compiler website
Using clang frontend
Now ROSE Compiler use Edison Design Group C/C++ frontend to parse C and C++. This frontend is a proprietary code and can only
be distributed as binary, preventing frontend experimentations (ie: language modification) in ROSE.
Clang, C language family frontend for LLVM, is an open source frontend. It use a high-level and modern C++ AST representation.
Having clang as C/C++ frontend for ROSE Compiler will enable to build transformations and analysis tools 100% open-source.
The C support will be realized soon!
GPGPU support
As an early work on ROSE Compiler, I was charged to implement CUDA and OpenCL support. I added AST representation for the
different specific constructs of these languages (as CUDA kernel call, and specific type/function modifiers).
ROSE Compiler have OpenCL and CUDA unparsing capabilities, which are used in OpenCL and CUDA code generation projects.
At this time, ROSE only had EDG C/C++ frontend and I modified it to parse CUDA code. Now as clang support CUDA and OpenCL
(even if it is only partial), ROSE Compiler will soon support parsing OpenCL and CUDA.
The OpenCL and CUDA support using clang will be released at the same time than the C support.
Polyhedral Model
The polyhedral model is a powerful mathematical representation of statically controlled loop nest (bounds of the loop are known at
compile time). It have been successfully use for code optimization and automatic parallelization.
Auto-tuning
Our research group have demonstrated that a polyhedral compiler (PoCC) can be successfully driven by using performance prediction.
We have also show that graph based representation of program (as Control Flow Graph) can be use as input of the model and out-perform other
state of the art techniques.
I am working on using polyhedric representations of program as input of the model. The polyhedric representation of a loop nest
encompass both the Control Flow Graph and the Data Flow Graph (in the limited scope of statically controled loops).
This work should be used to drive PoCC and R-Stream (polyhedral compiler from Reservoir Lab).
(Semi) Automatic Parallelization
I plan to use the polyhedral model to detect potential target for automatic parallelization. One of the main issue with the
polyhedral model is its limited scope. I developed a analysis tools using ROSE which automatically discover statically controlled
loops. It could be use to do partial modeling of programs and return information to the user on which part of the application should
be modified/annotated to enable the use of polyhedral compiler like PoCC or R-Stream.
OpenCL
OpenCl kernel optimization
Recently a binding of PoCC (Polyhedral C Compiler) to ROSE Compiler have been release. I want to use the new OpenCL
capability of ROSE to optimize OpenCL kernels.
It is also interesting to look at the work group of OpenCL as a polyhedron and take it in consideration when optimizing the kernels,
or even modifying the geometry of this work group to increase the computation intensity of the kernel.
UPC to OpenCL
ROSE Compiler accept UPC code as input, it seems interresting to automatically generate OpenCL implementation of UPC codes.
It can lead to some hybrid applications using both UPC and OpenCL.
|