for
-цикл в распределённой области значений
forvariable
= drange(colonop
) statement ... statement end
Общий формат:
for variable = drange(colonop) statement ... statement end
The colonop
является выражением формы start:increment:finish
или start:finish
. Шаг значения по умолчанию равен 1. The colonop
разделяется на codistributed.colon
в numlabs
смежные сегменты почти равной длины. Каждый сегмент становится итератором для обычного цикла for для отдельного работника.
Наиболее важным свойством тела цикла является то, что каждая итерация должна быть независимой от других итераций. Логически итерации могут быть выполнены в любом порядке. В корпусе цикла не разрешена связь с другими работниками. Функции, которые выполняют коммуникацию, gop
, gcat
, gplus
, codistributor
, codistributed
, gather
, и redistribute
.
Возможно получить доступ к фрагментам распределенных по коду массивов, которые являются локальными для каждого работника, но невозможно получить доступ к другим фрагментам распределенных по коду массивов.
break
оператор может использоваться для преждевременного завершения цикла.
Найдите ранг магических квадратов. Доступ только к локальному фрагменту кодируемого массива.
r = zeros(1, 40, codistributor()); for n = drange(1:40) r(n) = rank(magic(n)); end r = gather(r);
Выполните приближение Монте-Карло из pi. Каждый рабочий процесс инициализируется в другое состояние случайных чисел.
m = 10000; for p = drange(1:numlabs) z = rand(m,1) + i*rand(m,1); c = sum(abs(z) < 1) end k = gplus(c) p = 4*k/(m*numlabs);
Попытка вычислить числа Фибоначчи. Это не сработает, потому что тела цикла зависимы.
f = zeros(1, 50, codistributor()); f(1) = 1; f(2) = 2; for n = drange(3:50) f(n) = f(n-1) + f(n-2) end