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
4

3 回答 3

3

内核启动一直是异步的——即使在 CUDA 1.0 中——所以任何只导致内核启动的 Thrust 调用都是异步的。

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

于 2012-06-21T03:04:37.380 回答
0

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

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

Windows中高分辨率定时器的讨论:Windows中的 C++高精度时间测量

关于 CUtil 库用于计时的讨论: CUDA: CUtil timer - 对经过时间的混淆

于 2012-09-12T08:15:09.120 回答
0

您可以手动将 time.h 添加到索引器,转到 Preferences -> C/C++ -> Indexer 并将其放在现有的“要预先编制索引的文件”之前,如下所示:

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

它会起作用的

于 2013-04-23T03:20:01.723 回答