Giter Site home page Giter Site logo

muse117 / alpaka Goto Github PK

View Code? Open in Web Editor NEW

This project forked from alpaka-group/alpaka

0.0 1.0 0.0 471.81 MB

Abstraction Library for Parallel Kernel Acceleration :llama:

Home Page: https://alpaka.readthedocs.io

License: Mozilla Public License 2.0

C++ 91.18% CMake 5.65% Shell 3.17%

alpaka's Introduction

alpaka - Abstraction Library for Parallel Kernel Acceleration

Continuous Integration Documentation Status Doxygen Language Platforms License

alpaka

The alpaka library is a header-only C++17 abstraction library for accelerator development.

Its aim is to provide performance portability across accelerators through the abstraction (not hiding!) of the underlying levels of parallelism.

It is platform independent and supports the concurrent and cooperative use of multiple devices such as the hosts CPU as well as attached accelerators as for instance CUDA GPUs and Xeon Phis (currently native execution only). A multitude of accelerator back-end variants using CUDA, OpenMP (2.0/4.0), Boost.Fiber, std::thread and also serial execution is provided and can be selected depending on the device. Only one implementation of the user kernel is required by representing them as function objects with a special interface. There is no need to write special CUDA, OpenMP or custom threading code. Accelerator back-ends can be mixed within a device queue. The decision which accelerator back-end executes which kernel can be made at runtime.

The abstraction used is very similar to the CUDA grid-blocks-threads division strategy. Algorithms that should be parallelized have to be divided into a multi-dimensional grid consisting of small uniform work items. These functions are called kernels and are executed in parallel threads. The threads in the grid are organized in blocks. All threads in a block are executed in parallel and can interact via fast shared memory. Blocks are executed independently and can not interact in any way. The block execution order is unspecified and depends on the accelerator in use. By using this abstraction the execution can be optimally adapted to the available hardware.

Software License

alpaka is licensed under MPL-2.0.

Documentation

The alpaka documentation can be found in the online manual. The documentation files in .rst (reStructuredText) format are located in the docs subfolder of this repository. The source code documentation is generated with doxygen.

Accelerator Back-ends

Accelerator Back-end Lib/API Devices Execution strategy grid-blocks Execution strategy block-threads
Serial n/a Host CPU (single core) sequential sequential (only 1 thread per block)
OpenMP 2.0+ blocks OpenMP 2.0+ Host CPU (multi core) parallel (preemptive multitasking) sequential (only 1 thread per block)
OpenMP 2.0+ threads OpenMP 2.0+ Host CPU (multi core) sequential parallel (preemptive multitasking)
OpenMP 5.0+ OpenMP 5.0+ Host CPU (multi core) parallel (undefined) parallel (preemptive multitasking)
GPU parallel (undefined) parallel (lock-step within warps)
OpenACC (experimental) OpenACC 2.0+ Host CPU (multi core) parallel (undefined) parallel (preemptive multitasking)
GPU parallel (undefined) parallel (lock-step within warps)
std::thread std::thread Host CPU (multi core) sequential parallel (preemptive multitasking)
Boost.Fiber boost::fibers::fiber Host CPU (single core) sequential parallel (cooperative multitasking)
TBB TBB 2.2+ Host CPU (multi core) parallel (preemptive multitasking) sequential (only 1 thread per block)
CUDA CUDA 9.0+ NVIDIA GPUs parallel (undefined) parallel (lock-step within warps)
HIP(clang) HIP 4.0+ AMD GPUs parallel (undefined) parallel (lock-step within warps)

Supported Compilers

This library uses C++17 (or newer when available).

Accelerator Back-end gcc 7.5
(Linux)
gcc 8.5
(Linux)
gcc 9.4
(Linux)
gcc 10.3
(Linux)
gcc 11.1
(Linux)
clang 5-7
(Linux)
clang 8-9
(Linux)
clang 10
(Linux)
clang 11
(Linux)
clang 12
(Linux)
clang 13
(Linux)
Apple LLVM 11.3.1/12.4.0/12.5.1/13.0.0
(macOS)
MSVC 2019
(Windows)
Serial
OpenMP 2.0+ blocks
OpenMP 2.0+ threads
OpenMP 5.0 (CPU) -
std::thread
Boost.Fiber
TBB
CUDA (nvcc)
(CUDA 11.0-11.5)

(CUDA 11.0-11.5)

(CUDA 11.0-11.5)

(CUDA 11.5)

(CUDA 11.0-11.5)

(CUDA 11.1-11.5)

(CUDA 11.4-11.5)

(CUDA 11.4-11.5)
-
(CUDA 11.2-11.5)
CUDA (clang) - - - - - - -
(CUDA 9.2-10.1)

(CUDA 10.0-10.2)
- - -
HIP-4.2 (clang) - - -
HIP-4.3 and 4.5 (clang) - -

Other compilers or combinations marked with ❌ in the table above may work but are not tested in CI and are therefore not explicitly supported.

Dependencies

Boost 1.74.0+ is the only mandatory external dependency. The alpaka library itself just requires header-only libraries. However some of the accelerator back-end implementations require different boost libraries to be built.

When an accelerator back-end using Boost.Fiber is enabled, boost-fiber and all of its dependencies are required to be built in C++17 mode ./b2 cxxflags="-std=c++17".

When an accelerator back-end using CUDA is enabled, version 11.0 (with nvcc as CUDA compiler) or version 9.2 (with clang as CUDA compiler) of the CUDA SDK is the minimum requirement. NOTE: When using nvcc as CUDA compiler, the CUDA accelerator back-end can not be enabled together with the Boost.Fiber accelerator back-end due to bugs in the nvcc compiler. NOTE: When using clang as a native CUDA compiler, the CUDA accelerator back-end can not be enabled together with the Boost.Fiber accelerator back-end or any OpenMP accelerator back-end because this combination is currently unsupported. NOTE: Separable compilation is disabled by default and can be enabled via the CMake flag CMAKE_CUDA_SEPARABLE_COMPILATION.

When an accelerator back-end using OpenMP is enabled, the compiler and the platform have to support the corresponding minimum OpenMP version.

When an accelerator back-end using TBB is enabled, the compiler and the platform have to support the corresponding minimum TBB version.

Usage

The library is header only so nothing has to be built. CMake 3.18+ is required to provide the correct defines and include paths. Just call ALPAKA_ADD_EXECUTABLE instead of CUDA_ADD_EXECUTABLE or ADD_EXECUTABLE and the difficulties of the CUDA nvcc compiler in handling .cu and .cpp files are automatically taken care of. Source files do not need any special file ending. Examples of how to utilize alpaka within CMake can be found in the example folder.

The whole alpaka library can be included with: #include <alpaka/alpaka.hpp> Code that is not intended to be utilized by the user is hidden in the detail namespace.

Furthermore, for a CUDA-like experience when adopting alpaka we provide the library cupla. It enables a simple and straightforward way of porting existing CUDA applications to alpaka and thus to a variety of accelerators.

Introduction

For a quick introduction, feel free to playback the recording of our presentation at GTC 2016:

  • E. Zenker, R. Widera, G. Juckeland et al., Porting the Plasma Simulation PIConGPU to Heterogeneous Architectures with Alpaka, video link (39 min)

Citing alpaka

Currently all authors of alpaka are scientists or connected with research. For us to justify the importance and impact of our work, please consider citing us accordingly in your derived work and publications:

% Peer-Reviewed Publication %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Peer reviewed and accepted publication in
%   "2nd International Workshop on Performance Portable
%    Programming Models for Accelerators (P^3MA)"
% colocated with the
%   "2017 ISC High Performance Conference"
%   in Frankfurt, Germany
@inproceedings{MathesP3MA2017,
  author    = {{Matthes}, A. and {Widera}, R. and {Zenker}, E. and {Worpitz}, B. and
               {Huebl}, A. and {Bussmann}, M.},
  title     = {Tuning and optimization for a variety of many-core architectures without changing a single line of implementation code
               using the Alpaka library},
  archivePrefix = "arXiv",
  eprint    = {1706.10086},
  keywords  = {Computer Science - Distributed, Parallel, and Cluster Computing},
  day       = {30},
  month     = {Jun},
  year      = {2017},
  url       = {https://arxiv.org/abs/1706.10086},
}

% Peer-Reviewed Publication %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Peer reviewed and accepted publication in
%   "The Sixth International Workshop on
%    Accelerators and Hybrid Exascale Systems (AsHES)"
% at the
%   "30th IEEE International Parallel and Distributed
%    Processing Symposium" in Chicago, IL, USA
@inproceedings{ZenkerAsHES2016,
  author    = {Erik Zenker and Benjamin Worpitz and Ren{\'{e}} Widera
               and Axel Huebl and Guido Juckeland and
               Andreas Kn{\"{u}}pfer and Wolfgang E. Nagel and Michael Bussmann},
  title     = {Alpaka - An Abstraction Library for Parallel Kernel Acceleration},
  archivePrefix = "arXiv",
  eprint    = {1602.08477},
  keywords  = {Computer science;CUDA;Mathematical Software;nVidia;OpenMP;Package;
               performance portability;Portability;Tesla K20;Tesla K80},
  day       = {23},
  month     = {May},
  year      = {2016},
  publisher = {IEEE Computer Society},
  url       = {http://arxiv.org/abs/1602.08477},
}


% Original Work: Benjamin Worpitz' Master Thesis %%%%%%%%%%
%
@MasterThesis{Worpitz2015,
  author = {Benjamin Worpitz},
  title  = {Investigating performance portability of a highly scalable
            particle-in-cell simulation code on various multi-core
            architectures},
  school = {{Technische Universit{\"{a}}t Dresden}},
  month  = {Sep},
  year   = {2015},
  type   = {Master Thesis},
  doi    = {10.5281/zenodo.49768},
  url    = {http://dx.doi.org/10.5281/zenodo.49768}
}

Contributing

Rules for contributions can be found in CONTRIBUTING.md

Authors

Maintainers* and Core Developers

  • Benjamin Worpitz* (original author)
  • Dr. Sergei Bastrakov*
  • Dr. Antonio Di Pilato
  • Simeon Ehrig
  • Bernhard Manfred Gruber
  • Dr. Axel Huebl*
  • Dr. Jeffrey Kelling
  • Jan Stephan*
  • Dr. Jiří Vyskočil
  • Rene Widera*

Former Members, Contributions and Thanks

  • Dr. Michael Bussmann
  • Mat Colgrove
  • Valentin Gehrke
  • Maximilian Knespel
  • Jakob Krude
  • Alexander Matthes
  • Hauke Mewes
  • Phil Nash
  • Dr. David M. Rogers
  • Mutsuo Saito
  • Jonas Schenke
  • Daniel Vollmer
  • Matthias Werner
  • Bert Wesarg
  • Malte Zacharias
  • Erik Zenker

alpaka's People

Contributors

ax3l avatar benjamin-worpitz-goto avatar benjaminw3 avatar bernhardmgruber avatar bertwesarg avatar derwaldschrat avatar erikzenker avatar felicepantaleo avatar frobnitzem avatar fwyzard avatar j-stephan avatar jkelling avatar jkrude avatar kloppstock avatar m-zacharias avatar mcolg avatar mxmlnkn avatar philsquared avatar psychocoderhpc avatar q-p avatar sbastrakov avatar simeonehrig avatar sliwowitz avatar tdd11235813 avatar theziz avatar tonydp03 avatar tu-maurice avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.