一、Hetcompute 并行编程综述
HetCompute并行模式提供了可以进行数据交互的数据存储区,通过原子操作可以实现对数据的访问。HetCompute提供的API可以创建任务函数和申请空间,并可以在任务函数实现过程中访问内存数据。
二、实现过程
1)实例简介:
在本次实例中,主要实现了GPU、CPU、DSP基于Heterogeneous Compute SDK 协同工作,对照片去噪,并返回所需时间。
2)部分函数介绍:
上图中使用函数申请了三个内存空间,并同时创建四个任务,ct1、ct2为CPU任务,dt、gt为DSP和GPU的任务,并通过函数确定它们的执行顺序,最后通过SDK实现去噪任务中CPU、GPU、DSP之间数据的传递。
CPU主要负责了原始图片的加载,去噪后图片的输出工作。
DSP主要实现了图片权重的初始化,然后传值给GPU。
GPU主要负责了去噪算法模块。GPU的启动执行在创建任务传参中已经进行了实现,因此在调用GPU处理算法计算部分时,只需要调用创建的任务即可。
通过wait_for()函数,实现所有任务顺序完成。
此处通过Heterogeneous Compute SDK提供的函数创建了三个缓冲区用作任务调度中的数据处理,将一个图片去噪任务实现了简化。每个处理器只需要处理一部分的数据,完成后数据传给下一位,充分的调用到了每一个硬件,真正意义上实现了并行处理。
上图中时GPU算法处理部分的去噪算法实现过程,调用GPU对CPU加载的图片数据进和DSP初始化的图片权重数据进行去噪处理,并返回去噪后的数据,放在上面提到的缓冲区中,供CPU进行调用。最终实现图片去噪这一流程。
上图为DSP初始化图片权重。DSP的启动加载在mian()函数中已经实现,通过调用对应dsp处理函数,加载.so文件启动DSP处理任务,dsp运算速度最慢,因此此处只是让它对部分数据进行初始化。最终的去噪算法的实现在速度最快的GPU中实现。
通过上图定义的路径,可以把处理好的图片拿到PC端。此任务通过CPU进行了实现。
三、实验结果分析
通过上图可以看出,在通过Heterogeneous Compute SDK提供的方法,我们可以很轻易地实现GPU、CPU、DSP协同工作,大大提高了任务的处理效率。