首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何得到CPU周期计数?

如何得到CPU周期计数?
EN

Stack Overflow用户
提问于 2018-04-13 04:52:08
回答 2查看 0关注 0票数 0

我看到了这篇文章,其中包含C代码以获取最新的CPU周期计数:

C/C++Linux x86中基于CPU周期计数的分析_64

有什么方法可以在C++(Windows和Linux解决方案欢迎)中使用这段代码吗?虽然是用C编写的(C是C++的一个子集),但我不太确定这段代码是否能在C++项目中工作,如果不是,如何翻译它?

我使用的是x86-64

EDIT 2:

找到此功能,但无法获得VS 2010来识别汇编程序。我需要包括什么吗?

代码语言:txt
复制
static inline uint64_t get_cycles()
{
  uint64_t t;
  __asm volatile ("rdtsc" : "=A"(t));
  return t;
}

EDIT 3:

从上面的代码中我得到了错误:

error C2400: inline assembler syntax error in 'opcode'; found 'data type'

有人能帮忙吗?

EN

回答 2

Stack Overflow用户

发布于 2018-04-13 13:50:41

直接退出我的一个项目:

代码语言:txt
复制
#include <stdint.h>

//  Windows
#ifdef _WIN32

#include <intrin.h>
uint64_t rdtsc(){
    return __rdtsc();
}

//  Linux/GCC
#else

uint64_t rdtsc(){
    unsigned int lo,hi;
    __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
    return ((uint64_t)hi << 32) | lo;
}

#endif
票数 0
EN

Stack Overflow用户

发布于 2018-04-13 14:29:03

一般来说,如果你想在Windows下使用精确的计时器,你最好使用它QueryPerformanceCounter

如果你真的坚持使用rdtsc,我相信你必须在完全用汇编语言编写的单独模块中完成它(或者使用编译器本身),然后与你的C或C ++链接。我从来没有为64位模式编写代码,但在32位模式下,它看起来像这样:

代码语言:javascript
复制
   xor eax, eax
   cpuid
   xor eax, eax
   cpuid
   xor eax, eax
   cpuid
   rdtsc
   ; save eax, edx

   ; code you're going to time goes here

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

https://stackoverflow.com/questions/-100003269

复制
相关文章

相似问题

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