2.1.cuda驱动API-概述

目录

    • 前言
    • 1. Driver API概述
    • 2. 补充知识
    • 总结

前言

杜老师推出的 tensorRT从零起步高性能部署 课程,之前有看过一遍,但是没有做笔记,很多东西也忘了。这次重新撸一遍,顺便记记笔记

本次课程学习精简 CUDA 教程-Driver API 概述

课程大纲可看下面的思维导图

在这里插入图片描述

1. Driver API概述

对于 Driver API 你需要知道:

  1. CUDA Driver 是与 GPU 沟通的驱动级别底层 API
  2. 对 Driver API 的理解,有利于理解后续的 Runtime API
  3. CUDA Driver 随显卡驱动发布,需要与 cudatoolkit 分开看
  4. CUDA Driver 对应于 cuda.h 和 libcuda.so
  5. Driver API 主要知识点是 Context 的管理机制 以及 CUDA 系列接口的开发习惯(错误检查方法),还有内存模型

参考:显卡,显卡驱动,nvcc, cuda driver,cudatoolkit,cudnn到底是什么?

下图很清楚的展示了 Driver API 和 Runtime API 以及与其它概念之间的关系

在这里插入图片描述

图1-1 Driver API和Runtime API的关系

从图中可知我们平时常用的 nvidia-smi 调用的是 Driver API。最开始 Driver API 是与显卡沟通的底层 API,但是人们发现 Driver API 太过底层,由此引入了 Runtime API。从图中可以看出 Runtime API 是基于 Driver API 开发的,我们日常中见到的 cudaMalloc()cudaMemset()cudaMemcpy() 都属于 Runtime API。像 cu 开头的如 cuCtxCreate() 就属于 Driver API。

值得注意的是,cuda.h 是 NVIDIA CUDA Toolkit 中的一部分。CUDA Toolkit 是 NVIDIA 提供的用于开发 GPU 加速应用程序的软件开发工具包,其中包含了用于编译和执行 CUDA 程序的各种库和头文件。而 libcuda.so 是 NVIDIA 显卡驱动安装到系统中时随之安装的一个共享库文件。

cuda.h 提供了 CUDA 编程的接口和声明,而 libcuda.so 则是运行库,提供了 CUDA 运行时所需的底层功能和支持。

为什么需要了解 Driver API 呢,直接看更高级的 Runtime API 不就行了吗?

  1. Driver API 是理解 cudaRuntime 中上下文的关键
  2. Driver API 只需要做到理解 context 即可,知道它的存在就行
  3. 开发过程中可能因为对 Driver API 的理解不够,造成上层调试困难
  4. 对于越底层的 api,做一些了解,有利于高层遇到问题后排查原因

关于 context 有两种

  1. 手动管理的 context,cuCtxCreate()(手动管理,以堆栈方式 push/pop)
  2. 自动管理的 context,cuDevicePrimaryCtxRetain(自动管理,runtime api 以此为基础)

关于内存,有两大类

  1. CPU 内存,称之为 Host Memory。又可以分为 Pageable Memory:可分页内存 + Page-Locked Memory:页锁定内存
  2. GPU 内存,称之为 Device Memory。又可以分为 Global Memory:全局内存 + Shared Memory:共享内存 + 其它多种内存

在这里插入图片描述

图1-2 内存数据流向

关于 context 和内存先有个基本概念就行,后续会详细讲解。

2. 补充知识

我们需要了解 cuda 和显卡等基本概念及初始化 cuda 的相关知识:(from 杜老师)

  1. 如何运行
  • make run
  1. 显卡,显卡驱动,nvcc,cuda driver,cudatoolkit,cudnn 到底是什么?
  • 关于显卡驱动与 cuda 驱动的版本匹配
    • Table 1. CUDA 11.6 Update 1 Component Versions
    • 结论:尽量将显卡驱动升级到新的,因此显卡驱动向下兼容 cuda 驱动
  • 简单了解显卡相关概念
    • 显卡:GPU
    • 显卡驱动:驱动软件,类比声卡驱动,摄像头驱动
    • GPU架构:gpu 架构指的是硬件的设计方式,例如是否有 L1 or L2 缓冲
    • CUDA:其中一种理解是它是一种编程语言(向 C++、Python 等,只不过它是专门用来操控 GPU 的)
    • cuDNN:这个其实就是一个专门为深度学习计算设计的软件库,里面提供很多专门的计算函数
    • CUDAToolkit:这是我们真正需要首先安装的工具包,所谓的装 cuda 首先指的是它
    • 它里面包含了许多库,例如:cudart、cublas等
    • 其它涉及到的知识有 nvcc 与 nvidia-smi,多个 cuda 版本之间进行切换,cuda 的安装等
    • 详细请参考:https://zhuanlan.zhihu.com/p/91334380
  1. cuda-driver-api 与 cuda-runtime-api
  • CUDA Driver 与 CUDA Runtime 相比更偏底层,就意味着 Driver API 有着更灵活的控制,也伴随着更复杂的编程
  • 因此 CUDA Driver 需要做显式的初始化 cuInit(0),否则其他 API 都会返回 CUDA_ERROR_NOT_INITIALIZED
  • 经过初始化驱动和显卡的信息可以轻松获取:
    • 驱动版本管理 https://docs.nvidia.com/cuda/archive/11.2.0/cuda-driver-api/group__CUDA__VERSION.html#group__CUDA__VERSION
    • 设备信息管理 https://docs.nvidia.com/cuda/archive/11.2.0/cuda-driver-api/group__CUDA__DEVICE.html
  1. 写在文末
  • CUDA 的在线文档地址
    • https://developer.nvidia.com/cuda-toolkit-archive
    • https://docs.nvidia.com/cuda/archive/11.2.0/
  • 报错
    • 提示 nvcc 错误。对于 gcc 版本大于等于 8 的不支持,需要修改 Makefile 中的 g++ 为 g++7 或者更低

总结

本次课程主要了解 CUDA Driver API 的一些概念,它是一个偏底层的 API,它提供了对 GPU 硬件和驱动程序的底层访问能力。学习了解 Driver API 可以更好的帮助我们后续理解 Runtime API,后续主要从 Context 的管理机制、CUDA 系列接口的开发习惯、内存模型 三个方面来学习 Driver API 的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/13926.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医学图像增强系统的设计_kaic

目录 1绪论 1.1课题背景 1.2医学图像增强以及相关理论的现状2 1.3本文内容安排 2图像增强技术 2.1空域增强方法 2.1.1空域点运算增强方法 2.1.2空域滤波增强方法 2.2频域增强算法 2.2.1低通滤波 2.2.2高通滤波 2.2.3同态滤波 2.3本章小结 3医学图像增强算法 3.1医学图像的特点 …

【C语言】深入学习数组

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

多模态系列论文--BEiT-3 详细解析

论文地址:Image as a Foreign Language: BEIT Pretraining for All Vision and Vision-Language Tasks 论文代码:BEiT-3 BEiT-3 1 引言:Big Convergence(大一统)2 BEIT-3预训练框架3 下游任务实现框架4 实验效果5 总结…

系统提权与数据窃取

系统提权与数据窃取 一、后渗透二、后渗透的技术2.1、提权2.2、横向移动2.3、持久化2.4、数据窃取2.5、漏洞利用 三、meterpreter后渗透3.1、靶机权限提升3.1.1、windows内核/服务漏洞3.1.2、bypassUAC3.1.2.1、bypassuac 进程注入3.1.2.2、bypassuac_injection 内存注入3.1.2.…

基于Tensorflow和Keras实现卷积神经网络CNN并进行猫狗识别

文章目录 一、环境配置1、安装Anaconda2、配置TensorFlow、Keras 二、猫狗数据集分类建模3.1 猫狗图像预处理3.2 猫狗分类的实例——基准模型3.1 构建神经网络3.2 配置优化器3.3 图片格式转化3.4 训练模型3.5 保存模型3.6 可视化 三、数据增强四、dropout 层五、参考资料 一、环…

第41节:cesium 闪烁效果-熊出没(含源码+视频)

结果示例: 点的闪烁:1.逐渐放大后消失;2.点闪烁。 图的闪烁:熊出没,含自定义显示文字效果。 完整源码: <template><div class="viewer"><vc-viewer @ready="ready" :logo="false">

国内几款常用热门音频功放芯片-低功耗、高保真

音频功放芯片&#xff0c;又称为音频功率放大器芯片&#xff0c;是指一种将音频信号转换成线性的输出功率的集成电路芯片&#xff0c;在音频功放领域中一类是传统意义上的模拟功放&#xff1b;另一类是数字功放&#xff0c;它们都可以实现模拟信号到数字信号的转换。 随着智能…

Redis 入门指南

Redis 入门指南 目录 Redis 入门指南 Redis 基本概念 Redis 常用命令 字符串String操作命令&#xff1a; 哈希Hash操作命令&#xff1a; 列表list操作命令 集合set操作命令&#xff1a; 有序集合sorted set 操作命令 通用命令 在Java中操作 Redis 1.Jedis 2.Spring …

Spring Boot 中的 @EnableDiscoveryClient 注解

Spring Boot 中的 EnableDiscoveryClient 注解 Spring Boot 是一个快速开发 Spring 应用程序的框架&#xff0c;它提供了一些基础设施&#xff0c;使得我们可以快速地开发出高效、可靠的应用程序。其中&#xff0c;EnableDiscoveryClient 注解是 Spring Boot 中一个非常重要的…

抖音矩阵源码搭建开发技术部署分析

目录 一、 什么是抖音矩阵&#xff1f;源码搭建开发注意事项&#xff1f; 1. 抖音矩阵概述 2. 源码搭建开发注意事项&#xff1a; 二、 使用步骤及开发代码展示 一、 什么是抖音矩阵&#xff1f;源码搭建开发注意事项&#xff1f; 1. 抖音矩阵概述 首先&#xff0c;抖音账…

编码和调制

编码与调制 消息是以二进制的形式存放在数据当中的&#xff0c;这种数据的表现形式是信号&#xff0c;而信源发出的原始信号就叫做基带信号&#xff0c;基带信号又可以分为数字基带信号和模拟基带信号。 信号需要在信道中进行传输&#xff0c;信道分为模拟信道和数字信…

Vue操作Cookie

这里用的js-cookie。 很简单&#xff0c;安装一下就可以使用了。 npm install js-cookie --save 使用示例&#xff1a; import Cookies from js-cookieexport default {name: YourComponent,methods: {setCookie() {// 设置一个名为 name 的cookie&#xff0c;值为 value&a…