2. PE and query read
在 GenASM-DC 中,每个处理元件(PE)负责查询模式(query read)的一个 位字(word)。当查询模式长度 超过硬件字长 时,整个查询模式会被拆分成多个 位的字,每个 PE 处理其中一个字。所有 PE 按顺序协作,共同表示完整的查询模式。
1. 每个 PE 负责哪一部分 query read?
- 字长限制:原始 Bitap 算法中,位向量长度等于查询模式长度 ,但硬件字长有限(如 位)。当 时,位向量必须存储在多个字中。
- PE 的划分:GenASM-DC 将查询模式分成 个 位的字。每个 PE 负责其中一个字。例如,若 位, 位,则需要 个 PE,每个 PE 处理 64 位的模式片段。
- 处理核心(PC):每个 PE 内部有一个处理核心(PC),它实现 Algorithm 1 的第 15–19 行,对自己负责的 位模式片段执行近似字符串匹配的位运算(删除、替换、插入、匹配),并生成对应的中间位向量。
因此,每个 PE 负责查询模式的一个连续 位片段,所有 PE 的片段按顺序拼接起来就是完整的查询模式。
2. PE 之间的 query read 有什么联系?
PE 之间不是独立的,它们通过**跨字移位(cross-word shift)**紧密协作,以支持多字位向量的正确移位。具体联系如下:
- 顺序连接:PE 按照字在查询模式中的位置顺序排列。假设 PE0 处理最低的 位(模式的前 个字符),PE1 处理接下来的 位,依此类推。它们共同构成一个完整的位向量。
- 进位传递:当进行左移操作(消耗一个模式字符)时,一个字的最高有效位(MSB)会溢出。这个溢出的位需要传递给相邻的更高位字,作为其最低有效位(LSB)。例如:
- PE0 的 MSB 输出连接到 PE1 的 LSB 输入。
- PE1 的 MSB 输出连接到 PE2 的 LSB 输入。
- 这样,左移时整个多字位向量就像一个连续的位串一样滑动。
- 同步计算:在同一个文本位置和编辑距离下,所有 PE 并行计算各自片段的中间位向量,然后这些片段组合起来形成完整的状态位向量 。PE 之间通过触发器(flip-flops)暂存进位位,以协调跨迭代的数据依赖。
- 存储独立:每个 PE 拥有自己专用的 TB-SRAM,存储该 PE 生成的中间位向量(匹配、插入、删除)。后续的 GenASM-TB 模块会从这些 TB-SRAM 中读取数据,进行回溯。
3. 与文本级并行的区别
需要注意的是,PE 对 query read 的划分属于模式级并行,即多个 PE 协作处理一个查询模式。而论文中提到的文本级并行是另一个层面:将参考文本分成多个重叠的子文本,每个子文本可以由一个完整的 PE 阵列(PB)独立处理,从而实现更粗粒度的并行。
总结
| 方面 | 说明 |
|---|---|
| PE 负责的部分 | 查询模式的一个 位字(word),所有 PE 按顺序覆盖整个查询模式。 |
| PE 间的联系 | 通过 MSB/LSB 进位传递实现跨字移位,共同维护完整的多字位向量。 |
| 协作方式 | 同步并行计算,每个 PE 生成对应片段的中间位向量,并存入自己的 TB-SRAM。 |
| 与文本并行的关系 | 模式级并行(PE 划分)与文本级并行(子文本划分)是两个正交的并行维度。 |
这种设计使得 GenASM-DC 能够支持任意长度的查询模式(包括长读长),同时保持高并行度和低内存带宽需求。