|
|
1
2
实际上,我们在工作中使用SIMD,也许我可以给你我的反馈。 在处理SIMD时,您必须注意对齐,这是为了确保缓存线对齐。 然而,我不确定如果它没有对齐,或者CPU是否能够管理(就像以前未对齐的标量类型一样,它会导致崩溃,现在CPU处理它,但它会降低性能),它是否仍会导致崩溃。 也许你可以看看这里 SSE, intrinsics, and alignment 它似乎对问题的对齐部分有很好的答案。 因为您将它用作3D矢量,即使它实际上是一个4D矢量,这并不是一个真正好的实践,因为您不能从SIMD指令的所有性能中获益。最好的匹配方法是使用数组结构(SOA)。 注:我假设128位SIMD寄存器映射到4种标量类型(int或float) 例如,如果您有4个3D点(或矢量),那么您将有4个4D矢量,忽略每个点的第4个分量。 总的来说,您最终可以访问4*4个值。 通过使用SOA,您将拥有3个SIMD 128位(12个值)寄存器,并将按以下方式存储点。 模拟指令集
这样可以填充整个SIMD寄存器,从而最大限度地发挥SIMD的优势。另一件事是,您必须进行的许多计算(例如,添加2组4个矢量)只需要3条SIMD指令。它的使用和理解有点棘手,但当你这样做时,收获是巨大的。 当然,您不能在所有情况下都这样使用它,所以您将回到忽略最后一个值的原始解决方案。 |
|
AstralHex · 矩阵乘法代码工作不正常 1 年前 |
|
|
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 1 年前 |
|
|
Die4Toast · 递归调用成员箭头运算符-> 1 年前 |
|
|
Anka Hanım · 关于结构和动态数组地址的问题 1 年前 |