Condividi tramite


Interfaccia IDMLBindingTable (directml.h)

Esegue il wrapping di un intervallo di un heap del descrittore gestito dall'applicazione e viene usato da DirectML per creare associazioni per le risorse. Per creare questo oggetto, chiamare IDMLDevice::CreateBindingTable. L'interfaccia IDMLBindingTable eredita da IDMLDeviceChild.

La tabella di associazione viene creata su un intervallo di handle di descrittore CPU e GPU. Quando viene chiamato un metodo IDMLBindingTable::Bind*, DirectML scrive uno o più descrittori nell'intervallo di descrittori della CPU. Quando si usa la tabella di associazione durante una chiamata a IDMLCommandRecorder::RecordDispatch, DirectML associa i descrittori GPU corrispondenti alla pipeline.

Gli handle del descrittore CPU e GPU non sono necessari per puntare alle stesse voci in un heap del descrittore, ma è quindi responsabilità dell'applicazione assicurarsi che l'intero intervallo di descrittore a cui fa riferimento l'handle del descrittore della CPU venga copiato nell'intervallo a cui fa riferimento l'handle del descrittore GPU prima dell'esecuzione usando questa tabella di binding.

È responsabilità dell'applicazione eseguire la sincronizzazione corretta tra il lavoro della CPU e della GPU che usa questa tabella di associazione. Ad esempio, è necessario prestare attenzione a non sovrascrivere le associazioni create dalla tabella di associazione ,ad esempio chiamando Bind* nuovamente nella tabella di associazione o sovrascrivendo manualmente l'heap del descrittore, fino a quando tutte le operazioni che usano la tabella di associazione non hanno completato l'esecuzione nella GPU. Inoltre, poiché la tabella di associazione non mantiene un riferimento nell'heap del descrittore in cui scrive, non è necessario rilasciare l'heap del descrittore visibile per il backing shader finché tutto il lavoro che usa tale tabella di associazione non ha completato l'esecuzione nella GPU.

La tabella di associazione è associata esattamente a un oggetto dispatchable (un inizializzatore di operatore o un operatore compilato) e rappresenta le associazioni per quel particolare oggetto. È tuttavia possibile riutilizzare una tabella di associazione chiamando IDMLBindingTable::Reset. Si noti che poiché la tabella di associazione non è proprietaria dell'heap del descrittore stesso, è possibile chiamare Reset e riutilizzare la tabella di associazione per un oggetto dispatchable diverso anche prima che tutte le esecuzioni in sospeso siano state completate nella GPU.

La tabella di associazione non mantiene riferimenti sicuri su qualsiasi risorsa associata usandola. L'applicazione deve assicurarsi che le risorse non vengano eliminate mentre sono ancora in uso dalla GPU.

Questo oggetto non è thread-safe. L'applicazione non deve chiamare metodi nella tabella di associazione contemporaneamente da thread diversi senza sincronizzazione.

Ereditarietà

L'interfaccia IDMLBindingTable eredita dall'interfaccia IDMLDeviceChild.

Metodi

L'interfaccia IDMLBindingTable dispone di questi metodi.

 
IDMLBindingTable::BindInputs

Associa un set di risorse come tensori di input.
IDMLBindingTable::BindOutputs

Associa un set di risorse come tensori di output.
IDMLBindingTable::BindPersistentResource

Associa un buffer come risorsa persistente. È possibile determinare le dimensioni necessarie di questo intervallo di buffer chiamando IDMLDispatchable::GetBindingProperties.
IDMLBindingTable::BindTemporaryResource

Associa un buffer da usare come memoria scratch temporanea. È possibile determinare le dimensioni necessarie di questo intervallo di buffer chiamando IDMLDispatchable::GetBindingProperties.
IDMLBindingTable::Reset

Reimposta la tabella di associazione per eseguire il wrapping di un nuovo intervallo di descrittori, potenzialmente per un operatore o un inizializzatore diverso. In questo modo è possibile riutilizzare dinamicamente la tabella di associazione.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione directml.h

Vedi anche

Binding in DirectML

IDMLDeviceChild