Bolt  1.1
C++ template library with support for OpenCL

Table of Contents

General

Does Bolt require linking to a library?

Yes, Bolt includes a small static library that must be linked into a user program to properly resolve symbols. Since Bolt is a template library, almost all functionality is written in header files, but OpenCL ™ follows an online compilation model to be included in a library, not in header files.

Does Bolt depend on any other libraries?

Yes, Bolt contains dependencies on Boost. All dependent header files and pre-compiled libraries are available in the Bolt SDK.

What algorithm family does Bolt currently support?

Sort, Scan, Transform, Reduce, Transform reduce, Copy, Count, Fill, Generate, inner_product, Min, Max, Binary search, Merge, Scatter and Gather.

What version of OpenCL does Bolt currently require?

OpenCL Programming Specification version 1.2.

Does Bolt require the AMD OpenCL runtime?

Yes, Bolt requires the use of templates in kernel code; currently, AMD is the only vendor to provide this support.

Which Catalyst ™ package should I use with Bolt?

Generally speaking, the latest Catalyst package contains the most recent OpenCL runtime. As of this writing, the recommended Catalyst package is 12.10.

Will Bolt be provided as Open Source software?

Bolt is planned to be completely open source in the near future. Most of the algorithm functionality is located in header files, so a majority of the source is already available.

What is the applicable license for Bolt?

The Apache License, Version 2.0.

Performance

When should I use device_vector vs regular host memory?

bolt::cl::device_vector manages device-local memory and is degined to deliver higher performance on discrete GPU system; however, host memory interfaces eliminate the need to create and manage device_vectors. If memory is re-used across multiple Bolt calls, or is referenced by other kernels, using device_vector delivers higher performance.