4.3 Traceback
你问的 Traceback,简单说就是:
分数矩阵只告诉你“最优比对得了多少分”,但不告诉你“具体怎么比”。
Traceback 就是沿着之前存好的“指针”倒着走,把最优比对的具体路径还原出来。
没有 traceback,你只知道两条序列相似度是 100 分,但不知道哪个碱基对哪个碱基、哪里插了 gap、哪里发生了替换。
对生物分析来说,具体比对结果才是最终要的东西。
下面以 TALCO-XDrop 为例,从最基础讲起。
1. 先看经典 DP:为什么需要 traceback?
假设两条短序列:
R = A C
Q = A G
用 Needleman-Wunsch 打分:匹配 +2,错配 -1,gap -1。
填分数矩阵时,每个格子 会算出最优分数,同时记录这个最优分数是从哪个邻居来的:
- 从左上角来 → 表示 和 对齐(匹配或错配)
- 从上方来 → 表示 对 gap
- 从左方来 → 表示 对 gap
这个“从哪来”的记录就是 traceback pointer。
矩阵填完后,右下角是最终最优分数。
然后从右下角开始,沿着指针一步步往回走,直到左上角。
走出来的路径就告诉你每一步是匹配、错配、插入还是删除。
比如这个例子,回溯路径是:
(2,2) → (1,1) → (0,0)
对应:
R: A C
Q: A G
第一步 来自 ,表示 和 错配;
来自 ,表示 和 匹配。
最终比对:
A C
A G
所以 traceback 的作用就是:把分数变成具体比对。
2. TALCO-XDrop 里面,traceback 为什么不能一次性做?
经典 DP 会把整个 矩阵的指针都存下来,最后从终点一次回溯到起点。
但长序列的矩阵太大,片上内存根本放不下。
TALCO 的做法是 切 tile:
- 每个 tile 只覆盖矩阵的一小块。
- 每个 tile 只存自己这一小块的 traceback 指针。
- 算完一个 tile,就从这个 tile 的某个起点回溯,得到这一段的 partial alignment。
- 然后滑动到下一个 tile,继续算、继续回溯。
- 最后把所有 tile 的 partial alignment 拼起来,就是完整比对。
所以 TALCO-XDrop 里的 traceback 不是全局一次回溯,而是 每个 tile 内部分别回溯,最后拼接。
3. TALCO-XDrop 硬件里的 traceback 具体在做什么?
回顾图 7a 的硬件结构:
- PE 阵列算分数;
- 每个 PE 算出一个格子时,除了分数,还会生成一个 4-bit traceback pointer;
- 这些指针存到每个 PE 专用的 Traceback Pointer SRAM;
- 同时,每个 stripe 的起始和结束位置存到 Start/Stop SRAM;
- 到达 marker 后,Phase 2 检测收敛,确定这个 tile 的回溯起点 ;
- 然后 Traceback Logic 从 开始,根据 SRAM 里的指针一步步走,走出这个 tile 的 partial alignment。
4-bit 指针是什么?
每个格子的最优分数 可能来自三个地方:
- 对角线:
- 插入状态
- 删除状态
所以需要 2 bits 表示 来自哪里。
然后 和 各自还需要 1 bit 表示它们是从同状态延长还是从 打开。
总共 4 bits。
回溯时:
- 如果 来自对角线,就知道这一步是匹配或错配;
- 如果 来自 ,就知道这一步是插入;
- 如果 来自 ,就知道这一步是删除;
- 再看 或 的 bit,决定是继续延长 gap 还是打开新 gap。
这样一步步走,就能还原出这一段的比对。
4. 一个 TALCO-XDrop 的类比例子
假设整个长矩阵被切成两个 tile。
Tile 1
- Phase 1:正常算,存指针。
- 到达 marker,Phase 2 检测到所有回溯路径汇聚到 marker 上的格子 。
- Traceback Logic 从 开始,沿指针回溯,得到 Tile 1 的 partial alignment,比如:
R: A C G T
Q: A C - T
这一段表示:前三个碱基匹配,第三个位置有一个删除。
Tile 2
- 用 Tile 1 的 marker 分数初始化。
- 继续算,再找到收敛点,回溯得到 Tile 2 的 partial alignment,比如:
R: A C
Q: A A
拼接
把两段拼起来,就是完整比对:
R: A C G T A C
Q: A C - T A A
如果没有 traceback,你只知道总分数是多少,但拼不出这个具体结果。
5. 为什么 TALCO 要分 Phase 1 和 Phase 2 来配合 traceback?
- Phase 1:正常算,存 traceback 指针。这些指针是回溯的“原材料”。
- Phase 2:不存指针,只传播 convergence pointer,目的是找到所有路径的汇聚点 。
- 找到 后,就知道:无论最优路径从后面哪里来,它回溯到这个 tile 时一定经过 。
- 于是从 开始回溯,就能保证这个 tile 的 partial alignment 一定包含在完整最优比对中。
如果像 GACT 那样贪心选边界最高分,可能选错起点,回溯出来的路径就不是最优的。
TALCO 用收敛点作为回溯起点,保证了正确性。
6. 一句话总结
Traceback 就是把“分数矩阵”变成“具体比对”的过程。
在 TALCO-XDrop 中,每个 PE 算分时顺便生成 4-bit 指针并存到 SRAM;到达 marker 后,Phase 2 找到所有回溯路径的汇聚点 ;Traceback Logic 从 出发,根据 SRAM 里的指针一步步倒着走,走出当前 tile 的 partial alignment;多个 tile 的 partial alignment 拼起来,就是最终完整比对。没有 traceback,你只有分数,得不到具体的碱基对应关系。