目录
1、明确计算机中GPU卡片的计算资源,决定变量的性质(constant,share还是global)以及Grid,Block的维度,充分并合理利用GPU显卡的资源
2、提高PCI接口与GPU显卡的数据吞吐量
3、优化GPU内部存储到处理器之间的数据传输效率
4、利用性能分析工具进行程序性能分析,根据建议进行程序的性能优化
最近由于项目需要,需要用MPI+CUDA混合编程提高程序运行效率。相对于MPI并行程序编程,要想充分利用CUDA的资源利用率,还是要考虑很多方面的内容,根据查找的一些相关资料,将提升GPU显卡吞吐率以及利用效率的方法归纳如下,如有问题,敬请批评指正。下面是进行CUDA编程的大致流程,为了避免混乱,会将相关的详细内容放到链接所示的位置。
1、明确计算机中GPU卡片的计算资源,决定变量的性质(constant,share还是global)以及Grid,Block的维度,充分并合理利用GPU显卡的资源
在进行程序编写前需要明确知道计算机资源,尤其是显卡资源是很宝贵的,在实际编程中需要进行综合考虑,然后再进行参数的具体设置。首先得明白显卡的基本的一些信息,可以通过安装NVIDIA_SAMPLES来进行显卡基本信息的获取,NVIDIA_CUDA-9.1_Samples/1_Utilities/deviceQuery,我的机器的GPU显卡的具体信息如下:
这里面的每一条信息都是很重要的,其中我们平时用的最多的还是“Total amount of global memory,Multiprocessors, CUDA Cores/MP,L2 Cache Size,Maximum Texture Dimension Size (x,y,z),Total amount of constant memory,Total amount of shared memory per block,Total number of registers available per block,Warp size,Maximum number of threads per multiprocessor,Maximum number of threads per block,Max dimension size of a thread block (x,y,z),Max dimension size of a grid size (x,y,z),Integrated GPU sharing Host Memory,Support host page-locked memory mapping,Device has ECC support”等等,在地球物理相关的CUDA程序编写中,关注这些参数就已经足够了。对于一个程序在运行时对显卡资源的分配问题,详细内容可以点击下面两个链接。
具体可参考:GPU硬件结构和程序具体参数设置_yu132563的专栏-CSDN博客
CUDA程序编写具体参数设置_yu132563的专栏-CSDN博客
2、提高PCI接口与GPU显卡的数据吞吐量
- 使用流并行及统一内存、zerocopy等方法掩盖PCI接口与GPU显卡之间进行数据传输的时间延迟
- 核函数执行和数据传输的重叠
3、优化GPU内部存储到处理器之间的数据传输效率
主要方法如下:
4、利用性能分析工具进行程序性能分析,根据建议进行程序的性能优化
nvvp和nvprof工具进行性能分析,进一步提高计算性能
参考文献:
CUDA中Bank conflict冲突_smsmn的专栏-CSDN博客
CUDA总结:合并访问coalesced_Kelvin_Yan的专栏-CSDN博客_cuda合并访问
CUDA程序优化方法_changyi9995的博客-CSDN博客_cuda优化
CUDA2.2-原理之存储器访问 - 仙守 - 博客园
CUDA编程——zero copy_道道道人间道的博客-CSDN博客_cuda zerocopy
cuda Global Memory Access - 灰太狼锅锅 - 博客园
CUDA学习--CUDA流_Yi_M的博客-CSDN博客_cuda 流
CUDA编程第六章: 流和并发_Janus-CSDN博客
CUDA 7 Stream流简化并发性 - 吴建明wujianming - 博客园
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)