Thrust库处理GPU数据

adagio_chen 2014-07-26 07:51:51
加精
Thrust库的手册上给出了这样一个归并的例子



注意,此处exclusive_scan函数的输入是Host端的指针。

那么,当我们要对device端数据进行归并,该怎么办呢?手册上没有给出例子。经过测试,直接输入device端的指针,程序运行错误。

查阅API,http://thrust.github.io/doc/group__prefixsums.html#gae5d3cdb73f9532b0a9692624988f3ab1

我们发现exclusive_scan的一个重载原型为:


其中,第一个参数设置为 thrust::host 时,函数处理 host 端数据;设置为 thrust::device 时,函数处理 device 端数据。


#include <thrust/scan.h>
#include <thrust/execution_policy.h>

__global__
void Kernel(int* dv)
{
int i = threadIdx.x;
dv[i] = i;
}

int main()
{
int* dv;
cudaMalloc((void**)&dv, 10*sizeof(int));
Kernel<<<1,10>>>(dv);

thrust::exclusive_scan(thrust::device, dv, dv+10, dv);

int* hv = new int[10];
cudaMemcpy(hv, dv, 10*sizeof(int), cudaMemcpyDeviceToHost);
for (int i=0; i<10; ++i)
{
printf("%d\n",hv[i]);
}

int sum = thrust::reduce(thrust::device, dv, dv+10, 0, thrust::plus<int>());
printf("%d\n", sum);

return 0;
}



运行结果:
0
0
1
3
6
10
15
21
28
36
120


...全文
1483 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
AmelieLiu 2014-10-31
  • 打赏
  • 举报
回复
去掉thrust::host就可以了。。。thrust::exclusive_scan(tmp, tmp+10, tmp2);
AmelieLiu 2014-10-20
  • 打赏
  • 举报
回复
楼主你好,我在用 thrust::exclusive_scan(thrust::host, tmp, tmp+10, tmp2); 的时候出现了错误: /usr/local/cuda/bin/..//include/thrust/system/cuda/detail/b40c/kernel_utils.h(232):error:expected a "," or ">", 不知道什么原因。。。
wojuedehenshiyumen 2014-08-07
  • 打赏
  • 举报
回复
引用 10 楼 seinedeparis 的回复:
[quote=引用 9 楼 wojuedehenshiyumen 的回复:] 我也遇到这样的问题,Thrust实现了host和device两个版本,可是调用device版本时,出现上面的错误,上面结果是直接运行楼主的代码,楼主能解释下吗?急~~~~
你用的是什么显卡?[/quote] 楼主,跟运行系统有关吗?请问得到正确结果的操作系统是什么?
YCMyTot 2014-08-04
  • 打赏
  • 举报
回复
引用 15 楼 seinedeparis 的回复:
[quote=引用 14 楼 u014693181 的回复:] 顺便问一下,CUDA SDK 6.0 编译 含有 thrust 函数库的时候,是不是要加 .lib链接呢?
不需要的。包含相应的头文件即可。[/quote] 可否详细的说明一下?!谢了!
adagio_chen 2014-08-03
  • 打赏
  • 举报
回复
引用 14 楼 u014693181 的回复:
顺便问一下,CUDA SDK 6.0 编译 含有 thrust 函数库的时候,是不是要加 .lib链接呢?
不需要的。包含相应的头文件即可。
YCMyTot 2014-08-01
  • 打赏
  • 举报
回复
顺便问一下,CUDA SDK 6.0 编译 含有 thrust 函数库的时候,是不是要加 .lib链接呢?
YCMyTot 2014-08-01
  • 打赏
  • 举报
回复
学习了!!!
wojuedehenshiyumen 2014-07-28
  • 打赏
  • 举报
回复
如果不能用Thurst处理GPU数据,难道真的要把数据来回传吗?
wojuedehenshiyumen 2014-07-28
  • 打赏
  • 举报
回复
Quadro 600, thrust库还有显卡要求吗?我这边最好的显卡也就是Quadro 5000
nettman 2014-07-27
  • 打赏
  • 举报
回复
hugh_z 2014-07-27
  • 打赏
  • 举报
回复
learning
adagio_chen 2014-07-27
  • 打赏
  • 举报
回复
引用 9 楼 wojuedehenshiyumen 的回复:
我也遇到这样的问题,Thrust实现了host和device两个版本,可是调用device版本时,出现上面的错误,上面结果是直接运行楼主的代码,楼主能解释下吗?急~~~~
你用的是什么显卡?
wojuedehenshiyumen 2014-07-27
  • 打赏
  • 举报
回复

我也遇到这样的问题,Thrust实现了host和device两个版本,可是调用device版本时,出现上面的错误,上面结果是直接运行楼主的代码,楼主能解释下吗?急~~~~
ccch99 2014-07-27
  • 打赏
  • 举报
回复
不懂觉厉....
树愿许 2014-07-26
  • 打赏
  • 举报
回复
恩,楼上都说了
wuyonqinwyq 2014-07-26
  • 打赏
  • 举报
回复
高手如云啊!
hugh_z 2014-07-26
  • 打赏
  • 举报
回复
learning
cattpon 2014-07-26
  • 打赏
  • 举报
回复
好像很牛的样子~
watsonsong 2014-07-26
  • 打赏
  • 举报
回复
学习了, 受益良多

579

社区成员

发帖
与我相关
我的任务
社区描述
CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。
社区管理员
  • CUDA编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧