関数の呼び出しがcudaDeviceSynchronize本当に必要になるのはいつですか?
私が CUDA のドキュメントから理解している限り、CUDA カーネルは非同期であるため、cudaDeviceSynchronizeカーネルを起動するたびに呼び出す必要があるようです。cudaDeviceSynchronizeただし、時間測定の前の 1 つを除いて、 の有無にかかわらず同じコード (ニューラル ネットワークのトレーニング) を試しました。同じ結果が得られますが、速度は 7 ~ 12 倍 (行列のサイズによって異なります) であることがわかりました。
cudaDeviceSynchronizeしたがって、問題は、時間測定以外に使用する理由があるかどうかです。
例えば:
を使用して GPU からホストにデータをコピーする前に必要
cudaMemcpyですか?次のような行列乗算を行う場合
C = A * B D = C * F
cudaDeviceSynchronize両方の間に入れるべきですか?
私の実験ではそうではないようです。
なぜ はcudaDeviceSynchronizeプログラムをそんなに遅くするのですか?