OpenCL内核排队延迟

时间:2014-03-15 22:24:33

标签: opencl gpu gpgpu

我有一大堆数据,100GB。我只有1GB的视频内存。我需要使用MaxWorkgroupSize块对我的内核进行多次排队。这将是~10000个内核队列和100个内存传输。这对我的表演时间有多严重?还有,有更快的方法处理这么多数据吗?我是否会更好地使用8个线程在我的CPU上运行,因为那时没有数据传输和内核延迟。我在编写这个东西之前先询问,因为我想确保我有正确的方法。

2 个答案:

答案 0 :(得分:0)

这取决于工作的性质。 GPU是SIMD机器。如果你通常为每个项目做同样的事情(例如,每个工作项的分支通常都在同一个地方),那么这对GPU来说是个好兆头。即便如此,8线程CPU也有OpenCL实现。此外,在像英特尔的嵌入式GPU(AMD也是?)这样的环境中,您应该考虑内存缓冲区上的CL_MEM_USE_HOST_PTR标志。您可以使用它来获得零拷贝开销。

答案 1 :(得分:0)

与单核运行相比,多次排队相同内核并不会对每个队列造成任何性能损失。更重要的是,由于缓存,它会变得更快一些。

此外,您可以在CPU和CPU上运行代码。同时使用GPU,因为两者都是OpenCL兼容设备。

您的设备可以使用从主机RAM分配的内存对象(clCreateBuffer()函数中的CL_MEM_ALLOC_HOST_PTR& CL_MEM_USE_HOST_PTR标志)。无论如何,内存传输可能不是瓶颈。