2016-07-10 26 views
7

Obecnie pracuję z pakietem CUDArt. GitHub documentation zawiera następujący fragment kodu podczas ładowania modułu PTX zawierający niestandardowy CUDA C jądra:Co to znaczy "sfinalizować" w Julii?

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

(komentarz w oryginale)

Próbuję zrozumieć, co dokładnie ten false opcję finalizacji środki i kiedy chciałbym/nie chciałem z niego skorzystać. Natknąłem się na ten post na SO (What is the right way to write a module finalize method in Julia?). cytuje to z dokumentacji Julia jako:

finalizatora (x, funkcja)

przypisać funkcję f (x), która ma zostać wywołana, gdy nie ma odniesienia programowe dostępne dla x. Zachowanie tej funkcji jest nieprzewidywalne, jeśli x jest typu bitowego.

Nie do końca rozumiem, co to oznacza, a nawet czy finalizacja tutaj jest taka sama jak ta, o której mowa w przykładzie CUDArt. Na przykład nie ma sensu próbować wywoływać funkcji na argumentach x, gdy ten argument nie jest dostępny dla programu - w jaki sposób mogłoby to być możliwe? Tak więc byłbym wdzięczny za każdą pomoc w wyjaśnieniu:

  1. Co to znaczy „sfinalizować” w Julia i
  2. Kiedy będzie/nie będzie chciał go używać w kontekście importowania .ptx moduły z CUDArt

Odpowiedz

5

nie mogę mówić za CUDArt, ale tutaj jest to, co oznacza w finalize Julia: kiedy garbage collector wykryje, że programnie może uzyskać dostępu do obiektu, a następnie będzie uruchomić finalizatora, a następnie zebrać (za darmo) obiekt. Pamiętaj, że garbage collector może nadal uzyskać dostęp do obiektu, nawet jeśli program nie może.

Oto przykład:

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 

Jest pożądane, aby zewnętrzne środki (takie jak uchwyty plików lub malloc pamięci ED) są zwalniane, gdy obiekt jest zbierany.

+1

Możesz także ręcznie uruchomić finalizator. z 'sfinalizuj (X)' –