Подтвердить что ты не робот

Инструменты профилирования Delphi

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

то есть. Инструмент, подобный турбо Profiler

4b9b3361

Ответ 1

Я не так давно спросил question

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

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

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

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

Ответ, который я принял в моем вопросе CharInSet, сказал, что "Пробоотборщики пробоотбора, которые периодически проверяют расположение ЦП, обычно лучше для измерения времени кода". и более поздний ответ дал Eric Grange бесплатный пробоотборник пробоотбора для Delphi, который теперь поддерживает Delphi 2009. Я еще не пробовал, но я слышал хорошие вещи об этом, и это следующий, который я собираюсь попробовать.

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

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

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


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


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

Ответ 3

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

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

Недавно я начал использовать Intel VTune Performance Analyzer. "WOW" не начинает подводить итоги. Я впечатлен. Я просто не знал, что все это было встроено в современные процессоры Intel. Знаете ли вы, что это может рассказать вам, как часто одна команда должна ждать, пока L1 Data Cache будет смотреть боком на другое ядро, прежде чем перезагружать слово из более высокого кеша? Если я буду продолжать писать, я просто буду похож на задыхающуюся рекламу для продукта.

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


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

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

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

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

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

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

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

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

В любом случае, я продаюсь на VTune.

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

Здесь другой выбор, я не использовал его раньше: http://www.prodelphi.de

Ответ 9

Заключительное примечание, www.torry.net - отличное место для поиска компонентов/инструментов Delphi