我有一个相当简单的问题,但经过一段时间的搜索后,我还没有找到真正的答案。Microsoft 建议启用 AVX 增强指令集,以便也利用 SSE4 优化代码。不幸的是,尽管有一些读数,这也强制使用支持 AVX 的 CPU。有没有一种已知的方法可以在 VC2013 中启用 SSE4 而不强制执行 AVX?这个问题的背景很明显,我认为,SSE4 的支持时间更长,只需要较旧的 CPU(我认为首先是 2006 年的),而 AVX 需要 2011 年的 CPU。有问题的 dll 仅使用 SSE4 的优化,但现在我必须坚持SSE2 牺牲性能以保持其正常运行。
该标志似乎/arch:SSE2增加了对 SSE2 和更高版本内在函数的支持。我没有安装 Visual Studio,但此示例有效(_mm_floor_ps特定于 SSE4):
#include <smmintrin.h>
#include <iostream>
using namespace std;
int main()
{
__declspec(align(16)) float values[4] = {1.3f, 2.1f, 4.3f, 5.1f};
for(int i = 0; i < 4; i++)
cout << values[i] << ' ';
cout << endl;
__m128 x = _mm_load_ps(values);
x = _mm_floor_ps(x);
_mm_store_ps(values, x);
for(int i = 0; i < 4; i++)
cout << values[i] << ' ';
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
您可以在这里在线尝试。