NVIDIACUDA是英伟达显卡加速平台,CUDA是NVIDIA发明了一种并行计算平台和编程模型。通过利用图形处理单元(GPU)的功能,可以显着提高计算性能。
基本简介
CUDA的开发考虑了几个设计目标:
提供对标准编程语言(例如C)的一小部分扩展,这些扩展可实现并行算法的直接实现。使用CUDAC/C++,程序员可以专注于算法的并行化任务,而不必花时间在其实现上。
在应用程序同时使用CPU和GPU的情况下支持异构计算。应用程序的串行部分在CPU上运行,并行部分被卸载到GPU。这样,CUDA可以增量地应用于现有应用程序。CPU和GPU被视为具有各自内存空间的单独设备。此配置还允许在CPU和GPU上同时进行计算,而不会争用内存资源。
具有CUDA功能的GPU具有数百个内核,这些内核可以共同运行数千个计算线程。这些内核具有共享资源,包括寄存器文件和共享内存。片上共享内存允许在这些内核上运行的并行任务共享数据,而无需通过系统内存总线发送数据。
使用方法
评估
对于现有项目,第一步是评估应用程序,以找到负责大部分执行时间的代码部分。有了这些知识,开发人员就可以评估这些瓶颈以进行并行化,并开始研究GPU加速。
通过了解最终用户的要求和约束并应用阿姆达尔定律和古斯塔夫森定律,开发人员可以通过加速应用程序已识别部分来确定性能改进的上限。
平行化
在确定了热点并完成了设置目标和期望的基本练习之后,开发人员需要并行处理代码。根据原始代码,这可以像调用现有的GPU优化库一样简单,例如立方玻璃,傅立叶变换,要么推力,也可以像向并行化编译器添加一些预处理器指令一样简单。
另一方面,某些应用程序的设计将需要进行一些重构以暴露其固有的并行性。由于甚至CPU架构也需要公开并行性以改善或简单地维护顺序应用程序的性能,因此CUDA并行编程语言家族(CUDAC++,CUDAFortran等)旨在使这种并行性的表达尽可能地简单。,同时在支持CUDA的GPU上启用操作,这些GPU设计用于实现最大并行吞吐量。
优化
在完成每一轮应用程序并行化之后,开发人员可以着手优化实现以提高性能。由于可以考虑许多可能的优化,因此充分了解应用程序的需求可以帮助使过程尽可能地流畅。但是,与整个APOD一样,程序优化是一个反复的过程(确定优化机会,应用和测试优化,验证所实现的加速并重复),这意味着程序员在看到良好的加速效果之前不必花费大量时间来记住所有可能的优化策略。相反,可以在学习策略时逐步应用它们。
从重叠的数据传输到计算一直到微调浮点运算序列,优化可以应用于各种级别。可用的概要分析工具对于指导此过程非常有用,因为它们可以帮助建议开发人员进行优化工作的最佳方案,并为该指南的优化部分的相关部分提供参考。
部署
完成应用程序一个或多个组件的GPU加速后,可以将结果与原始期望进行比较。回想一下,初始评估步骤允许开发人员确定通过加速给定热点可获得的潜在加速的上限。
在解决其他热点以提高总体速度之前,开发人员应考虑采用部分并行的实现,并将其付诸实践。这很重要,原因有很多;例如,它允许用户尽早从他们的投资中获利(提速可能是部分的,但仍然是有价值的),并且通过向开发者提供一组渐进而不是革命性的更改,将开发人员和用户的风险降至最低。应用。
软件组成
GPU加速库
CUDA-X库
IndeX框架(IndeX)
语言解决方案
OpenACC编译器指令
NVIDIACUDAC/C++编译器(NVCC)
参考资料
CUDAC/C++代码示例
CUDA文档
开发工具
NVTAGS
DIGITS深度学习培训系统
Nsight集成开发环境
可视分析器
CUDA-GDB命令行调试器
CUDA-MEMCHECK内存分析仪