【问题标题】:Can Shared Arrays handle concurrent writes safely in Julia?共享数组可以在 Julia 中安全地处理并发写入吗?
【发布时间】:2016-09-07 02:20:28
【问题描述】:

所以我尝试在 Julia 中优化数组操作,但注意到我的矩阵偶尔会出现相当大的错误。我还注意到在 Julia 中存在同时写入 SharedArray 的相同索引的可能性。我想知道朱莉娅是否可以安全地处理它。如果没有,我怎么能处理它?

这是我的问题的一个基本示例

for a list of arbitrary x,y indexes in array J
    j[x,y] += some_value
end

Julia 能否处理这种情况,或者像 C 一样,是否存在覆盖数据的可能性。他们在 Julia 中的原子操作是为了弥补这一点吗?

【问题讨论】:

    标签: concurrency parallel-processing julia shared-memory


    【解决方案1】:

    共享数组故意没有锁定,因为锁定可能很昂贵。最简单的方法是将不重叠的工作分配给不同的进程。但是,您可以搜索一下是否有人编写了锁定库,或者自己尝试一下:https://en.wikipedia.org/wiki/Mutual_exclusion

    【讨论】:

    • 显然 Julia 确实支持锁定。它是基础包的一部分:stackoverflow.com/questions/33778907/how-to-use-lock-in-julia
    • 确实如此,但请记住,该解决方案旨在适用于分布在多台计算机上的工作。如果您希望数组的每个元素都有一个锁,我怀疑您会对通用解决方案的开销数量感到不满,并且会想要针对 SharedArrays 进行优化的东西。
    • 鉴于此信息,您会建议什么?我想如果我等到 Julia 0.5 发布,我们可以添加对 PThread 的支持并使用 Atomics,除非您有更优雅的解决方案?理想情况下,如果代码可以在分布式系统上运行就好了,但不是必须的。
    • 好吧,首先,随意尝试内置锁定;如果您对表演感到满意,那就太好了。如果没有,我会在我链接到的页面上选择其中一种算法(Szymanski?)并实现它。我不能肯定地说,因为我没有尝试过,但如果它有超过 50 行代码,我会感到惊讶......而且你会创建一个可能会被很多人重视的包。
    猜你喜欢
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2011-04-12
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多