我遇到了计算执行代码所需的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上执行它有何不同?我们如何计算总执行时间?
答案 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来说毫无意义。