推力是同步还是异步的?

5

我刚开始使用Thrust,有个问题不太懂。Thrust是异步还是同步的?

如果我写以下代码,运行时间不是0。但在其他标签中,其他用户报告了结果为0。真相是什么?

clock_t start,end;

start=clock(); 
thrust::sort_by_key(vettore.begin(), vettore.end(), counter.begin()); 

end=clock();

double time=((double)(end-start))/CLOCKS_PER_SEC; 

cout<<"execution time"<<time<<endl;// the result is 0.327

注意:NVIDIA论坛上的相关问题在此处。 - BenC
3个回答

3

即使是在 CUDA 1.0 中,内核启动始终是异步的,因此任何仅导致内核启动的 Thrust 调用都将是异步的。

由于缺乏流支持,任何隐式触发 memcpy 的 Thrust 代码都将是同步的,正如 marina.k 所提到的。


4
举例来说,thrust::reduce() 明确是同步的,因为它会将结果读取回来并通过返回值传递给调用线程。我在最近的博客文章中对这些限制发表了一些评论:http://developer.nvidia.com/content/expressive-algorithmic-programming-thrust - harrism

0

您可以手动将time.h添加到索引器中,方法是前往“首选项”->“C/C++”->“索引器”,并将其放在现有的“要优先索引的文件”之前,如下所示:

time.h, cstdarg, stdarg.h, .....

它将会工作


0

在Windows中,clock()函数的粒度并不像你想象的那么好。而且在Windows XP中,它的粒度高达16毫秒。

与其使用clock()函数,不如使用高分辨率计时器或Cutil库的计时函数(通常更受欢迎)。

关于Windows中高分辨率计时器的讨论: C++高精度时间测量在Windows中

关于使用CUtil库进行计时的讨论: CUDA:CUtil计时器-对经过时间的困惑


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接