并行链算法与MPI程序松弛弹性的精确动态分析
在生物信息学和并行计算领域,并行链算法以及MPI程序的性能优化与正确性验证是重要的研究方向。本文将介绍并行链算法的相关内容,包括其在基因组比较中的应用、波前分解算法,以及MPI程序松弛弹性的精确动态分析。
并行链算法
在基因组比较中,由于重复序列的存在,反链块的数量非常多。例如,大约50%的人类基因组由重复序列组成。一个基因组中重复两次的区域与另一个基因组中的一个区域匹配,会形成2个反链块,它们排列在与一个轴平行的线上。
波前分解
在之前的算法中,单个扫描线访问不同空间划分中块的所有起点和终点。现在讨论在不同空间划分中使用多条扫描线,即波前分解。具体步骤如下:
1. 创建Ps个集合(称为条带),每个集合包含几乎相等数量的块。这些条带是根据块起点的x2坐标构建的。
2. 若所有块b′ ≪b都已处理,则称块b的起点是可计算的。
3. 将每个条带分配给一个处理器,该处理器运行算法2中描述的线扫描过程。如果起点不可计算,处理器会停止线扫描并等待状态改变。
以下是实现波前分解的算法3:
1. 按x1坐标升序对m个块的所有起点和终点进行排序,并将它们存储在数组points中。
2. 将数组points划分为Ps个大小相等的子数组points1, points2, .., pointsPs。
3. 对于每个块b,创建点(end(b).x2, .., end(b).xk),并将其存储在列表Temp中。
4. 在Temp中的点集上创建Pd = Pbuk × Ph个子桶。
5. 为每个子桶i创建