Main Content

ブロードキャスト変数

"ブロードキャスト変数" とは、ループ変数またはスライス化された変数以外の、ループ内で変化しない任意の変数です。parfor ループの開始時に、すべてのブロードキャスト変数の値が MATLAB® からすべてのワーカーに送信されます。次の例では、AB の値が MATLAB からすべてのワーカーに送信されます。

A = 5;
B = 10;
C = 0;
parfor i = 1:10
    if i == A
        C = C + B;
    end
end

パフォーマンスについての考慮事項

ブロードキャスト変数が大きい場合やブロードキャスト変数が多数ある場合、クライアントとそれに関連付けられたワーカーの間の通信がかなりの量になり、オーバーヘッドが増加することがあります。ブロードキャスト変数による通信オーバーヘッドが大きい場合は、代わりにループ内での一時変数の作成と代入を検討してください。逆に、一時変数の作成と代入による計算オーバーヘッドが大きい場合は、代わりにブロードキャスト変数の使用を検討してください。

詳細については、一時変数およびparfor を使用するタイミングの決定を参照してください。

メモ

複数の parfor ループで同じ定数データ セットにアクセスする必要がある場合は、各 parfor ループの開始時にワーカーにデータを転送する代わりに parallel.pool.Constant を使用して一度だけ転送することでコードのパフォーマンスを改善できます。

コードのパフォーマンスを改善するには、不要なブロードキャスト変数の数を減らす機会を探ります。たとえば、次のコードにはブロードキャスト変数 M が含まれています。

M = magic(10);
parfor i = 1:numel(M)
    out(i) = M(i)./numel(M);
end

このコードは、parfor ループの前に numel(M) を評価するように書き換えることができます。numel(M)parfor ループから削除することで、MATLAB から各ワーカーに M のすべての要素を送信せずに済みます。代わりに、N の値とスライス化された変数 M のサブセットが MATLAB から各ワーカーに送信されます。

M = magic(10);
N = numel(M);
parfor i = 1:N
    out(i) = M(i)./N;
end

参考

関連するトピック