2012-08-01 76 views
0

我有一个关于CUDA调用cudaEventSynchronize的问题。cudaEvent在不同情况下同步行为

AFAIK,它主动轮询事件,从而消耗CPU周期。如果我想让它同步,这样CPU就可以放弃,就像我可以在内核执行时一样,我该怎么做呢?

更具体地,这将是预期的行为下:

  • 使用CUDA_LAUNCH_BLOCKING = 1个环境变量。
  • 使用cudaDeviceScheduleBlockingSync
  • 使用cudaDeviceScheduleYield

我一直在经历着怪异的行为,需要一些帮助来阐明这一点。 Nvidia有关特定技术方面的信息非常不愿意帮助解决这个问题......我想实施细节必须保密。

在此先感谢,

何塞。

回答

1

如果你想cudaEventSynchronize使用阻塞同步比您需要使用
cudaError_t cudaEventCreateWithFlags (cudaEvent_t event, unsigned int flags)

创建您的活动,并通过cudaEventBlockingSync作为标志。

+0

这是一个很好的建议。这是一个范围问题 - CUDA_LAUNCH_BLOCKING影响所有CUDA程序(因此除了调试目的外不应该用于其他任何用途),并且设备标志会影响在上下文中完成的所有同步。指定事件标志会导致该特定事件使用中断进行同步,从而减少CPU开销。 – ArchaeaSoftware 2012-08-02 15:02:34