кто как засекает время(C++)
От: NetSlow  
Дата: 12.11.05 20:50
Оценка:
Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.
Re: кто как засекает время(C++)
От: _Winnie Россия C++.freerun
Дата: 12.11.05 21:23
Оценка:
Здравствуйте, NetSlow, Вы писали:

NS>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.


Если операция толстая, и ее можно выполнять для измерения несколько секунд (несколько раз) — то стандартный clock, или GetTickCount.
Если надо поймать что-то совсем тонкое — ассемблерная команда rdtsc.
Правильно работающая программа — просто частный случай Undefined Behavior
Re: кто как засекает время(C++)
От: Аноним  
Дата: 12.11.05 21:26
Оценка:
Здравствуйте, NetSlow, Вы писали:

NS>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.




inline void GenereydTime()
{
    SYSTEMTIME time;
    GetLocalTime(&time);
    Time.str("");
      TCHAR buff[100];
      GetTimeFormat(LOCALE_SYSTEM_DEFAULT,TIME_FORCE24HOURFORMAT,&time,"hh':'mm':'ss",buff,100);
    Time << " " << buff << ":" << time.wMilliseconds;
}

...

std::cout << Time.str().c_str();


Я так смотрю =)) может кто-то скажет что это не хорошо, но все видно
Re[2]: кто как засекает время(C++)
От: Сергей Мухин Россия  
Дата: 13.11.05 08:33
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>Здравствуйте, NetSlow, Вы писали:


NS>>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.


_W>Если операция толстая, и ее можно выполнять для измерения несколько секунд (несколько раз) — то стандартный clock, или GetTickCount.

_W>Если надо поймать что-то совсем тонкое — ассемблерная команда rdtsc.

GetTime уж очень не точна. Лучше
QueryPerformanceCounter/QueryPerformanceFrequency
---
С уважением,
Сергей Мухин
Re[3]: кто как засекает время(C++)
От: CreatorCray  
Дата: 13.11.05 11:09
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>GetTime уж очень не точна. Лучше

СМ>QueryPerformanceCounter/QueryPerformanceFrequency
Которая на многопроцессорных и HT системах внутри себя все равно пользуется rdtsc
а на синглпроц — пользуется счетчиком, который имеет довольно низкую частоту (у меня например QueryPerformanceFrequency = 3579545 при частоте проца в 2Гц)
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: кто как засекает время(C++)
От: Сергей Мухин Россия  
Дата: 13.11.05 13:50
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Сергей Мухин, Вы писали:


СМ>>GetTime уж очень не точна. Лучше

СМ>>QueryPerformanceCounter/QueryPerformanceFrequency
CC>Которая на многопроцессорных и HT системах внутри себя все равно пользуется rdtsc

мб, но это на С а то на ассемблере

CC>а на синглпроц — пользуется счетчиком, который имеет довольно низкую частоту (у меня например QueryPerformanceFrequency = 3579545 при частоте проца в 2Гц)


это не всегда так. зависит, например от HT
---
С уважением,
Сергей Мухин
Re[5]: кто как засекает время(C++)
От: CreatorCray  
Дата: 13.11.05 15:18
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>>>GetTime уж очень не точна. Лучше

СМ>>>QueryPerformanceCounter/QueryPerformanceFrequency
CC>>Которая на многопроцессорных и HT системах внутри себя все равно пользуется rdtsc
СМ>мб, но это на С а то на ассемблере

Пфф. На С надо? Элементарно:
#pragma warning (push, disable: 1011) // это чтоб компилер ворнинг не кидал на то, что функция не возвращает значение явно
__forceinline __int64 __rdtsc ()
{
    asm rdtsc;
}
#pragma warning (pop)


CC>>а на синглпроц — пользуется счетчиком, который имеет довольно низкую частоту (у меня например QueryPerformanceFrequency = 3579545 при частоте проца в 2Гц)

СМ>это не всегда так. зависит, например от HT
При наличии поддежки НТ QueryPerformanceCounter ВСЕГДА будет использовать rdtsc а не один из счетчиков rdpmc.
Касательно того, что именно считают два 40битных Perfomance counter-а которые можно получить через rdpmc, я ничего особо внятного не нашел в свое время. Разве что только фразу: processor specific counters.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: кто как засекает время(C++)
От: Awaken Украина  
Дата: 13.11.05 17:11
Оценка:
NS>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в >частности арифметической.

QueryPerfomanceCounter
Re: кто как засекает время(C++)
От: vppb  
Дата: 13.11.05 17:49
Оценка:
Здравствуйте, NetSlow, Вы писали:

NS>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.

Если понимать под операцией время, за которое её выполняет процессор, то где-то должны быть доки за сколько тактов выполняется та или иная команда ASM'a. Имея частоту прцессора получим время. Справедливо для архитектуры x86. В RISC архитектуре, насколько я понял, все команды выполняются за один такт процессора.
Дело тёмное, мог наврать
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
"В утренней тишине слышались только посвистывание сусликов и скрежетание нагревшихся ножовок." (с) Ильф и Петров
Re: кто как засекает время(C++)
От: MShura  
Дата: 13.11.05 19:13
Оценка:
NS>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.

Структура xtime.
Поля tv_sec и tv_nsec.
Re[2]: кто как засекает время(C++)
От: Сергей Мухин Россия  
Дата: 13.11.05 20:30
Оценка: :)
Здравствуйте, vppb, Вы писали:

V>Дело тёмное, мог наврать


а тож!
---
С уважением,
Сергей Мухин
Re[6]: кто как засекает время(C++)
От: Сергей Мухин Россия  
Дата: 13.11.05 20:35
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Сергей Мухин, Вы писали:


СМ>>>>GetTime уж очень не точна. Лучше

СМ>>>>QueryPerformanceCounter/QueryPerformanceFrequency
CC>>>Которая на многопроцессорных и HT системах внутри себя все равно пользуется rdtsc
СМ>>мб, но это на С а то на ассемблере

CC>Пфф. На С надо? Элементарно:

CC>
CC>#pragma warning (push, disable: 1011) // это чтоб компилер ворнинг не кидал на то, что функция не возвращает значение явно
CC>__forceinline __int64 __rdtsc ()
CC>{
CC>    asm rdtsc;
CC>}
CC>#pragma warning (pop)
CC>


вы товрищ немного наивны. кто сказал, что мы на интеле работаем?

да и на MS никто не говорил

вроде форум называется С/C++. а в стандарте придичных средств и нет.
но лучше пользоваться системно зависимыми QueryPerformanceCounter, чем процессозависимыми rdtsc. тем более я не уверен, что rdrcs есть на 64 и amd
---
С уважением,
Сергей Мухин
Re[3]: кто как засекает время(C++)
От: vppb  
Дата: 13.11.05 20:42
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>Здравствуйте, vppb, Вы писали:


V>>Дело тёмное, мог наврать

СМ>а тож!
Ну и я ж про это и говорю: самый точный подсчет. Там наносекунда, тут половинка. Глядишь, из несколких вариантов кода с какой-нибудь периферийной микросхомой и договоришься...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
"В утренней тишине слышались только посвистывание сусликов и скрежетание нагревшихся ножовок." (с) Ильф и Петров
Re: кто как засекает время(C++)
От: Kemm  
Дата: 13.11.05 20:48
Оценка:
Здравствуйте, NetSlow, Вы писали:

NS>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.


gettimeofday()
Re[7]: кто как засекает время(C++)
От: CreatorCray  
Дата: 13.11.05 21:00
Оценка:
Здравствуйте, Сергей Мухин, Вы писали:

СМ>вы товрищ немного наивны. кто сказал, что мы на интеле работаем?

СМ>да и на MS никто не говорил
QueryPerformanceCounter подразумевает Win32 что в свою очередь в 90% случаев подразумевает x86 архитектуру.
Впрочем, если не wintel тогда откланиваюсь.

СМ>тем более я не уверен, что rdrcs есть на 64 и amd

rdtsc и rdpmc — есть.
rdrcs — не знаю такой.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: кто как засекает время(C++)
От: BOPOH_N Россия  
Дата: 14.11.05 10:23
Оценка:
Здравствуйте, NetSlow, Вы писали:

NS>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.


Засекать время програмно — абсолютно бесполезное занятие. Используйте профайлер и получите объективный результат.
(см. VTune, DevPartner и др.)
В искустве летать есть один маленький секрет. Секрет этот в том,чтобы бросить себя изо всех сил на землю — и не попасть. Выберете погожий денек и попробуйте сами.
Re[2]: кто как засекает время(C++)
От: MShura  
Дата: 14.11.05 11:14
Оценка: +1
NS>>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.

BOP>Засекать время програмно — абсолютно бесполезное занятие. Используйте профайлер и получите объективный результат.

BOP>(см. VTune, DevPartner и др.)

Не для всех платформ существуют профайлеры.
Мне лично приходилось писать самописный профайлер для изучения своего кода, работающего в ядре Linux 2.4 на процессоре arm.
Re: кто как засекает время(C++)
От: sch  
Дата: 14.11.05 12:31
Оценка:
Здравствуйте, NetSlow, Вы писали:

NS>Интересно было бы знать кто как засекает время, когда надо узнать время выполнения какой-то операции, в частности арифметической.


clock()

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccore98/html/_crt_clock.asp
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.