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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Просчет времени работы функции, Люди добрые, помогите! 
:(
    Опции темы
steks
Дата 19.5.2010, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В общем, у меня есть задание написать программу которая строит графики зависимости методов сортировки от времени. Методы сортировки: Шелла и метод рекурсии. Все нормально сделал, сортирует и тем и другим методом правильно. НО! Время сортировки и в первом, и во втором случае выводит равное 0! 
Время засекал через clock_t в библиотеке time.h. Есть предположение, что функции сортировки работают настолько быстро, что время нельзя посчитать, хотя в случае увеличении кол-ва эл-тов до 8000,например, тот же результат!
Помогите кто знает! Очень нужно и очень срочно!
PM MAIL   Вверх
rudvil
Дата 19.5.2010, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Код

#include <ctime>
#include <iostream>

double execTime (std::clock_t beg, std::clock_t end) {
    double result = (beg - end) / (CLOCKS_PER_SEC / 1000);
    return result;
}

int main () {
  std::clock_t begin = std::clock();
  // тут код - время(в милисекундах) исполнения которого нужно узнать
  std::clock_t end = std::clock();
  std::cout << execTime(end, begin) << "\n";
  return 0;
}


Это сообщение отредактировал(а) rudvil - 19.5.2010, 21:37
--------------------
xor
PM MAIL Skype   Вверх
steks
Дата 19.5.2010, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я делал почти так же:
Код

clock_t begin, end;
begin = clock();
// алгоритм сортировки
end = clock();
return (end-begin)/CLK_TCK;


Но возвращает время равное нулю((
PM MAIL   Вверх
rudvil
Дата 19.5.2010, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(steks @ 19.5.2010,  20:31)
Я делал почти так же:
Код

clock_t begin, end;
begin = clock();
// алгоритм сортировки
end = clock();
return (end-begin)/CLK_TCK;


Но возвращает время равное нулю((

У меня работает корректно, + у меня тип double, что не маловажно.
Скопируй мой код без изменений, должно работать правильно.
--------------------
xor
PM MAIL Skype   Вверх
GoldFinch
Дата 19.5.2010, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



точнее использовать не время, а количество тактов процессора
если компилятор - msvc, то
Код

#include <intrin.h>

__int64 start = __rdtsc();
............
__int64 end = __rdtsc();

PM MAIL ICQ   Вверх
steks
Дата 19.5.2010, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Сделал так же. Тоже выводит 0. Проблема в том, что функция расчета времени маленькие значения видимо округляет в ноль. Может есть другие функции? Что-нибудь наподобие таймера

Добавлено через 4 минуты и 3 секунды
Цитата(GoldFinch @ 19.5.2010,  21:41)
точнее использовать не время, а количество тактов процессора
если компилятор - msvc, то
Код

#include <intrin.h>

__int64 start = __rdtsc();
............
__int64 end = __rdtsc();

А где взять эту библиотеку? у меня borland c++ v1.3
PM MAIL   Вверх
ИванМ
Дата 19.5.2010, 22:01 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

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



timeGetTime
GetTickCount
QueryPerformanceCounter
PM MAIL   Вверх
djamshud
Дата 19.5.2010, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

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





--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
GoldFinch
Дата 19.5.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

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



steks, можете написать сами, как-то так
Код

__declspec(naked)
__int64 __rdtsc()
{
    __asm rdtsc
    __asm ret
}


но проще конечно те что написал ИванМ.
PM MAIL ICQ   Вверх
xvr
Дата 20.5.2010, 12:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Вызывайте вашу функцию сортировки не 1 раз, а скажем 1000000 раз. Только не забудьте восстанавливать входные массивы обратно перед каждым вызовом сортировки

PM MAIL   Вверх
azesmcar
Дата 20.5.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Лет 7 назад был у меня какой-то плагин для VS, выдавал подробный отчет по работе каждой функции в миллисекундах, ставился на Visual Studio 6, вот название никак не вспомню smile 
PM   Вверх
Alca
Дата 5.7.2010, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Цитата

название никак не вспомню

Еще не вспомнил? smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
xvr
Дата 5.7.2010, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Видимо это был VTune. Вот только плагином бы я его не назвал  smile 
PM MAIL   Вверх
azesmcar
Дата 5.7.2010, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


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

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



Цитата(Alca @  5.7.2010,  11:41 Найти цитируемый пост)
Еще не вспомнил? smile  

нет.

Цитата(xvr @  5.7.2010,  12:14 Найти цитируемый пост)
Видимо это был VTune. Вот только плагином бы я его не назвал  smile  

нет, не он...был именно Plug-In.
PM   Вверх
HellStranger
Дата 30.7.2010, 12:19 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну правильно тебе посоветовали считать тактами... Можно, код на асме наваять, пример тебе уже дали. QueryPerfomanceCounter также, начиная по-моему с XP, возвращает число тактов процессора с момента последней перезагрузки. 

Это сообщение отредактировал(а) HellStranger - 30.7.2010, 12:20
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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