一种基于MIC计算平台的NLM并行图像增强方法技术

技术编号:14699097 阅读:71 留言:0更新日期:2017-02-24 10:35
本发明专利技术属于遥感图像处理领域,具体涉及一种基于MIC计算平台的NLM并行图像增强方法。本发明专利技术利用MIC架构之上的并行算法克服了常规集群式并行计算成本、维护代价过高,以及GPU并行算法开发困难,不易移植等缺陷;将MIC计算平台引入大数据量、高计算复杂度的遥感图像处理领域,将在某种程度上为遥感图像并行化处理提供新的思路。并且提出MIC/CPU协同计算的NLM并行算法,使用了MIC编程模型中的异步编程机制,在MIC端执行计算任务的时候CPU端可异步地参与计算,针对MIC/CPU协同并行算法任务分配问题,提出了动态任务分配。

【技术实现步骤摘要】

本专利技术属于遥感图像处理领域,具体涉及一种基于MIC计算平台的NLM并行图像增强方法
技术介绍
遥感图像去噪是遥感图像处理领域的关键技术,其在图像识别、图像分割以及复原等方面发挥着重要的作用。遥感图像去噪发展至今,涌现出很多优秀的去噪方法。从早期的基于邻域的平均去噪方法到后来的基于小波、多小波、轮廓波等的去噪算法,再到能够局部自适应的去噪方法。这些方法都是基于局部的去噪方法,所谓基于局部就是使用特定的核与带噪图像作卷积运算,主要利用的是像素点间的空间关系。图像去噪的过程就是将周围像素点灰度值通过某种加权方式进行求和,以估计目标像素点的灰度值。此估计值只受到目标像素周围其他像素灰度值的影响。图像去噪属于图像增强的一个重要方面,是遥感图像相关应用领域中重要的预处理步骤。目前,已有众多学者投入到对图像去噪的研究当中,并提出了很多去噪方法。但其中的大多数效果并不十分理想,去噪过程中很多图像的纹理细节被丢失掉。NLM(NonlocalMeans)算法由Buades等人于2005年提出,是一种全新的图像去噪方法,基于完全不同的去噪策略。这一方法基于图像的自相似性原理,充分利用了图像中广泛存在的冗余信息,利用图像片来计算图像中不同像素点间的相似度,更好地保护了图像的纹理结构信息,取得了显著的去噪效果。虽然NLM去噪性能效果良好,但具有较高的计算复杂度,在CPU中计算耗时较长。为了提升算法运行速度,近些年来对NLM图像增强算法进行加速主要从以下几个方面展开:有些是通过改进算法本身对NLM进行加速,有些是利用目前流行的高性能计算设备对算法进行加速。通常来说,后者往往能取得更好的加速效果,且由于无需改动算法本身,采用硬件加速也使得提升算法性能的过程变得简单、快捷。有些学者利用GPU对NLM算法进行了加速,但是这种方式存在缺陷:首先基于GPU的并行编程比较复杂,在编程的过程中需要程序员对硬件底层架构和参数有一定了解,其次,CUDA编写的程序不利于往其他平台的迁移,在程序的并行方式方面较为单一。想提升算法运算速度的另一种方式是使用计算机集群,但集群设备价格昂贵,耗电量大,且维护起来较为麻烦。针对上述硬件平台存在的缺陷,Intel公司推出了至强融核(IntelXeonPhi)系列产品。该系列基于集成众核架构即MIC,每个协处理器上包含50个以上的X86核心,使得高性能计算单节点上的计算能力大幅度提升。
技术实现思路
针对上述存在问题或不足,本专利技术提供了一种基于MIC计算平台的NLM并行图像增强方法。具体包含以下步骤:首先,程序主体先在CPU执行,当运行至NLM核心代码段时,在其前面使用offload语句,表示接下来的代码段要在MIC卡执行。当程序执行到offload语句时,数据传入MIC端,MIC端开始执行并行任务并同时将控制权交回给CPU线程,CPU在得到控制权后继续执行下面的代码;CPU端的并行任务结束后,等待MIC端任务结束的信号,如果信号没有到达,则继续等待,如果到达则将数据从MIC端传出并继续执行下面的语句。然后,使用数据传输关键字,将运算时需要用的变量、指针传入MIC卡,并使用alloc_if、free_if关键字控制MIC端空间的开辟和释放。被MIC端调用的函数和变量在定义时需要标记为__attribute__((target(mic))),才能在被offload到卡上后正确执行。将现有NLM串行程序使用offload模式移植成为MIC程序的过程中,需要首先根据欲并行的部分,将串行程序改写为OpenMP并行程序,然后确定输入输出变量,书写相应的offload语句,将并行代码移植到MIC上。进一步的,上述并行算法中,当MIC卡进行计算的时候,CPU处于空闲状态,为了将CPU的计算资源充分利用,设计了MIC/CPU协同并行算法。在CPU端调用offload语句时,在其结尾处使用signal关键字发出信号,MIC端将启动并开始执行其并行代码段,与此同时CPU端并不会因此而处于等待状态,而是继续执行自身代码,直到遇到offload_wait语句;此时CPU开始等待接收来自MIC的信号,当MIC函数执行完毕返回时,发送信号给CPU端,CPU端在接收到该信号后便可继续执行后面的程序;过程中用到nocopy、offload_transfer、signal和wait关键字。基于动态任务分配的MIC/CPU协同并行算法分别用两个线程进行管理CPU、MIC端的计算过程。在计算开始执行前,将输入图像以行为单位切分为多个数据块,计算开始时,CPU和MIC设备按分块顺序分别获取一个不同的数据块进行处理,待各自处理完成之后,无需等待,继续获取下一个未处理的数据块,直至所有数据块处理完成。两个线程的建立使用OpenMP的#pragmaompparallelfornum_threads(device_num)指令来完成,然后从逻辑上对图像进行划分,并保证CPU端和MIC端进行处理任务时的一致性;前者可以维护一个全局变量,用来保存数据片处理的进度,每次CPU或MIC获取任务时,将此变量加1,直至增加到所有数据片都处理完成;后者的实现通过使用锁机制,当一个设备完成当前计算任务即将获取下一个计算任务时,先将保存数据片处理进度的变量加锁,获取任务后再进行解锁,上锁过程中如果另外一个设备也完成了当前任务准备对全局变量进行修改时,需要等到此全局变量处于解锁状态,以保证数据划分的一致性。在任务进行处理的过程中,MIC计算的部分在计算完成之后需要将数据从MIC端传回CPU端,此处用#pragmaoffload_transfertarget(mic:0)out(ptO[bl:br-bl]:alloc_if(0)free_if(1))命令;target使用的格式为target(),括号里填写具体的MIC设备。CPU端在处理任务的时候开启多线程,这里用到OpenMP指令,且在最外层指令前使用omp_set_nested(),并将其参数置为1。nocopy关键字,表示在MIC端不拷贝数据,仅建立空间,不复制数据;nocopy使用的场合有两个:一个是在不同的offload区域,如果后一次需要用到前一次计算后的某些变量和数据,则可以使用nocopy避免数据通过内存中转,造成浪费;另一个是,当变量作为设备代码段中的临时变量时,可以使用nocopy属性,减少数据传输;所述临时变量即不需要从主机端赋初值,也无需传回主机端。signal和wait关键字,用于异步传输,两者成对使用以实现在启动MIC端代码段后,CPU端无需等待offload语句的返回便可继续往下执行自身代码;signal语句的作用是在offload代码段结束之后发送一个信号,wait语句可以对该信号进行接收;offload_transfer关键字与offload类似,只负责数据传输,后面不加入计算的代码段,其支持的参数与offload语句相同。进一步的,所述MIC计算平台中,包含1块CPU和n个MIC共n+1个计算设备,n>0,在主程序中开启n+1个线程来管理各设备,程序中同样利用锁机制来保证各设备的任务分配一致性,利用omp_set_nested()指令开启CPU设备的嵌套并行。综上所述,本专利技术的本文档来自技高网
...
一种基于MIC计算平台的NLM并行图像增强方法

【技术保护点】
一种基于MIC计算平台的NLM并行图像增强方法,具体如下:首先,程序主体先在CPU执行,当运行至NLM核心代码段时,在其前面使用offload语句,表示接下来的代码段要在MIC卡执行;当程序执行到offload语句时,数据传入MIC端,MIC端开始执行并行任务并同时将控制权交回给CPU线程,CPU在得到控制权后继续执行下面的代码;CPU端的并行任务结束后,等待MIC端任务结束的信号,如果信号没有到达,则继续等待,如果到达则将数据从MIC端传出并继续执行下面的语句;然后,使用数据传输关键字,将运算时需要用的变量、指针传入MIC卡,并使用alloc_if、free_if关键字控制MIC端空间的开辟和释放;被MIC端调用的函数和变量在定义时需要标记为__attribute__((target(mic))),才能在被offload到卡上后正确执行;将现有NLM串行程序使用offload模式移植成为MIC程序的过程中,需要首先根据欲并行的部分,将串行程序改写为OpenMP并行程序,然后确定输入输出变量,书写相应的offload语句,将并行代码移植到MIC上。

【技术特征摘要】
1.一种基于MIC计算平台的NLM并行图像增强方法,具体如下:首先,程序主体先在CPU执行,当运行至NLM核心代码段时,在其前面使用offload语句,表示接下来的代码段要在MIC卡执行;当程序执行到offload语句时,数据传入MIC端,MIC端开始执行并行任务并同时将控制权交回给CPU线程,CPU在得到控制权后继续执行下面的代码;CPU端的并行任务结束后,等待MIC端任务结束的信号,如果信号没有到达,则继续等待,如果到达则将数据从MIC端传出并继续执行下面的语句;然后,使用数据传输关键字,将运算时需要用的变量、指针传入MIC卡,并使用alloc_if、free_if关键字控制MIC端空间的开辟和释放;被MIC端调用的函数和变量在定义时需要标记为__attribute__((target(mic))),才能在被offload到卡上后正确执行;将现有NLM串行程序使用offload模式移植成为MIC程序的过程中,需要首先根据欲并行的部分,将串行程序改写为OpenMP并行程序,然后确定输入输出变量,书写相应的offload语句,将并行代码移植到MIC上。2.如权利要求1所述基于MIC计算平台的NLM并行图像增强方法,其特征在于:所述数据传输关键字为in、out和inout。3.如权利要求1所述基于MIC计算平台的NLM并行图像增强方法,其特征在于:在CPU端调用offload语句时,在其结尾处使用signal关键字发出信号,MIC端将启动并开始执行其并行代码段,与此同时CPU端并不会因此而处于等待状态,而是继续执行自身代码,直到遇到offload_wait语句;此时CPU开始等待接收来自MIC的信号,当MIC函数执行完毕返回时,发送信号给CPU端,CPU端在接收到该信号后便可继续执行后面的程序;过程中用到nocopy、offload_transfer、signal和wait关键字;基于动态任务分配的MIC/CPU协同并行算法分别用两个线程进行管理CPU、MIC端的计算过程:在计算开始执行前,将输入图像以行为单位切分为多个数据块,计算开始时,CPU和MIC设备按分块顺序分别获取一个不同的数据块进行处理,待各自处理完成之后,无需等待,继续获取下一个未处理的数据块,直至所有数据块处理完成;两个线程的建立使用OpenMP的#pragmaompparallelfornum_threads(dev...

【专利技术属性】
技术研发人员:黄方金都李丽兰波朱强
申请(专利权)人:电子科技大学
类型:发明
国别省市:四川;51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1