【发布时间】:2020-09-08 03:50:23
【问题描述】:
我对如何使用 cub::DeviceReduce::ArgMin() 有一些困惑。 这里我从CUB的文档中复制代码。
#include <cub/cub.cuh>
// Declare, allocate, and initialize device-accessible pointers for input and output
int num_items; // e.g., 7
int *d_in; // e.g., [8, 6, 7, 5, 3, 0, 9], located in GPU
KeyValuePair<int, int> *d_out; // e.g., [{-,-}]
// Determine temporary device storage requirements
void *d_temp_storage = NULL;
size_t temp_storage_bytes = 0;
cub::DeviceReduce::ArgMin(d_temp_storage, temp_storage_bytes, d_in, d_out, num_items);
// Allocate temporary storage
cudaMalloc(&d_temp_storage, temp_storage_bytes);
// Run argmin-reduction
cub::DeviceReduce::ArgMin(d_temp_storage, temp_storage_bytes, d_in, d_out, num_items);
// d_out <-- [{5, 0}]
问题如下:
- 如果d_in是指向某个GPU内存(设备)的指针,如何初始化d_out的指针?
- 如果 ArgMin() 的操作在设备 (GPU) 中完成,如何将结果复制到我的 CPU?
【问题讨论】:
-
只包含函数cub::DeviceReduce::Sum()的用法,它们完全不同。
-
不,他们不是。它们基本相同,只是结果的返回类型是一对,而不是标量