社区
OpenCL和异构编程
帖子详情
是否需要循环调用clFinish?
王果_love
2014-03-06 04:20:54
按照以往的知识经验,每个kernel函数调用后都得调用clFinish(commandqueue),这样没问题却非常耗时。
最近发现一个问题,循环调用kernel时,不循环调用clFinish,有时结果正确有时出错。有经验的大侠们,来分享一下经验哈!
...全文
1491
5
打赏
收藏
是否需要循环调用clFinish?
按照以往的知识经验,每个kernel函数调用后都得调用clFinish(commandqueue),这样没问题却非常耗时。 最近发现一个问题,循环调用kernel时,不循环调用clFinish,有时结果正确有时出错。有经验的大侠们,来分享一下经验哈!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
张花花
2014-04-28
打赏
举报
回复
具体说一下,如过kernel本身是有依赖的,那么在kernel中加循环也是个好办法。 另外,完全可以用cl_event来处理,要比clFinish好多了。
yancheng518
2014-03-15
打赏
举报
回复
前提是CPU和GPU没有交互。不能CPU和GPU交叉调用。
yancheng518
2014-03-15
打赏
举报
回复
是在GPU上吗?如果是用同一个命令队列,是不需要加clFinish的
lcwyylcwyy
2014-03-07
打赏
举报
回复
多用内部barrier结合local吧。多次kernel触发,而且数据时对时错,我感觉你可能没怎么使用local内存,当然也可能有其他情况,比如要保存中间结果而且数据输入输出映射不是一对一的话,clfinish可能就必须要用了。另外,barrier也可以同步global内存,在内核同步一下global试试,不过即使是全局数据,barrier也只是同步workgroup/block中的线程,不是所有线程一起同步。
outstander
2014-03-06
打赏
举报
回复
如果你写的kernel互相依赖性,那不在循环中clfinish当然是要出错的啊。 特别是使用不阻塞的启动kernel代码在GPU上运行时,CPU端只要将触发kernel运行的指令送到GPU后就会继续运行,而不会等kernel代码运行。 因此,在这种情况下kernel可能被异步多次触发了,如果每次kernel处理的没依赖于以前kernel的数据,那自然就会引入正确性问题。
OpenCL性能对比测试案例,合理使用
clf
ini
sh
()函数,充分发挥指令队列(commandqueue)特性。
用的公司的电脑,配置如下: CPU: AMD Athlon X4 830 (3.0GHz 四核) 内存: 8GB GPU: nVIDIA GT710 (0.954GHz 192cores 1CU) 显存: 1GB 上图,浮点性能测试。 CPU的 float 浮点性能 91.95GFlops。GPU为 320.1GFlops。浮点数计算 GPU领先 3
openCL 低延迟,频繁
调用
实验方案
openCl低延迟,频繁
调用
实验 1 opencl 可以利用gpu对计算进行加速.gpu对比cpu的特点,并行的核多,同步操作并行计算效率高(逻辑步调完全一致).串行逻辑比如cpu. 可以加速的算法: 1) 大量的数学运算.比如矩阵的加减乘除. 其中数据类型为float的单精度/半精度吞吐量最大.int不如float. 2) 可并行的排序/搜索.这是...
OpenCL多次
循环
执行内核的一个简单样例
由于对OpenCL初学者而言可能比较普遍,因此我这里给出一个清晰简单的demo来掩饰如何简单又高效地执行
循环
执行OpenCL内核。 以下程序的大概意思与流程是: 内核程序含有两个参数,第一个参数既是输入又是输出,第二个参数仅仅用于输入。不过第一个参数只对其初始化一次,而第二个参数在每次
循环
执行新一次的内核程序前会再传递一次数据。这么做有助于同学更好地去理解、把握存储器对象的基本使用方法。 ...
OpenCL™规范 3.2.4同步
例如,如果工作组函数发生在
循环
中,则工作项必须在相同的
循环
迭代中遇到相同的工作组函数。工作组的所有工作项都必须执行工作组功能并完成对内存的读取和写入,然后才能允许任何工作项在工作组功能之外继续执行。例如,如果工作组函数发生在
循环
中,则工作项必须在相同的
循环
迭代中遇到相同的子组函数。子组的所有工作项必须执行子组功能并完成对内存的读写,然后任何工作项才能在子组功能之外继续执行。:阻塞命令定义了
调用
阻塞API函数的执行单元与达到完整状态的排队命令之间的同步点。子组同步:对单个子组中工作项的执行顺序的约束。
GPU并行加速编程 opencl CUDA 核函数
GPU并行加速编程 opencl CUDA 核函数 OpenCL(全称为Open Computing Langugae,开放运算语言)是第一个面向异构系统(此系统中可由CPU,GPU或其它类型的处理器架构组成)的并行编程的开放式标准。 它是跨平台的。 OpenCL由两部分组成,一是用于编写kernels(在OpenCL设备上运行的函数)的语言,二是用于定义并控制平台的API(函数)。 OpenCL...
OpenCL和异构编程
601
社区成员
575
社区内容
发帖
与我相关
我的任务
OpenCL和异构编程
异构开发技术
复制链接
扫一扫
分享
社区描述
异构开发技术
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章