4.1_nvcc——CUDA编译器驱动程序
4.1 nvcc——CUDA编译器驱动程序
nvcc是CUDA开发者用来把源代码翻译为具有一定功能的CUDA应用程序的编译器驱动程序。它可以完成许多功能,从仅对.cu文件中的纯GPU代码进行编译到在单条命令中(本书中许多示例程序所提倡的一种用法)执行样例程序的编译、链接并运行的一条龙服务。
作为一个编译器驱动程序,nvcc所做的也就是搭建起生成环境,产生一组本地工具(例如安装在系统里的C语言编译器)以及利用CUDA特定的命令行工具(如ptexas)生成CUDA代码。它包含了许多默认选项(这些默认选项被认为是用户在多数情况下会使用的),可以进一步被命令行选项改写。其确切的行为取决于主命令行选项指定的“编译路径”(compile trajectory)。
表4-1列出了nvcc支持的文件扩展名以及为它们实现的默认行为(注意,这里略去了一些中间文件类型,如包含CUDA前台生成的主机代码的.i/.ii文件类型。)。表4-2列出了编译阶段的选项以及相应的编译路径。表4-3列出了nvcc影响系统环境的选项,如指向所包括目录的路径。表4-4列出了nvcc影响输出的选项,比如是否包含调试信息。表4-5列出了“传递”的选项,这些选项使nvcc可以把选项传递给它调用的工具,如ptxas。表4-6列出了nvcc其他一些不易归类的选项,如指示nvcc不要删除它创建的临时文件的-keep选项。
表4-1 nvcc输入文件的扩展名
表4-2 编译路径
(1)这些命令行选项会丢弃掉输入文件里的主机代码。
表4-3 nvcc选择项 (环境)
表4-4 编译器或链接器指定行为的选项
表4-5 nvcc传递选项
表4-6 其余的nvcc选项
表4-7列出了与nvcc代码生成有关的选项。--gpu-architecture和--gpu-code选项是特别让人迷惑的。前者控制面向哪个虚拟GPU架构进行编译(即,产生哪个PTX版本),而后者控制面向哪个实际GPU架
构进行编译(即,产生哪个SM微码版本)。--gpu-code选项必须指定至少与--gpu-architecture中一样高的SM版本。
表4-7 nvcc代码生成选项
--export-dir选项指定所有设备的代码映像将要复制的目标目录。它的目的是在应用程序运行过程中(在这种情况下,该目录应该在CUDA_DEVCODE_PATH的环境变量中)作为一个CUDA驱动程序可以检查的设备代码的存放地。存放地可以是目录也可以是ZIP文件。在这两种
情况下,为了方便CUDA驱动器查找代码,CUDA将维护一个目录结构。如果指定了一个不存在的文件名,那么该位置将创建一个目录结构(不是一个ZIP文件)。