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

その他

この記事は、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」の「Memory Descriptors and Objects」の節を取り上げています。

メモリー記述子とオブジェクト

記述子

メモリー記述子は、エンジンに依存しないデータの論理記述 (次元数、次元サイズ、データタイプ) であり、オプションでメモリー内の物理形式に関する情報を保有します。この情報が不明である場合、形式タグを dnnl::memory::format_tag::any に設定してメモリー記述子を作成できます。これにより、計算集約型のプリミティブが計算に最適な形式を選択できるようになります。形式が一致しない場合、ユーザーはデータを新しい形式に並べ替える必要があります。詳細については、「メモリー形式伝播」を参照してください。

メモリー記述子は、次元、メモリー形式タグ、またはストライドを指定して初期化できます。

ユーザーは、dnnl::memory::desc::get_size() 関数を使用してメモリー記述子に必要なメモリー量を照会できます。一般に、データサイズは次元にデータサイズを掛けただけでは計算することはできません。したがって、コードの移植性を保持するにはこの関数を利用する必要があります。

2 つのメモリー記述子は、等式演算子と不等式演算子を使用して比較できます。この比較は、データをユーザーのデータ形式からプリミティブのデータ形式に並べ替える必要性を確認する際に役立ちます。

次元が正である通常のメモリー記述子に加えて、oneDNN は 1 つ以上の次元がゼロに設定されたゼロボリュームのメモリー記述子をサポートします。これは、NumPy* 規則をサポートするために使用されます。ゼロボリューム・メモリーがプリミティブに渡されると、プリミティブはこのメモリーを計算に使用しません。以下に例を示します。

  • 結合プリミティブは、結合次元/軸がゼロであるすべてのメモリー・オブジェクトを無視します。

  • ミニバッチ次元がゼロのソース・メモリー・オブジェクトの順方向畳み込みでは、常にミニバッチ次元がゼロのデスティネーション・メモリー・オブジェクトを生成しますが、計算は実行しません。

  • ただし、畳み込み次元がゼロの順方向畳み込みは不十分な定義であり、出力値に対する明確な定義がないため、ライブラリーはエラーを生成します。

ゼロボリューム・メモリーのデータハンドルがアクセスされることはありません。

注: 一部のプリミティブは、特定のテンソルの次元が 1 である場合にのみ、暗黙のブロードキャスト・セマンティクスをサポートします (NumPy* ブロードキャスト・セマンティクスと類似)。特に、操作が同じ次元を持つ 2 つのテンソルを予測し、記述子の 1 つの次元が 1 に設定されている場合、その次元はほかのテンソルと一致するように暗黙的にブロードキャストされます。

API

API については、こちら (英語) をご覧ください。

 

オブジェクト

メモリー・オブジェクトは、メモリー記述子とデータストレージ (データハンドル) を組み合わせます。USM では、データハンドルは void へのポインターです。データハンドルは、dnnl::memory::get_data_handle() で照会でき、dnnl::memory::set_data_handle() で設定できます。ベースとなる SYCL* バッファーを使用する場合、dnnl::sycl_interop::get_buffer() を使用して照会し、dnnl::sycl_interop::set_buffer() で設定できます。また、メモリー記述子とメモリー・オブジェクトのベースとなるエンジンは、dnnl::memory::get_desc()dnnl::memory::get_engine() で照会できます。

API

API については、こちら (英語) をご覧ください。

 


法務上の注意書き

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 またはその子会社の商標です。

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

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