Interface IDMLBindingTable (directml.h)
Encapsule une plage d’un tas de descripteur géré par l’application et est utilisé par DirectML pour créer des liaisons pour les ressources. Pour créer cet objet, appelez IDMLDevice ::CreateBindingTable. L’interface IDMLBindingTable hérite d’IDMLDeviceChild.
La table de liaison est créée sur une plage de handles de descripteur processeur et GPU. Lorsqu’une méthode IDMLBindingTable ::Bind* est appelée, DirectML écrit un ou plusieurs descripteurs dans la plage de descripteurs de processeur. Lorsque vous utilisez la table de liaison lors d’un appel à IDMLCommandRecorder ::RecordDispatch, DirectML lie les descripteurs GPU correspondants au pipeline.
Les handles de descripteur PROCESSEUR et GPU ne sont pas tenus de pointer vers les mêmes entrées dans un tas de descripteur. Toutefois, il incombe à votre application de s’assurer que l’ensemble de la plage de descripteur référencée par le handle de descripteur d’UC est copiée dans la plage référencée par le handle de descripteur GPU avant l’exécution à l’aide de cette table de liaison.
Il incombe à votre application d’effectuer une synchronisation correcte entre le travail processeur et GPU qui utilise cette table de liaison. Par exemple, vous devez veiller à ne pas remplacer les liaisons créées par la table de liaison (par exemple, en appelant à nouveau Bind* sur la table de liaison ou en remplaçant manuellement le tas de descripteur) jusqu’à ce que l’exécution de tous les travaux utilisant la table de liaison soit terminée sur le GPU. En outre, étant donné que la table de liaison ne conserve pas de référence sur le tas de descripteur dans lequel elle écrit, vous ne devez pas libérer le tas de descripteur visible par le nuanceur de stockage tant que tout le travail utilisant cette table de liaison n’a pas terminé l’exécution sur le GPU.
La table de liaison est associée à exactement un objet répartissable (un initialiseur d’opérateur ou un opérateur compilé) et représente les liaisons pour cet objet particulier. Toutefois, vous pouvez réutiliser une table de liaison en appelant IDMLBindingTable ::Reset. Notez que dans la mesure où la table de liaison ne possède pas le tas de descripteur elle-même, il est possible d’appeler Reset et de réutiliser la table de liaison pour un autre objet répartissable avant même que les exécutions en attente soient terminées sur le GPU.
La table de liaison ne conserve pas de références fortes sur les ressources liées à l’utilisation de celle-ci . Votre application doit s’assurer que les ressources ne sont pas supprimées alors qu’elles sont toujours utilisées par le GPU.
Cet objet n’est pas thread-safe : votre application ne doit pas appeler simultanément des méthodes sur la table de liaison à partir de différents threads sans synchronisation.
Héritage
L’interface IDMLBindingTable hérite de l’interface IDMLDeviceChild.
Méthodes
L’interface IDMLBindingTable utilise ces méthodes.
IDMLBindingTable ::BindInputs Lie un ensemble de ressources en tant que tenseurs d’entrée. |
IDMLBindingTable ::BindOutputs Lie un ensemble de ressources en tant que tenseurs de sortie. |
IDMLBindingTable ::BindPersistentResource Lie une mémoire tampon en tant que ressource persistante. Vous pouvez déterminer la taille requise de cette plage de mémoires tampons en appelant IDMLDispatchable ::GetBindingProperties. |
IDMLBindingTable ::BindTemporaryResource Lie une mémoire tampon à utiliser comme mémoire de travail temporaire. Vous pouvez déterminer la taille requise de cette plage de mémoires tampons en appelant IDMLDispatchable ::GetBindingProperties. |
IDMLBindingTable ::Reset Réinitialise la table de liaison pour encapsuler une nouvelle plage de descripteurs, potentiellement pour un autre opérateur ou initialiseur. Cela permet une réutilisation dynamique de la table de liaison. |
Configuration requise
Condition requise | Valeur |
---|---|
Plateforme cible | Windows |
En-tête | directml.h |