Julia分发了jl问题



我想使用pmap通过在Julia集群内共享内存的同一机器中的多个处理器上运行的迭代器来并行化函数,并想了解一些细节。

  1. 在上述场景中使用SharedArray或DArray是否更有效?当使用具有共享内存的单机时,DArray何时更高效?

  2. @应用于函数和变量(包括数组、字典和数据帧(的任何地方都使其可被所有处理器读取。这是通过复制对象还是使其可见?

  3. 这些"全局"对象在所有级别的功能中都可用。全局对象的计算速度较慢,是否应该将这些对象作为参数传递给函数,因为它们是可变的,因此不进行复制?

  4. 为了能够读写,需要将SharedArray用于浮点或整数类型。SharedArray是否共享而不复制?

  5. 当使用@everywhere或使用SharedArray时,@views、transpose和copy的工作方式与正常工作方式相同吗?

  6. sdata(S::SharedArray(是复制SharedArray还是仅使其可用于读写?

  7. 需要对代码进行哪些更改才能在具有多个CPU和GPU的单机上运行,这些CPU和GPU都有一个共享内存(如M1处理器(?

谢谢你,

  1. SharedArray只是进程之间共享的内存,既没有通信,也没有内存成本。分布式阵列使用进程间通信。但是,您可能会遇到这样的场景,即每个进程几乎只与DArray的每个自己的部分一起工作。

  2. Julia集群中的每个进程都有自己的内存。因此@everywhere通常进行复制。这也意味着,当加载未编译/未编译的模块时,可能会出现一些编译竞争。

  3. 是的,它们应该作为论据通过。请参阅Julia表演技巧:https://docs.julialang.org/en/v1/manual/performance-tips/

  4. 参见第(1(点-SharedArray中不发生复制

  5. 这里你需要一个单独的SO问题,因为我似乎不清楚

  6. sdata返回支持SharedArray的实际Array对象,因此不会复制

  7. 在这里,你需要一个单独的SO问题和一个特定的简单用例来讨论

最新更新