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