並列化
コンピュータにおいて処理を実行する場合、もっとも単純な方法は、与えられたプログラムステップを最初から最後までひとつずつ順番に実行していくことである。これを逐次処理 (serial processing) と呼ぶ。一方、SIMD命令をサポートするプロセッサや、複数のプロセッサ(マルチソケットプロセッサあるいはマルチコアプロセッサ)を搭載するコンピュータでは、複数の異なるデータを同時に処理したり、複数の異なるステップを同時に実行したりすることもできる。これを並列処理 (parallel processing) と呼ぶ。逐次処理を並列処理にすることを並列化という。シングルコア性能の向上が頭打ちになるにつれ、並列化による高速化は重要性を増している手法である。
複数の異なるステップ(タスク)を並列実行できることをタスク並列性、複数の異なるデータに対して同じ処理を並列実行できることをデータ並列性という。
並列化の主な内容は、全体の問題をいくつかの独立したタスクあるいはデータストリームに分割し、タスクあるいはデータストリームを複数のプロセッサ (具体的にはCPUやGPUなどにおける各コア) に割り当て、処理を同時実行させ、最後に分割されたタスクを同調させたり、あるいはデータストリームを統合したりして最終結果を得ることである。ソフトウェアレベルでは並列化の実装単位にプロセスやスレッドが利用される。並列化は本質的に並列化可能な(主にデータ間に相互依存性のない)問題にのみ適用できる。問題の分割手法には領域分割(データ分割)、機能分割(タスク分割)があり、両方を組み合わせることもある。
並列化には主に2つのアプローチがある。