我有一个大矩阵 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);
这和给每个工人一份内存副本不一样吗?那么工人是否会产生矩阵的本地副本?