无序命令队列与阻塞和非阻塞OpenCL写入的关系

无序命令队列与阻塞和非阻塞OpenCL写入的关系,opencl,gpu,nvidia,amd-processor,Opencl,Gpu,Nvidia,Amd Processor,我试图找出clcreatecommandqueue和clenqueuewritebufferAPI之间的关系 我使用一个非常简单的例子,即矢量加法和AMD CodeCL来衡量性能 以下是clcreatecommandqueue和clenqueuewritebuffer API的一些不同配置的数字: Scenario Command-Queue Properties blocking_write time taken 1 in-order

我试图找出
clcreatecommandqueue
clenqueuewritebuffer
API之间的关系

我使用一个非常简单的例子,即矢量加法和AMD CodeCL来衡量性能

以下是clcreatecommandqueue和clenqueuewritebuffer API的一些不同配置的数字:

Scenario      Command-Queue Properties      blocking_write       time taken

1             in-order                      non-blocking         46.83ms

2             in-order                      blocking             4.711ms

3             out-of-order                  non-blocking         46.55ms

4             out-of-order                  blocking             4.358ms
记录的时间是从cpu到gpu的4MB数据传输(我得到了与40MB数据传输类似的结果)

根据我的理解,无序和非阻塞所花费的时间最少,而有序和阻塞写入所花费的时间最多

但是上面的数据表明,无论命令队列的类型如何,阻塞写入都优于其他任何类型


有谁能帮我了解这些统计数据吗?

你是如何安排这些数据的?我刚刚在AMD和NVIDIA GPU的混合上尝试了相同的单独数据传输实验,得到了几乎相同的每个配置的时间。这正是我所期望的,因为使用异步数据传输和无序队列带来的性能提升来自于将这些命令与其他主机或设备端计算重叠。这些结果是我使用AMD的CodeXL profiler在AMD A10-6800 APU上获得的。你有没有想过为什么我会通过设置不同的配置(也就是阻塞非异步模式)来获得10倍的时间差。它们看起来像是在时间线上花费了那么长的时间,还是有空的间隔?我似乎听过APP Profiler(CodeXL的前身)说,传输只需要很短的时间,但时间线上存在差距,表明传输时间确实更长。