检查字符是否在字符串中应该相当简单,以使用 simd 加速。我希望现代自动矢量化能给我带来可移植性+速度,但我不知道如何给编译器足够的提示来做到这一点。
这是我尝试过的:
static char find1[] = {
'"','"','"','"','"','"','"','"',
'\\','\\','\\','\\', '\\','\\','\\','\\'
};
int match8(char *tpl)
{
int r = 0;
for (int at = 0; at < 8; at++) {
r |= (tpl[at] == find1[at]);
}
for (int at = 0; at < 8; at++) {
r |= (tpl[at] == find1[at + 8]);
}
return r;
}
根据神螺栓
clang 确实会发出一些不错的 simd,但 gcc 会展开循环。
这是 gcc 的继承限制,还是我可以更改我的代码以使其发出 simd 代替?