Bolt
1.3
C++ template library with support for OpenCL
|
Bolt function is designed to be executed with four code paths (OpenCL™, C++ AMP, Multicore CPU and Serial CPU). The default mode is "Automatic" which means it will go into GPU path first, then Multicore CPU (Intel TBB), then SerialCpu, control will go to other paths only if the selected one is not found. Forcing the mode to any code path will run the function with that code path. All Bolt functions have OpenCL™, Multicore CPU and Serial path implementation.
API | OpenCL™ GPU | AMP | Multicore TBB | Serial |
---|---|---|---|---|
constant_iterator | YES | YES | YES | YES |
copy | YES | YES | YES | YES |
copy_n | YES | YES | YES | YES |
count | YES | YES | YES | YES |
count_if | YES | YES | YES | YES |
counting_iterator | YES | YES | YES | YES |
device_vector | YES | YES | YES | YES |
exclusive_scan | YES | YES | YES | YES |
exclusive_scan_by_key | YES | YES | YES | YES |
fill | YES | YES | YES | YES |
fill_n | YES | YES | YES | YES |
generate | YES | YES | YES | YES |
generate_n | YES | YES | YES | YES |
inclusive_scan | YES | YES | YES | YES |
inclusive_scan_by_key | YES | YES | YES | YES |
inner_product | YES | YES | YES | YES |
max_element | YES | YES | YES | YES |
min_element | YES | YES | YES | YES |
permutation_iterator | YES1 | YES2 | YES3 | YES3 |
reduce | YES | YES | YES | YES |
reduce_by_key | YES | YES | YES | YES |
sort | YES | YES | YES | YES |
sort_by_key | YES | YES | YES | YES |
stable_sort | YES | YES | YES | YES |
stable_sort_by_key | YES | YES | YES | YES |
transform | YES | YES | YES | YES |
transform_exclusive_scan | YES | YES | YES | YES |
transform_inclusive_scan | YES | YES | YES | YES |
transform_iterator | YES | YES2 | YES | YES |
transform_reduce | YES | YES | YES | YES |
binary_search | YES | YES | YES | YES |
merge | YES | YES | YES | YES |
scatter | YES | YES | YES | YES |
scatter_if | YES | YES | YES | YES |
gather | YES | YES | YES | YES |
gather_if | YES | YES | YES | YES |
copy_if | NO | YES | YES | YES |
find | NO | YES | YES | YES |
find_if | NO | YES | YES | YES |
find_if_not | NO | YES | YES | YES |
for_each | NO | YES | YES | YES |
for_each_n | NO | YES | YES | YES |
all_of | NO | YES | YES | YES |
any_of | NO | YES | YES | YES |
none_of | NO | YES | YES | YES |
remove | NO | YES | YES | YES |
remove_if | NO | YES | YES | YES |
remove_copy | NO | YES | YES | YES |
remove_copy_if | NO | YES | YES | YES |
replace | NO | YES | YES | YES |
replace_if | NO | YES | YES | YES |
replace_copy | NO | YES | YES | YES |
replace_copy_if | NO | YES | YES | YES |
unique | NO | YES | YES | YES |
unique_copy | NO | YES | YES | YES |
transform_if | NO | YES | YES | YES |
1 - Works with device_vector iterators, and transform routine only
2 - Works only with device_vector iterators
3 - Supported on C++ AMP path, but not on OpenCL path. Slower performance expected