oneAPI 1.3 暫定仕様書 Rev. 1 の解説 (10)

その他

この記事は、https://www.oneapi.io/spec/ で 2023年9月14日に公開された『oneAPI 1.3 Provisional Specification Rev. 1』 (HTMLPDF) をベースにしています。原文は2000 ページ近くあり、翻訳の時間とリソースも限られるため、全文翻訳ではなく、記事形式で区切った仕様とその解説を提供することにしました。


この回では、『oneAPI 1.3 Provisional Specification Rev. 1』の「oneDNN」の「Execution Model」の節を取り上げています。

実行モデル

プリミティブを実行するには、メモリー引数とストリームを dnnl::primitive::execute() メンバー関数に渡す必要があります。

oneDNN execution model

プリミティブの計算は、プリミティブ (およびメモリー引数) が作成されたエンジンに対応する計算デバイスで実行され、ストリームのコンテキスト内で実行されます。

エンジン

エンジンは計算デバイス (CPU、システム内の特定の GPU カードなど) を抽象化します。ほとんどのプリミティブは、対応する特定のエンジンで計算を実行するために作成されます。唯一の例外は、2 つの異なるエンジン間でデータを転送する並べ替えプリミティブです。

エンジンは、DPC++ sycl::devicesycl::context オブジェクトのペアに対応し、そこから構築できます。または、oneDNN 自身が対応するオブジェクトを作成して所有することもできます。

struct engine

実行エンジン。

パブリックタイプ

enum class kind

エンジンの種類。

値:

enumerator any – 不特定のエンジン。

enumerator cpu – CPU エンジン。

enumerator gpu – GPU エンジン。

パブリック関数

engine() = default

空のエンジンを構築。空のエンジンはどの操作でも利用できません。

engine(kind akind, size_t index)

エンジンを構築。

パラメーター:

  • akind – 構築するエンジンの種類。
  • index – エンジンのインデックス。この種類のエンジンが get_count() で返す値よりも小さくする必要があります。

kind get_kind() const

エンジンの種別を返します。

戻り値:

エンジンの種別。

パブリック静的関数

static size_t get_count(kind akind)

特定の種類のエンジンの数を返します。

パラメーター:

akind – カウントするエンジンの種類。

戻り値:

特定の種類のエンジンの数。

engine dnnl::sycl_interop::make_engine(const cl::sycl::device &adevice, const cl::sycl::context &acontext)

SYCL* デバイスと SYCL* コンテキスト・オブジェクトを使用して、エンジン・オブジェクトを作成します。

パラメーター:

  • adevice – SYCL* デバイス。
  • acontext – SYCL* コンテキスト。

戻り値:

指定された acontext SYCL* コンテキスト内の adevice SYCL* デバイスのエンジン・オブジェクト。

cl::sycl::device dnnl::sycl_interop::get_device(const engine &aengine)

指定されたエンジン・オブジェクトのベースとなる SYCL* デバイスを返します。

パラメーター:

aengine – エンジン・オブジェクト。

戻り値:

aengine エンジン・オブジェクトのベースとなる SYCL* デバイス・オブジェクト。

cl::sycl::context dnnl::sycl_interop::get_context(const engine &aengine)

指定されたエンジン・オブジェクトのベースとなる SYCL* コンテキストを返します。

パラメーター:

aengine – エンジン・オブジェクト。

戻り値:

aengine エンジン・オブジェクトのベースとなる SYCL* コンテキスト・オブジェクト。

ストリーム

ストリームは、特定のエンジンに関連付けられた実行コンテキストをカプセル化します。プリミティブを実行すると dnnl::primitive::execute() に渡されます。

ストリームは、DPC++ sycl::queue オブジェクトに対応し、そこから構築できます。または、oneDNN 自身が対応するオブジェクトを作成して所有することもできます。ストリームは一時的なものと見なされ、これらの操作が DPC++ 同期要件に違反しない限り作成および破棄できます。

DPC++ キューと同様に、ストリームは順序どおりでも順序外でもかまいません (詳細については、DPC++ 仕様の該当する節を参照してください)。目的とする動作は、dnnl::stream::flags 値を使用して指定します。DPC++ キューから作成されたストリームは、その動作を継承します。

struct stream

実行ストリーム。

パブリックタイプ

enum class flags : unsigned

ストリームフラグ。ビット単位の OR 演算子で結合可能です。

値:

enumerator in_order – 不特定のエンジン。

enumerator out_of_order – アウトオブオーダー実行。

enumerator default_flags – デフォルトのストリーム設定。

パブリック関数

stream()

空のストリームを構築。空のストリームはどの操作でも利用できません。

stream(const engine &aengine, flags aflags = flags::default_flags)

指定されたエンジンのストリームを構築し、フラグによって動作を制御します。

パラメーター:

  • aengine – ストリームを作成するエンジン。
  • aflags – ストリームの動作を制御するフラグ。

engine get_engine() const

戻り値:

関連するエンジン。

stream &wait()

ストリームで実行されるすべてのプリミティブが終了するのを待機します。

戻り値:

ストリーム自身。

stream dnnl::sycl_interop::make_stream(const engine &aengine, cl::sycl::queue &aqueue)

指定されたエンジンと SYCL* キュー・オブジェクトのストリームを作成します。

パラメーター:

  • aengine – ストリームに使用するエンジン・オブジェクト。
  • aqueue – ストリームに使用する SYCL* キュー。

戻り値:

aqueue SYCL* キュー・オブジェクトを保持する aengine エンジン・オブジェクトのストリーム・オブジェクト。

cl::sycl::queue dnnl::sycl_interop::get_queue(const stream &astream)

指定されたストリーム・オブジェクトのベースとなる SYCL* キューを返します。

パラメーター:

astream – ストリーム・オブジェクト。

戻り値:

astream ストリーム・オブジェクトのベースとなる SYCL* キュー。


法務上の注意書き

The content of this oneAPI Specification is licensed under the Creative Commons Attribution 4.0 International License (英語). Unless stated otherwise, the sample code examples in this document are released to you under the MIT license (英語).

This specification is a continuation of Intel’s decades-long history of working with standards groups and industry/academia initiatives such as The Khronos Group*, to create and define specifications in an open and fair process to achieve interoperability and interchangeability. oneAPI is intended to be an open specification and we encourage you to help us make it better. Your feedback is optional, but to enable Intel to incorporate any feedback you may provide to this specification, and to further upstream your feedback to other standards bodies, including The Khronos Group SYCL* specification, please submit your feedback under the terms and conditions below. Any contribution of your feedback to the oneAPI Specification does not prohibit you from also contributing your feedback directly to other standard bodies, including The Khronos Group under their respective submission policies.

By opening an issue, providing feedback, or otherwise contributing to the specification, you agree that Intel will be free to use, disclose, reproduce, modify, license, or otherwise distribute your feedback at its sole discretion without any obligations or restrictions of any kind, including without limitation, intellectual property rights or licensing obligations.

This document contains information on products, services and/or processes in development. All information provided here is subject to change without notice.

© Intel Corporation. Intel、インテル、Intel ロゴ、その他のインテルの名称やロゴは、Intel Corporation またはその子会社の商標です。

* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。

« パート 9        目次        パート 11 »
タイトルとURLをコピーしました