In preparation for my C++Now talk entitled The Future of Accelerator Programming in C++ I am currently reviewing numerous C++ libraries. I put together a catalogue of questions for these reviews. The questions are intended to gauge scope, use-cases, performance, quality and level of abstraction of each library.
- Is concurrency supported?
Accelerators are massive parallel devices, but due to memory transfer overhead, concurrency is a central aspect for many efficient programs.
- How is memory managed?
This is a central question since simple and efficient management of distributed memory is not trivial.
- What parallel primitives are provided?
Parallel primitives are essential building blocks for many accelerator-enabled programs.
- How is numerical analysis supported?
Massive parallel accelerator architectures lend themselves well to numerical analysis.
- How can users specify custom accelerator functions?
A useful accelerator library should allow users to specify custom functions.
- What is the intended use-case for the library? Who is the target audience?
Is the library suitable for i.e. high performance computing, prototyping or signal processing?
- What are noteworthy features of the library?
This is a list of all libraries that I am reviewing:
|Bolt||X2||TBB, C++ AMP||link|
|Kokkos||X||OMP, PTH, seq||link|
If I missed a library, please let me know. I will add it immediately. I’m going to publish selected library reviews here on my blog. I’m hoping to discuss specific reviews with the original library authors. The conclusions of these reviews will be part of my talk at C++Now.
- either header-only library, link-library or library that requires compiler support
- custom AMD OpenCL Static C++ Kernel Language extension required
- CUDA SDK required at runtime
- Prototype implemenation available here
- only specification released so far
- disclaimer: library developed by the author