インテル® 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 に含まれる |