for (drange)

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

Описание

пример

for loopVar = drange(range); statements; end; выполняется for- итерации цикла параллельно в распределенной области значений.

MATLAB® делит диапазон, указанный range через рабочих в параллельном пуле, с помощью непрерывных сегментов приблизительно равной длины. MATLAB затем выполняет команды тела цикла в statements в a for- цикл по заданной области loopVar на каждом рабочем.

Каждая итерация должна быть независима от других итераций, такова, что итерации могут быть выполнены в любом порядке. Никакая связь с другими рабочими не позволена в теле цикла.

Каждый рабочий может получить доступ к локальным фрагментам codistributed массивов, но не может получить доступ к фрагментам codistributed массивов, которые хранятся на других рабочих. Можно использовать loopVar индексировать локальную часть codistributed массива при следующих условиях:

  • индекс цикла range обеспечивается в форме range = 1:N

  • массив распределяется с помощью 1d по умолчанию схема codistribution

  • массив имеет размер N по измерению распределения

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

Примеры

свернуть все

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

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

В этом примере показано, как выполнить приближение Монте-Карло пи.

spmd
   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);
end
p{1}
ans = 3.1501

В этом примере показано, как попытаться вычислить Числа Фибоначчи. Этот пример не работает, потому что тела циклов зависят. Следующий код производит ошибку:

spmd
   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
end
Error detected on workers 2 3 4 5 6.

Caused by:
    Error using codistributed/subsref (line 40)
    Error using codistributed/subsref (line 40)
    Inside a FOR-DRANGE loop, a subscript can only access the local portion of a codistributed array.

Входные параметры

свернуть все

Имя переменной цикла в виде текста.

Индекс цикла располагается в виде выражения формы start:finish или start:increment:finish. Значением по умолчанию шага является 1.

Тело цикла в виде текста. Серия команд MATLAB, чтобы выполниться в for- цикл.

statements не должен включать функции, которые выполняют коммуникацию, включая следующие функции:

Смотрите также

| |

Представленный в R2007b
Для просмотра документации необходимо авторизоваться на сайте