与 cortexa15 CPU(s) 相比,cortexa7 CPU(s) 执行循环花费的时间太长
cortexa7 CPU(s) took too long time to execute a loop compared to cortexa15 CPU(s)
我正在测试 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 倍以上。此外,我有 cortexa15@1.5GHz 和 cortexa7@1GHz。
所以我也觉得上面的结果是合理的。
下面我举一个cortexa15的case study来衡量执行时间:
计算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 cycle/instruction
- G1M/N 最大 1.5 GHz(时钟范围 ~1.3 GHz - 1.5 GHz)
我假设电路板会尽力而为 (1.5 GHz)
C = 1/(1.5.10^9) = 0.6667 ns
将 C 代码转换为 ARM arch 的汇编代码:
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;
}
}
I = (((9+9) * 125) + 17) * 1000 * 4.2 = 9521400
CPU执行时间最终为0.000962秒。大约 0.962 毫秒 以 CPU.
的最大努力执行循环
在最坏的情况下(在 1.3 GHz),CPU 循环时间约为 1.109 毫秒。
通过测试,我得到了相同的值。
--
我为 cortexa7@1GHz 做了更多案例。
CPU execution time = 9521400 * 1/1.9 * 1ns = 5.011 (ms)
我正在测试 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 倍以上。此外,我有 cortexa15@1.5GHz 和 cortexa7@1GHz。 所以我也觉得上面的结果是合理的。
下面我举一个cortexa15的case study来衡量执行时间:
计算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 cycle/instruction
- G1M/N 最大 1.5 GHz(时钟范围 ~1.3 GHz - 1.5 GHz) 我假设电路板会尽力而为 (1.5 GHz)
C = 1/(1.5.10^9) = 0.6667 ns
将 C 代码转换为 ARM arch 的汇编代码:
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; }
}
I = (((9+9) * 125) + 17) * 1000 * 4.2 = 9521400
CPU执行时间最终为0.000962秒。大约 0.962 毫秒 以 CPU.
的最大努力执行循环在最坏的情况下(在 1.3 GHz),CPU 循环时间约为 1.109 毫秒。
通过测试,我得到了相同的值。
--
我为 cortexa7@1GHz 做了更多案例。
CPU execution time = 9521400 * 1/1.9 * 1ns = 5.011 (ms)