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.

Iqra: Read, image by Farrukh

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:

Library CUDA OpenCL Other Type1 Thrust X OMP, TBB header Bolt X2 TBB, C++ AMP link VexCL X3 X header Boost.Compute X header C++ AMP X4 DX11 compiler SyCL X5 compiler ViennaCL X X OMP header SkePU X X OMP, seq header SkelCL X link HPL X link ArrayFire X X link CLOGS X link hemi X header MTL4 X header Kokkos X OMP, PTH, seq link Aura6 X X header

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.