автоматическое профилирование на уровне контура сборки - PullRequest
2 голосов
/ 04 января 2011

Кто-нибудь знает какой-либо профилировщик уровня цикла сборки?

Я использовал gprof, но gprof скрывает циклы, и это профилирование на уровне функций, но для оптимизации моего кода я хочу, чтобы что-то пошло на уровень цикла.Я хочу, чтобы это было автоматизировано и просто выдало мне вывод, как gprof.Мне порекомендовали перейти на dtrace, но я понятия не имел, начать.Кто-нибудь может направить меня в любом случае?например,

main:

pushl   %ebp     
movl    %esp, %ebp     
subl    $16, %esp     
movl    $5000000, -4(%ebp)     
movl    $0, -12(%ebp)     
movl    $0, -8(%ebp)    
jmp .L2 

.L3:   

 movl    -8(%ebp), %eax    
 addl    %eax, -12(%ebp)    
 addl    $1, -8(%ebp) 

.L2:    

movl    -8(%ebp), %eax    
cmpl    -4(%ebp), %eax    
jl  .L3     
movl    $0, %eax    
leave     ret 

, например, в gprof будет указано, что main выполнено 1 раз, а foo выполнено 100 раз.Тем не менее, я хочу знать, если L2 или L3 выполняются 1M раз, тогда моя концентрация на оптимизации будет здесь.если мой вопрос неопределенный, пожалуйста, попросите меня объяснить больше Спасибо

Ответы [ 4 ]

4 голосов
/ 04 января 2011

Это зависит от того, какую операционную систему вы используете, но для такого рода профилирования вы обычно хотите использовать сэмплер , а не инструментальный профилировщик, например

1 голос
/ 04 января 2011

Если вы используете Linux, Zoom - отличный выбор.

Если вы работаете в Windows, LTProf может сделать это.1007 *

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

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

1 голос
/ 04 января 2011

Я предлагаю использовать Callgrind (один из инструментов Valgrind , который обычно устанавливается вместе с ним).Это может собирать статистику на гораздо более детальном уровне, и инструмент kcachegrind очень хорош для визуализации результатов.

0 голосов
/ 04 января 2011

KCachegrind предоставляет информацию о профилировании для каждой строки исходного кода (см. снимок экрана ), и это включает в себя процессорное время, ошибки в кэше и т. Д. Это несколько раз спасло мой день.

Однако выполнение кода внутри профилировщика происходит очень медленно (в десятки раз медленнее, чем собственный).

...