複数の処理を同時に実行して全体の処理速度を上げる方式
並列処理とは、複数の処理を同時に実行して、全体の処理速度を上げる方式のことです。1つずつ順番に行う方式は逐次処理と呼び、並列処理と対になる概念です。
身近な例で考えると、大量の食器を洗う場面です。1人で順番に洗う(逐次)より、3人で手分けして同時に洗う(並列)方が早く終わります。コンピュータも、コアを複数使って仕事を分担すれば速くなる、という発想です。
上の図解①では、逐次処理(左)・SIMD(中央)・MIMD(右)の3つの処理スタイルを並べています。それぞれの違いを次のカードで詳しく見ていきましょう。
並列処理は、コンピュータの分類法であるフリンの分類で整理できます。これは「命令の流れの数」と「データの流れの数」の組み合わせで4種類に分ける方法です(上の図解②)。
4つの分類:
・SISD(Single Instruction Single Data):1命令で1データ。昔の1コアCPUの逐次処理
・SIMD(Single Instruction Multiple Data):1命令で複数データを一斉処理。GPUやベクトル演算が代表例
・MISD(Multiple Instruction Single Data):1データに複数命令。実例は少なく、冗長化システムなど特殊用途
・MIMD(Multiple Instruction Multiple Data):各コアが別々の命令で別々のデータを処理。マルチコアCPUが代表例
SIMD と MIMD の違いがとくに重要です。SIMDは「全員が同じ作業をする」(例: 全画素を同じルールで明るくする)、MIMDは「各自が違う作業をする」(例: 1コアは動画再生、別コアはダウンロード)と考えると分かりやすいです。
「SIMD=1命令×複数データ、MIMD=複数命令×複数データ」の対応と、それぞれの代表例(SIMD=GPU、MIMD=マルチコア)を結びつけて覚えると整理しやすいです。略語の頭文字「SI/MI=命令、SD/MD=データ」を意識すると区別が楽になります。
並列処理の効果は処理速度の向上です。仕事を分割して同時に進めるほど、理論上は速くなります。コアを増やせば、同時に進められる作業の数も増えます。
ただし、効果には限界があります。
・並列化できない部分が残る:処理の中には「順番にやるしかない部分」があり、そこは速くできない
・分割や同期のコストがかかる:仕事を分けたり結果をまとめたりする手間(オーバーヘッド)も発生する
・コア2倍でも2倍速にはならない:上の図のように、逐次部分があるぶん理想通りには速くならない
この「並列化できない部分が全体の速度向上の足かせになる」という法則をアムダールの法則と呼びます。たとえば全体の20%が逐次処理なら、いくらコアを増やしても5倍より速くはなりません。「並列化しても効果は頭打ちになる(アムダールの法則)」という考え方は重要なポイントです。