Main Content

Convertfor-Loops Intoparfor-Loops

In some cases, you must modify the code to convertfor-loops toparfor-loops. This example shows how to diagnose and fixparfor-loop problems using a simple nestedfor-loop. Run this code in MATLAB®and examine the results.

forx = 0:0.1:1fory = 2:10 A(y) = A(y-1) + y;endend

To speed up the code, try to convert thefor-loops toparfor-loops. Observe that this code produces errors.

parforx = 0:0.1:1parfory = 2:10 A(y) = A(y-1) + y;endend

In this case you cannot simply convert thefor-loops toparfor-loops without modification. To make this work, you must change the code in several places. To diagnose the problems, look for Code Analyzer messages in the MATLAB Editor.

This code shows common problems when you try to convertfor-loops toparfor-loops.

To solve these problems, you must modify the code to useparfor。The body of theparfor-loop is executed in a parallel pool using multiple MATLAB workers in a nondeterministic order. Therefore, you have to meet these requirements for the body of theparfor-loop:

  1. The body of theparfor-loop must be independent. One loop iteration cannot depend on a previous iteration, because the iterations are executed in parallel in a nondeterministic order. In the example,

    A(y) = A(y-1) + y;
    is not independent, and therefore you cannot useparfor。下一步的处理with independence issues, seeEnsure That parfor-Loop Iterations are Independent

  2. You cannot nest aparfor-loop inside anotherparfor-loop. The example has two nestedfor-loops, and therefore you can replace only onefor-loop with aparfor-loop. Instead, you can call a function that uses aparfor-loop inside the body of the otherparfor-loop. However, such nestedparfor-loops give you no computational benefit, because all workers are used to parallelize the outermost loop. For help dealing with nested loops, seeNested parfor and for-Loops and Other parfor Requirements

  3. parfor-loop variables must be consecutive increasing integers. In the example,

    parforx = 0:0.1:1
    has non-integer loop variables, and therefore you cannot useparforhere. You can solve this problem by changing the value of the loop variable to integer values required by the algorithm. For next steps in troubleshootingparfor-loop variables, seeEnsure That parfor-Loop Variables Are Consecutive Increasing Integers

  4. You cannot break out of aparfor-loop early, as you can in afor-loop. Do not include a return or break statement in the body of yourparfor-loop. Without communication, the other MATLAB instances running the loop do not know when to stop. As an alternative, considerparfeval

    If you still have problems convertingfor-loops toparfor-loops, see排除变量parfor-Loops

Tip

You can profile aparfor-loops usingticandtocto measure the speedup compared to the correspondingfor-loop. UseticBytesandtocBytesto measure how much data is transferred to and from the workers in the parallel pool. For more information and examples, see剖析parfor-loops

See Also

||

Related Topics