CUDA学习(三)-NVCC的分散编译

nvcc编译过程第一篇:https://blog.csdn.net/shungry/article/details/89715468

nvcc编译过程第二篇:https://blog.csdn.net/shungry/article/details/89788342


正文:

nvcc的分散编译必须在CUDA5.0版本之后才支持,在此之前是不支持的。也就是说以前的版本一贯支持单独的主机代码的编译,只是设备CUDA需要的代码嵌入在其中。从CUDA 5.0,支持单独的设备代码的编译。

如上图,分散编译的过程就是通过nvcc的  --relocatable-device-code 命令生成可重定位可执行设备代码,--complie 命令用于控制在主机对象上停止编译,以上两个命令结合起来就是 --device-c 命令(就是 --relocatable device code=true --compile的意思)。以上编译由Device Linker (即前篇说的 nvlink),可以使用命令 --device-link来调用设备链接器(不写默认也会链接),进行设备的链接。

附上官方nvcc手册的例子,a.obj 和 b.obj 就是分离编译的结果,foo.lib是一个外部的静态库,通过--library-path=<path>来进行加载链接。

nvcc --gpu-architecture=sm_50 --device-c a.cu b.cu
nvcc --gpu-architecture=sm_50 a.obj b.obj foo.lib --library-path=<path>

注意,能否分散编译还会有以下的变化

对于5.0以前的版本,设备代码中的extern是不能定义为外部变量的,只能用来定义动态分配共享内存,如:

extern __shared__ int array[];

而在5.0版本之后,由于加入了分散编译,支持多设备文件代码进行独立编译,所以extern 是可以作为定义外部变量的。


想了解更多可以直接看官方nvcc文档:https://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值