2012-01-30 49 views
1

我在cuda上運行一個迭代程序,運行到收斂。正如在SO帖子中所說的(Are cuda kernel calls synchronous or asynchronous),從CPU的角度來看,cuda內核是異步的。cuda:需要同步讀取設備內存變量

在我的程序中,收斂的內核檢查之一,並返回布爾值到主機讀取。我想知道,是否需要做

cudaDeviceSynchronize() 

在讀取布爾值之前?

+0

在內核執行後,在讀取布爾值之前,需要同步,因此在執行內核後可能會立即將控制權返回給主機。並且必須寫入該值的線程可能還沒有按時運行。 – Yappie 2012-01-30 17:13:52

回答

5

這取決於您如何將布爾值返回給CPU。 你使用的是cudaMemcpy嗎? 如果是,那麼你不必使用cudaDeviceSynchronize(),因爲cudaMemcpy會阻塞,直到內核完成執行,然後將數據從GPU複製到CPU。

+0

是的,我正在使用這個。謝謝。 – user1118148 2012-01-30 17:12:14