Tested Standard C++ APIs
The basic functionality for several C++ standard APIs has been tested for use in SYCL* kernels. These APIs can be employed in device kernels similarly to how they are employed in code for a typical CPU-based platform. The Tested Standard C++ APIs are added to the namespace oneapi::dpl. The corresponding headers have been added in the Intel® oneAPI DPC++ Library (oneDPL) package. In order to use these APIs via the namespace oneapi::dpl, the headers in <oneapi/dpl/...> must be included. Currently, Tested Standard C++ APIs can be used in two ways:
Via the namespace std:: and standard headers (for example: <utility>...)
Via the namespace oneapi::dpl and oneDPL headers (for example: <oneapi/dpl/utility>...)
Below is an example code that shows how to use oneapi::dpl::swap in SYCL device code:
#include <oneapi/dpl/utility>
#include <sycl/sycl.hpp>
#include <iostream>
constexpr sycl::access::mode sycl_read_write = sycl::access::mode::read_write;
class KernelSwap;
void kernel_test() {
sycl::queue deviceQueue;
sycl::range<1> numOfItems{2};
sycl::cl_int swap_num[2] = {4, 5};
std::cout << swap_num[0] << ", " << swap_num[1] << std::endl;
{
sycl::buffer<sycl::cl_int, 1> swap_buffer
(swap_num, numOfItems);
deviceQueue.submit([&](sycl::handler &cgh) {
auto swap_accessor = swap_buffer.get_access<sycl_read_write>(cgh);
cgh.single_task<class KernelSwap>([=]() {
int & num1 = swap_accessor[0];
int & num2 = swap_accessor[1];
oneapi::dpl::swap(num1, num2);
});
});
}
std::cout << swap_num[0] << ", " << swap_num[1] << std::endl;
}
int main() {
kernel_test();
return 0;
}
Use the following command to build and run the program (assuming it resides in the kernel_swap.cpp file):
dpcpp kernel_swap.cpp -o kernel_swap.exe
./kernel_swap.exe
The printed result is:
4, 5
5, 4
Tested Standard C++ API Reference
C++ Standard API |
libstdc++ |
libc++ |
MSVC |
---|---|---|---|
std::swap |
Tested |
Tested |
Tested |
std::lower_bound |
Tested |
Tested |
Tested |
std::upper_bound |
Tested |
Tested |
Tested |
std::binary_search |
Tested |
Tested |
Tested |
std::equal_range |
Tested |
Tested |
Tested |
std::tuple |
Tested |
Tested |
Tested |
std::pair |
Tested |
Tested |
Tested |
std::reference_wrapper |
Tested |
Tested |
Tested |
std::ref/cref |
Tested |
Tested |
Tested |
std::divides |
Tested |
Tested |
Tested |
std::minus |
Tested |
Tested |
Tested |
std::plus |
Tested |
Tested |
Tested |
std::negate |
Tested |
Tested |
Tested |
std::modulus |
Tested |
Tested |
Tested |
std::multiplies |
Tested |
Tested |
Tested |
std::equal_to |
Tested |
Tested |
Tested |
std::greater |
Tested |
Tested |
Tested |
std::greater_equal |
Tested |
Tested |
Tested |
std::less |
Tested |
Tested |
Tested |
std::less_equal |
Tested |
Tested |
Tested |
std::not_equal_to |
Tested |
Tested |
Tested |
std::bit_and |
Tested |
Tested |
Tested |
std::bit_not |
Tested |
Tested |
Tested |
std::bit_xor |
Tested |
Tested |
Tested |
std::bit_or |
Tested |
Tested |
Tested |
std::logical_and |
Tested |
Tested |
Tested |
std::logical_or |
Tested |
Tested |
Tested |
std::logical_not |
Tested |
Tested |
Tested |
std::binary_negate |
Tested |
Tested |
Tested |
std::unary_negate |
Tested |
Tested |
Tested |
std::not1/2 |
Tested |
Tested |
Tested |
std::initializer_list |
Tested |
Tested |
Tested |
std::forward |
Tested |
Tested |
Tested |
std::move |
Tested |
Tested |
Tested |
std::move_if_noexcept |
Tested |
Tested |
Tested |
std::integral_constant |
Tested |
Tested |
Tested |
std::is_same |
Tested |
Tested |
Tested |
std::is_base_of |
Tested |
Tested |
Tested |
std::is_base_of_union |
Tested |
Tested |
Tested |
std::is_convertible |
Tested |
Tested |
Tested |
std::extent |
Tested |
Tested |
Tested |
std::rank |
Tested |
Tested |
Tested |
std::remove_all_extents |
Tested |
Tested |
Tested |
std::remove_extent |
Tested |
Tested |
Tested |
std::add_const |
Tested |
Tested |
Tested |
std::add_cv |
Tested |
Tested |
Tested |
std::add_volatile |
Tested |
Tested |
Tested |
std::remove_const |
Tested |
Tested |
Tested |
std::remove_cv |
Tested |
Tested |
Tested |
std::remove_volatile |
Tested |
Tested |
Tested |
std::decay |
Tested |
Tested |
Tested |
std::conditional |
Tested |
Tested |
Tested |
std::enable_if |
Tested |
Tested |
Tested |
std::common_type |
Tested |
Tested |
Tested |
std::declval |
Tested |
Tested |
Tested |
std::alignment_of |
Tested |
Tested |
Tested |
std::is_arithmetic |
Tested |
Tested |
Tested |
std::is_fundamental |
Tested |
Tested |
Tested |
std::is_reference |
Tested |
Tested |
Tested |
std::is_object |
Tested |
Tested |
Tested |
std::is_scalar |
Tested |
Tested |
Tested |
std::is_compound |
Tested |
Tested |
Tested |
std::is_member_pointer |
Tested |
Tested |
Tested |
std::is_const |
Tested |
Tested |
Tested |
std::is_assignable |
Tested |
Tested |
Tested |
std::is_constructible |
Tested |
Tested |
Tested |
std::is_copy_assignable |
Tested |
Tested |
Tested |
std::is_copy_constructible |
Tested |
Tested |
Tested |
std::is_default_constructible |
Tested |
Tested |
Tested |
std::is_destructible |
Tested |
Tested |
Tested |
std::is_empty |
Tested |
Tested |
Tested |
std::is_literal_type |
Tested |
Tested |
Tested |
std::is_move_assignable |
Tested |
Tested |
Tested |
std::is_move_constructible |
Tested |
Tested |
Tested |
std::is_pod |
Tested |
Tested |
Tested |
std::is_signed |
Tested |
Tested |
Tested |
std::is_standard_layout |
Tested |
Tested |
Tested |
std::is_trivial |
Tested |
Tested |
Tested |
std::is_unsigned |
Tested |
Tested |
Tested |
std::is_volatile |
Tested |
Tested |
Tested |
std::is_trivially_assignable |
Tested |
Tested |
Tested |
std::is_trivially_constructible |
Tested |
Tested |
Tested |
std::is_trivially_copyable |
Tested |
Tested |
Tested |
std::array |
Tested |
Tested |
Tested |
std::ratio |
Tested |
Tested |
Tested |
std::complex |
Tested |
Tested |
Tested |
std::abs |
Tested |
Tested |
Tested |
std::arg |
Tested |
Tested |
Tested |
std::conj |
Tested |
Tested |
Tested |
std::exp |
Tested |
Tested |
Tested |
std::imag |
Tested |
Tested |
Tested |
std::norm |
Tested |
Tested |
Tested |
std::polar |
Tested |
Tested |
Tested |
std::proj |
Tested |
Tested |
Tested |
std::real |
Tested |
Tested |
Tested |
std::assert |
Tested |
Tested |
Tested |
std::sin |
Tested |
Tested |
Tested |
std::cos |
Tested |
Tested |
Tested |
std::tan |
Tested |
Tested |
Tested |
std::asin |
Tested |
Tested |
Tested |
std::acos |
Tested |
Tested |
Tested |
std::atan |
Tested |
Tested |
Tested |
std::atan2 |
Tested |
Tested |
Tested |
std::sinh |
Tested |
Tested |
Tested |
std::cosh |
Tested |
Tested |
Tested |
std::tanh |
Tested |
Tested |
Tested |
std::asinh |
Tested |
Tested |
Tested |
std::acosh |
Tested |
Tested |
Tested |
std::atanh |
Tested |
Tested |
Tested |
std::exp |
Tested |
Tested |
Tested |
std::frexp |
Tested |
Tested |
Tested |
std::ldexp |
Tested |
Tested |
Tested |
std::log |
Tested |
Tested |
Tested |
std::log10 |
Tested |
Tested |
Tested |
std::modf |
Tested |
Tested |
Tested |
std::exp2 |
Tested |
Tested |
Tested |
std::expm1 |
Tested |
Tested |
Tested |
std::ilogb |
Tested |
Tested |
Tested |
std::log1p |
Tested |
Tested |
Tested |
std::log2 |
Tested |
Tested |
Tested |
std::logb |
Tested |
Tested |
Tested |
std::pow |
Tested |
Tested |
Tested |
std::sqrt |
Tested |
Tested |
Tested |
std::cbrt |
Tested |
Tested |
Tested |
std::hypot |
Tested |
Tested |
Tested |
std::erf |
Tested |
Tested |
Tested |
std::erfc |
Tested |
Tested |
Tested |
std::tgamma |
Tested |
Tested |
Tested |
std::lgamma |
Tested |
Tested |
Tested |
std::fmod |
Tested |
Tested |
Tested |
std::remainder |
Tested |
Tested |
Tested |
std::remquo |
Tested |
Tested |
Tested |
std::nextafter |
Tested |
Tested |
Tested |
std::nearbyint |
Tested |
Tested |
Tested |
std::nearbyintf |
Tested |
Tested |
Tested |
std::fdim |
Tested |
Tested |
Tested |
std::optional |
Tested |
Tested |
Tested |
std::reduce |
Tested |
Tested |
Tested |
std::all_of |
Tested |
Tested |
Tested |
std::any_of |
Tested |
Tested |
Tested |
std::none_of |
Tested |
Tested |
Tested |
std::count |
Tested |
Tested |
Tested |
std::count_if |
Tested |
Tested |
Tested |
std::for_each |
Tested |
Tested |
Tested |
std::find |
Tested |
Tested |
Tested |
std::find_if |
Tested |
Tested |
Tested |
std::find_if_not |
Tested |
Tested |
Tested |
std::for_each_n |
Tested |
Tested |
Tested |
std::ceil |
Tested |
Tested |
Tested |
std::copy |
Tested |
Tested |
Tested |
std::copy_backward |
Tested |
Tested |
Tested |
std::copy_if |
Tested |
Tested |
Tested |
std::copy_n |
Tested |
Tested |
Tested |
std::copysign |
Tested |
Tested |
Tested |
std::copysignf |
Tested |
Tested |
Tested |
std::fabs |
Tested |
Tested |
Tested |
std::is_permutation |
Tested |
Tested |
Tested |
std::fill |
Tested |
Tested |
Tested |
std::fill_n |
Tested |
Tested |
Tested |
std::floor |
Tested |
Tested |
Tested |
std::fmax |
Tested |
Tested |
Tested |
std::fmaxf |
Tested |
Tested |
Tested |
std::fmin |
Tested |
Tested |
Tested |
std::fminf |
Tested |
Tested |
Tested |
std::move |
Tested |
Tested |
Tested |
std::move_backward |
Tested |
Tested |
Tested |
std::is_sorted |
Tested |
Tested |
Tested |
std::is_sorted_until |
Tested |
Tested |
Tested |
std::isgreater |
Tested |
Tested |
Tested |
std::isgreaterequal |
Tested |
Tested |
Tested |
std::isinf |
Tested |
Tested |
Tested |
std::isless |
Tested |
Tested |
Tested |
std::islessequal |
Tested |
Tested |
Tested |
std::isnan |
Tested |
Tested |
Tested |
std::isunordered |
Tested |
Tested |
Tested |
std::partial_sort |
Tested |
Tested |
Tested |
std::partial_sort_copy |
Tested |
Tested |
Tested |
std::is_heap |
Tested |
Tested |
Tested |
std::is_heap_until |
Tested |
Tested |
Tested |
std::make_heap |
Tested |
Tested |
Tested |
std::max |
Tested |
Tested |
Tested |
std::min |
Tested |
Tested |
Tested |
std::nan |
Tested |
Tested |
Tested |
std::nanf |
Tested |
Tested |
Tested |
std::numeric_limits<T>::infinity |
Tested |
Tested |
Tested |
std::numeric_limits<T>::lowest |
Tested |
Tested |
Tested |
std::numeric_limits<T>::max |
Tested |
Tested |
Tested |
std::numeric_limits<T>::quiet_NaN |
Tested |
Tested |
Tested |
std::push_heap |
Tested |
Tested |
Tested |
std::pop_heap |
Tested |
Tested |
Tested |
std::generate |
Tested |
Tested |
Tested |
std::generate_n |
Tested |
Tested |
Tested |
std::transform |
Tested |
Tested |
Tested |
std::round |
Tested |
Tested |
Tested |
std::roundf |
Tested |
Tested |
Tested |
std::trunc |
Tested |
Tested |
Tested |
std::truncf |
Tested |
Tested |
Tested |
These tests were done for the following versions of the standard C++ library:
libstdc++ (GNU) |
Provided with GCC*-7.5.0, GCC*-9.3.0 |
libc++ (LLVM) |
Provided with Clang*-11.0 |
Microsoft Visual C++* (MSVC) Standard Library |
Provided with Microsoft Visual Studio* 2017; Microsoft Visual Studio 2019; and Microsoft Visual Studio 2022, version 17.0, preview 4.1.
NOTE:
Support for Microsoft Visual Studio 2017 is deprecated as of the Intel® oneAPI 2022.1 release, and will be removed in a future release.
|