【发布时间】:2015-02-16 23:34:35
【问题描述】:
我反复将一系列内核排入队列:
for 1..100:
for 1..10000:
// Enqueue GPU kernels
Kernel 1 - update each element of array
Kernel 2 - sort array
Kernel 3 - operate on array
end
// run some CPU code
output "Waiting for GPU to finish"
// copy from device to host
cudaMemcpy ... D2H(array)
end
内核 3 的顺序为 O(N^2),因此是迄今为止最慢的。对于内核 2,我直接在设备上使用推力::sort_by_key:
thrust::device_ptr<unsigned int> key(dKey);
thrust::device_ptr<unsigned int> value(dValue);
thrust::sort_by_key(key,key+N,value);
似乎这个对推力的调用是阻塞的,因为 CPU 代码只有在内循环完成后才会执行。我看到这一点是因为如果我删除对sort_by_key 的调用,主机代码(正确地)在内循环完成之前输出“等待”字符串,而如果我运行排序则不会。
有没有办法异步调用thrust::sort_by_key?
【问题讨论】: