この記事は、インテル® デベロッパー・ゾーンに公開されている「SYCL* 2020 Specification Features and DPC++ Language Extensions Supported in Intel® oneAPI DPC++/C++ Compiler (dpcpp)」の日本語参考訳です。
DPC++ コンパイラーは、GPU や FPGA などさまざまなコンピューティング・アクセラレーターと CPU 向けのコードを含む、C++ および SYCL* ソースファイルをコンパイルします。この記事では、インテル® oneAPI DPC++/C++ コンパイラーでサポートされる SYCL* 2020 仕様の機能と DPC++ 言語拡張の対応状況と、サポートが追加されたバージョンを説明します。
SYCL* 2020 サポート
以下は、dpcpp コンパイラーにおける SYCL* 2020 仕様 (英語) の機能の対応状況です。
| 機能 | DPC++ コンパイラーの対応状況 |
|---|---|
| アクセサーの簡略化 | × |
| 新しいアクセサー・インターフェイス | × |
| アクセサーのリバーシブル・コンテナー・コンストラクター | × |
| アクセサー const T と read_only の動作 | × |
| 読み取りモードで const ref を返すアクセサー・オペレーター [] | 2021.1 |
| アドレス空間 – インターフェイス、ジェネリック、修飾 | 2023.0 |
| アトミック | 2023.0 |
| ReversibleContainer の C++ 要件と一致するアクセサー | × |
| デダクション・ガイド | 2021.1 |
| デフォルト async_handler | × |
| デバイスアスペクト | 一部サポート |
| デバイスのオプション機能のエラー処理 | × |
| デバイス固有のクエリー – info::kernel_device_specific | 2021.2 |
| Kernel_bundle | 2021.3 |
| std::exception から派生する例外 | 2021.1 |
| 例外階層の削除とエラーコードの追加 | 2021.4 |
| 拡張メカニズム – 機能テストマクロ | 2022.1 |
| 拡張名前空間 | 2022.1 |
| グループ・アルゴリズム (work-group) | 2021.4 |
| グループ・アルゴリズム (Sub-group) | 2021.4 |
| ホストタスク | 2022.0 |
| イメージ – sampled_image、unsampled_image | × |
| 不変カーネル | 2021.1 |
| インオーダー・キュー | 2021.1 |
| カーネル関数タイプ属性 | 2021.1 |
| 数学配列 | 2021.2 |
| Multi_ptr (新しい non-deprecated 形式) | 一部サポート |
| shared_ptr<T[]> からの新しいバッファー・コンストラクター | 2021.3 |
| 新しいヘッダーファイル名 | 2021.3 |
| プロパティーをサポートする新しいプロパティー・トレインとクラス | × |
| 新しい属性スタイル | 2021.4 |
| オプションのラムダ名 | 2021.1 |
| Parallel_for の簡素化 | 2021.1 |
| デバイス + コンテキストを取得するキュー・コンストラクター | 2021.1 |
| キューのショートカット | 2021.1 |
| リダクション | 一部サポート |
| 必要とする work-group サイズ | 2021.1 |
| 特殊化定数 | 2021.4 |
| 標準レイアウトの緩和 | 2021.1 |
| Sub-groups | 2021.4 |
| Device_copyable | 2021.4 |
| Sycl::bit_cast | 2021.4 |
| Sycl::vec_opeator[]、+、-、… | 2021.1 |
| 統合共有メモリー | 2021.4 |
| テンプレート buffer_allocator | 2023.0 |
| グループの調整 | 2023.0 |
| 新しいデバイス・セレクター・インターフェイス | 2023.0 |
| デフォルトで構築されるプラットフォーム、デバイス、イベント | 2023.0 |
| any_device_has と all_devices_have の追加 | × |
DPC++ 拡張
以下は、dpcpp コンパイラーにおける DPC++ 言語拡張の対応状況です。
| 機能 | DPC++ コンパイラーの対応状況 | 説明 |
|---|---|---|
| C-CXX-StandardLibrary | 2021.1 | |
| sycl_ext_intel_bf16_conversion | 実験的 | |
| sycl_ext_intel_buffer_location | 2021.1 | |
| sycl_ext_intel_dataflow_pipes | 2021.1 | FGPA のみ |
| sycl_ext_intel_device_info | 2021.1 | |
| sycl_ext_intel_esimd | 2022.2 | |
| sycl_ext_intel_fpga_device_selector | 2021.1 | |
| sycl_ext_intel_fpga_lsu | 2021.1 | |
| sycl_ext_intel_fpga_reg | 2021.1 | |
| sycl_ext_intel_kernel_args_restrict | 2021.1 | |
| sycl_ext_intel_mem_channel_property | 2021.1 | |
| sycl_ext_intel_online_compiler | 実験的 | |
| sycl_ext_intel_usm_address_spaces | 2021.1 | |
| sycl_ext_oneapi_accessor_properties | 2022.1 | |
| sycl_ext_oneapi_assert | 実験的 | |
| sycl_ext_oneapi_backend_level_zero | 2021.1 | |
| sycl_ext_oneapi_complex_algorithms | 2022.1 | |
| sycl_ext_oneapi_default_context | 実験的 | |
| sycl_ext_oneapi_device_global | × | |
| sycl_ext_oneapi_device_if | × | |
| sycl_ext_oneapi_discard_queue_events | 2022.1 | |
| sycl_ext_oneapi_dot_accumulate | 2021.1 | |
| sycl_ext_oneapi_enqueue_barrier | 2021.1 | |
| sycl_ext_oneapi_extended_atomics | 2021.1 | |
| sycl_ext_oneapi_filter_selector | 2021.1 | |
| sycl_ext_oneapi_free_function_queries | 実験的 | |
| sycl_ext_oneapi_group_algorithms | 2021.1 | |
| sycl_ext_oneapi_group_load_store | 実験的 | |
| sycl_ext_oneapi_group_sort | 実験的 | |
| sycl_ext_oneapi_invoke_simd | 2022.2 | |
| sycl_ext_oneapi_kernel_properties | × | |
| sycl_ext_oneapi_local_memory | 2021.3 | |
| sycl_ext_oneapi_local_static_mem_used | × | |
| sycl_ext_oneapi_matrix | 実験的 | |
| sycl_ext_oneapi_max_work_group_query | 実験的 | |
| sycl_ext_oneapi_properties | 実験的 | |
| sycl_ext_oneapi_spec_constants | 2021.1 | |
| sycl_ext_oneapi_srgb | 2021.2 | |
| sycl_ext_oneapi_sub_group | 一部サポート | |
| sycl_ext_oneapi_sub_group_mask | 2022.0 | |
| sycl_ext_oneapi_uniform | × | |
| sycl_ext_oneapi_use_pinned_host_memory_property | 2021.2 | |
| 不均一サブグループ | × | |
| リダクション – 多次元リダクション変数 | × | |
| サブグループ・メモリー | × | |
| マスクなし | × | |
| グラフ API | (×) | |
| 画像 API | (×) |
廃止予定の SYCL* 1.2.1 機能
以下は、dpcpp コンパイラーで廃止予定または削除された SYCL* 1.2.1 機能です。
| 機能 | 廃止予定 | 削除 |
|---|---|---|
| cl:: 名前空間 | 2022.1 | × |
| CL/sycl.hpp ヘッダー | 2022.1 | × |
| OpenCL* 相互運用性 API | 2021.3 | 2022.0 |
| SYCL* 1.2.1 イメージ (サンプラーを含む) | × | × |
| C++14 サポート | 2022.0 | 〇 |
| アクセサー関連の非推奨事項 (名前、ターゲット、モード) | 2022.1 | × |
| 定数アドレス空間 | × | × |
| 属性の伝播 | 2021.4 | 2022.0 |
| vector_class、string_class、function_class、mutex_class、shared_ptr_class、weak_ptr_class、hash_class、および exception_ptr_class エイリアス | 2021.4 | 2022.0 |
| parallel_for、nd_range、nd_item、および item のオフセット | 2021.4 | × |
| プログラムクラス、カーネルクラスの一部の API | 2021.3 | 2022.0 |
| mem_fence | 2022.0 | 〇 |
| nd_item::barrier | × | × |
| sycl::exception | 2021.4 | 〇 |
| 非定数ラムダ式を使用する parallel_for | 2021.1 | 2021.1 |
| has_extension | 2021.4 | × |
| multi_ptr API | × | × |
| cl::sycl::byte | 2021.4 | × |
| get_count、get_size | 2021.4 | × |
| kernel::get_work_group_info | 2022.0 | 〇 |
| info::device::max_constant_buffer_size と info::device::max_constant_args | 2021.4 | × |
| info::device::extensions と info::platform::extensions | 2021.4 | × |
| 非テンプレート buffer_allocator | 2023.0 | 〇 |
| グループメソッド | × | × |
| SYCL1.2.1 アトミック | × | × |
| 一部の device::info クエリー | × | × |
| get_native | 2022.0 | 〇 |
| get_id()、get_linear_id()、get_global_range() | 2022.0 | 〇 |
製品および性能に関する情報
1 性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。

