検証済み標準 C++ API

C++ 標準 API のいくつかの基本機能は、データ並列 C++ (DPC++) カーネルで検証されています。これらの API は、一般的な CPU ベースのプラットフォームのコードで使用する場合と同様に、デバイスカーネルで使用できます。検証済みの標準 C++ API は oneapi::dpl 名前空間に追加されています。対応するヘッダーはインテル® oneAPI DPC++ ライブラリー (インテル® oneDPL) パッケージに追加されています。oneapi::dpl 名前空間を介してこれらの API を使用するには、<oneapi/dpl/...> にあるヘッダーをインクルードする必要があります。現在、検証済みの標準 C++ API は 2 つの方法で利用できます。

  1. std:: 名前空間と標準ヘッダー (例: <utility>...) を利用する

  2. 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 リファレンス

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 で非推奨になりました。将来のリリースで削除される予定です。