解读CUDA Compiler Driver NVCC - Ch.2 - Compilation Phases

解读CUDA Compiler Driver NVCC - Ch.2 - Compilation Phases_第1张图片

前言


上篇文章我们了解了nvcc是做什么的,本篇文章我们会了解Compilation Phases,编译阶段,nvcc预定义的宏,编译支持的文件格式等。

NVCC Identificaiton Macro


nvcc预定义了以下的宏:

__NVCC__: 在编译C/C++/CUDA源文件时定义

__CUDACC__: 在编译CUDA源文件时定义

__CUDACC_RDC__:在relocatable device code mode下编译CUDA源文件时定义

__CUDACC_EWP__:在extensible whole program mode下编译CUDA源文件时定义

__CUDACC_DEBUG__:在device-debug mode 下比编译CUDA源文件时定义

__CUDACC_RELAXED_CONSTEXPR__:当命令行指定了--expt-relaxed-constexpr flag时定义

___CUDACC_EXTENDED_LAMBDA__: 当命令行指定了--expt-extended-lambda or --extended-lambda flag的时候定义

__CUDACC_VER_MAJOR__: 由nvcc major version定义

__CUDACC_VER_MINOR__: 由nvcc minor version定义

__CUDACC_VER_BUILD__:由nvcc build version定义

NVCC Phases


一个compilation phase(编译阶段)就是逻辑翻译的步骤,可以通过nvcc选项来进行选择。单个的compilation phase还可以被分成很多更小的步骤,这些步骤就是该phase的执行过程,但是这些步骤依赖于nvcc使用的内部工具的能力,在新版本的CUDA toolkit下会有可能不同。

因此,只有compilation phase是在不同release之间是稳定的,nvcc提供了显示compilation phase的更小步骤的选项,但这个只能用来debug,不能加到build script里。

nvcc phases 是由命令行选项和input file 后缀来选定的 , 执行的编译阶段有可能被其他的命令选项改变。在phase 选择中,input file 后缀定义了phase的input, 命令行选项定义了该phase的output。

Supported Input File Suffixes


解读CUDA Compiler Driver NVCC - Ch.2 - Compilation Phases_第2张图片

nvcc不会区分object, library or resource file,它只是在linking阶段把这些文件传给linker 。?

Supported Phases


下面的表格列出了支持的编译阶段,也给出了对应的option命令。同时也列出了该编译阶段的output文件的默认名, 如果想自己指定,可以使用--output-file。 

解读CUDA Compiler Driver NVCC - Ch.2 - Compilation Phases_第3张图片

解读CUDA Compiler Driver NVCC - Ch.2 - Compilation Phases_第4张图片

解读CUDA Compiler Driver NVCC - Ch.2 - Compilation Phases_第5张图片

注意:

  • 最后一个phase,更多地是一个便捷阶段,它可以运行编译和链接而无需显式地设置CUDA动态库为library path。 

  • 除非一个option被指定,不然nvcc会编译和链接它所有的input files。

总结


本章简单了介绍了nvcc预定义的宏,以及支持的编译阶段,对应的输入文件后缀和输出文件的默认名。

下一篇文章了解CUDA源文件编译的整个workflow。 

你可能感兴趣的:(NVCC,NVCC)