什么意思到"最终确定"在朱莉娅?

时间:2016-07-10 13:34:28

标签: gpu julia julia-gpu

我目前正在使用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?)。它引自Julia文档:

  

终结者(x,函数)

     

当没有程序可访问的x引用时,注册要调用的函数f(x)。如果x是位类型,则此函数的行为是不可预测的。

我真的不明白这意味着什么,或者甚至这里的最终确定是否与CUDArt示例中提到的相同。例如,当程序无法访问该参数时,尝试在参数x上调用函数对我来说没有意义 - 这怎么可能呢?因此,我将非常感谢任何帮助澄清:

  1. 这意味着"最终确定"在朱莉娅和
  2. 当我/不想在使用CUDArt导入.ptx模块的上下文中使用它时

2 个答案:

答案 0 :(得分:6)

我不能代表CUDArt,但这里是finalize在Julia中的意思:当垃圾收集器检测到程序无法再访问该对象时,那么将运行终结器,然后收集(释放)该对象。请注意,即使程序不能,垃圾收集器仍然可以访问该对象。

以下是一个例子:

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 :(得分:0)

我无法发表评论,但我想从 docs 添加:

<块引用>

finalizer(f, x)

f 不得导致任务切换,这排除了大多数 I/O 操作,例如 println。使用 @async 宏(将上下文切换推迟到终结器外部)或 ccall 直接调用 C 中的 IO 函数可能有助于调试目的。