for (drange)

for-цикл в распределённой области значений

Синтаксис

for variable = 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

См. также

| |

Введенный в R2007b