April 13, 2020 — The EPEEC project is developing a set of tools supporting programming productivity for parallel and heterogeneous systems. In this context, compilers play a central role to understand the source code of applications, optimize it, and transform is appropriately to achieve high performance on systems with GPUs and FPGAs.
Our partner Appentra is developing a compilation system based on a new approach: the identification of code patterns in the source, which can be transformed by applying well-defined changes to introduce parallelization and the use of heterogeneous accelerators. These new compiler techniques are being implemented using the LLVM open source compilation framework (http://llvm.org).
Parallelware Analyzer is a suite of command-line tools aimed at helping software developers build better quality parallel software in less time by leveraging Parallelware static code analysis technology. Designed around their needs, Parallelware Analyzer provides the appropriate tools for the key stages of the parallel development workflow.
Parallelware Analyzer Early Access Program is now open, which gives free access to all versions of Parallelware Analyzer and support until the official release. A NAS Parallel Benchmarks (NPB) Quickstart including record sheet is also available.
Current version of Parallelware Analyzer consists of the following command-line tools:
- pwreport: provides high-level reports of the code which can be exported in JSON format.
- pwcheck: looks for defects such as race-conditions and issues recommendations on best-practices.
- pwloops: provides insight into the parallel properties of loops found in the code which constitute opportunities for parallelism.
- pwdirectives: helps to insert OpenMP and OpenACC directives in your code to create parallel versions.

Parallelware Analyzer tools have been designed to cover the different stages of the parallel development workflow from looking for opportunities for parallelism to implementing them. The pwreport tool normally serves as a good entry point since it provides the higher-level reporting, including code coverage metrics, opportunities for parallelization and defects found in your code that should be fixed right away. It also offers suggestions on which tools to invoke next.
The tools guide the programmer through the process of parallelization by listing the loops that have been detected as parallelizable by the compiler, and also providing suggestions on the particular directives to be used for their parallelization, given a target execution environment (OpenMP/OmpSs for CPU, OpenACC for GPU…).
This is an iterative cycle that is repeated while the improvements give some positive return to the programmer, in the form of improved performance of the application.
About EPEEC
EPEEC’s main goal is to develop and deploy a production-ready parallel programming environment that turns upcoming overwhelmingly-heterogeneous exascale supercomputers into manageable platforms for domain application developers. The consortium will significantly advance and integrate existing state-of-the-art components based on European technology (programming models, runtime systems, and tools) with key features enabling 3 overarching objectives: high coding productivity, high performance, and energy awareness.
Source: EPEEC