Visual Studio无法识别_AVX2或_AVX__ 我在C++中实现了一个简单的SIMD包装器。 为了实现跨平台,我使用CMake使用VisualStudio设置项目

Visual Studio无法识别_AVX2或_AVX__ 我在C++中实现了一个简单的SIMD包装器。 为了实现跨平台,我使用CMake使用VisualStudio设置项目,c++,visual-c++,cmake,macros,simd,C++,Visual C++,Cmake,Macros,Simd,我已经添加了/Arch:AVX2,但Visual Studio无法识别\uuuu AVX2\uuuu宏 首先,我的电脑 cmake_minimum_required(VERSION 3.12.2) set(INCLUDEDIR "include/Maths") set(SOURCEDIR "src") set(HEADER_FILES ${INCLUDEDIR}/export.h ${INCLUDEDIR}/SIMDWrapper/Config/SIMDConfig.h)

我已经添加了/Arch:AVX2,但Visual Studio无法识别
\uuuu AVX2\uuuu

首先,我的电脑

cmake_minimum_required(VERSION 3.12.2)

set(INCLUDEDIR "include/Maths")
set(SOURCEDIR "src")

set(HEADER_FILES
    ${INCLUDEDIR}/export.h 
    ${INCLUDEDIR}/SIMDWrapper/Config/SIMDConfig.h)

set(SOURCE_FILES 
    ${SOURCEDIR}/Application.cpp)


add_library(Maths SHARED ${SOURCE_FILES}  ${HEADER_FILES})
target_link_libraries(Maths PUBLIC Core)
target_include_directories(Maths PUBLIC "include")
target_compile_options(Maths PRIVATE $<$<BOOL:${MSVC}>:/arch:AVX2>)
target_compile_definitions(Maths PRIVATE MATHS_EXPORT)
这就是我所做的。
\uuuuux86\u64\uuuuuuuuuu
已定义,我的CPU是i5 Skylake,因此它应该支持AVX2

我已经检查了Advanced Vector Extensions 2选项是否已从项目配置属性中启用,并且已启用


是否需要从CMake或Visual Studio中更改/添加一些内容,以使AVX2宏可识别

有三种方法可以将compile选项
/arch:AVX2
启用到目标(如果编译器支持)

或者通过使用生成器表达式

target_compile_options(Maths PRIVATE $<$<CXX_COMPILER_ID:MSVC>:/arch:AVX2>)
或者使用
add_definition
调用将定义添加到该命令之后在脚本中创建的所有目标

if(MSVC)
    add_definition(/arch:AVX2)
endif()

如果不是绝对必要的话,我会尽量避免使用生成器表达式,因为它们不会提高CMake脚本文件的可读性,有时很难正确执行。

尝试在
\uuuAVX2\uU
子句中添加一个
\error test
语句,并构建以查看是否确实设置了它。根据您正在运行的VisualStudio的确切版本,智能感知编译器有时(实际上)经常会落后于实际的C++编译器,因此您可以得到错误的着色结果。另外,从Visual Studio 2013更新2开始,添加了对
/arch:AVX2
的支持。您实际使用的是哪个版本的Visual Studio?您好!抱歉,我用VS 2017(2018 12月18日更新)。@ ChuckWalbourn,是的,EX35对于“Y错误指令AVX”根本不设置。我检查您的命令行输出,然后看看那里有什么结尾……如果<代码> > AVX2Sy< < /C>没有定义,那么您就不能用VisualC++或英特尔编译器用<代码> /ARC:AVX2</代码>来构建。
if(MSVC)
    target_compile_options(Maths PRIVATE /arch:AVX2)
endif()
if(MSVC)
    add_definition(/arch:AVX2)
endif()