计算CPU周期?

时间:2016-03-01 11:33:12

标签: c parallel-processing

我遇到了计算执行代码所需的CPU周期的问题。代码在

之下
for (int i = 0; i < 64; i++){
add(2,3);// 1 cycle needed
sub(5,2);// 2 cycles needed
mul(3,4);// 4 cycles needed
}

如果我们在uni处理器上执行此代码。总周期是64x(1 + 2 + 4)= 448个周期吗? 它与使用64PE在SIMD上执行它有何不同?我们如何计算总执行时间?

2 个答案:

答案 0 :(得分:3)

在不了解具体架构的情况下,无法回答这个问题。

假设这是一个学术问题,我会回答:

"uni processor": 64 x (1 + 2 + 4 + loop_overhead) + loop_init = total_cycles
   loop_init: int i = 0 -> probably 1 cycle
   loop_overhead: i++; i < 64 -> probably 2 cycles

"SIMD": 1 + 2 + 4 = total_cycles

答案 1 :(得分:1)

循环次数因CPU而异。计算它们的方法也是如此。

&#34; CPU周期&#34;相当松散地定义为&#34;一个简单的处理器操作所需的时间&#34;,通常被认为是简单的处理器操作的代表&#34;。有时&#34; CPU周期&#34;被指定为时钟速率的倒数。这两个定义可能经常接近,但不一定相同。

即使你克服了什么&#34; CPU周期&#34;意味着,没有代码可以单独进行添加(或减法或乘法)。还会有诸如评估或获取操作数值之类的东西 - 可能会或可能不会计算,并且每个操作(或指令)的实际持续时间因CPU而异。

然后有像流水线这样的CPU功能(所以可以开始一个操作,而前一个操作可以部分完成),这使得CPU循环等措施对于相当多的现代CPU来说毫无意义。

相关问题