异构开发与异构编程(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上的串行处理共同组成。一个完整的异构编程程序的计算流程如下所示:

                           

                                                

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gggg_ggg/article/details/42241659

一起讨论一个BSTR类型转换问题

[总结和翻译自MSDN][BSTR和字符串操作] 1. 使用_bstr_t解决内存问题    COM编程当中一个重要的主题就是维护 BSTR 类型变量. 在一些情况下(主要是传递或者复制 BSTR 类...
  • rick1126
  • rick1126
  • 2002-02-16 23:36:00
  • 987

CPU+GPU异构计算编程简介

异构计算(CPU + GPU)编程简介1.概念 所谓异构计算,是指CPU+ GPU或者CPU+ 其它设备(如FPGA等)协同计算。一般我们的程序,是在CPU上计算。但是,当大量的数据需要计算时,CPU...
  • Augusdi
  • Augusdi
  • 2013-09-13 15:14:00
  • 9122

CPU+GPU异构集群搭建的总结说明

前面我们介绍了单机单GPU下的驱动安装,cuda Toolkit 和 SDK的安装,以及cuda基本编程 我们还介绍了SSH安全通信,NFS共享存储,MPICH安装以及MPI基本编程,这样二者的结合...
  • liujiandu101
  • liujiandu101
  • 2016-04-28 23:15:13
  • 3101

深度学习(三十六)异构计算CUDA学习笔记(1)

二、CUDA编程步骤: 1、设置显卡编号:cudaSetDevice; 2、为显卡开辟变量内存:cudaMalloc; 3、把cup上的数据拷贝到GPU上:cudaMemcpy; 4、调用内核函数__...
  • hjimce
  • hjimce
  • 2016-05-26 12:33:10
  • 5297

CUDA学习日记2

1. 二维数组使用 #include #include using namespace std; static const int ROW = 10; static const int COL...
  • shengshengwang
  • shengshengwang
  • 2016-08-16 14:20:06
  • 980

异构编程

看到很多人在问什么叫异构计算,看来这个概念还比较新,我就试着来解释一下这个概念。 计算单元可以分成:通用计算单元(CPU),专用计算单元(GPU/DSP)等 简单点说,由一个或若干个通用计...
  • fwch1982
  • fwch1982
  • 2012-09-26 12:54:49
  • 3338

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

一定要注意能够使用GPU计算的程序必须具有以下特点:需要处理的数据量比较大,数据以数组或矩阵形式有序存储,并且对这些数据要进行的处理方式基本相同,各个数据之间的依赖性或者说耦合很小,需要复杂数据结构的...
  • gggg_ggg
  • gggg_ggg
  • 2014-12-29 18:58:56
  • 3632

CPU+GPU <em>异构编程</em>常见关键技术

GPU<em>编程</em>虽然能利用数以百计的核心来加速,但是一些<em>编程</em>技术的忽视会导致程序性能极差,加速比很低. 如访存方式,线程组织形式,内核函数的切换等等,这些都是要考虑的...
  • 2018年04月15日 00:00

GPU异构编程模型

OpenCL编程模型:        数据并行模型。将数据进行划分。        任务并行。   OpenCL平台模型: host包含多个CD(计算设备),每个CD包含多个CU(计算单元)...
  • csmips
  • csmips
  • 2017-09-12 17:20:20
  • 95

C++ AMP异构并行编程解析

C++ AMP异构并行编程解析 原文发表于《程序员》杂志2012年第4期,略有改动。 文 / 陈冠诚 微软在今年2月份的GoingNative大会上正式对外发布了C++ AM...
  • flyingleo1981
  • flyingleo1981
  • 2017-01-19 22:50:10
  • 1106
收藏助手
不良信息举报
您举报文章:异构开发与异构编程(CUDA & GPU)
举报原因:
原因补充:

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