一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于GPU的并行相位解卷绕方法及系统

2022-12-20 02:10:47 来源:中国专利 TAG:

一种基于gpu的并行相位解卷绕方法及系统
技术领域
1.本发明属于信号处理技术领域,具体涉及一种基于gpu的并行相位解卷绕方法及系统。


背景技术:

2.相位解卷绕是阵列信号相位差估计、无线电干涉测量、光学干涉仪、核磁共振成像等技术中的一个关键且基础的算法。以天线组阵信号相位差估计为例,两天线接收到同一信源的信号,互相关运算得到天线间的互相关谱,之后经过反正切相位鉴别器求得天线间的相位差。由于反正切运算,获得的相位值被限制在[-π,π]之间。这些处于[-π,π]之间的相位就被称作卷绕相位,为了得到真实的相位值信息,就必须将卷绕相位恢复为真实值。该过程就是相位解卷绕。
[0003]
在躁扰较小时,只要从相位的第一个值开始逐点向后判断并通过加减2π还原真值就可完成解卷绕。但信号处理、光学成像等系统对实时性的要求较高,使用上述的串行算法对大量数据进行解卷绕将导致实时性急剧恶化。并且解卷绕的抗干扰能力是目前主要的研究方向,关于解卷绕实时性的研究鲜有报道。因此,迫切地需要寻求一种准确性好、实时性强的解卷绕方法。
[0004]
近年来,随着高性能计算的发展,图形处理器(graphic processing unit,gpu)从专用于图像领域的处理器逐渐向着通用并行计算平台转变。gpu已发展成为一种高度并行化、多线程、多核的通用计算设备,具有杰出的计算能力和极高的存储器带宽,并被越来越多地应用于图形处理之外的计算领域。gpu的运算核心数远多于cpu,更适合于数据密集型计算的并行加速处理。nvidia于2007年推出了计算统一设备架构(compute unified device architecture,cuda),简化了gpu系统的开发流程,使得gpu通用计算技术在信号处理领域得到更为广泛的应用。目前,基于gpu的信号处理系统具有强大的并行处理能力,能够在短时间内通过并行处理完成大量数据的运算,在gpu资源得到充分利用时,可以实现对信号的实时处理要求。因此,基于gpu的信号处理技术成为众多领域的热点,如射电天文、雷达、无线通信、人工智能等。
[0005]
相位卷绕现象一般出现在反正切相位鉴别之后,相位的主值被限制在了[-π,π]之间。这些被限制在[-π,π]之间的相位,与真实的相位相差2k
·
π(k为整数)。假设真实的相位为θ,卷绕的相位为则有:
[0006][0007]
常见的相位卷绕现象分为两类,分别为直线型相位卷绕和曲线型相位卷绕。直线型相位卷绕主要出现在干涉测量中,表现为直线的截断。曲线型相位卷绕主要是余弦波形的相位卷绕,如旋转相位干涉仪的卷绕现象,其就是典型的曲线型相位卷绕,表现为对余弦波形的截断。图1(a)为直线型相位卷绕原始信号波形,图1(b)为直线型相位卷绕后的相位图像。图1(c)为曲线型相位卷绕原始信号波形,图1(d)为曲线型相位卷绕后的相位图像。图中两条虚线表示[-π,π]范围,可见卷绕后的相位值被限制在了该范围内。
[0008]
目前,相位解卷绕的方法有很多,包括连续逐点解卷绕方法、拉普拉斯相位解卷绕方法等。其中最常用的方法就是通过逐点判断并还原真实相位值的解卷绕方法。在卷绕相位中,由于发生卷绕点的相位会出现正负2π的跳变现象,而未发生卷绕的区域相位是近似连续的。因此,可以通过相邻相位值之间的差来判断是否出现相位跳变现象,也即卷绕现象。之后将卷绕的相位值通过加减2π来得到连续的、非卷绕的相位曲线。在一些文献中,这种方法也被称作区域生长法。
[0009]
具体步骤为:如果相位卷绕图中相邻相位发生了大于 π的跳变量,则从跳变点开始后面所有相位值全都减去2π,如果相位跳变小于-π,则从跳变点开始后面所有相位全都加上2π,相邻相位之间的差值处于-π和 π之间则不做处理,逐点处理完所有相位即完成相位解卷绕。
[0010]
旋转单基线可以利用数字积分器进行相位的累加处理以达到解卷绕的作用。一种典型的数字积分器计算公式如下所示。
[0011][0012]
式中:是当前时刻的相位差,是上一时刻的相位差,φ(i)是积分器当前累加的相位差,φ(i-1)是积分器上一次的相位差。该算法也是通过逐点判断两点间的相位差并还原来实现解卷绕。现有的方法的不足主要体现在:
[0013]
在连续逐点解卷绕方法中,由于是对相位信息的逐点解卷绕,得到的解卷绕的结果非常准确,但是由于该方法属于串行过程,导致解卷绕的速度非常缓慢,限制了其在实时性要求较高的场景使用。


技术实现要素:

[0014]
有鉴于此,本发明的目的是提供一种基于gpu的并行相位解卷绕方法及系统,能够实现更好的实时性和准确性。
[0015]
一种并行相位解卷绕方法,包括:
[0016]
针对给定的待相位解卷绕的相位序列,计算两两相邻相位之间的差值,并根据差值获得相位序列卷绕相位所在位置,将相位序列中第一个卷绕相位之前的相位分为一组,第一个卷绕相位与第二个卷绕相位前的相位之间的相位分为一组,依次类推,最后一个卷绕相位与其后的相位分为一组;
[0017]
然后计算每个卷绕相位位置的补偿相位值;
[0018]
针对相位序列中每一个相位,同时利用所在分组的补偿相位值对其进行补偿其,完成相位的解卷绕。较佳的,调用多个线程,间时计算两两相邻相位之间的差值。
[0019]
较佳的,调用多个线程,同时计算每个卷绕相位位置的补偿相位值。
[0020]
较佳的,根据差值获得相位序列卷绕相位所在位置的方法为:
[0021]
若差值大于π或者小于-π,则相邻两个相位的后一个相位位置判定为卷绕;若差值在[-π,π]范围内,则判定不存在卷绕。
[0022]
较佳的,定义卷绕相位的卷绕类型:0为未发生卷绕,-1为向下跳变,1为向上跳变;令a
i1
代表待相位解卷绕的相位序列中第i分组的第1个相位值对应的卷绕类型,则任意分组,设为第n分组的解卷绕补偿值valuen为:
[0023][0024]
较佳的,采用gpu实现所述相位解卷绕方法。
[0025]
一种并行相位解卷绕方法的系统,包括获取卷绕模块、建立补偿模块及并行补偿模块;
[0026]
所述获取卷绕模块用于针对给定的待相位解卷绕的相位序列,计算两两相邻相位之间的差值,并根据差值获得相位序列卷绕相位所在位置;
[0027]
所述建立补偿模块用于计算每个卷绕相位位置的补偿相位值;
[0028]
所述并行补偿模块用于针对相位序列中每一个相位,同时利用所在分组的补偿相位值补偿其相位值。较佳的,所述获取卷绕模块、建立补偿模块及并行补偿模块中的至少一个模块在gpu中实现。
[0029]
较佳的,所述获取卷绕模块采用原子相加操作计算两两相邻相位之间的差值。
[0030]
本发明具有如下有益效果:
[0031]
本发明的一种基于gpu的并行相位解卷绕方法及系统,通过计算相邻相位的差值找到发生卷绕的位置,以卷绕位置将相位序列进行分组,每一组中相位补偿值均与第一个相同,则可同时对各分组的相位进行补偿,提高了实时性。
[0032]
通过采用gpu平台实施本发明的算法,在不同信噪比条件下与传统串行解卷绕方法结果一致,并且提高了算法的效率。
[0033]
本发明的一种基于gpu的并行相位解卷绕系统,包括获取卷绕模块、建立补偿模块、并行补偿模块实现并行解卷绕,并利用线程并行、gpu并行、simd、原子操作等方法对算法进行优化;
[0034]
实验表明,基于gpu的并行解卷绕算法相比cpu串行解卷绕算法有约3.5倍的加速比,相比gpu串行解卷绕算法有约60-80倍的加速比。
附图说明
[0035]
图1(a)为直线型相位卷绕原始信号波形,图1(b)为直线型相位卷绕后的相位图像,图1(c)为曲线型相位卷绕原始信号波形,图1(d)为曲线型相位卷绕后的相位图像;
[0036]
图2为直线型相位解卷绕示意图;
[0037]
图3为曲线型相位解卷绕示意图;
[0038]
图4为并行相位解卷绕实现流程图;
[0039]
图5为gpu并行优化示意图;
[0040]
图6(a)为串行60db解卷绕结果图,图6(b)为并行60db解卷绕结果图,图6(c)为串
行30db解卷绕结果图,
[0041]
图6(d)为并行30db解卷绕结果图;
[0042]
图7为加速效果对比图1;
[0043]
图8为加速效果对比图2;
[0044]
图9为加速效果对比图3;
[0045]
图10位加速效果对比图4。
具体实施方式
[0046]
下面结合附图并举实施例,对本发明进行详细描述。
[0047]
在串行连续逐点解卷绕方法中,要确认某一相位值是否卷绕,就要判断该值与上一相位值的差是否在[-π,π]之间。主要有三种情况,若差值大于π,则后一个相位点有卷绕现象,此时卷绕相位的大小为真实相位值加2π所得的数值;若差值小于一π,则该点也有卷绕现象,此时卷绕相位的大小为真实相位值减2π所得的数值;若差值在[-π,π]范围内,则该点不存在卷绕现象,不需要进行解卷绕。串行连续逐点解卷绕方法对某一值解卷绕时需满足其之前的所有值均为真实相位值(不存在卷绕现象),因此,该方法只能从头到尾逐次进行解卷绕,其耗时的主要原因也就在于此。
[0048]
针对传统方法串行的处理方法,若能将串行的处理过程转化为对所有点的并行解卷绕,即可很好地解决实时性差的问题。
[0049]
对解卷绕过程分析可知,对存在卷绕现象的某一值解卷绕时只需确定其与真实相位的偏差。利用该偏差值对卷绕相位进行补偿,即可完成该点的解卷绕。而在该卷绕相位之后至下一卷绕相位之间范围内(即不存在卷绕现象的范围)各点的补偿值与该卷绕相位的补偿值相同。如图2所示,本实施例中,将所有相位值按卷绕相位出现的位置分为6组(图中六种不同颜色表示)。其中第1组不存在卷绕现象,不需要解卷绕,第2、3、4、5、6组的第1个相位发生了卷绕,需要进行解卷绕处理。每组的补偿值相同,只需计算出第一个卷绕相位的补偿值即可。因此,要实现对各点的并行解卷绕,找出发生卷绕现象的位置并计算出各个卷绕相位的补偿值是关键所在。
[0050]
下面对直线型卷绕的补偿值进行分析,如图2所示,从第2组开始,每组的第1个相位为卷绕相位。第1组不需要解卷绕,补偿值为0;第2组相位值向下跳变了2π,因此该组的补偿值为2π*1;同理,第3组的补偿值为2π*2;第4组的补偿值为2π*3。
[0051]
图3为曲线型相位解卷绕示意图,下面对曲线型卷绕的补偿值进行分析,从第2组开始,每组的第1个为卷绕相位。第1组不需要解卷绕,补偿值为0;第2组相位值向下跳变了2π,因此该组的补偿值为2π*1;同理,第3组的补偿值为2π*2;第4组相位值向上跳变了2π,其补偿值为上一组补偿值的基础上减2π,因此,第4组的补偿值为2π*1;同理,第5组的补偿值为0。
[0052]
综合两种类型的卷绕现象可以得出,按卷绕点相位出现的位置进行分组后,每组的补偿值由之前所有卷绕点(包括当前组的)的数量和卷绕类型决定。定义卷绕相位的卷绕类型:0为未发生卷绕,-1为向下跳变,1为向上跳变。设某一相位序列a为:
[0053]
a={x1,x2,x3,

,x
l
}
ꢀꢀꢀꢀ
(3)
[0054]
定义序列a中各相位的卷绕类型构成的序列为b:
[0055]
b={a
11
,a
12
,a
13


,a
21
,a
22
,a
23


,a
31

}
ꢀꢀꢀ
(4)
[0056]
其中,a
ij
代表第i组的第j个值。由于每组有且只有第1个相位为卷绕相位且第1组未发生卷绕现象。
[0057]
则b可化简为:b={a
11
,0,0,

,0,a
21
,0,0,

,0,a
31

}
ꢀꢀꢀ
(5)
[0058]
其中,a
11
=0,则第n组的解卷绕补偿值valuen为:
[0059][0060]
从而得到所有点的补偿值序列offset为:
[0061]
offset={value1,

,value2,

,valuen,

}
ꢀꢀ
(7)
[0062]
根据offset序列对所有点并行进行补偿(将现有相位与补偿值相加),即可实现对所有相位的并行解卷绕。
[0063]aunwrap
=a offset
ꢀꢀ
(8)
[0064]
图4为并行相位解卷绕实现流程,具体可分为以下步骤:设原始相位序列的长度为l。
[0065]
步骤1:同时调用l个线程,判断相邻相位值之间的差是否在[-π,π]范围内,获取所有卷绕点的信息:包括卷绕点的位置、卷绕类型和卷绕点数量。
[0066]
步骤2:按照卷绕点出现的位置对相位序列进行分组,如果有n个卷绕点,则相位序列中第一个卷绕相位之前的相位序列分为一组,第一个卷绕相位与第二个卷绕相位前的相位之间的相位序列分为一组,第二个卷绕相位与第三个卷绕相位前的相位之间的相位序列分为一组,依次类推,最后一个卷绕相位与其后的相位序列分为一组,则n个卷绕相位可分为n 1个分组。
[0067]
步骤3:调用n 1个线程,分别对应步骤2的n 1个分组,各线程同时根据公式(6)计算出对应分组的解卷绕相位补偿值value;根据公式(7)建立所有相位点的补偿值序列offset。
[0068]
步骤4:调用l个线程,利用补偿值序列offset,根据公式(8)对所有相位值进行补偿。
[0069]
本发明还提供一种并行相位解卷绕系统,包括获取卷绕模块get_wrap、建立补偿模块get_offse及并行补偿模块parallel_unwrap。
[0070]
下面论如何基于gpu的编程架构对解卷绕算法进行并行设计优化,以进一步提高运算效率,满足实际工程应用中的实时信号处理需求。
[0071]
cuda是以大量线程来实现高吞吐量数据的实时并行处理,线程间越独立,加速的效果越明显。根据上文对算法并行性的分析,对于获取卷绕模块,各个卷绕点是相互独立的。在获取完所有的卷绕点信息后,建立补偿模块也是相互独立的,当然在并行补偿模块,由于所有点的相位补偿值已计算完成,在该模块内所有相位点的补偿也是独立的。因此,本发明设计的并行解卷绕算法非常适合用gpu进行并行计算,极大地提高了运算效率,为后续信号处理的实时性需求打下基础。
[0072]
图5为gpu并行优化示意图,首先通过cpu分配好主机内存和设备内存,初始化各个变量。并利用cudamemcpy将原始卷绕相位序列写入gpu片上内存。在实际处理过程中,由于
gpu的线程数目有限,根据原始相位序列的长度选取gpu的数量。在每个gpu中以单指令多数据流(single instruction multiple data,simd)并行架构进行各模块的运算。所有模块计算完成后,将解卷绕后的序列传回cpu内存或继续在gpu中进行后续的处理。
[0073]
获取卷绕模块:
[0074]
并行解卷绕算法的第一个模块就是获取卷绕相位信息模块,卷绕信息包括卷绕点的位置、卷绕类型和卷绕点数量。定义结构体wrap,包含id和type数据项,分别对应卷绕的位置和类型。如算法1。
[0075]
wrap_data为初始相位序列,size为该序列的长度,difference为相邻两个相位之间的差,wrap为输出的卷绕信息结构体序列,num为卷绕点的数量。调用size个线程,每个线程分别获取各点卷绕信息,达到并行运算的目的。每个线程内的具体操作为:首先计算出该点与前1相位的差值difference,通过判断该值是否在[-π,π]范围内,来判断该点是否为卷绕点。若是卷绕点,则将该点的位置和卷绕类型写入卷绕信息序列wrap。
[0076]
由于线程并发时,存在多个线程同时访问wrap内存的问题,即访问冲突导致写入数据出错的问题。采用原子操作方法进行解决,原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何context switch(切换到另一个线程)。在多进程(线程)访问共享资源时,能够确保所有其他的进程(线程)都不在同一时间内访问相同的资源。本发明使用atomicadd原子相加操作,确保各个线程不会同时访问wrap,进而得到所有卷绕点的信息。
[0077]
同时,由于各个线程运算结束的时间也各不相同,这就导致所有线程运算完成后,得到一个无序的卷绕信息序列。需要进一步对wrap序列按照其id数据项进行排列。
[0078]
建立补偿模块:
[0079]
在获取卷绕模块已经得到了卷绕信息序列wrap、相邻点的差值序列difference和卷绕点数量num,接下来需要建立补偿序列offset。在本模块,调用num个线程,对应为各个分组,每个线程独立地计算该组的补偿值。根据公式(6)与公式(7)计算出每组的补偿值,并将每组的补偿值拓展到该组内的所有位置处,使得同一分组内的补偿值都为相同的补偿值,进而得到补偿序列offset。
[0080]
并行补偿模块:
[0081]
并行解卷绕算法的最后一个模块就是并行补偿模块,利用补偿序列offset对初始卷绕相位序列的所有值进行补偿。调用size个线程,size为原始相位序列的长度。每个线程独立对每个值进行补偿,进而得到解卷绕之后的数据unwrap_data。
[0082]
在并行解卷绕仿真实验中,选用表1和表2所示的gpu和cpu仿真平台和具体仿真环境参数。
[0083]
表1 gpu参数
[0084][0085]
首先对并行解卷绕的正确性进行验证,仿真产生了1000点的卷绕相位序列,对序列进行加噪处理,并分别使用cpu串行解卷绕方法和gpu并行解卷绕方法进行运算,解卷绕
结果如图6(a)-图6(d),图6(a)为串行60db解卷绕结果图,图6(b)为并行60db解卷绕结果图,图6(c)为串行30db解卷绕结果图,图6(d)为并行30db解卷绕结果图。
[0086]
从图6(a)-图6(d)中可以看出,在信噪比为30db和60db两种情况下,本发明设计的gpu并行解卷绕算法与常用的cpu串行解卷绕算法结果一致。验证了gpu并行解卷绕方法的正确性。
[0087]
之后对并行解卷绕的加速比进行仿真分析,考虑到在信号处理过程中,数据在gpu与cpu之间的传输耗时严重,若信号处理系统通过gpu进行运算,则传回至cpu进行串行解卷绕需要耗费大量的传输时间,而在gpu中直接调用单核进行串行解卷绕是一种解决方法。因此本发明仿真的对象分别为cpu串行解卷绕(cpu多核心)、gpu串行解卷绕(gpu单核心)、gpu并行解卷绕(gpu多核)。
[0088]
考虑到影响解卷绕耗时的主要因素是原始相位数据量的大小和卷绕相位的数量。首先仿真产生6组相位数据,数据量固定为1000000,卷绕相位数量为12-12000不等。对gpu并行算法和gpu串行算法的分别进行计时,得到表3(a)所示中的耗时和加速比结果;对gpu并行算法和cpu串行算法的分别进行计时,得到表3(b)所示中的耗时和加速比结果。
[0089]
表3数据量固定情况下的加速效果对比
[0090]
表3(a)
[0091][0092]
表3(b)
[0093][0094]
在数据量固定的情况下,图7为gpu并行解卷绕相比gpu串行解卷绕的加速效果对比图。图8为gpu并行解卷绕相比cpu串行解卷绕的加速效果对比图。
[0095]
随着卷绕相位的增加,加速比呈现先升高后降低的趋势。主要原因是gpu的线程数有限,当线程数超过6912(gpu最大值线程数)后,就会产生拥塞,导致无法充分地并行运算,进而导致加速比降低。gpu并行解卷绕相比gpu串行解卷绕约有80倍的加速比,gpu并行解卷绕相比cpu串行解卷绕约有3.5倍的加速比。
[0096]
仿真产生3组相位数据,卷绕相位数量固定为600,每组的数据量为100000-1000000不等。对gpu并行算法和gpu串行算法的分别进行计时,得到表4(a)所示中的耗时和加速比结果;对gpu并行算法和cpu串行算法的分别进行计时,得到表4(b)所示中的耗时和加速比结果。
[0097]
表4卷绕相位数量固定情况下的加速效果对比
[0098]
表4(a)
[0099][0100]
表4(b)
[0101][0102]
在卷绕相位数量固定的情况下,图9为gpu并行解卷绕相比gpu串行解卷绕的加速效果对比图。图10为gpu并行解卷绕相比cpu串行解卷绕的加速效果对比图。
[0103]
随着总数据量的增加,加速比呈现升高的趋势。数据量越大,gpu并行的优势越明显,这也印证了gpu确实适合大规模数据的实时处理。gpu并行解卷绕相比gpu串行解卷绕约有60-80倍的加速比,gpu并行解卷绕相比cpu串行解卷绕约有3.5倍的加速比。
[0104]
综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献