我正在优化我的矩阵乘法代码。
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/