IDMLBindingTable インターフェイス (directml.h)
アプリケーションマネージド記述子ヒープの範囲をラップし、DirectML によってリソースのバインドを作成するために使用されます。 このオブジェクトを作成するには、 IDMLDevice::CreateBindingTable を呼び出します。 IDMLBindingTable インターフェイスは、IDMLDeviceChild から継承されます。
バインド テーブルは、CPU および GPU 記述子ハンドルの範囲に対して作成されます。 IDMLBindingTable::Bind* メソッドが呼び出されると、DirectML は 1 つ以上の記述子を CPU 記述子の範囲に書き込みます。 IDMLCommandRecorder::RecordDispatch の呼び出し中にバインド テーブルを使用すると、対応する GPU 記述子が DirectML によってパイプラインにバインドされます。
CPU および GPU 記述子ハンドルは記述子ヒープ内の同じエントリを指す必要はありません。ただし、このバインド テーブルを使用した実行の前に、CPU 記述子ハンドルによって参照される記述子範囲全体が GPU 記述子ハンドルによって参照される範囲にコピーされることを保証するのはアプリケーションの責任です。
このバインド テーブルを使用する CPU と GPU の作業の間で正しい同期を実行するのは、アプリケーションの責任です。 たとえば、バインド テーブルによって作成されたバインド (バインド テーブルで Bind* を再度呼び出す、または記述子ヒープを手動で上書きするなど) は、バインド テーブルを使用するすべての作業が GPU で実行を完了するまで上書きしないように注意する必要があります。 さらに、バインド テーブルは書き込み先の記述子ヒープに対する参照を保持しないため、そのバインド テーブルを使用するすべての作業が GPU での実行を完了するまで、バッキング シェーダーに表示される記述子ヒープを解放しないでください。
バインド テーブルは、ディスパッチ可能な 1 つのオブジェクト (演算子初期化子またはコンパイル済み演算子) に関連付けられ、その特定のオブジェクトのバインドを表します。 ただし、 IDMLBindingTable::Reset を呼び出すことでバインド テーブルを再利用できます。 バインド テーブルは記述子ヒープ自体を所有していないため、 RESET を呼び出し、未処理の実行が GPU で完了する前でも、別のディスパッチ可能なオブジェクトのバインド テーブルを再利用しても安全であることに注意してください。
バインド テーブルは、それを使用してバインドされたリソースに対する厳密な参照を保持しません。アプリケーションでは、GPU でまだ使用中にリソースが削除されないようにする必要があります。
このオブジェクトはスレッド セーフではありません。アプリケーションは、同期なしで別のスレッドからバインド テーブルのメソッドを同時に呼び出してはなりません。
継承
IDMLBindingTable インターフェイスは、IDMLDeviceChild インターフェイスから継承されます。
メソッド
IDMLBindingTable インターフェイスには、これらのメソッドがあります。
IDMLBindingTable::BindInputs 一連のリソースを入力テンソルとしてバインドします。 |
IDMLBindingTable::BindOutputs 一連のリソースを出力テンソルとしてバインドします。 |
IDMLBindingTable::BindPersistentResource バッファーを永続的なリソースとしてバインドします。 IDMLDispatchable::GetBindingProperties を呼び出すことで、このバッファー範囲の必要なサイズを確認できます。 |
IDMLBindingTable::BindTemporaryResource 一時的なスクラッチ メモリとして使用するバッファーをバインドします。 IDMLDispatchable::GetBindingProperties を呼び出すことで、このバッファー範囲の必要なサイズを確認できます。 |
IDMLBindingTable::Reset バインディング テーブルをリセットして、別の演算子または初期化子の可能性がある記述子の新しい範囲をラップします。 これにより、バインド テーブルを動的に再利用できます。 |
要件
要件 | 値 |
---|---|
対象プラットフォーム | Windows |
ヘッダー | directml.h |