我希望您能够快速计算具有3或4个分量的向量的点积。我尝试了几种方法,但大多数在线示例使用浮点数组,而我们的数据结构不同。
我们使用16字节对齐的结构体。代码摘录(简化):
在Intel Ivy Bridge / Haswell上使用gcc和clang进行了测试。看来将数据加载到SIMD寄存器中并再次拉出所需的时间会消耗所有好处。
希望得到一些帮助和想法,如何有效地计算我们的float3/4数据结构的点积。SSE4、AVX甚至AVX2都可以。
编辑注:对于4个元素的情况,请参见How to Calculate single-vector Dot Product using SSE intrinsic functions in C。加上遮罩也许适用于3个元素的情况。
我们使用16字节对齐的结构体。代码摘录(简化):
struct float3 {
float x, y, z, w; // 4th component unused here
}
struct float4 {
float x, y, z, w;
}
在之前的测试中(使用SSE4点积内置函数或FMA),与使用以下常规的c++代码相比,我无法获得加速。
float dot(const float3 a, const float3 b) {
return a.x*b.x + a.y*b.y + a.z*b.z;
}
在Intel Ivy Bridge / Haswell上使用gcc和clang进行了测试。看来将数据加载到SIMD寄存器中并再次拉出所需的时间会消耗所有好处。
希望得到一些帮助和想法,如何有效地计算我们的float3/4数据结构的点积。SSE4、AVX甚至AVX2都可以。
编辑注:对于4个元素的情况,请参见How to Calculate single-vector Dot Product using SSE intrinsic functions in C。加上遮罩也许适用于3个元素的情况。
dot
函数的代码。你是在循环中调用dot
吗?例如对于一个float3
或float4
数组? - Paul R