idMLBindingTable 接口 (directml.h)
包装一系列应用程序托管的描述符堆,DirectML 使用 它为资源创建绑定。 若要创建此对象,请调用 IDMLDevice::CreateBindingTable。 IDMLBindingTable 接口继承自 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 |