Schnellste Methode zum Entpacken von 32 Bit in einen 32-Byte-SIMD-Vektor
32 Bits in eineruint32_t
Was ist im Speicher der schnellste Weg, um jedes Bit in ein separates Byte-Element eines AVX-Registers zu entpacken? Die Bits können sich innerhalb ihres jeweiligen Bytes an einer beliebigen Position befinden.
Edit: Zur Verdeutlichung meine ich, Bit 0 geht zu Byte 0, Bit 1 zu Byte 1. Offensichtlich sind alle anderen Bits innerhalb des Bytes auf Null. Das Beste, was ich im Moment kann, ist 2PSHUFB
und mit einem Maskenregister für jede Position.
Wenn dasuint32_t
Wenn es sich um eine Bitmap handelt, sollten die entsprechenden Vektorelemente 0 oder nicht 0 sein. (d. h. so könnten wir eine Vektormaske mit a erhaltenvpcmpeqb
gegen einen Vektor von Null).