2015-12-03 14 views
6

Finora sono riuscito a scoprire che:Quali versioni di Windows supportano/richiedono quali estensioni multimediali della CPU?

  • SSE e SSE2 sono obbligatori per Windows 8 e versioni successive (e naturalmente per qualsiasi sistema operativo a 64-bit)
  • AVX è supportato solo da Windows 7 SP1 o più avanti

Ci sono dei problemi relativi all'uso di SSE3, SSSE3, SSE4.1, SSE 4.2, AVX2 e AVX-512 su Windows?

Alcuni chiarimenti: ho bisogno di questo per determinare su quale sistema operativo verrà eseguito il mio programma se utilizzo le istruzioni di uno dei set SSE/AVX.

+0

@downvoters: questa non è una domanda brutta, rispetto alla maggior parte, anche se risulta non avere una risposta molto interessante. L'OP non lo sapeva, o non avrebbe chiesto. È chiaro e sembra che l'OP abbia provato a cercare, ma non sapeva su cosa cercare (perché non conosce già la risposta alla domanda: P) Posso vedere chiuderlo come off-topic per SO/migrare a SU, ma non ai downvotes. –

+0

Non penso che sia una domanda SU, dubito che la codifica in assembly sia qualcosa che anche i più super utenti fanno. Riformulerò la domanda per rendere più chiaro che sto cercando di utilizzare gli opcode nei miei programmi. – Alexey

+1

Non vedo come questa domanda sia solo "sul software di calcolo generale". Il solo fatto che contenga "Windows" non significa che sia fuori tema qui. Questa è una domanda sulle piattaforme dal punto di vista dei programmatori ed è chiaramente importante per coloro che codificano in SSE/AVX/etc. – stgatilov

risposta

8

Le estensioni che introducono un nuovo stato architettonico richiedono un supporto speciale del sistema operativo, poiché il sistema operativo deve salvare/ripristinare il ripristino di più dati sulle opzioni di contesto. Quindi, dal punto di vista del sistema operativo, non c'è nulla di extra da fare per far sì che il codice spazio utente esegua le istruzioni SSSE3, se il sistema operativo supporta SSE.

SSE, AVX e AVX512 sono le estensioni che hanno introdotto un nuovo stato architettonico.

  • SSE introdotto regs XMM (e MXCSR per le modalità e FP stato di eccezione arrotondamento)
  • AVX introdotto ymm (la metà inferiore dei quali sono vecchi REGS XMM).
  • AVX512 ha introdotto zmm (estendendo i registri ymm) e ha anche raddoppiato il numero di reg di vettore in modalità 64 bit: zmm0-zmm31.

Controllate per il supporto di CPU per SSE o AVX modo consueto, con l'istruzione CPUID.

Per evitare il danneggiamento di dati inattivi quando si utilizza una nuova estensione su un sistema operativo multitasking che non salva/ripristina il nuovo stato architettonico sugli switch di contesto, le istruzioni SSE segnalano come istruzioni non valide se il sistema operativo non ha set an OS-support bit in a control register. Quindi le estensioni vettoriali "non funzionano" su sistemi operativi che non conoscono il salvataggio/ripristino dello stato necessario per tale estensione.


Per SSE, potrebbe non esserci alcun modo indipendente dal sistema operativo pulito per rilevare che il sistema operativo ha promesso di salvare/ripristinare lo stato SSE interruttori di contesto impostando il CR4.OSFXSR, ecc CR4.OSXMMEXCPT bit, perché even reading a control register is privileged e non c'è un bit CPUID che rifletta le impostazioni. Su Windows, è possibile utilizzare GetEnabledXStateFeatures per verificare che il sistema operativo sappia come salvare/ripristinare lo stato del registro vettoriale. Non sono sicuro di cosa hai bisogno su altri sistemi operativi; Il supporto SSE è così diffuso che dovresti usare un OS (o homebrew) molto antico per far sì che questo sia un problema.


Per AVX, non abbiamo bisogno di supporto del sistema operativo per rilevare che AVX è utilizzabile (supportato da hardware e abilitato dal sistema operativo): CPUID include una funzione po OSXSAVE che verrà impostato quando il sistema operativo ha abilitato AVX.

Da Intel's intro to AVX:

  • Verificare che il sistema operativo supporta XGETBV utilizzando CPUID.1:ECX.OSXSAVE bit 27 = 1.
  • Allo stesso tempo, verificare che CPUID.1:ECX bit 28=1 (Intel AVX supportato) e/o bit 25 = 1 (AES supportato) ... (e altri bit per FMA, AES e PCLMULQDQ)
  • Issue XGETBV e verificare che la maschera abilitata per funzioni ai bit 1 e 2 sia 11b (stato XMM e stato YMM abilitato dal sistema operativo ).

Può essere più facile per chiamare una funzione del sistema operativo fornito per rilevare il supporto del sistema operativo, invece di utilizzare asm in linea o una libreria di caratteristiche di rilevamento di fare tutto questo.


Lo stesso vale per AVX512: è possibile controllare il bit funzione CPUID per il set di istruzioni, e verifica che il sistema operativo ha promesso di gestire il nuovo stato architettonica del contesto commuta abilitando il Bit destro in con XSETBV. (Quindi dovresti controllare con XGETBV).

+0

Quindi, questo significa che non posso usare le estensioni AVX512 nei miei programmi in esecuzione su SO rilasciati prima del 2013, poiché è stato annunciato. Sai quali versioni di Windows riceveranno aggiornamenti che li rendono in grado di gestire correttamente i registri zmm? – Alexey

+3

In realtà, dovresti usare 'IsProcessorFeaturePresent' e' GetEnabledXStateFeatures' perché ti dicono non solo se la funzione CPU esiste, ma anche se il sistema operativo lo supporta. Sarebbe negativo rilevare (supponiamo) il supporto AVX nella CPU e quindi utilizzare le istruzioni AVX, solo per scoprire che lo stato AVX viene danneggiato ad ogni switch di contesto perché il SO non supporta il cambio di contesto AVX. –

+0

@Alexey: ci vuole tempo perché una implementazione collaudata, abbastanza da trasportare, sia pronta, dopo che Intel ha annunciato le cose. L'AVX512 non è ancora presente in nessuna CPU normale in vendita, solo la roba multi-core di Knight's Landing. Ad ogni modo, non ho idea di come sarà il supporto AVX512 di Windows. È abbastanza facile aggiungere il supporto del sistema operativo per salvare/ripristinare lo stato extra. Basta impostare un paio di ulteriori feature per XSAVE/XRSTOR e la CPU salverà lo stato extra. –

Problemi correlati