我刚开始使用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
答案 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, .....
它会起作用