使用Intel Core i7在AVX上执行非法指令 我有一个Windows X64 C++程序,它由MSVC 12编译,没有AVX支持NO/ARC:AVX编译选项。

使用Intel Core i7在AVX上执行非法指令 我有一个Windows X64 C++程序,它由MSVC 12编译,没有AVX支持NO/ARC:AVX编译选项。,c++,64-bit,avx,msvc12,C++,64 Bit,Avx,Msvc12,我有一个客户的崩溃报告,他在Win7上的核心i7 4700MQ。异常代码为c000001d非法指令,异常偏移量指向sin函数内的vmovd r9、xmm0指令。我尝试了两种不同的版本,在这两种情况下,它都指向相同的指令 看起来,msvc库版本的sin Inquired具有特殊的AVX代码路径,即使在没有AVX支持的情况下编译。这段代码在没有AVX的旧i3处理器上运行良好 那么,是什么导致了这个特定i7的异常呢?对于许多拥有广泛CPU的客户来说,同样的代码运行起来没有任何问题 也许AVX可以在OS

我有一个客户的崩溃报告,他在Win7上的核心i7 4700MQ。异常代码为c000001d非法指令,异常偏移量指向sin函数内的vmovd r9、xmm0指令。我尝试了两种不同的版本,在这两种情况下,它都指向相同的指令

看起来,msvc库版本的sin Inquired具有特殊的AVX代码路径,即使在没有AVX支持的情况下编译。这段代码在没有AVX的旧i3处理器上运行良好

那么,是什么导致了这个特定i7的异常呢?对于许多拥有广泛CPU的客户来说,同样的代码运行起来没有任何问题


也许AVX可以在OS设置/BIOS中以某种方式禁用,而sin代码无法检查这一点?或者可能有一些操作系统更新添加了AVX支持,没有它,任何AVX代码都会触发c000001d?

如果这是动态链接库中的代码,那么代码的编译选项就无关紧要了。dll很可能会根据cpuid的返回值对不同的实现进行分派,以确定avx是否可用,如果不可用,则返回到sse版本

vmovd r9,xmm0

在我看来,这是一个关于corei7的法律指示


可能相关:,但4700MQ确实支持AVX,对吗?@神秘是的,操作系统是一个原因。此用户运行的是Win7版本SP1之前的版本,仅在SP1中添加了AVX支持。不知怎的,我一直在想MSVC12正在使代码兼容Vista。但看起来min spec是Win7 SP1。然而,Mysticial的第二个链接使用Win7 SP1,它也有类似的问题。