2012-08-01 71 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