確定的タスクと非確定的タスクを分け、十分なプロセッサリソースが割り当てられるように確定的タスクを個々のVIに配置します。これらのVIに優先度を付け、適切な実行システムにカテゴリ分けすることで、各VIに割り当てられるプロセッサリソースを制御できます。

各VIは、指定された優先度と実行システムに応じて、1つの実行システムスレッドに割り当てられます。スレッドは、その順序にしたがってプロセッサで実行されます。

VIに優先度を割り当てる

プロジェクトエクスプローラウィンドウでVIを右クリックし、ショートカットメニューからプロパティを選択して、VIプロパティダイアログボックスを開きます。VIプロパティダイアログボックスのカテゴリプルダウンメニューから実行を選択し、VIの優先度を設定可能な実行ページを開きます。VIの優先度のレベルは、下記のリストから選択できます (優先度の低い順)。

  • バックグラウンド (最下位)
  • 低 (通常)
  • タイムクリティカル (最上位)
注意 LabVIEWでは、VI優先度とタイミングストラクチャ優先度という2つの独立した、かつ互いに関連する優先度スキームが使用されます。タイミングストラクチャ優先度は数値で表され、ターゲット上で実行される他のタイミングストラクチャに対し、値が高いほど優先度が高いことを示します。ただし、タイミングストラクチャ優先度はすべて、VI優先度レベルの高優先度とタイムクリティカルの間に位置します。このような不正な動作を回避するために、アプリケーション内で1つの優先度スキームだけを使用することを推奨します。アプリケーション内でタイミングストラクチャを使用する場合、すべてのVIを低優先度に設定してください。

LabVIEWで作成されたVIはすべて、優先度がデフォルトで「低」に設定されます。ただし、サブVIは発呼者VIの優先度を継承します。たとえば、タイムクリティカルVIによって呼び出されたサブVIの優先度はタイムクリティカルとなります。タイムクリティカルに設定されたVIは、他の優先度のVIよりも先に実行されます。タイムクリティカルVIは、すべてのタスクが完了するまでプロセッサリソースを解放しません。ただし、確定的VIがプロセッサリソースを独占しないよう、プロセッサリソースの制御を解放するように明示的に指定することもできます。

メモ 優先度がタイムクリティカルに設定されている複数のVIは互いに先行して実行できないため、確定性を保証するために各CPUにつき1つの確定的VIを作成する必要があります。

上記の5つの優先度以外に、「サブルーチン」という優先度を設定することもできます。優先度をサブルーチンに設定したVIは、他のVIと実行時間を共有しません。サブルーチンの優先度でVIを実行すると、VIはそのVIを中で実行しているスレッドの制御を行い、その発呼者と同じスレッドで実行します。優先度がサブルーチンのVIも含めて、他のVIは現在実行されているサブルーチンVIが終了するまでそのスレッドで実行されません。

VIを実行システムに割り当てる

VIの実行システムを変更するにはプロジェクトエクスプローラウィンドウでVIを右クリックし、ショートカットメニューからプロパティを選択して、VIプロパティダイアログボックスを開きます。VIプロパティダイアログボックスのカテゴリプルダウンメニューから実行を選択し、VIの実行システムを設定可能な実行ページを開きます。VIは、以下の6つの実行システムにカテゴリ分けできます。

  • ユーザインタフェース
  • 標準
  • 計測器I/O
  • データ収集
  • その他1
  • その他2

デフォルトではすべてのVIが標準実行システムで実行されますが、別の実行システムに割り当てることもできます。サブVIは、これら6つの実行システム以外に、「発呼者と同じ」に指定することもできます。「発呼者と同じ」に設定されたサブVIは、そのサブVIを呼び出すトップレベルVIと同じ実行システムで実行されます。

ユーザインタフェース以外の実行システムには、指定された優先度でVIを実行するためのスレッドキューがあります。たとえば、同じ実行システムに割り当てられた3つのVIがある場合、1つのVIの実行中は他の2つのVIはキューの中で待機状態になります。すべてのVIの優先度が同じであると仮定した場合、1つのスレッドは一定の時間実行されます。その後、そのスレッドはキューの末尾に移動し、次のスレッドが実行されます。実行が完了したスレッドは、実行システムのキューから削除されます。

ユーザインタフェース実行システムは、すべてのユーザインタフェースタスクを処理します。その他の実行システムは、ユーザインタフェースの管理の役割は果たしません。VIのユーザインタフェースを更新する必要がある場合、タスクの実行権がユーザインタフェース実行システムに渡され、その実行システムによってユーザインタフェースが更新されます。

確定的VIを協調的に実行する

確定的VIはプリエンプティブであるため、プロセッサリソースを独占することができます。確定的VIによってすべてのプロセッサリソースが占有され、優先度が低いタスク (低優先度のVIやRTターゲットのFTPサーバなど) の実行が不可能となる場合があります。

したがって、確定的VIを作成する場合は、コードの確定性を損なわずに優先度が低いタスクが実行できるように、定期的にリソースを解放するよう構成する必要があります。確定的VIのタイミングを設定することで、協調的にリソースを解放することができます。

メモ マルチCPUシステムで実行するアプリケーションでは、確定的タイミングループを専用のプロセッサに手動で割り当てることができます。タイミングループを使用してCPUに割り当てを行うと、そのVIは他のタスクに影響を及ぼすことなく安全にプロセッサリソースを占有できます。