LINUX.ORG.RU

замер скорости выполнения кода


0

0

Привет всем программистам.

Как замерить и сравнить скорость выполнения двух кусков кода, выполняющих одну и ту же функцию, но написанных по разному?

Заранее благодарю за любую помощь.

anonymous

В догонку. Может ли это делать DDD?

anonymous
()

1)gcc
-pg для компилляции
gprof смотрим
2) pgi
-Mprof
pgprof
3) IFC/ICC
-profgen
ну там дальше как хотите VTune/gprof

$echo.


anonymous
()
Ответ на: комментарий от anonymous

Большое спасибо за информацию.
Я стал пользоваться gcc -pg и gprof. Но в моем случае тестируемые функции настолько малы, что любое время = 0.00. Возможно ли уменьшить масштаб измерения времени на более мелкий, что бы увидеть, какая из двух функция быстрее?

anonymous
()
Ответ на: комментарий от anonymous

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

Кстати, если функции очень короткие, то при профилировании всегда
возможна большая погрешность измерения.
У меня была библиотека коротких функций, погрешность с prof
была просто чудовищной, пришлось от prof отказаться.
Функция-то слегка изменяется, когда так пересобирается.
Обычно это не напрягает, но для коротких функций ...

io ★★
()
Ответ на: комментарий от anonymous

Присоединяюсь к io. секунды - погоды не сделают.. честное слово .. только на часах работы кода можно набрать статистику .. или же сделайте
печать времени руками .. Если код на фортране могу выслать совю процедуру ..
$echo.

anonymous
()
Ответ на: комментарий от anonymous

Мой код на С. Буду пытаться писать время руками.

anonymous
()
Ответ на: комментарий от anonymous

я запускаю
gcc -pg try.c
потом
gprof
а он пишет
gmon.out: No such file or directory

покажите, пожалуйста, на конкретном примере!!!

anonymous
()
Ответ на: комментарий от anonymous

>я запускаю 
gcc -pg try.c 
потом 
gprof 

А между этими действиями получившийся код запущать не пробовал ? ;)

>а он пишет 
gmon.out: No such file or directory 

Разумеется ;) профайлер оне же не телепат ;)


PS: Грубо время исполнения куска кода можно оценить следующим образом


#include <time.h>
clock_t  start, end, user_ticks; 
double   user_time;
star = clock();
// Далее идет код - который мы обмеряем
.....
// Здесь он заканчивается
end = clock();
user_ticks = end-start; // длительность исполнения кода в тиках
user_time =  user_ticks/CLOCKS_PER_SEC; // в секундах ..

То что получается это User Time (оно как раз отражает чистое время исполнения)



 

sS ★★★★★
()
Ответ на: комментарий от anonymous

бинарник try надо запустить, что бы он создал gmon.out. Ведь все данные в gmon.out - это данные о работе программы, и, следовательно, появляются они после работы программы.

anonymous
()

Можно считать регистр из проца содержащий количество тиков с момента включения.

Смотри msr.h или

#define rdtscll(val) __asm__ __volatile__("rdtsc" :"=A"(val)) // Type of val --- unsigned long long #endif

int main(){ unsigned long long t1, t2; rdtscll(t1); // тестируемый код rdtscll(t2); cout << t1-t2 << endl; return 0; }

Такой способ позволяет мерить время исполнения кода даже с оптимизацией (-O3).

anonymous
()
Ответ на: комментарий от anonymous

А time это что-то не то делает?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.