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

标签 c cell vectorization spu

我想手动向量化一些 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/

相关文章:

c - 使用指针和字符串——一个字符如何变成一个整数?

arrays - 对数组元素的地址进行减法时出现意外结果

swift - tableView 单元格中的披露指示器未显示

ios - 如何在 swift 4 中正确地在 tableview Controller 单元格内的 tableview 中重新加载数据?

jqGrid 动态更改特定行的编辑类型

python - 描述时间序列 Pandas 中的差距

c - C 中基于八进制的数字格式

c - 在 C 中的 for 循环和 if 语句中使用 Malloc 数组 - 导致分段

numpy - 使用沿最后两个轴的索引数组索引 4D 数组 - NumPy/Python

c++ - 寻找与 _mm256_load_ps 类似的函数,但用于字符指针