异构开发与异构编程(CUDA & GPU)

原创 2014年12月29日 18:58:56


什么是异构开发或者编程呢?

虽然自己从事CPU+GPU相关工作,但是对异构这个概念之前还不太明确,经过结合开发经验以及查阅资料,对此概念有了一定的理解。

   一定要注意能够使用GPU计算的程序必须具有以下特点:需要处理的数据量比较大,数据以数组或矩阵形式有序存储,并且对这些数据要进行的处理方式基本相同,各个数据之间的依赖性或者说耦合很小,需要复杂数据结构的计算如树,图等,则不适用于使用GPU进行计算。


 学过计算机组成原理的人都会非常熟悉CPU原理及组成,CPU内部结构是由控制单元、运算单元、存储单元等主要部分组成,其通过地址总线与地址总线实现数据的操作,此处不再多说了;但当处理大量图像图形渲染时,CPU效率不能满足要求(比如大型3D游戏),于是乎针对复杂图形图像处理的GPU就出现了;在这里就不解释GPU的工作原理了,你可以google 一下!

目前计算单元主要分为:通用计算单元(CPU),专用计算单元(GPU)

下面说说什么是异构呢?
由一个(或者多个)通用计算单元(CPU)加上一个(或者多个)专用计算单元构建(GPU等)的系统就是异构计算系统,由两者协同起来共同执行通用计算任务就是异构计算,目前在开发中最常见的组合就是CPU+GPU。对于高要求场合这是明智之举;

异构计算的目的一般是加速数据的处理能力,过去依靠工艺和频率来提高CPU的计算性能,但是现在遇到了瓶颈,加速的任务已经由过去依赖工艺和功耗转向依靠架构的改变。在过去GPU只能执行图形任务,不能执行通用计算,所以还称不上异构计算,现在的GPU已经具备了执行通用计算的能力,和CPU协同工作就组成了一个异构计算系统,AMD的APU就是其中的一个实现。

有了硬件的实现,同样需要软件的支持,目前比较流行的编程语言是C++AMP/OPENCL/CUDA

以cuda为例介绍如下:

              CUDA(Compute Unified Device Architecture)它中文的名字是统一计算设备架构,CUDA是一种将GPU作为数据并行计算设备。

 CUDA 编程模型将CPU作为主机(Host),GPU作为协处理器或者设备(Device),在一个系统中可以存在一个主机和若干个设备。在这个模型中,CPUCPU协同工作,各司其职。CPU负责进行逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务。CPUGPU各自拥有相互独立的存储器地址空间:主机端的内存和设备端的显存。在这个模型中,CPUCPU协同工作,各司其职。CPU负责进行逻辑性强的事物处理和串行计算,GPU则专注于执行高度线程化的并行处理任务。CPUGPU各自拥有相互独立的存储器地址空间:主机端的内存和设备端的显存。一旦确定了程序的并行部分,就可以考虑把这部分计算工作交给GPU

    找到程序中满足GPU要求的部分后,就能将该部分程序移植GPU上。运行在GPU上的程序被称为内核(Kernel)。内核并不是完整的程序,只是整个程序中的一个可以使用数据并行处理的步骤。一个完整的程序由若干个内核函数以及CPU上的串行处理共同组成。一个完整的异构编程程序的计算流程如下所示:

                           

                                                

如果有理解不当之处,欢迎指正!

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

高通平台下安卓opencl小例子

1、从高通官网下载Adreon SDK,最新

安卓手机GPU OpenCL总结

前段时间,把市面上手机GPU OpenCL支持情况做了一个总结,如下。

在Android上使用OpenCL调用GPU加速

其实去年就已经把Android上OpenCL的demo做出来了,但是由于种种原因一直没有开源– 嗯现在就不吝啬了~奉献给大家~ 后面在Android上还实现了很多种并行化的算法,比如SHA-1、H...
  • dj0379
  • dj0379
  • 2014-09-22 23:33
  • 20126

CUDA编程模型:存储器层次和异构编程

【IT168 技术】存储器层次   在执行期间,CUDA线程可能访问来自多个存储器空间的数据,如图2-2所示。每个线程有私有的本地存储器。每个块有对块内所有线程可见的共享存储器,共享存储器的生命期和...

对APU/GPU异构开发大赛的一点解释

转自:AMD开发者关系经理、2012异构开发大赛评委 谢海波博士 近期一些开发者在论坛中反映对AMD异构开发( APU/GPU应用)大赛的内容、赛制等有不明白的地方,我们借此机会解释一下,希望能...

CPU 集群 / GPU 集群/ 异构集群 /分布式

集群是个物理形态,分布式是个工作方式。只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道;一个程序或系统,只要运行在不同的机器上,就可以叫分布式,嗯,C/S架构也可以叫分布式。 ...

Delphi调用WCF异构编程

Delphi调用WCF异构编程, 几年前,就开始使用Delphi进行分布式开发,最早用的方案是Delphi7+Webservice,在简单的应用场景下,也能够满足需求了。目前有一个项目,主要的需求点如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)