реклама на сайте
подробности

 
 
> Как измерять время выполнения алгоритма?, на целевой платформе и PC
beaRTS
сообщение Dec 18 2012, 07:35
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 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;
}


--------------------
"Об уме человека вернее судить по его вопросам, нежели по его ответам" (с)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
- - Serg76   Для софтового решения вообще не вижу проблем, есть...   Dec 18 2012, 09:09
|- - beaRTS   Цитата(Serg76 @ Dec 18 2012, 13:09) Для с...   Dec 18 2012, 09:15
|- - Serg76   Цитата(beaRTS @ Dec 18 2012, 12:15) Прост...   Dec 18 2012, 09:29
|- - beaRTS   Цитата(Serg76 @ Dec 18 2012, 13:29) Кроме...   Dec 18 2012, 09:33
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th June 2025 - 06:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01375 секунд с 7
ELECTRONIX ©2004-2016