面向CPU和GPU异构平台上粒子索引计算方法及装置
- 国知局
- 2024-07-31 22:56:38
本发明主要涉及到高性能计算,尤其是一种面向cpu和gpu异构平台上粒子索引计算方法及装置。
背景技术:
1、空天往返航天器的运行空域覆盖了对流层、平流层、中间层和热层的部分区域,跨越连续流、滑移流、过渡流甚至自由分子流等不同尺度的流动区域。传统的计算流体力学方法是基于连续介质假设和傅里叶定律的,控制方程为navier-stokes方程,但随着航天器飞行高度的增加,连续介质假设不再成立,因此传统的计算流体力学方法无法对飞行高度达到过渡流区的航天器外部流场进行准确的模拟。
2、因此直接模拟蒙特卡洛(direct simulation monte carlo method,dsmc)方法和统一气体动理学波粒(unified gas-kinetic wave-particle,ugkwp)方法等粒子类方法,成为了可重复使用的航天器设计中的重要模拟方法。由于粒子类方法的数据依赖性强,并且往往涉及多个空间层次的计算(如速度空间和物理空间),因此目前普遍基于cpu架构,对于实际工程问题模拟时,需要借助于超级计算机。
3、粒子类方法的数据量大、计算量大,存在大量的算数运算过程,而cpu虽功能强大,但存在大量的逻辑运算单元,算数运算单元所占比重小,因此cpu在用于粒子类方法的计算时,会存在大量的资源浪费。计算量大时,若采用大规模的计算集群,则计算成本会极大的增加,并且超级计算机的造价高昂、资源有限,无法得到普及。粒子类模拟方法算术运算多、逻辑运算少的特点,使得cpu+gpu异构并行框架成为了行之有效的解决方案,主要的算术运算由gpu完成,少量的逻辑运算在cpu上完成。
4、粒子类cfd模拟方法在实施时,需要将整个流场区域的物理空间划分为一系列的网格单元,并在每个单元网格内进行粒子速度、质量、位置等参数的采样,而粒子的运动和碰撞会造成网格单元内粒子数目的频繁变化,当此网络单元内粒子的参数的总和无法表征网络单元的物理量时,需要根据网络单元的物理量重新进行采样(resample),以增加一部分粒子,使粒子的总物理量始终可以表征单元的物理量。每个网络单元的物理量与粒子数不同,因此需要重新采样的粒子的数目也不同。
5、在cpu+gpu异构框架上执行上述过程时,由于gpu上的每个线程处理一个网格单元中的采样(resample)过程,并写在同一个particle数组(称为“particle”数组)中,而gpu的每个线程之间是并行运行的不存在数据交换,不同的线程会对particle数组并发写入。为了避免不同的线程操作同一块内存区域,造成数据冲突,需要在采样(resample)过程之前,gpu上的每个线程需按顺序对对应网格单元内新采样的粒子数目进行累加,目的是确定每个网络单元新采样粒子的起始索引,然后根据每个网格单元内的采样数目,即可确定每个线程操作的内存区域。
6、在cpu上串行执行时,无需考虑数据冲突问题,因此无需考虑;在cpu和gpu异构平台上,一般采用的方法效率低、计算慢。
技术实现思路
1、针对现有技术存在的技术问题,本发明提出一种面向cpu和gpu异构平台上粒子索引计算方法及装置。
2、为实现上述目的,本发明采用的技术方案如下:
3、一方面,本发明提供一种面向cpu和gpu异构平台上粒子索引计算方法,包括:
4、将当前gpu上运行的粒子方法模拟的整个流场区域的物理空间划分为 datasize个网格单元;
5、将需处理的 datasize个网格单元内重采样粒子数数组分成大小为 blocksize的block数据块;
6、计算每个block数据块的块内累加数组;
7、取出每个block数据块的块内累加数组中最后一个数据进行block数据块间的块际计算,得到block数据块间的块际计算结果;
8、将block数据块间的块际计算结果依次加到对应的block数据块的块内累加数组的数据上,得到整体的最终累加结果。
9、进一步地,计算每个block数据块的块内累加数组,包括:
10、对block数据块内数据进行分块处理,将block数据块内数据分为大小为的warp数据块;
11、并行执行每个warp数据块内的累加,得到每个warp数据块的块内累加数组;
12、取出每个warp数据块的块内累加数组中最后一个数据进行warp块际累加;
13、将各warp块际累加的结果依次加到对应的warp数据块的块内累加数组的数据上,得到每个block数据块的块内累加数组。
14、其中,对于每个warp数据块内的累加,包括:warp数据块均包含相同数目的线程thread,并行执行每个warp数据块内的thread层级累加,得到thread层级的每个warp数据块的块内累加数组。
15、进一步地,取出每个block数据块的块内累加数组中最后一个数据进行block数据块间的块际计算,包括:
16、取出每个block数据块的块内累加数组中最后一个数据,数据量共个,组成block-block数据块;
17、对block-block数据块内数据进行分块处理,将block-block数据块内数据分为大小为warpsize的block-warp数据块;
18、并行执行每个block-warp数据块内的累加,得到每个block-warp数据块的块内累加数组;
19、取出每个block-warp数据块的块内累加数组中最后一个数据进行block-warp数据块际累加;
20、将各block-warp数据块块际累加结果依次加到对应的block-warp数据块的块内累加数组的数据上,得到block-block数据块整体计算的最终结果,也即block数据块间的块际计算结果。
21、其中,对于每个block-warp数据块内的累加,包括:block-warp数据块均包含相同数目的线程thread,并行执行每个block-warp数据块内的thread层级累加,得到thread层级的每个block-warp数据块的块内累加数组。
22、另一方面,本发明提供一种面向cpu和gpu异构平台上粒子索引计算装置,包括:
23、第一模块,用于将当前gpu上运行的粒子方法模拟的整个流场区域的物理空间划分为 datasize个网格单元;
24、第二模块,用于将需处理的 datasize个网格单元内重采样粒子数数组分成大小为 blocksize的block数据块;
25、第三模块,用于计算每个block数据块的块内累加数组;
26、第四模块,用于取出每个block数据块的块内累加数组中最后一个数据进行block数据块间的块际计算,得到block数据块间的块际计算结果;
27、第五模块,用于将block数据块间的块际计算结果依次加到对应的block数据块的块内累加数组的数据上,得到整体的最终累加结果。
28、另一方面,本发明提供一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,处理器执行计算机程序时实现以下步骤:
29、将当前gpu上运行的粒子方法模拟的整个流场区域的物理空间划分为 datasize个网格单元;
30、将需处理的 datasize个网格单元内重采样粒子数数组分成大小为 blocksize的block数据块;
31、计算每个block数据块的块内累加数组;
32、取出每个block数据块的块内累加数组中最后一个数据进行block数据块间的块际计算,得到block数据块间的块际计算结果;
33、将block数据块间的块际计算结果依次加到对应的block数据块的块内累加数组的数据上,得到整体的最终累加结果。
34、另一方面,本发明提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
35、将当前gpu上运行的粒子方法模拟的整个流场区域的物理空间划分为 datasize个网格单元;
36、将需处理的 datasize个网格单元内重采样粒子数数组分成大小为 blocksize的block数据块;
37、计算每个block数据块的块内累加数组;
38、取出每个block数据块的块内累加数组中最后一个数据进行block数据块间的块际计算,得到block数据块间的块际计算结果;
39、将block数据块间的块际计算结果依次加到对应的block数据块的块内累加数组的数据上,得到整体的最终累加结果。
40、相比现有技术,本发明的技术效果:
41、本发明根据cpu和gpu异构平台的特点,提出了一种多层次粒子索引计算方法,其是一种thread-warp-block多并行层次的粒子索引计算方法,解决了粒子类方法在cpu+gpu异构架构上实施时存在的数据冲突和粒子索引计算低效的问题。
42、本发明能够将cpu和gpu异构平台上运行的粒子方法中的粒子索引计算部分的计算时间减少了4~5个数量。
本文地址:https://www.jishuxx.com/zhuanli/20240730/195434.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 YYfuon@163.com 举报,一经查实,本站将立刻删除。
下一篇
返回列表