Skip to main content

2. PE and query read

在 GenASM-DC 中,每个处理元件(PE)负责查询模式(query read)的一个 ww 位字(word)。当查询模式长度 mm 超过硬件字长 ww 时,整个查询模式会被拆分成多个 ww 位的字,每个 PE 处理其中一个字。所有 PE 按顺序协作,共同表示完整的查询模式。


1. 每个 PE 负责哪一部分 query read?​

  • 字长限制:原始 Bitap 算法中,位向量长度等于查询模式长度 mm,但硬件字长有限(如 w=64w=64 位)。当 m>wm > w 时,位向量必须存储在多个字中。
  • PE 的划分:GenASM-DC 将查询模式分成 ⌈m/w⌉\lceil m/w \rceil 个 ww 位的字。每个 PE 负责其中一个字。例如,若 m=10,000m=10{,}000 位,w=64w=64 位,则需要 ⌈10000/64⌉=157\lceil 10000/64 \rceil = 157 个 PE,每个 PE 处理 64 位的模式片段。
  • 处理核心(PC):每个 PE 内部有一个处理核心(PC),它实现 Algorithm 1 的第 15–19 行,对自己负责的 ww 位模式片段执行近似字符串匹配的位运算(删除、替换、插入、匹配),并生成对应的中间位向量。

因此,每个 PE 负责查询模式的一个连续 ww 位片段,所有 PE 的片段按顺序拼接起来就是完整的查询模式。


2. PE 之间的 query read 有什么联系?​

PE 之间不是独立的,它们通过**跨字移位(cross-word shift)**紧密协作,以支持多字位向量的正确移位。具体联系如下:

  • 顺序连接:PE 按照字在查询模式中的位置顺序排列。假设 PE0 处理最低的 ww 位(模式的前 ww 个字符),PE1 处理接下来的 ww 位,依此类推。它们共同构成一个完整的位向量。
  • 进位传递:当进行左移操作(消耗一个模式字符)时,一个字的最高有效位(MSB)会溢出。这个溢出的位需要传递给相邻的更高位字,作为其最低有效位(LSB)。例如:
    • PE0 的 MSB 输出连接到 PE1 的 LSB 输入。
    • PE1 的 MSB 输出连接到 PE2 的 LSB 输入。
    • 这样,左移时整个多字位向量就像一个连续的位串一样滑动。
  • 同步计算:在同一个文本位置和编辑距离下,所有 PE 并行计算各自片段的中间位向量,然后这些片段组合起来形成完整的状态位向量 R[d]R[d]。PE 之间通过触发器(flip-flops)暂存进位位,以协调跨迭代的数据依赖。
  • 存储独立:每个 PE 拥有自己专用的 TB-SRAM,存储该 PE 生成的中间位向量(匹配、插入、删除)。后续的 GenASM-TB 模块会从这些 TB-SRAM 中读取数据,进行回溯。

3. 与文本级并行的区别​

需要注意的是,PE 对 query read 的划分属于模式级并行,即多个 PE 协作处理一个查询模式。而论文中提到的文本级并行是另一个层面:将参考文本分成多个重叠的子文本,每个子文本可以由一个完整的 PE 阵列(PB)独立处理,从而实现更粗粒度的并行。


总结​

方面说明
PE 负责的部分查询模式的一个 ww 位字(word),所有 PE 按顺序覆盖整个查询模式。
PE 间的联系通过 MSB/LSB 进位传递实现跨字移位,共同维护完整的多字位向量。
协作方式同步并行计算,每个 PE 生成对应片段的中间位向量,并存入自己的 TB-SRAM。
与文本并行的关系模式级并行(PE 划分)与文本级并行(子文本划分)是两个正交的并行维度。

这种设计使得 GenASM-DC 能够支持任意长度的查询模式(包括长读长),同时保持高并行度和低内存带宽需求。