本章提供了CUDA C编程模型的快速、简化的概述。CUDA扩展C语言以支持并行计算。在本章中,我们讨论了这些扩展的基本子集。为了您的方便,我们将本章中讨论的扩展总结如下:
FUNCTION DECLARATIONS
CUDA C扩展了C函数声明语法,以支持异构并行计算。扩展总结在图2.13.中。使用“global”、“device’”或“__host _”之一,CUDA C程序员可以指示编译器生成内核函数、设备函数或主机函数。所有没有这些关键字的函数声明都默认为主机函数。如果在函数声明中同时使用“host”和“”和“device”,编译器会生成两个版本的函数,一个用于设备,一个用于主机。如果函数声明没有任何CUDA C扩展关键字,则该函数默认为主机函数。
KERNEL LAUNCH
CUDA C 扩展了 C函数调用语法,内核执行配置参数被<<<和>>>包围。这些执行配置参数仅在调用内核函数或内核启动期间使用。我们讨论了定义网格尺寸和每个块尺寸的执行配置参数。阅读器应参考阅读器应参考CUDA编程指南[NVIDIA 2016],以了解内核启动扩展以及其他类型的执行配置参数的更多详细信息。
BUILT-IN (PREDEFINED) VARIABLES
CUDA kerels可以访问一组内置的预定义的只读变量,这些变量允许每个线程区分它们,并确定每个线程要处理的数据区域。在本章中,我们讨论了threadldx、blockDim和blockldx变量。在第3章,可扩展并行执行中,我们将讨论使用这些变量的更多细节。
RUN-TIME API
CUDA支持一组API功能,为CUDA C程序提供服务。我们在本章中讨论的服务是cudaMalloc(),cudaFree() 和cudaMemcpy() 函数。这些函数分别代表调用程序分配设备内存并在主机和设备之间传输数据。阅读器参考CUDA C编程指南以了解其他CUDA API功能。
我们本章的目标是介绍CUDA C的核心概念和C的基本CUDA C扩展,以编写一个简单的CUDA C程序。本章绝不是对所有CUDA功能的全面描述。其中一些功能将在书的其余部分中介绍。然而,我们的重点将是这些功能支持的关键并行计算概念。我们只会介绍并行编程技术的代码示例中所需的足够的CUDA C功能。一般来说,我们鼓励读者始终查阅CUDA C编程指南,以了解CUDA C功能的更多详细信息。