Outils de profilage Delphi [fermé]

J'ai quelques problèmes de performances avec mon application Delphi 2006. Pouvez-vous suggérer des outils de profilage qui m'aideront à trouver le goulot de la bouteille

C'est-à-dire un outil comme turbo Profiler

21
demandé sur Pauk 2008-12-15 19:34:36

9 réponses

J'ai posé la même question Il n'y a pas si longtemps

J'ai téléchargé et essayé AQtime. Cela semble complet, mais ce n'est pas un outil facile à utiliser et est très coûteux pour un programmeur individuel (c'est-à-dire 600 $US). J'ai adoré le fait qu'il était non invasif (n'a pas changé votre code), et qu'il pouvait faire du profilage ligne par ligne, jusqu'à ce que je trouve que parce que C'est un profileur d'instrumentation, il peut conduire à des optimisations incorrectes comme dans: Pourquoi CharInSet est-il plus rapide que Case déclaration?

J'ai essayé une démo de ProDelphi, beaucoup moins chère (environ 80 $je pense), mais c'était beaucoup trop maladroit pour moi-je n'aimais pas du tout l'interface utilisateur, et c'est invasif - changer votre code pour ajouter l'instrumentation, dont vous devez faire attention.

J'ai utilisé GpProfile avec Delphi 4 pendant de nombreuses années. Je l'ai aimé. C'était aussi invasif, mais cela a si bien fonctionné que j'ai appris à lui faire confiance et cela ne m'a jamais posé de problème en 10 ans. Mais quand J'ai mis à niveau vers Delphi 2009, je Je ne pensais pas qu'il valait mieux essayer de l'utiliser, car il n'a pas été mis à jour et par l'admission DE GP, ne fonctionnera pas sans modifications. Je m'attends à ce que vous ne puissiez pas l'utiliser non plus avec Delphi 2006.

ProDelphi et GpProfile ne profileront qu'au niveau de la procédure. Si vous voulez faire des lignes individuelles (ce que je devais parfois faire), vous devez appeler PROC1, PROC2, PROC3 pour chaque ligne et mettre une ligne dans chaque PROC. C'était un peu ennuyeux d'avoir à le faire, mais il m'a donné de bons résultats (à moins j'étais heureux avec les résultats de GpProfile faisant cela).

La réponse que j'ai acceptée dans ma question CharInSet disait que "les profileurs D'échantillonnage, qui vérifient périodiquement l'emplacement de la CPU, sont généralement meilleurs pour mesurer le temps de code."et une réponse ultérieure a donné le profileur d'échantillonnage gratuit D'Eric Grange pour Delphi qui prend désormais en charge Delphi 2009. Je ne l'ai pas encore essayé, mais j'ai entendu de bonnes choses à ce sujet, et c'est la prochaine que je vais essayer.

Au fait, vous pourriez être le meilleur en économisant votre $ 600 en N'achetant pas AQtime, et au lieu de l'utiliser pour mettre à niveau votre Delphi 2006 à Delphi 2009. La stabilité, la vitesse et les fonctionnalités supplémentaires (expecially Unicode), en valent la peine. Voir: quelles sont les principales incitations à passer à D2009 (Unicode exclu)?

Aussi AQtime ne s'intègre pas encore dans Delphi 2009.

Un autre gratuit, avec la source que j'ai découvert, mais qui n'a pas encore essayé est TProfiler . Si quelqu'un a essayé un, J'aimerais savoir ce qu'ils pensent.


Note: L'Addenum que j'ai ajouté ensuite à question 291631 semble être la réponse. Voir le programme open source de Andre: asmprofiler


Février 2010 suivi. J'ai mordu la balle et acheté AQTime. Il y a quelques mois, ils l'ont finalement intégré dans Delphi 2009 qui est ce que j'utilise (mais ils doivent encore faire Delphi 2010). La visualisation des lignes sources et de leurs temps et comptes individuels est inestimable pour moi, et AQTime fait un superbe travail de ce.

24
répondu lkessler 2017-05-23 12:32:31

Je viens de trouver un très bon profileur d'échantillonnage libre {[2] } et il supporte Delphi 2009

11
répondu Charles Faiga 2009-03-08 12:11:27

J'ai utilisé ProDelphi, principalement pour déterminer quelles routines mangent le plus de temps. C'est un profileur D'Instrumentation, ce qui signifie qu'il ajoute un peu de code au début et à la fin de chaque routine. Vous contrôlez les routines qu'il Profile par des directives dans les commentaires. Vous pouvez également profiler des sections d'une routine. Mais les sections doivent commencer et s'arrêter au même niveau de bloc, sans entrée ni sortie de la section. L'optimisation doit être désactivée là où ProDelphi insère son code (où vous mettez le directives), mais vous pouvez l'activer n'importe où ailleurs.

L'interface est un peu klunky, mais très rapide Une fois que vous obtenez le coup de celui-ci. Vous pouvez faire un travail utile avec la version gratuite (limitée à 10 routines ou sections). ProDelphi peut rapidement vous dire quelles routines vous devriez examiner. Mais pas pourquoi, ou quelles lignes.

Récemment, j'ai commencé à utiliser L'Analyseur de performances VTune D'Intel. "WOW" ne commence pas à résumer. Je suis impressionné. Je ne savais tout simplement pas que tout cela a été construit dans les processeurs Intel modernes. Saviez-vous qu'il peut vous dire exactement combien de fois une seule instruction nécessaire pour attendre que le Cache de données L1 regarde de côté un autre noyau avant de recharger un mot à partir d'un cache supérieur? Si je continue à écrire, je vais juste sonner comme une annonce à bout de souffle pour le produit.

Allez sur Intel et téléchargez la démo chronométrée complète. Creusez autour du net et trouvez quelques vidéos sur la façon de commencer. (Sinon, vous courez le risque d'être bloqué par toutes les options.) Il fonctionne avec n'importe quel compilateur. Il suffit de pointer vers un .EXE. Il vous montrera les lignes source si votre .exe inclut les informations de débogage et vous le pointez vers le code source.


J'étais coincé en essayant d'optimiser une boucle interne qui a appelé une fonction que j'ai écrite. Il n'y avait pas d'appels externes, sauf length(str). Cette boucle interne a couru des milliards de fois par exécution, et a mangé environ la moitié du temps cpu - un candidat parfait pour l'optimisation. J'ai essayé toutes sortes d'optimisations standard, avec peu ou pas d'effet. VTune montre des points chauds. Je viens de forer jusqu'à ce qu'il me montre L'ASM que mon code a généré, et combien de temps chaque instruction a pris.

Voici ce que VTune m'a dit:

  • ligne nnnn [ligne du code delphi] ...
  • addr HHHH cmp octet ptr [edx + ecx], 0x14h - - - - - - - - 3 cycles
  • addr hhhh ja label_x - - - - - - - - - - - - - - - - - - -10302 les cycles de

Les valeurs absolues ne signifient rien. (Je pense que je mesurais des cycles par l'instruction à la retraite.) Les valeurs relatives rendent un peu clair où tout le temps est allé. La grande chose était la fenêtre de conseils. Il m'a dit que le code bloquait en attendant que les données soient chargées dans le cache de données L1, et m'a donné de bons conseils sur la façon d'éviter les stands.

Mon erreur était de penser au Quad Core2 comme un processeur 8086 très rapide. Non ^ 3. Le code passait 99% de son temps à attendre que les données se chargent de la mémoire parce que je sautais trop. Mon algorithme supposé cette mémoire était RAM (accès aléatoire). Ce N'est pas comme ça que les processeurs modernes fonctionnent. Les données dans le cache L1 peuvent être accessibles en 1 ou 2 cycles, mais l'accès au cache L2 ou L3 coûte des dizaines à des centaines de cycles, et le passage à la RAM coûte des milliers. cependant , toute cette latence est évitée lorsque vous accédez à vos données de manière séquentielle-car le processeur préchargera le cache avec les données suivant le premier octet que vous demandez.

Résultat Net est que j'ai réécrit l'algorithme d'accéder aux données plus séquentiellement, et a obtenu une accélération 10x, ce qui était assez bon. Quand j'ai le temps, je suis certain que je peux en obtenir un autre 10x. Mais c'est juste le Geek en moi. Assez bon est assez bon.

Je savais déjà que vous obtenez le plus bang en optimisant votre algorithme, pas votre code. Je pensais que j'avais seulement besoin du profileur pour me dire ce qu'il fallait optimiser. Mais j'en avais aussi besoin pour trouver la raison du goulot d'étranglement afin que je puisse concevoir un algorithme plus rapide.

Le nouvel algorithme n'est pas radicalement différente de l'ancienne. Il stocke simplement les données de sorte qu'elles peuvent être consultées séquentiellement. Par exemple, à un endroit, j'ai déplacé un champ d'un tableau d'enregistrements dans son propre tableau d'entiers-parce que la boucle interne n'avait pas besoin du reste des données dans chaque enregistrement. J'ai également eu une matrice rectangulaire stockées dans un tableau dynamique de tableaux dynamiques. Le code l'utilisait pour accéder aléatoirement à des mégaoctets de données (et le mauvais cache de données L1 n'est que de 64 ko). J'ai compris comment le stocker dans un linéaire tableau comme diagonales de la matrice, qui est l'ordre dans lequel j'utilise les données. (OK, peut - être que cette partie est radicale.)

De toute façon, je suis vendu sur VTune.

8
répondu 2009-07-13 21:53:29

J'ai utilisé http://www.prodelphi.de avec succès sur Delphi 7 projet dans le passé. Pas cher et qui fonctionne. Ne laissez pas le site Web de la Ligue bush vous effrayer.

5
répondu Sean 2008-12-15 16:48:09

Www.AutomatedQA.com a le meilleur choix pour le profilage Delphi (AQTime)

3
répondu Darian Miller 2008-12-15 16:40:08

J'utilise et recommande le profileur D'échantillonnage, je pense que vous pouvez l'obtenir à partir d'embarcadeiro.public, pièces jointes newsgroup.

3
répondu Cesar Romero 2008-12-15 19:25:10

Voici un autre choix, je n'ai pas utilisé celui-ci avant: http://www.prodelphi.de

0
répondu Darian Miller 2008-12-15 16:43:36

Choix Final que je connais pour Delphi, http://gp.17slon.com/gpprofile/index.htm

0
répondu Darian Miller 2008-12-15 16:44:34

Note finale, www.torry.net est un endroit idéal pour la recherche de composants/outils Delphi

-1
répondu Darian Miller 2008-12-15 16:45:17