并行编程模型opencl、mpi、cuda等的区别

转载 2018年04月16日 13:58:57

(1)CUDA与opencl:

虽然两者抱着相同的目标:通用并行计算。但是CUDA仅仅能够在NVIDIA的GPU硬件上运行,而OpenCL的目标是面向任何一种Massively Parallel Processor,期望能够对不同种类的硬件给出一个相同的编程模型。由于这一根本区别,二者在很多方面都存在不同。跨平台性和通用性,这一点上OpenCL占有很大优势(这也是很多National Laboratory使用OpenCL进行科学计算的最主要原因)。OpenCL支持包括ATI,NVIDIA,Intel,ARM在内的多类处理器,并能支持运行在CPU的并行代码,同时还独有Task-Parallel Execution Mode,能够更好的支持异构计算(Heterogeneous Computing)。这一点是仅仅支持数据级并行并仅能在NVIDIA众核处理器上运行的CUDA无法做到的。

opencl优点:OpenCL为异构平台提供了一个编写程序,尤其是并行程序的开放的框架标准。 OpenCL所支持的异构平台(单一pc机或者手机)可由多核CPU、GPU、FPGA、DSP或其他类型的处理器组成。用OpenCL编写的应用具有很好的移植性,能在不同的设备上运行.
(2)OpenCL is designed for multi-cores system,所以不能用于multi-computers(每个computer是一个multi-cores system)编程;

(3)MPI(Message Passing Interface ):提供了多台计算机构成的集群的并行编程框架;

(4)openMP(Open Multi-Processing):

用于共享内存并行系统(单机)的多处理器程序,OpenMp的缺点是不能在非共享内存系统(如计算机集群)上使用。在这样的系统上,MPI使用较多

(5)MPI和hadoop:

它们都是运行在计算机集群上的框架,但两者有不同,一般来说,hadoop是MPI的改进版。MPI是计算与存储分离,Hadoop是计算向存储迁移。在MPI中数据存储的节点和数据处理的节点往往是不同的,一般在每次计算开始时MPI需要从数据存储节点读取需要处理的数据分配给各个计算节点,然后进行数据处理,即MPI的数据存储和数据处理是分离的。但对于处理TB级数据的数据密集型应用,大量的数据在节点间进行交换,网络通信时间将成为影响系统性能的重要因素,性能会大大降低。在Hadoop中有HDFS文件系统的支持,数据是分布式存储在各个节点的,计算时各节点读取存储在自己节点的数据进行处理,从而避免了大量数据在网络上的传输,实现“计算向存储的迁移”。

(6)deep learning 的并行化训练:

deep learning 的并行化包括“data parallel”和“model parallel”两种思想,前者跟普通的单cpu/gpu训练过程相同,只不过把每个Minibatch切分成S份(S指GPU的个数),

对第i份数据进行单独训练(误差最小化)得到其对应梯度gradient(i)(gradient(i)=d[loss(i)]/d(params)|params=params_old),然后使S个GPU进行通信,得到其更新后的梯度params_new = params_old+sum{i}{gradient(i)}。为了充分利用单个GPU的并行运算能力,需要的最小块大小变成了原来的S倍,故对可用的训练数据量要求严格(如imagenet数据集),此外,基于“data parallel”的模型需要GPU之间的大量通信( each GPU must communicate both gradients and parameter values on every update step)。在速度提升方面“ In our implementation, we find a speed-up of 1.5 times moving from 1 to 2 GPUs in the data parallel framework (when using 2 GPUs, each gets assigned a minibatch of size 128)”。“model parallel”:splitting an individual network’s computation across multiple GPUs,缺点是相对于数据并行思想,较难实现。

(8)机器学习算法的训练的分布式实现:

分布式的框架(多GPU的cuda、多节点的hadoop,spark等)的使用容易,但如何对一个普通的机器学习算法进行改造,使其适合分布式处理的思想,才是最核心要考虑的事情,比如分布式SVM的设计。一般的想法是把超大矩阵的乘法分配到多GPU上并行,如lstm网络的训练,但这是针对于特殊的算法的,不具有一般性。对于Google等大公司训练imagenet等超大规模的网络,采用的是分布式集群(多节点,每个节点多个cpu),未使用GPU集群的原因是考虑到,节点间的GPU相互传输数据时,需要先经过cpu,即gpu1->cpu1->cpu2->gpu2(cpu1,gpu1和cpu2,gpu2分属于不同的节点计算机),耗时,且是通过对训练数据集进行拆分(data parallel),达到加快模型训练速度的目的。但对于训练数据不是很大的机器学习算法(如高光谱图像的分割)而言,也并不适合采用分布式框架训练模型!

高性能计算汇总-Mpi,openMpi,tbb,CUDA,OpenCL等并行计算或cpu,gpu混合计算技术

经常有人问Mpi和openMPI的区别,或者CUDA和OpenCL的区别,这篇文章就是为了总结下高性能计算的相关知识。目前高性能计算有两大趋势,并行计算集群和CPU处理器和GPU显卡的异构混合计算。下...
  • guomei
  • guomei
  • 2011-07-28 22:04:57
  • 4026

OpenCL学习笔记(二):并行编程概念理解

一般来说,并行编程有两种大类型——分散收集(scatter-gather)与分而治之(divide-and-conquer)。 分散收集(scatter-gather):数据被分为子集,发送到不同的并...
  • xbinworld
  • xbinworld
  • 2015-05-24 21:32:10
  • 5464

【并行计算-CUDA开发】OpenCL、OpenGL和DirectX三者的区别

什么是OpenCL?   OpenCL全称Open Computing Language,是第一个面向异构系统通用目的并行编程的开放式、免费标准,也是一个统一的编程环境,便于软件开发人员为高性能...
  • LG1259156776
  • LG1259156776
  • 2016-09-29 20:20:03
  • 2060

NVIDIA OpenCL 教程

  • 2010年03月17日 21:38
  • 271KB
  • 下载

OpenCL与CUDA在opencv中的区别

1 扩展库简介 OpenCV(Open Source Computer Vision Library)是一个致力于实时处理计算机视觉问题的开源库。它最初由Intel公司开发,以GPL许可协议发布...
  • lien0906
  • lien0906
  • 2015-03-19 17:27:57
  • 2233

并行编程--MPI开发入门

系统环境配置 Win2K Adv Svr + VC6 MPI开发包下载 网上搜索下载MPICH2地址http://www-unix.mcs.anl.gov/mpi/mpich2/ MPI开发包...
  • lj_suxin
  • lj_suxin
  • 2014-11-05 15:12:28
  • 756

关于OpenCL架构的整理

关于OpenCL架构的整理OpenCL不仅仅是一种编程语言,也是一种并行编程框架。它包括编程语言、API、函数库以及运行时来支持软件在整个平台上的开发。 下面介绍OpenCL中包含的各个模型: 平台模...
  • u011028771
  • u011028771
  • 2016-04-18 21:53:36
  • 777

并行编程模型

在计算领域,并行编程模型是并行计算机体系架构的一种抽象,它便于编程人员在程序中编写算法及其组合。一个编程模型的价值可以通过其通用性(generality)来判断,如不同体系架构的一系列不同的问题能否在...
  • Scape1989
  • Scape1989
  • 2017-03-12 17:19:33
  • 1254

CUDA和OpenCL异同点比较

CUDA和OpenCL异同点比较 一、概述    对CUDA和opencl有一定的编程经验,但是细心的人可以发现,OPENCL就是仿照CUDA来做的。既然两个GPU的编程框架如此相像,那么他们究竟有什...
  • zhouxuguang236
  • zhouxuguang236
  • 2014-12-16 21:25:35
  • 4611

opencv,openGL,CUDA,opencl区别&&一些名词的区别

参见:http://www.docin.com/p-691840375.html OpenCV:不知道实际空间,但是有图像,用来处理图像并把图像里面包含的空间信息提取出来。这是图像处理工作用的软件。 ...
  • qizhenyou
  • qizhenyou
  • 2013-12-25 19:03:38
  • 2584
收藏助手
不良信息举报
您举报文章:并行编程模型opencl、mpi、cuda等的区别
举报原因:
原因补充:

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