热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

讨论帖-关于学习OpenCL的意义以及应用

我是搞图形图像的,经常使用OpenCV,初学OpenCL的目标也是应用到OpenCV里面(一种开放机器视觉库)然而发现几个问题:1)我看了几本OpenCL的书(OpenCV实战、编程指南、异构
我是搞图形图像的,经常使用OpenCV,初学OpenCL的目标也是应用到OpenCV里面(一种开放机器视觉库)
然而发现几个问题:
1)我看了几本OpenCL的书(OpenCV实战、编程指南、异构计算(第2版)),感觉里面的程序都是玩具程序,基本不能作为任何实用项目,只能作为理论学习;
2)如果应用到OpenCV里面,但是OpenCV3.0已经集成了OpenCL模块,你只要一行命令开启OpenCL模式,所有函数自动重载OpenCL版本,这样看来,学OpenCL就我来说意义不大了;
3)另外,成熟的视觉算法,例如SURF边缘检测算法,OpenCV也有专门的OpenCL的.cl版本,我看了下就被震住了,几百行的代码,看都看不懂,就知道如果真的自己写.cl文件,自己还是差的太远……

不知各位前辈怎么看?
自己还有一种感觉是,不应用与项目,很难理解OpenCL的精华吧,比如,有本书能结合SIFT算法(一种经典的边缘检测算法)来介绍OpenCL,就容易理解了吧——但是可惜目前的书籍都是从架构写起,缺乏实用性,有一本2015年10月份出的OpenCL教程看起来结合实际,叫《FPGA异构计算——基于OpenCL的开发方法》,也可惜自己不用FPGA……

3 个解决方案

#1


你说的有一定道理, 很多上层的库已经集成了对 OpenCL及GPU的支持, 如 OpenCV 的很多算法,clBlas 库 等. 但 OpenCV和clBlas分别只限定于其特定的领域 (CV和矩阵运算), 很多其它领域,并没有现成的可用的库,需要用户自己写 OpenCL代码,  如在 深度神经网络学习中,各种 Activation 函数。 另一方面, 从 OpenCL 生态系统的角度, 当然是希望 各个领域的 OpenCL 应用库越多越好,开发者越方便, 但即使这些库有了,从性能优化的角度,这些库的实现未必是最佳的,很多时候仍然需要了解 OpenCL 才能进行定制和优化。还有一方面, clBlas, OpenCV 中的 OpenCL 使用并没考虑多个 GPU, 而在很多性能相关的情况, 利用多个 GPU 进行水平性能 scale 是很必要的。 

#2


另外,OpenCL 的学习真的很容易, 在 Host 端,其代码就是一个 C/C++ 的 API, 在设备端,其代码就是 C/C++ 的一变种。 我总结
OpenCL 编程用如下结果关键概括:

     1)  C/C++.   语言的语法就是 C/C++,  在kernel上增加了一些向量数据类型和操作.
     2)  Parallelism by SIMD or SIMT.   即不同的 kernel work items 执行的是相同的指令流,但访问的是不同的数据. 
     3)  Lock-step 执行。 即一个计算单元内若干个 work items 是按完全同步的方式执行的, 它们在同一时刻执行相同的指令(不同的数据),这让 GPU 上线程的调度和CPU上不一样, 也让GPU单个ALU的逻辑更简单,所以能容纳更多的ALU, 实现更大的并行性。 
     4)硬件体系结构的支持。 如 GPU上可以用 Local Memory 实现以 group of work items 为逻辑单位的代码. 
     5)  GPU是CPU的从属设备。 操作系统及应用的逻辑都是运行在 CPU 上, GPU最多是被 CPU上的应用控制流调用,以完成单个的算法或操作。 

#3


有什么好的书籍推荐么?关于 opencl

推荐阅读
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 小程序的授权和登陆
    小程序的授权和登陆 ... [详细]
  • 本文详细介绍如何使用Netzob工具逆向未知通信协议,涵盖从基本安装到高级模糊测试的全过程。通过实例演示,帮助读者掌握Netzob的核心功能。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 多线程基础概览
    本文探讨了多线程的起源及其在现代编程中的重要性。线程的引入是为了增强进程的稳定性,确保一个进程的崩溃不会影响其他进程。而进程的存在则是为了保障操作系统的稳定运行,防止单一应用程序的错误导致整个系统的崩溃。线程作为进程的逻辑单元,多个线程共享同一CPU,需要合理调度以避免资源竞争。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
author-avatar
婉婷雅铃43
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有