2010-02-27 10 views
2

HI all,Comparaison des performances des implémentations logicielles

Ceci est une question plus générale, mais fondamentalement, je veux comparer les performances de deux applications logicielles multimédia. Bien qu'ils fassent la même chose, ils s'exécutent sur des plates-formes différentes et rien n'est connu sur la mise en œuvre. Je reçois des chiffres de performance assez différents et j'essaie de raisonner sur ce qui pourrait être le cas pour cela. Jusqu'à présent, je suis venu avec ce qui suit:

meilleures performances grâce à des optimisations logicielles:

  • boucle se déroulant au coût de l'empreinte mémoire de code plus
  • des résultats pro-calcul stocké en mémoire à la coût d'une empreinte mémoire de données plus

une meilleure performance en raison des architectures matérielles sous-jacentes

  • fonctionnant à une meilleure horloge offrant une plus grande vitesse
  • support matériel pour une application
  • de meilleures possibilités de mise en cache

Quelqu'un peut-il penser à autre chose ou est-ce tout?

Merci, Simon

Répondre

2

Je dirais:

  • Si vous ne savez rien sur les implémentations, vous ne serez pas intéressés comment cette mise en œuvre fonctionne, y compris déroulage et tout en boucle.
  • À ce niveau d'abstraction, vous voudrez probablement mesurer les objectifs de performance liés à l'utilisateur final, comme in this Wikipedia article.
  • En particulier, pour le système mono-utilisateur, le temps de réponse et le débit sont plus importants; tandis que pour les systèmes multi-utilisateurs, la concurrence et le débit seraient importants. Les premiers sont affectés par la vitesse d'horloge et la conception de l'interface utilisateur; ce dernier est également affecté par la taille de la mémoire cache et le comportement général du système en cas de charges élevées.
  • Martin Fowler a une bonne analyse des indicateurs de performance dans son PoEA,
1

Bonne question. Le matériel fait certainement une différence, mais les différences structurelles du logiciel le font aussi.

Il est hautement improbable que les optimisations au niveau micro, telles que le déroulement, fassent une grande différence. Raisonner à ce sujet ne vous mènera pas très loin - vous devez enquêter. Je ne dis pas que vous pouvez obtenir une réponse définitive à cette question, mais voici ce que je ferais. Somehow, get 10 or 20 random-time stack samples, que ce soit par interruption et décharge, pstack, lsstack, ou en cours d'exécution sous un débogueur et en utilisant Ctrl-C, ou un bon profileur pile-échantillonnage comme RotateRight/Zoom.

Vous pouvez regarder ces échantillons et avoir une idée, en pourcentage, de la façon dont chaque programme passe son temps. Si elles sont presque optimales, les images devraient être assez similaires, même si vous ne savez pas exactement ce qu'elles font. Si l'un d'eux, par exemple, consacre un pourcentage plus élevé de temps à la gestion de la mémoire, c'est un drapeau rouge. Si la pile d'appels est généralement beaucoup plus profonde sur l'un que sur l'autre, c'est aussi une source de suspicion, non pas parce que les appels sont chers, mais parce qu'un style de codage excessif générique tend à le montrer.

Si vous n'avez pas de symboles, cela peut demander beaucoup de travail de détective, et vous ne pourrez peut-être pas le faire, mais c'est ainsi que je l'aborderais.

Questions connexes