The growing complexity of high-performance computing (HPC) systems has led to the development of parallel programming models, such as OpenMP and OpenACC, to make it easier to utilize modern HPC architectures. These models provide a higher-level interface for specifying parallelism patterns and reducing programming effort, but performance optimization and customization are left to the compilers. Despite the availability of state-of-the-art OpenMP compilers, including LLVM, GCC, and ROSE, there remains a need for a compiler that is easily usable and extendable by researchers and students who are not in the field of compiler development, supports multiple parallel programming models, and has comparable performance to mainstream compilers.
The REX compiler has been proposed as a solution to these challenges. It is built upon the ROSE compiler and uses a unified parallel intermediate representation (UPIR), targeting the LLVM OpenMP runtime for optimal performance. REX provides essential OpenMP 5.0/5.1 constructs and preliminary support for OpenACC 3.2. Its source-to-source transformation capabilities offer flexibility and ease of use with minimal overhead. It can be installed as a Docker image or used through a cloud service. The REX compiler's performance has been evaluated using an enhanced version of the parallel benchmark, Rodinia, which compares GPU offloading performance across different parallel programming models and compilers. In conclusion, the REX compiler provides a unique solution for parallel programming research and education, balancing performance, portability, flexibility, and usability.