インテル®コンパイラー OpenMP*入門 デュアルコア・マルチコア対応アプリケーション開発@ <<  3  >> 2. 並列処理:マルチプロセスとマルチスレッド 今後のデュアルコアやマルチコア構成のマイクロプロセッサーでは、並列処理技術がより重要になります。データ ベースや WEB などのシステムでは、一度に複数のユーザーからの大量のデータ処理が要求されます。このような場 合には、これらの複数のタスクを同時に処理するマルチタスクが行われています。デュアルコアやマルチコア構成の マイクロプロセッサーを搭載したシステムでは、同時により多くのタスクを処理することが可能になります。これに対し て、ある特定の問題の計算処理を複数のプロセッサー、複数のサーバを利用して高速に処理する並列計算という処 理もあります。並列計算の目的は、対象となる問題を複数のコア、プロセッサーを同時に利用して短時間で解くこと といえます。このような並列計算というのは、一部の科学技術計算分野だけで利用される特殊なものだという認識 があるかもしれません。しかし、デュアルコアからマルチコアへと、今後のマイクロプロセッサーの進化を考えた場合、 このような並列計算をごく一般的なプログラムでも利用することがより一般的になるでしょう。デュアルコアやマルチコ アのもつ高いコストパフォーマンスをさらに引き出すためにも、このような並列計算の実現は、今後どのようなプログ ラムを開発するにあたっても、大きな意味を持ちます。 並列処理を理解するためには、プロセスとスレッドという言葉について理解することが必要です。先に述べたよう に、並列処理とは「同時に複数の処理(タスク)」を行うことであり、これらの複数の処理は OS によって効率良く処理 されます。この OS による処理単位がプロセスとスレッドということになります。 OS は、要求されたタスクに対して複数のプロセスを起動してその処理を行います。これらのプロセス内で生成され て実際の処理を行うのがスレッドとなります。プロセス内で複数のスレッドを生成して、並列処理を行うことをマルチ スレッドと呼びます。 プロセスは、独立した仮想メモリー空間とスタックをもち、1 つ以上のスレッドから構成されます。これらの仮想メモ リー空間は、OS によるメモリー管理機能により、各プロセス間での干渉が防止されています。言い換えれば、この 独立した仮想メモリー空間がプロセスになります。複数のプロセスを利用して行う並列処理がマルチプロセスとなり ます。 プロセスの起動やそのスケジュール管理など OS が提供する様々なサービスも、複数のタスクを同時に処理するマ ルチプロセスとなります。スケジューリングについては様々な技術が取り入れられており、複雑なワークロードへの対 応も可能です。デュアルコアやマルチコアを搭載したシステムにおいては、OS がマルチプロセスの効率的な処理を 行うことで大幅な処理性能の向上が可能となります。 このように複数のタスクを効率良く処理するにはマルチプロセスは最適です。しかし、このマルチプロセスで 1 つ の処理・タスクを分割して複数の処理として並列に実行し、そのタスクの高速処理を行うには効率上の問題がありま す。例えば、データベースの処理などでは、非常に複雑な 1 つの処理要求( クエリー )があった場合、これらの処 理要求を内部で複数のクエリーに分割し、親プロセスと親プロセスが起動する子プロセスで処理することにより、マ ルチプロセスでの処理が可能になります。この場合、親プロセスから起動される子プロセスは、自身のプログラムの ロードやメモリーの確保、初期化などの作業を行う必要があります。これらの処理は OS にも大きな負担になります。 また、プロセスは先に示したように、メモリー管理機能によって相互に保護されます。従って、プロセス間でのデー タのやり取りは、すべて OS が介在したプロセッサー間でのデータ通信を必要とします。このようなプロセッサー間通 信は、計算スピードと比較して非常に遅い処理となるため、ボトルネックとなり並列処理での性能向上を十分に図る ことが難しくなります。また発生させたプロセスについては、それらのスケジューリングと同期処理などの点で、OS の負担が大きくなります。