0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

JuliaのCUDAにおけるメモリ解放について

Posted at

GPU上の配列Aについてメモリ解放を行おうと思い、検索をしてみると、例えば次のような検索結果が返ってきます。

A = nothing

ただ、以前これを行ったところ、あまり芳しくない結果でした(メモリが全然減らない)。

もう少し調べてみると、こんなコマンドもありました。

CUDA.unsafe_free!(A)

こちらは確かに即座にメモリが解放されてくれました。

違いはなぁに?

ということで、またもやPerplexityくんに聞いてみました。

質問

JuliaのCUDAにおいて、GPUの配列をAとしたときの、A=nothingとCUDA.unsafe_free!(A)の違いを教えてください。

回答

JuliaのCUDAにおいて、A = nothingCUDA.unsafe_free!(A)は異なる動作をします。

A = nothing

A = nothingを実行すると:

  1. 変数AへのJuliaレベルの参照が削除されます[1]。
  2. ガベージコレクタが後でメモリを解放する可能性がありますが、即座には解放されません。
  3. GPUメモリは直ちには解放されません。

この方法は安全ですが、GPUメモリの即時解放は保証されません。

CUDA.unsafe_free!(A)

CUDA.unsafe_free!(A)を実行すると:

  1. GPUメモリが即座に解放されます[1]。
  2. 変数Aは無効になりますが、Juliaレベルの参照は残ります。
  3. 解放後にAを使用すると予期せぬ動作やクラッシュを引き起こす可能性があります。

この方法は即座にGPUメモリを解放しますが、安全性に注意が必要です。

使い分け

  • A = nothing: 通常のケースで安全に使用できます。メモリ管理をJuliaに任せます。

  • CUDA.unsafe_free!(A):

    • 大量のGPUメモリを使用する場合
    • メモリ使用を厳密に制御したい場合
    • パフォーマンスが重要な場合

CUDA.unsafe_free!(A)使用後は、変数Aを再利用しないよう注意が必要です。

安全性を重視する場合はA = nothingを、即時のメモリ解放が必要な場合はCUDA.unsafe_free!(A)を使用するのが適切です。

Citations:
[1] https://qiita.com/Shoichiro-Tsutsui/items/b2ff07f62d1ca12122bc
[2] https://qiita.com/it_tsumugi/items/e319a9c443f5238d4a8c
[3] https://dosparaplus.com/library/details/001027.html
[4] https://www.hpc.co.jp/tech-blog/2023/09/13/summary-how-to-execute-cuda-app/
[5] https://www.macnica.co.jp/business/semiconductor/articles/nvidia/136973/
[6] https://developer.nvidia.com/ja-jp/blog/cuda-toolkit-12-0-released-for-general-availability/

最後に

基本的にはnothingで十分な働きをしてくれるものの、莫大なメモリを使う予定の場合には、丁寧にunsafe_free!のほうが効能が高そうですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?