我有一个相当简单的问题,但是经过一段时间的搜索,我仍然没有找到真正的答案。 Microsoft建议启用AVX增强指令集,以便也利用SSE4优化的代码。
不幸的是,尽管有一些读数,但这也强制使用了具有AVX功能的CPU。有没有已知的方法可以在不启用VC2013的情况下启用SSE4?
我想这个问题的背景很明显,我认为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;
}
您可以在线尝试here。