インテル® oneAPI ツールキット
アップデートバージョン 2023 の注目機能

内容▪ インテル® oneAPI および AI ツール 2023 の新機能と最新情報▪ インテル® oneAPI DPC++/C++ コンパイラーのアップデート▪ NVIDIA* および AMD* GPU 向け CodePlay コンパイラー・プラグイン2

インテル® oneAPI ツールキット 2023 登場
インテル® oneAPI ツールキット 2021
インテル® oneAPI ツールキット 2022
HPC & データセンター

設計

AI & ビジュアライゼーション

デバッグ

組込みシステム & IoT

チューニング3

高い処理能力が求められる現代のアプリケーション
今日のパフォーマンス要件を満たすためには多様なアクセラレーターが必要
開発者の 48% が 2 種類以上のプロセッサーやコアを使用する
ヘテロジニアス・システムをターゲットにしている1
CPU

GPU

FPGA

その他のアクセラレーター

開発者の課題: 複数のアーキテクチャー、ベンダー、プログラミング・モデル

オープンな標準ベースのマルチアーキテクチャー・プログラミング

1. 2022年6月に Evans Data が実施した「Global Development Survey Report 22.1」

4

oneAPI をサポートするインテルの開発ツール
CPU からアクセラレーターまでカバーする優れたツールの完全なセット▪ 高度なコンパイラー、ライブラリー、解析ツール、
デバッグツール、移行ツール▪ C、C++ with SYCL*、Python*、Fortran、MPI、
OpenMP* をフルサポート▪ インテル® Advisor はコードを記述する前にデバイスターゲットの組み合わせを決定▪ インテルのコンパイラーはコードを最適化してマルチアーキテクチャーでワークロード分散を最大限に活用▪ インテル® VTune™ プロファイラーは hotspotを解析してコードのパフォーマンスを最適化▪ インテル® AI ツールは主要な DL & ML
フレームワークをサポート

ミドルウェアとフレームワーク powered by oneAPI

ライブラリー

言語
SYCL* (C++)

演算
AI/ML

メディア

Python*

ツール
GPU からレンダリングとレイトレーシング

パフォーマンス

Fortran

並列処理

デバッグ

OpenMP*

低水準ハードウェア・インターフェイス (oneAPI レベルゼロ)

CPU

GPU

FPGA

その他

5

SYCL* で高速化する
Khronos Group の標準仕様▪ オープンで標準ベース▪ マルチアーキテクチャー・パフォーマンス
▪ ベンダー依存からの解放▪ NVIDIA* GPU 上のネイティブ CUDA* に匹敵するパフォーマンス

X▪ 広く使用されている C++ 言語拡張
▪ オープンソースの SYCLomatic (英語) やインテル® DPC++ 互換性ツールによる迅速なコードの移行

アーキテクチャーインテル | NVIDIA | AMD CPU/GPU | RISC-V | ARM Mali* | PowerVR* | Xilinx

6インテル® oneAPI ツールキット
インテル® oneAPI
ベース・ツールキット

ドメイン固有のアドオン・
ツールキットC/C++、SYCL*、OpenMP*、Python* アプリケーションを構築する
ためのハイパフォーマンス・ライブラリーとツールの基本セット

HPC 開発者向け
インテル® oneAPI HPC ツールキット

エッジ & IoT
開発者向け
インテル® oneAPI IoT ツールキット

インテル® oneAPI レンダリング・ツールキット

スケーラブルで高速な Fortran、OpenMP* ネットワークのエッジで実行する、効率的および MPI アプリケーションを開発
な、信頼性の高いソリューションを構築

ハイパフォーマンスで高忠実度のビジュアライゼー
ション・アプリケーションを作成

AI 開発者とデータ・サイエンティスト向け

ツールキットpowered by
oneAPI

映像クリエーター、
科学者、エンジニア
向け

インテル® AI アナリティクス・ツールキット
最適化された DL & ML フレームワークとハイパフォーマンスの Python* ライブラリーでエンドツーエンドのマシンラーニングとデータサイ
エンスのパイプラインを高速化

ディープラーニング推論の開発者向け
インテル® ディストリビューションの OpenVINO™
ツールキットエッジからクラウドまでハイパフォーマンスな推論とアプリ
ケーションをデプロイ

ダウンロード: xlsoft.com/jp/products/intel/oneapi
またはインテル® デベロッパー・クラウド (英語) で実行
最新バージョン 2023

7

インテル® oneAPI ツール 2023 とインテル® AI ツール 2023 – 特長
強力な新しいアーキテクチャーに最適化された標準ベースのサポートを提供
インテルの今後の CPU と GPU
アーキテクチャーのポートフォリオに最適化されたサポートを提供
第 4 世代インテル® Xeon® スケーラブル・プロ
セッサー
インテル® アドバンスト・マトリクス・エクステン
ション、インテル® クイックアシスト・テクノロジー、インテル® AVX-512、bfloat16 などを搭載

インテル® Xeon® CPU マックス・シリーズ
高帯域幅メモリー搭載

インテル® データセンター GPU
ハードウェア AV1 エンコーダー内蔵のフレッ
クス・シリーズと、データ型の柔軟性、インテル®
Xe マトリクス・エクステンション、ベクトルエン
ジン、Xe リンク、その他の機能を搭載したマッ
クス・シリーズ

コンパイラーと SYCL* サポート

パフォーマンス・ライブラリー

インテル® oneAPI DPC++/C++ コンパイラー
CPU と GPU オフロードのパフォーマンスを向上、コードの移植性と生産性を高めるため SYCL* 言語サポートを拡大

インテル® oneAPI マス・カーネル・ライブラリー
BLAS および FFT の CUDA* ライブラリー関数 API の互換性を向上、第 4 世代インテル® Xeon® スケーラブル・プロ
セッサー (開発コード名 Sapphire Rapids) でインテル®
XMX を活用して TF32、FP16、BF16、INT8 データ型の行列乗算計算を最適化、SYCL*、C/Fortran、OpenMP* オフロー
ド・プログラミング向けインターフェイスを提供

インテル® oneAPI DPC++ ライブラリー (インテル®
oneDPL) (英語)
ヒープとソート・アルゴリズムの追加により SYCL* カーネル
での C++ 標準ライブラリーのサポートを拡大し、OpenMP*を使用したスレッドレベルの並列処理に対応
インテル® DPC++ 互換性ツール (英語)
オープンソースの SYCLomatic プロジェクトをベースにしており、ランタイム、ドライバー、cuBLAS、cuDNN を含む、
CUDA* ライブラリー API の移行を向上
インテル® Fortran コンパイラー
Co-Array を実装、MPI や OpenMP* などの外部 API の必要性を排除、OpenMP* 5.x のオフロード機能を拡張、DO
CONCURRENT GPU オフロードを追加、ソースレベルのデバッグの最適化を向上

インテル® oneAPI スレッディング・ビルディング・ブロック
parallel_sort の最新の C++ 標準のサポートと使用法を改善、同時に複数の task_arena を呼び出したときの競合を減らすように同期メカニズムを改善、Microsoft* Visual
Studio* 2022 および Windows Server* 2022 をサポート
インテル® oneAPI ビデオ・プロセシング・ライブラリー
インテル® データセンター GPU フレックス・シリーズのハードウェア AV1 コーデックとインテル® Arc™ グラフィック
スをサポート、OS のサポートが拡張され新たに RHEL9、CentOS* Stream 9、SLES15Sp4、Rocky 9 Linux* をサポート、sample_multi_transcode の並列エンコーディン
グ機能を追加

2022年12月に発表された新機能と拡張機能 - 詳細: バージョン 2023 の機能

8インテル® oneAPI ツール 2023 とインテル® AI ツール 2023 – 特長
強力な新しいアーキテクチャーに最適化された標準ベースのサポートを提供
解析とデバッグ

AI とアナリティクス

レンダリングとビジュアル・コンピューティング

インテル® VTune™ プロファイラー
アプリケーション・パフォーマンス・スナップショット機能により MPI のインバランス問題を特定、使用率、帯域幅の消費、その他の問題について、Xe リンクのクロスカード・トラフィッ
クを可視化、第 4 世代インテル® Xeon® スケーラブル・プロ
セッサー (開発コード名 Sapphire Rapids)、インテル® デー
タセンター GPU マックス・シリーズ (開発コード名 Ponte
Vecchio)、第 13 世代インテル® Core™ プロセッサーをサポート

インテル® AI アナリティクス・ツールキット (英語)
分散トレーニングを除き、Windows* で Linux* と完全に同等でネイティブな実行を実現 (GPU のサポートは 2023年
第一四半期を予定)

インテル® oneAPI レンダリング・ツールキット
CPU で高速な SIMD パフォーマンスを実現するインテル®
インプリシット SPMD プログラム・コンパイラー・ランタイ
ム・ライブラリーを含む

インテル® oneAPI ディープ・ニューラル・ネットワーク・ライ
ブラリー (英語)インテル® AMX、インテル® AVX-512、VNNI、bfloat16 を含む、第 4 世代インテル® Xeon® スケーラブル・プロセッ
サーの高度な機能を利用して、さらに優れた CNN パフォー
マンスを提供インテル® オープン・ボリューム・カーネル・ライブラリー
VDB ボリュームのメモリーレイアウト効率を向上、インテル®
AVX-512 の 8-wide の CPU デバイスモードを追加

インテル® Advisor
メモリー、キャッシュ、計算のボトルネックを特定して優先度を設定し、原因を理解できるインテル® データセンター GPU
マックス・シリーズの自動ルーフライン解析を追加、CPU から GPU へのオフロードのデータ転送再利用コストを最適化する実用的な推奨事項を提供

Modin 向けインテル® ディストリビューション (英語)バックエンドで新しいヘテロジニアス・データ・カーネル(HDK) ソリューションと統合して、負荷の低い計算リソース
から負荷の高いまたは分散計算リソースまで AI ソリュー
ションを拡張インテル® OSPRay およびインテル® OSPRay Studio (英語)
メッシュ・ジオメトリー、プリミティブ、オブジェクトのマルチセグメント・デフォメーション・モーション・ブラー機能、メッシュおよびサブディビジョン・ジオメトリーの face-varying
属性、フォトメトリック・ライト・タイプなどの新しいライト機
能、AI トレーニング向けのセグメンテーション画像を作成するインスタンス ID バッファーなどを追加

インテル® ディストリビューションの Python*GPU への「計算-フォロー-データ」モデルの拡張、ライブラ
リーとフレームワーク間のデータ交換、NumPy* および
Numba パッケージのデータ並列拡張などのベータ機能を含む

2022年12月に発表された新機能と拡張機能 - 詳細: バージョン 2023 の機能

9インテル® データセンター GPU フレックス・シリーズ向け開発ツール
メディア、視覚推論、およびクラウド・ワークロードをマルチアーキテクチャーで高速化
GPU にはインテル® oneAPI ビデオ・プロセシン
グ・ライブラリー、CPU 速度のメディア処理、
配信、クラウド・ゲーム・ストリーミングにはGStreamer + FFmpeg を使用

インテル® グラフィックス・パフォーマンス・アナ
ライザー (英語) は CPU と GPU 上でビジュア
ル・コンピューティングとグラフィックスのワーク
ロードを最適化

インテル® oneAPI DPC++/C++ コンパイラーとインテル® oneVPL (どちらもインテル® oneAPI
ベース・ツールキットに含まれる) は、同じコード
で AI 視覚推論ワークロードを CPU と GPU 間で最大 150TOPS INT8 にスケールアップ

インテル® ディストリビューションのOpenVINO™ ツールキット powered by
oneAPI は TensorFlow* や PyTorch* などの一
般的なディープラーニング・フレームワークをサポートしており、AI 視覚推論の効率を高め、迅速なデプロイを実現

インテル® VTune™ プロファイラーは、アプリ
ケーションのパフォーマンスを解析し、最も時間のかかる GPU コード領域特定し、SYCL*、
OpenCL* コード、Microsoft* DirectX*、
OpenMP* オフロードコードの GPU オフロード
スキーマとデータ転送を最適化して、計算集約型のタスクを高速化

インテル® AI アナリティクス・ツールキット
powered by oneAPI は、最適化された DL/ML
フレームワークとハイパフォーマンスの Python*
ライブラリーにより、エンドツーエンドのマシン
ラーニングとデータサイエンスのパイプラインを高速化

10インテル® データセンター GPU マックス・シリーズ向け開発ツール
HPC と AI で優れたパフォーマンスを発揮するマルチアーキテクチャー・アプリケーションを開発
HPC を高速化
インテル® oneAPI DPC++/C++ コンパイラー、インテル®
Fortran コンパイラー、パフォーマンス・ライブラリー(インテル® oneMKL、インテル® oneDNN、インテル® MPI
ライブラリー) は、インテル® Xe マトリクス・エクステンショ
ン (インテル® XMX) によるアクセラレーションとインテル®
Xe リンクによる GPU 間の直接通信を利用して、複数のGPU で実行するアプリケーションを高速化
解析とデバッグツールは最も時間のかかる GPU コード領域を特定することで、開発者が計算集約型のタスクを解析して高速化し、ディスクリート GPU 上のアプリケーションの正当性を確保し、効率良くデバッグできるように支援。
インテル® GPU 上で最適に動作するコードを設計するための実用的なアドバイスを提供

AI と DL 推論を高速化
インテル® oneAPI ベース・ツールキットに含まれる
インテル® oneDNN はインテル® XMX を活用してディー
プラーニング・フレームワークの AI トレーニング/推論を高速化

インテル® OpenVINO™ ツールキット powered by
oneAPI は AI 視覚推論を合理化し、迅速なデプロイを実現
どちらのツールも、TensorFlow* や PyTorch* などの一般的なディープラーニング・フレームワークをサポート。
インテル® AI アナリティクス・ツールキットの各種ツールで近々 GPU をサポート予定

コード移行ツールでマルチアーキテクチャー・コードを効率良く作成
CUDA* コードを SYCL* に移行して、インテル® データセンター GPU マックス・シリーズを含む複数のベンダーのアーキテクチャーに容易に移植できるように単一のソース
コード・ベースを作成
オープンソースの SYCLomatic (英語) をベースとする
インテル® DPC++ 互換性ツール (英語) がほとんどのプロ
セスを自動化し、継続的なコードの保守にかかる時間を大幅に短縮

近日リリース予定 – ハイパフォーマンスかつ高忠実度のレイトレーシングとレンダリング
インテル® Embree (英語) は C++ with SYCL* に完全に移行され、ハードウェア・レイトレーシング・ユニットと拡張メモリー容量を活用して、大規模なデータセットのレンダ
リング・パフォーマンスを向上
インテル® オープン・イメージ・デノイズ (英語) は、インテル®
XMX を利用して高品質でハイパフォーマンスなノイズ除去
機能と AI 最適化を提供

11

インテル® oneAPI DPC++/C++ コンパイラー
アップデート12

データ並列 C++SYCL* の oneAPI 実装
DPC++ = ISO C++ と Khronos SYCL* およびコミュニティーによる拡張

選択の自由: 将来に対応したプログラミング・モデル▪ 複数のハードウェア・ターゲットでコードを再利用可能

ダイレクト・プログラミング:

SYCL*/データ並列 C++▪ 特定のアクセラレーター向けのカスタム・チューニングが可能▪ 専用の言語に代わる、オープンな業界全体の代替手段

DPC++ = ISO C++ と Khronos SYCL* およびコミュニティー
による拡張

コミュニティーによる拡張
Khronos SYCL*▪ データ並列プログラミングの生産性を向上▪ 標準 C++ と同等のネイティブな高水準言語パフォーマンスを提供

ISO C++▪ Khronos Group の SYCL* を継承し、データ並列処理とヘテロジニアス・
プログラミングをサポート

コミュニティー・プロジェクトを通じて言語の拡張を推進▪ データ並列プログラミングを簡素化する拡張機能を提供▪ オープンな共同開発により継続的に進化
オープンソースおよびインテルの DPC++/C++ コンパイラーはインテルの CPU、GPU、FPGA をサポートしています。
Codeplay* は、NVIDIA* GPU をターゲットとする DPC++ コンパイラー (英語) を発表しています。

13インテル® oneAPI ツールキットとコンパイラー
重要な変更点1. DPCPP コンパイラー・ドライバーが廃止されます◼

makefile やコンパイル環境で設定されているコンパイラー・ドライバーを icpx に変更してください◼

その際コンパイラー・オプションに –fsycl を追加することを忘れないでください14インテル® oneAPI ツールキットとコンパイラー
重要な変更点2. コンパイラーは C++17 をデフォルトの C++ 言語として使用するようになりました◼

言語バージョンのデフォルトが変更されたことで、表示される警告を非表示にしたい場合、-std=c++14 オプションを追加します◼

ただし、2023 バージョンのコンパイラーでは、C++17 以前の言語モードでの SYCL* コンパイルが廃止されました

3. このリリースは、以前のリリースと下位互換性がありません。既存の SYCL*
アプリケーショ ンは再コンパイルしないと新しいランタイムで動作しません
15

インテル® oneAPI ツールキットとコンパイラー
重要な変更点4. device と platform のデフォルトが default_selector_v になりました

host_selector が廃止されました。使用するとエラーとなります16

デバイスセレクターを操作する例#include <CL/sycl.hpp>#include <iostream>#include <string>using namespace sycl;
void output_dev_info( const device& dev, const std::string& selector_name) {std::cout << selector_name << “: Selected device: ” <<dev.get_info<info::device::name>() << "¥n";
std::cout << "-> Device vendor: " <<dev.get_info<info::device::vendor>() << "¥n";}output_dev_info( device{ default_selector_v}, "default_selector" );int main() {output_dev_info( device{ default_selector{}}, "default_selector" );output_dev_info( device{ host_selector{}}, "host_selector" );output_dev_info( device{ cpu_selector{}}, "cpu_selector" );output_dev_info( device{ gpu_selector{}}, "gpu_selector" );output_dev_info( device{ accelerator_selector{}}, "accelerator_selector" );return 0;}

17

インテル® oneAPI DPC++/C++ コンパイラー 2023.0
リリースノート
https://jp.xlsoft.com/documents/intel/compiler/dpc/23.0/intel-oneapidpc-c-compiler-release-notes.pdf
新機能、変更された機能、注意事項、および製品ドキュメントに記述されていない
既知の問題については、リリースノートを参照してください18

NVIDIA* および AMD* GPU 向け
CodePlay コンパイラー・プラグイン

19

CUDA* から SYCL* への移行が容易に
オープンソースの SYCLomatic ツールによりコード移行時間を短縮

すでに CUDA* で記述されているコードを C++ withSYCL* に移行する開発者を支援、可能な場合は人間が解読可能なコードを生成
通常はコードの 90-95% を自動的に移行1

1出典: 2021年9月現在のインテルによる推定。Rodinia、SHOC、PENNANT など、70 種類の HPC ベンチマークとサンプルの測定結果に基づいています。 結果は異なることがあります。

開発者がアプリケーションの移行を完了できるように支援するインラインコメントを提供
インテル® DPC++ 互換性ツールはインテル® oneAPI
ベース・ツールキットに含まれるインテルの実装

20

NVIDIA* GPU および AMD* GPU 向け
Codeplay コンパイラー・プラグイン
インテル® oneAPI ベース・ツールキットに NVIDIA* GPU と AMD* GPU サポートを追加
NVIDIA* GPU および AMD* GPU 向け oneAPI

優先サポート• インテル® DPC++/C++ コンパイラーへの最新のバイナリープラグインを Codeplay から無料
でダウンロード可能• NVIDIA* GPU• AMD* GPU (ベータ)• インテル® oneAPI ベース・ツールキットのリリースと同時に利用可能• プラグインは四半期ごとに oneAPI と同期して更新される• インテル® DPC++/C++ コンパイラーに対する有効なインテルの優先サポートの保有者のみ、
インテル、Codeplay、およびチャネルから追加
で購入可能• インテルが受け付け、Codeplay がサポートを提供• 古いバージョンのプラグインへアクセス可能

NVIDIA* GPU プラグイン (英語)AMD* GPU プラグイン (英語)

Codeplay のブログ (英語)

Codeplay のプレスリリース (英語)21oneAPI for NVIDIA*/AMD* GPU とは
oneAPI for NVIDIA*/AMD* GPU は、開発者が DPC++/SYCL* を利用して oneAPI アプリケーションを作成し、それらを NVIDIA*/AMD* GPU 上で実行できるようにするインテル® oneAPI ツール
キット向けのプラグインです◼

◼

oneAPI for NVIDIA*/AMD* GPU を使用すると、
CUDA*/HIP をサポートする NVIDIA*/AMD* ベースの
GPU をターゲットにすることができます
このプラグインは、インテル® oneAPI DPC++/C++
コンパイラーを含む、既存のインテル® oneAPI ツール
キットと併用して、SYCL* コードをビルドし互換性のある NVIDIA*/AMD* GPU で実行できます

C++ SYCL* ソースコード

インテル® oneAPI ベース・ツールキット

oneAPI for NVIDIA*/AMD* GPU♰ AMD* GPU 向けはベータ版です22ジャストインタイム (JIT) コンパイル23

動作の仕組みNVIDIA* GPU および AMD* GPU ターゲットの DPC++ の実装には 2 つの主要コンポーネントがあります1. いくつかの clang++ コンパイラーのドライバーパッチ
コンパイラー・ドライバーのパッチは、ターゲットトリプルを識別し、LLVM プロジェクトの既存の CUDA* コンパイラーを使用して、デバイスイメージをビルドするアクションをトリガーすることで、DPC++ フロントエンドが NVIDIA* GPU 向けのビルドをできるようにします

2. ランタイムプラグイン
ランタイムプラグインは、SYCL* ランタイムが NVIDIA* プラットフォームと AMD* プラットフォーム上のネイティブ API (それぞれ CUDA* と HIP ドライバー) を呼び出せるようにするものです。DPC++ コンパイラーは、oneAPI ディストリビューションのSYCL* ランタイムと自動的にリンクし、NVIDIA* プラグインや AMD* プラグインが利用できる場合、ランタイムがそれらを選択して実行します24サポートされるプラットフォーム
このリリースは、次のプラットフォームで検証されています◼

◼

GPU ハードウェア

GPU
アーキテクチャー

検証済みのオペレー
ティング・システム

CUDA*/
ROCm*

GPU
ドライバー

NVIDIA* GeForce RTX* 2060

Turing* - sm_75

Ubuntu* 20.04.5 LTS

11.7

515.65.01

NVIDIA* A100 (PCIe*) 40GB

Ampere - sm_80

Ubuntu* 20.04.4 LTS

11.7

515.86.01

AMD Radeon* Pro W6800

gfx1030

Ubuntu* 20.04.5 LTS

4.5.2

21.40.2.40502

このリリースは各種 NVIDIA* GPU/CUDA* と AMD*/HIP バージョンで動作するはずですが、CodePlay は評価されていないプラットフォームでの正常な動作を保証するものではありません
Windows* 上の oneAPI では使用できませんが、Windows* 向けのパッケージは今後リリース予定
25

oneAPI for NVIDIA* GPU を使用する
前提条件
次のツールキットとツールがインストールされていること:
1.

Linux* の C++ 開発ツールの cmake、gcc、g++、make および pkg-config

2.

インテル® oneAPI ベース・ツールキット 2023.0

3.

NVIDIA* GPU ドライバーと CUDA* ソフトウェア・スタック

4.

oneAPI for NVIDIA* GPU をダウンロードしてインストール

26

C++ 開発ツールのインストール
Ubuntu*$ sudo apt update$ sudo apt -y install cmake pkg-config build-essential

Red Hat* と Fedora*$ sudo yum update$ sudo yum -y install cmake pkgconfig$ sudo yum groupinstall "Development Tools"$ which cmake pkg-config make gcc g++/usr/bin/cmake/usr/bin/pkg-config/usr/bin/make/usr/bin/gcc/usr/bin/g++

SUSE*$ sudo zypper update$ sudo zypper --non-interactive install cmake pkg-config$ sudo zypper --non-interactive install pattern devel_C_C++

27

NVIDIA* GPU ドライバーと CUDA* ソフトウェア・スタック「Linux* 向けの NVIDIA* CUDA* インストール・ガイド」 (英語) の手順に従って、NVIDIA* GPU ドライ
バーと CUDA* ソフトウェア・スタックをインストールします
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html (英語)28CUDA* ツールキットの入手

29

CUDA* ツールキットのインストール

PATH と LD_LIBRARY_PATH に CUDA* ツールキットのインストール先を追加
30

oneAPI for NVIDIA* GPU のインストーラーをダウンロード
https://developer.codeplay.com/products/oneapi/nvidia/download/ (英語)◼

CodePlay 社の oneAPI for NVIDIA* GPU インストーラーのダウンロード・サイトにアクセ
スするとユーザー登録 (無料) が求められる場合があります◼

ダウンロード・ページに移動したら、インテル® oneAPI ツールキットのバージョンとプラッ
トフォームを選択します◼

利用許諾に同意すると自己解凍型のインストーラーがダウンロードされますoneapi-for-nvidia-gpus-2023.0.0-linux.sh

31

oneAPI for NVIDIA* GPU のインストール

インテル® oneAPI ツールキットのインストール先とプラグインのインストール先を確認してください32インストールの成否を確認◼

DPC++ CUDA* プラグインのインストールを確認するには、DPC++ の sycl-ls ツールを使用して、
SYCL* で利用可能な NVIDIA* GPU があることを確認します◼

NVIDIA* GPU が利用できる場合、 sycl-ls の出力に次のような情報が表示されます$ [ext_oneapi_cuda:gpu:0] NVIDIA CUDA BACKEND, TITAN RTX 0.0 [CUDA 11.0]

33

さあコンパイルしてみましょう34コンパイルする前に◼

oneAPI for NVIDIA* GPU プラグインを使用するには、インテル® oneAPI ベース・ツール
キットに同梱される bin-llvm ディレクトリーにある clang++ コンパイラーを使用します◼

bin-llvm はデフォルトで PATH に設定されていないため、setvars.sh スクリプトに--include-intel-llvm オプションを追加して source します
システム全体$ . /opt/intel/oneapi/setvars.sh --include-intel-llvm

ローカル$ . ~/intel/oneapi/setvars.sh --include-intel-llvm

35

サンプルコード#include <sycl/sycl.hpp>// ホスト上のバッファーへの読み取り専用アクセサーを作成。

int main() {// キューのワークが完了するのを待機する暗黙のバリア// カーネルコード内で使用する 4 つの int バッファーを作成

const auto HostAccessor = Buffer.get_access<sycl::access::mode::read>();sycl::buffer<sycl::cl_int, 1> Buffer(4);// 結果をチェック// SYCL* キューを作成

bool MismatchFound = false;

sycl::queue Queue;for (size_t i = 0; i < Buffer.size(); ++i) {// カーネルのインデックス空間サイズ

if (HostAccessor[I] != i) {sycl::range<1> NumOfWorkItems{Buffer.size()};std::cout << "The result is incorrect for element: " << i// キューへコマンドグループ (ワーク) を送信<< " , expected: " << i << " , got: " << HostAccessor[i]Queue.submit([&](sycl::handler &cgh) {<< std::endl;// デバイス上のバッファーへの書き込み専用アクセサーを作成

MismatchFound = true;

auto Accessor = Buffer.get_access<sycl::access::mode::write>(cgh);}// カーネルを実行}

cgh.parallel_for<class FillBuffer>(

if (!MismatchFound) {NumOfWorkItems, [=](sycl::id<1> WIid) {std::cout << "The results are correct!" << std::endl;// インデックスでバッファーを埋めます}

Accessor[WIid] = (sycl::cl_int)WIid.get(0);return MismatchFound;

});

}

});

36

アプリケーションをコンパイル$ clang++ -fsycl -fsycl-targets=nvptx64-nvidia-cuda simple.cpp -o simple

インストールされている CUDA* のバージョンによっては、上記のような警告が表示されることがあり
ますが、これは無視してもかまいません37重要なコンパイラー・オプション◼

-fsycl: C++ ソースファイルを SYCL* モードでコンパイルするようにコンパイラーに指示します。このフラグは暗黙的に C++ 17 を有効にし、SYCL* ランタイム・ライブラリーを自動でリンクします◼ -fsycl-targets=nvptx64-nvidia-cuda: NVIDIA* GPU をターゲットとして、SYCL*
カーネルをビルドすることをコンパイラーに指示します
また、次のフラグを使用して、特定の NVIDIA* アーキテクチャー向けの SYCL* カー
ネルをビルドすることができます◼

-Xsycl-target-backend=nvptx64-nvidia-cuda --cuda-gpu-arch=sm_80

38コンパイルのヒント◼ CUDA* ツールキットがインストールされていれば、oneAPI for NVIDIA* GPU

プラグインがインストールされていなくても、CUDA* ターゲット・オプションを指定してコンパイルできます

上記は、Windows* 10 環境に CUDA* ツールキット 12.0 とインテル® oneAPI ツールキット
2023 のみをインストールしてコンパイルした例です39アプリケーションを実行◼ NVIDIA* ターゲット向けに SYCL* アプリケーションをコンパイルしたら、ランタ

イムが SYCL* デバイスとして NVIDIA* GPU を選択しているか確認する必要があります◼ 通常、デフォルトのデバイスセレクターを使用すると、利用可能な NVIDIA* GPUの 1 つが選択されます。しかし、場合によっては、SYCL* アプリケーションを変更
して、GPU セレクターやカスタムセレクターなど、より正確な SYCL* デバイスセ
レクターを設定することもあります

DPC++ CUDA* プラグインでサポートされる CUDA* デバイスのみを許可するには、次のように設定します$ export SYCL_DEVICE_FILTER=cuda

40

実行のヒント◼ プラットフォームに NVIDIA* GPU と CUDA* ツールキットがインストールされている環境では、CUDA* ターゲットのバイナリーの実行を開始できます

上記の例は、後述する CUDA* デバイスの判定を組み込んだコードを Windows* 環境でビルドして実行した例です41デバイスの識別の例
DPC++ コンパイラーは、oneAPI ディストリビューションの SYCL* ランタイムと自動的にリンクし、
NVIDIA* プラグインや AMD* プラグインが利用できる場合、ランタイムがそれらを選択して実行します。アプリケーションが SYCL* デバイスセレクターを使用すると、以下のように NVIDIA*(または AMD*) デバイスを選択できます

CUDA* デバイス検出されるとメッセージを表示する CUDA* デバイスセレクターの例。
CUDA* デバイスが見つからないと、SYCL* キューはエラーをスローします

42

実行結果

Ubuntu 22.04 (インテル® Xeon® E5-2６９９ v4 + Nvidia GeForce GTX 1060
(Pascal 世代 sm_61 アーキテクチャー)) 環境で実行
43

SYCL* アプリケーションのデバッグ
SYCL* アプリケーションのホストコードは、C++ アプリケーションとしてデバッグできますが、カーネルデバッグのサポートやツールは、ターゲットデバイスによって異なる可能性があります
インテルの OpenCL* CPU デバイスでのデバッグ◼

インテルの OpenCL* CPU デバイスを使用した DPC++ アプリケーションのデバッグについては、『インテル® oneAPI プログラミング・ガイド』の「DPC++ と OpenMP* オフロードプロセスのデバッグ」の節を参照してください

CUDA* デバッガーによるデバッグ◼

CUDA* ツールキットには、CUDA* アプリケーションの NVIDIA* GPU カーネルのデバッグをサポートする cuda-gdb デバッガーが付属しています
cuda-gdb は、DPC++ ext_oneapi_cuda バックエンド用にコンパイルされたカーネルのデバッグにも使用できます44トラブルシューティングと既知の問題 (1)CUDA* デバイスが搭載されていない環境で、oneAPI for NVIDIA* GPU で生成したバイナリーを実行すると、当然ながら実行に失敗します
ランタイムエラーではなく、
アプリケーションでデバイスを識別してエラーメッセージを表示することもできます45

トラブルシューティングと既知の問題 (2)現在のバージョンの icpx には、NVIDIA* または AMD* ターゲット向けにコンパイルする際に既知の問題があり、次のエラーが出力ます

LLVM ERROR: Bitcode output disabled because proprietary optimizations have been
performed.

これは次のリリースで修正される予定ですが、それまでは NVIDIA* または AMD* GPU をターゲットとする場合、icpx 実行ファイルの代わりに、このガイドで説明されている clang++ 実行ファイルを直接使用します46

トラブルシューティングと既知の問題 (3)sycl-ls の出力にデバイスが表示されない
1. システムに互換性のあるバージョンの CUDA* または ROCm* ツールキット (それぞれ CUDA* とHIP プラグイン向け)、および互換性のあるドライバーがインストールされていることを確認します
2. nvidia-smi または rocm-smi がデバイスを正しく認識できることを確認します
3. プラグインが正しくロードされていることを確認します
これは、環境変数 SYCL_PI_TRACE に 1 を設定して、sycl-ls を再度実行することで分かります$ SYCL_PI_TRACE=1$ sycl-ls
SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_opencl.so [PluginVersion: 11.15.1 ]SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_level_zero.so [PluginVersion: 11.15.1 ]SYCL_PI_TRACE[basic]: Plugin found and successfully loaded: libpi_cuda.so [PluginVersion: 11.15.1 ][ext_oneapi_cuda:gpu:0] NVIDIA CUDA BACKEND, NVIDIA A100-PCIE-40GB 0.0 [CUDA 11.7]

47

トラブルシューティングと既知の問題 (3) 続き …
◼ CUDA* プラグインには、CUDA* SDK で提供される libcuda.so と libcupti.so が必要です◼ HIP プラグインには、ROCm* の libamdhip64.so が必要です

CUDA* または ROCm* のインストールと、環境が適切に設定され、LD_LIBRARY_PATH が上記のライブラリーを検出できる場所を指しているか確認してください
4. SYCL_DEVICE_FILTER または SYCL_DEVICE_ALLOWLIST などのデバイス
フィルター環境変数が設定されていないことを確認します(SYCL_DEVICE_FILTER が設定されていると、sycl-ls は警告を表示します)。

48

トラブルシューティングと既知の問題 (4)コンパイラー・エラー: “cannot find libdevice (libdevice が見つかりません)”
CUDA* SDK がデフォルトの位置にインストールされていないと、clang++ がSDK を検出できず、コンパイル中にこのエラーが発生することがあります
clang-16: error: cannot find libdevice for sm_50; provide path to different CUDA installation via'--cuda-path', or pass '-nocudalib' to build without linking with libdevice

この問題を解決するには、--cuda-path オプションで CUDA* SDK のインストール・パスを指定します49トラブルシューティングと既知の問題 (5)コンパイラーのエラー: “needs target feature (ターゲットの機能が必要です)”
DPC++ ランタイムで使用される一部の nvptx ビルトインは、コンパイルに最小限の計算機能を要求します
プログラムが使用するビルトインに対し十分な計算機能をターゲットにしていない場合 (コンパイル引数-Xsycl-target-backend --cuda-gpu-arch=sm_xx を使用)、次のエラーが報告されます
error: '__builtin_name' needs target feature (sm_70|sm_72|..),...

◼

このようなエラーを回避するには、十分な計算機能を持つデバイスをターゲットにしてコンパイルしていることを確認してください◼

-Xsycl-target-backend に 32 ビット・トリプル nvptx-NVIDIA-cuda を渡していないか確認してください。この場合 nvptx64-NVIDIA-cuda に変更します50

トラブルシューティングと既知の問題 (6)Linking Error with nvvm-reflect-ftz (nvvm-reflect-ftz とのリンクエラー)
現在、DPC++ のバグにより、CUDA* プラグインをターゲットにすると FTZ を有効にできません
また、FTZ は -ffast-math や -Ofast によって有効になる場合があります
この場合、次のようなエラーが発生します
error: linking module flags 'nvvm-reflect-ftz': IDs have conflicting override values
in '/tmp/lit-tmp-045kklh1/clang++-b050f4/libsycl-crt-a42c81.cubin' and 'llvm-link'◼

FTZ を無効にして問題を解決する必要があります-ffast-math や -Ofast を使用する場合、-Xclang -fdenormal-fp-math=ieee を追加することで対応できます◼

さらに、FTZ が -fcuda-flush-denormals-to-zero、-fdenormal-fp-math=preserve-sign または、
-fdenormal-fp-math=positive-zero などのフラグで有効にされていないことを確認してください
51

oneAPI for NVIDIA*/AMD* GPU 今後の予定◼

2023年中は、最新の NVIDIA* と AMD* の GPU と SDK リリースを引き続きサポートすることで機能を追加し、テストおよびサポートするプラットフォームを拡大していきます◼

oneAPI マス・カーネル・ライブラリー (oneMKL) や oneAPI ディープ・ニューラル・ネットワーク・
ライブラリー (oneDNN) などの oneAPI 仕様コンポーネントのハードウェア・サポートを充実させていきます。これらのライブラリーについては、cuBLAS、cuDNN、hipBLAS および hipDNNのサポートをとおして正式リリースを準備し、適切にサポートされるようにし、「優先サポート」で重要な問題に対処できるようにします◼

将来的には、oneAPI DPC++ ライブラリー (oneDPL) などの oneAPI ライブラリーで複数ベンダーのハードウェアをサポートし、NVIDIA* や AMD* ハードウェアを利用する開発者が SYCL*にシームレスに移行できるように支援したいと考えています

52

参考資料
◼ oneAPI for NVIDIA* GPU 2023.0.0 ガイド◼ ベータ版 oneAPI for AMD* GPU 2023.0.0 ガイド◼ oneAPI で NVIDIA と AMD のサポートを実現◼ oneAPI DPC++ 導入ガイド◼ oneAPI GPU 最適化ガイド日本語版◼ oneAPI DPC++ コンパイラーとランタイム・アーキテクチャーの設計 (英語)53

最後に一つインテル® VTune™ プロファイラーは、NVIDIA* GPU のパフォーマンス・データを収集して表示することができますが、GPU 関連のパフォーマンス・データ (OpenCL*
インターフェイスを使用した) を収集するには、インテル® グラフィックス・ドライ
バーがシステムにインストールされている必要があります54

Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の商標または登録商標です。
© 2023 Intel Corporation. 無断での引用、転載を禁じます。

55