使用Nvidia Video Codec(一) CUDA基础

异构编程

回想下程序运行最基本的概念,PC中的应用程序都是跑在CPU上的。

而加入GPU后,使用GPU能力的代码是要跑在GPU上的,所以这就形成了一个基本的异构流程,不同的代码需要在不同的设备上执行。

再进一步,内存是属于CPU体系的,而显存是在GPU上的,应用的内存地址空间怎么统一,内存和显存间数据怎么交互,都是需要考虑的问题。

在nvidia体系,提供了cuda这一统一编程框架,对上提供API,屏蔽了异构编程的细节,对下统一了各型号GPU,屏蔽了GPU硬件架构差异。

在cuda中,CPU称为Host,GPU成为Device,如下图所示,Serial code指的是使用CPU的代码,在Host上执行,kernel是GPU功能代码,在Device上执行。

下面的图是基于GPU的视频编解码应用中数据的交互图,能更形象的说明CPU与GPU间的数据的交互,

nvdec和nvenc是nvidia GPU中的编解码硬件,使用nvenc或nvdec的视频编解码应用也是异构应用,编解码的跑在GPU上,而言业务代码跑在CPU上,GPU和CPU内存数据的交互如下图所示,

所以异构编程基本概念,就是一套程序不同的部分运行在不同的设备上,比如CPU和GPU,涉及到数据交互,流程协调等编程方式。

CDUA

cuda包括两部分:cuda toolkit和cuda driver。一个是sdk,一个是驱动;一个对上提供API,支持各种GPU应用,一个对下屏蔽GPU硬件细节。如下架构图:

各种cuda libraries和各种cuda tools,cuda runtime属于cuda toolkit,在cuda runtime之下的就是cuda driver,下面是一个更简洁的图。

Compute Capability

cuda体系中有一个Comput Capabilit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mo4776

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

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

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

打赏作者

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

抵扣说明:

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

余额充值