0

我有一个大矩阵 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);

这和给每个工人一份内存副本不一样吗?那么工人是否会产生矩阵的本地副本?

4

0 回答 0