Introduktion till SSE/AVX-instruktionsuppsättningar
Få en överblick över moderna SIMD-instruktionsuppsättningar (SSE, AVX) och deras register, som är utformade för parallell databearbetning.
Introduktion till SSE/AVX-instruktionsuppsättningar är en gratis lektion i Assembler och lågnivåprogrammering för x86-system på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Assembler och lågnivåprogrammering för x86-system, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Assembler och lågnivåprogrammering för x86-system innehåller totalt 4 lektioner.
Välkommen till SIMD!
I den här lektionen utforskar vi kraftfulla instruktionsuppsättningar som är utformade för parallell bearbetning: SSE och AVX. Dessa utökningar gör det möjligt för processorn att utföra samma operation på flera datavärden samtidigt.
Denna teknik, som kallas Single Instruction, Multiple Data (SIMD), är viktig för att snabba upp uppgifter som grafikrendering, vetenskapliga beräkningar och videobearbetning.
Skalär bearbetning kontra vektorbearbetning
Föreställ dig att du behöver addera två listor med tal. En traditionell skalär processor adderar dem parvis, ett par i taget:
- Det första talet + det första talet
- Det andra talet + det andra talet
- ...och så vidare.
En vektorprocessor (som använder SIMD) kan addera flera par i en enda instruktion, vilket är betydligt snabbare för stora datamängder.
Introduktion till SSE
SSE står för Streaming SIMD Extensions. SSE introducerades av Intel och tillförde 128 bitar breda register och instruktioner till x86-processorer.
Det innebär att en SSE-instruktion kan bearbeta 128 bitar data på en gång. För flyttal med enkel precision (32 bitar vardera) gör detta det möjligt att bearbeta fyra tal samtidigt.
SSE-register: XMM0–XMM15
SSE använder en särskild uppsättning med 16 XMM-register, namngivna XMM0 till och med XMM15. Varje XMM-register är 128 bitar brett.
- De kan innehålla fyra 32-bitars flyttal med enkel precision.
- Eller två 64-bitars flyttal med dubbel precision.
- Eller sexton 8-bitars heltal.
Dessa register är separata från de allmänna registren (som EAX och EBX).
SSE-dataförflyttning: MOVAPS
Nu tittar vi på en grundläggande SSE-instruktion: MOVAPS. Denna instruktion flyttar justerade packade flyttal med enkel precision. Den läser in 128 bitar data från minnet till ett XMM-register.
Prova att köra det här exemplet (med NASM-syntax för Linux x86-64):
section .data
; Define 4 single-precision floats (128 bits total)
my_sse_data dd 1.0, 2.0, 3.0, 4.0
section .text
global _start
_start:
; Load 128 bits from my_sse_data into XMM0
movaps xmm0, [my_sse_data]
; XMM0 now holds [1.0, 2.0, 3.0, 4.0]
; Exit the program (Linux x86/x64 syscall)
mov eax, 1 ; sys_exit
xor ebx, ebx ; exit code 0
int 0x80 ; Invoke kernel
Bortom SSE: AVX
AVX, eller Advanced Vector Extensions, är en vidareutveckling av SIMD-bearbetning. AVX utökar SIMD-registren till 256 bitar, vilket fördubblar mängden data som bearbetas per instruktion jämfört med SSE.
AVX introducerade även ett nytt instruktionskodningsschema (VEX-prefixet) och icke-destruktiva operationer, vilket innebär att destinationsregister inte skriver över källregister som standard.
AVX-register: YMM0–YMM15
AVX introducerade 16 nya YMM-register (YMM0 till och med YMM15). Varje YMM-register är 256 bitar brett.
- Ett YMM-register kan innehålla åtta 32-bitars flyttal med enkel precision.
- Eller fyra 64-bitars flyttal med dubbel precision.
De lägre 128 bitarna i varje YMM-register överlappar motsvarande XMM-register (till exempel är den nedre halvan av YMM0 XMM0).
AVX-dataförflyttning: VMOVAPS
AVX-motsvarigheten till MOVAPS är VMOVAPS. Prefixet ”V” anger en VEX-kodad AVX-instruktion. Denna instruktion flyttar justerade packade flyttal med enkel precision, men nu 256 bitar åt gången.
Här är ett exempel som visar hur åtta flyttal läses in i ett YMM-register:
section .data
; Define 8 single-precision floats (256 bits total)
my_avx_data dd 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0
section .text
global _start
_start:
; Load 256 bits from my_avx_data into YMM0
vmovaps ymm0, [my_avx_data]
; YMM0 now holds [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0]
; Exit the program (Linux x86/x64 syscall)
mov eax, 1 ; sys_exit
xor ebx, ebx ; exit code 0
int 0x80 ; Invoke kernel
Viktiga skillnader: SSE kontra AVX
Även om både SSE och AVX är SIMD-utökningar erbjuder AVX betydande förbättringar:
- Registerstorlek: SSE använder 128-bitars XMM-register, medan AVX använder 256-bitars YMM-register.
- Datagenomströmning: AVX kan bearbeta dubbelt så mycket data per instruktion som SSE.
- Icke-destruktiva operationer: Många AVX-instruktioner tillåter ett format med tre operander, så att källoperanderna bevaras.
- VEX-prefix: AVX-instruktioner använder ett VEX-prefix, vilket möjliggör flexiblare kodning och framtida utökningar.
Snabbkontroll: SIMD-register
Vilka av följande påståenden om SSE- och AVX-register är SANNA?
Sammanfattning: SIMDs kraft
Vi har introducerat SSE och AVX, kraftfulla SIMD-instruktionsuppsättningar som gör det möjligt för processorn att utföra operationer på flera datavärden samtidigt. Du har lärt dig om:
- Begreppet SIMD och dess fördelar för parallell bearbetning.
- SSE med sina 128-bitars XMM-register (
XMM0-XMM15). - AVX med sina 256-bitars YMM-register (
YMM0-YMM15). - Grundläggande instruktioner för dataförflyttning, som
MOVAPSochVMOVAPS.
Att förstå dessa instruktionsuppsättningar är viktigt för att optimera prestandan i dataintensiva uppgifter.
Lär dig Assembly med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 12
- Lektioner
- 48
Vanliga frågor
Är lektionen ”Introduktion till SSE/AVX-instruktionsuppsättningar” gratis?
Ja – hela texten till ”Introduktion till SSE/AVX-instruktionsuppsättningar” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Assembler och lågnivåprogrammering för x86-system, kan Ni uppgradera till CoddyKit PRO. Kursen i Assembler och lågnivåprogrammering för x86-system innehåller totalt 4 lektioner.
Vad lär jag mig i ”Introduktion till SSE/AVX-instruktionsuppsättningar”?
Få en överblick över moderna SIMD-instruktionsuppsättningar (SSE, AVX) och deras register, som är utformade för parallell databearbetning. Ni övar på Assembler och lågnivåprogrammering för x86-system med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Assembler och lågnivåprogrammering för x86-system?
Du behöver inga förkunskaper. Utbildningen i Assembler och lågnivåprogrammering för x86-system på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Introduktion till SSE/AVX-instruktionsuppsättningar”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Assembler och lågnivåprogrammering för x86-system-lektionen?
Ja. Varje Assembler och lågnivåprogrammering för x86-system-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Grunderna i x87 FPU-programmering
- Introduktion till SSE/AVX-instruktionsuppsättningar
- Vektorisera kod med SIMD
- Flyttalsprecision, avrundning och undantag