C++ 標準 API のいくつかの基本機能は、データ並列 C++ (DPC++) カーネルで検証されています。これらの API は、一般的な CPU ベースのプラットフォームのコードで使用する場合と同様に、デバイスカーネルで使用できます。検証済みの標準 C++ API は oneapi::dpl 名前空間に追加されています。対応するヘッダーはインテル® oneAPI DPC++ ライブラリー (インテル® oneDPL) パッケージに追加されています。oneapi::dpl 名前空間を介してこれらの API を使用するには、<oneapi/dpl/...> にあるヘッダーをインクルードする必要があります。現在、検証済みの標準 C++ API は 2 つの方法で利用できます。
std:: 名前空間と標準ヘッダー (例: <utility>...) を利用する
oneapi::dpl 名前空間とインテル® oneDPL ヘッダー (例: <oneapi/dpl/utility>...) を利用する
以下は、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 |
libstdc++ |
libc++ |
MSVC |
---|---|---|---|
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 |
検証済み |
検証済み |
検証済み |
std::reduce |
検証済み |
検証済み |
検証済み |
std::all_of |
検証済み |
検証済み |
検証済み |
std::any_of |
検証済み |
検証済み |
検証済み |
std::none_of |
検証済み |
検証済み |
検証済み |
std::count |
検証済み |
検証済み |
検証済み |
std::count_if |
検証済み |
検証済み |
検証済み |
std::for_each |
検証済み |
検証済み |
検証済み |
std::find |
検証済み |
検証済み |
検証済み |
std::find_if |
検証済み |
検証済み |
検証済み |
std::find_if_not |
検証済み |
検証済み |
検証済み |
std::for_each_n |
検証済み |
検証済み |
検証済み |
std::copy |
検証済み |
検証済み |
検証済み |
std::copy_backward |
検証済み |
検証済み |
検証済み |
std::copy_if |
検証済み |
検証済み |
検証済み |
std::copy_n |
検証済み |
検証済み |
検証済み |
std::is_permutation |
検証済み |
検証済み |
検証済み |
std::fill |
検証済み |
検証済み |
検証済み |
std::fill_n |
検証済み |
検証済み |
検証済み |
std::move |
検証済み |
検証済み |
検証済み |
std::move_backward |
検証済み |
検証済み |
検証済み |
これらのテストは、標準 C++ ライブラリーの次のバージョンで実施されました。
libstdc++ (GNU*) |
GCC 7.5.0、GCC 9.3.0 に含まれる |
libc++ (LLVM) |
Clang 11.0 に含まれる |
Microsoft* Visual C++* (MSVC) 標準ライブラリー |
Microsoft* Visual Studio* 2017、Microsoft* Visual Studio* 2019、および Microsoft* Visual Studio 2022 バージョン 17.0 Preview 4.1 に含まれる 注Microsoft* Visual Studio* 2017 のサポートはインテル® oneAPI 2022.1 で非推奨になりました。将来のリリースで削除される予定です。 |