2008-09-09 4 views
1

Я делаю профилирование кода C в Microsoft VS 2005 на платформе Intel Core-2Duo. Я измеряю время (в секундах: миллисекунды), заданное моей функцией. Но у меня есть некоторые сомнения относительно точности этого измерения, так как операционная система не будет постоянно запускать мое приложение, но вместо этого планируйте другие приложения/службы между выполнением моего кода. (Хотя у меня нет основных приложений, работающих, пока я делаю профиль run, все еще окна будут иметь много собственного кода, который он будет запускать, выгружая мое приложение.). Из-за всего этого я считаю, что число профилирования (время, затраченное моим приложением для запуска) неточно.Накладные расходы операционной системы при профилировании?

Итак, мой вопрос в том, есть ли способ узнать накладные расходы операционной системы, накладные расходы на планирование обычной системы Windows (я запускаю Windows XP), например. если мои приложения заявили, что он работает в течение 60 миллисекунд, из этого 60 мс, сколько времени действительно было использовано моим приложением. и сколько времени он сидел без дела, из-за того, что его упреждала какая-то другая задача, запланированная ОС?

или

Atleast есть любое количество шар-парк, чтобы получить такие накладные расходы ОС, основываясь на своем опыте, вы наткнулись, делая что-то подобное?

ответ

0

Предложение

Try работать на нескольких системах центрального процессора.

0

1 - Положите несколько протоколирования отладки в коде (включая временные метки, конечно), и запустить его вне отладчика

2 - Run снова в отладчик

3 - Повторите несколько раз, для получения статистически достоверных данных.

4 - Сравнить.

Если есть значительная разница в среднем времени выполнения автономного и отладчика, тогда вы правы, чтобы быть подозрительными к ОС (или накладные расходы самих крючков отладчика ...). Если нет разницы, тогда не потейте.

Edit0: Очевидно, что сообщения отладки имеют некоторые накладные расходы. Вы можете оставить их в коде, даже если вы работаете с отладчиком. Таким образом, как автономный, так и отладчик работают с одним и тем же кодом.

Редактировать 1: Я неправильно понял вопрос. Я думал, что вы беспокоитесь, что, несмотря на отладку, ОС может прерывать ваше приложение чаще, чем в обычном режиме исполнения. Если вы хотите узнать, сколько времени потрачено на ваше приложение, просто сравните время, затраченное на «время процессора» в диспетчере задач.

Edit2: Сравните время, возвращенное GetProcessTimes, для вашего процесса до фактического времени выполнения. Разница заключается в времени, затрачиваемом процессором на кого-то другого.

1

@ Kogus: Даже если я запускаю внешний отладчик (автономное приложение из командной строки), он все равно может быть выгружен ОС и вызвать неправильное измерение времени, потребляемого моим приложением.

Не правда ли?

-AD

0

Лучший способ сделать это специальный профилирующий инструмент. Там много. Я не использовал один для C в течение нескольких лет, кто-то, надеюсь, сможет дать лучший совет. Поскольку вы используете Visual Studio 2005, это может быть хорошим началом: AQ, но я никогда не использовал его.

1

Я думаю, что у вас будут проблемы с детализацией. См подобные вопросы GetLocalTime() API time resolution и Is gettimeofday() guaranteed to be of microsecond resolution?

Кроме того, вы можете захотеть взглянуть на Windows Resource Kits Tools, которые включают в себя timeit.exe (похож на time на Unix/Linux), чтобы дать вам истекшее и время обработки.

Смежные вопросы