
.cu 中的设备代码编译为虚拟架构的 PTX 中间汇编(对应compute_xy 虚拟架构)sm_xy 真实架构)输入后缀 | 说明 |
|---|---|
.cu | CUDA 源文件,同时包含主机代码与设备函数 |
.ptx | PTX 中间汇编文件 |
.cubin | 单 GPU 架构的设备二进制文件 |
.fatbin | 胖二进制,可包含多套 PTX 与 cubin |
.o/.obj | 主机目标文件,可嵌入设备胖二进制 |
高频编译阶段与对应选项:
编译目标 | 长选项 | 短选项 |
|---|---|---|
生成 PTX 汇编 | --ptx | -ptx |
生成 cubin 二进制 | --cubin | -cubin |
生成 fatbin 胖二进制 | --fatbin | -fatbin |
编译为主机目标文件 | --compile | -c |
生成可重定位设备代码(RDC) | --device-c | -dc |
执行设备链接 | --device-link | -dlink |
--gpu-architecture (-arch):指定虚拟编译架构(compute_xy),控制 PTX 支持的功能集;支持简写(直接写sm_xy 会自动匹配对应虚拟架构),也支持-arch=native(自动检测本机 GPU)、-arch=all(生成全架构代码)。--gpu-code (-code):指定最终生成的真实 GPU 架构二进制,可指定多个;值必须与-arch 的虚拟架构兼容(真实架构版本不能低于虚拟架构)。--generate-code (-gencode):更灵活的多架构编译选项,可指定多组「虚拟架构 + 真实架构」组合,是发布版程序的标准写法。--relocatable-device-code (-rdc):开启 / 关闭可重定位设备代码,默认false(全程序编译模式,设备代码不能跨文件引用);设为true 后支持跨文件设备函数调用,但必须经过 nvlink 设备链接。--maxrregcount:限制设备函数的最大寄存器使用量;寄存器越多单线程性能越好,但会降低可并发的线程块数量,是性能调优核心参数。--use_fast_math:快速数学库,等价于开启ftz=true、prec-div=false、prec-sqrt=false、fmad=true,牺牲浮点精度换取计算性能。--device-debug (-G):生成设备代码调试信息,会默认关闭所有设备代码优化,仅用于调试;性能分析应使用--generate-line-info (-lineinfo)。--debug (-g):仅生成主机代码调试信息,不影响设备代码优化。--dlink-time-opt (-dlto):设备链接时优化(LTO),编译时存储高级中间码,链接时执行跨文件全局优化。--default-stream:指定默认 CUDA 流,默认legacy(遗留流,隐式同步),可选per-thread(线程私有流,无隐式同步)。-Xcompiler(传给主机编译器)、-Xlinker(传给主机链接器)、-Xptxas(传给 PTX 汇编器)、-Xnvlink(传给设备链接器)-ccbin 指定主机编译器路径;--cudart 指定 CUDA 运行时库类型(默认static 静态库);-I/-L/-l 分别指定头文件路径、库路径、链接库名,与 gcc 用法一致。.cu 的设备代码自成完整程序,不能跨文件调用设备函数,无需设备链接。-dlink 执行设备链接(nvlink)生成可执行设备代码,再交给主机链接器。__NVCC__:编译所有 C/C++/CUDA 文件时定义__CUDACC__:仅编译 CUDA 源文件时定义__CUDACC_RDC__:开启 RDC 分离编译模式时定义__CUDACC_DEBUG__:开启设备调试模式时定义NVCC_PREPEND_FLAGS /NVCC_APPEND_FLAGS:全局前置 / 追加 nvcc 选项,无需修改构建脚本NVCC_CCBIN:全局指定默认主机编译器了解一下CUDA编译的过程,这个应该不会是AII考试的重点,不过对于日常运维还是有一些用处。