この記事は、The Parallel Universe Magazine 47 号に掲載されている「Use the oneAPI Level Zero Interface」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
oneAPI 仕様 (英語) は、アクセラレーター・アーキテクチャー間で同じ言語、API、プログラミング・モデルを提供することで、ソフトウェア開発を簡素化するものです。この仕様では、さまざまなアーキテクチャーに共通するデータ並列ドメイン用の API セットを定義しています。API とダイレクト・プログラミングのいずれのアプローチも、データ並列処理 (各データ要素に対して同じ計算を行うこと) を基本としています。oneAPI プラットフォームは、ホストとアクセラレーター・デバイスで構成されています (図 1)。API プログラミング・モデルは、oneMKL、oneDPL、oneDNN、oneCCL などのライブラリーを使用して実装されています。ダイレクト・プログラミングはDPC++ で行われます。
図 1. oneAPI プラットフォームの実行モデル。インテルの oneAPI 仕様の実装には、プログラミング・ツールも含まれています。
レベルゼロ: はじめに
oneAPI レベルゼロは、oneAPI プラットフォームのデバイスに対して、低レベルのメタルに直結したインターフェイスを提供します。レベルゼロは、デバイスの検出、メモリー割り当て、プロセス間通信、カーネルのサブミット、同期、メトリックのレポートを行う、きめ細かい明示的な制御/API に加えて、広範な言語機能のサポートを提供します。また、デバイスの論理レベルと物理レベルの抽象化の両方を利用できる API を備えています。ほかの低レベル API (OpenCL* など) の影響を大きく受けていますが、レベルゼロは独自に進化するように設計されており、GPU や FPGA のようなほかの計算デバイスをサポートしています。ほとんどのアプリケーションでは、レベルゼロ API が提供する追加の制御は必要ありません。レベルゼロ API は、次のような、上位のランタイムAPI やライブラリーで必要とされる明示的な制御を想定しています。
- デバイスの検出と切り分け
- カーネルの実行とスケジュール
- ピアツーピア通信
- メトリックとプロファイル
- カーネル・プロファイル、インストルメンテーション
- システム管理、 電力やパフォーマンスの照会
レベルゼロの C API は、共有インポート・ライブラリーによってアプリケーションに提供されます。そのため、C/C++ アプリケーションでは「ze_api.h
」をインクルードして、「ze_api.lib
」(または共有ライブラリー) とリンクする必要があります。
レベルゼロ: API
レベルゼロ API は、コア、ツール、およびシステム・プログラミングに分類されますが、この記事ではコア・プログラミング API (図 2) のみを説明します。コア・プログラミング API は、デバイス、ドライバー、コンテキスト、メモリー、コマンドキュー/ リスト、同期、バリア、モジュール、カーネルをサポートしています。表 1 と表 2 は、よく使用される API の一覧です。図 3 は、レベルゼロを使用した実行フローです。
図 2. コア・プログラミング API のコンポーネント
製品とパフォーマンス情報
1実際の性能は利用法、構成、その他の要因によって異なります。詳細については、www.Intel.com/PerformanceIndex (英語) を参照してください。