Параллельные вычисления в MATLAB с использованием Drange - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть такой код, который я хочу запустить с помощью parpool: result = zeros (J, K)

for k = 1:K
    for j = 1:J
        build(:,1) = old1(:,j,k)
        build(:,2) = old2(:,j,k)
        result(j,k) = call_function(build); %Takes a long time to run
    end
end

Требуется много времени для запуска этого кода, и мне нужно запуститьэто несколько раз для моего моделирования, поэтому я хочу запустить самый внешний цикл (k = 1: K) параллельно в MATLAB.

Из того, что я прочитал, я не могу использовать parfor, так как все функции используют одинаковые переменныеold1 и old2.Я мог бы использовать spmd и распространять свои матрицы old1 и old2.Но я прочитал, что это создает столько же копий переменной, сколько рабочие, и я не хочу, чтобы это произошло.Я мог бы использовать Drange.Но я не уверен, как именно это работает.Мне трудно использовать то, что я читал в ссылках на MATLAB.Любой ресурс и указатели будут очень полезны!

Существуют следующие ограничения: Не следует создавать несколько копий переменных old1, old2.Но я могу распределить его по рабочим, так как каждая итерация не требует других итераций.Распределить приходится только на самый внешний цикл.Для простоты доступа к данным вне этого блока кода.

Спасибо.

1 Ответ

0 голосов
/ 30 сентября 2018
Думаю, можно использовать

old1 и old2.Инициализируйте как константы, используя:

old1 = parallel.pool.Constant(old1); old2 = parallel.pool.Constant(old2);

Вы видели этот пост?https://www.mathworks.com/help/distcomp/improve-parfor-performance.html

...