发明名称 一种基于异构加速平台的二维相位解缠绕方法
摘要 本发明设计了一种基于异构加速平台的二维相位解缠绕方法。在Branch cut步骤中加入了局部匹配,克服了并行实现的瓶颈;在算法的FloodFill步骤中使用Block的动态组织方式,解决了数据依赖;通过合并和压缩存储、创造数据的伪边界等优化方法,提高了执行速度,更大化地利用了硬件资源。本发明满足了二维相位解缠绕算法的实时性要求,也对并行编程和克服数据依赖提供了一定的指导意义。
申请公布号 CN103942095A 申请公布日期 2014.07.23
申请号 CN201410101628.0 申请日期 2014.03.18
申请人 中国科学院软件研究所 发明人 吴振华;马文静;龙国平;李玉成
分类号 G06F9/46(2006.01)I;G06T1/00(2006.01)I 主分类号 G06F9/46(2006.01)I
代理机构 北京科迪生专利代理有限责任公司 11251 代理人 成金玉;孟卜娟
主权项 一种基于异构加速平台的二维相位解缠绕方法,其特征在于:所述方法各个步骤均在异构加速平台上实现,实现步骤如下:(1)异构加速平台上定义相位数据中不一致的点,即Residue值为+/‑1的点;(11)把相位数据分块,读入共享内存,线程组(Block)中的每个线程计算一个点的Residue值,并保存;为了保证每个Block的最后一行和最后一列能按照一样的规则计算,每个Block需要多读入一行和一列数据;(12)在求出Residue值之后,进行寻找并匹配偶极子操作(Dipole cut),所述偶极子是指相邻并且有着相反极性的Residue值的点,如果该点的Residue值为+1,在该点周围寻找极性相反的点,如果有极性相反的点,则这两个点标记为BranchCut点,并分别把这两个对应的Residue值标记为+2或者‑2,得到Residue数据;(2)异构加速平台上匹配不一致点的过程,即Branch cut步骤,该步骤分为两个过程:局部匹配和全局匹配;(21)首先进行局部匹配,把Residue数据分块后读入共享内存,在每一个Block内进行Branch cut操作,先由Residue值为+1的去寻找最近Residue值极性为负(‑1、‑2)的点或者数据边界,直到超过搜索范围;同步操作之后再由‑1的点去寻找极性为正的点,每一个Block多读N圈的Residue输入数据,即上下左右各多读N行,N为一个正整数参数,提高精度;如果该Block有Residue值非0的点未匹配,则把对各Block的标识(BlockFlag)写为+1或者‑1,其极性跟Residue值极性相同;(22)然后进行全局匹配,全局匹配与局部匹配使用一样的线程配置,采用一个线程读取BlockFlag标志,如果该BlockFlag标志为0,则结束;如果该BlockFlag标志不为0就说明该Block需要进行全局匹配;全局匹配过程时,若BlockFlag值为+1,则找到最近的BlockFlag为‑1或者边界上的Block,计算它们之间的最远距离和最近距离作为搜索范围,在该范围中肯定能找到匹配的点,得到匹配后的BranchCut数据,BranchCut即各个点经过Branch cut操作后的值;(3)在异构加速平台上实现FloodFill步骤,输出解缠绕后的相位数据,具体实现如下:输入匹配后的BranchCut数据,BranchCut数据中选取种子点作为起始点,标记为已经被解缠绕;所述种子点不能是被Branch cut的点,通过有限次重启设备函数Kernel,以一种动态的Block的组织方式把种子状态从中心往四周扩散;其中在Block内部,每个线程一次处理一行或者一列数据,然后四个方向,即从左到右、从上到下、从右到左、从下到上依次进行解缠绕处理,一个线程处理一行或一列后进行解缠绕处理需要一次同步,直到整个Block中没有需要被解缠绕的点时停止迭代,输出解缠绕后的相位数据。
地址 100190 北京市海淀区中关村南四街4号