实现高性能¶
在高性能计算领域,编写定制化代码的能力能帮助用户实现更优性能表现。对于cuFFTDx而言,现有FFT应用程序的性能提升潜力巨大,但这很大程度上取决于库的使用方式。以常规cuFFT库为基准,性能表现可能会有高达一个数量级的波动。因此将现有代码移植到cuFFTDx时,必须始终同步进行性能分析。以下我们列出可能对此过程有帮助的通用建议。
通用建议¶
尝试使用库提供的默认设置,以获得最佳计算性能。
计算密集型内核和内存密集型内核的最佳参数可能并不相同。
确保FFT内核运行足够的块以填满GPU,实现峰值性能。
将相邻的内存受限内核(预处理和后处理)与FFT内核合并,以减少全局内存访问次数。
内存管理¶
避免从全局内存中读取/写入数据。
确保全局内存的读取/写入是合并的(如果需要,增加FFTs Per Block Operator的值)。
使用
shared内存或额外寄存器来存储临时数据。
内核融合¶
对于复杂的内核,建议调整FFT操作以匹配用户内核。 (例如,调整Elements Per Thread Operator将改变所需的CUDA块大小)。即将发布的 cuFFTDx版本将提供更多自定义选项。
对于简单操作,可以考虑将操作合并到针对FFT性能优化的FFT内核中。
高级¶
对于未完全占用GPU的FFT负载,可考虑在单独的流中运行并行内核。
CUDA Occupancy Calculator 6 和/或 cudaOccupancyMaxActiveBlocksPerMultiprocessor 8 函数用于确定最佳启动参数。
使用 CUDA Occupancy Calculator 6 或 Nsight Compute 7 来确定在不降低占用率的情况下可用的额外资源。
延伸阅读¶
参考文献¶
- 1
https://docs.nvidia.com/cuda/cuda-c-best-practices-guide/index.html
- 2
- 3
- 4
- 5
- 6(1,2)
https://docs.nvidia.com/cuda/cuda-occupancy-calculator/index.html
- 7
https://docs.nvidia.com/nsight-compute/NsightCompute/index.html#occupancy-calculator
- 8
https://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__OCCUPANCY.html