Minutage (Direct3D 12 Graphics)
Cette section traite de l’interrogation des horodateurs et de l’étalonnage des compteurs GPU et horodateur de l’UC.
Fréquence d’horodatage
Votre application peut interroger la fréquence d’horodatage du GPU en fonction de la file d’attente par commande (reportez-vous à la méthode ID3D12CommandQueue :: GetTimestampFrequency ).
La fréquence retournée est mesurée en Hz (cycles/s). Si la file d’attente de commandes spécifiée ne prend pas en charge les horodateurs (voir le tableau dans la section requêtes ), cette API échoue (et retourne E_FAIL). D3D12_COMMAND_LIST_TYPE_DIRECT et D3D12_COMMAND_LIST_TYPE_COMPUTE prennent toujours en charge les horodateurs. D3D12_COMMAND_LIST_TYPE_COPY prend éventuellement en charge les horodatages si le membre D3D12_FEATURE_DATA_D3D12_OPTIONS3 :: CopyQueueTimestampQueriesSupported a la valeur true.
Étalonnage de l’horodateur
D3D12 permet aux applications de mettre en corrélation les résultats obtenus à partir des requêtes d’horodatage avec les résultats obtenus lors de l’appel de QueryPerformanceCounter . Cette option est activée par l’appel de ID3D12CommandQueue :: GetClockCalibration.
GetClockCalibration échantillonne le compteur d’horodatage GPU pour une file d’attente de commandes donnée et échantillonne le compteur UC QueryPerformanceCounter à presque en même temps. Là encore, cette API échoue (en renvoyant E _ Fail) si la file d’attente de commandes spécifiée ne prend pas en charge les horodateurs (voir le tableau dans la rubrique requêtes ).
Notez que les compteurs du GPU et de l’horodateur de l’UC ne sont pas nécessairement directement liés à la fréquence d’horloge de ces processeurs, mais qu’ils fonctionnent à la place des graduations d’horodatage.
Requêtes d’horodatage
Vous pouvez obtenir des horodateurs dans le cadre d’une liste de commandes (au lieu d’un appel côté processeur sur une file d’attente de commandes) via des requêtes d’horodatage. (Pour plus d’informations sur les requêtes, consultez requêtes en général).
Toutes les requêtes d’horodatage utilisent le type D3D12_QUERY_TYPE_TIMESTAMP pour la requête réelle. Toutefois, en raison des limitations matérielles, D3D12_COMMAND_LIST_TYPE_DIRECT et D3D12_COMMAND_LIST_TYPE_COMPUTE utiliser un D3D12_QUERY_HEAP_TYPE différent de celui utilisé par D3D12_COMMAND_LIST_TYPE_COPY .
Les files d’attente de calcul et direct utilisent D3D12_QUERY_HEAP_TYPE_TIMESTAMP.
Les files d’attente de copie utilisent D3D12_QUERY_HEAP_TYPE_COPY_QUEUE_TIMESTAMP.
Les requêtes de file d’attente de copie sont prises en charge uniquement si le membre D3D12_FEATURE_DATA_D3D12_OPTIONS3 :: CopyQueueTimestampQueriesSupported a la valeur true.
Les requêtes d’horodatage, une fois résolues via ID3D12GraphicsCommandList :: ResolveQueryData, sont des uint64s qui représentent des graduations, telles qu’elles sont retournées par ID3D12CommandQueue :: GetClockCalibrationet, par conséquent, elles doivent être divisées par la fréquence de la file d’attente pour obtenir la longueur en secondes.
Important
Pour plus de précision, utilisez l’arithmétique à virgule flottante lors du calcul des intervalles de seconde ou de milliseconde des horodateurs. Par exemple, utilisez queriedTicks / (double)Frequency au lieu de queriedTicks / Frequency.