我有一个CUDA程序,它使用thrust :: reduce来并行化和:例如,
thrust::device_ptr<double> tmp(aux);
double my_sum = thrust::reduce(tmp, tmp + G);
其中double* aux
指向设备上的G
个连续双打。我需要将整个并行化程序的运行时间与没有并行计算的版本进行比较。有没有办法只使用设备上的单个线程运行thrust::reduce
?全局转换将是最方便的选择。
答案 0 :(得分:6)
您应该能够通过使用串行执行策略在内核中调用thrust::reduce
,然后使用单个线程启动该内核来实现此目的。类似的东西:
__global__ void serial_reduce(double *result, double *aux, int G)
{
*result = thrust::reduce(thrust::seq, aux, aux+G);
}
double *result;
cudaMallocManaged(&result, sizeof(double));
serial_reduce<<<1,1>>>(result, aux, G);
cudaDeviceSynchronize();
[注意事项用浏览器编写,完全未经测试,使用风险自负]