主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

for (drange)

for 循环分布范围

说明

for loopVar = drange(range); statements; end; 在分布式范围内并行执行 for 循环迭代。

MATLAB® 使用长度大致相等的连续段在并行池中的工作单元上对 range 指定的范围进行分区。然后,MATLAB 在每个工作单元上对 statements 指定的范围进行 for 循环,并执行 loopVar 中的循环体命令。

每次迭代必须独立于其他迭代,以便迭代可以按任何顺序执行。循环体内不允许与其他工作单元进行通信。

每个工作单元可以访问共存分布式数组的本地部分,但不能访问存储在其他工作单元上的共存分布式数组的部分。您可以在以下条件下使用 loopVar 来索引共存分布式数组的本地部分:

  • 循环索引 rangerange = 1:N 的形式提供

  • 该数组使用默认的 1d 共分布方案进行分布

  • 该数组沿分布维度的大小为 N

您可以使用 break 语句来终止循环执行。

示例

示例

全部折叠

此示例显示如何找到幻方矩阵的秩。仅访问共存分布式数组的本地部分。

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

此示例说明如何对 pi 进行蒙特卡罗近似。

spmd
   m = 10000;
   for p = drange(1:spmdSize)
      z = rand(m,1) + i*rand(m,1);
      c = sum(abs(z) < 1); 
   end
   k = spmdPlus(c)
   p = 4*k/(m*spmdSize);
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:finishstart:increment:finish 形式的表达式。增量的默认值是 1

循环体,指定为文本。在 for 循环中执行的一系列 MATLAB 命令。

statements 不得包含执行通信的函数,包括以下函数:

版本历史记录

在 R2007b 中推出

另请参阅

| |