OpenCL之我心得

OpenCL简介 文章目录前言一、什么是OpenCL?1.1 平台模型1.2 执行模型1.2.1 内核如何在 OpenCL 设备上执行1.2.2 上下文1.2.3 命令队列1.3 内存模型1.4 编程模型二、OpenCL的内容 前言 一、什么是OpenCL? OpenCL是面向由CPU、GPU和其他处理器组合构成的计算机进行编程的行业标准框架。用OpenCL, 可以编写一款能够在各类系统上成功运行的程序,这些系统包括移动电话、笔记本电脑, 甚至是大规模超计算机中的节点。Open CL通过公布硬件 来提供高度的可移植性, 而 阅读详情

OpenCL之我心得

http://bbs.hpctech.com

http://blog.youkuaiyun.com/openhero

http://www.comp.hkbu.edu.hk/~kyzhao/

博客 开勇

2009/11/20

或许是为了最求片刻的宁静,选择了宁静的夜,或许在这个时候,只有实验室桌之上几台电脑嗡嗡的蜂鸣声能时刻的提醒我周围的存在。09年算是忙碌的一年,已经快到年底了,反观这一年自己做的事情,对于技术,或许更多的时间都和技术无关吧……追求片刻的宁静,寻求心灵的归属。最近几天黑白颠倒,每天只能睡4-5个小时,在安静的夜,或许能找到自己的真正的位置……

这两天在看OpenCL的一些特性,在反思这个过程,现在计算机技术的发展我想分为两个层面,一个是高层的,云;一个是底层的核心,纵核;在于云这个层面,我们可以采用集群,分布式的一系列的管理软件,任务控制软件来维护整个系统,而对于纵核系统,我们才刚刚起步,OpenCL作为一个纵核的标准,或许才算是一个起步,从OpenCL一出来就开始关注,到现在,OpenCL的特性里面学习了大型集群的思路,也体现了纵核的特点。我比较喜欢OpenCL里面的这个编程模型图:

clip_image002[3]

OpenCL的一些概念我比较看好,例如在高层的多任务的配合,这里避开了在CUDA层面的时候,需要自己写一个多GPU管理的尴尬。

例如Nvidia提供的OpenCL的demo里面,oclMatrixMul的例子,我们可以看到在处理多卡这个环节,OpenCL可以直接利用多卡来分配各自的任务,然后再合起来,这样在一个节点上面,就可以同时利用所有的OpenCL的资源,可以把所有的GPU,CPU都可以利用起来,这样针对一个节点来说,就可以不用程序员人为的做太多的事情,就当成一个节点就可以了。

这个模型也体现了之前我在很多场合说的现在计算机集群的三个层面,

第一个是多机器的层面,我们可以用MPI这样的编程模型来理解这个层面,有多个计算机组成,可能包括同构和异构的集群,这个层面是在多个机器层面来说的。

第二个层面是针对每一个机器节点,我们可以理解为CPU,GPU多个处理器在一个运行系统中的,这个节点可以由系统统一管理。

第三个层面,针对于CPU和GPU本身,也是纵核的载体,这个层面。

我现在把OpenCL归并到第二个层面里面,OpenCL可以起到承上启下的作用。当然,如果OpenCL的底层支持库变换一下,也可以成为第一个层面,或者也可以成为第三个层面。但是现在我只把他归为第二个层面。

其实我们可以想象一个树的结构,一棵树,一棵草,一片树林,一片森林,这样的结构,或许也就是大自然的结构,所以我很喜欢上面的那个图。比较美妙:)ps:分形也十分的美妙……我很喜欢图形……或许是因为小学的时候,学过几年绘画吧……

在看OpenCL的时候,我们不能直接把它和CUDA来做比较,因为两者不是一个层面的东西。往往现在对CUDA的理解也是比较模糊的,用Nvidia自己的话来说,CUDA是一个平台,一个平台而已,它是一套ISA架构,就像X86一样的一套架构,我们现在用只不过是CUDA C,将来也可以是CUDA C++,CUDA java…不应该把CUDA和OpenCL用来做比较,两者是不一样的,OpenCL是一个更高的层面。

………………………………………………分割线

但是现在OpenCL还是在初步阶段,我这里有AMD的平台,有Nvidia的平台,各自都支持OpenCL,但是使用的底层库不一样,效果也不一样。IBM也有自己的OpenCL库,对于统一的支持,OpenCL还有一段路要走,一年,两年,还是三年?不得而知。

至少现在对于OpenCL编程,还是很痛苦的,大家的东西都不一样,而且是运行时编译执行的,这个速度肯定比原生态的要慢很多,在统一这个路上,OpenCL还有很长一段路要走。

……………………………………………………

对于OpenCL的使用,我更喜欢把它作为第二层来使用,作为一个多卡任务的管理者来使用,不过现在同一台机器上,还不能同时支持AMD和Nvidia同时使用OpenCL,所以,还需要等待。虽然我的机器上同时有AMD的卡,也有Nvidia的卡,但是两者都提供了各自的OpenCL,所以这块很麻烦~需要跑各自的程序的时候,还需要把DLL改成对应的才行。

很希望将来OpenCL组委会自己提供统一的OpenCL,让后各自厂商提供各自的运行库比如NVOpenCL.dll AMDOpenCL.dll然后由OpenCL组委会提供的OpenCL.dll来管理这些厂商的DLL,这样对于开发人员来说,就会方便很多。我想,将来他们也会这样做。只是形式不一样而已。

OpenCL的特性今天说了一个,这个算是我对于OpenCL而言,最喜欢的一个特性吧。

以后有时间了,会继续分析OpenCL的一些特性,也喜欢随时欢迎大家一起讨论。

OpenCL 教程:从基础到实践 OpenCL(Open Computing Language)是一个开放标准的并行编程框架,用于在异构系统上编写高性能计算程序。它允许开发者利用各种计算设备(如 CPU、GPU、FPGA 等)来加速计算密集型任务。通过本教程,我们已经深入探讨了 OpenCL 的核心概念、编程模型、内存模型和执行模型。我们还通过实际的例子展示了如何实现和优化 OpenCL 程序。记住,优化是一个迭代的过程。始终使用性能分析工具来测量你的优化效果,并根据具体的硬件和问题特性来调整你的策略。 阅读详情

相关推荐

【OpenCL基础 · 二 】OpenCL架构

通过【OpenCL基础 · 一】因源,我们了解了OpenCL的起源和应用场景。在异构并行平台上,OpenCL可以协助开发者方便地使用计算资源,使得异构平台编程变得容易。那么如何使用这个便捷的开发工具就是开发人员需要学习的了,我们需要从宏观到细节去理解OpenCL是如何运作的,才能进行实际的代码开发工作。这篇博文将介绍OpenCL的整体框架,展示它是如何利用异构平台进行控制、资源调度及运算的。包括OpenCL平台模型、执行模型和存储器模型。

lijianyi0219的博客 3066

一文搞懂OpenCL

OpenCL(全称为Open Computing Langugae,开放运算语言)是第一个面向异构系统(此系统中可由CPU,GPU或其它类型的处理器架构组成)的并行编程的开放式标准。它是跨平台的。OpenCL由两部分组成,一是用于编写kernels(在OpenCL设备上运行的函数)的语言,二是用于定义并控制平台的API(函数)。OpenCL提供了基于任务和基于数据两种并行计算机制,它极大地扩展了GPU的应用范围,使之不再局限于图形领域。

实践出真理,接毕设/课设项目开发指导 3万+

OpenCL心得2

1.clEnqueueNDRangeKernel函数错误(Access violation reading location 0x000......... ) 后来发现原来是设置参数的时候搞疏忽掉了: mem = clCreateBuffer(context, CL_MEM_READ_WRITE, VectorLength, 0, &err); clSetKernelArg(gpus[i

Hope 3227

高性能计算—— CUDA和OPENCL

文章目录OpenCL&Cuda1. 环境配置1.1 cuda的安装和配置1.1.1 安装CUDA1.1.2 配置环境变量1.1.3 检查cuda是否安装成功1.2 VS中配置cuda1.3 VS中配置opencl2. OpenCL&Cuda编程2.1 编程基础2.2 编程案例2.2.1 查看配置信息2.2.2. 向量运算实验目的实验步骤opencl 代码分析cuda 代码分析实验结果结果分析2.2.3 Pi计算实验目的实验步骤opencl代码分析cuda 代码分析实验结果结果分析3. 总结4

zyw2002的博客 1万+

利用OpenCL对OpenCV并行化心得(1)

做了一年多的opencv并行化,总算小有成就了,马上软件就要发布,也该是一个总结的时候了,只可惜文笔不行,人也懒,只好随便写写,算是给自己做点交代吧。     opencv里面最重要的一种类型恐怕非8UC1莫属,灰度图一般都用这种类型表示,而且大多数算法只提供这种数据类型的支持,所以8UC1的优化就成了整个工作的重中之重。以matrix add为例,最简单的kernel的写法是这样的

lkchl的专栏 4158

利用OpenCL对OpenCV并行化心得(2)

上文说到了没有ROI的情况下怎么优化add,现在看看有roi的情况。 ROI是opencv里面的一个特性,也可以说是图像处理库都有的特性,它的意思是对于整个一幅图像,只处理被ROI框起来的那一块,可以看做是一个mask。如果不注重性能,最简单的方法就是加上一个offset即可 __kernel void matrix_add(__global uchar* src1,__global uc

lkchl的专栏 4594

学习OpenCL的一些心得

这篇文章记录我对于前一周学习OpenCL的心得和对于一些东西的理解。 1.GPU   对于最开始,完全不清楚GPU是个啥,感觉好像很神秘似得,只知道需要话好几千块RMB买一个的。所以在一段时间里面都没有去碰OpenCL,认为是没有GPU,无法学习并测试。直到后来才发现,所谓GPU就是平常所谓的显卡,带计算功能的显卡(以前有的显卡不支持计算,现在看nVIDIA官网说,他们的所有卡都实现了

Hope 6299

OpenCL综合-心得笔记【1】

OpenCL内部架构

逻辑君的日常 789

opencl学习心得

最近看了将近10天的opencl,有些体会 先不说英文opencl文档看起来一头雾水,光是英文就够锻炼人的,一丝不苟的看了前几张之后,撑不住了,要说说opencl文档的体会 首先,文档毕竟是文档,属于参阅资料,如果当做入门材料,个人认为是错误的,从文档总体结构来看,讲了ope

qdwang2010的专栏 1369

QtOpenCLExamples:Qt5 + OpenCL 1.2 使用示例

QtOpenCL 示例 Qt5 + OpenCL 1.2 使用示例。 虚拟盒子 如果您想在 VirtualBox(Windows 客户机)中测试这些示例,请安装 ,它将独立于您的 CPU 工作。

YOLOv8模型INT8量化实战:解决sigmoid输出归零的坑(附代码修改)

本文详细介绍了YOLOv8模型INT8量化过程中遇到的sigmoid输出归零问题及其解决方案。通过修改模型导出代码、优化ONNX量化流程,并提供完整的部署优化技巧,帮助开发者在边缘计算设备上实现高效的模型推理。文章还包含量化效果验证和常见问题排查方法,助力开发者快速解决实际部署中的难题。

vvv99的博客 252

利用OpenCL对OpenCV并行化心得(3)

上文提到由于ROI的问题,想在一个kernel中向量读写是有难度的,于是就用了很多mask操作,但是这些操作太复杂,不仅非常容易引入bug,而且带来了太多的额外操作,对于没有ROI的数据,那么多边界操作都是浪费的。     在心得2中,简单的kernel只需要十几条汇编指令,而考虑到ROI的向量化需要几百条指令,多余的处理指令太多了,对于像add这样的简单函数,最终的处理效率也不是那么理想。这里

lkchl的专栏 1760

BeikeShop跨境电商独立站系统V1.5.0免授权全开源版

BeikeShop 一款开源好用的跨境电商系统,BeikeShop 是基于 Laravel 开发的一款开源商城系统,主要面向外贸/跨境电商行业提供商品管理、订单管理、会员管理、支付、物流、系统管理等功能。BeikeShop商城 Beike多语言商城 多货币商城B2C商城系统 代码100%开源 PHP商城系统 H5/PC商城 跨境电商系统 跨境商城系统 电商商城系统 Laravel 9 框架插件化开发,MVC架构 支持插件市场。Event 机制实现Hook功能,自定义可视化装修。

818

opencl:提高kernel有效并发约束(Effective concurrency constraint)的一点心得

下面是一个简单的kernel函数,从integ_count_mat矩阵中用vload8函数取出A1,A2,A3,A4四个向量执行A4+A1-A2-A3,结果存入density_mat,代码中只用到了一个向量类型的变量sum。__kernel void object_density_filter( matrix_info_cl im_info , const __

10km的专栏 3253

实战避坑:泛微E9流程接口与单点登录(SSO)开发全解析(含自定义Action、Restful API与免密登录)

本文深入解析泛微E9流程接口与单点登录(SSO)开发中的关键技术与避坑指南,涵盖自定义Action开发、Restful API鉴权机制及跨系统单点登录实现。通过实战案例与代码示例,帮助开发者高效完成二次开发,解决系统集成中的数据孤岛问题,提升企业信息化建设效率。

weixin_42549451的博客 674

基于 Go 的微信滑块验证码自动化:协议还原与图像算法深度解析

本文从协议层、算法层和工程优化三个维度,系统拆解了基于Go的微信滑块验证码自动化方案。在协议层,通过手写protobuf编码器和RSA加密复现了微信UUID生成机制;在算法层,采用图像匹配技术实现滑块缺口定位;在工程层面,构建了包含HTTP状态机和随机化设备指纹的完整验证流程。文章重点阐述了技术实现的形式化建模、算法选择依据和复杂度分析,为工程师和算法研究者提供了可验证的技术方案。核心代码结构包括UUID生成、滑块状态机和图像匹配算法等模块,通过分层设计实现了高效可靠的验证码自动化破解。

weixin_65409651的博客 1293

OpenCL归并算法

数值归并运算实质上就是求N项常数的总和的一种并行计算方法。 设数组的长度为N,若依次去运算数组中的每个元素(sum+=array[i]),显然时间复杂度就是O(N); 对于数值归并运算还有一种更快捷的方法,可以通过将数组第i个元素与第(i+N/2)个元素相加,得到一个长度为N/2的数组; 得到的新数组中的每个元素,即为前一数组中元素两两相加所得(若原数组为奇数个,则保留最后一个元素至新数组); 将...

tech_otaku0512的博客 818

基于matlab的主成分分析的人脸二维码识别系统

人脸识别因其在系统安全验证、信用验证、刑侦跟踪、身份管理、视频会议、人机交互、智能家居等方面的巨大应用前景,成为当前模式识别和人工智能领域越来越热门的一个研究方向。随着安全入口控制和二维码智能扫描应用需求的快速增长,基于二维码识别的生物人脸统计识别技术也引起了人们的重视。本案例将详细讲解基于主成分分析的人脸特征提取的原理与方法,并将其与 QR 二维码的编解码进行结合,将 MATLAB 作为工具平台,调用 QR 二维码编解码应用程序,进而实现一个人脸二维码自动识别的系统原型。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 977

Opencl 之bilateral filter优化

由于项目的需要在我还没有搞清楚Opencl框架的情况下就开始去用opencl方式去优化一个图像处理算法--bilateral_filter,可想而知其过程的艰辛,好在昨天已经搞定收工了,感谢这一个月的过程让我从一个opencl路人变成了亲戚,特此写一篇博客记录下一些心得。废话少说现在开始。 拿到这个任务是我首先感觉相对我之前写代码还是比较高大上的,因此心里也暗暗下决心搞定这个问题,于是先去了解双...

Emel 的博客 1594

ONNX Runtime C# YOLO全链路压测:从300ms到22ms的15个底层优化技巧

摘要:本文分享了工业质检场景下C#调用YOLOv8s ONNX模型的性能优化实战经验。原始单帧推理耗时300ms无法满足产线需求,通过全链路分析定位瓶颈(预处理85ms、推理180ms、后处理30ms)。重点优化措施包括:使用OpenCVSharp CUDA加速预处理(85ms→12ms),开启ONNX Runtime ALL级别图优化,选用TensorRT执行提供程序(180ms→22ms),以及优化内存管理和线程调度。最终实现单帧总耗时22ms±2ms,GPU利用率提升至85%,完整满足产线120块板/

2601_94871597的博客 402

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

手把手教你 RT-DETR 添加注意力机制 | 一次性添加 20+ 种!

Coding... 2852

CUDA 5.0 初体验

有了新机器和新显卡,发现CUDA也有了5.0版本,今天花了点时间安装体验了一下。感受如下: OpenCL的例子已经完全被移除了。OpenCL支持看来也并不包含在内(待确认)。 5.0版本和Kepler架构开始支持一种叫Dynamic Parallelism Programming的东西,我的初步理解是Kernel内部可以Launch更多Kernel。 绝大多数例子都是VS9(2...

dicuisao5234的博客 323

Easy系列PLC远程IO模块的安装配置和地址访问(EtherCAT总线)

EtherCAT分布式时钟DC(SOEM源码解析)EtherCAT分布式时钟DC(SOEM源码解析)_soem dc同步-优快云博客文章浏览阅读1.2k次。分布式时钟(DC,Dsitributed Clock)可以使所有 EtherCAT设备使用相同的系统时间,从而控制各设备任务的同步执行。_soem dc同步1200PLC连接分布式IO组态编程应用(ES200SP固件版本不同解决方法)

RXXW_Dor的博客 175

9:00 Studio 系列文章之-- 午夜GPU(一)

序:       我是一名光学专业研究生,主攻三维立体显示。发表过两篇SCI,一项液晶显示器的发明专利。但我现在是一名软件工程师,就职于成都品果科技(Camera360),任Windows Phone 8开发一职。也许你没听过,但是过几年,你一定会记住它,还有我。      我们的CTO教育我们:专注地做事。他用实际行动诠释了这句话。他浸淫技术多年,主攻GPU编程,30多岁依然是个技术狂,公司

u011393966的专栏 694

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 《GPU高性能运算之CUDA》我们的书总算出来了
下一篇: Nokia 手机 号码 同 HTC 同步
OpenHero
博客等级 码龄23年 2276粉丝 226原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值