Julia:将大对象发送给worker时序列化错误

时间:2016-07-28 13:51:56

标签: parallel-processing julia

我正在尝试将数据从主进程发送到工作进程。对于相对较小的数据,我能够做得很好。但是,一旦它们超过一定的大小,我就会遇到序列化错误。

有没有办法解决这个问题,或者我只是需要将我的对象分解成更小的部分,然后将它们重新组装在工人身上?如果是这样,有没有一种很好的方法可以提前确定我可以发送的最大尺寸(我想这可能取决于系统变量)?下面的代码显示了有效的传输和失败的传输。这些尺寸可能需要修改以在其他系统上重现。

function sendto(p::Int; args...)
    for (nm, val) in args
        @spawnat(p, eval(Main, Expr(:(=), nm, val)))
    end
end

X1 = rand(10^5, 10^3);
X2 = rand(10^6, 10^3);

sendto(2, X1 = X1) ## works fine

sendto(2, X2 = X2)
ERROR: write: invalid argument (EINVAL)
 in yieldto at /Applications/Julia-0.4.6.app/Contents/Resources/julia/lib/julia/sys.dylib
 in wait at /Applications/Julia-0.4.6.app/Contents/Resources/julia/lib/julia/sys.dylib
 in stream_wait at /Applications/Julia-0.4.6.app/Contents/Resources/julia/lib/julia/sys.dylib
 in uv_write at stream.jl:962
 in buffer_or_write at stream.jl:982
 in write at stream.jl:1011
 in serialize_array_data at serialize.jl:164
 in serialize at serialize.jl:181
 in serialize at serialize.jl:127
 in serialize at serialize.jl:310
 in serialize_any at serialize.jl:422
 in send_msg_ at multi.jl:222
 in remotecall at multi.jl:726
 in sendto at none:3

注意:我有足够的系统内存,即使对于较大对象的两个副本,所以问题不在于此。

1 个答案:

答案 0 :(得分:0)

这个问题现在似乎已经通过Julia 0.5解决了。