並列Forループ反復によってパフォーマンスを調整する
- 更新日2025-08-27
- 4分で読める
並列Forループ反復を有効にすると、並列インスタンス (P) 端子とチャンクサイズ (C) 端子によってパフォーマンスをプログラム的に調整できます。これらの端子は、デフォルトでほとんどのケースにおいて最適なパフォーマンスが得られるよう構成されているため、プログラム的に構成する必要はほとんどありません。デフォルト構成をカスタマイズする必要がある場合に、並列インスタンス端子とチャンクサイズ端子を使用します。
並列インスタンス端子を使用してパフォーマンスを調整する
並列Forループ反復を有効にすると、並列インスタンス端子がForループ内に表示されます。実行する並列インスタンスの数をプログラム的に指定するには、並列インスタンス端子に数値を配線します。アプリケーションをコンパイルすると、Forループ反復並列化ダイアログボックスの生成される並列ループインスタンス数フィールドで指定された値と、並列インスタンス端子の入力値のうち、小さいほうの値の数だけ並列反復インスタンスが生成されます。並列インスタンスはプロセッサによって同時に実行され、パフォーマンスが向上します。
並列インスタンス端子の入力に何も配線しないと、コンピュータの論理プロセッサの数が自動検出され、並列インスタンス端子のデフォルト値として使用されます。多くの場合、実行される並列インスタンスの数がコンピュータのプロセッサ数に一致する場合にパフォーマンスが最適となるため、通常は並列インスタンス端子の入力には何も配線しないでください。
Forループのコードが待機動作をしない場合は、実行されるループインスタンスの数が論理プロセッサの数より多いときにパフォーマンスが最適となります。この状況はオーバーサブスクリプションと呼ばれます。たとえば、並列Forループインスタンスが外部ハードウェアからデータを集録するまで待機する場合、オーバーサブスクリプションによって、プロセッサは1つめの並列インスタンス待機中に2番めの並列インスタンスを実行できます。並列Forループインスタンスが演算負荷の大きいコードと同時に実行される場合、論理プロセッサの数より少ないループインスタンス数を実行する (アンダーサブスクリプション) ことで、パフォーマンスが最適となります。たとえば、ForループとサブVIが同時に実行される場合、アンダーサブスクリプションによってForループに使われる演算リソースが制限され、他の操作を実行するためのリソースが確保されます。
チャンクサイズ端子でカスタム反復スケジュールを指定する
ループ反復は、複数のループ反復で成り立つチャンクに自動的に分けられます。並列反復を有効にすると、プロセッサが複数のチャンクを同時に実行するため実行速度が上がります。デフォルトスケジュールでは、一番大きなサイズのチャンクから順に実行されます。大きなチャンクを先に実行することでスケジュール決定のためのオーバーヘッドが小さくなり、小さいチャンクを後で実行することでプロセッサのアイドル時間が少なくなります。チャンクサイズのプログラム的な変更は、デフォルトの反復スケジュール変更 (小さいチャンクを大きいチャンクより先に実行されるよう変更するなど) がForループに有益である場合に限り行ってください。
並列Forループ反復を有効にした後に、チャンクサイズ端子でプログラム的に反復スケジュールを構成するには、以下の手順に従ってください。
- Forループを右クリックし反復の並列化を構成を選択します。Forループ反復並列化ダイアログボックスが開きます。
- 反復パーティショニングスケジュールセクションで、チャンクサイズ (C) 端子を使用してパーティショニングを指定を選択します。チャンクサイズ端子が並列インスタンス端子の下に表示されます。
- チャンクサイズ端子に数値または数値の配列を配線します。
チャンクサイズ端子に配線された数値によって、各チャンクに含まれる反復の数が決定されます。数値の配列を配線すると、チャンクサイズをより正確に指定できます。配列の各値によって、各チャンクに含める反復数を個々に指定できます (最初の反復が指標0となります)。