Je cherche des moyens d'effectuer des micro-benchmarks sur les processeurs multi-core.Comment référence sur les processeurs multi-core
Contexte:
à peu près les mêmes processeurs de bureau de temps introduits hors ordre d'exécution qui a rendu des performances difficiles à prévoir, ils, peut-être pas par hasard, a également présenté des instructions spéciales pour obtenir des timings très précises. Exemple de ces instructions sont rdtsc
sur x86 et rftb
sur PowerPC. Ces instructions donnaient des horaires qui étaient plus précis que ce qui pouvait être autorisé par un appel système, permettant aux programmeurs de micro-évaluer leurs cœurs, pour le meilleur ou pour le pire.
Sur un processeur encore plus moderne avec plusieurs cœurs, dont certains dorment de temps en temps, les compteurs ne sont pas synchronisés entre les cœurs. On nous dit que rdtsc
n'est plus sûr à utiliser pour l'analyse comparative, mais j'ai dû somnoler quand on nous a expliqué les solutions de rechange.
Question:
Certains systèmes peuvent sauvegarder et restaurer le compteur de performance et de fournir un appel d'API pour lire la somme appropriée. Si vous savez ce que cet appel est pour n'importe quel système d'exploitation, s'il vous plaît laissez-nous savoir dans une réponse.
Certains systèmes peuvent permettre de désactiver les noyaux, ne laissant qu'une seule course. Je sais que Mac OS X Leopard fonctionne lorsque le volet Préférences approprié est installé à partir des outils de développement. Pensez-vous que cela rend le rdtsc
sûr à utiliser à nouveau?
Plus contexte:
S'il vous plaît suppose que je sais ce que je fais en essayant de faire un micro-référence. Si vous êtes d'avis que si elle ne peut mesurer les gains d'une optimisation en synchronisant l'ensemble de l'application, il ne vaut pas optimalisation, je suis d'accord avec vous, mais
Je ne peux pas le temps l'ensemble de l'application jusqu'à ce que la structure de données alternative est fini, ce qui prendra beaucoup de temps. En fait, si le micro-benchmark n'était pas prometteur, je pourrais décider de renoncer à la mise en œuvre maintenant;
J'ai besoin de fournir des chiffres dans une publication dont la date limite que je ne contrôle pas.
Merci, je devrais être en mesure de travailler sur http://developer.apple.com/mac/library/qa/qa2004/qa1398.html, bien que je suis très déçu du résultat de 'man mach_absolute_time'. –
@Pascal: Ce serait un bon bug à signaler. J'ai posté un exemple de code qui évite le jet de pointeur dans cette note. –
Notez que cette solution souffrira beaucoup plus de l'effet de sonde que d'épingler votre processus sur un seul noyau et d'utiliser rtdsc deux fois (sur x86, ne peut pas parler pour PowerPC). Le compilateur ne peut pas intégrer vos fonctions, il prend plus de mémoire cache d'instructions, et vous multipliez et divisez ce qui, selon moi, peut varier en fonction du temps nécessaire à leur exécution en fonction de leurs opérandes. 'rtdsc' lit juste un registre et est donc beaucoup moins cher et affectera moins vos résultats. –