我正在优化我的矩阵乘法代码。

for (int i = 0; i < SIZE; i++) {
    for (int j = 0; j < SIZE; j++) {
        float tmp = 0;
        for (int k = 0; k < SIZE; k+=4) {
            v1 = _mm_load_ps(&m1[i][k]);
            v2 = _mm_load_ps(&m2[j][k]);
            vMul = _mm_mul_ps(v1, v2);

            vRes = _mm_add_ps(vRes, vMul);
        }
        vRes = _mm_hadd_ps(vRes, vRes);
        vRes = _mm_hadd_ps(vRes, vRes);
        _mm_store_ss(&result[i][j], vRes);
    }
}

但是 g++ 提示“*'_mm_hadd_ps' 未在此范围内声明*”。这是为什么,我可以使用其他 SSE 函数,例如 _mm_add_ps ...

最佳答案

使用 #include <x86intrin.h> ,它将包含目标处理器支持的所有内部函数。包含 pmmintrin.h 等内容已被弃用,并且不推荐在 GCC 的最新版本中使用。还要确保在编译中以 SSE3 指令集为目标,通过添加 -msse3 选项,或(更好)使用 -march= 选项。

关于c++ - '_mm_hadd_ps' 未在此范围内声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12711037/

10-13 06:44