簡體   English   中英

帶有Intel Core i7的AVX上的非法說明

[英]Illegal instruction on AVX with Intel Core i7

我有一個Windows x64 C ++程序,它由MSVC 12編譯,沒有AVX支持(編譯選項中沒有/ arch:AVX)。

我有一個客戶在Win7上使用Core i7 4700MQ的崩潰報告。 異常代碼為c000001d(非法指令),異常偏移指向sin()函數內部的“ vmovd r9,xmm0”指令。 我已經為此用戶嘗試了兩種不同的版本,在兩種情況下,它都指向同一條指令。

看起來msvc庫版本的sin()內部函數具有特殊的AVX代碼路徑,即使在沒有AVX支持的情況下進行編譯也是如此。 而且此代碼在沒有AVX的舊i3處理器上也能正常工作。

那么,什么會導致此特定i7出現此異常? 對於使用大量CPU的許多客戶來說,運行相同的代碼沒有任何問題。

也許可以以某種方式在操作系統設置/ BIOS中禁用AVX,並且sin()代碼無法對此進行檢查? 或者,也許有一些操作系統更新添加了AVX支持,而沒有它,則沒有任何AVX代碼觸發器c000001d?

如果那是動態鏈接庫中的代碼,那么代碼的編譯選項就沒多大關系了。 dll可能會根據cpuid的返回值來分派給不同的實現,以確定avx是否可用,如果不可用,則回落到sse版本。

vmovd r9,xmm0

對我來說,這似乎是關於corei7的法律說明。

http://www.felixcloutier.com/x86/MOVD:MOVQ.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM