nvcc 编译过程

nvcc 编译分为两个阶段
首先将 .cu 编译为面向 虚拟架构 的 .ptx 代码 (stage1)
然后将 .ptx 编译为面向 实际架构 的 二进制代码 (stage2)

2022-10-06T03:30:59.png

实际架构 需要兼容 虚拟架构
在运行时,若二进制代码可以直接在 GPU 上运行,则直接运行,否则 如果文件中包含 虚拟架构 代码,GPU 驱动动态将代码编译为二进制代码 (JIT compiler)

-arch 选项

-arch 选项指定第一阶段的虚拟架构,包括 compute_30, compute_75 ...

-code 选项

-code 选项指定最终包含的代码
nvcc 第二阶段的实际架构,包括 sm_30, sm_75 ...
也可用于指定包含的虚拟架构代码,包括 compute_30, compute_75 ...

-gencode 选项

-arch-code 可以指定不同的虚拟架构,但只有一种实际架构
-gencode 使用不同的虚拟架构,在目标文件中包含面向多种虚拟架构的 ptx 代码和多种实际架构的二进制代码

-gencode arch=compute_50,code=sm_50
-gencode arch=compute_61,code=compute_61

标签: none

添加新评论