Compartilhar via


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

Confira também

Associação no DirectML

IDMLDeviceChild