Interface IDMLBindingTable (directml.h)
Encapsula um intervalo de um heap de descritor gerenciado pelo aplicativo e é usado pelo DirectML para criar associações para recursos. Para criar esse objeto, chame IDMLDevice::CreateBindingTable. A interface IDMLBindingTable herda de IDMLDeviceChild.
A tabela de associação é criada em um intervalo de identificadores de descritor de CPU e GPU. Quando um método IDMLBindingTable::Bind* é chamado, o DirectML grava um ou mais descritores no intervalo de descritores de CPU. Quando você usa a tabela de associação durante uma chamada para IDMLCommandRecorder::RecordDispatch, o DirectML associa os descritores de GPU correspondentes ao pipeline.
Os identificadores de descritor de CPU e GPU não são necessários para apontar para as mesmas entradas em um heap de descritor, no entanto, é responsabilidade do aplicativo garantir que todo o intervalo de descritores referenciado pelo identificador de descritor de CPU seja copiado para o intervalo referenciado pelo identificador do descritor de GPU antes da execução usando essa tabela de associação.
É responsabilidade do seu aplicativo executar a sincronização correta entre o trabalho de CPU e GPU que usa essa tabela de associação. Por exemplo, você deve tomar cuidado para não substituir as associações criadas pela tabela de associação (por exemplo, chamando Bind* novamente na tabela de associação ou substituindo o heap do descritor manualmente) até que todo o trabalho usando a tabela de associação tenha concluído a execução na GPU. Além disso, como a tabela de associação não mantém uma referência no heap de descritor em que ela grava, você não deve liberar o heap de descritor visível do sombreador de suporte até que todo o trabalho usando essa tabela de associação tenha concluído a execução na GPU.
A tabela de associação é associada a exatamente um objeto dispatchable (um inicializador de operador ou um operador compilado) e representa as associações para esse objeto específico. No entanto, você pode reutilizar uma tabela de associação chamando IDMLBindingTable::Reset. Observe que, como a tabela de associação não possui o heap do descritor em si, é seguro chamar Redefinir e reutilizar a tabela de associação para um objeto expediível diferente mesmo antes de qualquer execução pendente ter sido concluída na GPU.
A tabela de associação não mantém referências fortes em nenhum recurso associado usando-a– seu aplicativo deve garantir que os recursos não sejam excluídos enquanto ainda estiverem em uso pela GPU.
Esse objeto não é thread-safe— seu aplicativo não deve chamar métodos na tabela de associação simultaneamente de threads diferentes sem sincronização.
Herança
A interface IDMLBindingTable herda da interface IDMLDeviceChild.
Métodos
A interface IDMLBindingTable tem esses métodos.
IDMLBindingTable::BindInputs Associa um conjunto de recursos como tensores de entrada. |
IDMLBindingTable::BindOutputs Associa um conjunto de recursos como tensores de saída. |
IDMLBindingTable::BindPersistentResource Associa um buffer como um recurso persistente. Você pode determinar o tamanho necessário desse intervalo de buffer chamando IDMLDispatchable::GetBindingProperties. |
IDMLBindingTable::BindTemporaryResource Associa um buffer a ser usado como memória zero temporária. Você pode determinar o tamanho necessário desse intervalo de buffer chamando IDMLDispatchable::GetBindingProperties. |
IDMLBindingTable::Reset Redefine a tabela de associação para encapsular um novo intervalo de descritores, potencialmente para um operador ou inicializador diferente. Isso permite a reutilização dinâmica da tabela de associação. |
Requisitos
Requisito | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | directml.h |