Форум программистов, компьютерный форум CyberForum.ru

Время выполнения процедуры в С++ 3.1 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.65
Zhenyaxxx
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 6
10.01.2010, 23:40     Время выполнения процедуры в С++ 3.1 #1
Столкнулся с проблемой. Нужно подсчитать за сколько тактов процессора(времени) выполняется код процедуры. Стандартные функции С++ выдают значение 0 , а из исходников на ассемблере из инета ничего не компилируется. Может кто знает в чем проблема?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2010, 23:40     Время выполнения процедуры в С++ 3.1
Посмотрите здесь:

C++ Время выполнения функции
C++ Время выполнения
C++ Время выполнения(сложность)
C++ Время выполнения алгоритма
C++ Измеряем время выполнения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
10.01.2010, 23:47     Время выполнения процедуры в С++ 3.1 #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Чем пробовали мерить конкретно?
Смотрите в сторону функции Win32 API GetThreadTimes.
Пример ниже.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
_int64 FileTimeToQuadWord(PFILETIME pft)
{
    return(Int64ShllMod32(pft->dwHighDateTime, 32) | pft->dwLowDateTime);
}
 
void PerformLongOperation ()
{
    FILETIME ftKernelTimeStart, ftKernelTimeEnd; 
    FILETIME ftUserTimeStart, ftUserTimeEnd; 
    FILETIME ftDummy;
 
    _int64 qwKernelTimeElapsed, qwUserTimeElapsed, qwTotalTimeElapsed;
 
    // получаем начальные показатели времени 
    GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy,
                   &ftKernelTimeStart, &ftUserTimeStart);
 
    // здесь выполняем сложный алгоритм 
 
    // получаем конечные показатели времени
    GetThreadTimes(GetCurrentThread(), &ftDummy, &ftDummy,
                   &ftKernelTimeEnd, &ftUserTimeEnd);
 
    // получаем значении времени, затраченного на выполнение ядра и User, 
    // преобразуя начальные и конечные показатели времени из FILETIME 
    // в учетверенные слова, а затем вычитая начальные показатели из конечных 
    qwKernelTimeElapsed = FileTimeToQuadWord(&ftKernelTimeEnd) -
                          FileTimeToQuadWord(&ftKernelTimeStart);
 
    qwUserTimeElapsed = FileTimeToQuadWord(&ftUserTimeEnd) -
                        FileTimeToQuadWord(&ftUserTimeStart);
 
    // получаем общее время, складывая время выполнения ядра и User 
    qwTotalTimeElapsed = qwKernelTimeElapsed + qwUserTimeElapsed;
 
    // общее время хранится в qwTotalTimeElapsed
 
}
Zhenyaxxx
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 6
10.01.2010, 23:59  [ТС]     Время выполнения процедуры в С++ 3.1 #3
измерял clock() из time.h и gettime(), результат то же


вот то что я делал

C++
1
2
3
4
5
6
7
8
9
10
clock_t start, finish;
    double  duration;
        
   start = clock();
 
    //сортировка выбором
   finish = clock();
   duration = (double)(finish - start);
   cout<<duration;
   getch();
может тут что то не так?)

Добавлено через 54 секунды
Компилятор вообще не знает типа int64((((((
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.01.2010, 00:06     Время выполнения процедуры в С++ 3.1 #4
Попробуй использовать вышеуказанный способ.
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.01.2010, 00:07     Время выполнения процедуры в С++ 3.1 #5
Для конвертирования в секунды значение, полученное clock'ом, делят на CLOCKS_PER_SEC. Но если операция происходит достаточно быстро, то результат все равно будет около нуля, поэтому можно сделать несколько экпериментов, затем высчитать среднее время.
Zhenyaxxx
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 6
11.01.2010, 00:12  [ТС]     Время выполнения процедуры в С++ 3.1 #6
я ж говорю, что компилятор даже на int64 матюкается, не говоря что в дальнейшем.

да, процедура происходит быстро и значение равно 0 постоянно,а мне надо сделать сравнение методов сортировки
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2294 / 1664 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
11.01.2010, 00:12     Время выполнения процедуры в С++ 3.1 #7
Использование clock и GetTickCount не дает реальных результатов времени выполнения алгоритма.
А насчет _int64 попробуй заменить на long long int.
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.01.2010, 00:15     Время выполнения процедуры в С++ 3.1 #8
Автор упомянул про C++ 3.1 (видимо старый досовский борланд), там еще не было long long int.
Zhenyaxxx
0 / 0 / 0
Регистрация: 10.01.2010
Сообщений: 6
11.01.2010, 00:27  [ТС]     Время выполнения процедуры в С++ 3.1 #9
этот код явно не для С++ 3.1. функция Int64ShllMod32 - неизвестна,в хелпе даже похожего нет и еще 15 подобных ошибок.(((

Добавлено через 46 секунд
а long long int есть)

Добавлено через 3 минуты
может это значение через ассемблер вытянуть?

Добавлено через 4 минуты
function RDTSC: int64; assembler;
asm
db $0F,$31 // RDTSC
end;

нашел такую функцию на паскале, как перевести на С++, подскажите пожалуйста
Rififi
 Аватар для Rififi
2330 / 1045 / 43
Регистрация: 03.05.2009
Сообщений: 2,656
11.01.2010, 01:40     Время выполнения процедуры в С++ 3.1 #10
нашел такую функцию на паскале, как перевести на С++, подскажите пожалуйста

Borland C++ 3.1 не поддерживает 32-разрядные регистры, так что прямой перевод невозмжен
только через отдельный asm-модуль
FC-NEO
0 / 0 / 0
Регистрация: 03.01.2010
Сообщений: 14
11.01.2010, 03:05     Время выполнения процедуры в С++ 3.1 #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);
Goodwin98
 Аватар для Goodwin98
2436 / 807 / 9
Регистрация: 31.05.2009
Сообщений: 1,668
11.01.2010, 04:18     Время выполнения процедуры в С++ 3.1 #12
Цитата Сообщение от Rififi Посмотреть сообщение
Borland C++ 3.1 не поддерживает 32-разрядные регистры, так что прямой перевод невозмжен
только через отдельный asm-модуль
Только вот самому процессору как-то все равно какой компилятор делал этот код. Если заставить его выполнить эти 2 байта (0x0F,0x31), то он вернет количество тактов. А вот как подсунуть эти 2 байта... тут уж извините
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2010, 06:55     Время выполнения процедуры в С++ 3.1
Еще ссылки по теме:

Время выполнения процеса C++
C++ Время выполнения
C++ Ошибка во время выполнения

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
11.01.2010, 06:55     Время выполнения процедуры в С++ 3.1 #13
Цитата Сообщение от Zhenyaxxx Посмотреть сообщение
а long long int есть)
Угу, а еще есть long long long int, short short int и некоторые другие вариации, которые BC++ 3.1 спокойно хавает.
Yandex
Объявления
11.01.2010, 06:55     Время выполнения процедуры в С++ 3.1
Ответ Создать тему
Опции темы

Текущее время: 16:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru