Cel mai bun răspuns
Asamblator pe 32 de biți:
mov eax, 0
cpuid
test ecx, 0x0001
Desigur, tu Aș vrea să vă asigurați că împingeți mai întâi cele patru registre GP și le deschideți după ce ați verificat ce steaguri căutați. Există alte semnalizări legate de lucruri precum monitorul / așteptarea SSE3 (bitul 3 deci 0x0080) sau funcțiile suplimentare (bitul 9, deci 0x0200) pe care ați putea dori să le utilizați.
Suficient de ușor de încorporat în C sau majoritatea limbajelor de programare „reale” cu un asamblor înclinat presupunând că compilatorul dvs. merită al naibii.
Răspuns
AVX este numele uneia dintre numeroasele extensii vectoriale x86 de la Intel. A fost folosit de când seria de procesoare de tip sandy bridge / buldozer de la Intel și respectiv AND.
Ce este o extensie vectorială?
Arhitectura tradițională CPU (procesare scalară) funcționează pe un model numit SISD: instrucțiune unică, date unice. Aveți un nucleu de procesor care funcționează pe instrucțiuni secvențial, fiecare operând pe un singur set de operanzi la un moment dat.
Acest lucru funcționează bine pentru majoritatea tipurilor de sarcini de lucru, dar, în general, este inadecvat pentru unele tipuri de calcul intensiv. Luați în considerare editarea fotografiilor, de exemplu: dacă aș dori să dublu luminozitatea unei imagini, ar trebui să dublu luminozitatea unei imagini pixel cu pixel, care este lentă. Fiecare pixel este de fapt independent de ceilalți, ceea ce înseamnă că există potențialul pentru paralelism masiv: având în vedere suficiente resurse de calcul și arhitectura potrivită, teoretic s-ar putea face toate acele lucrări într-o singură operație.
Introduceți procesoare vectoriale: acestea funcționează pe un model numit SIMD. În loc să funcționeze pe un singur element unul câte unul, un procesor vector concatenează multe elemente de date într-un singur element mare (de obicei 256 de biți sau mai mult), apoi efectuează operații pe acesta. Rezultatul este că un procesor vector poate lucra pe multe elemente de date într-o singură operație, când ar fi nevoie de mai multe operații pentru ca un procesor tradițional să o facă.
Noțiunile de bază ale programării SIMD
Arhitecturile tradiționale ale procesorului, cum ar fi X86, evident nu au fost proiectate pentru funcționarea SIMD. De-a lungul anilor, Intel a adăugat continuu extensii la ISA x86 pentru a îmbunătăți funcționalitatea acestuia, iar extensiile SIMD au fost unele dintre cele mai vechi care au apărut.
A început cu MMX pe Pentium, dar asta a avut destul de mult mai târziu, Intel a adăugat extensia setului de instrucțiuni SSE, care a eliminat unele dintre aceste limitări. Au continuat să itereze pe SSE în deceniul următor, până când au introdus în cele din urmă AVX.
AVX a introdus unele îmbunătățiri destul de semnificative. peste predecesorul său, SSE4.x
Dimensiunea registrului vector a fost mărită de la 128 biți la 256 biți, dublând capacitatea de producție. Instrucțiunile au trecut de la formatul tradițional de 2 operandi (a = a + b) la formatul de 3 operanzi ( a = b + c), îmbunătățind flexibilitatea. De asemenea, regulile de aliniere au fost relaxate.