【发布时间】:2014-09-30 05:42:28
【问题描述】:
我正在尝试查看 Opencl 编程模型在 GPU 上的性能,现在在测试编程模型时,我必须使用 clEnqueueNDkernel() 启动内核,我试图多次调用此函数,所以当启动两个或四个并发内核时,我可以看到它的执行情况。
我观察到程序与启动一个内核所用的时间相同,现在我假设它只运行内核一次,因为不可能运行两个或四个并发内核。
现在我想知道如何在一个 GPU 上启动多个内核。
例如:我想推出类似的东西:
clEnqueueNDkernel()
clEnqueueNDkernel()
我该怎么做?
【问题讨论】:
-
四个并发内核是指四个相同的内核代码还是四个不同的内核代码?另外一个内核中有多少工作,是两个值的加法还是很多计算?
-
四个相同的内核。而且工作量不一。当我在各种工作量下检查时
-
如果计算量很小,几乎所有的时间都可以用来在主机和设备之间移动数据。这可能是一个内核和四个内核花费相同时间的原因。与数据传输相比,尝试使负载非常大。那么它应该花费四次发射的四倍时间。
-
您是否在基准测试中包含了 clFinish?如果你没有,你只是在测量异步排队时间。除非您使用多个命令队列或乱序命令队列,否则内核肯定不会同时运行。你必须付出一些努力才能实现。