Julia 分布函数 : specifying distributed dimension

标签 julia distributed

我有兴趣在 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/

相关文章:

vector - Julia - 相当于 R 的 rep() 与 times 参数

julia - julia数组中的三点(...)有什么作用?他们为什么更改类型签名?

Julia:如何列出使用 `installkernel` 安装的内核?

python - Julia:将 Dict 项作为参数传递给函数

distributed - 在 Apache Kafka 中,为什么消费者实例不能多于分区?

api - 如何保护私有(private) REST API

java - Spark 还是传统的守护进程来处理流更新?

mysql - 为什么paxos在mysql group replication中跳转prepare阶段?

argument-passing - 将附加参数传递给内置函数

java - Redis 为什么需要分布式锁