Профилирование построчно в C ++ - PullRequest
1 голос
/ 13 октября 2010

У меня есть программа на C ++, которую я пытаюсь оптимизировать.Поскольку я хочу, чтобы он работал быстро, я не использую много вызовов функций.Большинство инструментов профилирования, которые я видел, могут дать вам информацию профилирования в разрешении вызова функции.Тем не менее, я хотел бы, чтобы это было в построчном разрешении.Есть ли какая-либо опция, подобная этой?

Я использую Visual Studio 2010 в Windows.

Спасибо.

Ответы [ 4 ]

2 голосов
/ 13 октября 2010

AQTime - это коммерческий профилировщик для Windows, и я обнаружил, что он довольно хорошо работает как для функций, так и для синхронизации строк.Одна вещь, которая мне нравится в этом, это то, что вам не нужно возиться с параметрами компилятора или настройками Visual Studio - т.е. вам не нужны никакие дополнительные параметры компилятора для включения профилирования: все, что вам нужно сделать, это профилированиефайл pdb (символ) и исполняемый файл.(И да, вы можете создать файл pdb для вашего релиз-компиляции.)

2 голосов
/ 13 октября 2010

Если вы работаете на процессоре AMD, CodeAnalyst бесплатен и может это делать (по крайней мере, при профилировании по времени); на самом деле вы можете «увеличивать» и уменьшать масштаб, наблюдая за тем, что отнимает больше всего процессорного времени от процессов до функций, вплоть до отдельных инструкций по сборке.

CodeAnalyst window

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

Кстати, на мой взгляд, вы должны забыть о меньшем количестве вызовов функций => более быстрой идее. Если стоимость вызова функции больше, чем ее «полезная нагрузка», компилятор должен иметь возможность самостоятельно определить, удобно ли встроить вызов, а в некоторых случаях даже слишком большое встраивание может замедлить код.

2 голосов
/ 13 октября 2010

Параллельный усилитель Intel должен быть способен на то, что вы хотите. Если это то, что вы хотите:

amplifier

1 голос
/ 13 октября 2010

ИМХО, этот метод лучше всего , для этих причин , и вот пример 43x ускорения . Это не очень известная техника, за исключением небольшого числа людей, для один пример , другой и другой . Вы можете быть удивлены, что это очень низко технологичный и ручной, но вы не можете превзойти результаты.

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

...