LabVIEWのマルチスレッドグラフィカルプログラミング環境では、マルチCPUシステム (マルチコアシステム、マルチプロセッサ、SMPシステムなど) による並列処理を簡単に活用することができます。LabVIEWで並列アーキテクチャを実装するには、ブロックダイアグラムのオブジェクトを連続的に配線しないように注意します。N個のCPUを持つシステムでVIを実行すると、最大N個のスレッドが並列的に実行されます。コードを並列ループに分割したり、複数の入力チャンネルをそれぞれ別のCPUで実行して並列データ処理を活用することができます。

メモ 過剰な並列処理は、CPU間で不要なデータ転送が発生する原因となり、レイテンシの増加につながる可能性があります。並列アーキテクチャは、共有リソースによるジッタが発生しないよう注意して設計する必要があります。共有リソースの同時要求は並行した実行処理を妨げるため、マルチCPUシステムのパフォーマンスの利点が損なわれます。Real-Time Trace Viewerを使用して、並列処理が実際に並行して実行されるか確認できます。

並列ループ

マルチCPUシステムで実行するリアルタイムアプリケーションに並列ループを含めると、CPUスケジューラによって自動負荷調整が実行され、各CPUに実行スレッドを分配します。タイミングループの割り当てられたCPU入力を使用して、タイミングループを特定のCPUに手動で割り当てることができます。

メモ LabVIEW 8.5より前のバージョンで作成されたVIを開くと、タイミングループは自動的にデフォルトCPUで実行されます。このような場合は、タイミングストラクチャでのCPU手動割り当ておよびCPUプールを使用することで、マルチCPUの利点を活用できます。

並列データ処理

複数のデータチャンネルをグループに分割して、それらのグループを個々のCPUで並列処理することができます。たとえば、16個の入力チャンネルをデュアルコアシステムで処理する場合、以下のブロックダイアグラムのように8チャンネルずつ2つのグループに分けることができます。

この例では、Process Data.viは再入可能サブVIに設定されており、サブVIの各インスタンスにそれぞれ専用のメモリスペースが割り当てられるため、2つのインスタンスを同じCPUで実行する必要はありません。Process Data.viの2つのインスタンスは、互いにデータフローの依存性がないため、CPUスケジューラによって自動的に使用可能なCPUに割り当てられます。

メモ LabVIEWでは、各タイミングループが1つのスレッドとして処理されます。タイミングループで並列処理を活用するには、各並列処理を別々のタイミングループに配置してください。マルチCPU RTシステムで並列処理を実行する方法については、NI Webサイトを参照してください。