基于多进程并行加速的太阳高分辨图像重建方法
邓涛1, 陈东2, 代红兵1, 王新华2,3     
1. 云南大学信息学院, 云南 昆明 650504;
2. 中国科学院云南天文台, 云南 昆明 650216;
3. 中国科学院大学, 北京 100049
摘要: 目前,太阳高分辨图像重建往往采用斑点干涉术和斑点掩模法重建目标的模和相位,由于分组分块数据量大,算法复杂等因素,难以满足实时重建的需求。为了缓解数据处理的压力,在现有的单组分块数据中央处理器/图形处理器混合计算方法的基础上,提出通过多进程将多组分块数据分配到图形处理器上同时并行处理的方法。实验结果表明,基于多进程并行加速方法可提高中央处理器和图形处理器的资源利用率,图形处理器能同时处理多组分块数据,显著提高图像分块处理的速度,加速比达到4.7左右。相关研究可以为天文数据并行化处理提供借鉴参考。
关键词: 多进程    并行计算    图像重建    斑点掩模法    斑点干涉法    
High-resolution Solar Image Reconstruction Method Based on Multi-process Parallel Acceleration
Deng Tao1, Chen Dong2, Dai Hongbing1, Wang Xinhua2,3     
1. School of Information Science and Engineering, Yunnan University, Kunming 650504, China;
2. Yunnan Observatories, Chinese Academy of Sciences, Kunming 650216, China;
3. University of Chinese Academy of Sciences, Beijing 100049, China
Abstract: At present, speckle interferometry and speckle masking are often used to reconstruct the mode and phase of the target in high-resolution solar image reconstruction. However, due to a large amount of grouped and partitioned data and the complexity of the algorithm, it is difficult to meet the requirements of real-time reconstruction. In order to alleviate the pressure of data processing, based on the existing CPU/GPU hybrid computing method of single block data, a method of allocating multi-component block data to GPU through multi-process and parallel processing is proposed. The experiment shows that the method based on a multi-process parallel acceleration method can improve the utilization efficiency of CPU and GPU resources, enable GPU to process multi-block data at the same time, and significantly improve the speed of image block processing with an acceleration ratio of about 4.7. Relevant studies can provide a reference for the parallel processing of astronomical data.
Key words: multi-process    parallel computing    image reconstruction    speckle masking    speckle interferometry    

太阳是影响人类活动最大的恒星,尤其是太阳活动对地球环境、气候和天气等的影响[1]。由于受到大气湍流的影响,太阳光线在穿过地球大气层时产生波前误差,光路发生偏转,观测的太阳图像出现不同程度的偏移、抖动、模糊等,导致地基望远镜的观测图像质量下降[2]。为了消除大气湍流对望远镜成像结果的影响,通常采用空间望远镜、自适应光学以及图像重建技术等方式获取太阳高分辨图像。

目前图像重建技术常用的算法主要有相位差法、多帧盲反卷积法、斑点干涉术、K-T算法、斑点掩模法、简单位移叠加法、迭代位移叠加法以及选帧位移叠加法等。这些算法都是通过大量的短曝光图像重建太阳高分辨图像,往往因为数据量大、算法复杂导致无法达到实时重建的需求。

近年,国内外在太阳高分辨图像重建算法并行化研究方面做了很多工作,并获得一定的加速比。文[3]基于双节点集群,提出一种帧选择和斑点掩模法的并行计算方法,采用多线程方法在57 s内重建一幅256 × 256 pixel图像。文[4]利用改写于KISIP (Kiepenheuer Institut für Sonnenphysik) 的算法,采用图形处理器一次处理单组分块数据,实现4.2 s内重建225个128 × 128 pixel子块的相位。文[5]从1 m新真空太阳望远镜(New Vacuum Solar Telescope, NVST) 的TiO通道选取一组子块图像(100 × 256 × 256 pixel),采用OpenMP方法实现了一组子块图像的并行化,重建单帧256 × 256 pixel的子块图像,运行时间减少至2.7 s,获得2.5倍加速。文[6]采用图形处理器的统一计算设备架构(Compute Unified Device Architecture, CUDA) 对光球TiO通道中的一组子块(100 × 256 × 256 pixel) 实现并行化,基于统一计算设备架构方法重建单组子图的运行时间减少到约0.7 s。文[7]基于统一计算设备架构在斑点掩模算法中实现单个子块图形处理器内的并行化,采用并行方法比纯中央处理器运行的串行算法加速比达到7。

综上所述,斑点掩模法重建太阳高分辨图像时的图像并行化研究已经取得一定的成果,但大多数局限于单纯的中央处理器或图形处理器加速,而且图形处理器一次只能处理一组分块数据,没有完全发挥中央处理器/图形处理器的并行化能力。如何将多组分块数据分配到图形处理器同时并行处理,进一步提高中央处理器和图形处理器的并行计算能力和资源效率,本文提出了基于多进程并行加速的太阳高分辨图像重建方法。

1 太阳高分辨图像重建方法

1 m新真空太阳望远镜[8]坐落在抚仙湖畔,主要的观测波段有G-band (430.5 nm)、Hα (656.28 nm) 和TiO (705.8 nm)。1 m新真空太阳望远镜太阳高分辨图像重建使用了两个层次:Level1位移叠加法重建色球图像,Level1+斑点掩模法重建光球或色球图像。Level1+计算复杂度比Level1高,但Level1+在视宁度好的时候重建的图像质量更好,信噪比更高。

1 m新真空太阳望远镜Level1+太阳高分辨图像重建流程有图像预处理、图像初对齐、视宁度估计、图像分块处理和子块拼接。其中,图像分块处理主要采用斑点干涉术和斑点掩模法重建太阳高分辨图像的模和相位。图像分块处理包含若干环节,其中相位递推环节数据量大,计算复杂,并且需要考虑多个递推路径的整合,在Level1+的重建流程中最为耗时。因此,子块处理的好坏严重影响重建的效果和时效。

1.1 振幅重建

在满足等晕区条件下,短曝光像是目标和系统的点扩散函数的卷积

$ i(x, y) = o(x, y) ⊗ p(x, y), $ (1)

其中,⊗为卷积符号,时域中的卷积对应于频域中的乘积。(1) 式在频域中满足

$ I(u, v)=O(u, v)P(u, v),$ (2)

其中,I(u, v),O(u, v)和P(u, v) 分别为时域中对应项的傅里叶变换。

功率谱统计为

$ \left\langle|I(u, v)|^{2}\right\rangle=\left\langle|O(u, v)|^{2}\right\rangle\left\langle|P(u, v)|^{2}\right\rangle , $ (3)

其中,〈〉为系综平均;〈 |P(u, v)|2〉为系统传递函数的强度(System Intensity Transfer Function, SITF)。我们可以由两种方法:(1) 观测目标的近参考星多幅斑点图的平均功率谱建模计算得到系统传递函数的强度;(2) 谱比法计算大气相干长度r0,从而使用功率谱退卷积得到系统传递函数的强度。

1.2 相位重建

目标斑点图的三重相关为

$ i_{k m n}{ }^{(3)}\left(x, x^{\prime}\right)=\int i_{k}\left(x^{\prime \prime}\right) i_{m}\left(x^{\prime \prime}+x\right) i_{n}\left(x^{\prime \prime}+x^{\prime}\right) \mathrm{d} x^{\prime \prime} , $ (4)

其中,ik(x), im(x)和in(x)为3个强度分布。目标斑点图的三重自相关的傅里叶变换

$ I^{(3)}(u, v)=I(u) I(v) I(-u, -v), $ (5)

其中,I(u)是i(x) 的傅里叶变换;uv是二维空间频率。

目标斑点图的平均重谱

$ \left\langle I^{(3)}(u, v)\right\rangle=O^{(3)}(u, v)\left\langle P^{(3)}(u, v)\right\rangle , $ (6)

其中,〈〉为系综平均;〈P(3)(u, v)〉为平均斑点掩模法传递函数。在得到平均重谱后,由低频到高频的相位元逐步递推,恢复目标斑点图的全部相位。

2 多进程并行加速方法 2.1 中央处理器/图形处理器混合计算方法

为了满足整个视场线性空间平移不变性,我们需要把预处理和初对齐后的图像分割成一个个子块,然后相同位置的子块合并成子块组。1 m新真空太阳望远镜Level1+的太阳高分辨图像重建中现有的并行加速方法大多局限于中央处理器/图形处理器混合计算方法,即图形处理器一次只能处理单个子块组,不同子块组之间还是串行计算。基于中央处理器/图形处理器混合计算方法的图像分块处理流程如图 1

图 1 基于中央处理器/图形处理器混合计算方法的图像分块处理流程 Fig. 1 Image block processing flow based on CPU/GPU hybrid computing method

按照等晕区分块后,每个子块组含有多帧子块,在处理一个子块组时,除了相位递推计算比较复杂,适合在中央处理器完成外,其他都在图形处理器完成。相位递推需要用到四维重谱[9],从低频相位点到高频相位点依次遍历全部有效的相位点。每个相位点由多个相位点和对应的重谱计算得到,计算复杂度高。在遍历的过程中,相位递推伴随着大量的逻辑判断,适合在中央处理器处理。

虽然以上方法比纯中央处理器图像分块串行处理的时间少,但这种方法存在两个问题:(1) 子块组间的处理依次进行(串行),在图形处理器处理时,中央处理器处在空闲状态,利用率不高;(2) 图形处理器一次只处理一个子块组,利用率不高。为此,本文提出了基于多进程图像分块处理并行加速的方法。

2.2 多进程并行加速方法

针对现有方法存在的问题,本文引入多进程,提高中央处理器的利用率。多进程可以使图形处理器处理更多的子块组,同时提高中央处理器和图形处理器的并行化处理能力。待处理的多帧图像分割成很多子块后,子块合并为若干子块组,把所有的子块组加入任务列表,每个进程顺序选择任务列表中的一个子块组,多个进程同时操作图形处理器并行处理多个子块组。基于多进程并行加速方法的图像分块处理流程如图 2

图 2 基于多进程并行加速方法的图像分块处理流程 Fig. 2 Image block processing flow based on multi-process parallel acceleration method

多进程并行加速方法的图像分块处理流程为:

(1) 创建任务列表。创建并初始化列表,将图像分块后的子块组加入任务列表。

(2) 创建进程池。创建并初始化一个进程池,并在进程池中添加适当的子进程数量。

(3) 分配进程任务。由主进程依次把任务列表中的任务分配给处于空闲状态的子进程。

(4) 传递参数。主要传递子块组处理过程需要的数据和参数。

(5) 处理子块组。进程池开启多少子进程,就有多少个子块组同时并行计算。子块对齐、模的重建、平均重谱的计算以及初始相位的计算等都在图形处理器并行完成。图形处理器完成初始相位计算后,把初始相位数据传递给中央处理器的相应子进程开始相位递推,完成相位递推后,子进程将相位数据从中央处理器传递到图形处理器,最后进行模和相位的合成。

(6) 再次分配任务。处理完子块组后处于空闲状态的子进程都返回进程池,进程池将空闲子进程信息反馈给主进程,若子任务列表仍有待执行的子块组,主进程将待执行的子块组分配给进程池中空闲的子进程。

(7) 关闭进程池。主进程反复检测子块组任务列表,当任务列表中没有待处理子块组时,等待所有子进程执行完毕,进程池将所有空闲子进程信息反馈给主进程,释放所有子进程并关闭进程池。

由上述过程可知,各个子块组相互独立,互不影响,进程池中每个子进程处理相应的子块组,同时并行运行。子块对齐、模的重建、初始相位计算以及模和相位的合成都是由多个子进程在图形处理器并行完成的,但每个子块组的相位递推是由相应的子进程在中央处理器并行计算的。值得注意的是,在创建和初始化进程池时,进程并不是越多越好,创建新进程会耗费系统资源,所以进程池中只能添加合适数量的子进程,数量取决于中央处理器和图形处理器的资源能力。此外,为避免不必要的系统开销,程序并不立即撤回完成任务的子进程,而是在任务列表还有任务时选择进程复用,再次分配任务。

以Python为例的实现步骤如下:(1) 多进程管理Multiprocessing模块提供Pool类,通过import命令导入Multiprocessing模块,使用multiprocessing.Pool函数导入Pool类。(2) 创建并初始化任务列表blocklist=[],将子块组加入任务列表。(3) 设置指定的工作子进程数目(num),使用pool=Pool(num),按照指定数量子进程创建和初始化进程池,供用户调用。(4) 使用pool.apply_async(),pool.map(),pool.apply() 和pool.map_async() 等方法,调用子块组处理函数并传递子块组任务列表参数,然后提交给进程池。当新子块组任务请求提交到进程池时,如果Pool不满,则创建一个新进程执行该任务请求,如果Pool已满,告知进程池请求等待。(5) 通过Cupy模块中cupy.asarray()方法和cp.asnumpy() 方法进行中央处理器和图形处理器数据传输,每个子块组计算完成后,由列表收集结果。(6) 当任务列表没有待处理子块组时,使用pool.close() 方法,进程池不再接受新的任务;当所有子块组计算完成后,工作进程退出。(7) 最后使用pool.join() 方法,等待进程池中所有的子进程结束,返回主进程。关键过程的代码实现如表 1

表 1 关键过程的代码实现 Table 1 Code implementation of key processes
Code implementation of key processes
from multiprocessing import Pool
import cupy as cp
def block_process(cubesub):
    cuberc_gpu=cp.asarray(cubesub) # Transfer subblock groups from the CPU to the GPU
# Sub-block alignment, Reconstruction of amplitude s, Calculation of bispectrum, Initial phase
    phalxp_cpu=cp.asnumpy(x) # Phase recursion transfers data X from the GPU to the CPU
# phase recursion
    phatmp_gpu=cp.asarray(y)
# Amplitude and phase synthesis
if__name__== ′__main__′:
    blocklist=[] # Create and initialize task lists
    blocklist.append(cubesub) # Add subblock group tasks to the task list
    num=n # Set the number of n sub-processes
    pool=Pool(num) # Create and initialize process pools
    for i in blocklist:
        pool.apply_async(block_process, (i, )) # Commit functions and arguments to the process pool
        pool.close() # Close the process pool and accept no more tasks
        pool.join() # Block waits for all tasks to complete before continuing
3 结果和分析 3.1 实验环境

硬件:Intel(R)Core(TM)i5-8400 CPU@2.80 GHz(2 801 MHz)的处理器(6核),8 GB随机存取存储器(Random Access Memory, RAM),NVIDIA GeForce GTX 1050 Ti,4 095 MiB。软件:Microsoft Windows 10,Spyder 4.0.13,CUDA 10.2,Python 3.7.6。

3.2 并行加速结果

以图像分块处理为例,我们对第2节两种方法进行测时比较,实验结果如表 2

表 2 两种方法处理时间 Table 2 Processing time of two methods
Parallelization method Hα-band image block processing average time/s TiO-band image block processing average time/s
CPU/GPU hybrid computing method 740.68 957.31
Multi-process parallel acceleration method 157.76 203.32

为了验证代码的正确性,本文选取2020年6月6日1 m新真空太阳望远镜Hα波段的观测数据10组,每组100帧(1 028 × 1 024 pixel),每帧采用重叠方式分割成96 × 96 pixel,将每帧相同位置对应的子块合并成一组,划分为625个子块组。我们还选取2020年6月8日1 m新真空太阳望远镜TiO波段的观测数据10组,由于受显存大小的限制,每组选取50帧(2 160 × 2 560 pixel),每帧采用重叠方式分割成128 × 128 pixel,每帧相同位置对应的子块合并成一组,划分为1 050个子块组。

实验结果表明,Hα波段和TiO波段数据在采用多进程并行加速方法时,图像分块处理的平均时间相对较少,加速比分别为4.69和4.71。由于在中央处理器/图形处理器混合计算方法中,子块组之间仍然是串行计算,图形处理器一次只能处理单组分块数据;而在多进程并行加速方法中,子块组之间是并行计算,图形处理器能同时处理多组分块数据。基于多进程并行加速方法可提高中央处理器和图形处理器的资源利用效率,显著提高图像分块处理的速度。

在多进程并行加速方法中,不同的进程数有不同的图像分块处理时间,如图 3图 3显示了不同的进程数对图像分块处理并行加速的耗时情况,随着进程池中子进程数量的增加,Hα波段的所有子块处理时间降低到157.76 s,TiO波段的所有子块处理时间降低到203.32 s,并行加速的效果明显。但是在使用6个进程以后,受到中央处理器数量、图形处理器显存以及多进程调度开销的影响,图像分块处理时间上下浮动并呈现上升的趋势。在选择合适的子进程后,使用多进程并行加速方法处理时,中央处理器和图形处理器利用率都提高了,中央处理器利用率可以达到100%。

图 3 图像分块处理在不同进程数下的耗时情况 Fig. 3 The time consuming of image block processing under different number of processes
4 结语

针对现有方法子块组间低效的串行处理导致中央处理器和图形处理器利用率不高的问题,本文提出了基于多进程并行加速太阳高分辨图像重建的方法,利用多核和多进程技术,有效提高了中央处理器/图形处理器的利用率和重建速度,研究可以为天文数据并行化处理提供借鉴参考。进一步提高中央处理器/图形处理器的并行化程度,仍然有许多亟待突破的关键问题,其中,中央处理器承担的相位递推压力最大,耗费图像分块处理过程80%的时间。下一步我们考虑基于相位递推的特点进行并行化,同时对相关算法进行优化改进,使中央处理器/图形处理器计算负载达到均衡。此外,相关研究还需要在消息传递接口(Message Passing Interface, MPI)/ 图形处理器异构环境中进行验证。

参考文献
[1] 丁一汇. 太阳活动对地球气候和天气的影响[J]. 气象, 2019, 45(3): 297–304
DING Y H. Effect of solar activity on earth's climate and weather[J]. Meteorological Monthly, 2019, 45(3): 297–304.
[2] VAN NOORT M, VAN DER VOORT L R, LÖFDAHL M G. Solar image restoration by use of multi-frame blind de-convolution with multiple objects and phase diversity[J]. Solar Physics, 2005, 228(1/2): 191–215.
[3] DENKER C, YANG G, WANG H. Near real-time image reconstruction[J]. Solar Physics, 2001, 202(1): 63–70. DOI: 10.1023/A:1011886923189
[4] WÖGER F, FERAYORNI A, RADZIWILL N M, et al. Accelerated speckle imaging with the ATST visible broadband imager[C]//Proceedings of SPIE. 2012.
[5] LI X B, ZHENG Y F. A novel parallel method for speckle masking reconstruction using the OpenMP[J]. Journal of the Korean Astronomical Society, 2016, 49(4): 157–162. DOI: 10.5303/JKAS.2016.49.4.157
[6] ZHENG Y F, LI X B, TIAN H F, et al. GPU-accelerated speckle masking reconstruction algorithm for high-resolution solar images[J]. Journal of the Korean Astronomical Society, 2018, 51(3): 65–71.
[7] 宣经纬, 饶长辉, 钟立波, 等. 基于GPU的太阳图像斑点重建技术实现[J]. 大气与环境光学学报, 2020, 15(2): 90–100
XUAN J W, RAO C H, ZHONG L B, et al. Implementation of solar speckle image reconstruction based on GPU[J]. Journal of Atmospheric and Environmental Optics, 2020, 15(2): 90–100.
[8] LIU Z, XU J, GU B Z, et al. New vacuum solar telescope and observations with high resolution[J]. Research in Astronomy and Astrophysics, 2014, 14(6): 705–718. DOI: 10.1088/1674-4527/14/6/009
[9] 向永源. 太阳高分辨高速重建算法的研究[D]. 昆明: 中国科学院云南天文台, 2016. XIANG Y Y. Research on high speed high resolution solar image reconstruction algorithm[D]. Kunming: Yunnan Observatories, Chinese Academy of Sciences, 2016.
由中国科学院国家天文台主办。
0

文章信息

邓涛, 陈东, 代红兵, 王新华
Deng Tao, Chen Dong, Dai Hongbing, Wang Xinhua
基于多进程并行加速的太阳高分辨图像重建方法
High-resolution Solar Image Reconstruction Method Based on Multi-process Parallel Acceleration
天文研究与技术, 2021, 18(4): 516-522.
Astronomical Research and Technology, 2021, 18(4): 516-522.
收稿日期: 2020-10-13
修订日期: 2020-11-03

工作空间