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

  1. 在device (也就是GPU) 上申请内存
  2. 将host (也就是CPU) 上的数据拷贝到device
  3. 执行CUDA kernel function
  4. 将device上的计算结果传回host
  5. 释放device上的内存

记住这5大步,也就掌握了CUDA的基本思路。

来看看OpenCL

  1. 检测申请计算资源

    • 检测platform
    • 检测platform对应的device
    • 建立context
    • 建立command queue
    • 在context内申请存储空间
  2. 将host (也就是CPU) 上的数据拷贝到device
  3. OpenCL代码编译
    • 读入OpenCL (kernel function) 源代码
    • 编译创立program 句柄
    • 创立一个 OpenCL kernel 句柄
    • 申明设置 kernel 的 参数
    • 设置NDRange
  4. 运行kernel
  5. 将device上的计算结果传回host
  6. 释放计算资源
    • 释放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的比较相关推荐

  1. CUDA与OpenCL架构

    原文https://www.cnblogs.com/hlwfirst/p/5003504.html CUDA与OpenCL架构 目录 CUDA与OpenCL架构 目录 1 GPU的体系结构 1.1 G ...

  2. 两种GPU计算平台:CUDA 与 OpenCL

    目录 1.硬件层面 2.操作系统 3.软件和社区 4.编程模型 5.CUDA 的优点和局限性 优点 限制 6.OpenCL 的优点和限制 优点 限制 7.补充一点 参考 1.硬件层面 图形加速器的三大 ...

  3. CUDA和OpenCL比较

    CUDA和OpenCL比较 翻译自https://www.sharcnet.ca/help/index.php/Porting_CUDA_to_OpenCL 如有错误请帮忙指正,谢谢 OpenCL中的 ...

  4. DirectX?OpenGL?CUDA?Stream?OpenCL?

    如题,这些名词是时下最时髦的东东,特别最后三个,与"大规模并行计算""GPGPU"联系十分紧密,但是这些IT大佬们随着自己高兴就随便弄一个标准或者SDK,完全不 ...

  5. OpenCL与Cuda

    作者:Boy Holy 链接:https://www.zhihu.com/question/19780484/answer/33008684 来源:知乎 著作权归作者所有,转载请联系作者获得授权. 根 ...

  6. GPU编程语言选择(OpenCL、CUDA 与C++ AMP)

    其实在C++ AMP之前已经有了两个异构编程框架:CUDA与OpenCL.CUDA(Compute Unified Device Architecture)是显卡厂商Nvidia于2007年推出的业界 ...

  7. linux下cpu opencl加速,GPU挑战CPU!详解CUDA+OpenCL威力

    众所周知,GPU拥有数十倍于CPU的浮点运算能力,但如此强大的实力多数情况下只能用来玩游戏,岂不可惜?因此近年来业界都在致力于发掘GPU的潜能,让它能够在非3D.非图形领域大展拳脚. 1999年,首颗 ...

  8. OpenCL 与 CUDA

    根据网站资料,简单地汇编一下CUDA与OpenCL的区别.如有错误请指出. 题外话: 美国Sandia国家实验室一项模拟测试证明:由于存储机制和内存带宽的限制,16核.32核甚至64核处理器对于超级计 ...

  9. 从CUDA开始读OpenCL

    就像大一学C++,大二学汇编一样,我也写弄了些个月的CUDA,然后,想想,应该开始刨根问底地,去学点在CUDA之下层的东西,可能会对异构这个编程了解的多. 1 简介 OpenCL全称:开发计算语言,是 ...

最新文章

  1. 西湖大学能招本科生了!首次确定 5 大本科专业
  2. 项目跑到到了日志警告就卡住了_java中的日志框架梳理(以故事的形式呈现)...
  3. 从零开始学习Sencha Touch MVC应用之七
  4. 08、MySQL—字符串型
  5. 动态链接库dll,静态链接库lib, 导入库lib 转
  6. SNF平台从sql server兼容oracle的处理方式和开发方式
  7. Linux系统网络性能实例分析
  8. 快捷键关机电脑_电脑还可以这样关机?炫技术的时候到了!
  9. flash计算机代码怎么写,应用程序操作NorFlash示例代码分享(norflash接口使用方法)...
  10. Gephi可视化(二)——Gephi Toolkit叫板Prefuse
  11. DelayedWorkQueue踩坑笔记
  12. js身份证号计算性别
  13. sfp寄存器_SFP+-光模块测试指导
  14. 把antd组件的英文切换为中文
  15. ansys19.0安装破解教程(图文详解)
  16. Poisson方程的五点差分格式例题求解-Matlab实现
  17. react 报 Objects are not valid as a React child (found: object with keys {}). If you meant to render.
  18. java程序假死_分析一个常见的java多线程通信问题(假死现象)
  19. CartoonGAN github
  20. 谈谈我在PyTorch踩过的12坑

热门文章

  1. 【Linux命令-shell】中断退出:基本语法、机选双色球
  2. 解决: 未能加载文件或程序集“Microsoft.Practices.EnterpriseLibrary.Data,
  3. 剖析基于MCU的可穿戴设备开发平台
  4. [Split The Tree][dfs序+树状数组求区间数的种数]
  5. Ectd Raft 模块介绍(二):目录文件介绍
  6. springboot 连接sqlite
  7. BZOJ 1324: Exca王者之剑/BZOJ 1475: 方格取数 最大权独立集 最小割
  8. 【车载开发系列】UDS诊断---读取内存($0x23)
  9. Hyper-V之01 恢复Hyper-V管理界面中误删除的虚拟机
  10. Biome-BGC模型原理与应用