当前位置: 首页 > 专利查询>上海大学专利>正文

一种N-body问题近程作用计算在GPU结构的优化映射方法技术

技术编号:8387042 阅读:198 留言:0更新日期:2013-03-07 07:44
本发明专利技术涉及一种N-body问题近程作用计算在GPU结构的优化映射方法,用于计算粒子受到本盒子中其他粒子以及邻居盒子中粒子的近程作用,所述方法包括建立数组Neighbor?List,依次存储编号大于当前盒子编号的邻居盒子信息;建立数组acc记录全局存储器中粒子所受其他粒子近程作用的计算结果;建立多个block与所有盒子的一一对应关系,使每个block处理与其对应的盒子中粒子近程作用的计算。本发明专利技术提出的通过高速存取的片上共享存储来复用数据,解决了CPU算法访存的瓶颈,利用牛顿第三定律减少了算法的计算量,总体时间得到了进一步优化,实现近程计算部分在GPU结构上的高效执行,提高了计算效率。

【技术实现步骤摘要】
一种N-body问题近程作用计算在GPU结构的优化映射方法
本专利技术涉及GPU并行计算领域,尤其涉及一种N-body问题近程作用计算在GPU(GraphicProcessingUnit,图形处理器)结构的优化映射方法。
技术介绍
随着技术的发展,众核GPU已经成为目前重要的处理器。传统上GPU只用于处理3D渲染任务,而其它大多数的任务都交给了CPU处理。CPU作为一种通用处理器,其体系结构设计必须兼顾各种任务的需要,因此CPU中大多数晶体管被用于制造庞大的缓存和复杂的控制逻辑,而运算单元占用面积则并不多;相反地,GPU由于图形渲染的并行特性与生俱来具有大量运算单元,非常适合计算密集型的大规模数据并行计算。但由于传统GPU硬件架构的限制很难有效利用其资源进行通用计算,为此,NVIDIA公司推出了CUDA(ComputeUnifiedDeviceArchitecture,通用并行计算架构)完全扭转了局面,由于其功能强大、应用领域广泛,推动了GPU通用计算的发展。但如何高效地在GPU架构上实现算法是研究人员当前面临的巨大挑战。N-body问题是高性能计算领域最具代表性、最有影响力以及最有挑战性的问题之一,具有广泛的应用领域,并因其应用的重要性和实际计算的复杂性一直是高性能计算的主要热点之一。N-body问题主要应用在天体物理学、分子动力学等领域,多体问题是计算场中的多个粒子之间的相互作用及其运动轨道,是最具普适性的力学问题之一。当粒子为宏观的天体时,天体多体模拟计算是当前研究星系以及宇宙结构形成的主要途径。当粒子为微观的分子、原子时,多体问题即表现为分子动力学问题,由于分子动力学可以预测纳米尺度材料动力学特性,因此在物理、化学、生物、医药、新材料设计等领域有着广泛的应用。N-body问题主要解决有限空间中每个粒子所受其它粒子作用的计算,算法复杂度为O(N2),由于当空间中粒子数很大时计算量非常巨大,因此为了减少计算量,提出了树形算法,其中最主要的FastMultipoleMethod(快速多极算法,以下简称FMM算法)将算法复杂度降低到了O(N)。树形算法的核心思想是通过对空间进行划分将粒子所受作用分类为近程作用和远程作用,近程作用直接计算而远程作用则近似计算。目前关于N-body的并行计算主要采用基于MPI编程模型的CPU集群,存在大量的通信和负载的不均衡造成的性能瓶颈,而以GRAPE为代表的专用机虽然取得较高的性能但并未对整个树形算法加速,并且专用机本身应用的局限性提高了设备的成本。GPU加速平台提供解决上述问题的途径,但现有对求解N-body问题的FMM算法进行CUDA加速的软件对于近程计算部分存在访存的瓶颈,并且对计算量未进行优化,因此计算性能不理想。
技术实现思路
为了解决上述现有技术存在的问题,本专利技术旨在提供一种N-body问题近程作用计算在GPU结构的优化映射方法,以高效实现CPU算法到GPU结构映射的计算任务划分和数据存取,从而为求解典型N-body应用问题提供多级并行求解方法。本专利技术所述的一种N-body问题近程作用计算在GPU结构的优化映射方法,用于计算粒子受到本盒子中其他粒子以及邻居盒子中粒子的近程作用,所述方法包括以下步骤:步骤S0,建立数组NeighborList,依次存储编号大于当前盒子编号的邻居盒子信息;建立数组acc记录全局存储器中粒子所受其他粒子近程作用的计算结果;建立多个block与所有盒子的一一对应关系,使每个block处理与其对应的盒子中粒子近程作用的计算,每个block中的线程数不小于与其对应的盒子中的粒子数,每个盒子中的粒子数均为n;步骤S1,对应当前盒子的block在共享存储器中申请大小均为n的数组A和数组B,其中,数组A用于保存当前盒子中的n个粒子的信息,数组B用于存放当前盒子中每个粒子所受当前盒子中其他n-1个粒子的反作用力数据;步骤S2,建立对应当前盒子的block中的前n个线程与当前盒子中的n个粒子的一一对应关系,使每个线程将与其对应的当前盒子中的粒子信息装载到共享存储器中的数组A中;步骤S3,对应当前盒子的block的前n个线程中的每个线程在寄存器中申请一个局部变量d_acc,每个局部变量d_acc用于保存当前线程对应的当前盒子中粒子所受的作用力,设当前线程对应的粒子为第threadIdx.x个粒子,threadIdx.x的取值范围为0至n-1,然后当前线程从共享存储器的数组A中顺序读取第threadIdx.x个粒子后面的n-threadIdx.x-1个粒子的信息,并分别将n-threadIdx.x-1个粒子与第threadIdx.x个粒子进行近程作用计算;每对粒子间的近程作用计算结果同时更新到局部变量d_acc和数组B;完成当前盒子中所有粒子间的近程作用计算后,对应当前盒子的block的前n个线程中的每个线程将数组B中存放的与该线程对应的当前盒子中粒子所受的反作用力数据叠加到数组acc中的元素acc[i]的位置,i表示当前线程所对应的当前盒子中的粒子;步骤S4,根据数组NeighborList,建立对应当前盒子的block中的前n个线程与当前盒子的下一个邻居盒子中的n个粒子的一一对应关系,使每个线程将与其对应的邻居盒子中粒子信息装载到共享存储器中的数组A中,以覆盖数组A中当前盒子中粒子的信息,同时,将数组B中存放的数据清零,使数组B用于存放当前盒子的下一个邻居盒子中每个粒子所受当前盒子中n个粒子的反作用力数据;步骤S5,对应当前盒子的block的前n个线程中的每个线程从共享存储器的数组A中顺序读取当前盒子的下一个邻居盒子中的n个粒子的信息,并将该邻居盒子中的n个粒子分别与当前线程对应的当前盒子中的粒子进行近程作用计算;每对粒子间的计算结果需要同时更新到局部变量d_acc和数组B;完成当前盒子中n个粒子与当前盒子的下一个邻居盒子中n个粒子间的近程作用计算后,对应当前盒子的block的前n个线程中的每个线程将数组B中存放的与该线程对应的邻居盒子中粒子所受的反作用力数据叠加到数组acc中的元素acc[j]位置,j表示当前线程所对应的邻居盒子中的粒子;步骤S6,根据数组NeighborList,判断是否所有编号大于当前盒子编号的邻居盒子中的粒子信息都已经被装载到过共享存储器中用来与当前盒子中的粒子进行近程作用计算,若是,则当前盒子中粒子受到邻居盒子中粒子的近程作用计算完成,否则回到步骤S4继续装载再下一个邻居盒子中的粒子信息并依次执行步骤S5和步骤S6,直至完成当前盒子中粒子与其所有邻居盒子中粒子间的近程作用计算;步骤S7,对应当前盒子的block的前n个线程中的每个线程将该线程申请的局部变量d_acc一一对应地写入全局存储器的数组acc中的元素acc[i]的位置,i表示当前线程所对应的当前盒子中的粒子。在上述的N-body问题近程作用计算在GPU结构的优化映射方法中,所述每个block中的前n个线程处理其对应盒子中的n个粒子,每个block中的其余线程闲置。在上述的N-body问题近程作用计算在GPU结构的优化映射方法中,所述每个block中的线程数最大为512。由于采用了上述的技术解决方案,本专利技术是一种根据牛顿第三定律所构建的基于GPU硬件加速的本文档来自技高网
...
一种N-body问题近程作用计算在GPU结构的优化映射方法

【技术保护点】
一种N?body问题近程作用计算在GPU结构的优化映射方法,用于计算粒子受到本盒子中其他粒子以及邻居盒子中粒子的近程作用,其特征在于,所述方法包括以下步骤:步骤S0,建立数组Neighbor?List,依次存储编号大于当前盒子编号的邻居盒子信息;建立数组acc记录全局存储器中粒子所受其他粒子近程作用的计算结果;建立多个block与所有盒子的一一对应关系,使每个block处理与其对应的盒子中粒子近程作用的计算,每个block中的线程数不小于与其对应的盒子中的粒子数,每个盒子中的粒子数均为n;步骤S1,对应当前盒子的block在共享存储器中申请大小均为n的数组A和数组B,其中,数组A用于保存当前盒子中的n个粒子的信息,数组B用于存放当前盒子中每个粒子所受当前盒子中其他n?1个粒子的反作用力数据;步骤S2,建立对应当前盒子的block中的前n个线程与当前盒子中的n个粒子的一一对应关系,使每个线程将与其对应的当前盒子中的粒子信息装载到共享存储器中的数组A中;步骤S3,对应当前盒子的block的前n个线程中的每个线程在寄存器中申请一个局部变量d_acc,每个局部变量d_acc用于保存当前线程对应的当前盒子中粒子所受的作用力,设当前线程对应的粒子为第threadIdx.x个粒子,threadIdx.x的取值范围为0至n?1,然后当前线程从共享存储器的数组A中顺序读取第threadIdx.x个粒子后面的n?threadIdx.x?1个粒子的信息,并分别将n?threadIdx.x?1个粒子与第threadIdx.x个粒子进行近程作用计算;每对粒子间的近程作用计算结果同时更新到局部变量d_acc和数组B;完成当前盒子中所有粒子间的近程作用计算后,对应当前盒子的block的前n个线程中的每个线程将数组B中存放的与该线程对应的当前盒子中粒子所受的反作用力数据叠加到数组acc中的元素acc[i]的位置,i表示当前线程所对应的当前盒子中的粒子;步骤S4,根据数组Neighbor?List,建立对应当前盒子的block中的前n个线程与当前盒子的下一个邻居盒子中的n个粒子的一一对应关系,使每个线程将与其对应的邻居盒子中粒子信息装载到共享存储器中的数组A中,以 覆盖数组A中当前盒子中粒子的信息,同时,将数组B中存放的数据清零,使数组B用于存放当前盒子的下一个邻居盒子中每个粒子所受当前盒子中n个粒子的反作用力数据;步骤S5,对应当前盒子的block的前n个线程中的每个线程从共享存储器的数组A中顺序读取当前盒子的下一个邻居盒子中的n个粒子的信息,并将该邻居盒子中的n个粒子分别与当前线程对应的当前盒子中的粒子进行近程作用计算;每对粒子间的计算结果需要同时更新到局部变量d_acc和数组B;完成当前盒子中n个粒子与当前盒子的下一个邻居盒子中n个粒子间的近程作用计算后,对应当前盒子的block的前n个线程中的每个线程将数组B中存放的与该线程对应的邻居盒子中粒子所受的反作用力数据叠加到数组acc中的元素acc[j]位置,j表示当前线程所对应的邻居盒子中的粒子;步骤S6,根据数组Neighbor?List,判断是否所有编号大于当前盒子编号的邻居盒子中的粒子信息都已经被装载到过共享存储器中用来与当前盒子中的粒子进行近程作用计算,若是,则当前盒子中粒子受到邻居盒子中粒子的近程作用计算完成,否则回到步骤S4继续装载再下一个邻居盒子中的粒子信息并依次执行步骤S5和步骤S6,直至完成当前盒子中粒子与其所有邻居盒子中粒子间的近程作用计算;步骤S7,对应当前盒子的block的前n个线程中的每个线程将该线程申请的局部变量d_acc一一对应地写入全局存储器的数组acc中的元素acc[i]的位置,i表示当前线程所对应的当前盒子中的粒子。...

【技术特征摘要】
1.一种N-body问题近程作用计算在GPU结构的优化映射方法,用于计算粒子受到本盒子中其他粒子以及邻居盒子中粒子的近程作用,其特征在于,所述方法包括以下步骤:步骤S0,建立数组NeighborList,依次存储编号大于当前盒子编号的邻居盒子信息;建立数组acc记录全局存储器中粒子所受其他粒子近程作用的计算结果;建立多个block与所有盒子的一一对应关系,使每个block处理与其对应的盒子中粒子近程作用的计算,每个block中的线程数不小于与其对应的盒子中的粒子数,每个盒子中的粒子数均为n;步骤S1,对应当前盒子的block在共享存储器中申请大小均为n的数组A和数组B,其中,数组A用于保存当前盒子中的n个粒子的信息,数组B用于存放当前盒子中每个粒子所受当前盒子中其他n-1个粒子的反作用力数据;步骤S2,建立对应当前盒子的block中的前n个线程与当前盒子中的n个粒子的一一对应关系,使每个线程将与其对应的当前盒子中的粒子信息装载到共享存储器中的数组A中;步骤S3,对应当前盒子的block的前n个线程中的每个线程分别在寄存器中申请一个局部变量d_acc,每个局部变量d_acc用于保存其所属当前线程对应的当前盒子中一个粒子所受的近程作用力,设当前线程对应的粒子为第threadIdx.x个粒子,threadIdx.x的取值范围为0至n-1,然后当前线程从共享存储器的数组A中顺序读取第threadIdx.x个粒子后面的n-threadIdx.x-1个粒子的信息,并分别将n-threadIdx.x-1个粒子与第threadIdx.x个粒子进行近程作用计算;每对粒子间的近程作用计算结果同时叠加到相应线程的局部变量d_acc和数组B中相应位置;完成当前盒子中所有粒子间的近程作用计算后,对应当前盒子的block的前n个线程中的每个线程分别将数组B中存放的与该线程对应的当前盒子中粒子所受的反作用力数据叠加到全局存储器的数组acc中的元素acc[i]的位置,i表示当前线程所对应的当前盒子中的粒子编号;步骤S4,根据数组NeighborList,建...

【专利技术属性】
技术研发人员:雷咏梅单健晨朱劲师方韵
申请(专利权)人:上海大学上海红神信息技术有限公司
类型:发明
国别省市:

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

1