Conectați-vă cu Microsoft
Conectați-vă sau creați un cont.
Salut,
Selectați un alt cont.
Aveți mai multe conturi
Alegeți contul cu care doriți să vă conectați.

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:

Download Descărcați acum pachetul.

Pentru a actualiza dinamic legat Visual C++ 2013 C Runtime DLL-uri, actualizat o componentă de redistribuire este disponibil. Pentru mai multe informații, consultați următorul articol din baza de cunoștințe Microsoft:

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).

Pentru mai multe informații, consultați 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.

Aveți nevoie de ajutor suplimentar?

Extindeți-vă competențele
Explorați instruirea
Fiți primul care obține noile caracteristici
Alăturați-vă la Microsoft Insider

Au fost utile aceste informații?

Cât de mulțumit sunteți de calitatea limbajului?
Ce v-a afectat experiența?

Vă mulțumim pentru feedback!

×