インテル® oneAPI プログラミング・ガイド
はじめに
インテル® oneAPI プログラミングの概要
インテル® oneAPI ツールキットの配布について
関連ドキュメント
oneAPI プログラミング・モデル
SYCL
SYCL カーネルの互換性
OpenMP*
SYCL* を使用した C++ のデータ並列処理
キューラムダ参照を使用した簡単なサンプルコード
関連情報
C/C++ または Fortran と OpenMP* オフロード・プログラミング・モデル
基本的な OpenMP* target 構造
Msp 変数
OpenMP* TARGET を使用するコンパイル
OpenMP* オフロードの追加のリソース
デバイスの選択
ホストコードでの DPC++ デバイス選択
デバイス選択の例
ホストコードでの OpenMP* デバイスの確認と選択
SYCL* 実行とメモリー階層
実行階層
メモリーアクセスの最適化
メモリー階層
データ・プリフェッチを使用して GPU のメモリー・レイテンシーを削減
oneAPI 開発環境の設定
インストール・ディレクトリー
環境変数
setvars、oneapi-vars および vars ファイル
GPU ドライバーまたはプラグインをインストール (オプション)
モジュールファイル (Linux* のみ)
Windows* で setvars および oneapi-vars スクリプトを使用
コンポーネント・ディレクトリー・レイアウトと統合ディレクトリー・レイアウトの違い
統合ディレクトリー・レイアウトの利点
Visual Studio* Code 拡張
コマンドライン引数
実行方法
確認方法
VS####INSTALLDIR 環境変数を使用
複数の実行
統合ディレクトリー・レイアウトの環境変数の初期化
ONEAPI_ROOT 環境変数
Microsoft* Visual Studio* vcvarsall.bat 構成スクリプトの呼び出しをカスタマイズ
VS2022INSTALLDIR と VS2019INSTALLDIR 環境変数
Linux* で setvars および oneapi-vars スクリプトを使用
コンポーネント・ディレクトリー・レイアウトと統合ディレクトリー・レイアウトの違い
統合ディレクトリー・レイアウトの利点
コマンドライン引数
実行方法
複数の実行
統合ディレクトリー・レイアウトの環境変数の初期化
ONEAPI_ROOT 環境変数
Linux* で環境モジュールファイルを使用
モジュールファイル自動ロード
すべてのモジュールファイルをロードする
特定のモジュールファイルをロードするカスタム・モジュールファイルを作成
モジュールファイル・スクリプトの場所
modulefiles
ディレクトリーの作成
システムに Tcl モジュールファイル環境をインストール
modulefiles-setup.sh
スクリプトの使用
バージョン管理
複数のモジュールファイル
oneAPI で使用する
modulefiles
の記述法を理解する
関連情報
oneAPI アプリケーションで CMake を使用
oneAPI プログラムのコンパイルと実行
単一ソースのコンパイル
コンパイラーの起動
インテル® oneAPI DPC++/C++ コンパイラーの標準オプション
コンパイル例
API ベースのコード
ダイレクト・プログラミング
コンパイルの手順
従来のコンパイル手順 (ホストのみのアプリケーション)
SYCL* オフロードコードのコンパイル手順
JIT のコンパイル手順
AOT のコンパイル手順
ファットバイナリー (Fat Binary)
CPU 手順
従来の CPU 向け手順
CPU オフロードの手順
CPU オフロード向けの設定
CPU へコードをオフロード
オフロードされたコードのデバッグ
CPU コードの最適化
GPU 手順
GPU オフロードの手順
GPU オフロード向けの設定
GPU へコードをオフロード
GPU コードのデバッグ
GPU コードの最適化
GPU コマンドの例
GPU 向けの事前 (AOT) コンパイル
FPGA 手順
FPGA 向けのコンパイルが特殊である理由
SYCL* FPGA コンパイルの種別
FPGA エミュレーター
FPGA 最適化サポート
FPGA エミュレーター
FPGA ハードウェア
API ベースのプログラミング
インテル® oneAPI DPC++ ライブラリー (oneDPL)
oneDPL ライブラリーの使い方
oneDPL サンプルコード
インテル® oneAPI マス・カーネル・ライブラリー (oneMKL)
oneMKL の使い方
oneMKL サンプルコード
インテル® oneAPI スレッディング・ビルディング・ブロック (oneTBB)
oneTBB の使い方
oneTBB サンプルコード
インテル® oneAPI データ・アナリティクス・ライブラリー (oneDAL)
oneDAL の使い方
oneDAL サンプルコード
インテル® oneAPI コレクティブ・コミュニケーション・ライブラリー (oneCCL)
oneCCL の使い方
oneCCL サンプルコード
インテル® oneAPI ディープ・ニューラル・ネットワーク・ライブラリー (oneDNN)
インテル® oneAPI ディープ・ニューラル・ネットワーク・ライブラリー (oneDNN) の使い方
インテル® oneAPI ディープ・ニューラル・ネットワーク・ライブラリー (oneDNN) サンプルコード
その他のライブラリー
ソフトウェア開発プロセス
SYCL* と DPC++ へのコードの移行
C++ から SYCL* への移行
oneAPI DPC++ コンパイラーを使用した CUDA* から SYCL* への移行
OpenCL* コードから SYCL* への移行
CPU、GPU、および FPGA 間の移行
コンポーザビリティー
C/C++ OpenMP* および SYCL* のコンポービリティー
制限事項
例
OpenCL* コードの相互運用性
DPC++ と OpenMP* オフロード処理のデバッグ
SYCL* と OpenMP* 開発向けの oneAPI デバッグツール
デバッグ環境変数
オフロード・インターセプト・ツール
インテル® ディストリビューションの GDB*
オフロード向けインテル® Inspector
オフロード処理のトレース
カーネル設定時間
バッファーの作成、サイズ、およびコピーの監視
合計転送時間
カーネル実行時間
デバイスカーネルが呼び出されてスレッドが生成される場合
オフロード処理のデバッグ
SYCL* 例外ハンドラーを使用する
異なるランタイムまたは計算デバイスで実行
CPU 実行をデバッグ
インテル® ディストリビューションの GDB を使用して互換性のある GPU での実行をデバッグ
GPU 実行をデバッグ
正当性
障害
オフロードのパフォーマンスを最適化
バッファー転送時間と実行時間
インテル® VTune™ プロファイラー
インテル® Advisor
オフロード API 呼び出しのタイムライン
パフォーマンス・チューニング・サイクル
ベースラインの確定
オフロードするカーネルの特定
カーネルをオフロード
SYCL* アプリケーションの最適化
高レベルの最適化ヒント
ループ関連の最適化
メモリー関連の最適化
SYCL* 固有の最適化
再コンパイル、実行、プロファイル、そして繰り返し
oneAPI ライブラリーの互換性
SYCL* 拡張
用語集
アクセラレーター (Accelerator)
アクセサー (Accessor)
アプリケーション・スコープ (Application Scope)
バッファー (Buffers)
コマンド・グループ・スコープ (Command Group Scope)
コマンドキュー (Command Queue)
計算ユニット (Compute Unit)
デバイス (Device)
デバイスコード (Device Code)
DPC++
ファットバイナリー (Fat Binary)
ファット・ライブラリー (Fat Library)
ファット・オブジェクト (Fat Object)
ホスト (Host)
ホストコード (Host Code)
イメージ (Images)
カーネルスコープ (Kernel Scope)
ND-Range
処理要素 (Processing Element)
単一ソース (Single Source)
SPIR-V
SYCL*
work-group (ワークグループ)
work-item (ワーク項目)
法務上の注意書き
インテル® oneAPI プログラミング・ガイド
インデックス
インデックス