並列化
OpenMP
MPI
PVM
Linda
ストリーム・プロセッシング (stream processing)
並行論理プログラミング (concurrent logic programming)
Intel Threading Building Blocks
X10
自動並列化とは、並列化コンパイラを使用して、字面的にそのまま解釈すれば逐次的に計算を行うようなプログラムのソースコードを変換し、並列計算を行うようなオブジェクトコードを得る手法である。並列計算機の並列計算能力を活用するために行われる。自動並列化の目的はプログラマを退屈でエラーの起きやすい並列化作業から解放することである。技術的には非常に進歩したが、必要なプログラム解析の複雑さやコンパイル時には不明な要因(例えば、入力データの範囲)などのために、逐次的なプログラムの完全な自動並列化は未だ達成されていない。
自動並列化で主に焦点が当てられるプログラム制御構造はループである。なぜなら、一般的にプログラムの実行時間のほとんどは何らかのループの中で消費されるからである。自動並列化コンパイラはループを分解し、繰り返しが別々のプロセッサで並行に実行されるようにする。
プログラマが明示的にプログラムおよびデータの分割方法を指定する
処理系(コンパイラなど)が自動的に問題のタスクおよびデータを分割する
多くの要因・手法が並列化のパフォーマンスに影響を及ぼす。並列化により、プロセッサの数(あるいはSIMD命令により同時処理できるデータの数)に比例してプログラムの処理速度が倍速化されるが、実際にはプログラム中に占める並列化可能な領域の割合に左右されたり、並列アルゴリズムの内容やハードウェアのキャッシュ能力に依存したりする。アムダールの法則や偽共有(英語版)も参照。
ロードバランシングは負荷の高いプロセッサから負荷の低いプロセッサへとタスクを移すことで、すべてのプロセッサをビジーに保とうとする。
単一CPUのシステムで正しく動作するプログラムでも並列環境ではそうではないこともある。これは同一のプログラムの複数のコピーが互いに干渉しあう(例えば、同時に同じメモリ領域を読み書きする)からである。そのため、並列環境では入念なプログラミング(排他制御)が必要となる。
もしコンピュータにプロセッサがひとつしかなく、なおかつSIMD命令をサポートしない場合は逐次処理しかできず、並列処理(並列計算)はできない。一方、並行処理(並行計算)は可能である場合もある。例えば汎用的なオペレーティングシステムではごく短時間で実行タスクを切り替えて複数のタスクを疑似的に同時実行することのできるマルチタスクシステムが採用されることが多い。並行処理はスループットの改善のためではなく、主にシステムの応答性の改善のために利用される。