このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
parfor
for
ループを並列化する
構文
説明
parfor
は、共有メモリ マルチコア プラットフォームで並列実行される、生成された MEX 関数または C/C++ コード内にループを作成します。LoopVar
= InitVal
:EndVal
; Statements
; end
parfor
ループは、LoopVar
の値 InitVal
~ Endval
で Statements
を実行します。LoopVar
は 1 ずつ増加する整数値のベクトルを指定します。
parfor (
は、並列 LoopVar
= InitVal
:EndVal
, NumThreads
); Statements
; endfor
ループの作成に際して最大で NumThreads
のスレッドを使用します。
例
入力引数
制限
Open Multiprocessing (OpenMP) アプリケーション インターフェイスをサポートするコンパイラを使用しなければなりません。サポートされるコンパイラを参照してください。OpenMP をサポートしていないコンパイラを使用する場合は、MATLAB Coder は
parfor
ループをfor
ループとして扱います。生成された MEX 関数または C/C++ コードでは、ループ反復は単一スレッドで実行されます。OpenMP アプリケーション インターフェイスは JIT MEX コンパイルと互換性がありません。JIT コンパイルが OpenMP をサポートしないを参照してください。
parfor
ループ内では以下の構造を使用しないでください。parfor
ループの本体でcoder.extrinsic
を使用して外部関数を呼び出すことはできません。parfor
ループ内でグローバル変数を書き込むことはできません。MATLAB Coder は、リダクション内の
coder.ceval
の使用をサポートしません。たとえば、次のparfor
ループのコードを生成できません。代わりに、parfor i = 1:4 y = coder.ceval('myCFcn',y,i); end
coder.ceval
を使用して C コードを呼び出すローカル関数を記述し、この関数をparfor
ループ内で呼び出します。以下に例を示します。parfor i = 1:4 y = callMyCFcn(y,i); end function y = callMyCFcn(y,i) y = coder.ceval('mCyFcn', y , i); end
ループ インデックスの型は、ターゲット ハードウェアにおいて整数型で表現可能でなければなりません。生成されたコード内でマルチワード タイプを必要としない型を使用してください。
スタンドアロン コード生成の
parfor
では、実行可能ファイルまたはライブラリのビルドにツールチェーン アプローチが必要です。コード ジェネレーターでテンプレート makefile アプローチを使用する原因となるような設定変更は行わないでください。を参照してください。MATLAB コードで
parfor
を使用するには、Parallel Computing Toolbox™ のライセンスが必要です。
制限の包括的な一覧は、parfor の制限を参照してください。
ヒント
以下の場合、
parfor
ループを使用します。簡単な計算のループによる反復が多数必要である。
parfor
はループの反復をグループに分け、各スレッドで 1 つのグループの反復が実行されるようにします。実行に長時間かかるループ反復がある場合。
ループの反復が他の反復の結果によって変わる場合は、
parfor
ループを使用しないでください。リダクションはこのルールの例外です。"リダクション変数" は、すべての反復に同時に依存するが反復順序には依存しない値を累積します。
入力引数
NumThreads
は生成コードにおいて OpenMP のnum_threads()
句を設定します。OpenMP では、環境変数OMP_NUM_THREADS
を設定するかomp_set_num_threads()
を使用することで、C/C++ におけるスレッドの数のグローバルな制限もサポートされます。詳細については、OpenMP の仕様 (https://www.openmp.org/specifications/) を参照してください。
バージョン履歴
R2012b で導入