|
Как измерять время выполнения алгоритма?, на целевой платформе и PC |
|
|
|
Dec 18 2012, 07:35
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111

|
Алгоритм может отлаживаться как на компе, так и на целевой платформе. Вопрос: как в обоих случаях вы измеряете время выполнения ? подсчитываете количество тактов, затрачиваемых функцией/алгоритмом ? и однозначные ли результаты получаете? Покапавшись в интернете: Измерение интервалов времени в WindowsМаксимально точное измерение кода ХабрОптимизация длинной арифметики на C++Как можно подсчитать время работы алгоритма (части программы) __ простенько C/C++. Измерение времени работы кода с точностью до такта. измеряем время выполнения понял что для Большого Брата сложно измерить однозначно и точно количество тактов (время) выполнения. Так как каждый раз при новом запуске будем получать разное время выполнения из-за многозадачности Оси и многоядерности процессоров. У меня разница получалась примерно в 2-3 раза. максимум около 1000 тиков, минимум около 400 ( ниже программа для оценки извлечения корня ) Причем я не уверен, что 400 - это минимум времени исполнения алгоритма . Приведу простенькую прогу. Запускал в Визуал Студии. Код #include <iostream> #include <ctime> #include <intrin.h> // для __rdtsc()
#pragma intrinsic(__rdtsc)
int isqrt (unsigned x);
int main() {
double time; int result; //константа для задания верхнего предела для цикла for const int max = 1000000; const clock_t start = clock();
for(int i = 0; i < max; ++i) result = isqrt( 10); time = static_cast< double >( clock() - start ) / CLOCKS_PER_SEC;
std::cout<< "sqrt result: " << result << " avarage time is " << time << std::endl; std::cout << "CLOCKS_PER_SEC: " << CLOCKS_PER_SEC << std::endl; std::cout << " time for one isqrt(): " << time / max <<std::endl; unsigned __int64 startTick, stopTick, ticks;
startTick = __rdtsc(); result = isqrt( 10); stopTick = __rdtsc();
ticks = stopTick - startTick; std::cout << " time in Ticks for one isqrt(): " << ticks << std::endl;
std::cin.get(); return 0; }
int isqrt (unsigned x) { unsigned m, y, b; m = 0x40000000; y = 0; while (m != 0) { //16 раз b = y | m; y = y >> 1; if (x >= b) { x = x - b; y = y | m; } m = m >> 2; } return y; }
--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
|
|
|
|
|
 |
Ответов
|
Dec 18 2012, 09:15
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111

|
Цитата(Serg76 @ Dec 18 2012, 13:09)  Для софтового решения вообще не вижу проблем, есть куча способов, например, с помощью все тех же Win API. А я не вижу проблем в железячном решении=)... Да во всех этих способах вскрылось много подводных камней. Но без них, видимо, никуда. Поэтому да - только оценивать. Просто казалось, что можно с точностью до такта все замерить и спать спокойно.
--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
|
|
|
|
|
Dec 18 2012, 09:33
|
Местный
  
Группа: Участник
Сообщений: 211
Регистрация: 27-12-11
Из: Челябинск
Пользователь №: 69 111

|
Цитата(Serg76 @ Dec 18 2012, 13:29)  Кроме того, некоторые компиляторы могут оценивать временнЫе затраты самостоятельно. а это уже интересно. Не знал!!!
--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
|
|
|
|
Сообщений в этой теме
beaRTS Как измерять время выполнения алгоритма? Dec 18 2012, 07:35 eugen_pcad_ru Сам не меряю. ИМХО в такой постановке задачи можно... Dec 18 2012, 08:26 beaRTS Цитата(eugen_pcad_ru @ Dec 18 2012, 12:26... Dec 18 2012, 08:41 beaRTS Цитата(eugen_pcad_ru @ Dec 18 2012, 11:26... Dec 20 2012, 07:12 neiver Для ПК есть такие инструменты - профайлеры называю... Dec 18 2012, 10:01 beaRTS Цитата(neiver @ Dec 18 2012, 14:01) Для П... Dec 18 2012, 10:16 _Pasha Цитата(neiver @ Dec 18 2012, 13:01) В МК ... Dec 19 2012, 02:25 beaRTS Цитата(neiver @ Dec 18 2012, 13:01) Для П... Dec 19 2012, 05:11 SyncLair Основной способ -- использовать аппаратный счётчик... Dec 18 2012, 23:45 TSerg Общее правило таково - длительность измерения д.б.... Dec 19 2012, 05:49 beaRTS Цитата(TSerg @ Dec 19 2012, 08:49) Также,... Dec 19 2012, 06:24 beaRTS А кто знает сие чудо AMD CodeAnalyst для windows б... Dec 19 2012, 08:21 TSerg > прогон с минимальным временем исполнения и пр... Dec 20 2012, 07:32 beaRTS Цитата(TSerg @ Dec 20 2012, 10:32) Это не... Dec 20 2012, 07:39 TSerg Кроме того, при тестировании вычислительных процед... Dec 20 2012, 07:46 beaRTS Ндаа. =) как это все неоднозначно.
Спасибо! п... Dec 20 2012, 07:55 TSerg Пример трассировки на РС одной вычислительной функ... Dec 20 2012, 08:44 beaRTS Цитата(TSerg @ Dec 20 2012, 12:44) Пример... Dec 20 2012, 09:28
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|