Compiler
The compiler infrastructure used in the MEEP project is built on top of the https://www.european-processor-initiative.eu/ LLVM-based compiler.
Usage
Use the following options to access the functionality of the compiler:
- -mepi
- Enables the RISC-V Vector Extension support for 0.7.1. Intrinsics and vectorization (-O2 or better) is enabled.
- -mmeep-sa
- Enables assembly/dissassembly support of the MEEP Systolic Array extension.
The Reference to the EPI intrinsics for RISC-V Vector extension is available here.
Source code
The main branch of the MEEP project that includes support for both the RISC-V Vector Extension (0.7.1) and the MEEP Systolic Array extension is at https://gitlab.bsc.es/meep/meep-compilers/llvm-mono.
For the support of the OpenMP Multi-devices proposal (omp target spread), our proof of concept is found at https://gitlab.bsc.es/meep/meep-compilers/llvm-mono/-/tree/meep-target-spread.
HPC Runtimes
The Fedora 33 distribution comes with the MPICH Message Passing Interface library as an installable package. MPICH version is 3.3.2. and the package is pre-installed by default when generating the Fedora 33 filesystem image (see ACME EA section).
The OpenMP support was added through the LLVM compiler. The LLVM compiler and its OpenMP support library (libomp.so) are available at the top of this page. In addition, the OpenMP support library is also pre-installed within the Fedora 33 filesystem image (see ACME EA section).
Workflow Runtimes
COMPSs/PyCOMPSs
COMPSs is a task-based programming model and runtime system to implement parallel distributed workflows. Despite the core of the COMPSs runtime is written in Java it also offers binginds for C++ and Python (PyCOMPSs). These binginds interact with the runtime using Java Native Interface. COMPs/PyCOMPSs workflows are executed in a master-worker mode, where the workflow is executed in a master process and the tasks are executed in the worker processes which can be spawned in the same or different computing nodes. The spawn of the processes is performed by Secure Shell and the comunication between master and worker nodes are performed by TCP/IP. The COMPSs runtime is integrated with Extrae in order to generate exceution traces for performance analysis. Source code of the COMPSs runtime including RISC-V 64 bits support can be found in the COMPSs github repository and the RPM packages can be found in the MEEP RPM repository
Data Analytics Runtimes
TensorFlow Lite
TensorFlow is a free and open-source software library for machine learning and artificial intelligence. It can be used across a range of tasks but has a particular focus on training and inference of deep neural networks. Due to the build system did not support for RISC-V on MEEP we employ TensorFlow Lite framework. TensorFlow Lite only provides inference and it is designed focusing on edge environments.
TensorFlow Lite is offered as a RPM package containing the runtime.
Apache Spark
Apache Spark is an open-source unified analytics engine for large-scale data processing. Spark provides an interface for programming clusters with implicit data parallelism and fault tolerance.
Spark provides two modes of execution:
- Standalone: master and worker node are within the same host. It is limited by the amount of resources available.
- Multi-node: there is a master node and multiple worker nodes. The worker nodes get the task distributed across them. It provides a better performance as we get n times more resources than single-node execution. Where n is the amount of nodes we enable. Due to the high demand of development boards and the limited availability we are for now limiting ourselves to three nodes although it is possible to expand it to more.
Apache Spark is offered as a RPM package containing the runtime.
HPC Libraries
BLIS
BLIS stands for BLAS-like Library Instantiation Software and is the library employed to give applications the linear algebra functionalities that they required.
MEEP explores and tests the BLIS library in a set of different environments, with different specifications and features. This is the complete list of supported BLIS versions per platform:
Platform | BLIS version | BLIS repository branch |
---|---|---|
MareNostrum4 | Single- & multi-thread | scalar & vec instr | mn4-seq-omp-scalar-vec |
Unmatched & Acme-EA-v0 | Single- & multi-thread | scalar instr | unmatched-seq-omp-scalar |
AllwinnerD1 | Single-thread | scalar instr | allwinnerd1-seq-scalar |
Single-thread | vec instr (LLVM RVV-0.7) | allwinnerd1-vec-rvv-0.7 | |
EPI-SDV | Single-thread | scalar instr | epi-sdv-seq-scalar |
Single-thread | vector instr (LLVM RVV-0.7) | epi-sdv-vec-rvv-0.7 |
Furthermore, we also provide a set of BLIS RPM packages for each of the ACME-EA releases. This is the list of available RPMs: Click here