我在cuda上運行一個迭代程序,運行到收斂。正如在SO帖子中所說的(Are cuda kernel calls synchronous or asynchronous),從CPU的角度來看,cuda內核是異步的。cuda:需要同步讀取設備內存變量
在我的程序中,收斂的內核檢查之一,並返回布爾值到主機讀取。我想知道,是否需要做
cudaDeviceSynchronize()
在讀取布爾值之前?
我在cuda上運行一個迭代程序,運行到收斂。正如在SO帖子中所說的(Are cuda kernel calls synchronous or asynchronous),從CPU的角度來看,cuda內核是異步的。cuda:需要同步讀取設備內存變量
在我的程序中,收斂的內核檢查之一,並返回布爾值到主機讀取。我想知道,是否需要做
cudaDeviceSynchronize()
在讀取布爾值之前?
這取決於您如何將布爾值返回給CPU。 你使用的是cudaMemcpy嗎? 如果是,那麼你不必使用cudaDeviceSynchronize(),因爲cudaMemcpy會阻塞,直到內核完成執行,然後將數據從GPU複製到CPU。
是的,我正在使用這個。謝謝。 – user1118148 2012-01-30 17:12:14
在內核執行後,在讀取布爾值之前,需要同步,因此在執行內核後可能會立即將控制權返回給主機。並且必須寫入該值的線程可能還沒有按時運行。 – Yappie 2012-01-30 17:13:52