2012-01-30 22 views
1

私は、収束するまで実行される反復プログラムをcudaで実行しています。このSO post(Are cuda kernel calls synchronous or asynchronous)で述べたように、CPUの観点からは、cudaカーネルは非同期です。cuda:デバイスのメモリ変数を読み取るための同期の必要性

私のプログラムでは、カーネルの1人がコンバージェンスをチェックし、読み込むホストにブール値を返します。私はブール値を読む前に

cudaDeviceSynchronize() 

を行う必要があるかどうか、知りたいと思いましたか?

+0

カーネルの実行後にブーリアン値を読み取る前に、同期が必要なため、カーネルが実行された直後に制御がホストに返される可能性があります。値を書き込まなければならないスレッドは、その時点までにはまだ実行されていないかもしれません。 – Yappie

答えて

5

どのようにブール値をCPUに返すかによって異なります。 あなたはcudaMemcpyを使用していますか? もしそうなら、cudaMemcpyはカーネルが実行を終了してGPUからCPUにデータをコピーするまでブロックされるので、cudaDeviceSynchronize()を使う必要はありません。

+0

はい、私はこれを使用しています。ありがとう。 – user1118148

関連する問題