for
- цикл в распределенной области значений
forvariable
= 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