We present a C++14 library for performance portability of scientific computing codes across CPU and GPU architectures. Our library combines generic data structures like vectors, multi-dimensional arrays, maps, graphs, and sparse grids with basic, reusable algorithms like convolutions, sorting, prefix sum, reductions, and scan. The memory layout of the data structures is adapted at compile-time using tuples with optional memory mirroring between CPU and GPU. We combine this transparent memory mapping with generic algorithms under two alternative programming interfaces: a CUDA-like kernel interface for multi-core CPUs, Nvidia GPUs, and AMD GPUs, as well as a lambda interface. We validate and benchmark the presented library using micro-benchmarks, showing that the abstractions introduce negligible performance overhead, and we compare performance against the current state of the art.
%0 Conference Paper
%1 incardona2023library
%A Incardona, Pietro
%A Gupta, Aryaman
%A Yaskovets, Serhii
%A Sbalzarini, Ivo F.
%B Euro-Par 2022
%C Germany
%D 2023
%E Singer, Jeremy
%E Elkhatib, Yehia
%E Blanco Heras, Dora
%E Diehl, Patrick
%E Brown, Nick
%E Ilic, Aleksandar
%I Springer Science and Business Media B.V.
%K nopdf topic_lifescience
%P 109--120
%R 10.1007/978-3-031-31209-0_8
%T A C++ Library for Memory Layout and Performance Portability of Scientific Applications
%X We present a C++14 library for performance portability of scientific computing codes across CPU and GPU architectures. Our library combines generic data structures like vectors, multi-dimensional arrays, maps, graphs, and sparse grids with basic, reusable algorithms like convolutions, sorting, prefix sum, reductions, and scan. The memory layout of the data structures is adapted at compile-time using tuples with optional memory mirroring between CPU and GPU. We combine this transparent memory mapping with generic algorithms under two alternative programming interfaces: a CUDA-like kernel interface for multi-core CPUs, Nvidia GPUs, and AMD GPUs, as well as a lambda interface. We validate and benchmark the presented library using micro-benchmarks, showing that the abstractions introduce negligible performance overhead, and we compare performance against the current state of the art.
%@ 9783031312083
@inproceedings{incardona2023library,
abstract = {We present a C++14 library for performance portability of scientific computing codes across CPU and GPU architectures. Our library combines generic data structures like vectors, multi-dimensional arrays, maps, graphs, and sparse grids with basic, reusable algorithms like convolutions, sorting, prefix sum, reductions, and scan. The memory layout of the data structures is adapted at compile-time using tuples with optional memory mirroring between CPU and GPU. We combine this transparent memory mapping with generic algorithms under two alternative programming interfaces: a CUDA-like kernel interface for multi-core CPUs, Nvidia GPUs, and AMD GPUs, as well as a lambda interface. We validate and benchmark the presented library using micro-benchmarks, showing that the abstractions introduce negligible performance overhead, and we compare performance against the current state of the art.},
added-at = {2024-11-28T16:27:18.000+0100},
address = {Germany},
author = {Incardona, Pietro and Gupta, Aryaman and Yaskovets, Serhii and Sbalzarini, Ivo F.},
biburl = {https://puma.scadsai.uni-leipzig.de/bibtex/26ad8a430709195b480fd0d14a1a28291/scadsfct},
booktitle = {Euro-Par 2022},
doi = {10.1007/978-3-031-31209-0_8},
editor = {Singer, Jeremy and Elkhatib, Yehia and Blanco Heras, Dora and Diehl, Patrick and Brown, Nick and Ilic, Aleksandar},
interhash = {41a9bf1430b11b1516624991b701260d},
intrahash = {6ad8a430709195b480fd0d14a1a28291},
isbn = {9783031312083},
keywords = {nopdf topic_lifescience},
language = {English},
note = {Publisher Copyright: {\textcopyright} 2023, The Author(s), under exclusive license to Springer Nature Switzerland AG.; 28th International European Conference on Parallel and Distributed Computing , Euro-Par 2022 ; Conference date: 22-08-2022 Through 26-08-2022},
pages = {109--120},
publisher = {Springer Science and Business Media B.V.},
series = {Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics)},
timestamp = {2025-08-23T23:53:29.000+0200},
title = {A C++ Library for Memory Layout and Performance Portability of Scientific Applications},
year = 2023
}