zoukankan      html  css  js  c++  java
  • 如何测试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
  • 相关阅读:
    scala之伴生对象的继承
    scala之伴生对象说明
    “Failed to install the following Android SDK packages as some licences have not been accepted” 错误
    PATH 环境变量重复问题解决
    Ubuntu 18.04 配置java环境
    JDBC的基本使用2
    DCL的基本语法(授权)
    ZJNU 1374
    ZJNU 2184
    ZJNU 1334
  • 原文地址:https://www.cnblogs.com/goodloop/p/1357020.html
Copyright © 2011-2022 走看看