论文部分内容阅读
近几年CFD技术的进步很快,其应用范围也越来越广,计算网格量剧增,少则上百万,多则以千万计、以亿计,巨大的计算量给当前以CPU为计算核心的并行计算集群带来了巨大的压力,而以GPU为计算核心可以很好的解决这个问题。本文针对CUDA平台进行了CFD数值模拟的实现,并分析了针对基于CUDA架构的CFD程序进行优化的特点以及不同数值格式在CUDA平台中的收益。本文针对英伟达公司提出的CUDA平台进行了基础性的介绍,它在硬件层次上可分为流处理器阵列和存储器系统,在软件层次上主要是内核函数的线程结构,指出了它与CPU架构的不同点。然后列举了不同的并行模式,重点介绍了CUDA架构的并行模式——单指令多线程模型,分析了它与传统并行模式的异同。针对一维激波管问题和二维双马赫反射问题,采用WENO5阶格式在CUDA架构上进行计算。分别阐述其实现过程,其中包括数据结构、数据通信以及内核函数的执行配置。在一维问题中,从数值上分析基于CUDA的CFD并行算法的准确性,并重点的分析了其单精度算法与双精度算法的差距,然后分析了各自的加速比;在二维问题中,重点从流场结构中去分析程序的准确性,结果表明无论是单精度还是双精度的CUDA算法都可以很好的刻画流场结构,且都有较高的加速比。针对基于CUDA的二维WENO5程序从三个方面进行优化,分别是最大化利用率、最大化存储器通信量、最大化指令吞吐量。在最大化利用率方面分别采取流的方式和提高资源占有率的方式;在最大存储器吞吐量方面分别采取了设备存储器的优化和共享存储器的优化;在最大化指令吞吐量方面主要是算术指令和控制流指令的优化。针对不同的CFD数值格式,分别采用CUDA架构去实现。基于二维双马赫反射问题分别采用Steger-Warming分裂格式、Roe格式、AUSMPW+格式在CUDA中实现,并与WENO5的格式进行了对比,比较了它们的加速比,分析针对不同的格式有不同的加速比的原因。