oneAPI レベルゼロ・インターフェイスの使用

インテル® oneAPI

この記事は、The Parallel Universe Magazine 47 号に掲載されている「Use the oneAPI Level Zero Interface」の日本語参考訳です。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。


parallel_v47_04

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 (英語) を参照してください。

タイトルとURLをコピーしました