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

我必须使用sse / sse2实现矩阵向量乘法。 矢量和矩阵很大。 矩阵是双,矢量是浮点数。 重点是我必须对浮点数进行所有计算 - 当我从矩阵中获取数据时将其提升为浮点数,进行计算并获得浮点向量(稍后在浮点数上进行一些额外的计算后,我必须添加一些浮点值(浮点数)矩阵)加倍值(双矩阵)。 我的问题是如何使用SSE / SSE2来做到这一点 - 问题在于双打 - 我有指向双*的指针我必须以某种方式将4个双打转换为4个浮点数以适应__mm128 ...是否有任何指示要做到这一点?     
已邀请:
你需要两次调用
__m128 _mm_cvtpd_ps (__m128d a)
CVTDP2PS
)得到两个单精度浮点向量,每个向量包含两个你原来的双精度值,然后将这两个浮点向量合并成一个向量,例如,
__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8)
SHUFPS
)。     
double
变为
float
会降低精度水平,而不会增加精度。为了更准确,你应该在
double
s上进行计算(将向量提升为该类型),然后可能将结果重新强制转换为
float
。转换所需的说明是
cvtps2pd
float
double
)和/或
cvtpd2ps
double
float
)。那些只能一次转换两个值(因为只有两个ѭ4适合SSE寄存器),所以你需要分两部分进行转换。     

要回复问题请先登录注册