nvcc编译器之编译选项(chapter 4)

目录

4. NVCC编译选项

4.1 命令选项类型和符号

4.2 命令选项描述


4. NVCC编译选项

4.1 命令选项类型和符号

每个nvcc选项都有一个长名称和一个短名称,它们之间可以相互替换。这两种选项的区别在于选项名称前面连字符(-号)的数目。长名称前面必须有两个连字符(--),而短名称前面必须有一个连字符(-)。例如,-I是--include-path的简写。长选项用于构建脚本,因为选项的长度不如选项名提供的描述性语义的清晰性重要。相比之下,短选项是为了交互使用。

NVCC可以识别三种类型的命令选项:布尔选项、单值选项和列表选项

布尔选项没有参数,它们可以在命令行上指定,也可以不在命令行上指定;
单值选项最多只能指定一次;
列表选项可以重复;
如下示例这三类选项:
--verbose(切换到详细信息模式);
--output-file(指定输出文件);
--include-path(指定包含路径);

单值选项和列表选项必须有参数,参数必须在选项本身的名称后面,加上多个空格或等号字符。当使用- I、-l和-L等短选项名称时,选项的值也可以紧接在选项本身后面,而不用空格或等号分隔。列表选项的各个值可以在选项的单个实例中用逗号分隔,或者选项可以重复,或者这两种情况的任意组合。

如下示例:

-o file

-o=file

-Idir1,dir2 -I=dir3 -I dir4,dir5

本文档中使用长选项描述,除非另有指定。但是,可以使用短选项代替长选项,以达到相同的效果。

4.2 命令选项描述

4.2.1 File和Path规范

  • --output-file file(-o): 指定输出文件的名称和位置
  • --pre-include file, ...(-include): 指定预处理中必须提前包含的头文件
  • --library library,...(-l): 指定要在链接阶段使用的库(不包含库文件的扩展名),库文件从--library-path指定的路径中搜索。
  • --define-macro def,...(-D): 定于预处理阶段会使用到的宏。

def格式有两种:

  • name : 提前定义‘name’作为一个宏
  • name=definition:definition的内容被token化,并进行预处理。类似使用#define指令定义后在编译器翻译的阶段三的处理过程。definition将会被植入换行符截断
  • --undefine-macro def,...(-U): 在预处理或编译阶段,undefine一个已经存在宏
  • --include-path path,...(-I): 指定include的查找路径
  • --system-include path,...(-isystem): 指定系统include的查找路径
  • --library-path path,...(-L)
  • --output-directory directory(-odir)
  • --dependency-output file(-MF)
  • --compiler-binder directory(-ccbin)
  • --allow-unsupported-compiler(-allow-unsupported-compiler)
  • --archiver-binary executable(-arbin)
  • --cudart{none|shared|static} (-cudart)
  • --cudadevrt{none|static} (-cudadevrt)
  • --libdevice-directory directory(-ldir)
  • --target-directory string(-target-dir)

4.2.2 指定编译阶段的相关选项

指定输入文件必须编译到哪个阶段。

  • --link(-link): 指定默认行为,编译并链接所有文件。默认输出a.exe(windows平台)或a.out(其它平台)。
  • --lib(-lib): 编译所有的输入文件到目标文件(.o),并将结果添加到指定的库输出文件中。默认输出a.lib(windows平台)或a.a(其它unix平台)。
  • --device-link(-dlink): 将可重定位设备代码的目标文件和.ptx,.cubin以及.fatbin文件链接到具有可执行设备端代码的目标文件中(生成设备可执行代码),该目标文件可以继续由主机链接器进行链接。生成a_dlink.obj(windows平台)或a_dlink.o(其它Unix平台),当该选项和--fatbin 联合使用时,生成a_dlink.fatbin;当该选项和--cubin 联合使用时,生成a_dlink.cubin。
  • --device-c(-dc): 编译每个.c,.cc,.cpp,.cxx和.cu输入文件为可重定位的设备目标文件中。等同于使用--relocatable-device-code=true --compile 。默认每个文件生成*.obj(在windows平台)或.o(类Unix平台)。
  • --device-w(-dw): 编译每个.c,.cc,.cpp,.cxx和.cu输入文件为可重执行设备端代码的目标文件中。等同于使用--relocateable-device-code=false --compile 。默认生成*.obj(windows平台)或.o(类Unix平台)。
  • --cuda(-cuda): 编译每个.cu文件为.cu.cpp.ii文件。
  • --compile(-c):编译每个.c,.cc,.cpp,.cxx和.cu文件为一个目标文件。生成.obj文件(windows平台)或.o(类Unix平台)文件。
  • --fatbin(-fatbin):编译所有.cu,.ptx和.cubin输入文件为设备端的.fatbin文件。该选项使得nvcc丢弃所有.cu输入文件中的主机侧代码。
  • --cubin(-cubin):编译所有的.cu和.ptx输入文件到设备端的.cubin文件。该选项使得nvcc丢弃所有.cu输入文件中的主机侧代码。
  • --ptx(-ptx):编译所有.cu文件到一个设备端的.ptx文件。该选项使得nvcc丢弃所有.cu文件中的主机侧代码。
  • --preprocess(-E):预处理所有的.c,.cc,.cpp,.cxx和.cu输入文件。默认输出到stdout。
  • --generate-dependencies(-M):生成一个可包含在.c、.cc、.cpp、.cxx和.cu输入文件的Makefile中的依赖文件。默认输出到stdout。
  • --generate-nonsystem-dependencies(-MM):与--generate-dependencies(-M) 一样,但忽略在系统目录找到的头文件。
  • --generate-dependencies-with-compile(-MD):生成依赖文件,并编译输入文件。依赖文件可以在Makefile中包含,并被.c,.cc,.cpp,.cxx和.cu文件包含。
  • --generate-nonsystem-dependencies-with-compile(-MMD): 与--generate-dependencies-with-compile(-MD) 一样,但忽略在系统目录找到的头文件。
  • --run(-run):编译并链接所有输入的文件为可执行文件,并运行。当输入文件就是可执行文件时,不编译或链接,直接运行。

4.2.3 指定编译器/链接器行为的选项

4.2.4 传递特定阶段选项的选项

4.2.5 影响编译器驱动的选项

4.2.6 指导cuda编译的选项

4.2.7 指导GPU代码生成的选项

4.2.8 通用工具选项

4.2.9 编译阶段控制选项

关于作者:

犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。

专业方向爱好:数学、科学技术应用

关注犇叔,期望为您带来更多科研领域的知识和产业应用。

内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用nvcc编译器进行编译可以通过以下步骤进行: 1. 确保你已经安装了CUDA工具包,并且在系统环境变量中添加了CUDA的路径。 2. 打开命令行终端,并进入你的CUDA C++代码所在的目录。 3. 使用以下命令编译CUDA C++代码: ``` nvcc <filename>.cu -o <outputfile> ``` 其中,`<filename>.cu`是你的CUDA C++源代码文件名,`<outputfile>`是你想要生成的可执行文件的名称。 4. 如果你的代码中使用了特定的GPU架构或者需要生成特定的PTX和二进制代码,你可以使用`-arch`和`-code`选项或者`-gencode`选项来控制。例如: ``` nvcc <filename>.cu -arch=compute_50 -code=sm_50 -arch=compute_60 -code=sm_60 -arch=compute_70 -code=compute_70,sm_70 -o <outputfile> ``` 这个命令将会编译你的代码为适用于不同GPU架构的PTX和二进制代码。 5. 如果你想在运行时将CUDA C++设备代码编译为PTX,你可以使用NVRTC作为nvcc的替代方法。NVRTC是CUDA C++的运行时编译库,你可以在NVRTC用户指南中找到更多信息。 请注意,以上是nvcc编译器的基本用法,更详细的信息可以在nvcc用户手册中找到。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* *3* [CUDA中的NVCC编译器详解](https://blog.csdn.net/kunhe0512/article/details/125026801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敩科炼技堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值