Simptome
Când se construiți un program utilizând Microsoft Visual C++ 2013, programul se blochează și primiți o excepție "Illegal Instruction". Acest lucru se produce deoarece unele matematice în virgulă mobilă bibliotecă de funcții în Visual C++ 2013 x64 C Runtime (CRT) verifica corect dacă anumite instrucțiuni AVX și FMA3 sunt disponibile înainte funcțiile încercați să le utilizați. Dacă instrucțiunile nu sunt disponibile pentru utilizare, apelurile către aceste funcţii provoca o excepție illegal instruction (0xc000001d). Funcții afectate includ jurnal, log10, și pow și altele.
Această problemă este cel mai probabil să apară în următoarele scenarii:-
Pe o versiune mai veche a sistemului de operare Windows care nu acceptă AVX stare salvarea (de exemplu, Windows Vista) dacă este utilizat pe un computer care acceptă setul de instrucțiuni AVX
-
Dacă AVX stare de economisire este dezactivată în mod explicit în configurația de încărcare a sistemului de operare
-
În mediul Preinstall Windows (Windows PE)
Notă Windows PE nu acceptă AVX stare de vară.
Această problemă a fost raportat pe Microsoft Connect:
x64 log() utilizează vpsrlq AVX instrucțiuni fără sistem de operare (astfel încât aceasta cade pe Vista x64) Visual Studio 2013 RTM: C++ x64 cod generare bug AVX2 instrucţiuni
Cauza
Această problemă apare deoarece Runtime Visual C++ 2013 x64 C nu verifică dacă sistemul de operare acceptă AVX stare salvarea înainte încearcă să se execute AVX sau FMA3 instrucțiunile.
Rezolvare
Dacă toate afectate C++ binare care sunt create cu Visual C++ 2013 DLL C Runtime (msvcr120.dll), instalați actualizat Microsoft Visual C++ 2013 redistribuire – 12.0.40660.0 sau o versiune ulterioară.
Dacă vă afectate C++ binare link static Visual C++ 2013 C Runtime, trebuie să actualizați instalarea de Visual Studio 2013 instalarea remedierii rapide 3174417 și regenerarea și redistribuirea binare afectate. Notă Această problemă nu afectează versiunile mai vechi ale Visual C++ C Runtime (Visual C++ 2012 și versiuni anterioare). Înainte de lansarea inițială CRT Universal care este utilizat de Visual C++ 2015 s-a remediat problema.Centrul de descărcare Microsoft
Pentru a actualiza static legat Visual C++ 2013 C Runtime, remedierea rapidă 3174417 este lansat ca o actualizare de descărcare și nu este distribuit prin Windows Update. Este disponibil la site-ul Web Microsoft Download Center:
3179560 actualizare pentru Visual C++ 2013 şi Visual C++ Redistributable Package
Soluție
Pentru a rezolva această problemă, dezactivați FMA3 în biblioteca matematică dacă sunt afectate de această problemă. Puteți interogați dacă sistemul acceptă instrucțiunilor AVX prin apelarea GetEnabledXStateFeatures și dezactivarea AVX în CRT explicit apelând _set_FMA3_enable(0).lucrul cu XState Contextpe site-ul MSDN. Function _set_FMA3_enable(0) este declarat în < math.h > și este disponibil numai la compilarea pentru x64. (Această problemă afectează numai x64 biblioteci.) Acest lucru provoacă Biblioteca matematică pentru a reveni la utilizarea implementările de non-FMA3.
Pentru mai multe informații, consultați