我想手动向量化一些 C 代码,以提高速度。为此(Cell 处理器上的 SPE 或 CBE)我想使用 SIMD 数学。代码本来是用了一些物理 vector 计算(速度,加速度等),所以在代码的某些部分有很多操作,比如;
ax=a*vx+b*rx;
ay=a*vy+b*ry;
az=d*vz+b*rz;
所以在这一点上我考虑将 v 和 r 转换为 vector (在 SPE 上,一个 vector 可以包含 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")
那么您认为这种方法值得还是您可以考虑更好的方法?
谢谢
最佳答案
如果您必须在每次 SIMD 计算时打包和解包组件,那么您根本不可能获得太多(如果有的话)加速。
您确实需要看看是否可以进行更深层次的更改,以便组件通常以 vector 形式保存并尽可能以 vector 形式传递。
关于c - 手动矢量化 C 代码的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3577679/