Параллельные вычисления с использованием большой матрицы в 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);

разве это не то же самое, что дать каждому работнику копию в памяти? Так рабочий создает локальную копию матрицы?

0 ответов

Другие вопросы по тегам