手动矢量化C代码的最佳方法

时间:2010-08-26 17:21:37

标签: c cell vectorization spu

我想手动渲染一些C代码,以便加速。为此目的(Cell处理器或CBE上的SPE)我想使用SIMD数学。代码最初使用了一些物理向量计算(速度,加速度等),所以在代码的某些部分有很多操作,如;

ax=a*vx+b*rx;
ay=a*vy+b*ry;
az=d*vz+b*rz;

所以在这一点上我想到将v和r转换为向量(在SPE上,一个向量可以包含4个单个浮点值),所以在伪代码中它应该是类似的

vector V,R,A;
V.x=vx;
R.x=r.x; (and same for the others "y,z")
A=spu_sum(spu_prod(a,V),spu_prod(b,R));
ax=A.x; (and same for the others "y,z")

所以你认为这种方法值得,或者你能想到更好的方法吗?

由于

1 个答案:

答案 0 :(得分:1)

如果你必须在每次SIMD计算时打包和拆包组件,你根本不可能获得更多(如果有的话)加速。

您确实需要了解是否可以进行更深层次的更改,以便组件通常以矢量形式保存,并尽可能地作为矢量传递。