Vlákno názorů k článku Rozšíření instrukční sady SSE2 (2. část) od Marek Knápek - K těm "dvojitým" instrukcím: zarazila mě neexistence instrukce...

  • Článek je starý, nové názory již nelze přidávat.
  • 28. 3. 2025 12:32

    Marek Knápek

    K těm "dvojitým" instrukcím: zarazila mě neexistence instrukce _mm_blend_epi32, místo ní používám _mm_blend_epi16 (SSE4.1), neexistence instrukce _mm256_blend_epi64, místo ní používám _mm256_blend_epi32 (AVX2). Používám je v hašovacích algoritmech SHA-2 (SHA-256 a SHA-512). Když jsem teď nakousnul kryptografii, bude se seriál věnovat i instrukcím kolem AES, SHA a pclmulqdq, případně CRC? Hlavně u šifrování by největší výhodou (kromě rychlosti) měl být konstantní čas výpočtu, tedy bez ohledu na hodnotu plain textu, cipher textu nebo klíče. Tím se zamezí útokům na časovací postranní kanál. Ono totiž napsat AES v céčku v konstantním čase není totiž úplně triviální, DJB má o tom článek.

  • 28. 3. 2025 16:51

    Pavel Tišnovský
    Zlatý podporovatel

    Díky za doplnění. Ano, budu se snažit zmínit všechna další rozšíření (a že jich je). Osobně mě zajímá hlavně fp16/bf16 (dneska každej dělá AI), ale zrovna SHA/AES atd. jsou velmi užitečné.

  • 28. 3. 2025 23:04

    cc

    Neexistence instrukcí v X86 je naproso normální - je to od pravěku nevybalancovaná ISA, takže třeba saturated ADD/SUB pro 8-16-bit typy jo, ale 32/64-bit typy už ne. Normální blending je zadrátovaný až v AVX-512. Dřív ještě bez SSE4.1 se blending dal udělat jen pomocí AND/ANDN/OR.

    Pro CRC32 spíš PCLMULQDQ nebo VPCLMULQDQ. CRC32 se dá kombinovat - paralelně počítat víc regionů a pak to sloučit (opět nejlépe pomocí PCLMULQDQ). Popř. bych se podíval na GFNI (velmi užitečné instrukce).