フリンの分類(フリンのぶんるい、)は、計算機科学の分野で並列処理に関するコンピュータ・アーキテクチャの分類である。マイケル・J・フリン(Michael J. Flynn)が1966年に提案した。Flynn, M., Some Computer Organizations and Their Effectiveness, IEEE Trans. Comput., Vol. C-21, pp. 948, 1972.Duncan, Ralph, "A Survey of Parallel Computer Architectures", IEEE Computer. February 1990, pp. 5-16.。
分類 フリンが提唱した分類は、アーキテクチャ上の命令列(または制御列)の並列性とデータ列の並列性に基づく4種類である。 分類 概要 単一命令・単一データ(SISD) 命令にもデータにも並列性のない逐次的なコンピュータ。SISDアーキテクチャの例としては、いわゆるシングルプロセッサのマシンが挙げられ、古いCPUや古いメインフレームがある。現代でも、多くの8ビットマイコンではSIMDは実装されていない。 単一命令・複数データ(SIMD) 命令は1つだが、それを複数のデータで並列に計算する形態。画像、音声、動画などを扱うマルチメディア処理や機械学習で多用されている。CPU(MMX、SSE、3DNow!、SPEなど)やNPUやベクトル計算機で実装されている。派生形に単一命令・複数スレッド(SIMT)があり、GPUで使用されている。 複数命令・単一データ(MISD) 命令が複数あり、それを1つのデータに適用する形態のコンピュータ。あまり一般的ではないが、フォールトトレラント設計のシステムで冗長性を確保するために使われる。理論的にMISD型で提案されたコンピュータもいくつかあったが、高価である割に性能はあまり高くなく、大量生産されるには至っていない。 複数命令・複数データ(MIMD) 複数のプロセッサやプロセッサ・コアが同時並行的にそれぞれ異なるデータを異なる命令で処理するコンピュータ。現代のCPUはプロセッサが複数のコアを搭載し(マルチプロセッサ、マルチコア)、マルチタスクをスレッド単位で分散している。一般に分散システムはMIMD型であると言われ、単一の共有メモリを使う場合と、分散メモリを使う場合がある。 現代のコンピュータは、ほとんどがMIMD/SIMDヘテロジニアスアーキテクチャである。
これ以外の分類法も提案されているDistributed Memory Programming コーネル大学。また批判として、フリンの分類は「機械的に過ぎ」、現在1988年の書籍までに提案された並列計算機を特徴に応じてうまく分類できないとして、新しい分類を試みた書籍もある雨宮真人・田中譲『コンピュータアーキテクチャ』ISBN 4-274-07426-9 pp. 26-。
MIMDの分類 MIMDをさらに以下のように分類することもある。SPMD ローレンス・リバモア国立研究所Programming requirements for compiling, building, and running jobs アメリカ大気研究センターSPMD or Manager/Worker コーネル大学Distributed-memory programming アメリカ国立標準技術研究所
単一プログラム・複数データ(single program, multiple data、SPMD) 複数のプロセッサが同時並列的に同じプログラムを実行する。ただし、SIMDやMISD(ロックステップ実行)のように同じ箇所ではなく、それぞれ別の箇所を実行し、別々のデータを使用する。単一プロセス・複数データ(single process, multiple data)とも呼ばれ、並列プログラミングでは最も一般的とされるsingle program multiple data アメリカ国立標準技術研究所。 複数プログラム・複数データ(multiple program, multiple data、MPMD) 複数のプロセッサが同時並列的に少なくとも2つ以上の独立したプログラム群を実行する。これは例えばマルチプロセッサで複数のプロセスを同時に実行するという意味ではない。その場合は単にハードウェアがマルチプロセッサになっているだけで、それをオペレーティングシステムが複数のコンピュータであるかのように見せているだけである。ここでいうのは、1つのノードを「ホスト」または「マネージャ」とし、そこで第一のプログラムを実行して、そのプログラムが他のノード群に第二のプログラムとデータを分配して実行されるような形態である。そのようにして各ノードが実行した結果をマネージャノードに返す。
図解 4つのアーキテクチャを図解したものを以下に示す。"PU" はプロセッシングユニット(処理単位)、"Instruction Pool" は命令プール、"Data Pool" はデータプールである。
SI– MI– 200px 200px –SD 200px 200px –MD
出典・脚注