Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Системный таймер 
:(
    Опции темы
df_3
Дата 12.5.2004, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 19.5.2003

Репутация: нет
Всего: 1



Мне надо замерить время сортировки массива подскажите плз какие функции в С позволяют решить эту проблему?


--------------------
ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ!
PM MAIL WWW MSN   Вверх
dargaard
Дата 12.5.2004, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 4
Всего: 25



#include <time.h>

int main () {
clock_t t1,t2;
Double T;

t1 = clock ();

my_proc();

t2 = clock();

T= ((double)(t2-t1))/CLOCKS_PER_SEC;

}

Po krainei mere tak pod linuxom.

Это сообщение отредактировал(а) dargaard - 12.5.2004, 01:31


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
chipset
Дата 12.5.2004, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4071
Регистрация: 11.1.2003
Где: Seattle, US

Репутация: 27
Всего: 165



перед сортировкой получаешь время функцией time(NULL)(из того же <time.h>)
после сортировки тоже получаешь время, разницу отнимаешьь.....
время в секундах
Добавлено @ 01:37
тьфу чего я сказал получаешь разницу имелось в виду biggrin.gif


--------------------
Цитата(Jimi Hendrix)
Well, I stand up next to a mountain
And I chop it down with the edge of my hand
PM MAIL WWW   Вверх
dargaard
Дата 12.5.2004, 01:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 4
Всего: 25



---------------------------------------------
time() returns the time since the Epoch (00:00:00 UTC, January 1, 1970), measured in seconds.

The clock() function returns an approximation of processor time used by the program.
------------------------------------------

clock () luchshe - tak kak time() budet zaviset' ot zagruzhenosti systemi na moment opredelenia time ()'a , a clock () dast realnoe vremia zatrachennoe processorom na rabotu.

izvinaius za translit.


--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 12.5.2004, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



GetTickCount() есть такая WinAPI-шная функция - выдаёт в миллисекундах. Если надо ещё точнее - тут была такая тема, воспользуйтесь поиском.


--------------------
user posted image
PM MAIL WWW   Вверх
46&two
Дата 12.5.2004, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 6.2.2004

Репутация: нет
Всего: нет



могу даж ссылку дать:
http://forum.vingrad.ru/index.php?showtopic=21750
PM MAIL   Вверх
bel_nikita
Дата 12.5.2004, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Не знаюsad.gif Может это нафиг кому надо, но все же:
Код
 class cCounterTimer
 {
 public:
   cCounterTimer()         {QueryPerformanceFrequency(&counterFreq);QueryPerformanceCounter(&counterStart);}
   ~cCounterTimer()        {}
   __int64 GetFrequency()  {return counterFreq.QuadPart;}
   void    Start()         {QueryPerformanceCounter(&counterStart);}
   __int64 TimeElapseds()  {QueryPerformanceCounter(&counterStop);return (counterStop.QuadPart - counterStart.QuadPart)/counterFreq.QuadPart;}
   __int64 TimeElapsedms() {QueryPerformanceCounter(&counterStop);return (counterStop.QuadPart - counterStart.QuadPart)*1000/counterFreq.QuadPart;}
   __int64 TimeElapsedmcs(){QueryPerformanceCounter(&counterStop);return (counterStop.QuadPart - counterStart.QuadPart)*100000/counterFreq.QuadPart;}
   //////////////////////////////////////////////////////////////////////////
   void    Stop()          {QueryPerformanceCounter(&counterStop);}
   __int64 Get_s()         {return (counterStop.QuadPart - counterStart.QuadPart)/counterFreq.QuadPart;}
   __int64 Get_ms()        {return (counterStop.QuadPart - counterStart.QuadPart)*1000/counterFreq.QuadPart;}
   __int64 Get_mcs()       {return (counterStop.QuadPart - counterStart.QuadPart)*1000000/counterFreq.QuadPart;}
 private:
   LARGE_INTEGER counterFreq;
   LARGE_INTEGER counterStart;
   LARGE_INTEGER counterStop;
 };



--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
df_3
Дата 12.5.2004, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 19.5.2003

Репутация: нет
Всего: 1



Код

double     Time;  
 clock_t  t1,t2;      
    t1=clock();
    Straight_Selection (array, num);
    t2 = clock();
    Time = (t2-t1)/CLOCKS_PER_SEC;
    printf("   %e",Ealpsed_Time );


пишет ноль в итоге даже на 10000 элементах! sad.gif


--------------------
ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ!
PM MAIL WWW MSN   Вверх
dargaard
Дата 12.5.2004, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 4
Всего: 25



а почему printf(.. Elapsed_Time) а не просто Time?
Код

#include <time.h>

int main() {
       clock_t t1,t2;
       double Time;
       int i,j,l;
       int k;

       t1=clock();
       k=0;
       for (j=0; j<10000; j++)
       for (i=0;i<10000; i++) {
               k+=10;
       }
       t2 = clock();
       Time = ((double)(t2-t1))/CLOCKS_PER_SEC;
       printf("%f\n",Time);
}



time ./a.out
0.460000
0.460u 0.000s 0:00.72 63.8% 0+0k 0+0io 93pf+0w


Обычно при таких проверках времени работы все дело еще прокручивают несколько раз -
например в твоем случае
Код

#define REPEAT 1000
double     Time;  
clock_t  t1,t2;      
int i;

   t1=clock();
    for (i=0; i<REPEAT; i++) {
          Straight_Selection (array, num);
   }
   t2 = clock();
   Time = ((double)(t2-t1))/CLOCKS_PER_SEC/REPEAT;
   printf("   %f",Time );


Заметь что обязательно также ручками кастить (t2-t1) в double - в противном случае результат будет 0.000000



--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
df_3
Дата 12.5.2004, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 19.5.2003

Репутация: нет
Всего: 1



Цитата(dargaard @ 12.5.2004, 18:29)
Заметь что обязательно также ручками кастить (t2-t1) в double - в противном случае результат будет 0.000000

а я вот так сделал и всё работает
Код
(t2-t1)/(double)CLOCKS_PER_SEC );


а вот так не работает
Код
((double)(t2-t1))/CLOCKS_PER_SEC;


А зачем несколько раз прокручивать цикл?

Это сообщение отредактировал(а) df_3 - 12.5.2004, 21:33


--------------------
ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ!
PM MAIL WWW MSN   Вверх
dargaard
Дата 12.5.2004, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 4
Всего: 25



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

А так к примеру вот результаты работы простой проги
(время затраченное )
REPEAT = 1
прогон 1 - 0.480000
прогон 2 - 0.440000
прогон 3 - 0.460000
прогон 4 - 0.490000
прогон 5 - 0.450000

Теперь прогонаем все тоже но с REPEAT 10
0.470000
Увеличивая REPEAT до 100 получим
прогон 1) 0.472800
прогон 2) 0.469900
прогон 3) 0.473000

Как видиш чем больше прогонов тем точность возрастает
На данном этапе можно почти смело сказать что прога в среднем работает за 0.47 секунды smile.gif
Конечно все это нафиг не надо если просто делаешь для себя и погрешность роли не играет, ну а когда надо убедить заказчика во времени работы функции то метод не так уж и плох по моемуsmile.gif





--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
AndyY
Дата 12.5.2004, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 316
Регистрация: 8.5.2004
Где: СПб

Репутация: 2
Всего: 4



у меня есть статейка на эту тему
http://awin-lib.narod.ru/articles/timetest.html


--------------------
PM MAIL WWW   Вверх
df_3
Дата 17.5.2004, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 256
Регистрация: 19.5.2003

Репутация: нет
Всего: 1



Спасибо всем! thumbs-up.gif


--------------------
ИЗ ВСЕХ ВОЗМОЖНОСТЕЙ НА ЗЕМЛЕ САМАЯ ЯРКАЯ - ЭТО ЖИЗНЬ!
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0628 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.