▶ 参考【https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html】

▶ nvcc 预定义的宏

  1. __NVCC__ // 编译 C/C++/CUDA 源文件是有定义
  2. __CUDACC__ // 编译 CUDA 源文件时有定义
  3. __CUDACC_RDC__ // 使用选项 --relocatable-device-code true 时有定义
  4. __CUDACC_DEBUG__ // 使用选项 --device-debug 是有定义
  5. __CUDACC_RELAXED_CONSTEXPR__ // 使用选项 --expt-relaxed-constexpr 时有定义
  6. __CUDACC_EXTENDED_LAMBDA__ // 使用选项 --expt-extended-lambda 时有定义
  7. __CUDACC_VER_MAJOR__ // nvcc 主版本号
  8. __CUDACC_VER_MINOR__ // nvcc 次版本号
  9. __CUDACC_VER_BUILD__ // nvcc build 号

▶ nvcc 接受的文件类型

  1. .cu // CUDA 源文件,包含主机代码和设备函数
  2. .c // C 源文件
  3. .cc, .cxx, .cpp // C++ 源文件
  4. .ptx // 中间汇编文件
  5. .o , .obj // 目标文件
  6. .a , .lib // 库文件
  7. .res // 资源文件
  8. .so // 共享目标文件

▶ nvcc 编译流程选项

  1. --cuda/-cuda // xxx.cu/ -> xxx.cpp.ii,Output file can be compiled by the host compiler that was used by nvcc to preprocess the .cu file.
  2. --ptx/-ptx // xxx.cu/ -> xxx.ptx,生成设备代码,抛弃主机代码
  3. --cubin/-cubin // xxx.cu/xxx.ptx -> xxx.cubin,生成设备代码,抛弃主机代码
  4. --fatbin/-fatbin // xxx.cu/xxx.ptx/xxx.cubin -> xxx.cfatbin,生成设备代码,抛弃主机代码
  5. -preporcess/-E // 预处理输入文件(直接输出到屏幕上)
  6. --generate-dependencies/-M // 生成输入文件的依赖文件列表,可用于 make file
  7. --compile/-c // xxx.c/xxx.cc/xxx.cpp/xxx.cxx/xxx.cu -> .obj
  8. --device-c/-dc // xxx.c/xxx.cc/xxx.cpp/xxx.cxx/xxx.cu -> .obj,含有重定位设备代码,等价于 -c --relocatable-device-code=true
  9. --device-w/-dw // xxx.c/xxx.cc/xxx.cpp/xxx.cxx/xxx.cu -> .obj,含有可执行目标代码,等价于 -c --relocatable-device-code=false
  10. --device-link/-dlink // xxx.obj(含重定位设备代码) + .ptx/.cubin/.fatbin -> xxx.obj(含可执行设备代码)
  11. --link/-link // 默认选项,源文件编译 + 连接
  12. --lib/-lib // 生成 .obj 加入指定的库文件中
  13. --run/-run // 源文件编译 + 连接 + 执行或可执行文件执行,不使用含环境变量

▶ nvcc 编译动作选项

  1. --profile/-pg // 生成代码/可执行文件可用 gprof 分析性能
  2. --debug/-g // 生成主机代码调试信息
  3. --device-debug/-G // 生成设备代码调试信息,并关闭所有优化,不使用性能分析
  4. --extencible-whole-program/-ewp // 生成可扩展设备代码,与 libcudadevrt 链接之前就能解析某些调用
  5. --generate-line-info/-lineinfo // 设备代码生成行号信息
  6. --optimize/-O $level // 指定主机代码优化等级为 $level
  7. --ftemplate-backtrace-limit/-ftemplate-backtrace-limit $limit // 设置模板实例化的最大警告或错误的数量为 $limit,值 0 表示不强制执行限制,主机编译器支持则会收到等效选项
  8. --ftemplate-depth/-ftemplate-depth $limit // 设置模板类实例化的最大深度为 $limit,主机编译器支持则会收到等效选项
  9. --shared/-shared // 连接时生成共享库
  10. --x/-x {c|c++|cu} // 显示指定输入文件的类型
  11. --std/-std {c++|c++|c++} // 指定使用的 C++ 标准
  12. -no-host-device-move-forward/-nohdmoveforward // 不要隐式使用 std::move 和 std::forward 作为主机或设备代码
  13. --expt-relaxed-constexpr/-expt-relaxed-constexpr // 允许主机代码调用 __device__ constexpr 函数
  14. --expt-extended-lambda/-expt-extended-lambda // 允许 lambda 声明中使用 __host__ 和 __device
  15. --machine/-m {|} // 指定处理器架构

▶ nvcc 编译工具选项

  1. --compiler-options/-Xcompiler $options // 指定编译器选项
  2. --linker-options/-Xlinker $options // 指定连接器选项
  3. --archive-options/-Xarchive // 指定库管理器选项
  4. --ptxas-options/-Xptxas // 指定 PTX 优化汇编器(ptxas)选项
  5. --nvlink-options/-Xnvlink // 指定 nvlink 选项

▶ nvcc 编译驱动指导选项

  1. --dont-use-profile/-noprof // 不使用 nvcc.profile 来进行编译
  2. --dryrun/-dryrun/-dryrun // 列出不执行 nvcc 生成的编译命令
  3. --verbose/-v // 列出并执行 nvcc 生成的编译命令,可以看出编译卡在哪一步
  4. --keep/-keep // 保留所有编译的中间文件
  5. --keep-dir/-keep-dir $directory // 指定保留的中间文件的存放目录
  6. --save-temps/-save-temps // 同 --keep
  7. --clean-targets/-clean // 清除中间文件,要求其它选项与上一次编译时一模一样
  8. --run-args/-run-args $arguments // 指定可执行文件运行参数
  9. --input-drive-prefix/-idp $prefix // 指定当前开发环境绝对路径前缀,如 Windows 中使用 /cygwin/ (cygwin)或 / (MinGW)
  10. --dependency-drive-prefix/-ddp $prefix // 指定当依赖文件绝对路径的前缀,与 make 有关
  11. --drive-prefix/-dp $prefix // 指定上面两者
  12. --dependency-target-name/-MT $target // 指定生成的依赖文件在规则下的目标名
  13. --no-align-double // 不传给 32 位平台的编译器 -malign-double 选项
  14. --no-device-link/-nodlink // 生成目标文件时跳过设备连接步骤

▶ nvcc 文件及目录选项(默认多参数)

  1. --outputfile/-o // 指定输出文件名,单参数
  2. --output-directory/-odir // 指定输出文件目录
  3. --pre-include/-include // 指定预包含的头文件
  4. --library/-l // 指定指定库文件(注意命名)
  5. --define-macro/-D // 指定宏
  6. --undefine-macro/-U // 取消宏
  7. --system-include/-isystem // 指定系统包含路径
  8. --include-path/-I // 指定头文件目录
  9. --library-path/-L // 指定库文件目录
  10. --compiler-bindir/-ccbin // ?
  11. --cudart/-cudart {none|shared|static} // 指定 CUDA 运行时库,无库、分享/动态库、静态库
  12. --libdevice-directory/ldir // 当使用 --dont-use-profile 选项时指定设备库(默认 nvvm/libdevice)

▶ CUDA 兼容性选项

  1. --default-stream/-default-stream {legacy|null|per-thread} // 指定默认流:legacy(默认选项,null 为废弃的同义词,同一上下文的流之间隐式同步)
  2. // per-thread(普通流,同一上下文的流之间隐式同步)
  3. --gpu-architecture/-arch $arch // 指定虚 GPU 架构,compute_XX,默认唯一实架构值
  4. --gpu-code/-code $code // 指定实 GPU 架构(多参数),sm_XX,也可同时指定虚架构,sm_XX,compute_YY
  5. --generate-code/-gencode $specification // 组合上面两个选项,允许出现多个虚架构值
  6. --relocatable-device-code/-rdc {true|false} // 是否生成重定位设备代码
  7. --entries/-e $entry // 设置入口函数
  8. --maxrregcount/-maxrregcount $amount // 指定单 GPU 函数最大寄存器数量
  9. --ftz/-ftz {true|false} // 单精度非正规值刷成 0 或保存原有值(?)
  10. --prec-div/-prec-div {true|false} // 除法使用 IEEE 舍入或快速算法
  11. --prec-sqrt/-prec-sqrt {true|false} // 开根使用 IEEE 舍入或快速算法
  12. --fmad/-fmad {true|false} // 是否启用融合乘加指令(FMAD,FFMA,DFMA)
  13. --use_fast_math/-use_fast_math // 使用快速数学算法,等价于 -ftz=true -prec-div=false -prec-sqrt=false -fmad=true

▶ 原生编译器选项

  1. --disable-warnings/-w // 关闭警告
  2. --source-in-ptx/-src-in-ptx // PTX 交错,仅当与 --device-debug 或--generate-line-info 连用时可用(?)
  3. --restrict/-restrict // 声明所有核函数指针都是 restrict 的
  4. --Wno-deprecated-gpu-targets/-Wno-deprecated-gpu-targets // 关闭已弃用 GPU 目标体系结构的警告
  5. --Wno-deprecated-declarations/-Who-deprecated-declarations // 关闭已弃用实体的警告
  6. --Wreorder/-Wreorder // 成员初始化器重排时生成警告
  7. --Werror/-Werror $kind // 将特定类型的警告转成报错,有下列选项
  8. // cross-execution-space-call:从 __host__ __device__ 函数调用 __host__ 函数时报错
  9. // reorder:成员初始化器重排时生成警告
  10. // deprecated-declarations:使用了已经废弃的函数
  11. --resource-usage/-res-usage // 显示硬件资源使用量,寄存器、显存等
  12. --help/-h // 显示帮助
  13. --version/-V // 显示版本
  14. --options-file/-optf $file // 从文件中读取命令行选项

▶ PTX选项,使用 -Xptxas 时配合使用

  1. --allow-expensive-optimizations/-allow-expensive-optimizations // 编译器高级优化(≥O2 时自动使用)
  2. --compile-only/-c // 生成重定位目标文件
  3. --def-load-cache/-dlcm // 默认全局缓存读优化
  4. --def-store-cache/-dscm // 默认全局缓存写优化
  5. --device-debug/-g // 同 --device-debug/-G
  6. --disable-optimizer-constants -disable-optimizer-consts // 关闭常量优化器
  7. --entry/-e $entry // 同 --entries/-e
  8. --fmad -fmad // 同 --fmad/-fmad
  9. --force-load-cache/-flcm // 强制全局缓存读优化
  10. --force-store-cache/-fscm // 强制全局缓存读优化
  11. --generate-line-info/-lineinfo // 同 --generate-line-info/-lineinfo
  12. --gpu-name/-arch $gpuname // GPU版本号,默认值 sm_30,可用:compute_30, compute_35, compute_50, compute_52, sm_30, sm_32, sm_35, sm_50, sm_52
  13. --help -h // 同 --help/-h
  14. --machine -m // 同 --machine/-m
  15. --maxrregcount/-maxrregcount $amount // 同 --maxrregcount/-maxrregcount
  16. --opt-level/-O $N // 优化等级,默认值 3
  17. --options-file/-optf $file // 同 --options-file/-optf
  18. --output-file/-o $file // 指定输出文件名,默认值 elf.o
  19. --preserve-relocs/-preserve-relocs // This option will make ptxas to generate relocatable references for variables and preserve relocations generated for them in linked executable.
  20. --sp-bound-check/-sp-bound-check // Generate stack-pointer bounds-checking code sequence. This option is turned on automatically when --device-debug or --opt-level=0 is specified.
  21. --verbose -v // 输出编译统计信息
  22. --version -V // 同 --version/-V
  23. --warning-as-error/-Werror // 所有警告转报错
  24. --warn-on-double-precision-use/-warn-double-usage // 当指令用到 double 时警告
  25. --warn-on-local-memory-usage/-warn-lmem-usage // 当使用了局部内存时警告
  26. --warn-on-spills/-warn-spills // 当寄存器溢出到局部内存时警告

▶ NVLINK 选项,使用 -Xnvlink 时配合使用

  1. --disable-warnings/-w // 关闭警告
  2. --preserve-relocs/-preserve-relocs // Preserve resolved relocations in linked executable.(?)
  3. --verbose/-v // 输出编译统计信息
  4. --warning-as-error/-Werror // 所有警告转报错

CUDA compiler driver nvcc 散点 part 1的更多相关文章

  1. CUDA compiler driver nvcc 散点 part 2

    ● nvcc 编译流程图 ● sm 是向前兼容的,高的版本号是在低版本号的基础上添加了新功能得到的,同一 compute_XY 编译的 .cu 文件仅能向后 sm_ZW 的实 GPU 版本(Z > ...

  2. 显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?

    在使用深度学习框架的过程中一定会经常碰到这些东西,虽然anaconda有时会帮助我们自动地解决这些设置,但是有些特殊的库却还是需要我们手动配置环境,但是我对标题上的这些名词其实并不十分清楚,所以老是被 ...

  3. centos7.0安装cuda驱动

    00.CUDA简介 CUDA和GPU的并行处理能力来加速深度学习和其他计算密集型应用程序 01.CPU+GPU协同架构 02.部署环境 [docker@lab-250 ~]$ cat /etc/*re ...

  4. cuda cudnn anaconda gcc tensorflow 安装及环境配置

    1.首先,默认你已经装了适合你的显卡的nvidia驱动. 到  http://www.nvidia.com/Download/index.aspx 搜索你的显卡需要的驱动型号 那么接下来就是cuda的 ...

  5. [笔记] Ubuntu 18.04安装cuda 10及cudnn 7流程

    安装环境 OS:Ubuntu 18.04 64 bit 显卡:NVidia GTX 1080 任务:安装 CUDA 10及cuDNN 7 工具下载 NVidia官网下载下列文件: CUDA 10:cu ...

  6. Jetson tx1 安装cuda错误

    前两天安装Jetpack3.0的时候,看着网上的教程以为cuda会自动安装上,但是历经好几次安装,都安装不上cuda,也刷了好几次jetpack包.搜遍了网上的教程,也没有安装上.错误如下图所示: 这 ...

  7. 记录下自己安装cuda以及cudnn

    之前已经装过一次了,不过没有做记录,现在又要翻一堆博客安装,长点记性,自己记录下. 环境 ubuntu16.04 python2.7 商家送过来时候已经装好了显卡驱动,所以省去了一大麻烦. 剩下的就是 ...

  8. Caffe+Kubuntu16.04_X64+CUDA 8.0配置

    前言: 经过尝试过几次Caffe,theano,MxNet之后,很长时间没有进行caffe的更新,此次在Ubuntu16.04下安装Caffe,折腾了一天时间,终于安装成功. 参考链接:Caffe+U ...

  9. 安装CUDA和cuDNN

    GPU和CPU区别 1,CPU主要用于处理通用逻辑,以及各种中断事物 2,GPU主要用于计算密集型程序,可并行运作: NVIDIA 的 GeForce 显示卡系列采用 GPU 特性进行快速计算,渲染电 ...

随机推荐

  1. SpringMvc开发报找不到springmvc配置文件

    param-name标签属性值必须为contextConfigLocation

  2. JavaScript实现本地图片上传前进行裁剪预览

    本项目支持IE8+,测试环境IE8,IE9,IE10,IE11,Chrome,FireFox测试通过 另:本项目并不支持Vue,React等,也不建议,引入JQuery和Vue.React本身提倡的开 ...

  3. 剑指Offer 39. 平衡二叉树 (二叉树)

    题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树. 题目地址 https://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222 ...

  4. Linux安装软件出现 “Unable to locate package xxx”错误

    使用新购入的阿里云服务器ECS,预装的Ubuntu,然后想要利用 xrdp 进行远程登陆,但是在输入命令: apt-get install xrdp 出现了 E;Unable to locate pa ...

  5. Js/Bind()的认识

    1.bind( eventType [, eventData], handler(eventObject))2.向绑定的对象上面提供一些事件方法的行为.其中三个参数的意义分别代表: 一.eventTy ...

  6. brand new start

    做了约两年半的安全,留下了约五十多篇笔记,从电脑搬过来,免的丢了

  7. JAVA高级篇(二、JVM内存模型、内存管理之第一篇)

    JVM内存结构如 Java堆(Heap),是Java虚拟机所管理的内存中最大的一块.Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实 ...

  8. Angular新手容易碰到的坑

    在Angular群里回答新手问题一段时间了,有一些Angular方面的坑留在这里备查,希望能对各位有所帮助.这个文章将来会随时更新,不会单独开新章,欢迎各位订阅. Q1.<div ng-incl ...

  9. jquery移除元素时会自动解绑事件

    .html() When .html() is used to set an element's content, any content that was in that element is co ...

  10. linux基础之系统管理类命令

    系统管理类命令 1.reboot.halt.poweroff命令 基本介绍 reboot命令.halt命令.poweroff命令:都表示重启或者关闭系统 基本语法 reboot/halt/powero ...