Thrust是同步还是异步?

时间:2012-06-20 09:39:06

标签: cuda thrust

我刚开始使用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

3 个答案:

答案 0 :(得分:2)

内核启动一直是异步的 - 即使在CUDA 1.0中 - 因此任何仅在内核启动时产生的Thrust调用都将是异步的。

任何由于缺乏流支持而隐式触发memcpy的Thrust代码将是同步的,正如marina.k所暗示的那样。

答案 1 :(得分:0)

clock()函数的粒度不如您在Windows中所认为的那样好。在Windows XP中,它的粒度高达16毫秒。

使用高分辨率计时器或Cutil库的计时功能(通常是首选),而不是使用clock()。

讨论Windows中的高分辨率计时器: C++ high precision time measurement in Windows

讨论CUtil库用于计时的用法: CUDA: CUtil timer - confusion on elapsed time

答案 2 :(得分:0)

你可以手动将time.h添加到索引器,转到Preferences - &gt; C / C ++ - &gt;索引器并将其放在现有的“要预先编入索引的文件”的前面,如下所示:

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

它会起作用