Interfaz IDMLBindingTable (directml.h)
Ajusta un intervalo de un montón de descriptores administrados por la aplicación y lo usa DirectML para crear enlaces para los recursos. Para crear este objeto, llame a IDMLDevice::CreateBindingTable. La interfaz IDMLBindingTable hereda de IDMLDeviceChild.
La tabla de enlace se crea a través de un intervalo de identificadores de descriptores de CPU y GPU. Cuando se llama a un método IDMLBindingTable::Bind*, DirectML escribe uno o varios descriptores en el intervalo de descriptores de CPU. Cuando se usa la tabla de enlace durante una llamada a IDMLCommandRecorder::RecordDispatch, DirectML enlaza los descriptores de GPU correspondientes a la canalización.
Los identificadores de descriptores de CPU y GPU no son necesarios para apuntar a las mismas entradas de un montón de descriptores; sin embargo, es responsabilidad de la aplicación asegurarse de que todo el intervalo de descriptores al que hace referencia el identificador del descriptor de CPU se copia en el intervalo al que hace referencia el identificador del descriptor de GPU antes de la ejecución mediante esta tabla de enlace.
Es responsabilidad de la aplicación realizar la sincronización correcta entre el trabajo de CPU y GPU que usa esta tabla de enlace. Por ejemplo, debe tener cuidado de no sobrescribir los enlaces creados por la tabla de enlace (por ejemplo, llamando a Bind* de nuevo en la tabla de enlace o sobrescribiendo el montón del descriptor manualmente) hasta que todo el trabajo que use la tabla de enlace haya completado la ejecución en la GPU. Además, dado que la tabla de enlace no mantiene una referencia en el montón del descriptor en el que escribe, no debe liberar el montón de descriptores visibles para sombreador de respaldo hasta que todo el trabajo con esa tabla de enlace haya completado la ejecución en la GPU.
La tabla de enlace está asociada exactamente a un objeto distribuidor (un inicializador de operador o un operador compilado) y representa los enlaces de ese objeto en particular. Sin embargo, puede reutilizar una tabla de enlace llamando a IDMLBindingTable::Reset. Tenga en cuenta que, dado que la tabla de enlace no posee el propio montón de descriptores, es seguro llamar a Reset y reutilizar la tabla de enlace para un objeto de distribución diferente incluso antes de que se hayan completado las ejecuciones pendientes en la GPU.
La tabla de enlace no mantiene referencias seguras en ningún recurso enlazado mediante él; la aplicación debe asegurarse de que los recursos no se eliminen mientras la GPU todavía está en uso.
Este objeto no es seguro para subprocesos: la aplicación no debe llamar a métodos en la tabla de enlace simultáneamente desde subprocesos diferentes sin sincronización.
Herencia
La interfaz IDMLBindingTable hereda de la interfaz IDMLDeviceChild.
Métodos
La interfaz IDMLBindingTable tiene estos métodos.
IDMLBindingTable::BindInputs Enlaza un conjunto de recursos como tensores de entrada. |
IDMLBindingTable::BindOutputs Enlaza un conjunto de recursos como tensores de salida. |
IDMLBindingTable::BindPersistentResource Enlaza un búfer como un recurso persistente. Puede determinar el tamaño necesario de este intervalo de búfer llamando a IDMLDispatchable::GetBindingProperties. |
IDMLBindingTable::BindTemporaryResource Enlaza un búfer para usarlo como memoria temporal temporal. Puede determinar el tamaño necesario de este intervalo de búfer llamando a IDMLDispatchable::GetBindingProperties. |
IDMLBindingTable::Reset Restablece la tabla de enlace para encapsular un nuevo intervalo de descriptores, posiblemente para un operador o inicializador diferente. Esto permite la reutilización dinámica de la tabla de enlace. |
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Windows |
Encabezado | directml.h |