首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用rdtsc计算秒数

使用rdtsc计算秒数
EN

Stack Overflow用户
提问于 2016-04-16 11:13:35
回答 1查看 2.1K关注 0票数 2

下面是计算CPU时间的代码,但这是不正确的,因为当我使用gettimeofday时,它给出了正确的ms时间。我正在一个处理器上运行我的进程,它的时钟运行在800 my。我对rdtsc的了解如下:

  • 返回循环数
  • 使用这些#的周期,人们可以计算CPU时间给定的时钟速率(800兆赫) 无符号长a,b;无符号长cpuMask;cpuMask = 2;//绑定到cpu 1 if(!sched_setaffinity(0,sizeof(cpuMask),&cpuMask)) fprintf(stderr,“运行在一个核心上!\n”);int优先级(PRIO_PROCESS,0,20);结构timeval t1,t2;double elapsedTime;int i=0;// start timer gettimeofday(&t1,NULL);a= rdtsc();睡眠(20);//for(;i<1000000;i++);//fprintf(stderr,“%d”,i);gettimeofday(&t2,NULL);b= rdtsc();printf("a:%llu\n",a);printf("b:%llu\n",b);双val =(b-a)/800000;fprintf(stderr,“时间1至rdtsc,以毫秒计:%f\n减法:%llu\n”,val,b-a);elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0;// sec到ms elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0;// us到ms fprintf(stderr,“时间通过一天的时间:%f\n\n”,elapsedTime);
EN

回答 1

Stack Overflow用户

发布于 2016-04-16 16:18:36

理论上,不能保证rdtsc与CPU周期有很强的关系,例如一个周期可能等于3个rdtsc单元。实际上,在英特尔CPU上,假定存在max_frequency_of_cpu特性,rdtsc单元等于(1秒/ constant_tsc )。所以,第一个问题是:800 max是最大频率还是当前频率?

无论如何,您最可能希望使用的是clock_gettime(CLOCK_MONOTONIC_RAW, ...)。我的理解是,它被精确映射到时间戳计数器,并在操作系统启动时用系统时钟进行校准。

(是的,在我的i7-3635QM上,您的代码就像预期的那样工作)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36663379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档