一种基于CUDA的GPU并行计算全息图的方法技术

技术编号:13836887 阅读:84 留言:0更新日期:2016-10-15 20:35
本发明专利技术公开一种基于CUDA的GPU的并行计算全息图的方法。该方法包括如下步骤:A1、根据GPU的数量,将待生成计算全息图进行划分;A2、读取物空间点,将数据进行划分;A3、分配线程块和线程数量,确定线程块、线程与计算全息图、物空间点的关系;A4、将步骤A1,A2,A3的结果代入点云法公式,得计算全息图。该方法结合点云法,对传统GPU加速方法进行了优化,使得运算速度得到大幅提升。该方法可以建立在通用GPU架构上,编程方便,有利于广泛使用。

【技术实现步骤摘要】

本专利技术属于计算全息领域,特别是涉及一种基于统一计算设备架构(CUDA)的图形处理器(GPU)并行加速计算全息图生成方法。
技术介绍
全息显示技术可以提供物理和心理上的双重景深,被视为未来的3D显示技术。计算全息可以记录和再现现实中并不存在的物体,是目前主流的动态全息显示技术。然而,计算速度已经成为计算全息的瓶颈。通常,采用点云法计算一幅包含上万个采样点的全息图,需要花费数小时的时间。为解决这一问题,提出了各种各样的解决办法。这些办法主要可以分为两类:第一种是改进算法以提高运算速度,第二种是利用硬件设备的发展加速运算过程。随着GPU技术的发展,该设备慢慢进入人们的视野。GPU具有高速并行计算的能力,而且它作为一种PC机上的通用设备可以不依赖于特定平台,是一种较为理想的计算全息图(CGH)加速硬件。N.Masuda等将GPU用于CGH的计算,实现了一个47倍的加速效果。但是该方法是将全息图映射到GPU中,应用了大量计算机图形学的原理,使用较为不方便。NVIDIA公司于2008年推出了CUDA,利用这一架构可以大大降低编程难度,有利于GPU加速的广泛使用。Shimobaba等人利用CUDA架构编写了基于GPU的波动光学(GWO)库,可以利用GPU直接进行CGH计算。Song等人提出了一种基于CUDA的多GPU并行加速方法。Takada等使用GPU计算集群实现了高分辨率计算全息图的生成。但这些系统中采用的加速方法没有充分利用CUDA架构的一些特性,导致加速没有达到最佳效果。
技术实现思路
本专利技术的目的是提供一种结合点云法,基于CUDA的GPU并行加速计算全息图的方法。该方法能够减少数据传输时间,提高整个过程的运算效率。本专利技术提供一种基于CUDA的GPU并行计算全息图的方法,包括以下步骤:A1、根据GPU的数量,将待生成计算全息图进行划分;A2、读取物空间点,将数据进行划分;A3、分配线程块和线程数量,确定线程块、线程与计算全息图、物空间点的关系;A4、将步骤A1,A2,A3的结果代入点云法公式。优选地,步骤A1中待生成计算全息图的划分原则为:计算全息图的份数与GPU的数量相同。在Z个GPU的情况下,把待生成计算全息图划分为Z块,使得每一个GPU负责生成一部分计算全息图。进一步地优选:待生成计算全息图等份划分为与GPU数量相同的份数。优选地,步骤A2中数据分段所遵循的基本原则为Kernel函数的运算时间≥数据拷贝时间。数据拷贝的时间包含两部分,一部分为将一段数据拷贝进GPU的时间,另一部分为将运算完Kernel函数的结果拷贝出GPU所用的时间。如将空间采样点数据划分为n段,分别命名为DATA0,DATA1,…DATAn-1。将每段数据拷贝进GPU,时间为T1i;运算Kernel,运算时间为T2i;运算结果拷贝出GPU,时间为T3i;其中,i≤n-1。在运算第i段kernel函数的同时,将i+1段数据拷贝进GPU,以及将i-1段运算结果拷贝出GPU。优选地,步骤A2中的数据划分为等额划分,即DATA0=DATA1=…=DATAn-1。优选地,步骤A3中分配线程块和线程数量的原则是:一个线程块(Block)对应一个计算全息图的像素,每个线程块中的每个线程对应一个物空间点;如计算全息图的分辨率为M×L,则线程块的数量为M×L个。每个线程块中分配若干个线程(Thread),使得每一个线程对应一个物空间点。进一步优选地,线程的数量为2的整数次幂,且小于硬件限定数量。更进一步地优选,每个线程块中线程的数量为64-256。优选地,步骤A3还包括如下步骤:当物空间点数量大于线程数量时,可使用线程循环的方式遍历每个物空间采样点,基于线程块内的线程可以通过共享内存通信这一特性,利用归约运算的思想来优化累加过程,其基本过程如下:S1、将每个线程中的计算结果保存在对应序号的共享内存cache[0,1,…K-1]中,令iMax=K-1;S2、iMax=iMax/2,将cache[i]与cache[i+iMax+1](i=0,1,…,iMax)中的两个值相加,将结果保存到cache[i]当中;S3、如果iMax不等于0,跳转至S2;如果iMax=0,则跳转到S4;S4、Cache[0]即为最终结果。优选地,步骤A4中点云法生成计算全息图的公式为:或其中,Ii(xh,yh)为第i个物空间点传播到全息平面(xh,yh)处的光强,Ai为第i个物空间点的振幅,λ为参考光波长,(xi,yi,zi)为第i个物空间点,N是物空间采样点的个数;I(xh,yh)为全息平面(xh,yh)处的光强。上述步骤A4中,公式(3)是对点云法公式(1)的优化,选用乘运算代替除运算、用cosf函数代替cos运算,其运算速度更快。点云法计算生成计算全息图时,将物体视为由很多个点光源构成,分别独立地计算每个物空间点传播到计算全息图平面上的光场,然后进行叠加、编码,最后生成计算全息图。由于各物空间点是完全独立的,所以计算全息图的生成过程也相互独立、可以同时进行的。使用本专利技术提到的方法进行加速的点云法,经过光学再现和数值再现都可以得到清晰地3D模型。本专利技术的有益效果是:结合点云法算法的特点,对传统GPU加速方法进行优化。通过步骤A1将待生成计算全息图进行划分,使得每个GPU负责生成计算全息图的一部分,加速GPU的并行计算;通过步骤A2将物空间点的数据进行划分,使得在Kernel函数运算的同时,数据拷贝同时进行,有效减少数据传输的时间,从而提高了整个流程的效率;通过步骤A3充分运用GPU加速算法中线程块-像素(Block-pixel)的划分模式和利用共享内存与归约运算,使得运算速度得到大幅提升。另外,该方法建立在通用GPU架构上,编程方便,有利于广泛使用。附图说明图1为本专利技术的流程示意图。图2为实施例的待生成计算全息图的划分示意图。图3为实施例的物空间采样数据划分及GPU操作列队示意图。图4为实施例的线程块、线程和计算全息图、物空间点的对应关系;左侧为三维模型的物空间点,中间为线程块与线程的分配,右侧为计算全息图。图5为实施例的实验计算3D模型。图6为实施例使用本专利技术方法计算得到的计算全息图数值再现图。实施例下面结合附图与具体实施例对本专利技术进行详细说明。本专利技术的基本流程如图1。具体包括以下步骤:A1、本实施例中GPU数量为6个,将待生成计算全息图等份划分为6份,其示意图如图2所示。A2、读取物空间点,将数据等额划分为4段,分别命名为DATA0,DATA1,DATA2和DATA3;将DATA0拷贝到GPU中,运行Kernel函数进行相应计算,与此同时将DATA1拷贝到GPU中,当Kernel函数对DATA0的数据计算完成之后,即可无间隔的对DATA1数据进行运算,在此期间可以把DATA0的运算结果拷贝到CPU内存中,上述步骤无间隔地交替运行,将数据拷贝的时间隐藏在Kernel函数的运算时间中,其物空间采样数据划分及GPU操作列队示意图如图3所示。A3、分配线程块和线程数量,确定线程块、线程与计算全息图和物空间点的关系:计算全息图的分辨率为1920×1920,分配1920×1920个线程块,使得一个线程块对应一个计算全息图的像素;每个线程块中分配16×16个线程,每个线本文档来自技高网...

【技术保护点】
一种基于CUDA的GPU并行计算全息图的方法,其特征在于,包括以下步骤:A1、根据GPU的数量,将待生成计算全息图进行划分;A2、读取物空间点,将数据进行划分;A3、分配线程块和线程数量,确定线程块、线程与计算全息图、物空间点的关系;A4、将步骤A1,A2,A3的结果代入点云法公式。

【技术特征摘要】
1.一种基于CUDA的GPU并行计算全息图的方法,其特征在于,包括以下步骤:A1、根据GPU的数量,将待生成计算全息图进行划分;A2、读取物空间点,将数据进行划分;A3、分配线程块和线程数量,确定线程块、线程与计算全息图、物空间点的关系;A4、将步骤A1,A2,A3的结果代入点云法公式。2.如权利要求1所述的方法,其特征在于,步骤A1中待生成计算全息图划分的份数与GPU的数量相同。3.如权利要求2所述的方法,其特征在于,步骤A1中待生成计算全息图等份划分为与GPU的数量相同的份数。4.如权利要求1所述的方法,其特征在于,步骤A2中数据分段所遵循的基本原则为Kernel函数的运算时间≥数据拷贝时间。5.如权利要求1所述的方法,其特征在于,步骤A2中的数据划分为等额划分。6.如权利要求1所述的方法,其特征在于,步骤A3中分配线程块和线程数量的原则是:一个线程块对应一个计算全息图的像素;每个线程块中的每个线程对应一个物空间点。7.如权利要求6所述的方法,其特征在于,线程的数量为2的整数次幂,且小于硬件限定数量。8.如权利要求7所述的方法,其特征在于,每个线程块中线程的数量为64-256。9.如权利要求1所述的方法,其特征在于,步骤A3还包括如下步骤:当物空间点数量大于线程数时,使用线程循环的方式遍历每个物空间点,基本过程如下:S1、将每个线程中的计算结果保存在对应序号的共享内存cache[0,1,…,K-1]中,令iMax=K-1;S2、iMax=iMax/2,将cache[i]与cache[i+iMax+1](i=0,1,…,iMax)中的两个值相加,将结果保存到cache[i]当中;S3、如果iMax不等于0,跳转至S2;如果iMax=0,则跳转到S4;S4、Cache[0]即为最终结果;其中,Cache[i]为第i个线程,iMax为线程的...

【专利技术属性】
技术研发人员:苏萍程炳超曹文波马建设
申请(专利权)人:清华大学深圳研究生院
类型:发明
国别省市:广东;44

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

1