私は CUDA By Example を読んでいて、彼らがイベントを導入したときに、cudaEventDestroy
作成した各イベントを呼び出していることがわかりました。
しかし、後のいくつかの例では、このクリーンアップ機能が無視されていることに気付きました。作成したイベントやストリームを破棄するのを忘れた場合の望ましくない副作用はありますか (つまり、割り当てられたメモリを解放するのを忘れた場合のメモリ リークなど)?
私は CUDA By Example を読んでいて、彼らがイベントを導入したときに、cudaEventDestroy
作成した各イベントを呼び出していることがわかりました。
しかし、後のいくつかの例では、このクリーンアップ機能が無視されていることに気付きました。作成したイベントやストリームを破棄するのを忘れた場合の望ましくない副作用はありますか (つまり、割り当てられたメモリを解放するのを忘れた場合のメモリ リークなど)?
終了時にアプリがまだ保持しているリソースは、OS / ドライバーによって自動的に解放されます。そのため、アプリが作成するイベントの数が限られている場合は、それらを手動で解放する必要は厳密にはありません。それでも、意図的にすべてのリソースを解放せずにアプリを終了させることは、真のリークと「意図的な」リークを区別するのが難しくなるため、悪い習慣です。
本のサンプル コードにバグが見つかりました。
CUDA イベントは軽量ですが、リソース リークはリソース リークです。時間の経過とともに、それらが十分にリークされると、それらを作成できなくなります。