2010-01-27 4 views
1

Actuellement pour chaque appel dans la bibliothèque, je fais plusieurs itérations, le temps de mesure prise pour chaque appel, puis en calculant:La meilleure façon de comparer perormance de version différente de la bibliothèque

  1. Délai moyen pour chaque appel
  2. temps Min prendre
  3. temps Max prise
  4. Ecart type

Mais il semble ne est pas un bon métho ré . Comme ces temps dépend de l'état de la machine, Comme si le processeur est occupé avec d'autres résultats du processus seront touchés.

S'il vous plaît me suggérer encore si c'est un bon moyen.Ou, je peux utiliser une meilleure méthode.

+0

Sur un système multitâche, il n'y a pas vraiment un moyen simple de tester les performances comparatives - les autres tâches que le système doit faire auront presque toujours un impact sur les performances de votre logiciel, mais à des degrés divers. Une solution possible qui peut aider à augmenter la priorité du processus/thread avant de faire votre test, puis le diminuer par la suite. – icabod

+0

merci icabod, je suis tout à fait d'accord avec votre sur multi-tâches .. compte compter nombre d'assemblées aidera? – Satbir

Répondre

2

C'est une bonne mesure de la vitesse de base de l'algorithme, mais trouver la performance totale dépend de la façon dont vous utilisez quelque chose. Le nombre d'instructions n'est pas utile non plus. Par exemple, disons que vous avez un certain func doMath() écrit en C, et un appel de doMath basé sur un modèle qui prend 3-4 arguments basés sur un modèle. La fonction C affichera souvent des performances moins bonnes dans un cas simple. Cependant, dans un programme de taille moyenne à grande, les modèles vont atteindre des dizaines ou des centaines ou même des milliers au lieu d'un seul. Cela étouffera le cache d'instructions. Il en va de même pour les données: certaines implémentations arborescentes auront une mémoire beaucoup plus efficace et les plus volumineuses fonctionneront mieux sur des tests simples, mais en réalité, elles fonctionneront beaucoup plus mal. De même, il peut sembler qu'un arbre a des performances grâce à des tests de base, mais vous pourriez trouver avec le temps qu'il fragmente la mémoire au point que les performances diminuent et diminuent avec le temps jusqu'à ce que votre programme fonctionne à peine. Ainsi, les performances dépendent toujours de votre utilisation réelle de quelque chose, pas seulement de son implémentation. Pour ne pas dire que c'est toujours un compromis, certaines implémentations sont meilleures que d'autres. En fin de compte, cependant, la seule façon d'obtenir de bonnes performances est de savoir exactement ce que l'ordinateur est en train de faire et exactement ce que le compilateur génère, sinon ce sera toujours un mystère pour vous.

Cela fait partie des raisons pour lesquelles les gens suggèrent le profilage, mais le profilage ne vous en dira que plus, et montrera le chemin. Vous verrez les symptômes mais souvent pas la cause. C'est parce que la performance est basée sur l'ensemble du système et ce n'est pas simplement une simple addition du nombre d'instructions.

Questions connexes