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

前端之家收集整理的这篇文章主要介绍了c – opencl命令队列如何工作,我可以问什么前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在研究一种算法,它经常做同样的操作.由于操作由一些线性代数(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风格的设备/主机二分法而言,您应该考虑“主机”上的命令队列操作(对于大多数实现).

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

猜你在找的C&C++相关文章