インテル® oneAPI DPC++ ライブラリー (インテル® oneDPL) 向けのテスト済み標準 C++ API について説明します。
以下は、SYCL* デバイスコードでの oneapi::dpl::swap の使用例です。
#include <CL/sycl.hpp> #include <oneapi/dpl/utility> #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; }
次のコマンドでプログラム (kernel_swap.cpp) をビルドして実行します。
dpcpp kernel_swap.cpp –o kernel_swap.exe ./kernel_swap.exe
実行結果は次のようになります。
4, 5 5, 4
次の C++ 標準 API は、DPC++ カーネルでの使用が検証されています。
C++ 標準 API | libstdc++ | libc++ | MSVS |
---|---|---|---|
std::swap | 検証済み | 検証済み | 検証済み |
std::lower_bound | 検証済み | 検証済み | 検証済み |
std::upper_bound | 検証済み | 検証済み | 検証済み |
std::binary_search | 検証済み | 検証済み | 検証済み |
std::equal_range | 検証済み | 検証済み | 検証済み |
std::tuple | 検証済み | 検証済み | 検証済み |
std::pair | 検証済み | 検証済み | 検証済み |
std::reference_wrapper | 検証済み | 検証済み | 検証済み |
std::ref/cref | 検証済み | 検証済み | 検証済み |
std::divides | 検証済み | 検証済み | 検証済み |
std::minus | 検証済み | 検証済み | 検証済み |
std::plus | 検証済み | 検証済み | 検証済み |
std::negate | 検証済み | 検証済み | 検証済み |
std::modulus | 検証済み | 検証済み | 検証済み |
std::multiplies | 検証済み | 検証済み | 検証済み |
std::equal_to | 検証済み | 検証済み | 検証済み |
std::greater | 検証済み | 検証済み | 検証済み |
std::greater_equal | 検証済み | 検証済み | 検証済み |
std::less | 検証済み | 検証済み | 検証済み |
std::less_equal | 検証済み | 検証済み | 検証済み |
std::not_equal_to | 検証済み | 検証済み | 検証済み |
std::bit_and | 検証済み | 検証済み | 検証済み |
std::bit_not | 検証済み | 検証済み | 検証済み |
std::bit_xor | 検証済み | 検証済み | 検証済み |
std::bit_or | 検証済み | 検証済み | 検証済み |
std::logical_and | 検証済み | 検証済み | 検証済み |
std::logical_or | 検証済み | 検証済み | 検証済み |
std::logical_not | 検証済み | 検証済み | 検証済み |
std::binary_negate | 検証済み | 検証済み | 検証済み |
std::unary_negate | 検証済み | 検証済み | 検証済み |
std::not1/2 | 検証済み | 検証済み | 検証済み |
std::unary_function | 検証済み | 検証済み | 検証済み |
std::initializer_list | 検証済み | 検証済み | 検証済み |
std::forward | 検証済み | 検証済み | 検証済み |
std::move | 検証済み | 検証済み | 検証済み |
std::move_if_noexcept | 検証済み | 検証済み | 検証済み |
std::integral_constant | 検証済み | 検証済み | 検証済み |
std::is_same | 検証済み | 検証済み | 検証済み |
std::is_base_of | 検証済み | 検証済み | 検証済み |
std::is_base_of_union | 検証済み | 検証済み | 検証済み |
std::is_convertible | 検証済み | 検証済み | 検証済み |
std::extent | 検証済み | 検証済み | 検証済み |
std::rank | 検証済み | 検証済み | 検証済み |
std::remove_all_extents | 検証済み | 検証済み | 検証済み |
std::remove_extent | 検証済み | 検証済み | 検証済み |
std::add_const | 検証済み | 検証済み | 検証済み |
std::add_cv | 検証済み | 検証済み | 検証済み |
std::add_volatile | 検証済み | 検証済み | 検証済み |
std::remove_const | 検証済み | 検証済み | 検証済み |
std::remove_cv | 検証済み | 検証済み | 検証済み |
std::remove_volatile | 検証済み | 検証済み | 検証済み |
std::decay | 検証済み | 検証済み | 検証済み |
std::conditional | 検証済み | 検証済み | 検証済み |
std::enable_if | 検証済み | 検証済み | 検証済み |
std::common_type | 検証済み | 検証済み | 検証済み |
std::declval | 検証済み | 検証済み | 検証済み |
std::alignment_of | 検証済み | 検証済み | 検証済み |
std::is_arithmetic | 検証済み | 検証済み | 検証済み |
std::is_fundamental | 検証済み | 検証済み | 検証済み |
std::is_reference | 検証済み | 検証済み | 検証済み |
std::is_object | 検証済み | 検証済み | 検証済み |
std::is_scalar | 検証済み | 検証済み | 検証済み |
std::is_compound | 検証済み | 検証済み | 検証済み |
std::is_member_pointer | 検証済み | 検証済み | 検証済み |
std::is_const | 検証済み | 検証済み | 検証済み |
std::is_assignable | 検証済み | 検証済み | 検証済み |
std::is_constructible | 検証済み | 検証済み | 検証済み |
std::is_copy_assignable | 検証済み | 検証済み | 検証済み |
std::is_copy_constructible | 検証済み | 検証済み | 検証済み |
std::is_default_constructible | 検証済み | 検証済み | 検証済み |
std::is_destructible | 検証済み | 検証済み | 検証済み |
std::is_empty | 検証済み | 検証済み | 検証済み |
std::is_literal_type | 検証済み | 検証済み | 検証済み |
std::is_move_assignable | 検証済み | 検証済み | 検証済み |
std::is_move_constructible | 検証済み | 検証済み | 検証済み |
std::is_pod | 検証済み | 検証済み | 検証済み |
std::is_signed | 検証済み | 検証済み | 検証済み |
std::is_standard_layout | 検証済み | 検証済み | 検証済み |
std::is_trivial | 検証済み | 検証済み | 検証済み |
std::is_unsigned | 検証済み | 検証済み | 検証済み |
std::is_volatile | 検証済み | 検証済み | 検証済み |
std::is_trivially_assignable | 検証済み | 検証済み | 検証済み |
std::is_trivially_constructible | 検証済み | 検証済み | 検証済み |
std::is_trivially_copyable | 検証済み | 検証済み | 検証済み |
std::array | 検証済み | 検証済み | 検証済み |
std::ratio | 検証済み | 検証済み | 検証済み |
std::complex | 検証済み | 検証済み | |
std::assert | 検証済み | 検証済み | 検証済み |
std::sin | 検証済み | 検証済み | 検証済み |
std::cos | 検証済み | 検証済み | 検証済み |
std::tan | 検証済み | 検証済み | 検証済み |
std::asin | 検証済み | 検証済み | 検証済み |
std::acos | 検証済み | 検証済み | 検証済み |
std::atan | 検証済み | 検証済み | 検証済み |
std::atan2 | 検証済み | 検証済み | 検証済み |
std::sinh | 検証済み | 検証済み | 検証済み |
std::cosh | 検証済み | 検証済み | 検証済み |
std::tanh | 検証済み | 検証済み | 検証済み |
std::asinh | 検証済み | 検証済み | 検証済み |
std::acosh | 検証済み | 検証済み | 検証済み |
std::atanh | 検証済み | 検証済み | 検証済み |
std::exp | 検証済み | 検証済み | 検証済み |
std::frexp | 検証済み | 検証済み | 検証済み |
std::ldexp | 検証済み | 検証済み | 検証済み |
std::log | 検証済み | 検証済み | 検証済み |
std::log10 | 検証済み | 検証済み | 検証済み |
std::modf | 検証済み | 検証済み | 検証済み |
std::exp2 | 検証済み | 検証済み | 検証済み |
std::expm1 | 検証済み | 検証済み | 検証済み |
std::ilogb | 検証済み | 検証済み | 検証済み |
std::log1p | 検証済み | 検証済み | 検証済み |
std::log2 | 検証済み | 検証済み | 検証済み |
std::logb | 検証済み | 検証済み | 検証済み |
std::pow | 検証済み | 検証済み | 検証済み |
std::sqrt | 検証済み | 検証済み | 検証済み |
std::cbrt | 検証済み | 検証済み | 検証済み |
std::hypot | 検証済み | 検証済み | 検証済み |
std::erf | 検証済み | 検証済み | 検証済み |
std::erfc | 検証済み | 検証済み | 検証済み |
std::tgamma | 検証済み | 検証済み | 検証済み |
std::lgamma | 検証済み | 検証済み | 検証済み |
std::fmod | 検証済み | 検証済み | 検証済み |
std::remainder | 検証済み | 検証済み | 検証済み |
std::remquo | 検証済み | 検証済み | 検証済み |
std::nextafter | 検証済み | 検証済み | 検証済み |
std::fdim | 検証済み | 検証済み | 検証済み |
std::optional | 検証済み | 検証済み | 検証済み |
これらのテストは、標準 C++ ライブラリーの次のバージョンで実施されました。
標準 C++ ライブラリー | バージョン |
---|---|
libstdc++ (GNU*) | GCC 7.5.0 に含まれる |
libc++ (LLVM) | Clang 11.0 に含まれる |
MSVC 標準 C++ ライブラリー | Microsoft* Visual Studio* 2017 に含まれる |