1

检查字符是否在字符串中应该相当简单,以使用 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;
}

根据神螺栓

https://godbolt.org/z/7ao1rG

clang 确实会发出一些不错的 simd,但 gcc 会展开循环。

这是 gcc 的继承限制,还是我可以更改我的代码以使其发出 simd 代替?

4

0 回答 0