我的GPU正在等待什么?
我正在编写一个与我的AMD Radeon HD 7800系列GPU一起使用的OpenCL程序。根据AMD的OpenCL编程指南,这一代GPU具有两个可以异步操作的硬件队列。 5.5.6命令队列 对于Southern Islands及更高版本,设备至少支持两个硬件计算队列。这样一来,应用程序就可以通过两个用于异步提交和可能执行的命令队列来提高小型调度的吞吐量。硬件计算队列按以下顺序选择:第一个队列=偶数OCL命令队列,第二个队列=奇数OCL队列。 为此,我创建了两个单独的OpenCL命令队列,以将数据提供给GPU。大致来说,在主机线程上运行的程序如下所示: static const int kNumQueues = 2; cl_command_queue default_queue; cl_command_queue work_queue[kNumQueues]; static const int N = 256; cl_mem gl_buffers[N]; cl_event finish_events[N]; clEnqueueAcquireGLObjects(default_queue, gl_buffers, N); int queue_idx = 0; for (int i = 0; i < N; ++i) { cl_command_queue queue = work_queue[queue_idx]; cl_mem …