何时使用codistributed数组

8视图(30天)
丹尼尔Jalo
丹尼尔Jalo 2013年2月12日
想象我有如下矩阵:
一个=兰特(6400、6400)
现在想象一下,我创建一个分布式数组:(我有4个工人)
dist = codistributor1d ();
dist = codistributor2dbc (2 [2], 3200);
B = codistributed(经销)
我有两种方法分配。每个工人商店3200 x3200矩阵或每个工人存储6400 x1600矩阵。
我的问题是:
  • 我什么时候应该分配一个数组?
  • 我怎么知道哪个函数,codistributor1d或codistributor2dbc,我应该使用每当我想我有一些数组分配之间的工人吗?我知道如何处理两种类型的数组,但是我不知道当一个人比另一个。
如果有人能帮我我很欣赏。

接受的答案

吉尔里斯
吉尔里斯 2013年2月14日
分布的数组是最有用的,当你没有足够的内存来存储在单个机器上整个数组。通过分配块的原始数组的所有工人在池中,您可以执行操作整个数组之前,你甚至不能存储。
我建议你退一步,先处理分布式数组而不是codistributed数组。这允许MATLAB为你选择一个默认的分配方案。
一个=兰德(6400、6400);
matlabpool开放
dA =分布式(A);%让MATLAB选默认的分配方案
%分布数组,哒
R =胆固醇(dA);%一个函数,它适合的例子
%分布式阵列——不需要spmd
与分布式阵列,可以开始,而不必担心使用什么样的分配方案。如果你有兴趣,你可以随时查询分布方案,目前使用的分布式阵列一样:
% dA分布数组创建如上所述
spmd
codistr = getCodistributor (dA)% spmd里面我们可以“视图”哒
% codistributed数组和访问它
%分配方案
结束
一旦代码正常工作与分布式阵列,可以使用codistributed数组进行少量更改特定的分配方案。更改默认分配方案可能会提高性能,但随着马特·J提到,选择最有效的分配方案是依赖问题,将很大程度上取决于您想要调用的操作。

答案(1)

马特·J
马特·J 2013年2月12日
编辑:马特·J 2013年2月12日
你如何把数组将取决于你的部分数组每个并行作业的需要。如果每个并行作业需要的所有行,但不是所有的列,更有意义比1600 x6400 6400 x1600分裂。这样工作所需的所有数据将提供相关的实验室。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!