G検定 SISD, SIMD, MISD, MIMD
株式会社リュディアです。今回はフリンの分類と呼ばれているコンピュータアーキテクチャ上の分類方法についてまとめてみます。コンピュータアーキテクチャはコンピュータ内部構造の設計思想のようなものと考えていただけたらと思います。AI専用の半導体を理解するための前知識として重要と考えるためです。
フリンの分類(Flynn's taxonomy)とは何でしょうか?コンピュータ内部の命令とデータが単一か複数かで分類したものです。原論文は古くて見つからなかったのですが以下がが原著に忠実に記載されているように思うので情報源としてつけておきます。
まず最初にフリンの4分類と、その例を簡単な図で示します。以下の表を見てください。
最初は SISD (Single Instruction, Single Data stream) です。日本語では単一命令、単一データと言います。例を見てもらうと "+" と書かれた加算を実行する場所が1つあり、そこに2つの数 (a, b) が与えられます。古いタイプのコンピュータはこのタイプでしたが、今は個人で利用する PC のレベルでも内部では複数命令の同時実行がなされていますので、現存するものとしては組み込み用途の計算パワーを必要としない領域に限定されていると考えてよいです。
次に SIMD (Single Instruction, Multiple Data stream) です。日本語では単一命令、複数データと言います。例を見てもらうと "+" と書かれた加算を実行する場所が複数あり、それぞれに異なる2つの数 (a, b) 、(c, d) が与えられます。1 つの命令を複数のデータに対して同時に実行できるのが SIMD の特徴です。たとえば "+" 計算を同時に1つしかできない SISD タイプのコンピュータでは、a + b + c + d を計算する際に ((( a + b) + c ) + d) のように3回の実行時間が必要です。しかし同時に 2 つを実行可能な SIMD タイプのコンピュータでは (a + b) + ( c + d) のように (a + b) と (c + d) を同時に行い、その結果を加算する、という2回の実行時間で処理可能となります。この例では 2 つですが、実際には 128 並列であったり、さらに大きな並列度を持つものがありますので、大規模な計算での時間短縮効果が大きいです。AI専用チップや GPU でも SIMD がサポートされていることが多いです。
次に MISD (Multiple Instruction, Single Data stream) です。日本語では複数命令、単一データと言います。例を見てもらうと "+" と "*" という加算と乗算を実行する場所が 1 つずつありますが、データは2つの数 (a, b) のみです。組み合わせとして MISD もあるのですが実際の応用はないと言ってもよいと思います。
最後に MIMD (Multiple Instruction, Multiple Data stream) です。日本語では複数命令、複数データと言います。例を見てもらうと "+" と "*" という加算と乗算を実行する場所が 1 つずつあり、それぞれに異なる2つの数 (a, b) と (c, d) が入力されます。つまり独立したデータで独立した計算を同時に実行できることになります。AI専用チップや GPU でも MIMD がサポートされていることが多いです。
今回のフリンの分類のうち SIMD と MIMD の 2 つの分類が AI 専用チップや AI 計算を GPU で行う場合に有用となります。多くのチップは SIMD 型か MIMD 型のいずれかに分類されます。各社の専用チップがどのように分類されるかは後日まとめてみたいと思います。
では、ごきげんよう。