Win32 API 日本語リファレンス
ホームAI.MachineLearning.DirectML › IDMLBindingTable

IDMLBindingTable

COM
IID29c687dc-de74-4e3b-ab00-1168f2fc3cfc継承元IDMLDeviceChild自前メソッド開始 vtbl8

公式ドキュメント

アプリケーションが管理するデスクリプターヒープの範囲をラップし、DirectML がリソースのバインディングを作成するために使用します。このオブジェクトを作成するには、IDMLDevice::CreateBindingTable を呼び出します。

メソッド 5

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 8 void BindInputs(DWORD bindingCount, DML_BINDING_DESC* bindings)

リソースのセットを入力テンソルとしてバインドします。

bindingCountDWORDinこのパラメーターは、bindings 配列のサイズを決定します(指定されている場合)。
bindingsDML_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|
          +---------------+

要件

vtbl 9 void BindOutputs(DWORD bindingCount, DML_BINDING_DESC* bindings)

リソースのセットを出力テンソルとしてバインドします。

bindingCountDWORDinこのパラメーターは、bindings 配列のサイズを決定します(指定されている場合)。
bindingsDML_BINDING_DESC*inoptionalバインドするテンソルリソースの記述を格納した DML_BINDING_DESC の定数配列への省略可能なポインター。
vtbl 10 void BindTemporaryResource(DML_BINDING_DESC* binding)

一時的なスクラッチメモリとして使用するバッファーをバインドします。このバッファー範囲に必要なサイズは、IDMLDispatchable::GetBindingProperties を呼び出すことで確認できます。

bindingDML_BINDING_DESC*inoptionalバインドするテンソルリソースの記述を格納した DML_BINDING_DESC への省略可能なポインター。
vtbl 11 void BindPersistentResource(DML_BINDING_DESC* binding)

バッファーを永続リソースとしてバインドします。このバッファー範囲に必要なサイズは、IDMLDispatchable::GetBindingProperties を呼び出すことで確認できます。

bindingDML_BINDING_DESC*inoptionalバインドするテンソルリソースの記述を格納した DML_BINDING_DESC への省略可能なポインター。
vtbl 12 HRESULT Reset(DML_BINDING_TABLE_DESC* desc)

バインディングテーブルをリセットして、新しいデスクリプターの範囲(場合によっては別の演算子(オペレーター)または初期化子用)をラップします。これにより、バインディングテーブルを動的に再利用できます。

descDML_BINDING_TABLE_DESC*inoptionalバインディングテーブルのパラメーターを格納した DML_BINDING_TABLE_DESC への省略可能なポインター。これは nullptr でもよく、その場合は空のバインディングテーブルを示します。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 方式にも切替可。