0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 6
|
|
1 | |
Время выполнения процедуры в С++ 3.110.01.2010, 23:40. Показов 4724. Ответов 12
Метки нет Все метки)
(
Столкнулся с проблемой. Нужно подсчитать за сколько тактов процессора(времени) выполняется код процедуры. Стандартные функции С++ выдают значение 0 , а из исходников на ассемблере из инета ничего не компилируется. Может кто знает в чем проблема?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
10.01.2010, 23:40 | |
Ответы с готовыми решениями:
12
Время выполнения процедуры Время выполнения процедуры Найти время выполнения процедуры
|
![]() 2343 / 1716 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
||||||
10.01.2010, 23:47 | 2 | |||||
![]() Решение
Чем пробовали мерить конкретно?
Смотрите в сторону функции Win32 API GetThreadTimes. Пример ниже.
3
|
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 6
|
||||||
10.01.2010, 23:59 [ТС] | 3 | |||||
измерял clock() из time.h и gettime(), результат то же
вот то что я делал
Добавлено через 54 секунды Компилятор вообще не знает типа int64((((((
0
|
![]() 2343 / 1716 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
11.01.2010, 00:06 | 4 |
Попробуй использовать вышеуказанный способ.
0
|
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
|
|
11.01.2010, 00:07 | 5 |
Для конвертирования в секунды значение, полученное clock'ом, делят на CLOCKS_PER_SEC. Но если операция происходит достаточно быстро, то результат все равно будет около нуля, поэтому можно сделать несколько экпериментов, затем высчитать среднее время.
0
|
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 6
|
|
11.01.2010, 00:12 [ТС] | 6 |
я ж говорю, что компилятор даже на int64 матюкается, не говоря что в дальнейшем.
да, процедура происходит быстро и значение равно 0 постоянно,а мне надо сделать сравнение методов сортировки
0
|
![]() 2343 / 1716 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
|
|
11.01.2010, 00:12 | 7 |
Использование clock и GetTickCount не дает реальных результатов времени выполнения алгоритма.
А насчет _int64 попробуй заменить на long long int.
0
|
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
|
|
11.01.2010, 00:15 | 8 |
Автор упомянул про C++ 3.1 (видимо старый досовский борланд), там еще не было long long int.
![]()
0
|
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 6
|
|
11.01.2010, 00:27 [ТС] | 9 |
этот код явно не для С++ 3.1. функция Int64ShllMod32 - неизвестна,в хелпе даже похожего нет и еще 15 подобных ошибок.(((
Добавлено через 46 секунд а long long int есть) Добавлено через 3 минуты может это значение через ассемблер вытянуть? Добавлено через 4 минуты function RDTSC: int64; assembler; asm db $0F,$31 // RDTSC end; нашел такую функцию на паскале, как перевести на С++, подскажите пожалуйста
0
|
MCSD: APP BUILDER
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,603
|
|
11.01.2010, 01:40 | 10 |
нашел такую функцию на паскале, как перевести на С++, подскажите пожалуйста
Borland C++ 3.1 не поддерживает 32-разрядные регистры, так что прямой перевод невозмжен только через отдельный asm-модуль
0
|
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
|
|
11.01.2010, 03:05 | 11 |
у меня сработал код который дал автор поста(выдавал значения отличные от 0), но это было днем, вечером же(точнее уже ночь) в другой программе этот же код выдает нули...
Работал в таков варианте Код
#include <time.h> // обьявление clock_t start, finish; long double duration; // Начало времени start = clock(); // Конец времени finish = clock(); //Переводим такты в секунды и печатаем duration = (long double)(finish - start)/CLOCKS_PER_SEC; printf("\n"); printf("Время выполнения: %lf", duration);
0
|
2535 / 831 / 10
Регистрация: 31.05.2009
Сообщений: 1,668
|
|
11.01.2010, 04:18 | 12 |
Только вот самому процессору как-то все равно какой компилятор делал этот код. Если заставить его выполнить эти 2 байта (0x0F,0x31), то он вернет количество тактов. А вот как подсунуть эти 2 байта... тут уж извините
![]()
0
|
577 / 571 / 65
Регистрация: 29.01.2009
Сообщений: 1,274
|
|
11.01.2010, 06:55 | 13 |
Угу, а еще есть long long long int, short short int и некоторые другие вариации, которые BC++ 3.1 спокойно хавает.
0
|
11.01.2010, 06:55 | |
Помогаю со студенческими работами здесь
13
Блокирование файла с общим доступом на время выполнения процедуры Не могу отобразить окно Splash во время выполнения процедуры MainForm.OnCreate Используя О- символику, найдите время выполнения (как функции от N) процедуры или функции в наихудшем случае Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |