CArMA is the C++ API for Massively parallel Applications. It provides a set of C++ classes for an easy integration of GPU accelerated numerical tools into complex applications.

CArMA is built on top of the CUDA toolkit from NVIDIA. CUDA provides a large collection of tools to perform scientific computing (CuFFT, CuBLAS, CuRAND). Moreover, several libraries like MAGMA have been developed using CUDA and provide additional features very useful for scientific computing.

The goal of CArMA is to provide an easy access to rather low level GPU features through the use of C++ classes. 3 classes are used to control the CUDA context:
  • the CArMA device providing information on a specific device
  • the CArMA context itself, regrouping the information about the overall system configuration
  • the CArMA streams, containers for a collection of wrappers to CUDA streams
CArMA provides also 2 main classes for the handling of data on the GPU memory and the system memory:
  • the CArMA object providing a container for the manipulation of data on the GPU
  • the CArMA host object, providing a container for data on the system memory tagged and aligned so as to be accessed by the GPU DMA engine

Additionally, CArMA provides a set of wrappers to various libraries part of or based on the CUDA toolkit to manipulate CArMA objects and perform optimized computations.

CArMA can be used to easily build higher level applications. The SuTrA library is an exemple of such use. CArMA can also be bound to an interpreted language for a simplified access to basic GPU features. The YoGA plugin is an exemple of such use.

Updated by Damien Gratadour over 10 years ago · 8 revisions