<< 3 >>
インテル® C/C++ コンパイラー OpenMP* 活用ガイド
デュアルコア・マルチコア対応アプリケーション開発A
2.マルチスレッド・プログラミング
OpenMP*の説明を始める前に、マルチスレッド・プログラミングについて少し説明します。スレッドとは OS による処
理単位であり、OS は要求される処理タスクを分割しそれぞれをこのスレッドの単位で処理を行います。このスレッドを
複数の CPU に割り当てられ処理するのが、マルチスレッドによる並列処理となります。
図.1 マルチスレッドによる並列実行
マルチスレッドは、プロセス内の仮想メモリー空間といったリソースやコンテキストを共有し、固有のスタックとプロ
グラムカウンター PC を個別に持つことになります。
個々のプロセスが固有の仮想空間上で動作するプロセスと異なり、このメモリー空間を共有することで、スレッドは
並列処理を行う上で非常に効率的な実行を可能としています。メモリー空間の共有により、スレッド間でのデータの
やり取りは直接アクセスが可能となり、OS を介した通信のようなオーバーヘッドの大きなオペレーションを必要としま
せん。同時に、スレッドの生成や切り替えはプロセスの場合と比較して高速であり、システムのリソースへのインパク
トも非常に小さくなります。このようなスレッドの特性を最大限に活用することで、効率のよい並列処理を行うのが、
マルチスレッド・プログラミングです。
図.2
マルチスレッドによるリソースとコンテキストの共有
マルチスレッド・プログラミング
OpenMP* や自動並列コンパイル
逐次実行
プログラム
並列実行
プログラム
Memory
CPU
CPU
CPU
データ
スレッド
データ
スレッド
データ
スレッド
スレッドチーム
スレッドチーム
共有データ
データ
スレッド
データ
スレッド
データ
スレッド