主要内容

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

labBarrier

(不推荐)同步 spmd 代码块中的工作单元程序

    不推荐使用 labBarrier。请改用 spmdBarrier。有关详细信息,请参阅版本历史记录

    说明

    labBarrier 停止当前 spmd 代码块或通信作业中的所有工作单元执行代码,直到每个工作单元都调用 labBarrier

    提示

    当您使用 parforparfeval 卸载计算时,每个计算一次仅由一个工作单元运行。这些工作单元都是独立的,彼此之间不通信。如果对这些工作单元使用 labBarrier,该函数无效。

    当您需要同步工作单元时使用 labBarrier,例如当工作单元使用文件句柄等共享资源时。

    如果 numlabs 等于 1,则执行立即继续。在 numlabs 代码块或通信作业之外,1 等于 spmd

    示例

    示例

    全部折叠

    此示例显示如何使用 labBarrier 同步 spmd 代码块中的工作单元。

    创建一个有 4 个工作单元的并行池。默认情况下,所有进程支持的池都支持 spmd

    parpool(4);

    当您在创建并行池后执行 spmd 代码块时,默认情况下,池中所有可用的工作单元都将运行 spmd 代码块内的代码。

    创建一个 spmd 代码块,并在每个工作单元上运行 pause 一段随机的时间,以仿真一些计算成本高昂的工作。使用 tictoc 来计时每个工作单元的执行。

    spmd
        tic
        pause(5*rand);
        toc
    end
    Worker 2: 
      Elapsed time is 0.702969 seconds.
    Worker 3: 
      Elapsed time is 1.807292 seconds.
    Worker 1: 
      Elapsed time is 4.651690 seconds.
    Worker 4: 
      Elapsed time is 4.694443 seconds.

    为了在每个工作单元运行 pause 之后同步工作单元,使用 labBarrier。在下面的代码中,所有工作单元都等待最慢的工作单元完成其计算。现在,每个工作单元所花的时间都是相同的,除了轻微的数值噪声。

    spmd
        tic
        pause(5*rand);
        labBarrier;
        toc
    end
    Lab 1: 
      Elapsed time is 4.758529 seconds.
    Lab 2: 
      Elapsed time is 4.758529 seconds.
    Lab 3: 
      Elapsed time is 4.743785 seconds.
    Lab 4: 
      Elapsed time is 4.743739 seconds.

    版本历史记录

    在 R2006a 之前推出

    全部折叠

    另请参阅