Julia分配函数:指定分布式维度

时间:2017-05-08 22:11:57

标签: julia distributed

我有兴趣在p worker中分发MxN整数数组。有没有办法指定哪个维度分布?特别是,我想保持行数M固定并分布在N列上。在我的情况下,M> N(我有一个术语 - 文档矩阵,其词汇大小为M,文档数为N)。

默认情况下,Julia似乎分布在具有最大尺寸的维度上,这对我的应用程序不起作用(我想分发文档而不是词汇表)。有没有办法控制哪个维度被分配?

1 个答案:

答案 0 :(得分:1)

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可以替换为所需的元素类型。稍加改动(在inner创建中将outerNM切换为pidvec)可以创建按行分布的数组。