Migliore risposta
Assembler a 32 bit:
mov eax, 0
cpuid
test ecx, 0x0001
Naturalmente tu Voglio assicurarmi di premere prima i quattro registri GP e di farli scoppiare dopo aver controllato i flag che stai cercando. Ci sono altri flag relativi a cose come il monitoraggio / attesa di SSE3 (bit 3 quindi 0x0080) o funzioni supplementari (bit 9, quindi 0x0200) che potresti voler usare.
Abbastanza facile da incorporare in C o la maggior parte dei linguaggi di programmazione “reali” con assemblatore inline presumendo che il tuo compilatore valga un dannato.
Risposta
AVX è il nome di una delle tante estensioni vettoriali x86 di Intel. È in uso dalla serie di CPU sandy bridge / bulldozer rispettivamente di Intel e AND.
Che cosè unestensione vettoriale?
Larchitettura CPU tradizionale (elaborazione scalare) opera su un modello chiamato SISD: istruzione singola, dati singoli. Hai un core del processore che opera sulle istruzioni in sequenza, ognuna operante su un singolo insieme di operandi alla volta.
Funziona bene per la maggior parte dei tipi di carichi di lavoro, ma in genere non è adatto ad alcuni tipi di carichi di lavoro ad alta intensità di calcolo. Considera ad esempio il fotoritocco: se volessi raddoppiare la luminosità di unimmagine, dovrei raddoppiare la luminosità di unimmagine pixel per pixel, il che è lento. Ogni pixel è in realtà indipendente dagli altri, il che significa che esiste il potenziale per parallelismo massiccio: date sufficienti risorse di calcolo e la giusta architettura, si potrebbe teoricamente fare tutto il lavoro in una singola operazione.
Inserisci i processori vettoriali: questi operano su un modello chiamato SIMD. Invece di operare su un singolo elemento uno per uno, un processore vettoriale concatena molti elementi di dati in un unico grande elemento (tipicamente 256 bit o più), quindi esegue le operazioni su quello. Il risultato è che un processore vettoriale può lavorare su molti elementi di dati in una singola operazione, quando un processore tradizionale richiederebbe diverse operazioni per farlo.
Fondamenti di programmazione SIMD
Le architetture CPU tradizionali come X86 non erano ovviamente progettate per il funzionamento SIMD. Nel corso degli anni, Intel ha continuamente aggiunto estensioni allISA x86 per migliorarne le funzionalità, e le estensioni SIMD sono state tra le prime ad apparire.
È iniziata con MMX sul Pentium, ma era abbastanza limitazioni evidenti. Successivamente, Intel ha aggiunto lestensione del set di istruzioni SSE, che ha rimosso alcune di queste limitazioni. Hanno ulteriormente iterato SSE nel decennio successivo, fino a quando non hanno introdotto AVX.
AVX ha introdotto alcuni miglioramenti piuttosto significativi rispetto al suo predecessore, SSE4.x
La dimensione del registro vettoriale è stata aumentata da 128 bit a 256 bit, raddoppiando il potenziale throughput. Le istruzioni sono passate dal formato tradizionale a 2 operandi (a = a + b) a un formato a 3 operandi ( a = b + c), migliorando la flessibilità. Anche le regole di allineamento sono state allentate.