フリン分類法は、マイケル・J・フリンが1966年に提案し[1]、1972年に拡張されたコンピュータアーキテクチャの分類法である[2]。この分類法は定着し、現代のプロセッサとその機能の設計ツールとして使用されている。マルチプロセッシング中央処理装置(CPU)の台頭以来、マルチプログラミングのコンテキストは分類法の拡張として発展してきた。ダンカン分類法[3]でカバーされているベクトル処理は、Cray-1が1977年にリリースされたため、フリンの研究には含まれていない。フリンの2番目の論文は1972年に発表された。
分類
フリンによって定義された4つの初期の分類は、アーキテクチャで利用可能な同時命令(または制御)ストリームとデータストリームの数に基づいています。[4]フリンは1972年にSIMDの3つの追加サブカテゴリを定義しました。[2]
単一命令ストリーム、単一データ ストリーム (SISD)
命令ストリームまたはデータ ストリームのいずれにも並列処理を利用しないシーケンシャル コンピュータ。単一の制御ユニット (CU) がメモリから単一の命令ストリーム (IS) を取得します。次に、CU は適切な制御信号を生成し、単一の処理要素 (PE) が単一のデータ ストリーム (DS) で操作するように指示します (つまり、一度に 1 つの操作)。
SISD アーキテクチャの例としては、古いパーソナル コンピュータ(PC) (2010 年までに、多くの PC に複数のコアが搭載されました) やメインフレーム コンピュータなどの従来のユニプロセッサマシンが挙げられます。
単一命令ストリーム、複数データストリーム (SIMD)
1つの命令が複数の異なるデータストリームに同時に適用されます。命令はパイプラインなどによって順次実行されるか、複数の機能ユニットによって並列に実行されます。フリンの1972年の論文では、SIMDをさらに3つのカテゴリに分類しています。[2]
- アレイ プロセッサ- これらは 1 つの (同じ) 命令を受信しますが、各並列処理ユニットには独自の個別のメモリとレジスタ ファイルがあります。
- パイプライン プロセッサ– これらは 1 つの (同じ) 命令を受け取りますが、中央のリソースからデータを読み取り、各プロセッサがそのデータの断片を処理し、結果を同じ中央のリソースに書き戻します。Flynn の 1972 年の論文の図 5 では、そのリソースはメイン メモリです。現代の CPU では、そのリソースはレジスタ ファイルであることが一般的です。
- 連想プロセッサ– これらは 1 つの (同じ) 命令を受け取りますが、各並列処理ユニットでは、ユニットのローカルデータに基づいて、実行するかスキップするかについて独立した決定が行われます。現代の用語では、これは「述語型」(マスク型) SIMD として知られています。
アレイプロセッサ
アレイ プロセッサの現在の用語は、「単一命令複数スレッド」(SIMT) です。これは、Flynn の 1972 年の分類法では SIMD のサブカテゴリとして明確に分類されています。これは、並列サブ要素が独自の独立したレジスタ ファイルとメモリ (キャッシュとデータ メモリ) を持つことで識別できます。Flynn の元の論文では、SOLOMONとILLIAC IV という2 つの SIMT プロセッサの歴史的な例が挙げられています。
Nvidiaはマーケティング資料や技術文書でこの用語をよく使用し、そのアーキテクチャの斬新さを主張しています。[6] SOLOMONはNvidiaより60年以上前に登場しました。
Aspex Microelectronics の連想文字列プロセッサ (ASP) [7]は、マーケティング資料では「大規模なワイド SIMD」と分類されていましたが、ビットレベルのALU とビットレベルの述語 (Flynn の分類法: 連想処理) を備えており、4096 個のプロセッサのそれぞれに独自のレジスタとメモリ (Flynn の分類法: 配列処理) がありました。2010 年にリリースされた Linedancer には、それぞれ独自のコンテンツ アドレス可能メモリを備えた 4096 個の 2 ビット述語 SIMD ALU が含まれており、毎秒 8000 億命令を実行できました。[8] Aspex の ASP 連想配列 SIMT プロセッサは、NVIDIA より 20 年も古いものです。[9] [10]
パイプラインプロセッサ
Flynn が 1972 年に論文を書いた当時、多くのシステムでは、パイプラインが読み書きするリソースとしてメイン メモリを使用していました。すべての「パイプライン」が読み書きするリソースがメイン メモリではなくレジスタ ファイルである場合、SIMD の最新のバリエーションが生まれます。例としては、Altivec、NEON、AVX などがあります。
このタイプのレジスタベースのSIMDの別名は「パックSIMD」[11]であり、もう1つはレジスタ内のSIMD(SWAR)です。プレディケーションを適用すると、連想処理になります(以下)。
連想プロセッサ
連想プロセッサの最新の用語は、「述語型」(またはマスク型) SIMD です。例としてはAVX-512があります。
最新の設計 (特にGPU ) の中には、これらのサブカテゴリの複数の機能を取り入れているものもあります。今日の GPU は SIMT ですが、連想型でもあります。つまり、SIMT 配列内の各処理要素も述語化されています。
複数の命令ストリーム、単一のデータ ストリーム (MISD)
複数の命令が1つのデータストリーム上で動作します。これは、一般的にフォールトトレランスに使用される珍しいアーキテクチャです。異種システムは同じデータストリーム上で動作し、結果に同意する必要があります。例としては、スペースシャトルの飛行制御コンピュータがあります。[12]
複数の命令ストリーム、複数のデータ ストリーム (MIMD)
複数の自律プロセッサが、異なるデータに対して異なる命令を同時に実行します。MIMD アーキテクチャには、マルチコア スーパー スカラープロセッサや、1 つの共有メモリ空間または分散メモリ空間を使用する 分散システムが含まれます。
分類を比較した図
これら 4 つのアーキテクチャは、以下に視覚的に示されています。各処理ユニット (PU) は、ユニコア コンピューターまたはマルチコア コンピューターに対して表示されます。
さらなる分割
2006 年現在[アップデート]、トップ 10 のスーパーコンピュータのすべてと、TOP500 の スーパーコンピュータのほとんどがMIMD アーキテクチャに基づいています。
これらはフリンの研究の一部ではないが、MIMDカテゴリーをさらに以下の2つのカテゴリーに分類する人もいる[13] [14] [15] [16] [17]。さらに細分化が検討されることもある[18] 。
単一プログラム、複数データ ストリーム (SPMD)
複数の自律プロセッサが、異なるデータに対して同じプログラムを同時に(ただし、SIMD が課すロックステップではなく、独立したポイントで)実行します。 [19]単一プロセス、複数データとも呼ばれます[17] - SPMD にこの用語を使用することは技術的に正しくありません。SPMD は並列実行モデルであり、複数の協調プロセッサがプログラムを実行することを想定しているからです。SPMD は明示的な並列プログラミングの最も一般的なスタイルです。[20] SPMD モデルと用語は、RP3 チームの Frederica Darema によって提案されました。[21]
複数のプログラム、複数のデータ ストリーム (MPMD)
複数の自律プロセッサが、少なくとも 2 つの独立したプログラムを同時に実行します。HPC コンテキストでは、このようなシステムでは、1 つのノードを「ホスト」(「明示的なホスト/ノード プログラミング モデル」) または「マネージャ」(「マネージャ/ワーカー」戦略) として選択することがよくあります。このノードは、1 つのプログラムを実行し、そのプログラムが他のすべてのノードにデータを送信します。他のすべてのノードは、2 番目のプログラムを実行します。その後、他のノードは、結果をマネージャに直接返します。この例としては、SPU/PPU プロセッサを搭載した Sony PlayStation 3 ゲーム コンソールが挙げられます。
MPMD は、HPC 以外のコンテキストでは一般的です。たとえば、makeビルド システムは、make 実行ファイル自体に加えてターゲット依存プログラムを使用して、複数の依存関係を並行してビルドできます。MPMD はパイプラインの形をとることもよくあります。ls | grep "A" | more のような単純な Unix シェル コマンドは、 3 つのプロセスを起動して別々のプログラムを並行して実行し、1 つのプロセスの出力を次のプロセスへの入力として使用します。
これらはどちらも、個々のプログラムが特定の並列アルゴリズムの一部を実装するのではなく、汎用的なビルディング ブロックであるという点で、HPC で使用される明示的な並列プログラミングとは異なります。パイプライン アプローチでは、利用可能な並列処理の量はデータ セットのサイズに応じて増加しません。
参照
参考文献
- ^ Flynn, Michael J. (1966 年 12 月). 「超高速コンピューティング システム」. Proceedings of the IEEE . 54 (12): 1901–1909. doi :10.1109/PROC.1966.5273.
- ^ abc Flynn, Michael J. (1972 年 9 月). 「いくつかのコンピュータ組織とその有効性」(PDF) . IEEE Transactions on Computers . C-21 (9): 948–960. doi :10.1109/TC.1972.5009071. S2CID 18573685.
- ^ Duncan, Ralph (1990 年 2 月). 「並列コンピュータ アーキテクチャの調査」(PDF) . Computer . 23 (2): 5–16. doi :10.1109/2.44900. S2CID 15036692. 2018 年 7 月 18 日のオリジナルからアーカイブ(PDF) . 2018 年 7 月 18 日閲覧。
- ^ 「ベクター、SIMD、GPU アーキテクチャにおけるデータレベルの並列処理」(PDF)。2013 年 11 月 12 日。
- ^ Flynn, Michael J. (1972 年 9 月). 「いくつかのコンピュータ組織とその有効性」(PDF) . IEEE Transactions on Computers . C-21 (9): 948–960. doi :10.1109/TC.1972.5009071.
- ^ 「NVIDIA の次世代 CUDA コンピューティング アーキテクチャ: Fermi」(PDF) . Nvidia .
- ^ Lea, RM (1988). 「ASP: コスト効率に優れた並列マイクロコンピュータ」. IEEE Micro . 8 (5): 10–29. doi :10.1109/40.87518. S2CID 25901856.
- ^ 「Linedancer HD – 概要」。Aspex Semiconductor。2006年10月13日時点のオリジナルよりアーカイブ。
- ^ Krikelis, A. (1988).超並列連想アーキテクチャによる人工ニューラルネットワーク。国際ニューラルネットワーク会議。ドルドレヒト: Springer。doi : 10.1007 / 978-94-009-0643-3_39。ISBN 978-94-009-0643-3。
- ^ オドール、ゲザ;クリケリス、アージー。ヴェスターゴンビ、ジェルジュ。ロールバッハ、フランソワ。 「System-V の超並列連想文字列処理アーキテクチャにおける効果的なモンテカルロ シミュレーション」(PDF)。
- ^ Miyaoka, Y.; Choi, J.; Togawa, N.; Yanagisawa, M.; Ohtsuki, T. (2002).パックされた SIMD 型命令によるプロセッサコア合成のためのハードウェアユニット生成アルゴリズム。アジア太平洋回路システム会議。pp . 171–176。doi :10.1109 / APCCAS.2002.1114930。hdl : 2065 / 10689。ISBN 0-7803-7690-0。
- ^ Spector, A.; Gifford, D. (1984 年 9 月). 「スペースシャトルのプライマリコンピュータシステム」. Communications of the ACM . 27 (9): 872–900. doi : 10.1145/358234.358246 . S2CID 39724471.
- ^ 「Single Program Multiple Data stream (SPMD)」 Llnl.gov。2004年6月4日時点のオリジナルよりアーカイブ。2013年12月9日閲覧。
- ^ 「ジョブのコンパイル、ビルド、実行に関するプログラミング要件」。Lightning ユーザー ガイド。2006 年 9 月 1 日時点のオリジナルからアーカイブ。
- ^ 「CTC 仮想ワークショップ」 Web0.tc.cornell.edu . 2013 年 12 月 9 日閲覧。
- ^ 「NIST SP2 入門: 分散メモリプログラミング」。Math.nist.gov。2013 年 12 月 13 日時点のオリジナルよりアーカイブ。2013 年 12 月 9 日閲覧。
- ^ ab 「IBM SP システムでの並列ジョブ管理とメッセージ パッシングについて」。2007 年 2 月 3 日時点のオリジナルよりアーカイブ。
- ^ 「9.2 戦略」。分散メモリプログラミング。2006年9月10日時点のオリジナルよりアーカイブ。
- ^ この記事は、 2008 年 11 月 1 日より前のFree On-line Dictionary of Computingの Flynn's+taxonomy から取得した資料に基づいており、 GFDLバージョン 1.3 以降 の「再ライセンス」条件に基づいて組み込まれています。
- ^ 「単一プログラム複数データ」Nist.gov. 2004-12-17 . 2013-12-09閲覧。
- ^ Darema, Frederica ; George, David A.; Norton, V. Alan; Pfister, Gregory F. (1988). 「EPEX/FORTRAN の単一プログラム複数データ計算モデル」.並列コンピューティング. 7 (1): 11–24. doi :10.1016/0167-8191(88)90094-4.
