CUDAC++编程⼿册(总论)
CUDA C++编程⼿册(总论)
The programming guide to the CUDA model and interface.
U CUDA C++ instead of CUDA C to clarify that CUDA C++ is a C++ language extension not a C language.
General wording improvements throughput the guide.
Fixed minor typos in code examples.
Updated .
无师自通韩国语Added reference to NVRTC in .
Clarified linear memory address space size in .
Clarified usage of CUDA_API_PER_THREAD_DEFAULT_STREAM when compiling with nvccin .
Updated to u cudaLaunchHostFunc instead of the deprecated cudaStreamAddCallback.
Clarified that 8 GPU peer limit only applies to non-NVSwitch enabled systems in .
Added ction .
Added reference to CUDA Compatibility in .
Extended list of types supported by __ldg() function in .
Documented support for unsigned short int with .
Added ction .
Added removal notice for deprecated warp vote functions on devices with compute capability 7.x or higher in .
Added documentation for __nv_aligned_device_malloc() in .
Added documentation of cudaLimitStackSize in CUDA Dynamic Parallelism .
Added synchronization performance guideline to CUDA Dynamic Parallelism .
Documented performance improvement of roundf(), round() and updated Maximum ULP Error Table for Mathematical .
Updated Performance Guidelines for devices of compute
Clarified Shared Memory carve out description in Compute Capability 7.x .
Added missing Stream CUStream Mapping to
Added remark about driver and runtime API inter-operability, highlighting cuDevicePrimaryCtxRetain() in Driver API .
Updated default value of CUDA_C ACHE_M AXSIZE and removed no longer supported environment variables from Added new Unified Memory ctions: , ,
Added ction .
CUDA C++程序设计指南
CUDA模型和接⼝的编程指南。
版本10.0的更改
使⽤CUDA C++代替CUDA C来说明CUDA C++是⼀种C++语⾔扩展⽽不是C语⾔。
⼀般措词提⾼吞吐量指南。
修复了代码⽰例中的⼩错误。
从图形处理更新为通⽤并⾏计算。
在即时编译中添加了对NVRTC的引⽤。
澄清了设备内存中的线性内存地址空间⼤⼩。
阐明了使⽤nvccin DEFAULT STREAM编译时每个线程的CUDA_API_DEFAULT_流的⽤法。
已更新主机函数(回调)以使⽤cudaLaunchHostFunc,⽽不是已弃⽤的cudaStreamAddCallback。
阐明了8 GPU对等限制仅适⽤于对等内存访问中启⽤⾮NVSwitch的系统。
在Linux上添加了IOMMU部分。
在版本控制和兼容性中添加了对CUDA兼容性的引⽤。
只读数据缓存加载函数中的ldg()函数⽀持的扩展类型列表。
使⽤atomicCAS()⽀持⽆符号短整型。
添加了节地址空间谓词函数。
在warp投票功能中具有计算能⼒7.x或更⾼版本的设备上添加了已弃⽤的warp投票功能的删除通知。
添加了有关动态全局内存分配和操作中与设备对齐的malloc()的⽂档。
在CUDA动态并⾏配置选项中添加了cudaLimitStackSize的⽂档。
为CUDA动态并⾏同步增加了同步性能指标。
记录了roundf()、round()和更新的数学标准函数最⼤ULP错误表的性能改进。
更新了计算能⼒为7.x的设备的多处理器级性能指南。
阐明了计算能⼒7.x共享内存中的共享内存划分描述。
已将缺少的流CUStream映射添加到驱动程序API
添加了有关驱动程序和运⾏时API互操作性的注释,突出显⽰了驱动程序API上下⽂中的cuDevicePrimaryCtxRetain()。
更新了CUDA_C ACHE_M AXSIZE的默认值,并从CUDA环境变量中删除了不再⽀持的环境变量
添加了新的统⼀内存部分:系统分配器、硬件⼀致性、访问计数器
添加了“外部资源互操作性”⼀节。
工作反省
⼀.介绍
1.1 从图形处理到通⽤并⾏计算
由于市场对实时、⾼清晰度三维图形的需求⽆法满⾜,可编程图形处理器单元(GPU)已经发展成为⼀个⾼度并⾏、多线程、多核处理器,具有巨⼤的计算能⼒和⾮常⾼的内存带宽,如图1和图2所⽰。
核弹 英文
老友记电影版
图1. CPU和GPU每秒的浮点操作数
图2. CPU和GPU的内存带宽
CPU和GPU之间浮点能⼒差异的原因是,GPU专门⽤于⾼度并⾏的计算——正是图形渲染的⽬的——因此设计的晶体管更多地⽤于数据处理,⽽不是数据缓存和流控制,如图3所⽰。
图3. GPU将更多的晶体管⽤于数据处理
这在概念上适⽤于⾼度并⾏计算,因为GPU可以通过计算隐藏内存访问延迟,⽽不是通过⼤型数据缓存和流控制来避免内存访问延
迟。
数据并⾏处理将数据元素映射到并⾏处理线程。许多处理⼤型数据集的应⽤程序可以使⽤数据并⾏编
程模型来加快计算速度。在三维渲染中,⼤量像素和顶点被映射到平⾏线程。类似地,图像和媒体处理应⽤程序,例如渲染图像的后处理、视频编码和解码、图像缩放、⽴体视觉和模式识别,可以将图像块和像素映射到并⾏处理线程。事实上,许多图像绘制和处理领域之外的算法都是通过数据并⾏处理来加速的,从⼀般的信号处理或物理模拟到计算⾦融或计算⽣物学。
1.2. CUDA®通⽤并⾏计算平台及编程模型
2006年11⽉,NVIDIA推出了CUDA?通⽤并⾏计算平台和编程模型,它利⽤NVIDIA GPUs中的并⾏计算引擎以⽐CPU更⾼效的⽅式解决许多复杂的计算问题。
CUDA附带了⼀个软件环境,允许开发⼈员使⽤C++作为⾼级编程语⾔。如图4所⽰,⽀持其他语⾔、应⽤程序编程接⼝或基于指令的⽅法,如FORTRAN、DirectCompute、OpenACC。
图4. GPU计算应⽤。CUDA设计⽤于⽀持各种语⾔和应⽤程序编程接⼝。
1.3. ⼀种可扩展的编程模型
多核CPU和多核GPU的出现意味着主流处理器芯⽚现在是并⾏系统。挑战在于开发应⽤程序软件,透明地扩展其并⾏性,以利⽤不断增加的处理器内核数量,就像3D图形应⽤程序透明地将其并⾏性扩展到具有⼤量不同内核的多个核⼼gpu⼀样。
CUDA并⾏编程模型旨在克服这⼀挑战,同时为熟悉C等标准编程语⾔的程序员保持较低的学习曲线。
它的核⼼是三个关键的抽象——线程组的层次结构、共享内存和障碍同步——它们只是作为⼀组最⼩的语⾔扩展暴露给程序员。
这些抽象提供了细粒度数据并⾏和线程并⾏,嵌套在粗粒度数据并⾏和任务并⾏中。它们指导程序员将问题划分为粗的⼦问题,这些⼦问题可以由线程块独⽴并⾏地解决,⽽每个⼦问题⼜划分为更细的⼦问题,这些⼦问题可以由块内的所有线程协同并⾏地解决。这种分解通过允许线程在解决每个⼦问题时进⾏协作来保持语⾔的表达能⼒,同时实现⾃动可伸缩性。实际上,每个线程块都可以按任意顺序、并发或顺序调度到GPU内的任何可⽤多处理器上,这样编译后的CUDA程序就可以在任何数量的多处理器上执⾏,如图5所⽰,并且只有运⾏时系统需要知道物理多处理器计数。
google英语翻译这种可扩展的编程模型允许GPU体系结构通过简单地扩展多处理器和内存分区的数量来跨越⼴泛的市场范围:从⾼性能的狂热者GeForce GPU和专业的Quadro和Tesla计算产品到各种便宜的主流GeForce GPU(请参见启⽤CUDA的GPU列表在所有启⽤CUDA的GPU中)。
学习身边榜样
图5. ⾃动伸缩性
o holy night注意:GPU是围绕流式多处理器(SMs)阵列构建的(有关更多详细信息,请参阅硬件实现)。多线
程程序被划分成独⽴执⾏的线程块,这样多处理器的GPU将⽐少处理器的GPU在更短的时间内⾃动执⾏程序。
1.4. ⽂件结构
本⽂件分为以下章节:
Chapter is a general introduction to CUDA.
Chapter outlines the CUDA programming model.
Chapter describes the programming interface.小学英语哪家好
Chapter describes the hardware implementation.
Chapter gives some guidance on how to achieve maximum performance.
Appendix lists all CUDA-enabled devices.
Appendix is a detailed description of all extensions to the C++ language.
Appendix describes synchronization primitives for various groups of CUDA threads.
Appendix describes how to launch and synchronize one kernel from another.
Appendix lists the mathematical functions supported in CUDA.
Appendix lists the C++ features supported in device code.
Appendix gives more details on texture fetching
Appendix gives the technical specifications of various devices, as well as more architectural details.
Appendix introduces the low-level driver API.
Appendix lists all the CUDA environment variables.
dressAppendix introduces the Unified Memory programming model.
第⼀章绪论是对CUDA的概述。
第⼆章编程模型概述了CUDA编程模型。
第三章编程接⼝描述了编程接⼝。
第四章硬件实现描述了硬件实现。
第五章性能指南提供了⼀些关于如何实现最⼤性能的指导。hamster
附录CUDA启⽤的GPU列出所有CUDA启⽤的设备。
附录C++语⾔扩展是对C++语⾔的所有扩展的详细描述。
附录协作组描述了各种CUDA线程组的同步原语。
附录CUDA动态并⾏描述了如何从⼀个内核启动和同步另⼀个内核。
附录数学函数列出了CUDA⽀持的数学函数。
附录C++语⾔⽀持列出了设备代码中⽀持的C++特性。
附录纹理提取提供了有关纹理提取的更多详细信息
附录计算能⼒给出了各种设备的技术规范,以及更多的架构细节。
附录驱动程序API引⼊了底层驱动程序API。
附录CUDA环境变量列出了所有CUDA环境变量。
附录统⼀内存编程介绍了统⼀内存编程模型。