Optimization 优化多字节的逻辑和/或

Optimization 优化多字节的逻辑和/或,optimization,Optimization,假设我想快速找到一个字节(想想memchr)。如果我愿意,我可以: 展开搜索循环:比较多个后续数组元素、逻辑和结果等 使用XORingunion{uint64\t,char[8]}*和包含重复8次搜索字节的引用对字节进行批比较 第二个优化是无效的,除非我有一个CPU指令,用于逻辑地将所有字节(宽值的每个字节都视为二进制值)乘以一个值 通用体系结构(x86、ARM、MIPS、SPARC等)是否对此进行了扩展 这个问题不是针对C语言的。你是在问矢量指令吗?许多平台都有它们(例如,英特尔的SSEx

假设我想快速找到一个字节(想想
memchr
)。如果我愿意,我可以:

  • 展开搜索循环:比较多个后续数组元素、逻辑和结果等
  • 使用XORing
    union{uint64\t,char[8]}*
    和包含重复8次搜索字节的引用对字节进行批比较
第二个优化是无效的,除非我有一个CPU指令,用于逻辑地将所有字节(宽值的每个字节都视为二进制值)乘以一个值

通用体系结构(x86、ARM、MIPS、SPARC等)是否对此进行了扩展


这个问题不是针对C语言的。

你是在问矢量指令吗?许多平台都有它们(例如,英特尔的SSEx和AVX),但它们在不同的平台上差别很大。在尝试做任何棘手的事情之前,先测量一下memchr()的速度。@OliverCharlesworth是的。具体的建筑说明很好。@gnasher729很好,但不是我想要的答案。不过,它的实现很有趣。使用AVX512,您可以一次对64字节执行操作,因此它比uint64\t技巧快得多