All Projects → bsc-pm → mcxx

bsc-pm / mcxx

Licence: LGPL-3.0 and 2 other licenses found Licenses found LGPL-3.0 LICENSE GPL-3.0 COPYING LGPL-3.0 COPYING.LESSER
Mercurium is a C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping developed by the Programming Models group at the Barcelona Supercomputing Center

Programming Languages

c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language
fortran
972 projects
python
139335 projects - #7 most used programming language
Makefile
30231 projects
M4
1887 projects

Projects that are alternatives of or similar to mcxx

nanox
Nanos++ is a runtime designed to serve as runtime support in parallel environments. It is mainly used to support OmpSs, a extension to OpenMP developed at BSC.
Stars: ✭ 37 (-37.29%)
Mutual labels:  openmp, ompss
claw-compiler
CLAW Compiler for Performance Portability
Stars: ✭ 38 (-35.59%)
Mutual labels:  openmp, source-to-source
Occa
JIT Compilation for Multiple Architectures: C++, OpenMP, CUDA, HIP, OpenCL, Metal
Stars: ✭ 230 (+289.83%)
Mutual labels:  openmp
matrix multiplication
Parallel Matrix Multiplication Using OpenMP, Phtreads, and MPI
Stars: ✭ 41 (-30.51%)
Mutual labels:  openmp
cpu-gbfilter
♨️ Optimized Gaussian blur filter on CPU.
Stars: ✭ 14 (-76.27%)
Mutual labels:  openmp
Foundations of HPC 2021
This repository collects the materials from the course "Foundations of HPC", 2021, at the Data Science and Scientific Computing Department, University of Trieste
Stars: ✭ 22 (-62.71%)
Mutual labels:  openmp
URT
Fast Unit Root Tests and OLS regression in C++ with wrappers for R and Python
Stars: ✭ 70 (+18.64%)
Mutual labels:  openmp
Dive Into Ml System
Dive into machine learning system, start from reinventing the wheel.
Stars: ✭ 220 (+272.88%)
Mutual labels:  openmp
libquo
Dynamic execution environments for coupled, thread-heterogeneous MPI+X applications
Stars: ✭ 21 (-64.41%)
Mutual labels:  openmp
flextool
C++ compile-time programming (serialization, reflection, code modification, enum to string, better enum, enum to json, extend or parse language, etc.)
Stars: ✭ 32 (-45.76%)
Mutual labels:  source-to-source
gardenia
GARDENIA: Graph Analytics Repository for Designing Efficient Next-generation Accelerators
Stars: ✭ 22 (-62.71%)
Mutual labels:  openmp
clava
C/C++ Source-to-Source Tool based on Clang
Stars: ✭ 55 (-6.78%)
Mutual labels:  source-to-source
mython
The Mython extensible variant of the Python programming language.
Stars: ✭ 16 (-72.88%)
Mutual labels:  source-to-source
Guided Missile Simulation
Guided Missile, Radar and Infrared EOS Simulation Framework written in Fortran.
Stars: ✭ 33 (-44.07%)
Mutual labels:  openmp
ByteSlice
"Byteslice: Pushing the envelop of main memory data processing with a new storage layout" (SIGMOD'15)
Stars: ✭ 24 (-59.32%)
Mutual labels:  openmp
Abyss
🔬 Assemble large genomes using short reads
Stars: ✭ 219 (+271.19%)
Mutual labels:  openmp
contech
The Contech analysis framework provides the means for generating and analyzing task graphs that enable computer architects and programmers to gain a deeper understanding of parallel programs.
Stars: ✭ 43 (-27.12%)
Mutual labels:  openmp
FoxNN
Simple neural network
Stars: ✭ 20 (-66.1%)
Mutual labels:  openmp
NPB-CPP
NAS Parallel Benchmark Kernels in C/C++. The parallel versions are in FastFlow, TBB, and OpenMP.
Stars: ✭ 18 (-69.49%)
Mutual labels:  openmp
com2ann
Tool for translation type comments to type annotations in Python
Stars: ✭ 115 (+94.92%)
Mutual labels:  source-to-source

Mercurium C/C++/Fortran source-to-source compiler

Mercurium is a C/C++/Fortran source-to-source compilation infrastructure aimed at fast prototyping developed by the Programming Models group at the Barcelona Supercomputing Center.

Mercurium is used, together with the Nanos++ Runtime Library, to implement the OmpSs programming model. Both tools provide also an implementation of OpenMP 3.1. More recently, Mercurium has been also used to implement the OmpSs-2 programming model together with the Nanos6 Runtime Library.

Apart from that, since Mercurium is quite extensible it has been used to implement other programming models or compiler transformations, examples include Cell Superscalar, Software Transactional Memory, Distributed Shared Memory or the ACOTES project, just to name a few.

Extending Mercurium is achieved using a plugin architecture, where plugins represent several phases of the compiler. These plugins are written in C++ and dynamically loaded by the compiler according to the chosen profile configuration. Code transformations can be implemented in terms of source code (there is no need to modify or know the internal syntactic representation of the compiler).

Installation

  1. Make sure you fulfill the build requirements

  2. Download Mercurium's code

    1. From our repo
      • Clone Mercurium's repository

        • From GitHub:

            $ git clone https://github.com/bsc-pm/mcxx.git
          
        • From our internal GitLab repository (BSC users only):

            $ git clone https://pm.bsc.es/gitlab/mercurium/mcxx.git
          
      • Run autoreconf in the newly created mcxx directory

          $ cd mcxx
          $ autoreconf -fiv
          <<<autoreconf output>>>
        
    2. From a distributed tarball
      • Go to OmpSs downloads and grab the latest version of the compiler. Unpack the file and enter in the directory

          $ tar xvzf mcxx-<<version>>.tar.gz
          $ cd mcxx-<<version>>
        
  3. Run configure. Check the configure flags to enable more or less features in the compiler. By default the compiler does not have anything enabled. Set the environment variable MERCURIUM to the directory where you want to install Mercurium

     $ export MERCURIUM=/path/to/install/mercurium
     $ ./configure --prefix=$MERCURIUM <<configure-flags>>
    
  4. Build and install

     $ make
     <<<compilation output>>>
     $ make install
    
  5. Add the installed binaries to your PATH

     $ export PATH=$MERCURIUM:$PATH
    

And that's all!

Mercurium profiles

Depending on the configure flags used to configure Mercurium, you may have some Mercurium profiles or others. A Mercurium profile is basically a file with a predefined configuration that specifies the behavior of Mercurium. For example, a profile specifies which phases of Mercurium have to be executed or which backend compiler should be used.

Any installation of Mercurium has, at least, the plain profiles (plaincc, plaincxx and plainfc for C, C++ and Fortran languages respectively). These profiles do not transform any OpenMP/OmpSs pragma, they basically process your code and generate it again.

For more information check our list of Mercurium's profiles.

Contact Information

For questions, suggestions and bug reports, you can contact us through the [email protected]

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].