前言
上一篇文章简单了介绍了nvcc预定义的宏,以及支持的编译阶段,对应的输入文件后缀和输出文件的默认名。本篇文章了解CUDA源文件编译的整个workflow。
Overview
CUDA编译的工作原理如下:输入程序经过设备编译编译预处理,编译为CUDA二进制(cubin)和/或PTX中间代码,被放置在一个fatbinary。 输入程序再次预处理以供主机编译,嵌入到 fatbinary, 并将 CUDA 特定 C++ 扩展转换为标准 C++ 构造。 然后 C++ 主机编译器将把带有嵌入式 fatbinary 的host code编译成host object。
每当主机程序启动设备代码时,CUDA 运行时系统都会检查嵌入式 fatbinary 以获得当前 GPU 的适当 fatbinary image。
CUDA 程序默认采用the whole program compilation mode全程序编译模式编译,即设备代码不能从单独的文件中引用实体。在全程序编译模式下,设备链接步骤不起作用。单独编译和整个程序编译的更多信息,将在第六章进行介绍。
总结
本文主要的take away: CUDA源文件会先被针对device进行预编译,然后编译为中间文件fatbinary, 然后由主机编译把host code with fatbinary为 host object.
下一篇文章会详细介绍关于GPU 编译相关的内容。