加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – opencl命令队列如何工作,我可以问什么

发布时间:2020-12-16 04:53:04 所属栏目:百科 来源:网络整理
导读:我正在研究一种算法,它经常做同样的操作.由于操作由一些线性代数(BLAS)组成,所以我会尝试使用GPU. 我写了我的内核并开始在命令队列上推送内核.因为我不想在每次通话后等待,所以我会尝试用事件菊花链接我的呼叫,然后开始在队列中推送它们. call kernel1(retur
我正在研究一种算法,它经常做同样的操作.由于操作由一些线性代数(BLAS)组成,所以我会尝试使用GPU.

我写了我的内核并开始在命令队列上推送内核.因为我不想在每次通话后等待,所以我会尝试用事件菊花链接我的呼叫,然后开始在队列中推送它们.

call kernel1(return event1)
call kernel2(wait for event 1,return event 2)
...
call kernel1000000(vait for event 999999)

现在我的问题是,所有这些都被推到图形芯片上,驱动程序是否存储队列?它有我可以使用的事件数量,或命令队列的长度,我环顾四周,但我找不到这个.

我正在使用atMonitor来检查我的gpu的利用率,并且非常难以将其推高到20%以上,这可能只是因为我无法将呼叫推得那么快吗?我的数据已存储在GPU上,而我传递的所有内容都是实际调用.

解决方法

首先,除非下一个内核对先前的内核具有数据依赖性,否则不应等待来自先前内核的事件.设备利用率(通常)取决于队列中是否存在随时可用的内容.只有在需要等待活动时才等待活动.

“does all of this get pushed to the graphic chip of does the driver store the queue?”

那是实现定义的.请记住,OpenCL不仅仅适用于GPU!就CUDA风格的设备/主机二分法而言,您应该考虑“主机”上的命令队列操作(对于大多数实现).

尝试排队多个内核调用,而不必在它们之间等待.此外,请确保您使用的是最佳工作组大小.如果您同时执行这两项操作,则应该能够最大化您的设备.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读