English
 
Help Privacy Policy Disclaimer
  Advanced SearchBrowse

Item

ITEM ACTIONSEXPORT

Released

Journal Article

A portable C++ library for memory and compute abstraction on multi-core CPUs and GPUs.

MPS-Authors
/cone/persons/resource/persons219256

Incardona,  Pietro
Max Planck Institute for Molecular Cell Biology and Genetics, Max Planck Society;

/cone/persons/resource/

Gupta,  Aryaman
Max Planck Institute for Molecular Cell Biology and Genetics, Max Planck Society;

/cone/persons/resource/

Yaskovets,  Serhii
Max Planck Institute for Molecular Cell Biology and Genetics, Max Planck Society;

/cone/persons/resource/persons219620

Sbalzarini,  Ivo F.
Max Planck Institute for Molecular Cell Biology and Genetics, Max Planck Society;

Fulltext (restricted access)
There are currently no full texts shared for your IP range.
Fulltext (public)
There are no public fulltexts stored in PuRe
Supplementary Material (public)
There is no public supplementary material available
Citation

Incardona, P., Gupta, A., Yaskovets, S., & Sbalzarini, I. F. (2023). A portable C++ library for memory and compute abstraction on multi-core CPUs and GPUs. Concurrency and Computation: Practice and Experience, 35(25): e7870, pp. 1-15. doi:10.1002/cpe.7870.


Cite as: https://hdl.handle.net/21.11116/0000-000E-AA96-9
Abstract
We present a C++ library for transparent memory and compute abstraction across CPU and GPU architectures. Our library combines generic data structures like vectors, multi-dimensional arrays, maps, graphs, and sparse grids with basic generic algorithms like arbitrary-dimensional convolutions, copying, merging, sorting, prefix sum, reductions, neighbor search, and filtering. The memory layout of the data structures is adapted at compile time using C++ tuples with optional memory double-mapping between host and device and the capability of using memory managed by external libraries with no data copying. We combine this transparent memory layout with generic thread-parallel algorithms under two alternative common interfaces: a CUDA-like kernel interface and a lambda-function interface. We quantify the memory and compute performance and portability of our implementation using micro-benchmarks, showing that the abstractions introduce negligible performance overhead, and we compare performance against the current state of the art in a real-world scientific application from computational fluid mechanics.