Matlab中使用大矩阵的并行计算

时间:2016-08-06 11:14:25

标签: matlab matrix matlabpool

我有一个大矩阵M(大小像18000 x 18000)和一个大小为

的数组k
k =[k_1,..,k_{100*50}]

小矩阵C(如18000 x 100)

和迭代器

iIterator = [1,...,100]

我做了几次这样的计算

bestValue = inf
parfor i = iIterator

    for j = 1:50
      thing = computeSomething(C(:,1:i),k(i+j))
      value = evalThing(thing,M);
      if value < bestValue
           bestValue = value;
           best_i_Idx = i;
      end 

end 

现在,如果M很大,我会遇到内存问题,因为它被复制到每个本地工作者。但是M没有改变。

问题:

1)我如何避免M的本地副本?

2)这种算法最好的并行结构是什么?

3)我读到了关于memmapfile的内容。是否有可能将其用于此目的?让我们说,我将M保存到文件

 mValues.dat

然后我可以将每个工作者传递给对象

m=memmapfile('mValues.dat','Format',{'double', [18000 18000],'x'})

但是一旦我通过

访问它
value = evalThing(thing,m.Data.x);

与在内存中给每个工人一份副本一样吗?那么工人是否会生成矩阵的本地副本?

0 个答案:

没有答案