JW *_*W O 0 c++ binary performance bioinformatics char
我希望提高我的生物信息学算法的速度,这需要比较“A”、“C”、“G”、“T”之一的字符(例如计算“A”==“C”)
由于字符的大小为 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 周期来计算。
如果你想提高你的速度,你可以用 2 位字来表示你的字符,但在 64 位变量中打包 32 个字,并一次运行 32 个字的比较,从而将 CPU 周期量减少 32 倍。
现在,如果您想比较数组中顺序存储的多个 64 位变量,您可以使用memcmp来正确优化顺序扫描。