环境: Win10,Intel Core i7 5500 2010,Visual 2010终极版


现在我想使用"_mm256_max_epu8“Intel指令,它在AVX2中,但是Visual 2010告诉我:
1>..\svCore\svGrayMorph.cpp(838):错误C3861:“_mm256_max_epu8”:找不到标识符
我发现AVX2指令应该在文件中声明:
...\Microsoft VisualStudio10.0\VC\include\immintrin.h
然而,该文件只有AVX指令,"_mm256_max_epu8“和其他指令不在该文件中。
而Visual 2013的immintrin.h文件包含AVX2指令。
SomeOne知道如何在Visual 2010中编译这段代码吗?
非常感谢。
发布于 2017-03-30 06:14:41
如前所述,Visual 2010不支持AVX2,因此必须使用Visual 2013。
但是,如果要使用在Visual的两个版本中都可以编译的通用代码,则必须在使用宏时使用条件编译。
有一个例子:
#if defined(_MSC_VER) && _MSC_VER >= 1700 //Visual Studio 2013
#define AVX2_ENABLE
#endif
#ifdef AVX2_ENABLE
void func()
{
//code with AVX2
}
#else
void func()
{
//code without AVX2
}
#endif这里您可以找到更多的例子,如何在一个项目中使用不同的SIMD扩展。
发布于 2017-03-30 06:18:55
在这两个Intrinsics列表中,符号_mm256_max_epu8似乎可以与2013或2012一起使用。
当然,它也适用于VS2015。
但在2010中不存在 Visual 2010支持:/arch:SSE|SSE2|AVX, 和Visual 2013支持:/arch:IA32|SSE|SSE2|AVX|AVX2
https://stackoverflow.com/questions/43108354
复制相似问题