本資料は、インテルのウェブサイトで公開されている「Intel® oneAPI DPC++/C++ Compiler Release Notes」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
このドキュメントでは、新機能、変更された機能、注意事項、および製品ドキュメントに記述されていない既知の問題について説明します。
このサイトから手順に従ってツールキットをダウンロードし、インストール手順に従ってツールキットをインストールします。
インテル® oneAPI DPC++/C++ コンパイラーの Altera FPGA (英語) の統合サポートは 2025.1 リリースで削除されました。Altera は、専用の FPGA ソフトウェア開発ツールにより FPGA サポートを引き続き提供します。既存のユーザーは、FPGA 開発をサポートし、APT、YUM/DNF、Zypper などの Linux パッケージ・マネージャー (英語) から利用できる、インテル® oneAPI DPC++/C++ コンパイラー 2025.0 リリースを引き続き使用できます。有効なサポートライセンスをお持ちのユーザーは、カスタマー・サポート・アカウントからインテル® oneAPI DPC++/C++ コンパイラー 2025.0 リリースにアクセスできます。
Altera 開発ツールへの移行に関する詳細とサポートについては、Altera の担当者までお問い合わせください。
-sample-profile-remove-probe を使用したときの call 命令で擬似プローブの記述を削除して dwarf 識別子を復元するように HWPGO を拡張しました。-gdwarf または -fprofile-sample-use を使用したときに、HWPGO がプロファイル・ファイルを生成/ロードする際に重要になる列情報を自動的に追加するように Clang ドライバーを拡張しました。C/C++ コンパイラー
LBR_INFO 分岐予測フラグを使用して、個別の分岐予測ミスイベントのサンプルではなく分岐予測ミス・プロファイルを作成できる --lbr-mispredicts モードを追加しました。このアプローチは特殊なユースケースでのサンプリング要件を簡素化しますが、分岐が発生した場合にのみ予測ミスを収集するという既知の欠点があります。この欠点が気になる場合は、『インテル® oneAPI DPC++/C++ コンパイラー・デベロッパー・ガイドおよびリファレンス』 (英語) で説明されているように、--lbr-mispredicts よりも個別の分岐予測ミスイベントを使用することを推奨します。-qopt-report オプションomp simd nontemporal を使用したメモリーアクセスを最適化レポートに記録します。#pragma unroll で指定されたアンロール係数をオーバーライドする場合、最適化レポートにコメントを追加します。ベクトル化されたループ反復の回数に対してアンロール係数が大きすぎる場合に発生することがあります。-f[no]-offload-fp32-prec-div および -f[no]-offload-fp32-prec-sqrt コンパイラー・オプションを追加しました。SYCL コンパイラー
sycl_ext_oneapi_kernel_compiler (英語) 拡張仕様が更新され、SYCL をソース言語として受け付けるようになりました。SYCL_UR_USE_LEVEL_ZERO_V2=1 を指定して有効にできます。SYCL ライブラリー
sycl_ext_oneapi_graph (英語) 拡張機能を使用して構築したグラフにネイティブランタイムとの相互運用性のためのカスタムコマンドを送信できる sycl_ext_codeplay_enqueue_native_command (英語) 拡張機能を実装しました。sycl_khr_default_context 拡張機能を実装しました。sycl_ext_oneapi_device_image_backend_content (英語) 拡張機能を導入および実装しました。sycl_ext_oneapi_current_device (英語) 拡張機能を導入および実装しました。sycl_ext_oneapi_work_group_static (英語) および sycl_ext_oneapi_work_group_scratch_memory (英語) 拡張機能を導入および実装しました。sycl_ext_intel_kernel_queries (英語) 拡張機能を導入および実装しました。sycl_ext_intel_event_mode (英語) 拡張機能を実装しました。sycl_ext_oneapi_launch_queries (英語) 拡張機能の実装を完了しました。sycl_ext_oneapi_kernel_arg_properties (英語) 拡張機能の実装を完了しました。sycl_ext_oneapi_num_compute_units (英語) 拡張機能を導入および実装しました。SYCL_LANGUAGE_VERSION マクロ定義を調整しました。(KhronosGroup/SYCL-Docs#704 (英語) を参照してください)。std::string を使用しており、その ABI はある時点で gcc により破損することが分かっています。古い C++11 より前の ABI を使用してビルドされているアプリケーションをサポートするには、SYCL ランタイムで std::string (およびその他のクラス) を ABI 境界で使用しないようにする必要があります。この作業はほぼ完了していますが、一部の API がまだ問題を起こすことがあり、現在修正中です。print_graph API をサポートしました。pipe::get_pipe_name API をサポートしました。get_backend_info をサポートしないことに決定しました。C++11 より前の ABI モードで呼び出すとエラーが発生するようになりました。OpenMP
-fopenmp-target-teams-default-vla-alloc-mode=malloc/wilocal (デフォルト: wilocal) を追加しました。このオプションにより、teams および distribute 構文にプライベートな可変長配列のローカルコピーの割り当て方法を制御できます。-fopenmp-target-loop-stride=local-size/global-size/one (デフォルト: local-size) を追加しました。統合ランタイム
SYCL ランタイム
shared_ptrs のコピー回数を減らしました。local_accessor に必要なメモリー割り当ての量を減らしました。C/C++ コンパイラーおよび SYCL コンパイラー
-fsycl-max-parallel-link-jobs オプションの実装からビジーウェイト・ループを削除して、待機時のリソース消費を減らしました。SYCL_EXTERNAL 関数に関するコンパイラー警告診断を追加しました。-Wimplicit-float-conversion の動作をアップストリーム clang の動作に合わせました。-mlong-double-64 を使用したコンパイルでまだ発生していた、128 ビット double がターゲットでサポートされていないというエラーを修正しました。-fsycl-device-code-split=off を指定して 2 つのカーネル (reqd_work_group_size 属性/プロパティーが示されるカーネルと示されないカーネル) で実行するとワークグループ・サイズの不一致に関するランタイムエラーが発生する問題を修正しました。dynamic_address_cast のサポートを改善しました。async_work_group_copy API の SYCL CTS テストで発生していたセグメンテーション・フォルトを修正しました。UR_RESULT_ERROR_INVALID_ARGUMENT 例外をスローする問題を修正しました。sycl_ext_intel_esimd (英語) 拡張機能の仕様と実装を拡張し、2D ロード/ストア/プリフェッチ操作のサポートをチェックする新しいクエリーを追加しました。SYCL ライブラリー
group_[load|store] 関数が 16 の short ベクトルを使用するときにネイティブの組込み関数を使用するようにしました。SYCL_DEVICE_ALLOWLIST の決定に対するトレース (SYCL_UR_TRACE を使用) を追加しました。info::execution_capability クエリーの実装を調整しました。select_from_group などのグループ関数で特定のデータ型 (pointers、marray<bfloat16, 4> など) を使用したときのコンパイルの問題を修正しました。sycl_ext_oneapi_reduction_properties 拡張機能でドキュメント化されている制約を適用しました。sycl_ext_oneapi_group_load_store 拡張機能の仕様と実装で、プロパティーの制約を明確化および適用しました。sycl_ext_oneapi_in_order_queue_events 拡張仕様と実装を更新し、ワークが送信されていないキューで ext_oneapi_get_last_event によって返されるイベントをオプションにしました。sycl_ext_oneapi_group_load_store 仕様実装を更新し、グループロード/ストア組込み関数でアライメント・プロパティーを受け入れるようにしました。sycl_ext_oneapi_free_function_kernels のホスト API を #ifndef __SYCL_DEVICE_ONLY__ で保護する必要がある制限を解除しました。-ffast-math オプションを指定したときに known_identity<min|max> が不正な値を返す問題を修正しました。-funsigned-char を指定してアプリケーションをビルドしたときに SYCL ヘッダーで static_assert エラーが発生する問題を修正しました。sycl_ext_oneapi_enqueue_functions 拡張機能でキューに追加されたメモリー操作によって sycl_ext_oneapi_enqueue_barrier 拡張機能が正常に動作しなくなる問題を修正しました。-D_FORTIFY_SOURCE=2 でコンパイルすると、JIT ステージで (または AOT コンパイル中に) デバイス・コンパイラーから未定義の __memcpy_chk シンボルに関するエラーが発生する問題を修正しました。std::exp(std::complex) の不正な結果が返される問題を修正しました。_DEBUG マクロを設定している場合、Windows で vec::operator[] を使用したときに発生していたコンパイルの問題を修正しました。joint_matrix_apply の実装を調整しました。ext_oneapi_bindless_sampled_image_fetch_1d、ext_oneapi_bindless_sampled_image_fetch_1d_usm、ext_oneapi_bindless_sampled_image_fetch_2d、ext_oneapi_bindless_sampled_image_fetch_2d_usm、ext_oneapi_bindless_sampled_image_fetch_3d をサポートしました。command_graph ノードクエリーにおける競合状態を修正しました。ext_oneapi_weak_object 拡張機能がグラフ・オブジェクトで動作するようにしました。local_accessor または work_group_memory オブジェクトを使用すると SYCL 以外のバックエンドで正しく動作しない問題を修正しました。SYCLcompat ライブラリー
syclcompat および dpct 名前空間のギャップを縮小することを目的として、新しいグループ・ユーティリティー関数とクラスのセットを導入しました。compare_mask が 4 バイト出力の誤った 2 バイト・セグメントに結果を出力する問題を修正しました。logical_sub_group_size が 32 の場合の permute_sub_group_by_xor の実装を最適化しました。ternary_logic_op を追加しました。OpenMP
-O0 を指定したときに OpenMP simd ループの折りたたみにより誤ったベクトル化が行われていた問題を修正しました。-qopt-report コメントの出力を改善しました。サードパーティーのホスト・コンパイラーに関する問題
get_vec_idx 内部ヘルパーのコンパイル問題を修正しました。#include が失われる問題を修正しました。その他
SYCL
G、VL です。sycl_ext_oneapi_matrix 拡張機能を使用する場合、一部のデバイスでは、プログラムを実行するデバイスに対応する sm バージョン (Compute Capability) を使用することが重要です。特に、half データ型を使用する行列演算で影響があります。exp や tanh など) は、Windows で一部のエッジケース入力に対して不正な結果を返すことがあります。この問題は SYCL 実装では修正されているため、残りの問題は MSVC にあると考えられます。OpenMP
-O0 -g を指定してコンパイルされた一部の OpenMP spir64 オフロードプログラムは、ランタイムエラー (セグメンテーション・フォルト) を引き起こすことがあります。回避策: プログラムを -g を指定しないでコンパイルするか、-O2 -g を指定してコンパイルしてください。統合ランタイム
インテル® グラフィックス・コンパイラー
-O0 モードをサポートしていないため、誤ってコンパイルされ、誤った結果を生成してクラッシュすることがあります。この問題は、O0 モードの ESIMD コードに直接影響します。一時的な回避策として、ESIMD コードは -O0 モードでも最適化されます。CPATH から C_INCLUDE_PATH および CPLUS_INCLUDE_PATH への移行
oneAPI 環境設定スクリプトはこれまで、C、C++、Fortran ヘッダーファイルのパスを CPATH 環境変数に追加してきました。関連するパスを CPATH ではなく C_INCLUDE_PATH および CPLUS_INCLUDE_PATH 環境変数に追加するように、これらのスクリプトを移行しています。この移行は、インテルが提供するヘッダーファイルが、ユーザーが自身のソースファイルでコンパイラーの警告を要求または抑制するために使用するコンパイラー・オプションの影響を受けないようにすることを目的としています。
CPATH 環境変数のパスは、ユーザーのインクルード・パスを指定します。デフォルトでは、これらのパスを経由して見つかったヘッダーファイルの潜在的に問題のあるソースコードに対して、-Wall や -W で始まるほかのオプションの使用を条件として、コンパイラーの警告が出力されます。C_INCLUDE_PATH および CPLUS_INCLUDE_PATH 環境変数のパスは、システムのインクルード・パスを指定します。デフォルトでは、これらのパスで見つかったヘッダーファイルに対するコンパイラーの警告は抑制されます (システムのヘッダーファイルの警告は、-Wsystem-headers オプションで有効にできます)。
ほとんどのユーザーにとって、この移行は透過的です。唯一の違いは、インテルが提供するヘッダーファイルのソースコードに対して警告が出力される可能性が低くなることです。しかし、一部のユーザーにとって動作に違いが生じる可能性のあるいくつかのエッジケースもあります。
CPATH 環境変数のパスは、-I オプションで指定したパスの後に検索されますが、C_INCLUDE_PATH および CPLUS_INCLUDE_PATH 環境変数のパス、-isystem オプションで指定したパス、コンパイラーにより暗黙的に追加されたパスの前に検索されます。ユーザーが独自のインクルード・パスを CPATH 環境変数の最後 (これまで oneAPI 環境スクリプトにより追加されていたパスの後) に追加していた場合、インテルが提供するヘッダーファイルのインクルード・パスよりも前に、その独自のインクルード・パスが検索されるようになります。そのため、インテルが提供するヘッダーファイルと同じ名前のユーザーが提供するヘッダーファイルがある場合、インテルが提供するヘッダーファイルよりも前に、ユーザーが提供するヘッダーファイルが検索されます。
CPATH と C_INCLUDE_PATH または CPLUS_INCLUDE_PATH 環境変数の両方に同じパスが存在する場合、-isystem オプションで指定した場合、あるいはコンパイラーにより暗黙的に追加された場合、CPATH 環境変数の一致するパスは無視されます。ユーザーが oneAPI 環境設定スクリプトで、C_INCLUDE_PATH または CPLUS_INCLUDE_PATH 環境変数に追加されたパスと一致する、インテルが提供するヘッダーファイルのパスを CPATH 環境変数に誤って追加した場合、CPATH 環境変数への追加は無視されます。oneAPI 環境設定スクリプトは以前は CPATH にパスを追加していたため、ユーザーが提供するヘッダーファイルの名前がインテルが提供するヘッダーファイルの名前と同じ場合、インクルード・パスの検索順が異なり、異なるヘッダーファイルが見つかる可能性があります。
上記のシナリオはどちらも、同じ名前のヘッダーファイルが複数のインクルード・パスに存在することを前提としています。目に見える違いは、これらのヘッダーファイルの内容が異なる場合、または #include_next ディレクティブを使用している場合にのみ生じるでしょう。
-fintelfpga、-fsycl-targets=spir64_fpga[-unknown-unknown]、-fsycl-link=early|image、-Xsycl-target-backend=spir64_fpga "opt"、-reuse-exe=arg、-fsycl-help=fpga オプションを削除しました。sycl_ext_intel_oneapi_compiler 拡張機能のサポートを終了しました。その API は当分の間は非推奨としてマークされます。代わりに sycl_ext_oneapi_kernel_compiler 拡張機能を使用してください。sycl_ext_oneapi_default_context 拡張機能は非推奨になりました。sycl_khr_default_context 拡張機能を使用してください。-fsycl-fp32-prec-sqrt コンパイラー・オプションは非推奨になりました。-foffload-fp32-prec-sqrt オプションを使用してください。sycl_ext_oneapi_kernel_properties 拡張機能の一部だったプロパティーを受け入れる、single_task および parallel_for API のオーバーロードは非推奨になりました。代わりに sycl_ext_oneapi_enqueue_functions 拡張機能を使用してください。get_backend_info API の現在の実装は非推奨になりました。SYCL 2020 仕様では現在、この実装でクエリーする内容はドキュメント化されていないため、混乱を避けるために、この実装でサポートしている既存のクエリーは非推奨になりました。メモリー・サニタイザーのサポート: CPU でサポートしているメモリー・サニタイザーの機能を、GPU を含むデバイス側に拡張しました。CPU とデバイスコードの両方でメモリーの問題を簡単に検出してトラブルシューティングできます。プラットフォーム間で包括的なメモリーエラーのチェックが保証され、アプリケーションの信頼性が向上します。
ccache の統合: コンパイラーは、C++ および SYCL コードのビルド時間を大幅に短縮する ccache (英語) をサポートしました。以前のコンパイルをキャッシュして再利用することで、反復処理が高速化し、ワークフローが効率化されます。
浮動小数点の精度の制御: 浮動小数点演算の精度とライブラリー呼び出しの制御をデバイスコードに拡張しました。
グラフィックス API との SYCL 相互運用性: DirectX 12 および Vulkan との SYCL 相互運用性の初期サポートを追加しました。開発者は、インテル® グラフィックス上で効率的なビジュアル・コンピューティング、メディア処理、レンダリング・アプリケーションを作成できます。サポートする画像形式とプラットフォームの詳細は、SYCL 相互運用性の制限付きサポートを参照してください。
SYCL コンパイラー
-fsycl-allow-device-image-dependencies コマンドライン・オプションによるデバイスコードの動的リンクをサポートしました。Windows DLL 経由でデバイスコードをエクスポートできるようになり、OpenCL GPU バックエンドで AOT コンパイルイメージの動的リンクもサポートされます。-fsycl-allow-all-features-in-constexpr オプションを指定して定数式の SYCL デバイスコードに対する制限を解除するメカニズムが実装されました。SYCL ライブラリー
sycl_ext_oneapi_graph (英語) 拡張に従って、暗黙的な記録メカニズムと動的コマンドグループ、新しいグラフエンキュー関数 execute_graph により、SYCL グラフ機能を強化しました。clamp API の追加、ext::intel::experimental::esimd::frem 関数のサポートが含まれます。sycl_ext_oneapi_enqueue_functions (英語) をサポートしました。sycl_ext_oneapi_raw_kernel_arg (英語) 拡張機能を実装しました。sycl_ext_oneapi_atomic16 (英語) 拡張機能を初期サポートしました。sycl_ext_oneapi_get_kernel_info (英語) 拡張機能を実装しました。sycl_ext_oneapi_work_group_memory (英語) 拡張機能を実装しました。sycl_ext_oneapi_reduction_properties (英語) 拡張機能を実装しました。統合ランタイム
OpenMP
その他
-q[no-]unknown-option-as-warning オプションをサポートしました。デフォルトの動作では、不明なオプションを指定するとエラーが発生します。SYCL コンパイラー
SYCL_EXTERNAL 属性が不要になりました。-Wsycl-strict 診断を含む残りの SYCL 2017/1.2.1 の互換性要素を削除しました。-Werror ビルドエラーが発生するのを防ぐため、コンパイラーにより生成される統合ヘッダー/フッターに警告が表示されないようにしました。joint_matrix 拡張機能の基本的な機能を SPV_KHR_cooperative_matrix 拡張機能に組み込みました。-fsycl-device-obj を指定した場合の不正な引数の診断を追加しました。[[sycl_device]] や [[intel::device_indirectly_callable]] などの属性を使用したときの、非外部関数/変数に対する誤解を招く診断を修正しました。-fsycl-link=early などのホスト・オブジェクトをパッケージ化するように -fsycl-link=image を更新しました。PATH など) のみを使用するように -fsycl-host-compiler を更新しました。[[intel::reqd_sub_group_size]] は非推奨になりました。sycl:: 名前空間では SYCL 2020 の構文を使用してください。atomicrmw 命令を使用した浮動小数点アトミックを有効にしました。SYCL ライブラリー
kernel_compiler 拡張機能でバイナリーキャッシュをサポートしました。SYCL_PI_TRACE の代わりに SYCL_UR_TRACE を使用するようにユーザーに通知するチェックを有効にしました。ur から ur.call に変更しました。command_graph::begin_recording を繰り返し呼び出すとエラーになるようにしました。sycl_ext_oneapi_address_cast の実装を仕様に準拠するようにしました。atomic_ref コンストラクターを最適化しました。UR_LAYER_ASAN_OPTIONS 環境変数を使用したデバイス・サニタイザーのオプションの解析を改善しました。rsqrt ESIMD API のパフォーマンスを向上しました。__SYCL_USE_VARIADIC_SPIRV_OCL_PRINTF__ は非推奨になりました。marray と vec のデータ型の制限を強化しました。sycl_ext_oneapi_address_cast を改良しました。可能な場合は "dynamic" 動作を "static" に変更します。ext::intel::info::device::device_id をレポートするように sycl-ls を拡張しました。local_accessor GDB プリンターを更新しました。block_load/block_store を使用するように ESIMD copy_to() と copy_from() を改良しました。clEnqueueNDRangeKernel で指定されていない場合、OpenCL アダプターはプログラム IL で設定されたローカル・ワーク・サイズを使用するようになりました。SYCL_CACHE_TRACE の用途を変更し、すべての SYCL プログラムキャッシュを細かくトレースできるようにしました。ZES_ENABLE_SYSMAN を設定する必要はなくなりました。device_image_scope プロパティーなしで device_global のコピー構築が可能になりました。ur.call XPTI 呼び出しストリームに何もサブスクライブされていない場合の不要なオーバーヘッドを回避するように UR ライブラリーを改良しました。libsycl-asan に変更しました。multi_ptr を非推奨から除外しました。info::device::atomic64 は非推奨になりました、代わりに sycl::aspect::atomic64 を使用してください。clGetKernelSubGroupInfo の拡張バージョンを使用するように OpenCL アダプターを改良しました。online_compiler::compile を拡張しました。その他
__attribute__((blocking)) のサポートを削除しました。この削除により、[[clang::nonblocking]], [[clang::nonallocating]], [[clang::blocking]] および [[clang::allocating]] 関数の型属性とその GNU スタイルのバリアントのサポートが有効になります。SYCL
ext_oneapi_ballot_group アスペクトを OpenCL CPU 2024.2 以降でサポートされている spir64_x86_64 ターゲットに追加しました。clang-linker-wrapper でメモリーが使用後に解放される問題を修正しました。#include <sycl/sycl.hpp> で SYCL ヘッダーを強制的にインクルードするようにしました。assert の使用に関連する ESIMD のデバイスモジュール分割を修正しました。-fsycl-targets で指定したターゲットに正しいアーキテクチャーが割り当てられるようになりました。-device_options と -device を一致させました。-device_options に HEX 値を渡さないようにしました。-fsycl-targets オプションが空のときにクラッシュする問題を修正しました。spir_func に設定しました。AccessChain の使用に対する回避策を追加しました。device_global の統合フッターを修正しました。OpenMP
SYCL
Windows で CMake とコンパイラーのバージョン 2025.1 を使用して SYCL コードをコンパイルすると、次のようなエラーが発生する既知の問題があります。
CMake Error at C:/Program Files/CMake/share/cmake-3.31/Modules/FindPackageHandleStandardArgs.cmake:233 (message):
Could NOT find IntelSYCL (missing: SYCL_LIBRARY)
Reason given by package: SYCL: It appears
that the C:/Program Files (x86)/Intel/oneAPI/compiler/latest/bin/icx.exe
does not support SYCL
回避策: C:\Program Files
(x86)\Intel\oneAPI\compiler\latest\lib\cmake\IntelSYCL\IntelSYCLConfig.cmake
ファイルに次の 2 つの変更を加えて更新する必要があります。
set(sycl_lib_suffix "7") を set(sycl_lib_suffix "8") に変更します。set(SYCL_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SYCL_FLAGS}") をlist(JOIN SYCL_FLAGS " " SYCL_FLAGS_STRING)
message(DEBUG "SYCL_FLAGS_STRING: ${SYCL_FLAGS_STRING}")
set(SYCL_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SYCL_FLAGS_STRING}") に置換します。exp や tanh など) は、Windows で一部のエッジケース入力に対して誤った結果を返すことがあります。この問題は SYCL 実装では修正されているため、残りの問題は MSVC にあると考えられます。OpenMP
その他の既知の問題
sycl_ext_oneapi_bindless_images (英語) 拡張機能のドキュメントと実装を更新しました。相互運用性構造体/関数の名前が interop から external キーワードに変更されました。sycl::ext::oneapi::experimental::is_property_key を削除しました。-fpreview-breaking-changes オプションで、ABI から一部の OSUtil::* 関数を削除しました。これらの関数は DSO の内部で使用されるもので、外部に公開する必要はありません。ext_oneapi_cl_profile 実装を ABI に依存しないようにしました。このコンパイラーのパッチリリースには、さまざまな問題の修正と品質向上が含まれています。
終了予定のサポート: インテル® oneAPI DPC++/C++ コンパイラーの Altera FPGA (英語) の統合サポートは非推奨になりました。2025年第 1 四半期のコンパイラー・リリースで削除される予定です。Altera は、専用の FPGA ソフトウェア開発ツールにより FPGA サポートを引き続き提供します。既存のユーザーは、FPGA 開発をサポートし、APT、YUM/DNF、Zypper などの Linux パッケージ・マネージャー (英語) から利用できる、インテル® oneAPI DPC++/C++ コンパイラー 2025.0 リリースを引き続き使用できます。有効なサポートライセンスをお持ちのユーザーは、カスタマー・サポート・アカウントからインテル® oneAPI DPC++/C++ コンパイラー 2025.0 リリースにアクセスできます。
Altera 開発ツールへの移行に関する詳細とサポートについては、Altera の担当者までお問い合わせください。
このパッチリリースには、次の新機能、品質向上および問題の修正が含まれています。
[-x|-ax][SIERRAFOREST|GRANDRIDGE|GRANITERAPIDS|EMERALDRAPIDS|
GRANITERAPIDS-D|ARROWLAKE|ARROWLAKE-S|LUNARLAKE|PANTHERLAKE|
CLEARWATERFOREST] // Linux
[/arch:|/Qx|/Qax][SIERRAFOREST|GRANDRIDGE|GRANITERAPIDS|EMERALDRAPIDS|
GRANITERAPIDS-D|ARROWLAKE|ARROWLAKE-S|LUNARLAKE|PANTHERLAKE|
CLEARWATERFOREST] // Windows
新機能
パフォーマンス・チューニングと機能強化
SYCL コンパイラー
--offload-new-driver を使用した新しい SYCL オフロード・ドライバー・メカニズムを導入し、I/O と外部プロセスを削減することでインフラストラクチャーを改善し、リンク時間を短縮します。-fsycl-range-rounding オプションを追加しました。さらに、試験的な -fsycl-exp-range-rounding オプションは、すべての次元にわたって丸めを実行します。-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 拡張の初期サポートを導入しました。fma を追加しました。sycl_ext_oneapi_group_sort 拡張の改善: 仕様のリビジョン 2 に合わせて sycl_ext_oneapi_group_sort 拡張の実装を更新しました。以前のバージョン 1 は使用できなくなり、コードの変更が必要になる場合があります。SYCL コンパイラー
truncf、sinpif、rsqrtf、exp10f、ceilf、copysignf、cospif、fmaxf、fminf などの数学関数を新たにサポートしました。インテルの数学関数 (IMF) の統合を拡張し、インテルのデバイスのデバイスコードで ::rand と ::srand を利用できるようにしました。this キャプチャーや、複数のターゲットが -fsycl-targets オプションに渡されるとアーキテクチャー情報が欠落するシナリオのエラーメッセージを改善しました。-MD オプションで依存関係を生成するのに必要なコマンドの数が削減され、ビルドプロセスが合理化されました。SYCL ライブラリー
sqrt 関数と rsqrt 関数をサポートしました。sycl_ext_oneapi_bindless_images 拡張を更新しました。executable_command_graph::update によるグラフ全体の更新をサポートしました。<CL/sycl.hpp> ヘッダーの使用に関する警告を追加しました。local_accessor::get_pointer と local_accessor::get_multi_ptr は、ホストで呼び出された場合、無効な例外をスローするようになりました。atomic_update、block_load、block_store など) のオーバーロードを追加し、一部のテンプレート引数を省略できるようにしました。bfloat16 のベクトルを数学関数に渡せるようにするため、sycl_ext_oneapi_bfloat16_math_functions を更新しました。sycl::vec::as の最適化: sycl::detail::memcpy の実装を最適化することで sycl::vec::as のパフォーマンスを改善しました。sycl::vec::convert サポート: vec<bfloat16, N> との間の sycl::vec::convert をサポートしました。marray<bool, n>::operator++/-- と accessor::get_multi_ptr は非推奨となりました。sycl_ext_oneapi_free_function_queries の最新リビジョンを実装しました。sycl-ls --verbose を拡張し、UUID やアーキテクチャーなどの詳細なデバイス情報を出力できるようにしました。copy_to と copy_from ESIMD API でコンパイル時のプロパティーをサポートしました。printf インターフェイス:: 浮動小数点値を出力する際の使いやすさを向上するため、experimental::printf を非可変長インターフェイスに切り替えました。rdregion および wrregion API の検証を改善しました。vec の変異スウィズル演算子とスカラー変換を更新しました。ext_intel_matrix をサポートしました。load_2d、store_2d、prefetch_2d ESIMD API の新しいオーバーロードを導入しました。shift_group_left、permute_group_by_xor など) をサポートしました。block_store API の制限解除と slm_atomic_update API の拡張により、fsub と fadd をサポートしました。image_device_handle のデバイス間コピーを導入しました。libsycl.so の起動オーバーヘッドを削減しました。SYCL コンパイラー
-fsycl-link-targets オプションを使用すると、意図せずに追加のデバイス・コード・リンク・ステップがトリガーされる問題を修正しました。--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[] の実装でエラーを引き起こす厳密なエイリアシング違反を解決しました。local_accessor 引数が、特に Windows と -O0 最適化を指定した Linux でランタイムエラーになる問題に対処しました。ONEAPI_DEVICE_SELECTOR に無効な値が渡されるとハングする問題を解決しました。marray と vec で不均一グループ組込み関数を使用する際のコンパイルの問題を解決しました。device_global 変数の型として使用される struct に適用されたメモリー属性が無視される問題を解決しました。value_type と vector_t メンバー型エイリアスをスウィズルに追加しました。ONEAPI_DEVICE_SELECTOR を持つ環境で、デフォルトで構築されたイベントで event::get_backend() を呼び出すとクラッシュする問題を修正しました。--ignore-device-selectors を指定した sycl-ls が環境変数を適切に無視しない問題を修正しました。sycl::ext::oneapi::experimental::properties の可変引数コンストラクターを拡張仕様に一致するように修正しました。load_2d、store_2d、prefetch_2d などの ESIMD 関数を使用するとビルドプログラムに失敗する問題を修正しました。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 バックエンドのカーネルを無視してデバイス固有の制限を返す問題を修正しました。SYCL コンパイラー
-fsycl オプションを使用せず、リンクステップでは -fsycl オプションを使用するコンパイルシナリオをサポートするため、Windows で以前に導入された変更を元に戻しました。コンパイラーはリンクステップでリンクする標準ライブラリーのバージョンを認識しないため、このシナリオはサポートされなくなりました。2025.0 での API/ABI に関する重大な変更
このリリースでは ABI に関して重大な変更があります。古いバージョンのツールチェーンでビルドされたアプリケーションを新しいバージョンの 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 オーバーロードを削除しました。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 実装をプレビューバージョンに切り替えました。<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 を削除しました。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 の既知の問題
.wait() を明示的に呼び出すことです。この問題は次のリリースで修正される予定です。以下の例では、最初のカーネルが実行を完了する前に、2 番目のカーネルが実行を開始します。// q1 実行時間の長いタスク
sycl::event e = q1.single_task([=](){ /* ... */ });
// q2 タスク
q2.single_task(e, [=](){ /* ... */ });
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 の機能
-fopenmp-offload-mandatory コンパイラー・オプションのサポートにより、ホスト・フォールバック・コードの作成が省略され、デバイスへの OpenMP オフロードが失敗した場合にランタイムエラーが生成されます。device={arch(gen)} が指定されている場合に、インテル® Xe2 アーキテクチャーの GPU が含まれるようにディスパッチ構造の declare バリアントが更新されました。device_type(host|nohost|any) 節がサポートされました。if 節が追加されました。map(always : x) は map(always, tofrom : x) と同じです。ompx_sub_group_size 節のサポートにより、カーネルの SIMD 幅を設定できます。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 が拡張され、特性によるデバイス選択がサポートされます。注目すべき OpenMP の修正
adjust_args 節を指定しない場合の内部コンパイラー・エラーを解決しました。for ループと simd ループの最適化の問題を修正しました。thread_limit が指定されている場合、コンパイラーは target に指定されたものを常に使用するのではなく、それらの最小値を正しく選択するようになりました。declare mapper を使用してマップされた変数の参照カウントが正しく減分されないオフロードランタイムの問題を解決しました。OpenMP の既知の問題
その他の既知の問題と制限事項
-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
インテルの最適化機能は、インテルのコンパイラーまたはその他のインテル製品を対象としたものであり、他社製品に同等の最適化を行えないことがあります。
インテルのテクノロジーを使用するには、対応したハードウェア、ソフトウェア、またはサービスの有効化が必要となる場合があります。
絶対的なセキュリティーを提供できる製品またはコンポーネントはありません。
実際の費用と結果は異なる場合があります。
© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
✝開発コード名
本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。
性能は、使用状況、構成、その他の要因によって異なります。詳細については、https://www.intel.com/PerformanceIndex/ (英語) を参照してください。