Измерение времени выполнения функции без кода модификации

Я нашел в библиотеке кусок кода (функции), который можно было бы улучшить за счет оптимизации компилятора (так как основная идея - найти хороший материал, чтобы углубиться в компиляторы). И я хочу автоматизировать замер времени выполнения этой функции скриптом. Поскольку это низкоуровневая функция в библиотеке и получение аргументов, ее сложно извлечь. Поэтому я хочу найти способ измерения именно этой функции (точное время процессора) без модификаций библиотеки/приложения/среды. У вас есть идеи, как этого добиться?

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

P.S.: Мой код будет работать на архитектуре ARM (armv7el), в которой есть какие-то регистры «Управление монитором производительности». Я узнал о «perf» в ядре Linux. Но не знаю, это то, что мне нужно?


person Mephi_stofel    schedule 20.07.2012    source источник
comment
Вы должны иметь возможность использовать любой профилировщик кода, совместимый с вашим языком программирования — это именно та проблема, для решения которой они предназначены.   -  person Thor84no    schedule 20.07.2012
comment
У вас есть исходный код профилированной библиотеки? Какой компилятор вы используете? Вы используете gprof или oprofile ?   -  person Basile Starynkevitch    schedule 20.07.2012
comment
Неважно, какой профилировщик использовать. Но важно не перекомпилировать приложение, а получить реальные значения времени выполнения функции. Да, у меня есть исходный код профилируемого приложения (библиотеки).   -  person Mephi_stofel    schedule 20.07.2012


Ответы (1)


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

Если вы используете последний GCC (по крайней мере, 4.6) в последней системе Linux, вы можете использовать профилировщики, такие как gprof (при условии, что вы можете перекомпилировать библиотеку) или лучше oprofile (который можно использовать без перекомпиляции), и вы можете настроить GCC под свои нужды.

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

Если вы планируете настроить компилятор GCC для целей оптимизации, рассмотрите возможность создания подключаемого модуля GCC или, что еще лучше, MELT. расширение для этой цели (MELT — это высокоуровневый предметно-ориентированный язык для расширения GCC). Вы также можете настроить GCC (с MELT) для своих конкретных целей профилирования.

person Basile Starynkevitch    schedule 20.07.2012
comment
Спасибо, но знать важно даже не как сменить компилятор. Важно, как измерить выполнение некоторых вещей (функций), например, до и после применения моей оптимизации, не изменяя наблюдаемое явление - это важно. Если я добавлю -gp (gprof) и профиль, я не могу быть уверен, что gprof не изменил время измерения - так как он меняет ассемблер и добавляет дополнительный код. Мне нужно измерить точно скомпилированный двоичный файл. Я предлагаю сделать это с помощью специальных аппаратных регистров - с их помощью эти функции должны применяться в инструменте профиля/измерения. - person Mephi_stofel; 20.07.2012