2.2 Graph Myers's Bitvector (GBV)
GBV 全称 Graph Myers's Bitvector,是 GraphAligner 中用于长读段比对的一个动态规划内核。它的核心思想来自经典的 Myers's bitvector 算法,但为了适应泛基因组图,做了重要改动。理解它可以从“线性 Myers 位向量”开始,再看图版本改了什么,最后看它为什么快、为什么不够准。
1. 基础:Myers's Bitvector 在线性比对中怎么工作
Myers's bitvector 是一种用位向量表示动态规划矩阵行的算法。它和 Smith-Waterman 最大的区别是:
- Smith-Waterman 使用仿射间隙评分,计算单元格 时依赖左边 、左上 、上边 三个方向。
- Myers's bitvector 不支持仿射间隙评分,只用简单的编辑距离。这打破了对 的依赖,于是可以把一整行压缩成一个位向量。
因为是位向量,就可以用 SIMD 并行操作:机器字长通常是 位,一次就能处理 个单元格。行与行之间按顺序计算,行内并行。
所以线性 Myers 的特点是:
用位向量 + 位运算,快速计算编辑距离;牺牲仿射间隙评分,换来高并行度和低计算量。
2. 图版本:GBV 把“行”变成“节点”
在 GraphAligner 中,参考不是一条线性序列,而是一个泛基因组图。GBV 的做法是:
- 每个节点只包含一个碱基对。
- 每一行对应一个节点。
- 节点之间有有向边,指向它的子节点。
也就是说,动态规划矩阵不再是一行一行对应参考序列的连续位置,而是每个节点一行,行与行之间通过图的边连接。
计算某个节点的行时,不能只看上一个节点,而要看它的所有父节点。因为一个节点可能有多个入边,来自多个前驱节点。
论文里说:
To compute the next row, all the parents are merged into one bitvector, and then that bitvector is used to compute the row.
意思是:先把所有父节点的位向量合并成一个位向量,再用这个合并后的位向量去计算当前节点的行。这个“合并”是图带来的新操作,对应图中多条入边的信息汇聚。
3. 环状图导致“重算”
泛基因组图可能包含环。在线性比对中,行只能从前一行推出来,不会回头影响前面。但在图里,当前正在计算的行 可能会改变它父节点 的值。
于是 GBV 不能只算一遍就结束。有些行需要反复重算,直到结果稳定。
为了管理哪些行需要重算,GBV 使用一个优先队列:
- 当某个父节点的值发生变化时,就把依赖它的子节点行推入优先队列。
- 然后按队列顺序处理这些行,直到没有行需要再更新。
这就像在图上传导信息:一个节点的变化会沿着边传播,可能绕回来影响自己,所以需要迭代到收敛。
4. 性能特征:分支难预测,但 SIMD 并行度高
GBV 为了适应图,引入了不少不可预测的控制流:
- 合并多个父节点时,父节点数量不固定。
- 环导致重算,重算顺序不确定。
- 需要优先队列管理待处理节点。
- 内核里还包含 traceback 步骤。
这些都会造成分支预测错误。论文的微架构分析也指出,GBV 主要受 Bad Speculation 限制,部分来自 traceback,部分来自父节点合并操作。
但 GBV 也有明显优势:
- 位向量操作天然适合 SIMD,一次处理 位。
- 计算量比仿射评分的 Smith-Waterman 小很多。
- 对于长读段,GraphAligner 过滤少,比对工作量大,GBV 用“降低精度”换来了“可接受的速度”。
所以论文说:
These changes to the algorithm made to accommodate graphs introduce unpredictable branching behavior to GBV, but the high level of SIMD parallelism makes the algorithm a fast alternative to more accurate affine scoring methods.
翻译过来就是:图带来的改动让 GBV 分支不可预测,但高 SIMD 并行度使它成为一个快速替代方案,代价是不如仿射评分方法准确。
5. 和 GSSW 的对比
| 特性 | GSSW | GBV |
|---|---|---|
| 使用工具 | Vg Map | GraphAligner |
| 评分方式 | 仿射间隙评分 | 非仿射,简单编辑距离 |
| 准确性 | 高 | 较低 |
| 速度 | 较慢 | 较快 |
| 并行方式 | SIMD Smith-Waterman | 位向量 + SIMD |
| 图适应 | 节点内部 SIMD,节点边界合并父节点 | 每节点一行,父节点位向量合并 |
| 主要瓶颈 | 核心受限 + 内存受限 | 分支预测错误 + 核心受限 |
| 适用场景 | 短读段,高精度 | 长读段,高通量 |
6. 一句话总结
GBV 是 Myers's bitvector 的图版本。它把每个单碱基节点当作一行,用位向量和 SIMD 并行计算编辑距离;计算时合并所有父节点的位向量。因为图可能有环,当前行可能影响父节点,所以要用优先队列反复重算直到稳定。它分支难预测,但 SIMD 并行度高,因此成为长读段图比对中一个快速但精度较低的方案。