本資料は、インテルのウェブサイトで公開されている「Intel® oneAPI DPC++/C++ Compiler Release Notes」および「Intel® oneAPI DPC++/C++ Compiler System Requirements」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
このドキュメントでは、新機能、変更された機能、注意事項、および製品ドキュメントに記述されていない既知の問題について説明します。
ハードウェア・サポート
Emerald Rapids (EMR)✝、Granite Rapids (GNR)✝、Battlemage (BMG)✝、Lunar Lake (LNL)✝ などの新しいインテルのハードウェア向けに最適化され、キャッシュヒントや AI アプリケーション向けの新しいデータ型などの機能により、効率と計算能力が向上します。
バインドレス・テクスチャー・サポート
インテル® Arc™ GPU 向けバインドレス・テクスチャーを実装し、コンパイル時に情報がなくても実行時に動的なテクスチャーを使用できるようにして、パフォーマンスとスケーラビリティーを強化します。
SYCL* コンパイラー
SYCL* オフロードモデル: --offload-new-driver
を使用した新しい SYCL* オフロード・ドライバー・メカニズムを導入し、I/O と外部プロセスを削減することでインフラストラクチャーを改善し、リンク時間を短縮します。
範囲の丸め制御: バイナリーサイズを削減するため完全な丸めを強制するなど、範囲の丸めを管理する -fsycl-range-rounding
オプションを追加しました。さらに、実験的な -fsycl-exp-range-rounding
オプションは、すべての次元にわたって丸めを実行します。
double 型のエミュレーション: インテル® GPU で double データ型の部分的なエミュレーションを行う -fsycl-fp64-conv-emu
オプションを追加しました。
動的リンク: 動的リンクの初期サポートを導入しました。kernel_bundle API
や AOT mode
などの一部の機能はまだサポートしていません。
SYCL* ライブラリー
拡張: sycl_ext_oneapi_prod
、sycl_ext_oneapi_profiling_tag
、sycl_ext_oneapi_forward_progress
、sycl_ext_oneapi_private_alloca
, syclext_codeplay_enqueue_native_command
、sycl_ext_oneapi_enqueue_functions
など、複数の拡張を実装しました。
グループロード/ストア: sycl_ext_oneapi_group_load_store
をサポートし、該当する場合はネイティブ・ハードウェア・ブロックの読み取り/書き込み機能を有効にします。
フリー関数カーネル: 引数型と診断に関する既知の制限を伴う、sycl_ext_oneapi_free_function_kernels
拡張の初期サポートを導入しました。
Fused Multiply-Add (FMA): 確実に FMA 演算が実行される実験的な ESIMD 関数 fma
を追加しました。
sycl_ext_oneapi_group_sort
拡張の改善: 仕様のリビジョン 2 に合わせて sycl_ext_oneapi_group_sort
拡張の実装を更新しました。以前のバージョン 1 は使用できなくなり、コードの変更が必要になる場合があります。
OpenMP*
-fopenmp-offload-mandatory
コンパイラー・オプションのサポートにより、ホスト・フォールバック・コードの作成が省略され、デバイスへの OpenMP* オフロードが失敗した場合にランタイムエラーが生成されます。
OpenMP* 構造の最適化レポートのサポートが改善されました。
ループ・トリップ・カウントを考慮するため、入れ子のループ構造の変換スキームが強化されました。
match 節で device={arch(gen)}
が指定されている場合に、インテル® Xe2 アーキテクチャーの GPU が含まれるようにディスパッチ構造の declare
バリアントが更新されました。
target 構造の device_type(host|nohost|any)
節がサポートされました。
teams 構造に if
節が追加されました。
map-type プロパティーが「default」に変更され、map-type なしで map-type 修飾子を指定できるようになりました。例えば、map(always : x)
は map(always, tofrom : x)
と同じです。
target 構造のインテル拡張である ompx_sub_group_size
節のサポートにより、カーネルの SIMD 幅を設定できます。
target 構造のインテル拡張である ompx_dyn_cgroup_mem
節のサポートにより、GPU オフロード向けに SLM で動的割り当てが可能になります。
環境変数 OMP_THREAD_LIMIT
、OMP_TEAMS_THREAD_LIMIT
、および OMP_NUM_THREADS
が拡張され、抽象名がサポートされます。例: OMP_THREAD_LIMIT=n_cores
。
環境変数 OMP_PLACES
の構文が拡張され、抽象名の境界とストライドがサポートされます。例: OMP_PLACES=threads(4:2)
。
環境変数 OMP_AVAILABLE_DEVICES
のホストランタイムがサポートされます。
環境変数 OMP_DEFAULT_DEVICE
が拡張され、特性によるデバイス選択がサポートされます。
AI および HPC の最適化: AI フレームワークと HPC アプリケーション向けにパフォーマンスをチューニングしました。
OpenMP* の機能強化: TARGET 構造の DEVICE_TYPE 節や mandatory オフロードのサポートなど、OpenMP* 6.0 機能の早期サポートを導入しました。また、OpenMP* ループ・ローテーションの問題も修正しました。詳細は、「インテル® コンパイラーによる高度な OpenMP* デバイスオフロード」 (英語) を参照してください。
コンパイラー・レポート: 強化された opt-report によりユーザー・エクスペリエンスを向上します。OpenMP* オフロードに関する詳細情報と、オープンソースの最適化コメント・フレームワークとの統合を提供します。最新の機能強化の詳細は、「コンパイラーの最適化レポートを使用して高度に最適化されたアプリケーションを迅速に開発」 (英語) を参照してください。
デバイスコードのサニタイザー: デバイスコードで LLVM サニタイザーがサポートされ、開発中に問題を検出して解決できるようになりました。コンパイラー・インストルメンテーション・モジュールとランタイムサポートが含まれており、USM、SYCL* バッファー、ローカルメモリー、デバイスグローバルでの境界外メモリーアクセス、不正な解放、使用後解放、不正なコンテキストなどの問題を検出できます。このリリースでは、Linux* で Ponte Vecchio (PVC)✝ GPU と CPU がサポートされます。サニタイザーの使用方法は、「インテル® oneAPI DPC++/C++ コンパイラーでサニタイザーを使用してバグを素早く検出」を参照してください。
総合的なパフォーマンス・データ: アップグレードされた最適化レポートは、SYCL*、OpenMP*、および AOT コンパイルをカバーし、開発者にアプリケーション・パフォーマンスに関する詳細な情報を提供します。
ハードウェア・プロファイルに基づく最適化 (HWPGO): 主な改善点には、精度を向上させるプロファイル伝播の強化、パフォーマンスをさらに向上させる追加のプロファイルに基づく最適化、DWARF の代わりに Windows* で「疑似プローブ」を使用したプロファイルの早期サポートなどがあります。さらに、HWPGO では選択的な関数アウトラインが導入され、プロファイル・データに基づいて特定の関数を最適化できるようになり、実行時の効率がさらに向上します。
SYCL* コンパイラー
コンパイルフローの改善: サードパーティーのホスト・コンパイラーが使用されていない場合に統合フッターを生成するプロセスが最適化されたことで、一時ファイルの数が少なくなり、コンパイル時間が短縮します。
追加の数学関数のサポート: C-CXX-StandardLibrary 拡張の一部として、SYCL* カーネルの truncf
、sinpif
、rsqrtf
、exp10f
、ceilf
、copysignf
、cospif
、fmaxf
、fminf
などの数学関数を新たにサポートしました。インテルの数学関数 (IMF) の統合を拡張し、インテルのデバイスのデバイスコードで ::rand
と ::srand
を利用できるようにしました。
エラーメッセージの強化: カーネルでの暗黙的な this
キャプチャーや、複数のターゲットが -fsycl-targets
オプションに渡されるとアーキテクチャー情報が欠落するシナリオのエラーメッセージを改善しました。
コンパイルフローの最適化: -MD
オプションで依存関係を生成するのに必要なコマンドの数が削減され、ビルドプロセスが合理化されました。
セキュリティーとデバッグ: ライブラリーとツールのセキュリティー関連のコンパイラー・オプションを強化し、Linux* 環境と Windows* 環境の両方でデバッグ・エクスペリエンスを改善します。
SYCL* ライブラリー
ESIMD 関数のサポート: ESIMD の double データ型の sqrt
関数と rsqrt
関数をサポートしました。
キューブマップとサンプル画像配列のサポート: キューブマップ画像とサンプル画像配列をサポートするため sycl_ext_oneapi_bindless_images
拡張を更新しました。
ESIMD の名前付きバリア割り当て: 名前付きバリアを動的に割り当てる ESIMD API を導入しました。
実行可能コマンドグラフの更新: executable_command_graph::update
によるグラフ全体の更新をサポートしました。
非推奨の警告: 非推奨の <CL/sycl.hpp>
ヘッダーの使用に関する警告を追加しました。
アクセサーの改善: local_accessor::get_pointer
と local_accessor::get_multi_ptr
は、ホストで呼び出された場合、無効な例外をスローするようになりました。
キュー操作の検出: 入れ子のキュー操作の検出を拡張し、ショートカット・メソッドをサポートしました。
ESIMD API インターフェイスの簡素化: さまざまな ESIMD API (atomic_update
、block_load
、block_store
など) のオーバーロードを追加し、一部のテンプレート引数を省略できるようにしました。
bfloat16 数学関数: bfloat16
のベクトルを数学関数に渡せるようにするため、sycl_ext_oneapi_bfloat16_math_functions
を更新しました。
sycl::vec::as
の最適化: sycl::detail::memcpy
の実装を最適化することで sycl::vec::as
のパフォーマンスを改善しました。
SYCL* 2020 例外の更新: 従来の SYCL* 1.2.1 例外ではなく、SYCL* 2020 例外をスローするように実装全体を更新しました。
sycl::vec::convert
サポート: vec<bfloat16, N>
との間の sycl::vec::convert
をサポートしました。
非推奨: 非デバイスアクセサーの marray<bool, n>::operator++/--
と accessor::get_multi_ptr
は非推奨となりました。
ESIMD 名前付きバリア: ESIMD 名前付きバリア API が実験的な名前空間から移動されました。
SYCL* 拡張と API の機能強化:
sycl_ext_oneapi_free_function_queries
の最新リビジョンを実装しました。
sycl-ls --verbose
を拡張し、UUID やアーキテクチャーなどの詳細なデバイス情報を出力できるようにしました。
copy_to
と copy_from
ESIMD API でコンパイル時のプロパティーをサポートしました。
非可変長 printf
インターフェイス:: 浮動小数点値を出力する際の使いやすさを向上するため、experimental::printf
を非可変長インターフェイスに切り替えました。
ESIMD API 検証の強化: テンプレート引数の静的アサーションを使用し、rdregion
および wrregion
API の検証を改善しました。
SYCL* 2020 仕様との整合: SYCL* 2020 仕様に合わせて vec
の変異スウィズル演算子とスカラー変換を更新しました。
ESIMD のその他の改善点:
ESIMD プリフェッチ API で 1 バイトおよび 2 バイトのデータ型をサポートしました。
第 6 世代インテル® Xeon® スケーラブル・プロセッサー (開発コード名 Granite Rapids) を搭載したデバイスで ext_intel_matrix
をサポートしました。
コンパイル時のプロパティーを持つ load_2d
、store_2d
、prefetch_2d
ESIMD API の新しいオーバーロードを導入しました。
不均一グループ向けのグループ・シフト・アルゴリズム (shift_group_left
、permute_group_by_xor
など) をサポートしました。
ESIMD block_store
API の制限解除と slm_atomic_update
API の拡張により、fsub
と fadd
をサポートしました。
グラフとセマフォーのサポート:
バインドレス・イメージ拡張で値によるグラフ更新機能と外部セマフォー待機/シグナル操作をサポートしました。
image_device_handle
のデバイス間コピーを導入しました。
統合ランタイム: プラグイン・インターフェイスを削除し、統合ランタイムに置き換えたことで、再配布可能なライブラリーの数とサイズが削減されます。
パフォーマンスの改善: SYCL* JIT コンパイラーをスタンドアロン・ライブラリーにアウトライン化し、初回使用時に動的にロードすることで、libsycl.so
の起動オーバーヘッドを削減しました。
このリリースでは ABI に関して重大な変更があります。古いバージョンのツールチェーンでビルドされたアプリケーションを新しいバージョンの SYCL* ランタイム・ライブラリーで実行するには、再コンパイルする必要があります。
SYCL* ランタイム・ライブラリーのメジャーバージョンが 8 に上がりました。
SYCL* ランタイム・ライブラリーからエクスポートされたシンボルのリストをクリーンアップし、一部のレガシーシンボルを削除し、エクスポートすべきでないシンボルを非表示にしました。
ライブラリー・インターフェイスで std::string
やその他のオブジェクトを使用しないように、いくつかの関数とメソッドの ABI を更新し、C++11 より前の ABI でビルドされたアプリケーションで SYCL* RT を使用できるようにしました。
実験的な sycl_ext_oneapi_bindless_images
拡張の ext_oneapi_copy
API を変更し、Src
パラメーターで const 修飾型を使用できるようにしました。
すでに非推奨となっている API のサポート廃止や、一部のクラスの実装をプレビュー実装へ切り替えるなど、API に関していくつかの重大な変更が行われました。
浮動小数点引数を受け付ける sycl::abs
オーバーロードを削除しました。
sycl::host_ptr
と sycl::device_ptr
を削除しました。
queue::discard_or_return
を削除しました。
sycl::make_unique_ptr
を削除しました。
以前に削除されたホストデバイスに関連する use_primary_context
プロパティーとメソッドを削除しました。
runtime_error
、nd_range_error
、invalid_parameter_error
、device_error
、feature_not_supported
などの SYCL* 1.2.1 例外サブクラスを削除しました。
pi_mem_advice
を受け付ける queue::mem_advice
オーバーロードを削除しました。
いくつかの非推奨の ESIMD API を削除しました。
非標準の sycl::id -> sycl::range
変換演算子を削除しました。
sycl_ext_oneapi_bindless_images
拡張の実装から非推奨の API を削除しました。
sycl_ext_oneapi_bindless_images
拡張の実験的な destroy_external_semaphore
API の名前を release_external_semaphore
に変更しました。
実験的な sycl_ext_oneapi_bindless_images
拡張で image_descriptor
構造体の image_channel_order
フィールドをチャネル数に置き換えました。
parallel_for(range)
と parallel_for(nd_range)
に渡されるラムダ/関数の第 1 引数の制限を強化しました。
いくつかの厳密なエイリアシング・ルール違反を修正するため、異なるストレージタイプを使用するプレビューバージョンに sycl::vec
実装を切り替えました。
vec<std::byte, N>
で使用できる数学演算を、std::byte
に適用可能なものに制限しました。
sycl::exception
実装をプレビューバージョンに切り替えました。
数学組込み実装をプレビューバージョンに切り替えました。
bfloat16
実装をプレビューバージョンに切り替えました。
sycl::nd_item
実装をプレビューバージョンに切り替えました。
バッファーの要素タイプはデバイスコピー可能でなければならないという制限を強化しました。
SYCL* ヘッダーを再構築し、<cmath>
と <complex>
を除外しました。
SYCL_DEVICE_FILTER
環境変数のサポートを廃止しました。
accessor::get_pointer
インターフェイスを更新して、global_ptr<value_type>
を返すようにしました。global_ptr<value_type>
は、アクセサーのデータ型が const 修飾されている場合、またはアクセサーが読み取り専用の場合、const 修飾できます。
sycl_ext_oneapi_free_function_queries
に関連する非推奨の API を削除しました。
slm_allocator
ESIMD API を実験的な名前空間に移動しました。
非推奨の usm_system_allocator
アスペクトを削除しました。
実験的な sycl_ext_oneapi_root_group
機能から get_child_group
API を削除しました。
多くの ESIMD API の simd_view
に関連するテンプレート引数を簡素化しました。
ESIMD atomic_op::predec
を削除しました。
実験的な sycl_ext_oneapi_group_sort
拡張のリビジョン 1 のインターフェイスを廃止しました。
実験的な sycl_ext_oneapi_graph
拡張で command_graph::begin_recording
と command_graph::end_recording
の戻り型を void
から bool
に変更しました。
コンパイラー・オプションに関しても重大な変更が行われました。
非推奨の -fsycl-link-huge-device-code
、-fsycl-[add|link]-targets
、-foffload-static-lib
、-foffload-whole-static-lib
、-fsycl-disable-range-rounding
、-sycl-std
コンパイラー・オプションが削除されました。
SYCL* コンパイラー
コンパイルステップでは -fsycl
オプションを使用せず、リンクステップでは -fsycl
オプションを使用するコンパイルシナリオをサポートするため、Windows* で以前に導入された変更を元に戻しました。コンパイラーはリンクステップでリンクする標準ライブラリーのバージョンを認識しないため、このシナリオはサポートされなくなりました。
SYCL* コンパイラー
-fsycl-link-targets
オプションを使用すると、意図せずに追加のデバイス・コード・リンク・ステップがトリガーされる問題を修正しました。
インテル® GPU の AOT コンパイルで、ターゲットデバイスが Ponte Vecchio (PVC)✝ でない場合でも PVC✝ 固有のコンパイラー・オプションが渡される問題を解決しました。
--save-temps
の使用時に AOT コンパイルで誤ったファイル拡張子が出力される問題を修正しました。
-fsycl-link
を使用して別々にコンパイルおよびリンクを実行すると、リンクステップで「number of output files and targets should match in unbundling mode (アンバンドル・モードでは、出力ファイルとターゲットの数が一致する必要があります)」というエラーが発生する問題を修正しました。
汎用アドレス空間内のポインターを特定の組み込み数学関数に渡すとコンパイルが失敗する問題を解決しました。
-fsycl-device-code-split=none
を使用して異なる reqd_work_group_size
属性を持つカーネルをコンパイルすると、work-group サイズの不一致に関するランタイム例外が発生する問題を修正しました。
reqd_work_group_size
属性を 3 つ未満の引数で使用するとクラッシュする問題を解決しました。
half
データ型で shift_group_[right|left]
、permute_by_xor
、および select_from_group
アルゴリズムを使用すると無効な値を返す問題を修正しました。
SYCL* ライブラリー
sycl::ext::oneapi::experimental::info::device
を照会すると、空のベクトルが返される代わりに例外が発生する状況を修正しました。
-ffast-math
オプションでの esimd::atan
実装を修正しました。
キューの作成時にコンポーネント・デバイスが複合デバイスの子孫として正しく識別されない問題を修正しました。
複合デバイスの照会で重複したエントリーが返される問題に対処しました。
コンパイルエラーを引き起こす config_2d_mem_access
ESIMD クラスのコピー・コンストラクターの問題を修正しました。
atomic64
アスペクトを使用する atomic_ref<T*>
が正しく検出されず、エラーが発生する問題を解決しました。
ctanh
と cexp
がエッジケースで誤った値を返す問題を修正しました。
build_options
を介して -Xs
オプションに渡された値がデバイス・コンパイラーに渡されない問題を修正しました。
-fno-sycl-unnamed-lambda
の使用時にカーネルを名前付き関数として定義すると、コンパイルエラーが発生する問題を修正しました。
windows.h
のマクロとの競合によって発生する -fpreview-breaking-changes
オプションのコンパイル問題を修正しました。
sycl::vec<sycl::half, N>::operator[]
の実装でエラーを引き起こす厳密なエイリアシング違反を解決しました。
ホストタスクと一緒にコマンドキューに投入されたバリアが無視される問題を修正し、ホストタスクとバリアの同期を改善しました。
コンパイラーがビット反転でサポートされていない SPIR-V* 命令を出力する問題を修正しました。
デフォルトで構築された local_accessor
引数が、特に Windows* と -O0
最適化を指定した Linux* でランタイムエラーになる問題に対処しました。
ONEAPI_DEVICE_SELECTOR
に無効な値が渡されるとハングする問題を解決しました。
特定の設定で必要なディレクトリーが作成されないという永続キャッシュ機能の問題を修正しました。
カーネルバンドルからカーネルを名前で照会するとプログラムがクラッシュする問題を修正しました。
非ブロッキング・パイプ操作が誤って例外をスローするエラー処理の問題を修正しました。
marray
と vec
で不均一グループ組込み関数を使用する際のコンパイルの問題を解決しました。
device_global
変数の型として使用される struct
に適用されたメモリー属性が無視される問題を解決しました。
不足していた value_type
と vector_t
メンバー型エイリアスをスウィズルに追加しました。
カスタム・シャットダウン・プロセスを持つアプリケーションやライブラリーで SYCL* RT が使用されたときのシャットダウン・シーケンスの問題を修正しました。
不正な形式の ONEAPI_DEVICE_SELECTOR
を持つ環境で、デフォルトで構築されたイベントで event::get_backend()
を呼び出すとクラッシュする問題を修正しました。
--ignore-device-selectors
を指定した sycl-ls
が環境変数を適切に無視しない問題を修正しました。
ネイティブ CPU バックエンドによって返されるメモリー順序を修正しました。
sycl::ext::oneapi::experimental::properties
の可変引数コンストラクターを拡張仕様に一致するように修正しました。
load_2d
、store_2d
、prefetch_2d
などの ESIMD 関数を使用するとビルドプログラムに失敗する問題を修正しました。
インテルの統合 GPU の空きデバイスメモリーを照会すると、サポートされていない機能に対して例外がスローされる代わりに、0 が返される問題を解決しました。
sycl_ext_oneapi_kernel_compiler_opencl
拡張の実装におけるヒープ・バッファー・オーバーフローに対処しました。
sycl_ext_oneapi_graph
拡張がアクセサーのアクセスモードを無視し、不要なグラフエッジを作成する問題を修正しました。
バリアを含むグラフの送信によってランタイムエラーやリソースリークが発生する問題を修正しました。
依存関係のないカーネルがインオーダー・キューに送信されるとパフォーマンスが低下する問題に対処しました。
Level Zero
バックエンドのプロファイルでインオーダー・キューのタイムスタンプがゼロになったり、正しくない問題を修正しました。
即時コマンド・リスト・プロパティー (immediate_command_list
および no_immediate_command_list
) を持つ複数のキューを使用するとクラッシュする問題を解決しました。
info::kernel_device_specific::work_group_size
が Level Zero
バックエンドのカーネルを無視してデバイス固有の制限を返す問題を修正しました。
OpenMP*
dispatch 構造の device 節が OpenMP* の default-device-var ICV を更新しない問題を修正しました。
dispatch 構造の declare バリアントが adjust_args
節を指定しない場合の内部コンパイラー・エラーを解決しました。
トリップカウントが大きい OpenMP* for
ループと simd
ループの最適化の問題を修正しました。
team 構造内に task 構造を記述するとコンパイラー・エラー・メッセージがトリガーされる回帰問題を修正しました。
target と team の両方に thread_limit
が指定されている場合、コンパイラーは target に指定されたものを常に使用するのではなく、それらの最小値を正しく選択するようになりました。
GPU の SLM に割り当てられたグローバル変数の初期化に関連する内部コンパイラー・エラーを修正しました。
declare mapper
を使用してマップされた変数の参照カウントが正しく減分されないオフロードランタイムの問題を解決しました。
リダクション変数の一時コピーによって L1 キャッシュが影響を受けることに関連する GPU オフロード・パフォーマンスの問題を修正しました。
ユーザー定義のリダクション変数が適切に構築または破棄されない問題を解決しました。
SYCL*
Windows* では、Unified Runtime の Level Zero リークチェックは、デフォルトのコンテキストでは正しく機能しません。これは、プラグイン DLL の解放が、デフォルトのコンテキストなどの静的グローバル変数の解放と競合するためです。
インテル® グラフィックス・コンパイラーの Vector Compute バックエンドは、特定の最適化レベルをサポートしておらず、頻繁に誤った結果を生成したり、クラッシュします。この問題は、ESIMD コードに直接影響します。一時的な回避策として、影響を受けるモードであっても ESIMD コードを最適化してください。
sycl_ext_oneapi_matrix 拡張を使用する場合、特に half データ型を使用する行列演算では、プログラムを実行するデバイスに応じた適切な設定を使用することが重要です。
インオーダー・キューでキュー・ショートカット関数を使用する場合、異なるキューに送信されたコマンド間の依存関係が無視されることがあります。回避策は、.wait()
を明示的に呼び出すことです。この問題は次のリリースで修正される予定です。以下の例では、最初のカーネルが実行を完了する前に、2 番目のカーネルが実行を開始します。
// q1 実行時間の長いタスク
sycl::event e = q1.single_task([=](){ /* ... */ });
// q2 タスク
q2.single_task(e, [=](){ /* ... */ });
C/C++ の数学組込み関数は、SYCL* カーネルから呼び出された場合、一部のエッジケース入力に対して誤った結果を返すことがあります。
Unified Runtime Level Zero Adapter を使用してインテル® GPU 上でパフォーマンスを向上させるため、バージョン 2025.0 ではドライバー最適化インオーダー・リストがサポートされました。sycl::property::queue::enable_profiling を使用してワークロードを実行する場合、これらのリストはパフォーマンス・オーバーヘッドを生じることが予想されますこのオーバーヘッドがパフォーマンスに悪影響を与える場合は、UR_L0_USE_DRIVER_INORDER_LISTS=0 を設定してドライバー・インオーダー・リストを無効にすることで軽減できます。
OpenCL* 3.0 を必要とする Windows* 上の DPC++ コンパイラーとの互換性を確保するには、システム上の古いバージョンの opencl.dll
によって発生する可能性のある問題に対処する必要があります。古い opencl.dll
がシステム・ディレクトリーに存在するか、ライブラリー・パスで優先される場合、特定の OpenCL* 3.0 機能の使用時に、SYCL* 関連の問題を含む障害が発生したり、インテル® VTune™ プロファイラーやインテル® Advisor などのツールがクラッシュする可能性があります。推奨される解決策は、古い opencl.dll
を DPC++ パッケージにインストールされている opencl.dll
に置き換えることです。これを行うには、$oneAPI_Install_Folder\compiler\latest\bin
から新しい opencl.dll
をシステムフォルダーにコピーします。ほかのアプリケーションで必要になる場合に備えて、コピーする前に元の opencl.dll
を必ずバックアップしてください。
sycl_ext_oneapi_free_function_kernels
には、次のような制限があります。
フリー関数カーネルは、ファイルスコープで定義されている場合にのみサポートされます。
フリー関数カーネルを定義するには、SYCL_EXTERNAL
を SYCL_EXT_ONEAPI_FUNCTION_PROPERTY
と一緒に使用する必要があります。
拡張仕様の制限に違反した場合、コンパイラーは診断を出力しません。
フリー関数カーネルの引数は、構造体などの複合データ型や、accessor
などの SYCL* クラスにすることはできません。
-fsycl-dead-args-optimization
(デフォルトで有効) を使用すると、エラーが発生する可能性があります。
info::kernel::num_args
は、フリー関数カーネルに対して正しい結果を返しません。
OpenMP*
parallel 領域の終わりにある暗黙的なバリアは、target nowait 構造と dispatch nowait 構造に関連付けられたタスクの同期ポイントとして機能しません。これにより、誤った結果が生成されたり、クラッシュする可能性があります。回避策としては、parallel 領域の終わりで #pragma omp taskwait を使用して、parallel 領域の暗黙的なバリアにより発生するはずの target/dispatch nowait 領域の同期を確実に実行することです。
その他の既知の問題と制限事項
Visual Studio* IDE との統合: 「インテル® C++ コンパイラー 2025」を使用して Win32 プラットフォーム向けに C++ プロジェクトをビルドすると、エラーが発生します。「インテル® C++ コンパイラー 2025」は Win32 プラットフォームをサポートしていないため、x64 プラットフォーム向けにプロジェクトをビルドする必要があることに注意してください。Win32 プラットフォームを選択すると、ICX コンパイラーが見つからないというエラーが発生します。
インテル® oneAPI ベース・ツールキット、インテル® HPC ツールキット、または oneAPI スタンドアロン・コンポーネント・ページからインテル® コンパイラーをインストールした場合、その環境向けの適切なパッチをインストールしてください。
oneAPI 2023.2 の一部として公開されたインテル® C++ コンパイラー向けに 1 つ、インテル® Fortran コンパイラー向けに 1 つ、合計 2 つのパッチが利用できます。
* インテル® oneAPI DPC++/C++ コンパイラーおよびインテル® コンパイラー・クラシック
* インテル® Fortran コンパイラー・クラシックおよびインテル® Fortran コンパイラー
パッチのバージョンは 2023.2.1 です。
これらのパッチは Linux* および Windows* に適用されます。
これらのパッチは、環境モジュール・ユーティリティーのモジュールファイルが見つからない問題やその他の問題を解決します。
パッチは、インテル® レジストレーション・センター、APT や YUM などのディストリビューション・チャネル、およびスタンドアロン・コンポーネント・ページから入手できます。
インテル® oneAPI ツールキット 2022.1.3 以前およびインテル® Parallel Studio XE (すべてのバージョン) は Microsoft* Visual Studio* 2022 をサポートしていません。Microsoft* Visual Studio* 2022 がインストールされているシステムでインテル® oneAPI およびインテル® Parallel Studio XE のインストーラーを実行すると、インストール、アップグレード、変更、アンインストールに失敗します。詳細は、こちらの記事 (英語) を参照してください。
ハードウェア・サポート
-march の使用に関する詳細は、こちら (英語) を参照してください。
インテル® プラットフォームのツールチェーン・サポート
GCC13.1
GCC13.1
GCC14.1
Binutils 2.40
Binutils 2.41
Binutils 2.42
Glibc2.37
Glibc2.37
Glibc2.39
LLVM 16.0
LLVM 17.0
LLVM 18.0
ICX 2023.1
ICX 2023.2
ICX 2024.0
C/C++ 標準サポート
インテル® oneAPI DPC++/C++ コンパイラー 2025.0 は、Clang 19 (英語) フロントエンドを通じて C/C++ 標準をサポートします。
C++23 の次の C++ 標準である C++2c と、C23 の次の C 標準である C2y のサポートに取り組み始めました。
「deducing this」の実装を完了しました (C++23)。
一部の constexpr 制限を緩和しました (C++23)。
[[assume]] 属性を実装しました (C++23)。
Concepts のサポートを完了しました (C++20)。
char8_t をサポートしました (C23)。
オブジェクト宣言の constexpr キーワードを実装しました (C23)。
ソースにバイナリーリソースを埋め込む #embed を実装しました (C23)。
2022.2 リリースから、第 6 世代から第 10 世代インテル® Core™ プロセッサー、および同世代の Intel Atom® プロセッサー、インテル® Pentium® プロセッサー、インテル® Celeron® プロセッサーに内蔵されているグラフィックス・プロセッサー向け Windows* ドライバーのサポートはメンテナンス・モードに移行しました。セキュリティー問題および重大な問題の修正のみ行われます。前述のプロセッサーの既存の統合グラフィックス・プロセッサー機能を使用する oneAPI のツールは引き続き動作する可能性はありますが、サポートされなくなります。これらのプロセッサーの CPU 機能は引き続きサポートされます。詳細は、oneAPI フォーラム (英語) およびリリースノートを参照してください。
このサイトから手順に従ってツールキットをダウンロードし、インストール手順に従ってツールキットをインストールします。
このコンパイラーおよびライブラリーのハードウェア、オペレーティング・システム、ソフトウェア要件を説明します。
次のインテル® 64 アーキテクチャー・ベースのシステムは、ホスト・プラットフォームとターゲット・プラットフォームの両方としてサポートされています。
ターゲット - インテル® FPGA デバイス | インテル® Quartus® Prime 開発ソフトウェアのエディション |
---|---|
インテル® Quartus® Prime 開発ソフトウェア・プロ・エディション (英語) バージョン 22.3 から 24.2 |
|
インテル® Quartus® Prime 開発ソフトウェア・スタンダード・エディション (英語) バージョン 23.1std |
注: 各バージョンのインテル® Quartus® Prime 開発ソフトウェアのオペレーティング・システムのサポートについての詳細は、インテル® Altera® FPGA プロ・エディションのソフトウェア・バージョンの OS サポートおよびインテル® Altera® FPGA スタンダード・エディションのソフトウェア・バージョンの OS サポートを参照してください。
注: インテル® FPGA 開発では、デザインを処理するために必要な (推奨) 物理メモリーと同等の仮想メモリーを提供するようにシステムを構成することを推奨します。
注: これらの OS ディストリビューションはインテルによってテストされたもの、または動作が確認されているものです。その他のディストリビューションは、動作する場合としない場合があり、推奨されません。質問がある場合は、インテル・コミュニティー・フォーラム (英語) でサポートを受けることができます。商用サポート (英語) を利用可能な場合は、サポートチケットを作成してください。
CPU ホスト/ターゲット
インテル® インテグレーテッド・グラフィックス (GPU)
FPGA‡
‡注: インテル® Quartus® Prime 開発ソフトウェアの各バージョンでの OS サポートは、これらの要件と異なる場合があります。詳細は、インテル® Altera® FPGA プロ・エディションのソフトウェア・バージョンの OS サポートおよびインテル® Altera® FPGA スタンダード・エディションのソフトウェア・バージョンの OS サポートを参照してください。
注: FPGA でハードウェアをコンパイルするには、インテル® Quartus® Prime 開発ソフトウェア・プロ・エディションと BSP を個別にダウンロードする必要があります。詳細は、インテル® FPGA 開発用ソフトウェアのインストールのフロー (英語) を参照してください。
CPU ホスト/ターゲット
GPU
FPGA✝
注: FPGA でハードウェアをコンパイルするには、インテル® Quartus® Prime 開発ソフトウェア・プロ・エディションと BSP を個別にダウンロードする必要があります。詳細は、インテル® FPGA 開発フロー (英語) を参照してください。
✝注: インテル® Quartus® Prime 開発ソフトウェアの各バージョンでの OS サポートは、これらの要件と異なる場合があります。詳細は、インテル® Altera® FPGA プロ・エディションのソフトウェア・バージョンの OS サポートおよびインテル® Altera® FPGA スタンダード・エディションのソフトウェア・バージョンの OS サポートを参照してください。
インテル® oneAPI 2023.1 は、Windows* および Linux* で検証を行っています。
Windows* インテル® グラフィックス・ドライバー
ドライバーをインストールするには、次の手順に従ってください。
インテル® Iris® Xe MAX グラフィックス (開発コード名 DG1) および第 10 世代から第 13世代インテル® Core™ プロセッサー・グラフィックス
インテル® Arc™ A シリーズ・グラフィックス (開発コード名 DG2)
インテル® データセンター GPU フレックス・シリーズ (開発コード名 Arctic Sound-M、略称 ATS-M)
Linux* 汎用インテル® GPU (GPGPU) ドライバー
すべてのインテル® GPU は、この記事 (英語) の手順に従ってください。
インテル® レジストレーション・センターのアクセス方法は、日本語マニュアルをご参照ください。
インテル® oneAPI ツールキット向け VS Code 拡張 (英語) は、oneAPI アプリケーションを作成、デバッグ、およびプロファイルする開発者を支援します。詳細は、「Visual Studio* Code とインテル® oneAPI ツールキットの使用ユーザーガイド」 (英語) を参照してください。
VS Code Marketplace (英語) から以下の VS Code 拡張を利用できます。
インテルの最適化機能は、インテルのコンパイラーまたはその他のインテル製品を対象としたものであり、他社製品に同等の最適化を行えないことがあります。
インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。
絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。
実際の費用と結果は異なる場合があります。
© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
✝開発コード名
本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。
性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。