i*o 发帖数: 149 | 1 关键是branching. 判断是否为0,与bit-wise运算都在一个cycle内完成.
如果学过compute architecture 的话, 应该知道branch 对 deep pipe-line 的影响.
原题中说了,决大多数情况下,没有0,也是说,for loop 不会提前结束.
所以答案是:
int result = a[0];
for(int i=1; i
result &= a[i];
if (result)
return true;
else
return false;
当然如果知道一些关于n的信息, 可以用 "loop unrolling" 去进一步优化. | J*******r 发帖数: 379 | 2 如果考虑pipeline,你说的这个可能是对的.
【在 i*o 的大作中提到】 : 关键是branching. 判断是否为0,与bit-wise运算都在一个cycle内完成. : 如果学过compute architecture 的话, 应该知道branch 对 deep pipe-line 的影响. : 原题中说了,决大多数情况下,没有0,也是说,for loop 不会提前结束. : 所以答案是: : int result = a[0]; : for(int i=1; i: result &= a[i]; : if (result) : return true; : else
|
|