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

C++

Войти
Регистрация
Восстановить пароль
 
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
#1

Perfomance x86 1мкс - C++

30.08.2009, 11:25. Просмотров 852. Ответов 7
Метки нет (Все метки)

perfomance x86 <=1мкс

для определения производительности нужен счетчик на уровне 10**-6 секунды

вроде видел возможность вывода из ядра линукса такой информации

есть ли счетчики такой точности в ХП ?

дайте плиз ссылки на код c++ с использованием rdstc
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Humanoid
Почетный модератор
9794 / 3792 / 155
Регистрация: 12.06.2008
Сообщений: 11,399
30.08.2009, 11:43     Perfomance x86 1мкс #2
Смотри QueryPerformanceCounter и QueryPerformanceFrequency
В общем, с помощью QueryPerformanceFrequency узнаёшь, на кокой частоте работает счётчик... а с помощью QueryPerformanceCounter уже можно получить значение этого счётчика.
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 15:16  [ТС]     Perfomance x86 1мкс #3
Цитата Сообщение от Humanoid Посмотреть сообщение
Смотри QueryPerformanceCounter и QueryPerformanceFrequency
В общем, с помощью QueryPerformanceFrequency узнаёшь, на кокой частоте работает счётчик... а с помощью QueryPerformanceCounter уже можно получить значение этого счётчика.
уже узнавал - 1 мс, слишком мало

есть где примеры по rtsdc ?
Humanoid
Почетный модератор
9794 / 3792 / 155
Регистрация: 12.06.2008
Сообщений: 11,399
30.08.2009, 15:21     Perfomance x86 1мкс #4
Цитата Сообщение от _mayor
уже узнавал - 1 мс
Эта штука работает на частоте процессора. У меня (3 ГГц) получается 3*10^-10 секунды (333 пикосекунды).
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 16:02  [ТС]     Perfomance x86 1мкс #5
Цитата Сообщение от Humanoid Посмотреть сообщение
Эта штука работает на частоте процессора. У меня (3 ГГц) получается 3*10^-10 секунды (333 пикосекунды).
можно ссылку на код?
Humanoid
Почетный модератор
9794 / 3792 / 155
Регистрация: 12.06.2008
Сообщений: 11,399
30.08.2009, 17:12     Perfomance x86 1мкс #6
Я на Делфи пишу. Но в Си должно быть так же (только не знаю как там называется аналог Int64 )
Delphi
1
2
3
4
5
6
7
8
9
Var F, C1, C2 : Int64;
begin
  QueryPerformanceFrequency(F);
  QueryPerformanceCounter(C1);
  // Действия, время которых нужно измерить
  QueryPerformanceCounter(C2);
//  С2-С1  - это количество тактов счётчика... если это разделить на частоту F, то получится время в секундах
  Form1.Caption := FloatToStr((C2-C1)/F);
end;
Хотя, погрешности тут получаются всё равно большие... возможно, это связано с вызовом самой функции.
_mayor
1 / 1 / 0
Регистрация: 29.08.2009
Сообщений: 63
30.08.2009, 17:45  [ТС]     Perfomance x86 1мкс #7
скомуниздил через grep -r "rdtsc" /usr/src/linux* макрос
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
#define rdtsc(low,high) \
    __asm__ __volatile__("rdtsc" : "=a" (low) , "=d" (high) )
 
int main() {
    unsigned int asc,bsk;
    rdtsc(asc,bsk);
    __asm__ __volatile__("nop"  );
    cout<<asc<<"\t"<<bsk<<endl;
    rdtsc(asc,bsk);
    cout<<asc<<"\t"<<bsk<<endl;
}
вроде заработало, только не могу понять, что означает : "=a" (low) , "=d" (high)

может кто видел, какой нить туториал, в котором объясняется, что все эти кавычки равно букафки означают?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.08.2009, 19:20     Perfomance x86 1мкс
Еще ссылки по теме:

C++ Builder Возможно ли из приложения x86 попасть в директорию System32 на операционной системе (x64)
User32.dll на Win x64 - это x86-библиотека, x64 или. и то и другое одновременно? C++ WinAPI
Как определить, являются ли какие-то 4 байта (в x86) именно указателем? C++
C++ Различие recvfrom между x86 и ARM
Visual C++ Приложение не запускается на windows xp x86

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

Или воспользуйтесь поиском по форуму:
M128K145
Эксперт C++
8280 / 3499 / 143
Регистрация: 03.07.2009
Сообщений: 10,707
30.08.2009, 19:20     Perfomance x86 1мкс #8
Вот пример использования
__rdtsc()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <intrin.h>
int main()
{
    unsigned __int64 start, end;
    int k(0);
    start = __rdtsc();
    k++;
    end = __rdtsc();
    std::cout<<"k++ = "<<(end - start);
    system("pause");
    return 0;
}

ЗЫ. Работает в MS VS. В Dev-C++ и борландах нет
Yandex
Объявления
30.08.2009, 19:20     Perfomance x86 1мкс
Ответ Создать тему
Опции темы

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