基于阵列器件的CUDA并行化简

基于阵列器件的CUDA并行化简,cuda,thrust,reduction,Cuda,Thrust,Reduction,我需要执行并行缩减以查找CUDA设备上阵列的最小值或最大值。我找到了一个很好的图书馆,叫做推力。似乎只能对主机内存中的阵列执行并行缩减。我的数据在设备内存中。是否可以减少设备内存中的数据? 我不知道该怎么做。以下是有关推力的文档:。谢谢大家。如果推力或任何其他库没有为您提供这样的服务,您仍然可以自己创建内核 马克·哈里斯(Mark Harris)有一本关于并行缩减及其在cuda上的优化的优秀教程。 按照他的幻灯片,实现和修改它以满足您的需要并不难。如果推力或任何其他库没有为您提供这样的服务,您仍

我需要执行并行缩减以查找CUDA设备上阵列的最小值或最大值。我找到了一个很好的图书馆,叫做推力。似乎只能对主机内存中的阵列执行并行缩减。我的数据在设备内存中。是否可以减少设备内存中的数据?
我不知道该怎么做。以下是有关推力的文档:。谢谢大家。

如果推力或任何其他库没有为您提供这样的服务,您仍然可以自己创建内核

马克·哈里斯(Mark Harris)有一本关于并行缩减及其在cuda上的优化的优秀教程。
按照他的幻灯片,实现和修改它以满足您的需要并不难。

如果推力或任何其他库没有为您提供这样的服务,您仍然可以自己创建内核

马克·哈里斯(Mark Harris)有一本关于并行缩减及其在cuda上的优化的优秀教程。
按照他的幻灯片,实现和修改它以满足您的需要并不难。

您可以减少已经在设备内存中的阵列的推力。您只需将设备指针包装在
推力::设备指针
容器中,然后调用其中一个简化过程,正如您链接到的wiki中所示:

// assume this is a valid device allocation holding N words of data
int * dmem;

// Wrap raw device pointer 
thrust::device_ptr<int> dptr(dmem);

// use max_element for reduction
thrust::device_ptr<int> dresptr = thrust::max_element(dptr, dptr+N);

// retrieve result from device (if required)
int max_value = dresptr[0];

您可以减少已经在设备内存中的阵列的推力。您只需将设备指针包装在
推力::设备指针
容器中,然后调用其中一个简化过程,正如您链接到的wiki中所示:

// assume this is a valid device allocation holding N words of data
int * dmem;

// Wrap raw device pointer 
thrust::device_ptr<int> dptr(dmem);

// use max_element for reduction
thrust::device_ptr<int> dresptr = thrust::max_element(dptr, dptr+N);

// retrieve result from device (if required)
int max_value = dresptr[0];