如何测试Arm的频率

看了半天终于看懂了Dicky的代码。想通了其实很简单。把原理和伪代码记录一下备忘:)

最终的原理很简单:

执行指定的几句汇编(比较好用了指令周期个数),然后计算执行这段代码的时间。


然后。。。
。。。
。。。
完了-_-b


当然这其中有几个小的trick

1 开始执行汇编之前先要把优先级提到最高,汇编也不要太长,尽量防止CPU被别的进程打断
2 计算执行代码的时间的方法
    Windows下最精确好像也只有Gettickcount了。但是他也只是到ms级别,比起动辄上百Mhz的CPU来说,1ms可以执行上百条指令了,那还测个p啊。。。
     米关系,我可以测试1ms到底做多少次Gettickcount不就好了。。可惜看不到windows的Gettickcount用了多少个指令周期,否则直接就可以算出来了。所以只好用个折中的方案,代码如下
void GetTimeCycle(int* p)
{
    int n=1;
    int j;
    int i = GetTickCount();
    while ((j = GetTickCount())==i)
        ++n;
    p[0] = j;
    p[1] = n;
}
通过n的计数来得到1ms中执行Gettickcount的次数。这样,测试的精度就变成了Gettickcount所需要的时间了。


原理和难点就是这些,源码就免了,毕竟是dicky的代码:P
loop's blog
原文地址:https://www.cnblogs.com/goodloop/p/1357020.html