Príznaky
Pri vytváraní programu pomocou Microsoft Visual C++ 2013, program zlyhá a zobrazí výnimku "Neplatná inštrukcia". Príčinou niektorých funkcií rádovej matematické Visual C++ 2013 x64 C runtime (CRT) správne skontrolovať, či niektoré AVX a FMA3 pokyny sú k dispozícii, pred použitím ich funkcie. Ak nie sú k dispozícii pokyny, volania týchto funkcií spôsobiť výnimku neplatná inštrukcia (0xc000001d). Príslušné funkcie patrí log, log10, a pow a ďalšie.
Tento problém je pravdepodobne vyskytnúť v nasledujúcich situáciách:
-
Na staršiu verziu operačného systému Windows, ktorá nepodporuje funkciu AVX štát ukladanie (napríklad Windows Vista), ak sa používa v počítači, ktorý podporuje množinu inštrukcií AVX
-
Ak AVX stav ukladania vypnutá explicitne Konfigurácia systému
-
Predinštalovať prostredie systému Windows (Windows PE)
Poznámka: Windows PE nepodporuje funkciu AVX stav ukladania.
Tento problém bol hlásený Microsoft Connect:
x64 log() funkcia používa vpsrlq AVX inštrukcie bez ohľadu na operačný systém (zlyhá, Vista x64)
Visual Studio 2013 RTM: C++ x64 kód generácie chyba AVX2 pokyny
Príčina
Tento problém sa vyskytuje, pretože Runtime Visual C++ 2013 x64 C skontrolovať, či operačný systém podporuje AVX stavu ukladanie pred spustiť AVX alebo FMA3 pokyny.
Riešenie
Ak všetky príslušné C++ binárne súbory, ktoré sú vytvorené pomocou Visual C++ 2013 C Runtime knižnice DLL (msvcr120.dll), Inštalácia aktualizácie Microsoft Visual C++ 2013 Redistribuovateľný balík – 12.0.40660.0 alebo novšiu verziu.
Ak váš príslušné binárne súbory C++ staticky Visual C++ 2013 C Runtime, musíte aktualizovať inštaláciu aplikácie Visual Studio 2013 nainštalovať 3174417 rýchlu opravu a obnovu a presunutie príslušné binárne súbory.
Poznámka: Tento problém neovplyvňuje staršie verzie Visual C Runtime C++ (Visual C++ 2012 a staršie verzie). Tento problém bol vyriešený pred úvodnou Universal CRT, ktorý používa Visual C++ 2015.
Centrum sťahovania softvéru
Aktualizovať staticky prepojené Visual C++ Runtime C 2013, 3174417 rýchla oprava je vydané len na prevzatie aktualizácie a nie je distribuovaný prostredníctvom služby Windows Update. Je k dispozícii na webovej lokalite Microsoft Download Center:
Prevziať balík.
Aktualizovať dynamicky prepojené Visual C++ 2013 C Runtime knižnice DLL, aktualizovanú Redistribuovateľný balík je k dispozícii. Ďalšie informácie nájdete nasledujúci článok databázy Microsoft Knowledge Base:
3179560 aktualizácia pre Visual C++ 2013 a Visual C++ Redistribuovateľný balík
Alternatívne riešenie
Obísť tento problém, vypnite FMA3 matematické knižnice, ak sú ovplyvnené tento problém. Služba či systém podporuje AVX pokyny volaním GetEnabledXStateFeatures a vypnutie AVX CRT explicitne volaním _set_FMA3_enable(0).
Ďalšie informácie nájdete v Práca s XStatena webovej lokalite MSDN.
Funkcia _set_FMA3_enable(0) za < math.h > a je k dispozícii len pri vytváraní pre x64. (Tento problém ovplyvňuje len x64 knižnice.) To spôsobí matematické knižnice vrátiť pomocou bez FMA3 implementácie.