for

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

Синтаксис

for variable = drange(colonop)
    statement
    ...
    statement
end

Описание

Общий формат

for variable = drange(colonop)
    statement
    ...
    statement
end

colonop выражение формы start:increment:finish или start:finish. Значение по умолчанию шага равняется 1. colonop разделен codistributed.colon в numlabs непрерывные сегменты почти равной длины. Каждый сегмент становится итератором для обычного цикла for на отдельном рабочем.

Самое важное свойство тела цикла состоит в том, что каждая итерация должна быть независима от других итераций. Логически, итерации могут быть сделаны в любом порядке. Никакая связь с другими рабочими не позволена в теле цикла. Функциями, которые выполняют коммуникацию, является gop, gcat, gplus, codistributor, codistributedсбор, и redistribute.

Возможно получить доступ к фрагментам codistributed массивов, которые локальны для каждого рабочего, но не возможно получить доступ к другим фрагментам codistributed массивов.

break оператор может использоваться, чтобы отключить цикл преждевременно.

Примеры

Найдите ранг магических квадратов. Доступ только к локальному фрагменту codistributed массива.

r = zeros(1, 40, codistributor());
for n = drange(1:40)
   r(n) = rank(magic(n));
end
r = gather(r);

Выполните приближение Монте-Карло пи. Каждый рабочий инициализируется к различному состоянию случайных чисел.

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