2

我正在尝试编写一些 SSE 代码,但由于此错误而无法继续:

错误 C2664:“_mm_loadu_ps”:无法将参数 1 从“const __m128 *”转换为“const float *”

我必须加载未对齐的数据并转换为 __m128 才能使用 SSE 内在函数。我在网上搜索,但无法获得这项工作。这是我的代码:

const Matrix<T> mul_SSE (const Matrix<T>& m)const{
    // ...
    __m128 a = _mm_loadu_ps((__m128 const*)&m(0,0)); //<-Here's the error line
    // ...
}

参数 m 是浮点矩阵。有什么建议吗?非常感谢!

附言。另外,如果我写__m128 a = _mm_loadu_ps((__m128*)&m(0,0));它会给我同样的错误:

错误 C2664:“_mm_loadu_ps”:无法将参数 1 从“__m128 *”转换为“const float *”

已解决:正确的方法:

__m128 a = _mm_loadu_ps(&m(0,0));
4

1 回答 1

0

MSDN 上的文档指出 _mm_loadu_ps 采用float*4 个浮点数。

您需要传入一个float*指向矩阵中浮点数组的指针(实际上是 4 个)。

__m128 const*当函数需要 a 时,您将对矩阵的引用转换为a float*

于 2013-06-03T20:59:02.410 回答