Cuda 推力是同步的还是异步的?

Cuda 推力是同步的还是异步的?,cuda,thrust,Cuda,Thrust,我对使用推力还不熟悉,有一件事我不明白。推力是异步的还是同步的 如果我编写以下代码,所花费的时间不是0。但是在其他标记中,其他用户报告0的结果。真相是什么 时钟开始、结束; 开始=时钟(); 推力::按键排序(vettore.begin(),vettore.end(),counter.begin()); 结束=时钟(); 双倍时间=((双倍)(结束-开始))/时钟每秒; cout内核启动一直是异步的——即使在CUDA1.0中也是如此——因此任何只导致内核启动的推力调用都是异步的 由于缺少流支持,

我对使用推力还不熟悉,有一件事我不明白。推力是异步的还是同步的

如果我编写以下代码,所花费的时间不是
0
。但是在其他标记中,其他用户报告
0
的结果。真相是什么

时钟开始、结束;
开始=时钟();
推力::按键排序(vettore.begin(),vettore.end(),counter.begin());
结束=时钟();
双倍时间=((双倍)(结束-开始))/时钟每秒;

cout内核启动一直是异步的——即使在CUDA1.0中也是如此——因此任何只导致内核启动的推力调用都是异步的

由于缺少流支持,任何隐式触发memcpy的推力代码都是同步的,正如marina.k所暗示的那样。

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

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

关于Windows中高分辨率计时器的讨论:

关于CUtil库用于计时的讨论:

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

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

它将起作用

例如,推力::reduce()肯定是同步的,因为它读回结果并通过返回值将其返回给调用线程。我在最近的博客文章《关于Puto:注:英伟达论坛》相关问题上对这些限制做了一些评论。