【发布时间】:2021-04-10 22:53:24
【问题描述】:
我不确定这是否可能以异步方式进行,但我想做的是以下内容。假设我在设备上有以下数组:
d_arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
还假设我有一个大小为3 的主机数组h_arr。最后,假设我有以下指针数组:
p_arr = [&d_arr[0], &d_arr[4], &d_arr[8]]
我想调用一个虚函数
cudaMemcpyAsyncDisjoint(&d_arr[0], &h_arr[0], &p_arr[0], 3)
然后填充数组h_arr,使其变为
h_arr = [0, 4, 8]
我想异步执行此操作,因为我主要关心的是速度,因为我有一个驱动程序方法,它在循环中运行内核,然后在每轮结束时复制回数据。
【问题讨论】:
-
thrust::gather已经这样做了 -
这种操作一般称为gather(推力、MPI等)。通常,您希望先收集到设备内存的另一段,然后将其复制回主机,因为传输到主机的成本很高。默认情况下,当您将主机向量和设备向量放入收集算法时,我不确定 Thust 会做什么。如果这完全可行,您可能需要明确指定执行策略以明确实际收集发生的位置。