Question

Je fais un article sur l'accélération du GPU dans un environnement de cluster
Pour ce faire, je programme en CUDA, qui est essentiellement une extension C++.Mais comme je suis développeur c# je ne connais pas les particularités du c++.

Il y a des inquiétudes concernant l'enregistrement du temps écoulé ?Une suggestion ou un blog à lire.

Mon idée initiale est de faire une grande boucle et d'exécuter le programme plusieurs fois.50 ~ 100, et enregistrez chaque temps écoulé pour ensuite créer quelques graphiques de vitesse.

Était-ce utile?

La solution

Fonctions standards telles que time ont souvent une très faible résolution.Et oui, un bon moyen de contourner ce problème est d’exécuter votre test plusieurs fois et de faire une moyenne.Notez que les premières fois peuvent être très lentes en raison de coûts de démarrage cachés, en particulier lors de l'utilisation de ressources complexes telles que les GPU.

Pour les appels spécifiques à la plateforme, jetez un œil à QueryPerformanceCounter sous Windows et CFAbsoluteTimeGetCurrent sous OS X.(Je n'ai pas utilisé l'appel POSIX clock_gettime mais cela vaut peut-être la peine d'être vérifié.)

Mesurer les performances des GPU est délicat car les GPU sont des unités de traitement distantes exécutant des instructions distinctes, souvent sur de nombreuses unités parallèles.Vous voudrez peut-être visiter Nvidia Zone CUDA pour une variété de ressources et d'outils pour aider à mesurer et à optimiser le code CUDA.(Ressources liées à OpenCL sont également très pertinents.)

En fin de compte, vous voulez voir à quelle vitesse vos résultats arrivent à l’écran, n’est-ce pas ?C'est pour cette raison qu'un appel à time pourrait bien suffire à vos besoins.

Autres conseils

Selon vos besoins, cela peut être aussi simple que:

time_t start = time(NULL);
// long running process
printf("time elapsed: %d\n", (time(NULL) - start));

Je suppose que vous devez indiquer comment vous planifiez ceci pour être enregistré (fichier ou console) et quelle est la précision dont vous avez besoin (secondes, MS, US, etc.)."Time" en donne en quelques secondes.

Je recommanderais d'utiliser le Boost Timer Bibliothèque .C'est la plate-forme agnostique et est aussi simple que:

#include <boost/timer/timer.hpp>
boost::timer t;
// do some stuff, up until when you want to start timing
t.restart();
// do the stuff you want to time.
std::cout << t.elapsed() << std::endl;

Bien sûr, T.ELAPSED () renvoie un double que vous pouvez enregistrer sur une variable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top