我试图使用SSE来加速任务:
在高级方面:
string a = "^&a&*";
string b = "abcdef";
bool c = a_contain_any_alphabet_in_b(a, b);
使用SSE(伪代码)的更多细节:
a = _mm_set_epi8('^', .....);
b = _mm_set_epi8('a', .....);
mask = _mm_cmpestrm (a, la, b, lb, imm8); // _SIDD_CMP_EQUAL_ANY toggle
... and then extract mask
我的问题是如果我的b
包含128位以上怎么办?
诸如我要检查字符串a
之类的情况包含b
中记录的任何字母(a〜zA〜Z)。但是字母集是8*52
位,比128
大。
我发现的幼稚方法是将b
分成许多__mm128i
。
mask1 = _mm_cmpestrm (a, la, b1, lb, imm8);
mask2 = _mm_cmpestrm (a, la, b2, lb, imm8);
...
and do some operation with all masks
我想知道有什么方法可以做得更聪明吗?