【发布时间】:2016-11-07 01:01:21
【问题描述】:
我是 CUDA 的新手。我只是尝试使用 Thrust 对数组进行排序。
clock_t start_time = clock();
thrust::host_vector<int> h_vec(10);
thrust::generate(h_vec.begin(), h_vec.end(), rand);
thrust::device_vector<int> d_vec = h_vec;
thrust::sort(d_vec.begin(), d_vec.end());
//thrust::sort(h_vec.begin(), h_vec.end());
clock_t stop_time = clock();
printf("%f\n", (double)(stop_time - start_time) / CLOCKS_PER_SEC);
排序d_vec 花费的时间是7.4s,排序h_vec 花费的时间是0.4s
我假设它在设备内存上并行计算,所以它不应该更快吗?
【问题讨论】:
-
您很可能正在测量context creation time。此外,您不能期望 small 向量在高度并行的架构上排序更快。尝试使用矢量大小 >> 10000。
-
是的,你是对的,这些时间是在第一次执行时。此外,我尝试了 50k 点,我在主机和设备上的时间都是 0.12 秒。当大小接近 100000 时差异变大。我可以假设使用 h_vec 进行排序在 CPU 上吗?
-
是的,
h_vec上的排序是在主机上完成的。也许您应该阅读thrust quick start guide,其中讨论了推力算法的调度。 -
@havogt 如果您想提供答案,我会投票赞成。