我看到了这篇文章,其中包含C代码以获取最新的CPU周期计数:
C/C++Linux x86中基于CPU周期计数的分析_64
有什么方法可以在C++(Windows和Linux解决方案欢迎)中使用这段代码吗?虽然是用C编写的(C是C++的一个子集),但我不太确定这段代码是否能在C++项目中工作,如果不是,如何翻译它?
我使用的是x86-64
EDIT 2:
找到此功能,但无法获得VS 2010来识别汇编程序。我需要包括什么吗?
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'
有人能帮忙吗?
发布于 2018-04-13 13:50:41
直接退出我的一个项目:
#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
发布于 2018-04-13 14:29:03
一般来说,如果你想在Windows下使用精确的计时器,你最好使用它QueryPerformanceCounter
。
如果你真的坚持使用rdtsc
,我相信你必须在完全用汇编语言编写的单独模块中完成它(或者使用编译器本身),然后与你的C或C ++链接。我从来没有为64位模式编写代码,但在32位模式下,它看起来像这样:
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
https://stackoverflow.com/questions/-100003269
复制相似问题