2017-07-11 1 views
0

Je veux voir par programme combien de temps GPU une partie de mon application consomme sur macOS et iOS. Sur OpenGL et D3D, je peux utiliser des objets de requête de temporisateur GPU. J'ai cherché et je n'ai rien trouvé de similaire pour Metal. Comment puis-je mesurer le temps GPU sur Metal sans utiliser les instruments etc. J'utilise Objective-C.Comment mesurer l'heure GPU sur Metal?

Répondre

0

Vous pouvez ajouter des blocs de gestionnaire planifiés et terminés à un tampon de commandes. Vous pouvez prendre des horodatages dans chacun et comparer. Il y a une certaine latence, puisque les blocs sont exécutés sur le CPU, mais cela devrait vous permettre de le fermer.

1

Il y a quelques problèmes avec cette méthode:

1) Vous voulez vraiment savoir quel est le temps d'attente du côté GPU dans un tampon de commande la plupart du temps, ne pas aller-retour à la CPU. Ceci est mieux mesuré comme la différence de temps entre l'exécution de 20 instances du shader et 10 instances du shader. Cependant, cette approche peut ajouter du bruit puisque l'erreur est la somme des erreurs associées aux deux mesures.

2) En attente d'achèvement, le GPU s'arrête lorsque l'exécution s'arrête. Quand il se remet en marche, l'horloge est dans un état de faible puissance et peut prendre un certain temps pour revenir, faussant vos résultats. Cela peut être un problème sérieux et peut sous-estimer votre performance dans l'indice de référence contre réel par un facteur de deux ou plus. 3) Si vous démarrez l'horloge programmée et que vous arrêtez l'opération, mais que le GPU est occupé à exécuter d'autres tâches, votre temps écoulé inclut le temps passé sur l'autre charge de travail. Si le GPU n'est pas occupé, vous obtenez les problèmes d'horloge décrits dans (2).

Ce problème est beaucoup plus difficile à résoudre que la plupart des cas d'étalonnage auxquels j'ai travaillé, et j'ai fait beaucoup de mesures de performance. La meilleure façon de mesurer ces éléments est de les utiliser sur les compteurs des moniteurs de performance de l'appareil, car c'est une mesure directe de ce qui se passe, en utilisant la propre notion de temps de la machine. Je préfère ceux qui rapportent des cycles sur l'heure de l'horloge murale parce que cela tend à éliminer l'orientation de l'horloge, mais il n'y a pas d'accord universel à ce sujet. (Toutes les parties du matériel ne fonctionnent pas à la même fréquence, etc.) Je me tournerais vers les outils de développement pour les méthodes de mesure basées sur les PMC et si vous ne les trouvez pas, demandez-les.