关于并行计算的相关总结

关于并行计算的相关总结

  • 1. 定义
  • 2. 特征及层次
  • 3. 应用举例
    • 3.1 基于CUDA 的K-Means 多级并行优化方法
    • 3.2 面向GPU的直方图统计图像增强并行算法
    • 3.3 基于FPGA的多核可扩展卷积加速器设计

1. 定义

并行计算或称平行计算是相对于串行计算来说的。它是一种一次可执行多个指令的算法,目的是提高计算速度,及通过扩大问题求解规模,解决大型而复杂的计算问题。所谓并行计算可分为时间上的并行和空间上的并行。时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。
并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。

2. 特征及层次

为利用并行计算,通常计算问题表现为以下特征:
(1)将工作分离成离散部分,有助于同时解决;
(2)随时并及时地执行多个程序指令;
(3)多计算资源下解决问题的耗时要少于单个计算资源下的耗时。
数字图像处理算法多种多样,但从数据处理的层面来考虑,可以分为:像素级处理、特征级处理和目标级处理三个层次。
(1)像素级图像处理
像素级处理,即由一幅像素图像产生另一幅像素图像,处理数据大部分是几何的、规则的和局部的。根据处理过程中的数据相关性,像素级处理又可进一步分为点运算、局部运算和全局运算。
(2)特征级图像处理
特征级处理是在像素图像产生的一系列特征上进行的操作。常用的特征包括:形状特征、纹理特征、梯度特征和三维特征等,一般采用统一的测度,如:均值、方差等,来进行描述和处理,具有在特征域内进行并行处理的可能性。但是,由于其特征具有象征意义和非局部特性,在局部区域并行的基础上,需要对总体进行处理。利用GPU实现并行化处理的难度比较大。
(3)目标级图像处理
目标级处理是对由一系列特征产生的目标进行操作。由于目标信息具有象征意义和复杂性,通常是利用相关知识进行推理,得到对图像的描述、理解、解释以及识别。由于其数据之间相关性强,且算法涉及到较多的知识和人工干预,并行处理的难度也比较大。

3. 应用举例

3.1 基于CUDA 的K-Means 多级并行优化方法

聚类分析也是数据分类的一种,但与分类技术还存在一定的差别,最大不同之处在于聚类处理数据的所属类是未知的,它是一个无监督过程。是在没有相关经验的基础上,对数据进行处理,分析出数据间内在关联并找出规律,将样本点间距离较近的数据分配到相同的聚类中,反之,将样本点间距离较远的数据分配到不同的聚类中。目前常用的聚类算法分别是基于密度、网格、层次、划分和模型的聚类算法。
CUDA( Compute Unified Device Architecture) 是由显卡厂商NVIDIA 推出的运算平台,是一种通用的并行计算架构,其能充分结合CPU 和GPU 的优点。其中,CPU 为主处理器( host) 执行逻辑事务处理和串行计算,GPU 作为协处理器( device) 执行高度并行化的计算任务。GPU 的计算核心均匀划分到多个流多处理器( stream multiprocessor,SM) 中。同时,GPU 还有不同的存储机制。其中,设备内存可接受来自CPU 的数据; 共享内存可供SM 中的所有线程块block 公用;寄存器被分配的thread 单独使用。

3.2 面向GPU的直方图统计图像增强并行算法

直方图统计在图像增强和目标检测等领域有着重要的应用。然而,随着图像规模不断增大、实时性要求越来越高时,直方图统计局部增强算法的处理过程较慢,达不到预期满意的速度。首先,通过充分利用统一计算设备架构(CUDA)活动线程块和活动线程来并行处理不同的子图像块和像素点,提升了数据访问的效率。然后,采用内核配置参数优化和数据并行计算技术,实现了直方图统计图像增强算法在GPU平台上的并行化。最后,采用主机端和设备端间高效的数据传输模式,进一步缩短了系统在异构计算平台上的执行时间。研究表明,对于像幅大小不同的图像,图像直方图统计并行算法的处理速度相比于CPU串行算法均有两个数量级的提高,处理一幅像幅大小为3241×3685 的图像需要787.11ms,并行算法的处理速度提高了261.35倍。为实现实时大规模图像处理奠定了良好基础。
CUDA 的应用系统是GPU 和CPU 的混合代码系统。在执行CUDA 系统时,主机端执行的二进制代码在调用核函数时需要将设备端代码通过CUDA API 传给设备端。GPU 传给CUDA API 的设备端代码不一定是二进制代码CUBIN,也可能是运行于JIT动态编译器上的汇编形式的PTX(Parallel Thread Execution)代码。最后传到设备上的是适合具体GPU 的二进制代码,其中的信息多于PTX 或者CUBIN,这是因为CUBIN 或者PTX 只包含了线程块一级的信息,而不包括整个网格的信息。目前,在GPU 上可以运行的指令长度仍然有限制,不能超过两百万条PTX 指令。GPU 端二进制代码主要包括网格的维度和线程块的维度,每个线程块使用的资源数量,要运行的指令以及常数存储器中的数据。
算法包含三级并行性:
(1)像素点级并行:为了对图像中包含的隐含特征进行局部增强,需要将图像进行直方图统计,对每一幅图像的每一个像素点的处理是相互独立的,可以并行执行;
(2)均值和方差值级并行:每个像素点的局部均值和局部方差的计算是相互独立的,可以并行执行;
(3)窗口级并行:每个局部统计窗口的处理是相互独立的,可以并行处理。
数字图像本质上就是一个二维数组,每个像素的处理过程是相互独立并且完全
一样的计算过程。因此,可以在GPU 集群上采用MPI 和CUDA 相结合的技术,由MPI 完成更大图像块之间的并行,由每个节点上的GPU 完成图像块内的并行,通过GPU 集群可以使处理速度更快,争取能够在更短的时间内完成更大尺寸的图像处理工作。

3.3 基于FPGA的多核可扩展卷积加速器设计

为解决卷积神经网络计算效率和能效较低的问题,提出并设计一种使用定点数据作为输入的卷积加速器。加速器支持动态量化的8Bits定点数据的卷积计算,通过采用分块计算的策略和改进的循环计算顺序,有效提高计算效率;支持激活、批标准化(BN)、池化和全连接等计算;基于软硬件协同设计的思路,设计包含卷积加速器和ARM处理器在内的SOC系统。提出一种将加速器进行多核扩展的方法,提高算力和移植便捷性。将加速器部署在Xilinx ZCU102开发板上,其中单核加速器的算力达到了153.6GOP/s,在计算核数目增加到4个和8个的情况下,算力分别增至614.4 GOP/s和1024 GOP/s。
对于FPGA平台中实现的卷积加速设计,主要围绕以下思路来展开:基于CNN网络中输入特征映射和卷积核多通道的特性,设计乘加阵列进行并行计算;基于有限的片上存储资源,对输入和权重数据进行分块,并通过设置片上缓存来暂时存储分块数据以减少加速器与片外存储之间的数据访存次数;通过设计特定的循环展开计算顺序,实现片上缓存数据的复用以及高效的并行计算效率。
加速器主要由计算单元、片上缓存以及控制器组成。计算单元主要由乘加模块、累加模块、BN计算模块、定点处理模块、激活模块以及池化模块组成,是完成加速计算的关键部分。片上缓存调用FPGA的BRAM资源,将来自片外的输入特征映射、权重数据以及卷积计算结果暂存。而控制器主要产生一些控制卷积计算过程的信号,保证计算准确有序进行。

你可能感兴趣的:(gpu,cuda,并行计算)