Параллельные вычисления с использованием большой матрицы в Matlab
У меня есть большая матрица 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 велико, у меня возникают проблемы с памятью, так как он копируется каждому локальному работнику. Однако М не изменился.
Вопрос:
1) Как я могу избежать локальных копий M?
2) Какая параллельная структура является лучшей для такого алгоритма?
3) Я читаю о memmapfile. Возможно ли использовать его для этой цели? Допустим, я сохраняю M в файл
mValues.dat
Тогда я мог бы передать каждому работнику свой объект
m=memmapfile('mValues.dat','Format',{'double', [18000 18000],'x'})
Но как только я получаю к нему доступ через
value = evalThing(thing,m.Data.x);
разве это не то же самое, что дать каждому работнику копию в памяти? Так рабочий создает локальную копию матрицы?