Share via


IDMLBindingTable-Schnittstelle (directml.h)

Umschließt einen Bereich eines von der Anwendung verwalteten Deskriptorheaps und wird von DirectML verwendet, um Bindungen für Ressourcen zu erstellen. Um dieses Objekt zu erstellen, rufen Sie IDMLDevice::CreateBindingTable auf. Die IDMLBindingTable-Schnittstelle erbt von IDMLDeviceChild.

Die Bindungstabelle wird über einen Bereich von CPU- und GPU-Deskriptorhandles erstellt. Wenn eine IDMLBindingTable::Bind*-Methode aufgerufen wird, schreibt DirectML einen oder mehrere Deskriptoren in den Bereich der CPU-Deskriptoren. Wenn Sie die Bindungstabelle während eines Aufrufs von IDMLCommandRecorder::RecordDispatch verwenden, bindet DirectML die entsprechenden GPU-Deskriptoren an die Pipeline.

Die CPU- und GPU-Deskriptorhandles müssen nicht auf dieselben Einträge in einem Deskriptorheap verweisen. Es liegt jedoch in der Verantwortung Ihrer Anwendung, sicherzustellen, dass der gesamte Deskriptorbereich, auf den das CPU-Deskriptorhandle verweist, vor der Ausführung mit dieser Bindungstabelle in den Bereich kopiert wird, auf den das GPU-Deskriptorhandle verweist.

Es liegt in der Verantwortung Ihrer Anwendung, eine korrekte Synchronisierung zwischen der CPU- und GPU-Arbeit durchzuführen, die diese Bindungstabelle verwendet. Sie müssen beispielsweise darauf achten, die von der Bindungstabelle erstellten Bindungen nicht zu überschreiben (z. B. durch erneutes Aufrufen von Bind* für die Bindungstabelle oder manuelles Überschreiben des Deskriptorheaps), bis alle Arbeiten, die die Bindungstabelle verwenden, die Ausführung auf der GPU abgeschlossen haben. Da die Bindungstabelle außerdem keinen Verweis auf den Deskriptorheap beibehält, in den sie schreibt, dürfen Sie den Hintergrund-Shader-Deskriptor-Heap erst freigeben, wenn alle Arbeiten, die diese Bindungstabelle verwenden, die Ausführung auf der GPU abgeschlossen haben.

Die Bindungstabelle ist genau einem verteilbaren Objekt (einem Operatorinitialisierer oder einem kompilierten Operator) zugeordnet und stellt die Bindungen für dieses bestimmte Objekt dar. Sie können eine Bindungstabelle jedoch wiederverwenden, indem Sie IDMLBindingTable::Reset aufrufen. Beachten Sie, dass die Bindungstabelle nicht im Besitz des Deskriptorheaps selbst ist, es sicher ist, Reset aufzurufen und die Bindungstabelle für ein anderes verteilbares Objekt wiederzuverwenden, bevor alle ausstehenden Ausführungen auf der GPU abgeschlossen sind.

Die Bindungstabelle enthält keine starken Verweise auf Ressourcen, die sie verwenden. Ihre Anwendung muss sicherstellen, dass Ressourcen nicht gelöscht werden, während sie noch von der GPU verwendet werden.

Dieses Objekt ist nicht threadsicher. Ihre Anwendung darf keine Methoden für die Bindungstabelle gleichzeitig aus verschiedenen Threads ohne Synchronisierung aufrufen.

Vererbung

Die IDMLBindingTable-Schnittstelle erbt von der IDMLDeviceChild-Schnittstelle.

Methoden

Die IDMLBindingTable-Schnittstelle verfügt über diese Methoden.

 
IDMLBindingTable::BindInputs

Bindet eine Gruppe von Ressourcen als Eingabe-Tensors.
IDMLBindingTable::BindOutputs

Bindet eine Gruppe von Ressourcen als Ausgabe tensors.
IDMLBindingTable::BindPersistentResource

Bindet einen Puffer als persistente Ressource. Sie können die erforderliche Größe dieses Pufferbereichs ermitteln, indem Sie IDMLDispatchable::GetBindingProperties aufrufen.
IDMLBindingTable::BindTemporaryResource

Bindet einen Puffer, der als temporärer Arbeitsspeicher verwendet werden soll. Sie können die erforderliche Größe dieses Pufferbereichs ermitteln, indem Sie IDMLDispatchable::GetBindingProperties aufrufen.
IDMLBindingTable::Reset

Setzt die Bindungstabelle zurück, um einen neuen Deskriptorbereich zu umschließen, möglicherweise für einen anderen Operator oder Initialisierer. Dies ermöglicht die dynamische Wiederverwendung der Bindungstabelle.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile directml.h

Weitere Informationen

Bindung in DirectML

IDMLDeviceChild