4. PE and hops
在 SeGraM 的 BitAlign 中,图节点线性化并拓扑排序后,hop 边产生的多条路径并不会被显式枚举。BitAlign 采用的是位向量动态规划,它把所有可能路径的信息并行地压缩到位向量中,通过拓扑排序保证每个节点只在其所有后继处理完之后才被处理,从而一次性合并所有后继路径的状态。因此,多条路径不会导致路径爆炸,也不会需要单独追踪每条路径。
具体机制如下:
1. 拓扑排序保证处理顺序
BitAlign 的输入是线性化且拓扑排序后的参考子图。拓扑排序确保:
- 如果存在一条有向边(包括 hop)从节点 指向节点 ,那么在线性化序列中, 一定排在 的后面。
- 因此,当算法逆序遍历节点(从后往前)时,处理节点 时,它的所有后继节点 的状态已经计算完毕。
这样,无论从 出发有多少条路径,它们都只会经过 的后继节点,而这些后继的状态已经就绪。
2. 对每个节点,合并所有后继的状态
BitAlign 算法(论文 Algorithm 1)在处理每个节点 时,会遍历它的所有后继节点:
for j in subgraph-nodes[i].successors do
R0 ← ((R[j][0] << 1) | curPM) & R0
...
这里的 subgraph-nodes[i].successors 包括两类后继:
- 直接相邻的后继:通过普通边连接。
- hop 后继:通过非相邻边(即 hop)连接,可能是由于插入、删除或结构变异产生的。
对于每个后继 ,算法用它的状态位向量 R[j][d] 来更新当前节点 的状态。更新操作是简单的位运算(移位、与、或),并且会与当前累积的结果 R0 进行合并。
这意味着:所有从 出发、经过不同后继的路径,它们的匹配状态被同时考虑并合并到 R0 中。最终 R0 表示的是从节点 出发,在所有可能路径中能够达到的最优匹配状态(例如,最小编辑距离下的部分匹配信息)。
3. 位向量天然支持多条路径并行
位向量方法的核心在于:每个位向量的一位对应 query read 中的一个位置。当算法对多个后继的状态进行位运算时,实际上是在并行地计算所有路径在同一 query 位置上的匹配情况。
例如,对于 match 位向量:
R0 ← ((R[j][0] << 1) | curPM) & R0
R[j][0]是后继 在 0 错误下的状态。- 左移一位表示消耗一个 query 字符。
- 或上
curPM表示当前参考字符与 query 字符的匹配。 - 与上
R0表示取所有后继路径中都满足匹配的那些位置。
这样,多条路径的信息被“与”或“或”操作合并,最终得到的是在所有路径中都能成立的状态。对于编辑距离 ,类似地合并 deletion、substitution、insertion 和 match 位向量。
因此,不需要枚举路径,也不需要为每条路径维护单独的状态。位向量 DP 天然地并行处理了所有路径。
4. 硬件支持:HopBits 和 Hop Queue
在硬件层面,BitAlign 使用 HopBits 矩阵和 hop queue register 来支持 hop 后继的访问:
- HopBits 矩阵:一个邻接矩阵,表示节点之间是否存在 hop。当处理节点 时,HopBits 告诉硬件哪些后继节点 是通过 hop 连接的。
- Hop Queue Register:每个 PE 有一个 hop queue,存储之前节点产生的
R[d]位向量。当当前节点需要某个 hop 后继的状态时,如果该后继在拓扑顺序中距离较远,它的状态可能已经被移出常规的 PE 间传递链,但 hop queue 会保留它,直到当前节点需要时再取出。 - 根据 HopBits 的值,硬件选择使用实际的 hop 位向量,或者使用全 1 的位向量(表示无影响)。
论文中通过设置 hop limit = 12 来限制 hop 的最大距离,覆盖超过 99% 的 hop。这是因为大多数遗传变异是 SNP 或小 indel,产生短距离 hop;长距离的结构变异很少。这样既保证了准确性,又控制了硬件开销。
5. 最终结果:所有路径的最优对齐
通过上述合并,BitAlign 在处理完整个线性化子图后,会得到每个节点在不同编辑距离下的状态位向量。最终,算法通过 traceback 找到从 query read 到参考子图的最优对齐(最小编辑距离或最高分)。这个最优对齐是在所有可能路径中选出的,因为每个节点的状态已经包含了所有后继路径的信息。
因此,hop 边产生的多条路径被位向量 DP 统一处理,不会导致路径数量爆炸,也不需要显式枚举。
总结
- 拓扑排序确保后继节点先于当前节点处理。
- BitAlign 对每个节点遍历所有后继(包括 hop),用位运算将后继状态合并到当前节点的状态中。
- 位向量 DP 并行处理所有路径,每条路径的信息被压缩在位向量中,通过“与/或/移位”操作同时考虑。
- 硬件用 HopBits 矩阵和 hop queue 支持 hop 后继的访问,并通过 hop limit 限制硬件开销。
- 最终得到的是所有路径中的最优对齐,而不是单独追踪每条路径。
所以,SeGraM 处理 hop 边多条路径的方式是:不枚举路径,而是用拓扑排序 + 位向量动态规划,将所有路径的信息并行合并,一次性计算出最优匹配。