Непонятное срабатывание rdtsc() в Linux ( Ubuntu 10.10 ) |
Здравствуйте, гость ( Вход | Регистрация )
Непонятное срабатывание rdtsc() в Linux ( Ubuntu 10.10 ) |
Белый пони |
17.3.2011, 16:51
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 9 Регистрация: 27.1.2011 Пользователь №: 2373 Спасибо сказали: 0 раз(а) Репутация: 0 |
Здравствуйте!
Столкнулся с проблемой, в ходе вычисления временного интервала с помощью rdtsc(). Вот программа, которая считывает значения, приходящие на последовательный порт и засекающая временные промежутки между их считванием: dumb3.cpp (процедура SetSIO - настраивает параметры com-порта, она громоздкая и мне кажется, к проблеме отношения не имеет. Но если что - могу и её запостить)Cигналы принимаются от девайса с известными интервалами - 10 раз в секунду пачками по 9 байт. перед первый байтом пачки - большая пауза, примерно 95 мс. Проблема в том, что эта самая программа, будучи запущения разными способами, выдаёт разные временные промежутки: При запуск в терминале графической оболочки Gnome ("./dump3") в терминал выводится: 1 //пришедший байт, временной интервал после предыдущего байта в микросекундах 2 96434 4 22 F4 8 0 8 30 7 13 7 4 7 EF 7 0 3935 2 96471 4 23 F4 8 0 8 30 7 13 7 4 7 EF 7 0 3971 2 96436 4 22 F4 8 0 8 30 8 13 7 4 7 EF 7 0 3968 ... При запуске в терминале без графической оболочки (Cntrl+Alt+F1 в Убунту) в терминал выводится: 2 2 96464 4 231 D0 240 0 239 30 227 13 227 4 227 CB 225 0 2398 2 96461 4 233 D2 238 0 238 30 225 13 225 4 224 CD 224 0 2406 ... При запуске в том же терминале без графической оболочки с направлением вывода не в консоль, а в файл ( "./dump3.cpp > yyy.txt"): 3 2 29861 4 49 54 5 0 4 30 4 13 4 4 4 50 4 0 3934 2 96454 4 5 54 4 0 4 30 4 13 4 4 4 50 4 0 3986 2 96463 4 5 54 4 0 4 30 4 13 4 4 4 50 4 0 3986 Откуда такие различия? И где значения ближе к правде? |
|
|
Iron Bug |
20.3.2011, 20:05
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
сколько процессоров на машине? на многопроцессорных (многоядерных) процах эту функцию использовать нельзя. используй clock_gettime с CLOCK_MONOTONIC.
|
|
|
Текстовая версия | Сейчас: 28.12.2024, 13:08 |