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).

https://software.intel.com/en-us/forums/topic/283382

Antworten auf die Frage(1)

Ihre Antwort auf die Frage