【问题标题】:cortexa7 CPU(s) took too long time to execute a loop compared to cortexa15 CPU(s)与 cortexa15 CPU(s) 相比,cortexa7 CPU(s) 执行循环的时间太长
【发布时间】:2018-09-28 09:23:52
【问题描述】:

我正在测试 CPU 性能。我使用了支持 armv7 和 SMP 的 02 板:cortexa15@1.5GHz 双核和 cortexa7@1GHz 双核。

然后,执行如下简单循环并测量执行时间:

#define DEFAULT_CALC_LOOPS 1000
#define LOOPS_MULTIPLIER 4.2
...
loops = DEFAULT_CALC_LOOPS;
...
void *calc(int loops)
{
    int i, j;
    for (i = 0; i < loops * LOOPS_MULTIPLIER; i++) {
        for (j = 0; j < 125; j++) {
            // Sum of the numbers up to J
            volatile int temp = j * (j + 1) / 2;
            (void)temp;
        }
    }
    return NULL;
}

02板经过各种测试后的结果:

  • cortexa15:~1.2 毫秒

  • cortexa7:~5 毫秒

上面的结果有很大的不同。

是否存在影响结果的依赖性或限制?谁有这方面的经验可以分享我的想法?谢谢。

【问题讨论】:

  • 看起来很合理,cortexa15 的性能通常是 cortexa7 的 2-3 倍 + 你让它的时钟速度提高了 50%。
  • 初看,我也觉得有道理。我做了另一个练习 - 使用了另一个同时支持 a15 和 a7 的板 (iwavesystems.com/rz-g1h-q7-development-kit.html) --> 禁用了所有 a15 并且只保留了双核 a7 --> 我只得到了大约 1.2 毫秒的执行时间。
  • 如果您使用的是 GCC,您可以添加 -Ofast -mtune=native 优化选项并再次检查差异。

标签: cpu cortex-a


【解决方案1】:

对我来说,cortexa15 的性能是 cortexa7 的 2 到 3 倍以上。此外,我有 cortexa15@1.5GHz 和 cortexa7@1GHz。 所以我也觉得上面的结果是合理的。

下面,我将举一个 cortexa15 案例研究的例子来衡量执行时间:

  1. 计算CPU时间的公式:

    CPU 执行时间 = 指令数 x CPI x 时钟周期

I:指令数

CPI:每条指令的周期数 (IPC = 1/CPI)

C:时钟周期(1/CPU时钟)-秒

  1. 推荐社区:https://en.wikipedia.org/wiki/Instructions_per_second

看看 cortexa15 双核(与 iWave G1M/N 相同)。

Cortexa15 在 1.5 GHz 时执行 9,900 MIPS,平均 IPC = 6.6

CPI = 1/IPC = 1/6.6 = 0.1515 周期/指令

  1. G1M/N 最大频率为 1.5 GHz(时钟范围 ~1.3 GHz - 1.5 GHz) 我认为这些电路板会尽最大努力(1.5 GHz)

C = 1/(1.5.10^9) = 0.6667 ns

  1. 将 C 代码转换为 ARM 架构的汇编代码:

    for (i = 0; i

        for (j = 0; j < 125; j++) {
            // Sum of the numbers up to J
            volatile int temp = j * (j + 1) / 2;
            (void)temp;
        }
    

    }

参考:https://godbolt.org

I = (((9+9) * 125) + 17) * 1000 * 4.2 = 9521400

最终CPU执行时间为0.000962秒。大约 0.962 毫秒 以 CPU 的最大努力执行循环。

在最坏的情况下(1.3 GHz),循环的 CPU 时间约为 1.109 毫秒

通过测试,我得到了相同的值。

--

我为 cortexa7@1GHz 做了更多的案例。

CPU 执行时间 = 9521400 * 1/1.9 * 1ns = 5.011 (ms)

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2014-02-14
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多