最近因项目需要跨平台做算法的加速优化,需要使用opencl来做,所以准备将opencl的东西学习一遍,学习的目的在于使用,达到通用的水平,暂时不做实现硬件的最大化水平。之前做过一些Nivida的Cuda开发,现在做opencl的开发虽然有些差别,但整体变换不大,硬件层逻辑相同,主机代码环境配置模块有所不同。先放一张opencl处理的流程图:

从流程上我们可以看出,主要处理有以上12哥流程:

(1)Discover and initialize the platforms
    调用两次clGetPlatformIDs函数,第一次获取可用的平台数量,第二次获取一个可用的平台。
  (2)Discover and initialize the devices
    调用两次clGetDeviceIDs函数,第一次获取可用的设备数量,第二次获取一个可用的设备。
  (3)Create a context(调用clCreateContext函数)
    上下文context可能会管理多个设备device。
  (4)Create a command queue(调用clCreateCommandQueue函数)
    一个设备device对应一个command queue。上下文conetxt将命令发送到设备对应的command queue,设备就可以执行命令队列里的命令。
  (5)Create device buffers(调用clCreateBuffer函数)
    Buffer中保存的是数据对象,就是设备执行程序需要的数据保存在其中。
    Buffer由上下文conetxt创建,这样上下文管理的多个设备就会共享Buffer中的数据。
  (6)Write host data to device buffers(调用clEnqueueWriteBuffer函数)
  (7)Create and compile the program
    创建程序对象,程序对象就代表你的程序源文件或者二进制代码数据。
  (8)Create the kernel(调用clCreateKernel函数)
    根据你的程序对象,生成kernel对象,表示设备程序的入口。
  (9)Set the kernel arguments(调用clSetKernelArg函数)
  (10)Configure the work-item structure(设置worksize)
    配置work-item的组织形式(维数,group组成等)
  (11)Enqueue the kernel for execution(调用clEnqueueNDRangeKernel函数)
    将kernel对象,以及 work-item参数放入命令队列中进行执行。
  (12)Read the output buffer back to the host(调用clEnqueueReadBuffer函数)
  (13)Release OpenCL resources(至此结束整个运行过程)
(链接:https://www.jianshu.com/p/7a48ae330e35)

至此,我们已经看到的opencl处理的流程,相对于cuda来说,确实繁琐了许多。可能正因为它的繁琐,才让它成为跨平台的原因吧,接下来的我将进行opencl的编程实战和调试方法的学习。

OpenCL-学习教程(一)相关推荐

  1. Vyond制作2D动画学习教程

    Vyond为2D动画提供了极其简单的分解视频创建过程. 你会学到什么 课程获取:Vyond制作2D动画学习教程-云桥网 您将学习如何为2d动画制作画外音 您将学习如何使用Vyond轻松创建精彩的动画视 ...

  2. MAYA 2022基础入门学习教程

    流派:电子学习| MP4 |视频:h264,1280×720 |音频:AAC,48.0 KHz 语言:英语+中英文字幕(根据原英文字幕机译更准确)|大小解压后:3.41 GB |时长:4.5小时 包含 ...

  3. 3dmax Vray建筑可视化入门学习教程

    面向初学者的3Ds Max Vray最佳Archviz可视化课程 从安装到最终图像的一切都将从头开始教授,不需要任何经验 大小解压后:3.25G 时长4h 6m 1280X720 MP4 语言:英语+ ...

  4. Unity 创建2D平台游戏开发学习教程

    了解如何使用C#在Unity中创建您的第一款2D平台游戏 你会学到什么 使用Unity创建2D奥运会 使用可脚本化的对象和单一模式 使用良好的编程实践 创造武器和射弹 使用可脚本化的对象和委托模式创建 ...

  5. Blender 3.0基础入门学习教程 Introduction to Blender 3.0

    成为Blender通才,通过这个基于项目的循序渐进课程学习所有主题的基础知识. 你会学到什么 教程获取:Blender 3.0基础入门学习教程 Introduction to Blender 3.0- ...

  6. UE5废墟破坏游戏场景创建学习教程

    为游戏创建毁坏的资产–深入教程课程 了解一个专业的环境艺术家在为游戏创建毁坏的资产时是如何工作的.您将学习正确的资产规划.创建模块化资产.创建损坏的混凝土和柱子.创建损坏的木材/地板.创建碎石堆.模拟 ...

  7. Maya游戏角色绑定入门学习教程 Game Character Rigging for Beginners in Maya

    准备好开始为游戏制作自己的角色动画了吗? 你会学到什么 了解Maya的界面 优化并准备好你的模型,为游戏做准备 了解关节以及如何使用它们来构建健壮的角色骨骼,以便在任何游戏引擎中制作动画 了解IK和F ...

  8. UE4材质着色器全面学习教程

    你会学到什么 通过所有着色器类型和设计的实际演示,学习创建材质 要求 对虚幻的基本理解会有所帮助 了解纹理的一般知识(不仅限于UE4)也很有用 描述 在这个系列中,我将带你设置大量不同的材料,教你如何 ...

  9. 虚幻引擎的数学知识学习教程 Math for Unreal Engine (Early Preview)

    通过做真实世界的 Unreal Engine项目来学习数学 你会学到什么 理解游戏开发对数学的基本需求 将数学直接应用到用例中,而不是钻研理论(用我们的示例项目进行实践) 正确编辑短视频,节省您的时间 ...

  10. 三维地形制作软件 World Machine 基础入门学习教程

    <World Machine课程>涵盖了你需要的一切,让你有一个坚实的基础来构建自己的高质量的电影或视频游戏地形. 你会学到什么 为渲染或游戏开发创建高分辨率.高细节的地形. 基于Worl ...

最新文章

  1. Windows下打包maven项目,编写bat脚本,dos命令在后台运行与关闭
  2. Solr的安装步骤及增删改查代码示例
  3. boost::hana::typeid_用法的测试程序
  4. 机器学习:决策树过拟合与剪枝,决策树代码实现(三)
  5. 征战蓝桥 —— 2013年第四届 —— C/C++A组第4题——颠倒的价牌
  6. commons-lang3工具类学习(二)
  7. 学python第二天_学习Python的第二天
  8. ldap radius mysql_radius vs ldap
  9. 视觉设计师跟平面设计_使设计具有视觉吸引力
  10. android 主流分辨率是多少,android 屏幕分辨率问题
  11. java数据类型转换方向_java基础学习篇02(数据类型转换和基本面试题)
  12. 虚拟 Linux【转】
  13. 在PPAPI插件中使用Skia绘图
  14. 单片机无线语音遥控智能车
  15. Firefox XPI插件安装方法
  16. 【考研英语语法】定语从句全面介绍
  17. android多点触控的使用
  18. 今日头条 CEO 张一鸣:面试了 2000 个年轻人,混得好的都有这 5 种特质
  19. 联想E440设置U盘启动的方法
  20. 机器学习实战2.1--决策树之求数据集的香农熵

热门文章

  1. 计算机毕业设计(附源码)python租车信息管理系统
  2. 一文读懂 协方差矩阵
  3. 让Y40上的MAC启动更快
  4. Cocos Creator基于热更新的分包方案
  5. 将 Business Events 与WESB及WPS rver 集成
  6. Mendix敏捷开发零基础学习《二》-进阶(Microflow微流、表单验证、运算符、条件判断、数据嵌套、触发器、Debug问题跟踪、版本管理)
  7. google map api key申请
  8. [论文翻译] Deep Learning
  9. 都2021年了,你还不知道混沌工程( Chaos Engineering)?
  10. 记一次摸不着头脑的FullGC问题 (Thumbnails压缩图片占用巨大内存)