FE EXAM

並列処理(SIMD / MIMD とフリンの分類)

複数の処理を同時に実行して全体の処理速度を上げる方式

DIAGRAM
逐次処理SIMD(1命令×複数データ)MIMD(複数命令×複数データ)

① 逐次処理 と 並列処理(SIMD / MIMD)の違い

逐次処理1つずつ順番に処理データ1を処理データ2を処理データ3を処理データ4を処理SIMD1命令で複数データを一斉処理同じ命令 ×1D1D2D3D4例: ベクトル演算・画像の全画素に同じ加工GPU が代表例MIMD各コアが別命令で別データ処理命令1データ1命令2データ2命令3データ3命令4データ4マルチコアCPU が代表例

② フリンの分類(命令の数 × データの数)

データ列の数 →単一データ (SD)複数データ (MD)命令列の数 →単一命令 (SI)複数命令 (MI)SISD単一命令・単一データ逐次処理(昔の1コアCPU)SIMD単一命令・複数データ1命令で複数データを一斉処理(GPU・ベクトル演算)MISD複数命令・単一データ1データに複数命令(実例は少ない・冗長系など)MIMD複数命令・複数データ各コアが別命令で別データ(マルチコアCPU)
解説

📌
並列処理とは

逐次時間がかかる並列同時で速い

並列処理とは、複数の処理を同時に実行して、全体の処理速度を上げる方式のことです。1つずつ順番に行う方式は逐次処理と呼び、並列処理と対になる概念です。

身近な例で考えると、大量の食器を洗う場面です。1人で順番に洗う(逐次)より、3人で手分けして同時に洗う(並列)方が早く終わります。コンピュータも、コアを複数使って仕事を分担すれば速くなる、という発想です。

上の図解①では、逐次処理(左)・SIMD(中央)・MIMD(右)の3つの処理スタイルを並べています。それぞれの違いを次のカードで詳しく見ていきましょう。

📌
SIMD/MIMDの分類

並列処理は、コンピュータの分類法であるフリンの分類で整理できます。これは「命令の流れの数」と「データの流れの数」の組み合わせで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倍より速くはなりません。「並列化しても効果は頭打ちになる(アムダールの法則)」という考え方は重要なポイントです。

関連コンテンツ