idMLBindingTable 接口 (directml.h)

包装一系列应用程序托管的描述符堆,DirectML 使用 它为资源创建绑定。 若要创建此对象,请调用 IDMLDevice::CreateBindingTableIDMLBindingTable 接口继承自 IDMLDeviceChild

绑定表是通过一系列 CPU 和 GPU 描述符句柄创建的。 调用 IDMLBindingTable::Bind* 方法时,DirectML 会将一个或多个描述符写入 CPU 描述符范围。 在调用 IDMLCommandRecorder::RecordDispatch 期间使用绑定表时,DirectML 会将相应的 GPU 描述符绑定到管道。

CPU 和 GPU 描述符句柄不必要指向描述符堆中的相同条目,但是,在使用此绑定表执行之前,应用程序需负责确保将 CPU 描述符句柄引用的整个描述符范围复制到 GPU 描述符句柄引用的范围。

应用程序负责在使用此绑定表的 CPU 和 GPU 工作之间执行正确的同步。 例如,必须注意不要覆盖绑定表创建的绑定, (例如,在绑定表上再次调用 Bind*,或手动覆盖描述符堆) ,直到使用绑定表的所有工作在 GPU 上完成执行为止。 此外,由于绑定表不维护它写入到的描述符堆上的引用,因此在使用该绑定表的所有工作都已完成 GPU 上的执行之前,不得释放支持着色器可见的描述符堆。

绑定表与 (运算符初始值设定项或已编译运算符) 的一个可调度对象相关联,并表示该特定对象的绑定。 但是,可以通过调用 IDMLBindingTable::Reset 来重复使用绑定表。 请注意,由于绑定表不拥有描述符堆本身,因此,即使在 GPU 上完成任何未完成的执行之前,也可以安全地调用 Reset 并为不同的可调度对象重用绑定表。

绑定表不会在使用绑定的任何资源上保留强引用 ,应用程序必须确保在 GPU 仍在使用时不会删除资源。

此对象不是线程安全的 - 应用程序不得同时从不同线程调用绑定表上的方法,而无需同步。

继承

IDMLBindingTable 接口继承自 IDMLDeviceChild 接口。

方法

IDMLBindingTable 接口包含以下方法。

 
IDMLBindingTable::BindInputs

将一组资源绑定为输入张量。
IDMLBindingTable::BindOutputs

将一组资源绑定为输出张量。
IDMLBindingTable::BindPersistentResource

将缓冲区绑定为永久性资源。 可以通过调用 IDMLDispatchable::GetBindingProperties 来确定此缓冲区范围的所需大小。
IDMLBindingTable::BindTemporaryResource

绑定缓冲区以用作临时暂存内存。 可以通过调用 IDMLDispatchable::GetBindingProperties 来确定此缓冲区范围的所需大小。
IDMLBindingTable::Reset

重置绑定表以包装新的描述符范围,可能适用于不同的运算符或初始值设定项。 这允许动态重用绑定表。

要求

要求
目标平台 Windows
标头 directml.h

另请参阅

DirectML 中的绑定

IDMLDeviceChild