Инструменты Delphi Profiling [закрыто]

У меня проблемы с производительностью в приложении Delphi 2006. Можете ли вы предложить какие-либо инструменты профилирования, которые помогут мне найти горлышко бутылки

то есть такой инструмент, как Turbo Profiler

15.12.2008 16:34:36
Migrate2Lazarus see my profile 26.02.2018 10:33:43
Это бесплатное и простое в использовании приложение (по сравнению с ProDelphi). delphitools.info/downloads/samplingprofiler-changelog
Migrate2Lazarus see my profile 26.02.2018 11:50:57
GpProfiler работает с последним Delphi, см. Github.com/ase379/gpprofile2017
Johan 6.11.2018 10:03:19
9 ОТВЕТОВ
РЕШЕНИЕ

Я задал тот же вопрос не так давно

Я скачал и попробовал AQtime. Это кажется всеобъемлющим, но это не простой в использовании инструмент и ОЧЕНЬ дорого для отдельного программиста (то есть 600 долларов США). Мне нравился тот факт, что он был неинвазивным (не изменял ваш код) и мог выполнять построчное профилирование, пока не обнаружил, что, поскольку он является профилировщиком инструментов, он может привести к неправильной оптимизации, как в: Почему CharInSet быстрее, чем оператор Case?

Я попробовал демо-версию ProDelphi, гораздо менее дорогую (я думаю, около 80 долларов), но она была слишком неуклюжей для меня - мне вообще не понравился пользовательский интерфейс, и он агрессивен - меняю код для добавления инструментов, с которым вы должны быть осторожны.

Я использовал GpProfile с Delphi 4 в течение многих лет. Я люблю это. Он также был инвазивным, но он работал так хорошо, что я научился доверять ему, и это никогда не доставляло мне проблем за 10 лет. Но когда я обновился до Delphi 2009, я не думал, что лучше всего попробовать его использовать, так как он не был обновлен и, по признанию GP, не будет работать без изменений. Я ожидаю, что вы не сможете использовать его и с Delphi 2006.

ProDelphi и GpProfile будут профилировать только на уровне процедуры. Если вы хотите сделать отдельные строки (что мне иногда приходилось делать), вы должны вызвать PROC1, PROC2, PROC3 для каждой строки и поставить одну строку в каждом PROC. Это было немного досадно, но это дало мне хорошие результаты (по крайней мере, я был доволен результатами GpProfile).

Ответ, который я принял в своем вопросе о CharInSet, сказал, что «профилировщики выборки, которые периодически проверяют местоположение процессора, обычно лучше измеряют время кода». и более поздний ответ дал Эрик Грандж бесплатный профилировщик выборки для Delphi, который теперь поддерживает Delphi 2009. Я еще не пробовал это, но я слышал хорошие вещи об этом, и это следующий, который я собираюсь попробовать.

Кстати, вам лучше всего сэкономить 600 долларов, не покупая AQtime, и вместо этого использовать его для обновления Delphi 2006 до Delphi 2009. Стабильность, скорость и дополнительные функции (особенно Unicode) будут стоить вашего времени. См. Каковы основные стимулы для перехода на D2009 (исключая Юникод)?

Также AQtime пока не интегрируется в Delphi 2009.

Еще один бесплатный, с источником, о котором я узнал, но еще не пробовал, - это TProfiler . Если кто-то попробовал это, я хотел бы знать, что они думают.


Примечание: Адденум, который я добавил позже к вопросу 291631, кажется, может быть ответом. Смотрите программу Андре с открытым исходным кодом: asmprofiler


Февраль 2010 года. Я укусил пулю и купил AQTime. Несколько месяцев назад они наконец интегрировали его в Delphi 2009, который я и использую (но они все еще должны делать Delphi 2010). Просмотр строк с исходными текстами и их индивидуальных времен и подсчетов неоценим для меня, и AQTime отлично справляется с этой задачей.

24
23.05.2017 12:32:31
Я почти уверен, что AQTime 6 будет интегрирован с Delphi 2009.
lukeck 16.12.2008 02:18:22
По состоянию на 15 декабря 2008 года это не так. Когда я не смог получить пробную загрузку для интеграции, я связался с AutomatedQA, и они сказали, что все еще работают над этим. AQTime 6.10 будет работать только с Delphi 2009 как отдельная программа.
lkessler 16.12.2008 03:50:37
AQTime 6.30 был выпущен в ноябре 2009 года и, наконец, добавил интеграцию в Delphi 2009. Но, конечно, Delphi 2010 уже вышел, и нет, AQTime еще не имеет интеграции с этим. Может быть, еще один год ждать людей D2010.
lkessler 21.12.2009 04:35:57

www.AutomatedQA.com имеет лучший выбор для профилирования Delphi (AQTime)

3
15.12.2008 16:40:08
Имейте в виду, что AQA основан на инструментах, а не на профилировании, и, таким образом, он даст вводящие в заблуждение результаты для очень мелкозернистых узких мест.
Barry Kelly 16.12.2008 01:54:11
s / без профилирования / без отбора проб /
Barry Kelly 16.12.2008 01:55:15

Вот еще один вариант, я не использовал этот раньше: http://www.prodelphi.de

0
15.12.2008 16:43:36

Окончательный выбор, который я знаю для Delphi, http://gp.17slon.com/gpprofile/index.htm

0
15.12.2008 16:44:34

Последнее замечание: www.torry.net - отличное место для поиска компонентов / инструментов Delphi.

-1
15.12.2008 16:45:17
Дариан, вместо того, чтобы добавлять 4 ответа на один вопрос, отредактируйте свой первый ответ, чтобы предоставить всю информацию, и удалите другой 3.
Jan Goyvaerts 18.12.2008 06:14:39

В прошлом я успешно использовал http://www.prodelphi.de в проекте Delphi 7. Дешево и работает. Не позволяйте веб-сайту Лиги Буша напугать вас.

6
15.12.2008 16:48:09

Я использую и рекомендую Sampling Profiler, я думаю, что вы можете получить его из embarcadeiro.public, вложения группы новостей.

3
15.12.2008 19:25:10
Теперь это на delphitools.info
Roman Ganz 21.03.2009 08:47:34

Я только что нашел очень хороший бесплатный профилировщик выборки, и он поддерживает Delphi 2009

11
8.03.2009 12:11:27
Работает и с Delphi 7 - спасибо за это. Обратите внимание, что обязательно включите отладочную информацию TD32 в настройках компоновщика.
T.S 13.04.2017 08:14:08

Я использовал ProDelphi, в основном, чтобы определить, какие процедуры едят больше всего времени. Это инструментальный профилировщик, то есть он добавляет немного кода в начало и конец каждой процедуры. Вы контролируете, какие процедуры он профилирует с помощью директив внутри комментариев. Вы также можете профилировать разделы рутины. Но секции должны начинаться и останавливаться на одном уровне блоков, без входа в секцию или выхода из нее. Оптимизация должна быть отключена, когда ProDelphi вставляет свой код (куда вы помещаете директивы), но вы можете включить его где угодно.

Интерфейс довольно клёвый, но очень быстрый, как только вы его освоите. Вы можете сделать полезную работу с бесплатной версией (ограничено 10 подпрограммами или разделами). ProDelphi может быстро сказать вам, какие процедуры вы должны изучить. Но не почему или какие строки.

Недавно я начал использовать Intel VTune Performance Analyzer. «ВАУ» не начинает подводить итог. Я впечатлен . Я просто понятия не имел, что все это встроено в современные процессоры Intel. Знаете ли вы, что он может точно сказать вам, как часто одной инструкции нужно ждать, пока кэш данных L1 будет смотреть вбок на другое ядро, прежде чем загружать слово из более высокого кеша? Если я продолжу писать, я буду звучать как затаив дыхание объявление о продукте.

Зайдите в Intel и загрузите полную рабочую демоверсию. Покопайтесь в сети и найдите пару видео о том, как начать. (В противном случае вы рискуете быть заблокированным всеми опциями.) Это работает с любым компилятором. Просто укажите на .exe. Он покажет вам исходные строки, если ваш .exe содержит отладочную информацию, и вы укажете на исходный код.


Я застрял, пытаясь оптимизировать внутренний цикл, который вызывал функцию, которую я написал. Внешних звонков не было, кроме длины (str). Этот внутренний цикл выполнялся миллиарды раз за цикл и потреблял примерно половину времени процессора - идеальный кандидат на оптимизацию. Я перепробовал все виды стандартных оптимизаций, практически безрезультатно. VTune показывает горячие точки. Я просто углубился, пока он не показал мне ASM, сгенерированный моим кодом, и сколько времени заняла каждая инструкция.

Вот что VTune сказал мне:

  • строка nnnn [строка кода delphi] ...
  • addr hhhh cmp байт ptr [edx + ecx], 0x14h - - - - - - - - 3 цикла
  • addr hhhh ja label_x - - - - - - - - - - - - - - - - - - -10302 цикла

Абсолютные значения ничего не значат. (Я думаю, что я измерял количество циклов на одну команду в отставке.) Относительные значения позволяют понять, куда все время уходило. Самое замечательное было Окно Советов. Он сообщил мне, что код завис в ожидании загрузки данных в кэш данных L1, и на самом деле дал мне хороший совет о том, как избежать задержек.

Моя ошибка заключалась в том, что я думал о Core2 Quad как о действительно быстром процессоре 8086. Нет ^ 3. Код тратил 99% своего времени на ожидание загрузки данных из памяти, потому что я слишком много прыгал. Мой алгоритм предполагал, что память была RAM (произвольный доступ). Это не так, как работают современные процессоры. Доступ к данным в кеше L1 может осуществляться за 1 или 2 цикла, но доступ к кэшу L2 или L3 стоит от десятков до сотен циклов, а доступ к ОЗУ - тысячи. Однако вся эта задержка исключается при последовательном доступе к данным - потому что процессор предварительно загрузит кэш данными, следующими за первым запрошенным вами байтом.

В результате я переписал алгоритм для более последовательного доступа к данным и получил 10-кратное ускорение, что было достаточно. Когда у меня будет время, я уверен, что смогу получить еще 10 раз. Но это только Компьютерщик во мне. Достаточно хорошо, достаточно хорошо.

Я уже знал, что вы получаете наибольшую отдачу, оптимизируя свой алгоритм, а не код. Я думал, что мне нужен только профилировщик, чтобы сказать мне, что нужно оптимизировать. Но мне также нужно было найти причину узкого места, чтобы я мог разработать более быстрый алгоритм.

Новый алгоритм принципиально не отличается от старого. Он просто хранит данные так, чтобы к ним можно было получить доступ последовательно. Например, в одном месте я переместил поле из массива записей в его собственный массив целых чисел - потому что внутренний цикл не нуждался в остальных данных в каждой записи. У меня также была прямоугольная матрица, хранящаяся как динамический массив динамических массивов. Код использовал это для случайного доступа к мегабайту данных (а кеш плохого уровня L1 составляет всего 64 КБ). Я выяснил, как хранить его в линейном массиве в виде диагоналей матрицы, и именно в этом порядке я использую данные. (Хорошо, возможно , что часть является радикалом.)

Во всяком случае, я продан на VTune.

9
13.07.2009 21:53:29