並列化

出典: フリー百科事典『ウィキペディア(Wikipedia)』

移動先: 案内検索

並列化(へいれつか)は、コンピュータにおいて、同時に複数の演算処理を実行すること(並列計算)によって処理のスループットを上げるプログラミング手法である。

並列化の主な内容は全体の問題をいくつかの独立したタスクに分割し、タスクをプロセッサに割り当て、それらのタスクを同調させて最終結果を得ることである。並列化は本質的に並列化可能な(主にデータに依存性のない)問題にのみ適用できる。問題の分割手法には領域分割、機能分割があり、両方を組み合わせることもある。

並列化には主に2つのアプローチがある。

暗黙的な並列化または自動並列化
処理系コンパイラ等)が自動的に問題をタスクに分割する
明示的な並列化または手動での並列化
プログラマが明示的にプログラムの分割方法を指定する

多くの要因・手法が並列化のパフォーマンスに影響を及ぼす。

ロードバランシングは負荷の高いプロセッサから負荷の低いプロセッサへとタスクを移すことで、すべてのプロセッサをビジーに保とうとする。

単一CPUのシステムで正しく動作するプログラムでも並列環境ではそうではないこともある。これは同一のプログラムの複数のコピーが互いに干渉しあう(例えば、同時に同じメモリ領域を読み書きする)からである。そのために並列環境では入念なプログラミング(排他制御)が必要となる。

自動並列化[編集]

自動並列化とは、並列化コンパイラを使用して、字面的にそのまま解釈すれば逐次的に計算を行うようなプログラムソースコードを変換し、並列計算を行うようなオブジェクトコードを得る手法である。並列計算機の並列計算能力を活用するために行われる。自動並列化の目的はプログラマを退屈でエラーの起きやすい並列化作業から解放することである。この数十年で技術的には非常に進歩したが、必要なプログラム解析の複雑さやコンパイル時には不明な要因(例えば、入力データの範囲)などのために、逐次的なプログラムの完全な自動並列化は未だ達成されていない。

自動並列化で主に焦点が当てられるプログラム制御構造はループである。なぜなら、一般的にプログラムの実行時間のほとんどは何らかのループの中で消費されるからである。自動並列化コンパイラはループを分解し、繰り返しが別々のプロセッサで並行に実行されるようにする。

並列プログラミングモデル[編集]

並列プログラミングモデルとは、並列なアルゴリズムを表現し、アプリケーションを動作環境である並列システムに適合させるためのソフトウェア群である。これらのソフトウェアは並列化ツールキットなどとも呼ばれる。並列プログラミングモデルが扱う領域には、アプリケーション言語、コンパイラ、ライブラリ、通信システム、並列入出力などがある。これは明示的な並列化の手法であり、自動並列化の適用の難しさを避けている。並列プログラムの生産性を高めるために、並列アプリケーションの開発者は適切な(単一または複数の)並列プログラミングモデルを選んで使用する。

並列プログラミングモデルの実装方法にはいくつか種類がある。既存の逐次処理言語用のライブラリ、言語の拡張仕様、または全く新しい実行モデルなどである。それらはさらに2種類に大まかに分類される。メモリ共有型とメモリ分散型である。しかしながら、現在ではこの2つの境界は曖昧なものとなっている。

並列プログラミングモデルの例[編集]

関連項目[編集]