比较 'A'、'C'、'G'、'T' 字符的最快方法

Fastest way to compare chars of 'A', 'C', 'G', 'T'

我希望提高我的生物信息学算法的速度,该算法需要比较 'A'、'C'、'G'、'T' 之一的字符(例如计算 'A' == 'C')

由于char的大小是8位,最坏情况下需要8次二进制数比较。我的猜测是,通过将 'A'、'C'、'G'、'T' 表示为一对二进制数(例如 'A' 为 make_pair( false,false)), 我认为我可以将速度提高 3~4 倍,因为它现在最多只需要 2 次二进制比较。

我尝试使用一对布尔值,但速度实际上下降了大约 30%。

表示四个字符和计算相等性的最快方法是什么?内存使用对我来说不是什么大问题。

供您参考,我使用的是 C++11 编译器。先感谢您。

可以使用一条指令比较的位数取决于您的 CPU 体系结构。 64 位架构意味着您可以 运行 在一条指令中对 64 位字进行计算,而不是 64 条指令。因此比较两个 8 位字 ('A'=='G') 正好需要 1 CPU 周期来计算。

如果你想提高速度,你可以用2bit的词表示你的字符,但是把32个词打包在一个64bit的变量里,运行一次比较32个词,这样就减少了CPU 循环 32 倍。

现在,如果您想要比较多个顺序存储在数组中的 64 位变量,您可以使用 memcmp 来适当优化顺序扫描。

也许从不同的初始概念重新开始... 大约十年前,我从帮助某人学习这些东西中挖出了一张旧笔记。也许它可以给你一个有益的不同视角。

https://gist.github.com/TomConlin/6cd976151d36dd3e2a9fb34842b9c66e