cuda 的driver API 和 runtime API

1、起源

看到实验室集群上可以使用nvidia-smi,但是没有nvcc,就有些好奇为什么(自己对cuda还是很不熟悉)。就以此为切入点对CUDA做了一些了解。

2、总览

cuda包含三大组件,分别是 NVIDIA driver(驱动)、toolkit 和 samples。

  1. driver
    driver 和toolkit可以分开安装,并且同一台主机上两者支持的CUDA版本可以不一样,只要保证

    driver cuda version >= toolkit cuda version

    driver 安装后会提供nvidia-smi命令,会显示GPU硬件信息以及支持的CUDA版本等。而nvcc命令是toolkit提供的,因此,在没有nvcc的情况下,也可能有nvidia-smi命令。

    driver包含函数库libcuda.so,该函数库提供对 CUDA driver API 的访问。(参考文献【1】)

  2. toolkit
    toolkit包含函数库libcudart.so,该函数库提供了对 CUDA runtime API 的访问,以及nvcc编译器等。

    toolkit同样也包含NVIDIA driver 的安装包,但是在安装过程中可以选择提前单独安装NVIDIA driver,再安装NVIDIA toolkit,这就有可能导致 driver 和 toolkit 显示的CUDA版本不一样。

3.driver API和runtime API的不同

下图由知乎用户周三石提供,感觉很直观地描述了两种API地区别。

driver API更为底层一些,对一般用户不是很友好,例如需要做显式的device初始化,以及context、module的管理(参考文献【2】)。但是使用更为灵活,提供一些runtime API所没有的功能,毕竟runtime API的功能都是包装driver 的功能实现的。

而runtime API把driver API包装了一些,将很多原本需要代码编写的步骤(比如说上面的device初始化)自动完成了,因此会更加容易上手。

具体的不同可以根据参考文献【2】进一步学习。个人感觉最大的一个不同就是使用runtime API需要NVCC编译器,而使用driver API不用。

runtime API需要使用nvida自己的编译器进行编译,并且可以将CUDA kernel链接到同一个executable中。而driver API则完全可以不依赖nvida的编译器,并且通过NVRTC库来实现对kernel code的在线编译,生成PTX string。

在这里插入图片描述

4、思考

  1. CUDA toolkit是不是只需要一些函数库和编译器就能正常运行成功?我在没有管理员权限的时候如何安装toolkit?

  2. CUDA的第三部分samples是什么时候安装的?是和toolkit一起安装的吗?

以上问题应当需要去研究CUDA的安装过程

我需要做的事情,配置好CUDA环境,测试A100下的NWCHEM-GPU性能。

目前的问题是,找不到CUDA的nvcc,仅安装好了驱动,在没有管理员权限的情况下,是否可以使用conda来配置好CUDA环境。

首先看看CUDA的安装都干了什么。

解答:

根据参考文献【6】的解释,CUDA TOOLKIT主要包含下面所说的几个部分,除了驱动之外,其他都可以通过conda来安装。因此,在实验室已经安装好驱动的情况下,使用conda 安装CUDA Toolkit(不含驱动)就行了。

  1. Compiler: CUDA-C和CUDA-C++编译器NVCC位于bin/目录中。它建立在NVVM优化器之上,而NVVM优化器本身构建在LLVM编译器基础结构之上。因此开发人员可以使用nvm/目录下的Compiler SDK来直接针对NVVM进行开发。

  2. Tools: 提供一些像profiler,debuggers等工具,这些工具可以从bin/目录中获取

  3. Libraries: 下面列出的部分科学库和实用程序库可以在lib/目录中使用(Windows上的DLL位于bin/中),它们的接口在include/目录中可获取。
    cudart: CUDA Runtime
    cudadevrt: CUDA device runtime
    cupti: CUDA profiling tools interface
    nvml: NVIDIA management library
    nvrtc: CUDA runtime compilation
    cublas: BLAS (Basic Linear Algebra Subprograms,基础线性代数程序集)
    cublas_device: BLAS kernel interface

  4. CUDA Samples: 演示如何使用各种CUDA和library API的代码示例。
    可在Linux和Mac上的samples/目录中获得,Windows上的路径是C:\ProgramData\NVIDIA Corporation\CUDA Samples中。在Linux和Mac上,samples/目录是只读的,如果要对它们进行修改,则必须将这些示例复制到另一个位置。

  5. CUDA Driver: 运行CUDA应用程序需要系统至少有一个具有CUDA功能的GPU和与CUDA工具包兼容的驱动程序。每个版本的CUDA工具包都对应一个最低版本的CUDA Driver,也就是说如果你安装的CUDA Driver版本比官方推荐的还低,那么很可能会无法正常运行。

    CUDA Driver是向后兼容的,这意味着根据CUDA的特定版本编译的应用程序将继续在后续发布的Driver上也能继续工作。通常为了方便,在安装CUDA Toolkit的时候会默认安装CUDA Driver。在开发阶段可以选择默认安装Driver,但是对于像Tesla GPU这样的商用情况时,建议在官方安装最新版本的Driver。

    目前(2021年2月)的CUDA Toolkit和CUDA Driver版本的对应情况如下:
    在这里插入图片描述


参考文献

【1】lcuda和lcudart有什么区别?
【2】浅谈Cuda driver API
【3】Different CUDA versions shown by nvcc and NVIDIA-smi
【4】CUDA Driver Version和Runtime Version不一致
【5】nvidia-smi 和 nvcc 结果的版本为何不一致
【6】显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?(对cuda 包含什么以及各组件的内容有较为全面的描述)

  • 24
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值