Как узнать время выполнения какой-нибудь функции?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 07.02.18 13:23
Оценка:
Есть некоторая функция myfunc--например, void myfunc(); .
Как узнать время её выполнения?
Какие функции следует вызвать перед функцией myfunc и какую--после вызова функции myfunc, чтобы узнать текущее время на этих двух точках выполнения программы? Как получить разницу между этими двумя временами?
1613 г. = 2024 г.
Re: Как узнать время выполнения какой-нибудь функции?
От: RonWilson Россия  
Дата: 07.02.18 13:47
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Есть некоторая функция myfunc--например, void myfunc(); .

RF>Как узнать время её выполнения?
RF>Какие функции следует вызвать перед функцией myfunc и какую--после вызова функции myfunc, чтобы узнать текущее время на этих двух точках выполнения программы? Как получить разницу между этими двумя временами?

GetTickCount, или читать про performance counters для Windowsю
Re: Как узнать время выполнения какой-нибудь функции?
От: Evgeniy Skvortsov Россия  
Дата: 07.02.18 14:23
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Есть некоторая функция myfunc--например, void myfunc(); .

RF>Как узнать время её выполнения?

LARGE_INTEGER StartingTime, EndingTime, ElapsedMicroseconds;
LARGE_INTEGER Frequency;

QueryPerformanceFrequency(&Frequency); 
QueryPerformanceCounter(&StartingTime);

// Activity to be timed
void myfunc();

QueryPerformanceCounter(&EndingTime);
ElapsedMicroseconds.QuadPart = EndingTime.QuadPart - StartingTime.QuadPart;


//
// We now have the elapsed number of ticks, along with the
// number of ticks-per-second. We use these values
// to convert to the number of elapsed microseconds.
// To guard against loss-of-precision, we convert
// to microseconds *before* dividing by ticks-per-second.
//

ElapsedMicroseconds.QuadPart *= 1000000;
ElapsedMicroseconds.QuadPart /= Frequency.QuadPart;


Время выполнения myfunc() в микросекундах находится в ElapsedMicroseconds.QuadPart
Re[2]: Как узнать время выполнения какой-нибудь функции?
От: RussianFellow Россия http://russianfellow.livejournal.com
Дата: 07.02.18 14:35
Оценка:
А функция clock() не подходит?

unsigned int time1 = clock();
myfunc();
unsigned int time2 = clock();
double  diff = (double)(time2-time1)/(double)CLOCKS_PER_SEC;
1613 г. = 2024 г.
Re: Как узнать время выполнения какой-нибудь функции?
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.02.18 07:33
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>Есть некоторая функция myfunc--например, void myfunc(); .

RF>Как узнать время её выполнения?

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

RF>Какие функции следует вызвать перед функцией myfunc и какую--после вызова функции myfunc, чтобы узнать текущее время на этих двух точках выполнения программы? Как получить разницу между этими двумя временами?


Функции, которые возвращают время, сами выполняются какое-то время. Если ты собираешься померить время одиночного вызова, то погрешности из-за этого будут слишком велики. Я, естественно предполагаю, что твоя функция выполняется относительно быстро.

А так, под вендой используй QueryPerformanceCounter(). А чтобы узнать, с какой скоростью он тикает, сначала позови QueryPerformanceFrequency()
Re[3]: Как узнать время выполнения какой-нибудь функции?
От: Pzz Россия https://github.com/alexpevzner
Дата: 09.02.18 07:37
Оценка:
Здравствуйте, RussianFellow, Вы писали:

RF>А функция clock() не подходит?


А ты знаешь, чему равен CLOCKS_PER_SEC?

Точнее, чем 1 / CLOCKS_PER_SEC, ты функцией clock() ничего не намеришь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.