Pazīmes

Veidojot programmu, izmantojot Microsoft Visual C++ 2013 programma avarē un tiek parādīts "Neatļautas instrukcijas" izņēmums. Tas notiek tāpēc, ka dažas peldošā komata matemātisko izteiksmju Visual C++ 2013 x64 C izpildlaika (CRT) bibliotēku funkcijas pareizi nepārbaudīt, vai dažu FMA3 un AVX instrukcijas ir pieejamas pirms tās izmantot funkciju. Ja instrukcijas nav pieejams lietošanai, izsauc šīs funkcijas izraisa izņēmumu neatļautas instrukcijas (0xc000001d). Ietekmētā funkcijas ietver žurnāla log10, un pow un citiem.

Šī problēma pārsvarā rodas šādos gadījumos:

  • Par vecās operētājsistēmas Windows versiju, kas neatbalsta AVX valsts saglabāšanu (piemēram, Windows Vista) ja tas tiek izmantots datorā, kas atbalsta AVX instrukciju kopu

  • Ja skaidri AVX stāvokļa saglabāšana ir atspējota sāknēšanas konfigurācijā operētājsistēma

  • Windows pirminstalēšanas vidi (Windows PE)

    Piezīme. Windows PE neatbalsta AVX stāvokļa saglabāšana.


Šo problēmu ir ziņots par Microsoft Connect:

x64 log() funkcija izmanto vpsrlq AVX instrukcijas neatkarīgi no operētājsistēmas (tā avarē, Vista x64)

Visual Studio 2013 RTM: C++ x64 koda ģenerēšana kļūda AVX2 instrukcijas

Iemesls

Šī problēma rodas tādēļ, ka Visual C++ 2013 x64 C Runtime nepārbauda, vai operētājsistēmas atbalsta AVX stāvokļa saglabāšana pirms tā mēģina darboties FMA3 vai AVX instrukcijas.

Risinājums

Visas ietekmētās C++ binārie faili, kas ir veidotas, izmantojot Visual C++ 2013 izmantojot DLL C izpildlaika (msvcr120.dll), instalējiet atjaunināto Microsoft Visual C++ 2013 Redistributable-12.0.40660.0 vai jaunāka versija.

Ja attiecīgajā C++ bināro statiski saiti C izpildlaika 2013 Visual C++, Visual Studio 2013 instalācijas ir jāatjaunina 3174417 labojumfaila instalēšana un atkārtota pārceļot attiecīgajā binārie faili.









Piezīme. Šī problēma neietekmē vecākas versijas Visual C++ C izpildlaika (Visual C++ 2012 un vecākām versijām). Vai problēma ir atrisināta pirms sākotnējā laidiena universālā CRT, ko izmanto Visual C++ 2015.

Microsoft lejupielādes centra

Atjaunināt statiski saistīto Visual C++ 2013 C izpildlaika 3174417 labojumfailu laidiena iznākšanas tikai lejupielādēt atjauninājumu un netiek izplatīts ar Windows Update. Ir pieejama vietnē Microsoft Download Center:

Download Lejupielādējiet pakotni tūlīt.

Atjaunināt dinamiski saistīts Visual C++ 2013 C izpildlaika dll, atjauninātu izplatāmo nav pieejams. Lai iegūtu papildinformāciju, skatiet šo Microsoft zināšanu bāzes rakstu:

3179560 Visual C++ 2013 un Visual C++ izplatāmo pakotni atjauninājums

Risinājums

Lai apietu šo problēmu, atspējojiet FMA3 matemātisko izteiksmju bibliotēkā, ja tiek ietekmēta, šo problēmu. Var vaicāt vai sistēmas atbalsta AVX instrukcijas, izsaucot GetEnabledXStateFeatures un atspējojot AVX CRT tieši, zvanot pa tālruni _set_FMA3_enable(0).

Lai iegūtu papildinformāciju, skatiet darbs ar XState kontekstaMSDN vietnē.

Funkcija _set_FMA3_enable(0) ir paziņojusi < math.h >, un tā ir pieejama tikai tad, ja jums veidot x64. (Šī problēma ietekmē tikai x64 bibliotēkas.) Tādējādi atgriezties-FMA3 implementācijas, izmantojot matemātisko izteiksmju bibliotēkas.

Vai nepieciešama papildu palīdzība?

Paplašiniet savas prasmes
Iepazīties ar apmācību
Esiet pirmais, kas saņem jaunās iespējas
Pievienoties Microsoft Insider

Vai šī informācija bija noderīga?

Cik lielā mērā esat apmierināts ar tulkojuma kvalitāti?
Kas ietekmēja jūsu pieredzi?

Paldies par jūsu atsauksmēm!

×