CUDA编程06 - 性能优化指南
一:概述
并行程序的执行速度在很大程度上取决于程序的资源需求与硬件的资源限制。在几乎所有并行编程模型中,管理并行代码与硬件资源约束之间的相互影响对于实现高性能非常重要的。这是一种实用的技能,需要对硬件体系结构有深刻理解,并需要在(为高性能设计的)并行编程模型中不断练习。
到目前为止,我们已经了解了GPU架构的各个方面及其对性能的影响。在前面的CUDA编程04 - GPU计算架构和线程调度中,我们了解了GPU的计算架构以及相关的性能考量因素,例如控制分叉(control divergence)和占用率(occupancy)。在CUDA编程05 - GPU内存架构和数据局部性中,我们了解了GPU的片上存储器架构和使用共享内存来提高程序性能。在本文中,我们将简要介绍片外内存(DRAM)架构,并讨论相关的性能考量因素,如内存合并和内存访问延迟隐藏。然后,我们将讨论一种重要的优化类型—线程粗粒度化(thread granularity coarsening),最后,我们总结一个常见的性能优化清单,并将该清单将作为优化的指南。
在不同的应用中,不同的体系结构约束可能占主导地位并成为限制性能的主要因素,这些主要的限制因素通常被称为瓶颈。通过