C++でコード化された文字列一致アルゴリズムでSSE4.2命令を使用しようとしています。SSE4.2命令の使用小さなパターンのPCMPESTRM
私はこれらの指示を使用してより小さいパターンにマッチさせる方法を理解しておらず、誰かがそれを助けてくれることを望んでいました。
コード例では、パックされた文字列「i am an antelope」内のパターン「ant」を検索しようとしています。私は、SSE4.2命令を含めることnmmintrin.hための#includeを持っている。これは、今、私のコードをある8
たインデックスに1を除くすべてゼロに設定されたマスクであることが結果を望んでいるだろう:
void print128_num(__m128i var)
{
uint8_t *val = (uint8_t*) &var;
printf("Text: %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i \n",
val[0], val[1], val[2], val[3], val[4], val[5],
val[6], val[7], val[8], val[9], val[10], val[11],
val[12], val[13], val[14], val[15]);
}
int main(){
__m128i s = _mm_set_epi8('e','p','o','l','e','t','n','a',' ','n','a',' ','m','a',' ','i');
__m128i p = _mm_set_epi8(0,0,0,0,0,0,0,0,0,0,0,0,0,'t','n','a');
print128_num(s);
print128_num(p);
__m128i res = _mm_cmpestrm(s, 16, p, 3, 0);
print128_num(res);
return 0;
}
初期化関数で引数を少なくすることができないため、すべてのゼロを追加しました。私はこれが間違っていることを認識していますが、それをどうやって行うのか分からず、いくつかの非常に必死の試みをしました。
とにかく、これは私がコンパイルする方法である:G ++ -g sse4test.cpp -o sse4test -std = C++ 11 -msse4.2
と、これは私の出力である:
IText: 105 32 97 109 32 97 110 32 97 110 116 101 108 111 112 101
Text: 97 110 116 0 0 0 0 0 0 0 0 0 0 0 0 0
Text: 7 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
本当に分かりません。 (最後の行)。
ご協力いただければ幸いです。