本資料は、インテルのウェブサイトで公開されている「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 またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
✝開発コード名
本資料は、(明示されているか否かにかかわらず、また禁反言によるとよらずにかかわらず) いかなる知的財産権のライセンスも許諾するものではありません。
本資料で説明されている製品には、エラッタと呼ばれる設計上の不具合が含まれている可能性があり、公表されている仕様とは異なる動作をする場合があります。現在確認済みのエラッタについては、インテルまでお問い合わせください。
インテルは、明示されているか否かにかかわらず、いかなる保証もいたしません。ここにいう保証には、商品適格性、特定目的への適合性、および非侵害性の黙示の保証、ならびに履行の過程、取引の過程、または取引での使用から生じるあらゆる保証を含みますが、これらに限定されるわけではありません。
性能は、使用状況、構成、その他の要因によって異なります。詳細については、http://www.intel.com/PerformanceIndex/ (英語) を参照してください。