【TensorRT算法部署】精简CUDA - DriverAPI概述

一、简介

1、CUDA Driver是与GPU沟通的驱动级别底层API

2. 对DriverAPI的理解,有利于理解后续的RuntimeAPI

3. CUDA Driver随显卡驱动发布,与cudatoolkit分开看

4. CUDA Driver对应于cuda.h和libcuda.so文件

5. 主要知识点是Context的管理机制,以及CUDA系列接口的开发习惯(错误检查方法),还有内存模型

二、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、对应于系列名称:cuda-driver-api

2、获取代码:trtpy get-series cuda-driver-api

3、查询系列清单:trtpy series-detail cuda-driver-api

  1. CuInit-驱动初始化

1. cuInit的意义是,初始化驱动API,如果不执行,则所有API都将返回错误,全局执行一次即可

2. 没有对应的cuDestroy,不需要释放,程序销毁自动释放

2、返回值检查

1. 正确友好的检查cuda函数的返回值,有利于程序的组织结构

2. 使得代码可读性更好,错误更容易发现

3、CUcontext

1. context是一种上下文,关联对GPU的所有操作

2. context与一块显卡关联,一个显卡可以被多个context关联

3. 每个线程都有一个栈结构储存context,栈顶是当前使用的context,对应有push、pop函数操作

context的栈,所有api都以当前context为操作目标

4. 试想一下,如果执行任何操作你都需要传递一个device决定送到哪个设备执行,得多麻烦

5、由于高频操作,是一个线程基本固定访问一个显卡不变,且只使用一个context,很少会用到多context

6、CreateContext、PushCurrent、PopCurrent这种多context管理就显得麻烦,还得再简单

7. 因此推出了cuDevicePrimaryCtxRetain,为设备关联主context,分配、释放、设置、栈都不用你

8. primaryContext:给我设备id,给你context并设置好,此时一个显卡对应一个primary context

9. 不同线程,只要设备id一样,primary context就一样。context是线程安全的

没有context的代码

有context的代码

注:

  1. context只是为了方便控制device的一种手段而提出来的

  1. 栈的存在是为了方便控制多个设备

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ponnyao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值