对于我的项目我必须使用内联汇编指令(如rdtsc)来计算某些C/C++指令的执行时间。ARM中是否存在对rdtsc的等效指令?
下面的代码似乎对英特尔但不能在ARM处理器上运行:
{unsigned a, d;asm volatile("rdtsc" : "=a" (a), "=d" (d)); t0 = ((unsigned long)a) | (((unsigned long)d) << 32);}
//The C++ statement to measure its execution time
{unsigned a, d;asm volatile("rdtsc" : "=a" (a), "=d" (d)); t1 = ((unsigned long)a) | (((unsigned long)d) << 32);}
time = t1-t0;
我的问题是:
怎么写类似于上面的内联汇编代码(以计算指令的执行已用时间)以在ARM处理器上工作?
多核处理器上的'rdtsc'可能有问题。请参阅https://msdn.microsoft.com/en-us/library/ee417693(VS.85).aspx –
单指令将具有基于缓存等可变计时。更好地循环数千次,它/他们并使用perf_events()通用功能,使其可以在所有支持的CPU上工作。 – BitBank