インテル® oneAPI ディープ・ニューラル・ネットワーク・ライブラリー (oneDNN) の使い方
oneDNN は、インテル® 64 アーキテクチャーまたは互換プロセッサーをベースにするシステムをサポートします。サポートされる CPU およびグラフィックス・ハードウェアのリストは、「インテル® oneAPI ディープ・ニューラル・ネットワーク・ライブラリーのシステム要件」を参照してください。
oneDNN は実行時に命令セット・アーキテクチャー (ISA) を検出し、オンライン生成機能を使用して、サポートされる最新の ISA 向けに最適化されたコードを展開します。
アプリケーションが使用する CPU または GPU ランタイム・ライブラリーとの相互運用性を保証するため、オペレーティング・システムごとにいくつかのパッケージが提供されます。
構成 |
依存関係 |
|---|---|
|
DPC++ ランタイム |
|
インテルの OpenMP* ランタイム |
|
GNU* OpenMP* ランタイム |
|
Microsoft Visual C++* の OpenMP* ランタイム |
|
インテル® oneAPI スレッディング・ビルディング・ブロック |
パッケージには必要なライブラリーが含まれていないため、ビルド時にインテル® oneAPI ツールキットまたはサードパーティーのツールを使用してアプリケーションで依存関係を解決する必要があります。
SYCL* 環境では、oneDNN は DPC++ SYCL* ランタイムを介して CPU または GPU ハードウェアと対話します。oneDNN は SYCL* を使用するほかのコードを使用することもできます。これを可能にするため、oneDNN は基盤となる SYCL* オブジェクトと相互作用する API 拡張機能を提供します。
そのような状況の 1 つとして、oneDNN が提供しないカスタム操作を行うため SYCL* カーネルを実行する場合が考えられます。その場合、oneDNN はカーネルをシームレスに送信するのに必要な API を提供し、同じデバイスキューを使用して実行コンテキストを oneDNN と共有します。
相互運用性を提供する API は、次の 2 つのシナリオを想定します。
既存の SYCL* オブジェクトをベースとする oneDNN オブジェクトの構築
既存の oneDNN オブジェクト向けの SYCL* オブジェクトへのアクセス
次の表に oneDNN オブジェクトと SYCL* オブジェクトのマッピングを示します。
oneDNN オブジェクト |
SYCL* オブジェクト |
|---|---|
エンジン |
cl::sycl::device and cl::sycl::context |
ストリーム |
cl::sycl::queue |
メモリー |
cl::sycl::buffer<uint8_t, 1> または統合共有メモリー (USM) ポインター |
注
内部的にライブラリー・メモリー・オブジェクトは、1D uint8_t SYCL バッファーを使用しますが、異なる型の SYCL バッファーを介してメモリーを初期化およびアクセスできます。この場合、バッファーは異なるタイプの cl::sycl::buffer<uint8_t, 1> に再解釈されます。
oneDNN オブジェクト |
SYCL* オブジェクトからの再構成 |
|---|---|
エンジン |
|
ストリーム |
|
メモリー |
USM ベース: バッファーベース: |
oneDNN オブジェクト |
SYCL* オブジェクトの抽出 |
|---|---|
エンジン |
|
ストリーム |
|
メモリー |
USM ポインター: バッファー: |
注
oneDNN でアプリケーションをビルドするには、コンパイラーが必要です。インテル® oneAPI DPC++/C++ コンパイラーは、インテル® oneAPI ベース・ツールキットに含まれています。
SYCL* 相互運用性 API を有効にするには、dnnl_sycl.hpp をインクルードする必要があります。
OpenMP* はランタイム・オブジェクトの受け渡しに依存しないため、oneDNN と連携する相互運用 API は必要ありません。