Jump to content

ROSE Compiler Framework/Supported Programming Languages

From Wikibooks, open books for an open world

Overview

[edit | edit source]

ROSE supports a wide range of main stream programming languages, with different degrees of maturity. The list of supported languages includes:

  • C and C++: based on the EDG C++ frontend
    • An ongoing effort is to upgrade the EDG frontend to its recent 4.4 version.
    • Another ongoing effort is to use clang as an alternative, open-source C/C++ frontend
  • Fortran 77/95/2003: based on the Open Fortran Parser
    • limitations: variables with embedded spaces are not supported.
  • OpenMP 3.0: based on ROSE's own parsing and translation support for both C/C++ and Fortran OpenMP programs.
  • UPC 1.1: this is also based on the EDG 3.3 frontend

Fortran

[edit | edit source]

Regression tests: tests/nonsmoke/functional/CompileTests/Fortran_tests

  • to trigger individual test
    • make test2020_comment_1.f90.passed

Check the detailed command line:

cat test2020_comment_1.f90.passed
WARNING: Command line option -rose:Fortran90 is deprecated! Use -std=f90 instead.
======== CUT ========
+ ../../testTranslator -rose:verbose 0 -rose:detect_dangling_pointers 2 -I../../../../../../sourcetree/tests/nonsmoke/functional/CompileTests/Fortran_tests -rose:f90 -c ../../../../../../sourcetree/tests/nonsmoke/functional/CompileTests/Fortran_tests/test2020_comment_1.f90
ELAPSED_TIME 2
======== CUT ========

OpenMP

[edit | edit source]

See more at OpenMP Support

ROSE supports OpenMP 3.0 for C/C++ (and limited Fortran support).

Configuration: please always try to use --with-gomp_omp_runtime_library=/usr/apps/gcc/4.4.1/lib64/ when configuring ROSE. So the generated ROSE translators can automatically link with libgomp.a to generate executables for you. This will also allow the execution tests of the omp Lowering be executed to catch errors. Without this option, only the compile level tests will run.

Experimental OpenMP Acclerator Model Implementation


Testing

  • There are about 70 builtin execution tests (many have self-verification) in ROSE.

Some benchmarks are used to test OpenMP support in ROSE in Jenkins (our regression test server)

  • a22b-NPB-2.3-C-parallel: all 8 benchmarks pass
  • a21-SPEC-OMP-64bit-parallel: 3 benchmarks pass.
  • LULESH OpenMP version: download

For builtin test:

You have to configure the path to GOMP if you want to them to be automatically executed when "make check" is typed. e.g. ../sourcetree ... --with-gomp_omp_runtime_library=/usr/apps/gcc/4.4.1/lib64/

UPC 1.1.1: this is based on the EDG 3.3 frontend

  • The supported version is limited by the EDG 3.3 frontend, which only supports UPC 1.1.1 ( UPC VERSION string is defined as

200310L). ROSE uses EDG 3.3 currently and it originally only supported UPC 1.0. We merged the UPC 1.1.1 support from EDG 3.10 into our EDG 3.3 frontend. We have also added the required work to support UPC 1.2.

Documentation:

Tests: make check rule under

  • rose/tests/CompileTests/UPC_tests

An example UPC-to-C translator: roseupcc

  • Not full featured. Only intended to serve as a start point for anybody who is interested/funded to implement UPC in ROSE
  • roseupcc is located in ROSE/projects/UpcTranslation
  • Documented by 13.5 An Example UPC-to-C Translator Using ROSE of the ROSE manual

MPI is mostly a library-based programming paradigm. In many cases, you can simply compile MPI applications normally using a ROSE-based translator, as long as you pass the include path of mpi.h to the command line.


However, there are some additional support for MPI in ROSE:

1) If ROSE is configured with --with-mpi=/mpi/install/location, then the configure adds the following variables to be used in Makefile.am

ROSE_WITH_MPI_CFLAGS='-I/usr/sci/scratch/sriram/local/include'
ROSE_WITH_MPI_CLDFLAGS='-L/usr/sci/scratch/sriram/local/lib  -lmpich -lopa  -lmpl  -lrt  -lpthread'
ROSE_WITH_MPI_CXXFLAGS='-I/usr/sci/scratch/sriram/local/include'
ROSE_WITH_MPI_CXXLDFLAGS='-L/usr/sci/scratch/sriram/local/lib  -lmpichcxx -lmpich  -lopa  -lmpl  -lrt  -lpthread'
ROSE_WITH_MPI_C_FALSE='#'
ROSE_WITH_MPI_C_TRUE=''

These flags are useful to compile ROSE as a MPI program. One can also use the CFLAGS to pass the location of mpi.h. These flags will be set for any version of MPI as long as valid install location is passed to --with-mpi.

2)There are a few MPI-specific analysis projects (MPI_Tools, extractMPISkeleton). Some of the dataflow analysis we are working on are i) Slicing for MPI communication ii) MPI communication invariant analysis ( prove that communication is constant in loops). We currently plan on using these analyses with other standard dataflow analyses to

  • Parallel control-flow graph analysis -- build communication graph of the MPI program with no input dependent control-flow or communication
  • Transformation to cDAG -- cDAG is runtime communication optimizer tool for MPI by Torsten Hoefler. We intend to replace MPI calls with cDAG calls to optimize for communication.

ROSE has an experimental connection to EDG 4.0, which helps us support CUDA.

To enable parsing CUDA codes, please use the following configuration options:

 --enable-edg-version=4.0 --enable-cuda --enable-edg-cuda

Chapter 16 of ROSE User Manual has more details about this.


More details from Tristan on Sept. 24, 2012

  • "--enable-cuda" option enable CUDA IR in ROSE (IR, preinclude, ...)
  • "--enable-edg-cuda" option only apply to EDG: it activates the EDG support in EDG 4.x (actually I need to patch EDG 4.4)
  • When "--enable-edg-cuda" is present, we also need to have "--enable-edg-version=4.x" (x = {0, 3})
  • "--enable-cuda" is relevant for --enable-only-cuda as the "-edg-" options are targeting only EDG (which is usually distributed as binary).

OpenCL

[edit | edit source]

There is a section discussing this support in Chapter 16 CUDA and OpenCL of the ROSE manual pdf:

Parser Building Blocks

[edit | edit source]

Quick information:

FailSafe Assertion Language

[edit | edit source]

FailSafe Assertion Language An experimental source code annotation language to support resilient computing.