我必须使用sse/sse2实现矩阵-向量乘法。向量和矩阵都很大。矩阵为双精度,向量为浮点型。
重点是我必须在浮点数上做的所有计算-当我从矩阵中获得数据时,我将其提升为浮点数,进行计算并获得浮点数向量(稍后在浮点数上进行一些额外的计算后,我必须将一些浮点值(浮点数矩阵)添加到双精度值(双精度矩阵)中。
我的问题是,我如何使用SSE/SSE2来做这件事-问题是double-我有指向double*的指针,我必须以某种方式将4个double转换为4个浮点数以适应__mm128……有什么要做的介绍吗?
发布于 2011-02-28 23:08:07
需要调用__m128 _mm_cvtpd_ps (__m128d a) (CVTDP2PS)两次以获取两个单精度浮点向量,每个向量包含两个原始双精度值,然后使用__m128 _mm_shuffle_ps(__m128 a, __m128 b, unsigned int imm8) (SHUFPS)将这两个浮点向量合并为一个向量。
发布于 2011-02-28 16:07:47
从double更改为float会降低精度级别,而不是提高精度级别。为了更准确,您应该在double上进行计算(将向量提升为该类型),然后可能在之后将结果向下强制转换为float。转换所需的指令是cvtps2pd (float到double)和/或cvtpd2ps (double到float)。它们一次只能转换两个值(因为一个SSE寄存器中只有两个double),所以您需要分两部分进行转换。
https://stackoverflow.com/questions/5139363
复制相似问题