1

XMVector4Dot 的文档将返回值列为向量。它还指出点积被复制到每个组件中。鉴于点积将是单个值,与仅返回浮点数相比,这有何优势?

我能看到获得价值的唯一方法是执行以下操作:

        XMVECTOR w = { -XMVectorGetX(XMVector4Dot(x, eye)), -XMVectorGetX(XMVector4Dot(y, eye)), -XMVectorGetX(XMVector4Dot(z, eye)), 1 }; 

这似乎是不必要的。我忽略了还有其他原因吗?

4

1 回答 1

1

这有利于 SIMD 实施。CPU 有 SIMD 指令(单指令多数据)。

这些指令在一组不同的寄存器上工作,并且与常规标量寄存器来回运行会产生很大的成本。通过对点积的结果使用相同的向量类型,它有助于保持代码向量化。

此外,将一个标量值放入向量的所有组件中,然后将其合并为多个 4 个数据是很常见的做法。您可以查看结构数组与数组结构( AOS 与 SOA )如何影响 SIMD 算法实现的设计。

于 2017-08-29T17:18:36.427 回答