The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Использование счетчика TSC"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Использование счетчика TSC"  
Сообщение от sanchez email(ok) on 13-Июл-06, 21:32 
Измеряю время с помощью TSC (Time Stamp Counter).
Помогите, пожалуйста, перевести такты в секунды.
Проблема с константами CLOCKS_PER_SEC и _SC_CLK_TCK.
Не пойму как мне их использовать, значения явно получаются не те.
Мой вариант выглядит не очень красиво:

#include <stdint.h>
#include <unistd.h>
#include <iostream>

using namespace std;

extern __inline__ uint64_t rdtsc() {
  uint64_t x;
  __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
  return x;
}

int main()
{
  cout<<"run"<<endl<<endl;
  uint32_t slp = 10;
  uint64_t t1, t2;
  t1 = rdtsc();
  sleep(slp);
  t2 = rdtsc();
  cout<<hex<< "t1 = " << t1 <<endl<<dec<< "sleep("<< slp <<")"<<hex<<endl
           << "t2 = " << t2 <<endl;
  cout<<dec<< "t2 - t1 = " << t2-t1 <<"  (clocks)"<<endl<<endl;
  
  cout<< "CLOCKS_PER_SEC = "<< CLOCKS_PER_SEC <<endl;
  cout<< "sysconf(_SC_CLK_TCK) = "<< sysconf(_SC_CLK_TCK) <<endl<<endl;
  
  cout<< (t2 - t1) / sysconf(_SC_CLK_TCK) <<endl;
  cout<< (t2 - t1) / CLOCKS_PER_SEC <<endl;
  cout<< (t2 - t1) / (CLOCKS_PER_SEC * sysconf(_SC_CLK_TCK)) <<endl<<endl;
  
  uint32_t clocks_per_sec = (t2 - t1) / slp;
  cout<< "clocks per second = "<< clocks_per_sec <<endl;
  cout<< "sleep time = " << (t2 - t1) / clocks_per_sec <<endl;
  return 0;
}


/*
=====================================================================

$ g++ tsc.cpp -o tsc
$ ./tsc

run

t1 = e777e903f8c8
sleep(10)
t2 = e77d83aa2f68
t2 - t1 = 24069420704  (clocks)

CLOCKS_PER_SEC = 1000000
sysconf(_SC_CLK_TCK) = 100

240694207
24069
240

clocks per second = 2406942070
sleep time = 10

=====================================

$ cat /proc/cpuinfo

processor    : 0
vendor_id    : GenuineIntel
cpu family    : 15
model        : 2
model name    : Intel(R) Pentium(R) 4 CPU 2.40GHz
stepping    : 7
cpu MHz    : 2405.487
cache size    : 512 KB
fdiv_bug    : no
hlt_bug    : no
f00f_bug    : no
coma_bug    : no
fpu        : yes
fpu_exception : yes
cpuid level    : 2
wp        : yes
flags        : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm
bogomips    : 4797.23

*/

P.S.: Прошу ногами не пинать, я начинающий программист в UNIX/Linux

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Использование счетчика TSC"  
Сообщение от sanchez email(??) on 18-Июл-06, 14:32 
2 sanchez:
Возможно, вопрос поставлен некорректно. Константы ни при чем. Необходимо лишь правильно определить частоту процессора. Тогда можно будет использовать TSC.
Совет: если за неделю не получено ни одного варианта ответа, форум не заслуживает внимания.

---
sanchez

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру