Názor k článku Použití instrukcí SSE a AVX pro zrychlení bitových operací od mikro - Ocenujem clanok na takuto low-level tematiku, ale popravde,...

  • Článek je starý, nové názory již nelze přidávat.
  • 23. 11. 2022 10:00

    mikro

    Ocenujem clanok na takuto low-level tematiku, ale popravde, robi viac skody nez osohu.

    Ano, je skvele, ze dnesne procesory maju plno sikovnych instrukcii. Ale co tak si spomenut, ze prvy krok sa vola optimalizacia algoritmu?

    Dal som tomu 15 minut svojho casu:

    for (int i = 0; i < SAMPLES*4; i += 4) {
    uint64_t* raw = (uint64_t*)&inbuf[i + 0];
    uint64_t mask = (*raw >> 1) & 0x1000100010001000;
    *raw |= mask;

    const int i2 = i >> 1;

    outbuf1[i2] = (float)inbuf[i + 0];
    outbuf1[i2 + 1] = (float)inbuf[i + 1];

    outbuf2[i2] = (float)inbuf[i + 2];
    outbuf2[i2 + 1] = (float)inbuf[i + 3];
    }

    Ako vidno, absolutne som sa nesnazil to optimalizovat na registre ci davat kompilatoru nejake hinty a vysledok je takmer 2x rychlejsi kod.

    Nemozem uverit, ze autor radsej vyzaduje najnovsiu generaciu procesorov, ktore mu usporiadaju 4 16-bitove slova do jedneho miesto toho, aby si to napisal sam.

    Nehovoriac o tom, ze ak by si autor ten bit #12 (to cislovanie 1az 13 v clanku je dost... nestandardne) dal na trochu vhodnejsie miesto (cize predpripravil data vo vhodnejsom formate), tak to otvara dvere dalsim optimalizaciam.

    Bez jedinej SSE instrukcie by sa ta slucka dala urychlit 3x - 4x.