Lekce 22 - Vektorizace v C++ - Restrict ukazatel a zarovnání paměti
V minulé lekci, Vektorizace v C++, jsme si něco řekli o vektorizovaných instrukcích.
V dnešním C++ tutoriálu budeme pokračovat v tématu vektorizace. Představíme si ukazatel restrict a jak optimalizovat zarovnáním paměti.
Restrict ukazatel
Nyní se dostáváme k dalšímu důvodu, proč původní kód obsahoval záložní implementaci sčítající prvky po jednom.
void secti_naivni(float* a, float* b, float* vysledek, unsigned int cisel) { for (unsigned int i = 0; i < cisel; i++) vysledek[i] = a[i] + b[i]; }
.VECTORIZED:
movups xmm0, XMMWORD PTR [rdi+rax]
movups xmm2, XMMWORD PTR [rsi+rax]
addps xmm0, xmm2
movups XMMWORD PTR [rdx+rax], xmm0
add rax, 16
cmp rax, r8
jne .VECTORIZED
mov eax, ecx
and eax, -4
test cl, 3
je .END
.SIMPLE:
movss xmm0, DWORD PTR [rdi+rax*4]
addss xmm0, DWORD PTR [rsi+rax*4]
movss DWORD PTR [rdx+rax*4], xmm0
add rax, 1
cmp rax, rcx
jne .SIMPLE
.END:
ret
Co se například stane, pokud bude ukazatel vysledek roven
a + 1? V takovém případě závisí
...konec náhledu článku...
Pokračuj dál
Došel jsi až sem a to je super! Věříme, že ti první lekce ukázaly něco nového a užitečného.
Chceš v kurzu pokračovat? Přejdi do prémiové sekce.
Omezená nabídka: Nauč se vše a ušetři
Před koupí tohoto článku je třeba koupit předchozí díl
Obsah článku spadá pod licenci Premium, koupí článku souhlasíš se smluvními podmínkami.
- Neomezený a trvalý přístup k jednotlivým lekcím.
- Kvalitní znalosti v oblasti IT.
- Dovednosti, které ti pomohou získat vysněnou a dobře placenou práci.
Popis článku
Požadovaný článek má následující obsah:
V C++ tutoriálu budeme pokračovat v tématu vektorizace. Představíme si ukazatel restrict a jak optimalizovat zarovnáním paměti.
Kredity získáš, když podpoříš naši síť. To můžeš udělat buď zasláním symbolické částky na podporu provozu nebo přidáním obsahu na síť.