1

我想手动对一些 C 代码进行矢量化,以加快速度。为此目的(单元处理器或 CBE 上的 SPE)我想使用 SIMD 数学。该代码最初使用了一些物理矢量计算(速度,加速度等),因此在代码的某些部分有很多操作,例如;

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

所以此时我考虑将 v's 和 r's 转换为向量(在 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")

那么您认为这种方法值得还是您可以考虑更好的方法?

谢谢

4

1 回答 1

1

如果您必须在每次 SIMD 计算中打包和解包组件,那么您根本不可能获得太多(如果有的话)加速。

您确实需要看看是否可以进行更深入的更改,以便组件通常保持矢量形式并尽可能作为矢量传递。

于 2010-08-27T02:42:22.823 回答