Registre Vectoriale SIMD (SSE și AVX) în x86_64: XMM, YMM și Paralelism de Date în Assembly (x86_64)

Ghid complet pentru procesarea vectorială SIMD în x86_64: registrele XMM (128-bit) și YMM (256-bit), instrucțiunile movups, addps, mulps și calcul paralel pe numere în virgulă mobilă.

Sintaxă
movaps xmm0, [rdi]; addps xmm0, xmm1 ; 4 adunări float simultane!

Arhitectura modernă x86_64 include unități hardware masive pentru SIMD (Single Instruction, Multiple Data). În loc să adunați câte un număr pe rând într-un registru de uz general (RAX, RBX), extensiile SSE și AVX permit procesarea în paralel a mai multor numere întregi sau reale într-un singur ciclu de ceas.

Adunarea vectorială a 4 numere float simultan folosind registrele XMM (SSE)
section .data
    align 16
    vector_a: dd 1.0, 2.0, 3.0, 4.0   ; 4 numere float pe 32 de biți (16 octeți total)
    vector_b: dd 10.0, 20.0, 30.0, 40.0

section .bss
    align 16
    vector_rezultat: resd 4

section .text
global aduna_vectori_simd

aduna_vectori_simd:
    ; Încărcăm 4 valori float în registrul de 128 de biți XMM0:
    movaps  xmm0, [vector_a]
    ; Încărcăm 4 valori float în XMM1:
    movaps  xmm1, [vector_b]

    ; ADDPS = Add Packed Single-Precision (adună toate cele 4 perechi în paralel!):
    ; xmm0[0] = 1.0 + 10.0 = 11.0
    ; xmm0[1] = 2.0 + 20.0 = 22.0
    ; xmm0[2] = 3.0 + 30.0 = 33.0
    ; xmm0[3] = 4.0 + 40.0 = 44.0
    addps   xmm0, xmm1

    ; Salvăm rezultatul înapoi în memorie:
    movaps  [vector_rezultat], xmm0
    ret
Extensie SIMD Registre Lățime Registru Capacitate paralelă
SSE (1 – 4.2) XMM0 - XMM15 128 biți (16 octeți) 4 numere float sau 2 numere double sau 16 caractere char
AVX / AVX2 YMM0 - YMM15 256 biți (32 octeți) 8 numere float sau 4 numere double sau 8 întregi int32
AVX-512 ZMM0 - ZMM31 512 biți (64 octeți) 16 numere float sau 8 numere double
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Registre Vectoriale SIMD (SSE și AVX) în x86_64: XMM, YMM și Paralelism de Date

Ai o nelămurire despre utilizarea comenzii Registre Vectoriale SIMD (SSE și AVX) în x86_64: XMM, YMM și Paralelism de Date sau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!

💬

Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!

Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.