既存LabVIEWプログラムマルチコアコンピュータ実行高速する

概要

このドキュメントは、マルチコアプログラミングの基本シリーズの一部です。
マルチコアプログラミングの基本シリーズ

マルチコアプログラミングの基本シリーズ

NI LabVIEWプログラムをマルチコアシステム(デュアルコアマシン、クアッドコアマシンなど)で実行した場合のパフォーマンス向上の度合いは、複数の要素によって決定されます。これらの要素とは、たとえば新しいハードウェアのスペック、LabVIEWアプリケーションのストラクチャ、システムソフトウェアなどです。LabVIEWコードは本質的に並列的であるため、一般的なLabVIEWプログラムのストラクチャによるテストでは平均で実行時間が25~35%向上します。ただし、各プログラムの特質に応じて結果は大きく異なります。LabVIEWプログラムは、マルチコアコンピュータ環境用に最適化することで、マルチコアコンピュータシステムにアップグレードしたときに大幅に実行時間を削減することができます。このページでは、LabVIEWプログラムをマルチコアシステムで実行した場合のパフォーマンスに影響する主な要素について説明します。

内容

パフォーマンス測定基準

LabVIEWプログラムのパフォーマンスを評価する際は、実行時間とメモリ使用率が主な測定基準となります。実行時間とは、1つの手順グループを完了するために必要な時間で、通常は秒単位で表されます。メモリ使用率とは、1つの手順グループを完了するために必要なメモリスペースで、通常はバイト単位で表されます。どちらの測定値もプログラムのパフォーマンスを示す適切な目安となりますが、実行時間は特に重要視されます。マルチコアシステムでのパフォーマンスは、応答性によって測ることもできます。応答性とは、プログラムまたはシステムの入力に対する応答の速さを意味し、必要な動作を実行するために必要な時間の長さを表すものではありません。マルチコアシステムの応答性は、複数のコアでマルチタスクを行うことで向上します。応答性の向上はパフォーマンスの改善とはみなされますが、プログラムの実行時間の向上に直接つながるとは限りません。

クロック速度プロセッサ数

LabVIEWでは、ハイエンドコンピュータシステムのマルチコアプロセッサの利点が活かされるように、コア数の特定とスレッド数の増加によってプログラムが自動的にスケールされます。たとえば、オクタルコアコンピュータで実行するプログラムでは、8つのスレッドが作成されます。

プロセッサ増加クロック速度同一場合

シングルコアコンピュータシステムから、そのシングルコアシステムと同じクロック速度を持つプロセッサユニットを使用するマルチコアシステムにアップグレードすると、LabVIEWプログラムの実行時間が短縮されます。プログラムの実行速度は、マルチコアコンピュータシステムのコア数に比例して増加(クアッドコアシステムで4倍の速度など)することが理想的ですが、実際にはスレッドとコアの間での通信オーバーヘッドによってそれよりも多少速度が低下します。LabVIEWプログラムが完全に逐次的でありシングルプロセッサで実行される場合は、他のソフトウェアとの共有プロセッサ時間が少なくなるため、実行時間が大幅に向上します。プログラムが完全に並列的でデータ依存性のない同一規模のタスクで構成されている場合は、ほぼ理想に近い実行時間の向上を実現することができます。

プロセッサ増加クロック速度低下する場合

シングルコアコンピュータシステムから、そのシングルコアシステムより低速のクロック速度を持つプロセッサユニットを使用するマルチコアシステムに移行した場合、LabVIEWプログラムの実行時間の違いは容易に予測できません。LabVIEWプログラムが完全に逐次的でマルチコアシステムの1つのシングルコアに独占的なアクセスがある場合は、システムの相対するクロック速度とタスクスケジュールによって実行時間が決定されます。LabVIEWプログラムが完全に並列的でデータ依存性のない同一規模のタスクで構成されており、マルチコアマシンのあらゆる使用可能なコアにアクセスできる場合にも、実行時間はシステムの相対するクロック速度とタスクスケジュールに依存します。

通信オーバーヘッド

メモリスキーム

マルチコアコンピュータシステムのメモリ構成は、通信オーバーヘッドとLabVIEWプログラムの実行速度に影響します。一般的なメモリアーキテクチャには、共有メモリ、分散メモリ、分散共有ハイブリッドメモリがあります。共有メモリシステムでは、すべてのプロセッサからアクセスできる1つのグローバルメモリスペースを使用することで、高速な通信が実現されます。1つのメモリにたくさんのプロセッサが接続されるほど、プロセッサとメモリの間で通信ボトルネックが発生しやすくなります。分散メモリシステムは、各プロセッサがローカルメモリスペースを使用し、他のプロセッサとネットワークを介して通信するため、プロセッサ間の通信が共有メモリシステムよりも遅くなります。これらの両方のアーキテクチャの利点を活かすために分散共有メモリアーキテクチャを搭載したシステムもあります。メモリスキームは通信オーバーヘッドに影響を与え、その結果としてあらゆる言語(LabVIEW、C、Visual Basicなど)で記述されたプログラムの実行速度にも影響を与えます。

プロセッサ通信

プロセッサ間の物理的な距離とプロセッサ間の接続の質は、通信オーバーヘッドを左右するため、結果としてLabVIEWプログラムの実行速度にも影響を与えます。複数のICにある複数プロセッサ間では、1つのICにある複数プロセッサ間よりも通信レイテンシが増加します。したがって、大きな通信オーバーヘッドのためにLabVIEWプログラムの実行速度が遅くなります。たとえば図1では、左側のデュアルプロセッサシステム(2ソケット)のレイテンシは右側のシングルチップデュアルコアプロセッサよりも増加します。

プログラムソフトウェアに関する問題

コード構成

マルチコアコンピュータでのLabVIEWプログラムの実行時間は、プログラムを実行しているコンピュータと同じくらいプログラム自体にも影響されます。プログラムは、マルチコアシステム特有の環境の利点を活かすように構成されていなければなりません。プログラムの並列性は、粒度(処理と通信の比率)や負荷調整と同じくらいプログラムの実行時間に影響します。多くの既存のGコード(LabVIEW VI)は逐次実行用に記述されていますが、このタイプのコードはデータフロープログラミングに基づいているため、ある程度の並列性を持っています。前述のとおり、一般的なLabVIEWプログラムのストラクチャをシングルコアシステムからマルチコアシステムに移行してテストすると、実行時間が平均で25~35%向上します。ただし、各プログラムの特質に応じて結果は大きく異なります。LabVIEWプログラムは、マルチコアコンピュータ環境用に最適化することで、マルチコアコンピュータシステムにアップグレードしたときに大幅に実行時間を削減することができます。

ハードウェア特有調整

実行速度を向上させるためにGコードを構成するためには、プログラムを実行するハードウェアをよく知る必要があります。最大の実行速度を実現するためには、マルチコアプログラムを実行するシステムに精通していなければなりません。マルチコアプログラミング手法は、コア数が不明なシステムに対しては、一般的なアプローチを必要とします。一般的アプローチを取る場合、多くのマルチコアマシンで実行時間を短縮できますが、特定のシステムでは最大限の実行速度を得られない可能性があります。LabVIEWプログラムをハードウェアごとに調整することは、時間がかかり、常に必要であるとは限りませんが、特定のハードウェアで最大実行速度を得るためには、必要になる場合があります。たとえば、オクタルコアコンピュータシステムを最大限に活用するために、データ並列化やパイプラインのような高度な並列プログラミング手法を使用できます。また、システムのコア数、コアレイアウト(2つのデュアルコア、1つのクアッドコアなど)、接続スキーム、メモリスキーム、既知のバグ情報などから、マルチコアシステムでのプログラムにおける実行時間の最短化を図ることができます。

並列プログラミング手法については、以下を参照してください。

マルチコア対応ソフトウェアスタック

ソフトウェアスタックの複数レベルにおいて、並列処理のボトルネックが発生する場合がありますが、C言語など従来型の言語ではこの問題の回避は難しいものがあります。LabVIEWプログラミングの利点の1つとして、これらのボトルネックをあらかじめ排除する「マルチコア対応」ソフトウェアスタックが挙げられます。マルチコアハードウェアでパフォーマンスの向上を実現するために、ソフトウェアスタックがマルチコア対応かどうかを判断するためには、4つの層、すなわち開発ツール、ライブラリ、デバイスドライバ、オペレーティングシステム(OS)を評価します。これらの層がマルチコア対応ではない場合、パフォーマンスは向上が難しいだけではなく、低下する可能性があります。表1は、LabVIEWのマルチコア対応ソフトウェアスタックを示しています。

表1. ソフトウェアスタック体制
ソフトウェアスタックマルチコア対応性LabVIEWでの対応例
開発ツールOSの選択によりサポートを提供。適切なスレッドおよび最適化を促進。マルチスレッド化および最適化されたストラクチャ
ライブラリスレッドセーフ、再入可能ライブラリ解析ライブラリ
デバイスドライバマルチスレッド用に最適化された
ドライバ設計
NI-DAQmxドライバソフトウェア
OSOSがマルチスレッドおよびマルチタスクをサポート。調整タスクをロード可能。Windows、Mac OS、Linux®、リアルタイムOS対応

マルチコア対応ではないライブラリとドライバ、または複数コア間でタスクの負荷調整を行えないオペレーティングシステムを使用するマルチコアシステムでは、並列LabVIEWプログラムは高速に実行されません。

まとめ

マルチコアシステムにおけるLabVIEWプログラムの実行速度を予測するためには、いくつかの要素を考慮に入れる必要があります。構成が適切ではないマルチコアシステムにアップグレードしても、LabVIEW外部のハードウェアとソフトウェアの問題により、実行時間が改善されない可能性があります。また、LabVIEWプログラムでストラクチャの問題によって、マルチコアでのパフォーマンスが改善しない場合もあります。LabVIEWは基本的にマルチコア対応であり、直感的なマルチコアプログラミングの機能とサンプルを利用できるため、マルチコアコンピュータシステムへのアップグレード時に考慮するべき要素が最小限に抑えられています。

マルチコアプログラミングに関するその他リソース

Was this information helpful?

Yes

No