sse / sse2双矩阵浮点向量乘法

时间:2011-02-28 07:45:38

标签: vector matrix sse sse2

我必须使用sse / sse2实现矩阵向量乘法。 矢量和矩阵很大。 矩阵是双倍的,矢量是浮动的。

重点是我必须对浮点数进行的所有计算 - 当我从矩阵中获取数据时我将其提升为浮点数,进行计算并得到浮点向量(稍后在浮点数上进行一些额外的计算之后我必须添加一些浮点数值(浮点矩阵)为双值(双矩阵)。

我的问题是如何使用SSE / SSE2来做到这一点 - 问题是双打 - 我有指向双*的指针我必须以某种方式将4个双打转换成4个浮点数以适合__mm128 ...是否有任何入侵这样做?

2 个答案:

答案 0 :(得分:1)

double更改为float会降低精确度,而不是增加精度。为了更准确,您应该在double s上进行计算(将向量提升为该类型),然后可能会将结果转发回float。转换所需的说明是cvtps2pdfloatdouble)和/或cvtpd2psdoublefloat)。那些只能一次转换两个值(因为只有两个double适合SSE寄存器),所以你需要分两部分进行转换。

答案 1 :(得分:1)

您需要两次调用__m128 _mm_cvtpd_ps (__m128d a)CVTDP2PS)以获得两个单精度浮点向量,每个向量包含两个原始双精度值,然后将这两个浮点向量合并为一个向量,例如__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8)SHUFPS)。