前言


从这个系列开始,我会解读《CUDA Compiler Driver NVCC》的内容。通过这本书,可以更深刻地了解GPU 编译的底层相关的设计。

CUDA Programming Model

CUDA Toolkit针对这样一类应用程序:它的控制部分由一个进程运行在一个通用计算设备(比如CPU)上,利用一个或多个GPU作为coprocessors来加速single program multiple data (SPMD)并行任务。这些任务可以由一系列GPU 线程来执行,而不用主机进程的干预;这样的话,就能通过并行图形硬件设备获得性能优化。

GPU 代码由编程语言开发的一系列函数进行开发,主要使用C++,带有一些注释,用于将它们与宿主代码区分开来,另外还有一些注释用于区分GPU上存在的不同类型的数据内存。在GPU程序生命周期内,主机进程可能会调度多个并行进程GPU任务。

CUDA Sources

CUDA应用程序的源文件包含一系列在host上执行的C++代码,以及一些在GPU上执行的核函数代码(kernel function)。CUDA 编译过程(compilation trajectory) 会把host code里的device函数分离出来,用合适的NVIDIA 编译器和汇编程序对这些device 函数进行编译,用C++ host 编译器对host code进行编译,然后将编译后的GPU函数作为fatbinary image(二进制文件)嵌入到host object文件中。

在链接阶段(linking stage),特定的CUDA runtime lib会被添加进来,支持远端的SPMD程序调用以及提供显式的GPU控制,比如GPU mem分配和H2D/D2H的data传输。

Purpose of NVCC

每个CUDA源文件的编译过程包含几个步骤: splitting, compilation, preprocessing, merging. NVCC,CUDA编译器driver,它的目标是为编程者隐藏CUDA 编译的细节。它接受一系列传统的编译选项,比如定义宏,include/libracy path, 加速编译过程等。 所有non-CUDA编译步骤都被传给C++ host 编译器来完成, 由nvcc支持,nvcc会把它的命令选项翻译成合适的host 编译器命令行选项。

Supported Host Compilers

nvcc在以下情况下需要一个通用C++ host 编译器:

  • non-CUDA阶段阶段

  • CUDA 编译阶段,有一些前处理和hsot code编译工作

nvcc假设host编译器是以标准的方式进行了安装。如果host 编译器的安装不标准,用户必须确保环境设置没问题,并使用相应的nvcc编译选项。

在所有平台上,当前执行搜索路径下的默认host编译器(gcc/g++ on Linux, cl.exe on Windows)会被用到,除非有其他的指定。

总结


本章的内容非常简单,主要的take away就一个:nvcc是用来进行CUDA代码编译的。

下期内容预告


下一篇文章我们会了解Compilation Phases,编译阶段,nvcc预定义的宏,编译支持的文件格式等

解读CUDA Compiler Driver NVCC - Ch.1 - Introduction相关推荐

  1. 解读CUDA Compiler Driver NVCC - Ch.5

    前言 前面几篇文章,我们了解了NVCC的作用,nvcc编译的two stage, 每个stage做了什么,怎么去选择虚拟架构和真实架构,JIT编译的原理,好处和弊端以及解决方案.本文我们将了解几个实际 ...

  2. 解读CUDA Compiler Driver NVCC - Ch.4

    前言 第四章是详细的NVCC选项描述和用法,我们可以把它当作工具手册,在需要的时候去查看即可,感兴趣的话也可以花时间去了解.但现在,更重要地是理解,NVCC在编译CUDA程序的时候,具体做了什么,有什 ...

  3. 解读CUDA Compiler Driver NVCC - Ch.2 - Compilation Phases

    前言 上篇文章我们了解了nvcc是做什么的,本篇文章我们会了解Compilation Phases,编译阶段,nvcc预定义的宏,编译支持的文件格式等. NVCC Identificaiton Mac ...

  4. 解读CUDA Compiler Driver NVCC - Ch.3

    前言 上一篇文章简单了介绍了nvcc预定义的宏,以及支持的编译阶段,对应的输入文件后缀和输出文件的默认名.本篇文章了解CUDA源文件编译的整个workflow. Overview CUDA编译的工作原 ...

  5. CUDA 并行计算 机器学习 NVCC CUDNN CUDATOOLKIT CUDA DRIVER 显卡驱动(NVIDIA Driver) 显卡(GPU)

    微信公众号: 点击蓝色字体小白图像与视觉进行关注 关于技术.关注yysilence00.有问题或建议,请公众号留言 整理知识,学习笔记 发布日记,杂文,所见所想 CUDA 并行计算 机器学习 NVCC ...

  6. CUDA系列学习(一)An Introduction to GPU and CUDA

    本文从软硬件层面讲一下CUDA的结构,应用,逻辑和接口.分为以下章节: (一).GPU与CPU (二).CUDA硬件层面 (三).CUDA安装 (四).CUDA 结构与接口 4.1 Kernels 4 ...

  7. 报错 The CUDA compiler identification is unknown;No CMAKE_CUDA_COMPILER could be found.

    在cmake的编译过程中,可能会报找不到cuda编译器的错误,如下 -- The CUDA compiler identification is unknown CMake Error at CMak ...

  8. Linux查看CUDA版本以及nvcc: command not found

    在日常使用中,在配置镜像以及使用开源网站时经常需要查询CUDA版本,版本也确实十分的重要.一般的我们有三种常见的查询方式. 查看当前Cuda的版本,即实际安装的Cuda版本 nvcc -V(nvcc ...

  9. Nvidia显卡驱动与Cuda关系,Cuda的driver API 和runtime API

    Total 从今年年初反复安装多次Ubuntu+Win双系统,并配置深度学习环境,对Nvidia显卡驱动与Cuda关系认识应该更加清晰. 在配置好的环境中使用nvidia-smi和nvcc -V两个命 ...

最新文章

  1. EOS 智能合约源代码解读 (14)system合约“exchange_state.hpp”
  2. 谈谈程序员的高薪现象是不是该整治一下了?
  3. C语言实现QR(正交三角)分解(附完整源码)
  4. mysql安装报错 1130_关于Linux编译安装会无法远程登录,报错:1130-host ... is not allowed to connect to this MySql server...
  5. 深度学习——02、深度学习入门 1-7
  6. 日期处理一之NSLalendar的使用
  7. ubuntu14.04安装opencv3.1(亲测)
  8. 注册表把html设置成桌面,[注册表] 将Windows 10默认应用程序设置页面添加到桌面右键菜单中...
  9. maven 如何引入不同版本_React中不同webpack版本如何配置less
  10. Ubuntu18.04 上 phpvirtualbox 折腾记
  11. Android应用锁实现
  12. 三级指标 主成分分析_一文看懂主成分分析(PCA)
  13. windows10下安装choco
  14. 条码生成器如何生成GS1-128条码
  15. 笔记本同时接入无线(外网)和有线(内网)
  16. java根据身份证号码得到生日和性别
  17. 错误代码: 1305 PROCEDURE world.insert_data does not exist
  18. 五子棋-进阶版:C#窗体编写
  19. 灰流丽能无效融合么_【灰流丽】封印卡片一览
  20. 使用Python的turtle模块绘制爱心图案

热门文章

  1. 计算机老师的作文,电脑,我的好老师作文
  2. 色彩空间与色彩模型 RGB/CMYK/YCbCr/HSB/HSI/HSV
  3. 有哪些好用的思维导图软件?
  4. 初识神经辐射场NeRF
  5. 移动宽带客户测试软件,华为移动宽带终端检测工具(Mobile Doctor)
  6. ps制作20种特效文字_如何使用会声会影进行质感文字制作——动态扫光浮雕特效...
  7. 一些企业个人网银的U盾或是usbkey在web(IE)网页中无法使用的解决方法
  8. C语言再学习 -- 常用快捷键
  9. 如何实现水平,垂直,水平垂直居中
  10. 技术风向标 | 云原生技术架构成熟度模型解读