Nové výhodné předplatné namísto kreditů je tu! Více informací. Upravili jsme také naše provozní podmínky.
NOVINKA: Staň se datovým analytikem a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

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

Znalosti v hodnotě stovek tisíc získáš za pár korun

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.

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íš s Provozními podmínkami.

Co od nás v dalších lekcích dostaneš?
  • Přístup k jednotlivým lekcím dle způsobu pořízení.
  • 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.
Článek pro vás napsal Patrik Valkovič
Avatar
Věnuji se programování v C++ a C#. Kromě toho také programuji v PHP (Nette) a JavaScriptu (NodeJS).
Aktivity