2016-07-10 4 views
7

私は現在CUDArtパッケージを使用しています。カスタムCUDA Cカーネルを含むPTXモジュールをロードするときにGitHubのdocumentationは、次のコードスニペットが含まれていますジュリアで「ファイナライズ」するのはどういう意味ですか?

md = CuModule("mycudamodule.ptx", false) # false means it will not be automatically finalized 

(元にコメント)

私は手段を最終決定のための、まさにこのfalseオプションを理解しようとしています私はそれを使用したくないと思っていました。私はSO(What is the right way to write a module finalize method in Julia?)でこの投稿に出会いました。 xに何のプログラムがアクセス可能な参照が存在しないときに呼び出される関数f(x)を登録

ファイナライザ(X、機能)

:それはとジュリアのドキュメントから引用しています。 xがビット型の場合、この関数の動作は予測できません。

これが何を意味しているのか、ここでのファイナライズがCUDArtの例で言及されているものと同じかどうかはわかりません。例えば、引数で関数を呼び出そうとすると意味がありませんxその引数がプログラムにアクセスできない場合 - これはどのように可能なのでしょうか?したがって、私は明確に任意の助けをいただければ幸いです。

  1. を、それはジュリアに「確定」とすることを意味する私は/ CUDArt
  2. でモジュールを.ptx輸入のコンテキストでそれを使用したくないでしょう

答えて

5

私はCUDArtのために話すが、ここでfinalizeはジュリアに何を意味するのかであることができません:ガベージコレクタがプログラムは、もはやオブジェクトにアクセスすることができていないことを検出するとき、それは(ファイナライザを実行し、収集します自由)オブジェクト。ガベージコレクタは、プログラムではできないものの、オブジェクトにアクセスすることができることに注意してください。ここ

は一例であり:

julia> type X 
      a 
     end 
julia> j = X(1) # create new X(1) object, accessible as j 
julia> finalizer(j, println) # print the object when it's finalized 
julia> gc()  # suggest garbage collection; nothing happens 
julia> j = 0  # now the original object is no longer accessible by the program 
julia> gc()  # suggest carbage collection 
X(1)    # object was collected... and finalizer was run 

オブジェクトが収集されている場合(例えばファイルハンドルまたはmalloc EDメモリなどの)外部リソースが解放されるように、これは有用です。

+1

ファイナライザを手動で実行することもできます。 'finalize(X)'を使って –

関連する問題