我正在测试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毫秒
以上结果之间存在很大差异。
对结果有任何依赖性或限制吗?谁有经验可以分享我的想法?谢谢。
答案 0 :(得分:0)
对我来说,cortexa15的性能是cortexa7的2倍至3倍。此外,我有cortexa15@1.5GHz和cortexa7 @ 1GHz。 所以我也认为上述结果是合理的。
下面,我将以cortexa15案例研究为例来衡量执行时间:
用于计算CPU时间的公式:
CPU执行时间=指令数x CPI x时钟周期
I:指令数
CPI:每条指令的周期(IPC = 1 / CPI)
C:时钟周期(1 / CPU时钟)-秒
看看cortexa15双核(与iWave G1M / N相同)。
Cortexa15在1.5 GHz下执行9,900 MIPS,平均IPC = 6.6
CPI = 1 / IPC = 1 / 6.6 = 0.1515个周期/指令
C = 1 /(1.5.10 ^ 9)= 0.6667 ns
将C代码转换为ARM arch的汇编代码:
for(i = 0; i <循环* 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;
}
}
I =((((9 + 9)* 125)+ 17)* 1000 * 4.2 = 9521400
CPU执行时间最终为0.000962秒。大约 0.962 ms 即可尽最大努力来执行循环。
在最坏的情况下(在1.3 GHz下),循环的CPU时间约为 1.109毫秒。
通过测试,我得到了相同的值。
-
我对cortexa7 @ 1GHz的处理更多。
CPU执行时间= 9521400 * 1 / 1.9 * 1ns = 5.011(ms)