IDMLBindingTable
COM公式ドキュメント
アプリケーションが管理するデスクリプターヒープの範囲をラップし、DirectML がリソースのバインディングを作成するために使用します。このオブジェクトを作成するには、IDMLDevice::CreateBindingTable を呼び出します。
メソッド 5
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
リソースのセットを入力テンソルとしてバインドします。
| bindingCount | DWORD | in | このパラメーターは、bindings 配列のサイズを決定します(指定されている場合)。 |
| bindings | DML_BINDING_DESC* | inoptional | バインドするテンソルリソースの記述を格納した DML_BINDING_DESC の定数配列への省略可能なポインター。 |
解説(Remarks)
バインディングハザードの例
以下の例では、四角形はバインディングテーブル内の少なくとも 1 つのバインディングによって参照されるバッファーリソースを表します。各行は、名前の付いたバインディングによって読み取られる(R)または書き込まれる(W)可能性のあるバイトの範囲を示します。すべての例で、リソースが同じ物理メモリを共有していないことを前提としています。
例 1
この例は、異なるリソースを参照する入力バインディングと出力バインディングを示します。異なるリソースを参照するバインディングのペアはハザードになることはないため、これは常に有効なバインディングです。
Resource A Resource B
+---------------+ +---------------+
Input 0: |RRRRRRRRRRRRRRR| | |
Output 0: | | |WWWWWWWWWWWWWWW|
+---------------+ +---------------+
例 2
この例は、同じリソースの異なる領域を参照する入力バインディングと出力バインディングを示します。同じリソースで重複しない領域を持つバインディングのペアは、実行用のバインディングではハザードになりません。これは実行用のバインディングでは有効なバインディングですが、初期化用のバインディングでは無効です。
Resource A
+---------------+
Input 0: |RRRRRRR |
Output 0: | WWWWWWWW|
+---------------+
例 3
この例は、範囲が重複する 2 つの入力バインディングを示します。読み取り専用バインディングのペア(入力バインディングと永続バインディング)は、バッファー領域の交差に関係なくハザードになることはないため、これは常に有効なバインディングです。
Resource A Resource B
+---------------+ +---------------+
Input 0: |RRRRRRRRR | | |
Input 1: | RRRRRRRRR| | |
Output 0: | | |WWWWWWWWWWWWWWW|
+---------------+ +---------------+
例 4
この例は、同一の領域を持つ入力バインディングと出力バインディングを示します。このバインディングは、バインドされる演算子(オペレーター)がインプレース実行をサポートし、かつバインディングが実行用である場合に限り有効です。
Resource A
+---------------+
Input 0: |RRRRRRRRRRRRRRR|
Output 0: |WWWWWWWWWWWWWWW|
+---------------+
例 5
次のバインディングは、演算子(オペレーター)のインプレース実行のサポートに関係なく、決して有効になりません。これは、同一ではない重複領域を持つバインディングのペアを含むためです。
Resource A
+---------------+
Input 0: |RRRRRRRRRRRRR |
Output 0: | WWWWWWWWWWW|
+---------------+
要件
リソースのセットを出力テンソルとしてバインドします。
| bindingCount | DWORD | in | このパラメーターは、bindings 配列のサイズを決定します(指定されている場合)。 |
| bindings | DML_BINDING_DESC* | inoptional | バインドするテンソルリソースの記述を格納した DML_BINDING_DESC の定数配列への省略可能なポインター。 |
一時的なスクラッチメモリとして使用するバッファーをバインドします。このバッファー範囲に必要なサイズは、IDMLDispatchable::GetBindingProperties を呼び出すことで確認できます。
| binding | DML_BINDING_DESC* | inoptional | バインドするテンソルリソースの記述を格納した DML_BINDING_DESC への省略可能なポインター。 |
バッファーを永続リソースとしてバインドします。このバッファー範囲に必要なサイズは、IDMLDispatchable::GetBindingProperties を呼び出すことで確認できます。
| binding | DML_BINDING_DESC* | inoptional | バインドするテンソルリソースの記述を格納した DML_BINDING_DESC への省略可能なポインター。 |
バインディングテーブルをリセットして、新しいデスクリプターの範囲(場合によっては別の演算子(オペレーター)または初期化子用)をラップします。これにより、バインディングテーブルを動的に再利用できます。
| desc | DML_BINDING_TABLE_DESC* | inoptional | バインディングテーブルのパラメーターを格納した DML_BINDING_TABLE_DESC への省略可能なポインター。これは nullptr でもよく、その場合は空のバインディングテーブルを示します。 |
戻り値
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDMLBindingTable "{29C687DC-DE74-4E3B-AB00-1168F2FC3CFC}" #usecom global IDMLBindingTable IID_IDMLBindingTable "{}" #comfunc global IDMLBindingTable_BindInputs 8 int,var #comfunc global IDMLBindingTable_BindOutputs 9 int,var #comfunc global IDMLBindingTable_BindTemporaryResource 10 var #comfunc global IDMLBindingTable_BindPersistentResource 11 var #comfunc global IDMLBindingTable_Reset 12 var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDMLBindingTable "{29C687DC-DE74-4E3B-AB00-1168F2FC3CFC}" #usecom global IDMLBindingTable IID_IDMLBindingTable "{}" #comfunc global IDMLBindingTable_BindInputs 8 int,sptr #comfunc global IDMLBindingTable_BindOutputs 9 int,sptr #comfunc global IDMLBindingTable_BindTemporaryResource 10 sptr #comfunc global IDMLBindingTable_BindPersistentResource 11 sptr #comfunc global IDMLBindingTable_Reset 12 sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。