5

_mm_shuffle_epi8誰かがSSSE3組み込みについて説明してもらえますか? 16個の8ビット整数をシャッフルすることは知っていますが、__m128iこれをどのように使用できるかはわかりません。

_mm_shuffle_epi8私は基本的に、パフォーマンスを向上させるために以下の関数を変更するために使用したいと考えています。

while(not done)
    dest[i+0] = (src+j).a;
    dest[i+1] = (src+j).b;
    dest[i+2] = (src+j).c;
    dest[i+3] = (src+j+1).a;
    dest[i+4] = (src+j+1).b;
    dest[i+5] = (src+j+1).c;
    i+=6;
    j+=2;
4

2 に答える 2

11

_mm_shuffle_epi8(よりよく知られているpshufb) は、基本的にこれを行います。

temp = dst;
for (int i = 0; i < 16; i++)
    dst[i] = (src[i] & 0x80) == 0 ? temp[src[i] & 15] : 0;

ここで使用できるかどうかについては、関連する型を知らずに判断することはできません。いずれにせよ、宛先は 6 バイトのブロック (または単語? または dwords?) であるため、「いい」とは言えません。展開して、多くのシフトと OR 操作を行うことで、これを機能させることができます。

于 2012-10-08T09:25:04.060 に答える