LabVIEWにおけるマルチプロセッシングおよびハイパースレッディング
- 更新日2025-08-27
- 5分で読める
ハイパースレッドのコンピュータはシングルプロセッサですが、マルチプロセッサを搭載しているコンピュータのように動作します。(Windows) ハイパースレッディングとは、Intel Pentium 4以降の一部のバージョンの機能です。ハイパースレッドのコンピュータでWindowsタスクマネージャを起動してパフォーマンスタブをクリックすると、2つのCPUについての使用率の履歴が表示されます。(macOS) パフォーマンスを確認するためのアクティビティモニタを起動します。
ハイパースレッドのコンピュータは同一のマイクロチップに組み込まれたマルチプロセッサのように動作します。チップ上のリソースには、レジスタセットのように重複しているものもあります。演算実行部やキャッシュなどのリソースは共有されます。マイクロ操作を格納するバッファなどのリソースには、各プロセッサにリソースが部分的に割り当てられ、分割されているものもあります。
ハイパースレッディングを最大限に利用するためにアプリケーションを最適化することは、マルチプロセッサシステム (マルチコア、マルチCPU、SMPシステム) のためにアプリケーションを最適化することに似ていますが、異なる点もいくつかあります。たとえば、ハイパースレッディングのコンピュータは演算実行部を共有します。また、デュアルプロセッサのコンピュータには2つの完全な演算実行部があります。したがって、不動小数点の演算実行部によって制限されるアプリケーションのすべては、演算実行部を共有する必要がないマルチプロセッサのコンピュータ上で機能が高まります。これと同じ原理がキャッシュの競合にも該当します。2つのスレッドがキャッシュにアクセスしようとする場合、パフォーマンスの向上は各プロセッサにフルサイズのキャッシュが搭載されたマルチプロセッサのコンピュータ上で得られます。
LabVIEW実行の概要
LabVIEW実行システムは既に多重処理用に作成されています。テキストベースのプログラミング言語では、アプリケーションのマルチスレッド処理を行うため、複数のスレッドの作成や、これらのスレッド内で通信するためのコードを作成する必要があります。これに対し、LabVIEWではVI内のマルチスレッド処理の機会を認識することができ、実行システムによりマルチスレッド通信が処理されます。
LabVIEWのマルチスレッド実行システムの利点を生かした例を以下に示します。
このVIでは、LabVIEWは2つのループが個別に実行可能であり、多くの場合マルチプロセスまたはハイパースレッドの動作環境で同時実行が可能であることを認識します。
素数の並行処理のサンプル
以下の例では、2より大きい素数を計算します。
ブロックダイアグラムは、3からNum Termsのすべての奇数を評価して、それが素数であるかどうか判断します。いずれかの数が項を除算して余りが0の場合、内側のForループはTRUEを返します。
外側のForループの反復は、互いに依存しません。Forループの反復の実行順序が決定していない場合は、Forループでループ反復の並列化を有効にして、パフォーマンスを向上させることができます。この例では、外側のForループの各反復で大量の演算が実行されるため、これらの反復を並列化することが考えられます。
このVIを並列化するには、Forループを右クリックしてショートカットメニューから反復の並列化を構成を選択します。この操作によって、Forループ反復並列化ダイアログボックスが開きます。
マルチプロセッサコンピュータでは、並列ループ反復を実行すると、複数のプロセッサの使用によってForループを高速に実行できます。この例では、並列化によって異なるコードを同時に実行することで、効率を上げることができます。
これらの2つのサンプルVIには、明示的なスレッド管理のためのコードは含まれていません。LabVIEWのデータフロープログラミングのパラダイムにより、LabVIEW実行システムは並列ループインスタンスを異なるスレッドで実行することができます。
ハイパースレッドシステムまたはマルチプロセッサシステムのためのプログラミング
ハイパースレッドのコンピュータのアプリケーションのパフォーマンスを最適化することは、マルチプロセッサのコンピュータのアプリケーションのパフォーマンスを最適化することとほとんど同じです。相違点は、ハイパースレッドのコンピュータでは、キャッシュや演算実行部など、2つの論理プロセッサ間で共有するリソースがあることです。ハイパースレッドのコンピュータで共有するリソースによってアプリケーションが制限されると思われる場合は、Intel VTuneなどの上級サンプリングパフォーマンスアナライザでそのアプリケーションのテストを行ってください。