CUDA与openCL的比较
OpenCL和CUDA是两种异构计算的编程模型。
NVIDIA在2007年正式发布CUDA之后,一直大力推广这种编程模型,主要集中在科学计算这一块,原因是这个领域的很多应用程序属于数据并行类型,因此利用CUDA在NVIDIA自家的GPU上加速原来单线程的程序一般都能取得满意的加速效果。
OpenCL最早是由Apple提出,后来交给了Khronos这个开放标准组织。OpenCL 1.0 在2008年底正式由Khronos发布,比CUDA晚了整整一年。由于NVIDIA的CUDA取得了先机,OpenCL则不那么流行,玩的人比较少。
这两种异构计算模型,基本思想其实是非常接近的。我个人的观点是这两东东差别不大,所以学会其中一个,另一个则能触类旁通。网上有不少争论到底是CUDA还是OpenCL好,各种观点都有,其实是肥环瘦燕,各有所好。对初学者来说,可能CUDA可能更简单点,需要关注的东西相对少一点;OpenCL由于要考虑不同平台,要注意的方面多一点,个人觉得比较罗嗦,但目前又不可少。
本人背景不是搞计算机的,所以硬件软件的底层并不是太关心,关注的是这两种编程模型的具体实现,所以比较了一下两种模型的实施步骤
先来CUDA
- 在device (也就是GPU) 上申请内存
- 将host (也就是CPU) 上的数据拷贝到device
- 执行CUDA kernel function
- 将device上的计算结果传回host
- 释放device上的内存
记住这5大步,也就掌握了CUDA的基本思路。
来看看OpenCL
- 检测申请计算资源
- 检测platform
- 检测platform对应的device
- 建立context
- 建立command queue
- 在context内申请存储空间
- 将host (也就是CPU) 上的数据拷贝到device
- OpenCL代码编译
- 读入OpenCL (kernel function) 源代码
- 编译创立program 句柄
- 创立一个 OpenCL kernel 句柄
- 申明设置 kernel 的 参数
- 设置NDRange
- 运行kernel
- 将device上的计算结果传回host
- 释放计算资源
- 释放kernel
- 释放program
- 释放device memory
- 释放command queue
- 释放context
6大步骤,共10几个小步。
用OpenCL C的话,一个都不能少;用C++ wrapper的话可以稍微简单点,第6步不用程序员自己写了,C++的destructor会自动释放这些资源。
NIVIDIA在介绍OpenCL的时候,把它当作一种类似与CUDA driver API 的底层实现,将CUDA runtime API 称为一种高层实现。其实OpenCL和CUDA在很多方面是非常类似的。
CUDA与openCL的比较相关推荐
- CUDA与OpenCL架构
原文https://www.cnblogs.com/hlwfirst/p/5003504.html CUDA与OpenCL架构 目录 CUDA与OpenCL架构 目录 1 GPU的体系结构 1.1 G ...
- 两种GPU计算平台:CUDA 与 OpenCL
目录 1.硬件层面 2.操作系统 3.软件和社区 4.编程模型 5.CUDA 的优点和局限性 优点 限制 6.OpenCL 的优点和限制 优点 限制 7.补充一点 参考 1.硬件层面 图形加速器的三大 ...
- CUDA和OpenCL比较
CUDA和OpenCL比较 翻译自https://www.sharcnet.ca/help/index.php/Porting_CUDA_to_OpenCL 如有错误请帮忙指正,谢谢 OpenCL中的 ...
- DirectX?OpenGL?CUDA?Stream?OpenCL?
如题,这些名词是时下最时髦的东东,特别最后三个,与"大规模并行计算""GPGPU"联系十分紧密,但是这些IT大佬们随着自己高兴就随便弄一个标准或者SDK,完全不 ...
- OpenCL与Cuda
作者:Boy Holy 链接:https://www.zhihu.com/question/19780484/answer/33008684 来源:知乎 著作权归作者所有,转载请联系作者获得授权. 根 ...
- GPU编程语言选择(OpenCL、CUDA 与C++ AMP)
其实在C++ AMP之前已经有了两个异构编程框架:CUDA与OpenCL.CUDA(Compute Unified Device Architecture)是显卡厂商Nvidia于2007年推出的业界 ...
- linux下cpu opencl加速,GPU挑战CPU!详解CUDA+OpenCL威力
众所周知,GPU拥有数十倍于CPU的浮点运算能力,但如此强大的实力多数情况下只能用来玩游戏,岂不可惜?因此近年来业界都在致力于发掘GPU的潜能,让它能够在非3D.非图形领域大展拳脚. 1999年,首颗 ...
- OpenCL 与 CUDA
根据网站资料,简单地汇编一下CUDA与OpenCL的区别.如有错误请指出. 题外话: 美国Sandia国家实验室一项模拟测试证明:由于存储机制和内存带宽的限制,16核.32核甚至64核处理器对于超级计 ...
- 从CUDA开始读OpenCL
就像大一学C++,大二学汇编一样,我也写弄了些个月的CUDA,然后,想想,应该开始刨根问底地,去学点在CUDA之下层的东西,可能会对异构这个编程了解的多. 1 简介 OpenCL全称:开发计算语言,是 ...
最新文章
- 西湖大学能招本科生了!首次确定 5 大本科专业
- 项目跑到到了日志警告就卡住了_java中的日志框架梳理(以故事的形式呈现)...
- 从零开始学习Sencha Touch MVC应用之七
- 08、MySQL—字符串型
- 动态链接库dll,静态链接库lib, 导入库lib 转
- SNF平台从sql server兼容oracle的处理方式和开发方式
- Linux系统网络性能实例分析
- 快捷键关机电脑_电脑还可以这样关机?炫技术的时候到了!
- flash计算机代码怎么写,应用程序操作NorFlash示例代码分享(norflash接口使用方法)...
- Gephi可视化(二)——Gephi Toolkit叫板Prefuse
- DelayedWorkQueue踩坑笔记
- js身份证号计算性别
- sfp寄存器_SFP+-光模块测试指导
- 把antd组件的英文切换为中文
- ansys19.0安装破解教程(图文详解)
- Poisson方程的五点差分格式例题求解-Matlab实现
- react 报 Objects are not valid as a React child (found: object with keys {}). If you meant to render.
- java程序假死_分析一个常见的java多线程通信问题(假死现象)
- CartoonGAN github
- 谈谈我在PyTorch踩过的12坑
热门文章
- 【Linux命令-shell】中断退出:基本语法、机选双色球
- 解决: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Data,
- 剖析基于MCU的可穿戴设备开发平台
- [Split The Tree][dfs序+树状数组求区间数的种数]
- Ectd Raft 模块介绍(二):目录文件介绍
- springboot 连接sqlite
- BZOJ 1324: Exca王者之剑/BZOJ 1475: 方格取数 最大权独立集 最小割
- 【车载开发系列】UDS诊断---读取内存($0x23)
- Hyper-V之01 恢复Hyper-V管理界面中误删除的虚拟机
- Biome-BGC模型原理与应用