异构编程
回想下程序运行最基本的概念,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

最低0.47元/天 解锁文章
7716

被折叠的 条评论
为什么被折叠?



