CUDA:一种异构计算平台

CUDA:一种异构计算平台

1.CUDA的简单介绍

CUDA是一种通用的并行计算平台和编程模型,它利用NVIDIA GPU中的并行计算引擎能够有效地解决复杂的计算问题。通过使用CUDA,你可以像在CPU上,通过GPU来进行计算。

CUDA平台可以通过CUDA加速库,编译器指令,应用编程接口以及行业标准程序语言的扩展(包括C,C++,Fortran,Python,如图1-12所示)来使用。

CUDA C是标准ANSI C语言的一个扩展,它带有的少数语言扩展功能使异构编程成为可能,同时也能通过API来管理设备,内存和其他任务。CUDA还是一个可扩展的编程模型,它使程序能对有不同数量核的GPU明显地扩展其并行性,同时对熟悉C编程语言的程序员来说也比较容易上手。

image-20230116175503342

CUDA提供了两层API来管理GPU设备和组织线程,如图1-13所示。

image-20230116175610403

-CUDA驱动API

-CUDA运行时API

驱动API是一种低级API,它相对来说较难编程,但是它对于在GPU设备使用上提供了更多的控制。运行时API是一个高级API,他在驱动API的上层实现。每个运行时API函数都被分解为更多传给驱动API的基本运算。

2.运行时API与驱动API

运行时API和驱动API之间没有明显的性能差异。在设备端,内核是如何使用内存以及你是如何组织线程的,对性能有更显著的影响。

这两种API是相互排斥的,你必须使用两者之一,从两者中混合函数调用是不可能的。本书中所有例子都使用运行时API。

一个CUDA程序包含了以下两个部分的混合。

-在CPU上运行的主机代码

-在GPU上运行的设备代码

NVIDIA的CUDA nvcc编译器在编译过程中将设备代码从主机代码中分离出来。如图1-14所示,主机代码是标准的C代码,使用C编译器进行编译。设备代码,也就是核函数,是用扩展的带有标记数据并行函数关键字的CUDA C语言编写的。设备代码通过nvcc进行编译。在链接阶段,在内核程序调用和显示GPU设备操作中添加CUDA运行时库。

image-20230116180725596

CUDA nvcc编译器是以广泛使用LLVM开源编译系统为基础的。在GPU加速器的支持下,通过使用CUDA编译器SDK,你可以创建或扩展编程语言,如图1-15所示。

CUDA平台也是支持多样化并行计算生态系统的基础,如图1-26所示。现在,随着越来越多的公司可以提供全球性的工具,服务和解决方案,CUDA生态系统迅速成长。如果你想在GPU上建立你的应用程序,强化GPU性能最简单方式是使用CUDA工具包(cuda-toolkit),它为C和C++开发人员提供了一个综合的开发环境。CUDA工具包包括编译器,数学库,以及调式和优化应用程序性能的工具。同时提供了代码样例,编程指南,用户手册,API参考文档和其他帮助你入门的文档。

image-20230116181439404

image-20230116181447616

3.参考资料

CUDA C编程权威指南 程润伟,Max Grossman(美),Ty Mckercher


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!