我有一个大矩阵M(大小像18000 x 18000)和一个大小为
的数组kk =[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);
与在内存中给每个工人一份副本一样吗?那么工人是否会生成矩阵的本地副本?