■ このスレッドは過去ログ倉庫に格納されています
【トリップ検索】MERIKEN's Tripcode Finder@sc
- 344 :◆YSRKENzzasTCaYr:2014/05/17(土) 21:42:09.88 ID:HlllZZ0dQ
- >>342
もちろんそうなんですが、SIMDで4つ同時に処理しているので、
「_mm_movemask_epi8が0だった」=「4つともアウト」なんですよ……
_mm_cmpeq_epi32を二周するのはアレっぽいので、次のように書き換えて比較ベンチしました。
MakeTrip_SSE2(Key_SSE2, Trip_SSE2);
for(uint64_t n = 0; n < PatternSize; ++n){
isMatch = true;
isMatch_SSE2 = Increment_SSE2[7];
for(uint k = 0; k < TripArraySize; ++k){
isMatch_SSE2 = _mm_and_si128(isMatch_SSE2, _mm_cmpeq_epi32(DecodedPattern_SSE2[n][k], _mm_and_si128(Trip_SSE2[k], PatternMask_SSE2[n][k])));
if(_mm_movemask_epi8(isMatch_SSE2) == 0x0){
isMatch = false;
break;
}
}
if(isMatch == true){
_mm_store_si128((__m128i*)isMatch_, isMatch_SSE2);
for(uint k = 0; k < SIMD_SSE2; ++k){
if(isMatch_[k] != 0){
Result[t] += PutTrip_SSE2(Key_SSE2, Trip_SSE2, k) + "\n";
}
}
}
}
結果、はっきりとした性能差は出ませんでした。まあ、ヒットすること前提の場合、こちらの方がいいのかもしれません。
総レス数 1002
297 KB
新着レスの表示
掲示板に戻る
全部
前100
次100
最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★