Измеряю время с помощью 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();
uint32_t clocks_per_sec = (t2 - t1) / slp;
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;
cout<< "clocks per second = "<< clocks_per_sec <<endl;
slp = 20;
cout<< "sleep("<<slp<<")"<<endl;
t1 = rdtsc();
sleep(slp);
t2 = rdtsc();
cout<< "sleep time = " << (t2 - t1) / clocks_per_sec <<endl;
return 0;
}
/*
=====================================================================
$ g++ tsc.cpp -o tsc
$ ./tsc
run
t1 = 1638b369bf294
sleep(10)
t2 = 16390d06932f0
t2 - t1 = 24055201884 (clocks)
CLOCKS_PER_SEC = 1000000
sysconf(_SC_CLK_TCK) = 100
240552018
24055
240
clocks per second = 2405520188
sleep(20)
sleep time = 20
=====================================
$ 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
Похожие темы
- Форум Не считывает файл до конца? (2019)
- Форум OpenMP + ARM Linux нет увеличения скорости for loop (2020)
- Форум Немного не правильно (2019)
- Форум Как скормить компилятору такую шляпу? (2021)
- Форум [cpufreq]Непонятки (2010)
- Форум медленная работа pbzip в виртуалке (2011)
- Форум Низкая производительность вычислений в openMP (2012)
- Форум [C++/OpenMP] Распараллеливание поиска значения в векторе. (2011)
- Форум Запущен 1 процесс, на многоядерном процессоре. (2016)
- Форум Посоветуйте CFLAGS (2011)