我有兴趣在 p 个工作人员之间分配一个 MxN 整数数组。有没有办法指定分配哪个维度?特别是,我想保持行数 M 固定并分布在 N 列上。在我的例子中,M > N(我有一个术语文档矩阵,词汇表大小为 M,文档数量为 N)。
默认情况下,Julia 似乎分布在具有最大尺寸的维度上,这对我的应用程序不起作用(我想分布在文档而不是词汇表上)。有没有办法控制分发哪个维度?
最佳答案
SharedArray
构造函数有一个 pids
可选参数,它将元素映射到进程(参见 documentation )。
因此,可以使用以下代码初始化 MxN 矩阵:
# a helper function which might be useful in other contexts
function balancedfill(v,n,b)
d,r = divrem(n,b)
return v[[repeat(1:r,inner=d+1);repeat(r+1:b,inner=d)]]
end
# N,M = size(mat)
pidvec = repeat(balancedfill(1:nprocs(),N,nprocs()),inner=M)
sharedmat = SharedArray{Float64}((N,M); pids=pidvec)
这将创建一个 Float64 共享数组,在进程之间平衡列。 Float64 可以替换为所需的元素类型。稍作改动(在 pidvec
中将 inner
切换为 outer
并将 N
切换为 M
creation) 可以创建按行分布的数组。
关于Julia 分布函数 : specifying distributed dimension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43858044/