CUDA与OpenCL之间的差异

CUDA和OpenCL都是实现计算机异构并行计算架构,然而CUDA是针对NVIDIA公司的GPU,而OpenCL是一种通用的计算框架。两者基本的差别为:

cuda vs opencl.jpg

1.硬件架构

1.1 芯片结构

CUDA和OpenCL的芯片结构类似,都是按等级划分的,并逐渐提高等级。然而OpenCL更具通用性并使用更加一般的技术,如OpenCL通过使用Processing Element代替CUDA的Processor,同时CUDA的模型只能在NVIDIA架构的GPU上运行。

OpenCL与CUDA芯片结构

1.2 存储结构

CUDA和OpenCL的存储模型如图所示,两者的模型类型,都是将设备和主机的存储单元独立分开,它们的都是按等级划分并需要程序员进行精确的控制,并都能通过API来查询设备的状态、容量等信息。而OpenCL模型更加抽象,并为不同的平台提供更加灵活的实现,在CUDA模型的Local Memory在OpenCL没有相关的概念。对于CUDA和OpenCL模型的类似概念,通过表列出两者对存储单元命名的差异。

CUDA与OpenCL存储模型
CUDA与OpenCL存储器对比

2.软件架构

2.1 应用框架

一个典型的应用框架都包含有libraries、API、drivers/compilies和runtime system等来支持软件开发。CUDA和OpenCL也拥有相似的特性,都拥有runtime API和library API,但具体环境下的创建和复制API是不同的,并且OpenCL可以通过平台层查询设备的信息;CUDA的kernel可以直接通过NVIDIA 驱动执行,而OpenCL的kernel必须通过OpenCL驱动,但这样可能影响到性能。因为OpenCL毕竟是一个开源的标准,为了适应不同的CPU、GPU和设备都能够得到正常执行;而CUDA只针对NVIDIA的GPU产品。

CUDA与OpenCL应用框架

2.2 编程模型

1)开发模型

CUDA和OpenCL应用的开发模型基本一致,都是由Host和Device程序组成。程序首先开始执行Host程序,然后由Host程序激活Device程序kernel执行。其中两者也存在一些差别,如表所示。

CUDA与OpenCL开发模型比较

2)kernel编程

kernel程序是指Device设备上执行的代码,它是直接在设备上执行,受具体设备的限制,具体两者的差别,如表所示。

kernel编程差异

3)Host编程

Host端基本是串行的,CUDA和OpenCL的差别主要表现在调用Device的API的差异,所以表描述了两者之间API的差异。

Host端可用的API比较
Host端可用的API比较

3.性能

本节根据学术上对CUDA和OpenCL的研究,比较两者的性能,其中本文简单以[1-3]研究成功比较CUDA和OpenCL之间的性能差异,若需详细了解CUDA和OpenCL之间的性能差异可以参考[4-15]。

3.1 AES实现

Wang[1]提出一种在XTS模式的AES实现,并对OpenCL和CUDA性能进行比较。总体性能CUDA要比OpenCL好10%~20%之间。

3.2 三维可视化加速模型

上海理工大学[3]提出合理设计内核函数实现改进的光线投射算法在GPU上并行和并发运行的三维可视化加速模型,该模型实现代码可不用修改在两大主流显卡平台NVIDIA和AMD上任意移植,通过实验证明比较OpenCL与CUDA之间的性能。

3.3 MAGMA和DGEMM算法

作者[2]已经在先前的版本中使用CUDA实现了MAGMA(Matrix Algebra on GPU and multicore architectures)和DGEMM算法,现在将其实现移植到OpenCL API,并对两者的性能进行比较。在NVIDIA处理器上进行测试,其结果是CUDA的性能要高于OpenCL。

4.总结

CUDA与OpenCL的功能和架构相似,只是CUDA只针对NVIDIA的产品,而OpenCL是一种通用性框架,可以使用多种品牌的产品,所以CUDA的性能一般情况下要比OpenCL的性能要高10%~20%之间。

4.1 CUDA与OpenCL的相似点

  • 关注数据并行计算模型;
  • 将主机和设备的程序和存储分离;
  • 提供定制和标准C语言对设备进行编程;
  • 设备、执行和存储模型是现类似的;
  • OpenCL已经可以在CUDA之上进行实现了。

4.2 CUDA和OpenCL主要的差异点

  • CUDA是属于NVIDIA公司的技术框架,只有NVIDIA的设备才能执行;
  • OpenCL是一个开源的框架,其目标是定位不同的设备;
  • CUDA拥有更多的API和帮助文档;
  • CUDA投入市场的时间更早,所以得到更多的支持,并且在研究、产品和应用都比OpenCL丰富;
  • CUDA有非常多的文档,但也更加模糊。

References

1.Wang, X., et al. AES finalists implementation for GPU and multi-core CPU based on OpenCL. in Anti-Counterfeiting, Security and Identification (ASID), 2011 IEEE International Conference on. 2011: IEEE.

  1. Du, P., et al., From CUDA to OpenCL: Towards a performance-portable solution for multi-platform GPU programming. Parallel Computing, 2012. 38(8): p. 391-407.
    袁健与高勃, 基于 OpenCL 的三维可视化加速模型. 小型微型计算机系统, 2015. 36(002): 第327-331页.

  2. Karimi, K., N.G. Dickson and F. Hamze, A performance comparison of CUDA and OpenCL. arXiv preprint arXiv:1005.2581, 2010.

  3. McConnell, S., et al. Scalability of Self-organizing Maps on a GPU cluster using OpenCL and CUDA. in Journal of Physics: Conference Series. 2012: IOP Publishing.

  4. Fang, J., A.L. Varbanescu and H. Sips. A comprehensive performance comparison of CUDA and OpenCL. in Parallel Processing (ICPP), 2011 International Conference on. 2011: IEEE.

  5. Oliveira, R.S., et al., Comparing CUDA, OpenCL and OpenGL implementations of the cardiac monodomain equations, in Parallel Processing and Applied Mathematics. 2012, Springer. p. 111-120.

  6. Harvey, M.J. and G. De Fabritiis, Swan: A tool for porting CUDA programs to OpenCL. Computer Physics Communications, 2011. 182(4): p. 1093-1099.

  7. 林乐森, 基于 OpenCL 的 AES 算法并行性分析及加速方案, 2012, 吉林大学.

  8. 易卓霖, 基于 GPU 的并行支持向量机的设计与实现, 2011, 西南交通大学.

  9. 蒋丽媛等, 基于 OpenCL 的连续数据无关访存密集型函数并行与优化研究. 计算机科学, 2013. 40(3): 第111-115页.

  10. 詹云, 赵新灿与谭同德, 基于 OpenCL 的异构系统并行编程. 计算机工程与设计, 2012. 33(11): 第4191-4195页.

  11. 王晗, 基于多核环境下的多线程并行程序设计方法研究, 2014, 中原工学院.

  12. 黄文慧, 图像处理并行编程方法的研究与应用, 2012, 华南理工大学.

  13. 刘寿生, 虚拟现实仿真平台异构并行计算关键技术研究, 2014, 中国海洋大学.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • CUDA和OpenCL都是实现计算机异构并行计算架构,然而CUDA是针对NVIDIA公司的GPU,而OpenCL是...
    ai领域阅读 16,868评论 0 3
  • CUDA从入门到精通(零):写在前面 本文原版链接: 在老板的要求下,本博主从2012年上高性能计算课程开始接触C...
    Pitfalls阅读 3,540评论 1 3
  • 1. 介绍 首先让我们来看看TensorFlow! 但是在我们开始之前,我们先来看看Python API中的Ten...
    JasonJe阅读 11,616评论 1 32
  • 1. CPU vs. GPU 1.1 四种计算机模型 GPU设计的初衷就是为了减轻CPU计算的负载,将一部分图形计...
    王侦阅读 20,350评论 3 20
  • 1. 简介 OpenCL(Open Computing Language),即开放运算语言,是一个统一的开放式的开...
    ai领域阅读 6,405评论 2 5