Visual Studio VC2013 在没有 AVX 的情况下启用 SSE4.1
Visual Studio VC2013 enabling SSE4.1 without AVX
我有一个很简单的问题,但在搜索了一段时间后,我还没有找到真正的答案。微软建议启用 AVX 增强指令集,以便也使用 SSE4 优化代码。
不幸的是,尽管有一些读数,这也强制使用具有 AVX 能力的 CPU。有没有一种已知的方法可以在 VC2013 中启用 SSE4 而无需强制执行 AVX?
我认为这个问题的背景很明显,SSE4 得到更长的支持,只需要较旧的 CPU(我认为首先是 2006 年),而 AVX 需要 CPU 从 2011 年开始。只有问题的 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;
}
你可以在线试一下here.
我有一个很简单的问题,但在搜索了一段时间后,我还没有找到真正的答案。微软建议启用 AVX 增强指令集,以便也使用 SSE4 优化代码。 不幸的是,尽管有一些读数,这也强制使用具有 AVX 能力的 CPU。有没有一种已知的方法可以在 VC2013 中启用 SSE4 而无需强制执行 AVX? 我认为这个问题的背景很明显,SSE4 得到更长的支持,只需要较旧的 CPU(我认为首先是 2006 年),而 AVX 需要 CPU 从 2011 年开始。只有问题的 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;
}
你可以在线试一下here.