近年まで、演算ハードウェアの絶え間ない進歩の恩恵により、ソフトウェア開発者は多大な労力を注ぐことなくソフトウェアの実行速度を目覚しく向上させることができました。プロセッサ速度が向上しただけで、ソフトウェアも即座に高速化されました。しかし、プロセッサ速度の改善も限界に近づきつつあり、プロセッサ製造元が新しい手法で処理能力の向上を図るようになった現在では、このような通念が変化しています。マルチコアプロセッサを導入するためには、ソフトウェア開発者はマルチコアプロセッシングの可能性を最大に引き出すためのプログラミング技術を習得する必要があります。これらのプログラミング手法の1つに、タスクの並列処理があります。
タスクの並列処理は、ソフトウェア内部で個々のタスクを同時に実行することを意味します。たとえば、シングルコアプロセッサでウェブブラウザとワードプロセッサプログラムを同時にを実行していると仮定します。これらのアプリケーションは別々のスレッドで実行されますが、結局は同じプロセッサで実行されています。また、デュアルコアプロセッサで同様に2つのプログラムが実行されていると仮定します。デュアルコアマシンでは、これらのアプリケーションは本質的には互いに独立して実行されます。デュアルコアマシンでも一部のリソースが共有され完全に独立して実行されない場合はありますが、2つの並列タスクはより効率的に実行されます。
並列処理を得意とするデータフロープログラミングが可能なNI LabVIEWグラフィカル開発環境は、並列プログラミングに最適なプログラミング言語と言えます。従来のテキストベース言語では、シーケンシャル構文を主体とするため、並列形式での視覚化と整理が難しくなります。一方NI LabVIEWでは、マルチスレッドアプリケーションを直感的かつ簡単に作成できます。
LabVIEWのグラフィカルプログラミングパラダイムを使用すると、初心者も容易に並列プログラミングを行えます。互いにデータ依存しない2つの独立したタスクを、余分なプログラミングを行うことなく並列実行できます。
図1は、簡単なデータ集録ルーチンを示しています。図の上部はアナログ電圧入力タスクのコードで、下部はデジタル出力タスクのコードです。
図1. LabVIEWコードのデータ依存性のない2つのセクションをそれぞれ独立して並列実行
これらの2つの独立したデータ集録タスクは、シングルコアプロセッサでは同じCPUを使用します。マルチコアプロセッサでは、各スレッドが別々のプロセッサで実行されるため、実行速度が大幅に向上します。
アプリケーションでデータ並列化を使用する場合は、ボトルネックとなる可能性がある2つのタスクのリソース共有(図2を参照)が発生しないよう注意する必要があります。
図2. 1つのタスクが別のタスクのデータに依存するため両方のタスクをを独立して実行できない例
このプログラムでは、2つのタスクがデータを共有するため、デジタルタスクはアナログタスクが開始されるまで待機しなければなりません。このコードは並列化されているように見えますが、2つのタスクがデータを共有するため実際には並列とは言えません。タスクの並列処理を使用してアプリケーションをプログラミングする際は、この点に注意する必要があります。
Eaton Corporationでは、開発チームがトラックR&D部門で使用されるテスト/測定システムの改善に取り組んでいます。このチームは、LabVIEWのマルチコアプロセッシングとマルチスレッドアーキテクチャをイートンのシステムで使用されているチャンネル数の4倍以上にも適用し、リアルタイムの確定性を確保しました。このLabVIEWアプリケーションは、集録、テスト制御、ユーザインタフェースの並列タスクを実行する3つの非同期ループで構成されています。このソリューションを実装する前には、テスト要件を満たすために、処理負荷をシーケンス的に分割するか、複数のシングルコアコンピュータでアプリケーションを実行する必要がありました。開発チームは、標準的な市販コンピュータシステムを使用することで、電力消費、熱出力、テスト時間を最小限に抑え、全体的なコストを抑えていました。
ソフトウェア開発者は、タスクの並列化などのプログラミング手法を採用することで、マルチコアプロセッシングの能力を最大限に活用することができます。これらの手法を理解し、習得することで、将来的なトレンドにアプリケーションを対応させることが可能になります。並列性を備えたLabVIEWのグラフィカルプログラミング環境を使用することで、次世代アプリケーションを効果的に開発することができます。