(57)【要約】【課題】複数のネストを持つ構造化プログラムを容易に実行することができる並列計算装置を提供する。【解決手段】並列計算装置が、複数の演算プロセッサーを有する並列演算部と、複数の演算プロセッサーのそれぞれに制御命令を供給する制御信号生成部と、を備え、複数の演算プロセッサーのそれぞれが、入力されたデータを制御命令に基づいて演算処理する演算部と、スタック構造を有しており、演算部により演算処理された結果に基づいたフラグ情報がスタック構造に順次蓄積される制御情報保持部と、制御情報保持部に蓄積されたフラグ情報を合成する合成部と、を備え、演算部が、合成部が合成したフラグ情報に基づいて演算処理する。【選択図】図７
2010257200.tif 000002
【特許請求の範囲】
【請求項１】
複数の演算プロセッサーを有する並列演算部と、
前記複数の演算プロセッサーのそれぞれに制御命令を供給する制御信号生成部と、
を備え、
前記複数の演算プロセッサーのそれぞれが、
入力されたデータを前記制御命令に基づいて演算処理する演算部と、
スタック構造を有しており、前記演算部により演算処理された結果に基づいたフラグ情報が前記スタック構造に順次蓄積される制御情報保持部と、
前記制御情報保持部に蓄積されたフラグ情報を合成する合成部と、
を備え、
前記演算部が、
前記合成部が合成したフラグ情報に基づいて前記演算処理する、
ことを特徴とする並列計算装置。
【請求項２】
前記フラグ情報を前記制御情報保持部に順次蓄積させ、前記制御情報保持部に蓄積されているフラグ情報の蓄積状態を、前記順次蓄積されたフラグ情報が蓄積される前の蓄積状態に順次戻す制御部、
を有することを特徴とする請求項１に記載の並列計算装置。
【請求項３】
前記制御部は、
前記制御命令に含まれている条件判断が実行された場合に、当該条件判断された結果を前記フラグ情報として前記制御情報保持部に順次蓄積させる第１の制御部と、
前記条件判断した結果の影響が及ぶ範囲の処理が終了する場合に、前記制御情報保持部に蓄積されているフラグ情報を、当該影響が及ぶ範囲に対応する前記フラグ情報が蓄積される前の蓄積状態に順次戻す第２の制御部と、
を有することを特徴とする請求項２に記載の並列計算装置。
【請求項４】
前記制御部は、
前記制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させる第３の制御部、
を有することを特徴とする請求項２または請求項３に記載の並列計算装置。
【請求項５】
前記制御部は、
前記条件判断した結果の影響が及ぶ範囲の前記演算部による演算処理が終了する場合に、前記制御情報保持部に保持されているフラグ情報を、当該影響が及ぶ範囲に対応する前記フラグ情報が蓄積される前の蓄積状態に戻すとともに、前記制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させる第４の制御部、
を有することを特徴とする請求項２から請求項４のいずれかに記載の並列計算装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、並列計算装置に関する。
【背景技術】
【０００２】
近年、半導体技術の進歩により汎用プロセッサー（CPU（Central Processing Unit）等）の性能は飛躍的に向上したが（たとえば数Gflops/プロセッサー）、科学技術計算や画像処理等の分野において、更に大幅な性能向上が求められている。たとえば、数Tflops（Tera Floating point number Operations Per Second）、又は、数100GOPS（Giga Operation Per Second）以上の性能が求められている。こうした要求に応える為に、複数のプロセッサーを一個のLSI（Large Scale Integration）に集積する並列計算装置（並列プロセッサー）が研究開発されている。このような並列計算装置には、汎用CPUをコアとして、それを１つのLSI中に複数個集積する物もある。
【０００３】
こうした性能要求に応える物としては例えば、株式会社ソニー・コンピュータエンタテインメントと株式会社東芝とIBM社とが共同開発したCell Broadband Engine（以下Cellとする）（画像処理及び科学技術計算用）、日本電気株式会社が開発したIMAP（画像処理用）、CONNEX社が開発したLine Dancer （画像処理用）などがある（非特許文献１から３参照）。
【０００４】
ところで科学技術計算や画像処理では、膨大な量のデータに対してほぼ同一の処理を行うという特徴がある。この特徴を生かして上記プロセッサーではSIMD(Single Instruction Multi Data)型のアーキテクチャが採用されている。つまり、多数のプロセッサーに対して別々のデータを与えるが、命令は同一とする制御方式である。
【０００５】
命令を同一にする理由は、異なる命令をインストラクションメモリから同時に読み出して、各プロセッサーに供給するMIMD（Multi Instruction Multi Data）方式では、複数のインストラクションメモリとそのデコード回路が必要となるのでハードウェアコストが増大し、かつソフトウェア開発の大幅な複雑化及び、ソフトおよびハードのデバッグが非常に困難になるからである。
【０００６】
次に、構造化プログラミングについて説明する。図１５は分岐の有るプログラムのフローチャートの一部である。このプログラムでは、変数abcと変数defの内容を比較し、変数abcの方が大きければ変数x1に変数abcの値を加え、そうでなければ変数x2に変数defの値を加えている。図１６は図１５のフローチャートをC言語で記述したものある。こうした記述方法は構造化プログラミングと呼ばれている。図１７は図１６のコードを計算機の機械語に近いアセンブラ言語へ変換したものである。ここでは、変数abcをレジスターR2に、変数defをレジスターR3に、変数x1をレジスターR4に、変数x2をレジスターR5に、それぞれCコンパイラが割り付けたと仮定している。図１７で注意すべき点は、図１５のフローを実装する為に、条件ジャンプ命令BGT（比較結果が大きかった場合にジャンプする）を用いていることである。因みに、BR命令は常にジャンプする命令である。
【０００７】
ところでSIMD型アーキテクチャでは、並列計算する場合において、条件ジャンプ命令を使ってプログラム分岐を実装することは難しい。例えば、8個のプロセッサーで構成されるSIMD型計算機を考える。レジスターR2やレジスターR3は8個のプロセッサーでそれぞれ別なので、それらに格納されているデータは異なる。従って、レジスターR2とレジスターR3との比較結果が各プロセッサーでバラバラなので、或るプロセッサーではジャンプし、別のプロセッサーではジャンプしないという状態が生じるが、SIMD型なので、それぞれのプロセッサーが別々の命令を実行できない。そのため、このままでは図１５のフローを実現できないことになる。なお、この問題は、たとえばプログラム実行時にプロセッサー毎にジャンプ条件が異なる場合について発生する問題であり、たとえば、予め回数が決まっているループの制御などのように、常に全てのプロセッサーでジャンプ条件が一致するような制御は、SIMD型アーキテクチャでも実装可能である。
【０００８】
前述のSIMD型アーキテクチャの欠点を回避する方法として、通常の命令を条件付にするアーキテクチャがある。これについてはSIMD型ではないが、ARM社のARMプロセッサーのマニュアル「ARMアーキテクチャリファレンスマニュアル」(ARM v6.pdf）の第A3章に詳しい記述がある。ARMプロセッサーのほぼ全ての命令は条件付で実行できるので、これらを使うと図１６のコードは例えば図１８のように記述できる。図１８中の「AL」は常に実行することを、「HI」は比較結果が大きかった場合に、「LS」は比較結果が小さいか等しい場合に実行することを示している。ここで「ADD HI, R4, R4, R2」という命令に“S”が付加されていないので、この命令ではCMP命令でセットされた条件が変更されない点に留意する。（上記マニュアルA3-7ページ参照）
【０００９】
ここで「命令を実行しない」ということの意味について説明する。一般的なプロセッサーに於いて命令は通常、命令フェッチ（IF）、命令解読（DEC）、オペランドフェッチ（OF）、演算実行（EXE）、演算結果の書き込み（WB）という手順で実行されている。現在の高速なプロセッサーではこの手順は、例えば図１９のタイミングチャートに示すように５つに分割されパイプライン化されている。CMP命令の比較結果はその命令のEXE部の最後、又はWB部にならないと確定しない。従って、CMP命令の結果によって次のADD命令をNOP（ノーオペレーション）命令に変更するのは間に合わない。
【００１０】
しかしながら、次に続くADD命令の演算結果を所定の位置に書き込まなければ、何も実行しなかったことと等価である（ただし、オペランドフェッチ時等にプロセッサーの内部状態が変化してしまう場合を除く。こうしたことが起こる場合は後で補正が必要である。）。つまり、CMP命令の結果によって次のADD命令のWBを制御し、R4への書き込みを無効にしてしまえば、ADD命令はNOP命令と等価になる。CELL、IMAP、Line Dancer等のSIMD型プロセッサーは、このアイデアを元に条件付命令を実装している。
【先行技術文献】
【非特許文献】
【００１１】
【非特許文献１】“CELLプロプグラミングチュートリアル”、「2.5 SIMD演算における条件分岐」、２００９年４月１３日検索、インターネット＜URL:http://www.fixstars.com＞
【非特許文献２】“An Integrated Memory Array Processor Architecture for Embedded Image Recognition System”, Kyo,S.;Okazaki,S.;Arai,T.,Computer Architecture, 2005. ISCA apos;05. Proceedings. 32nd International Symposium on Volume , Issue , 4-8 June 2005 Page(s):134 - 145, §5.3 2005 IEEE
【非特許文献３】“The CA1024 :A fully programmable system-on-chip for costeffective HDTV media processing“, Lazar Bivolarski, Bogdan Mitu, Anand Sheel,Gheorghe Stefan, Tom Thomson, Dan Tomescu、CA1024資料 P9、２００９年４月１３日検索、＜URL:http://www.hotchips.org/archives/hc18/2_Mon/HC18.S5/HC18.S5T2.pdf＞
【発明の概要】
【発明が解決しようとする課題】
【００１２】
従来のSIMDを用いた技術では、分岐が一層までのフローには対応できるが、２層以上の分岐が有るネスト（入れ子）した構造化プログラムに対応するのは困難である。図２０に２重にネストしたプログラムの例を示す。この例では、符号（２）の比較命令のところでコンディションフラグが書き換えられてしまうので、符号（１）の比較結果（コンディションフラグ）を符号（２）の命令実行前に一旦どこかに退避しておき、符号（３）のelse文で復帰させなければならない。ARMプロセッサーではコンディションフラグをレジスターに書き込むことで退避可能である。図２１にプログラム例を示す。
【００１３】
MRS命令がコンディションフラグをレジスターR9に書き込む命令であり、MSR命令がレジスターから戻す命令である。ところがCELLやIMAP及びLine Dancerではコンディションコードを退避できない。従って、図２０のコードは図２２のようにネストしないコードに書き換えなければならない（図２２のプログラムは変数x1の値によっては図２０と同じ動作にならない点に要注意）。通常のプログラムではネストが３重４重と深くなることも珍しくなく、そうした場合には書き換えが複雑になりプログラムの記述性が低下する。つまり、従来のSIMD技術ではネストした構造化プログラミングへの対応が困難となる。
【００１４】
すなわち、従来の技術においては、並列計算装置において、複数のネストを持つ構造化プログラムを容易に実行することが難しいという問題があった。
【００１５】
本発明は、このような事情に鑑みてなされたもので、その目的は、複数のネストを持つ構造化プログラムを容易に実行することができる並列計算装置を提供することにある。
【課題を解決するための手段】
【００１６】
この発明は上述した課題を解決するためになされたもので、請求項１に記載の発明は、複数の演算プロセッサー（例えば実施形態のPE-0〜PE-107）を有する並列演算部（例えば実施形態の並列演算部２）と、前記複数の演算プロセッサーのそれぞれに制御命令を供給する制御信号生成部（例えば実施形態のPE-I３）と、を備え、前記複数の演算プロセッサーのそれぞれが、入力されたデータを前記制御命令に基づいて演算処理する演算部（例えば実施形態の（例えば実施形態のPE-A、PE-B、PE-C、PE-D）と、スタック構造を有しており、前記演算部により演算処理された結果に基づいたフラグ情報が前記スタック構造に順次蓄積される制御情報保持部（例えば実施形態のGフラグスタック１１）と、前記制御情報保持部に蓄積されたフラグ情報を合成する合成部（例えば実施形態のＡＮＤ回路１９）と、を備え、前記演算部が、前記合成部が合成したフラグ情報に基づいて前記演算処理する、ことを特徴とする並列計算装置である。
【００１７】
また請求項２に記載の発明は、前記フラグ情報を前記制御情報保持部に順次蓄積させ、前記制御情報保持部に蓄積されているフラグ情報の蓄積状態を、前記順次蓄積されたフラグ情報が蓄積される前の蓄積状態に順次戻す制御部（例えば実施形態の制御部９０）、を有することを特徴とする請求項１に記載の並列計算装置である。
【００１８】
また請求項３に記載の発明は、前記制御部は、前記制御命令に含まれている条件判断が実行された場合に、当該条件判断された結果を前記フラグ情報として前記制御情報保持部に順次蓄積させる第１の制御部（例えば実施形態のcnt_PSH信号）と、前記条件判断した結果の影響が及ぶ範囲の処理が終了する場合に、前記制御情報保持部に蓄積されているフラグ情報を、当該影響が及ぶ範囲に対応する前記フラグ情報が蓄積される前の蓄積状態に順次戻す第２の制御部（例えば実施形態のcnt_POP信号）と、を有することを特徴とする請求項２に記載の並列計算装置である。
【００１９】
また請求項４に記載の発明は、前記制御部は、前記制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させる第３の制御部（例えば実施形態のcnt_GINV信号）、を有することを特徴とする請求項２または請求項３に記載の並列計算装置である。
【００２０】
また請求項５に記載の発明は、前記制御部は、前記条件判断した結果の影響が及ぶ範囲の前記演算部による演算処理が終了する場合に、前記制御情報保持部に保持されているフラグ情報を、当該影響が及ぶ範囲に対応する前記フラグ情報が蓄積される前の蓄積状態に戻すとともに、前記制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させる第４の制御部（例えば実施形態のcnt_PSHI信号）、を有することを特徴とする請求項２から請求項４のいずれかに記載の並列計算装置である。
【発明の効果】
【００２１】
この発明によれば、SIMD型アーキテクチャを採用した並列計算装置において、複数のネストを持つ構造化プログラムをサポートすることができる。
【００２２】
また、請求項２に記載の本発明によれば、複数のネストに対応する判定条件を制御情報保持部に順次記憶および順次削除させることができる。これにより、複数のネストされた判定条件を持つ構造化プログラムをサポートすることができる。また判定条件において、たとえば、ＩＦ文をサポートすることができる。
【００２３】
また、請求項３に記載の本発明によれば、条件判断した結果の影響が及ぶ範囲の処理が終了する場合に、制御情報保持部に蓄積されているフラグ情報を、当該影響が及ぶ範囲に対応するフラグ情報が蓄積される前の蓄積状態に順次戻す。これにより、判定条件の影響が及ぶ範囲を考慮して、複数のネストされた判定条件を持つ構造化プログラムをサポートすることができる。
【００２４】
また、請求項４に記載の本発明によれば、制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させることにより、判定条件において、たとえば、ｅｌｓｅ文をサポートすることができる。
【００２５】
また、請求項５に記載の本発明によれば、判定条件の影響が及ぶ範囲を考慮して、複数のネストされた判定条件を持つ構造化プログラムをサポートすることができるとともに、判定条件において、たとえば、ｅｌｓｅ文をサポートすることができる。
【図面の簡単な説明】
【００２６】
【図１】この発明の一実施形態による並列計算装置の構成を示すブロック図である。
【図２】演算プロセッサーのプログラミングモデルを説明する説明図である。
【図３】演算プロセッサーの構成を示すブロック図である。
【図４】本実施形態による並列計算装置で用いる命令を示す図である。
【図５】Gフラグスタック１１の構成を示すブロック図である。
【図６】Global_Inst_en信号を用いてAccへの書き込みを制御する回路の例を示すブロック図である。
【図７】図１から図６を用いて説明したサブPEの構成を示すブロック図である。
【図８】並列計算装置１の一例としての動作を説明するためのプログラムコードを示す説明図である。
【図９】図８の場合において変数のレジスターへの割り付けを示す対応表である。
【図１０】図８のプログラムコードに出てくる命令を説明する説明図である。
【図１１】第１の条件の場合における並列計算装置の動作を示す動作図である。
【図１２】第２の条件の場合における並列計算装置の動作を示す動作図である。
【図１３】第３の条件の場合における並列計算装置の動作を示す動作図である。
【図１４】第４の条件の場合における並列計算装置の動作を示す動作図である。
【図１５】分岐の有るプログラムのフローチャートである。
【図１６】図１５のフローチャートに対応するC言語形式のプログラムコードを示す説明図である。
【図１７】図１５のフローチャートに対応する第１のアセンブラ言語形式のプログラムコードを示す説明図である。
【図１８】図１５のフローチャートに対応する第２のアセンブラ言語形式のプログラムコードを示す説明図である。
【図１９】図１８に示すプログラムコードをパイプライン化して実行する場合の動作を示すタイミングチャートである。
【図２０】２重にネストしたプログラムコードの例を示す説明図である。
【図２１】図２０のプログラムコードに対応する第２のアセンブラ言語形式のプログラムコードを示す説明図である。
【図２２】図２０のプログラムコードをネストしないように書き換えたプログラムコードを示す説明図である。
【発明を実施するための形態】
【００２７】
以下、図面を参照して、本発明の実施の形態について説明する。図１は、本実施形態による並列計算装置１の構成を示すブロック図である、並列計算装置１は、複数の演算プロセッサーPE-0〜PE-107（以下、PE-0〜PE-107とする）を有する並列演算部２と、複数の演算プロセッサーのそれぞれに制御命令を供給する命令実行制御PE-I３（以下、PE-I３とする）と、を備えている。また並列計算装置１は、IO-CPU４と、命令メモリ５と、外部メモリ９とを備えている。
【００２８】
このように１個の並列計算装置１の並列演算部２内には、１０８個の演算プロセッサー(PE-0からPE-107）が実装されている。それぞれの演算プロセッサーは、サブプロセッサーエレメントPE-A、PE-B、PE-C、PE-D（以下、PE-A、PE-B、PE-C、PE-Dとする）の４個のサブプロセッサーエレメント（以下、サブPEとする）を備えており、それぞれが異なる命令を実行するVLIW（Very Long Instruction Word）型となっている。
【００２９】
PE-I３は、命令の実行順序を制御し、プログラムループやサブルーチンコールなどの制御を行う。このPE-I３は、１０８個のPE-Aに同じ制御命令を供給する。すなわち１０８個のPE-AはSIMD型を構成しており、PE-I３から供給される制御命令に基づいて、１０８個のPE-Aの全てにおいて同一の命令が実行される。同様に、PE-I３は、１０８個のPE-B、１０８個のPE-C、および、１０８個のPE-Dに、それぞれ同じ制御命令を供給する。すなわちPE-B、PE-C、および、PE-Dも、PE-Aと同様にSIMD型を構成している。
【００３０】
このようにPE-0〜PE-107のPE-A、PE-B、PE-C、PE-Dは、それぞれSIMD型を構成しているため、並列計算装置１には、独立して動作させることができるプロセッサーとして、PE-AからPE-D及びPE-I３の５個のプロセッサーがあることになる。そのため、この並列計算装置１を動作させるアセンブラプログラムは、PE-AからPE-D及びPE-I３の５個のプロセッサーに対する５命令が並列実行されるVLIW型として記述される。
【００３１】
PE-0〜PE-107は、それぞれ、レジスターR4〜R15の１２個のレジスターを有している。PE-0〜PE-107のそれぞれにおいて、自演算プロセッサー内の４個のサブPE（PE-A, PE-B, PE-C, PE-D）は、いずれのサブPEもレジスターR4〜R15に読み書きできる。ただし、２つ以上のサブPEからレジスターR4〜R15への書き込みが重複する場合は、PE-A、PE-B、PE-C、PE-Dの優先順位で書き込みが実行される。
【００３２】
なお、後述するように、サブPE（PE-A, PE-B, PE-C, PE-D）は、それぞれ内部にアキュムレータAccを有している。PE-AのアキュムレータAccは、他のサブPEからはレジスターR0として読み出せるが、書き込むことはできない。同様に、PE-B、PE-C、PE-DのアキュムレータAccは、それぞれレジスターR1、R2、R3としてアクセスされる。
【００３３】
IO-CPU4は外部機器や外部メモリ９とのデータ入出力を制御するとともに、外部機器や外部メモリ９から入力されたデータを、PE-I３に付属する命令メモリ５に書き込む。このIO-CPU４は、たとえば、汎用CPUである。外部メモリ９には、プログラムコードまたはデータが記憶されている。また外部メモリ９には、並列演算部２で演算された結果が、IO-CPU４を介して書き込まれる。
【００３４】
上述したように並列計算装置１は、SIMD+VLIW型並列計算装置である。この並列計算装置１上で実行されるプログラムコードは、計算開始前に、IO-CPU４によって外部メモリ９から読み込まれ、PE-I３が有する命令メモリ５に書き込まれる。その後、IO-CPU４がPE-I３に計算開始信号を送ると、PE-I３は、命令メモリ５から自分自身で実行する命令と、PE-AからPE-Dで実行すべき４個の命令とを読み出して計算を開始する。
【００３５】
たとえば、PE-I３が有する命令デコーダ３２が、命令メモリ５に記憶されたプログラムコードを読み出して自分自身で実行する命令と、PE-AからPE-Dで実行すべき命令（たとえば、４個の命令）とをデコードする。
【００３６】
その後、計算対象となるデータはIO-CPU４によって外部機器や外部メモリ９から取り込まれ、並列演算部２が備えるPE-0からPE-107のプロセッサーのそれぞれに分割して転送される。たとえば、計算対象となるデータが、IO-CPU４により、PE-0からPE-107のそれぞれが有するレジスターR4〜R15に書き込まれる。この計算対象となるデータは、通常はPE-0からPE-107のそれぞれに対して異なっている。
【００３７】
その後、PE-0からPE-107のそれぞれ有するPE-AからPE-Dは、PE-I３から供給された命令に基づいて、レジスターR4〜R15に書き込まれたデータを演算する。PE-0からPE-107のそれぞれは、たとえば、計算結果をレジスターR4〜R15に書き込む。
【００３８】
その後、計算結果はIO-CPU４によって並列演算部２が備えるPE-0からPE-107のプロセッサーから読み出され、外部機器へ出力または外部メモリ９へ書き込まれる。たとえば、計算結果はPE-0からPE-107がそれぞれ有するレジスターR4〜R15に書き込まれており、IO-CPU４によって、PE-0からPE-107がそれぞれ有するレジスターR4〜R15から計算結果が読み出される。そして、IO-CPU４が、読み出した計算結果を、外部機器へ出力、または、外部メモリ９へ書き込む。
【００３９】
次に、本実施形態で用いる一例としての演算プロセッサーのプログラミングモデルを、図２を用いて説明する。サブPEのアーキテクチャはアキュムレータ方式とする。つまり、演算論理装置ALU（Arithmetic and Logic Unit）の入力データの第１の入力にはアキュムレータAccの出力が入力されており、その第１の入力はアキュムレータAccに固定であり、第２の入力だけを指定できる。また、演算結果は通常アキュムレータAccに格納される。このように限定することで命令に必要なオペランド数が減り、機械語のビット数を減らすことができる。
この図２に示すように、レジスターR4〜R15はPE-AからPE-Dに共通である。PE-AのアキュムレータAccは、PE-B、PE-C、および、PE-DのそれぞれがレジスターR0として読み出せるが、PE-B、PE-C、または、PE-Dは、レジスターR0に書き込むことはできない。同様にPE-B、PE-C、PE-DのアキュムレータAccは、レジスターR1、R2、R3としてそれぞれ読み出すことができる。また、同様に、このレジスターR1、R2、R3には、対応するPE-B、PE-C、PE-Dのみが、書き込むことができる。
【００４０】
次に、図３を用いて、演算プロセッサーPE-0〜PE-107の構成について説明する。演算プロセッサーPE-0〜PE-107のそれぞれは、同一の構成であるため、ここでは１つの演算プロセッサーの構成のみについて説明する。
【００４１】
演算プロセッサーが有する複数のサブPE（PE-A、PE-B、PE-C、PE-D）は、それぞれ、演算論理装置ALUと、セレクタSelと、アキュムレータAccとを有している。また図１を用いて説明したように、演算プロセッサーはレジスターR4〜R15を有している。
【００４２】
各サブPEにおいて、各演算論理装置ALUの第１の入力はアキュムレータAccの出力に固定されており、第２の入力は、セレクタSelにより選択されるレジスターR4〜R15のうちのいずれかのレジスター、又は、各サブPEのアキュムレータAccの出力となっている。また、演算論理装置ALUにより演算された演算結果は、通常は各アキュムレータAccに書き込まれるが、アキュムレータAccのデータをレジスターへ転送する命令を使って、レジスターR4〜R15のいずれかに書き込むことができる。但し、自サブPE以外のサブPEが有するアキュムレータAccに、書き込むことはできない。
【００４３】
ここで、本実施形態において、多重ネストを実現することができる原理について説明する。基本的な原理は、命令の実行制御を命令毎に判断するのではなく、一つのフラグ（G)を設けておき、このフラグが１ならば命令を実行し、０ならば実行しないという機構を導入する。このようにすることで命令毎の条件判断フィールド（ビット）が不要になり、オブジェクトコードをコンパクトにできる。
【００４４】
更に、このフラグにスタック構造を設けることで、多重ネストが実現できる。今後は、Gフラグスタック内の全ての値の論理積を取った信号をGフラグと呼ぶことにする。Gフラグが１の場合に命令が実行され、０の場合には命令は実行されない。プロセッサーをリセットした直後は、Gフラグスタック内の値は全て１である。
【００４５】
図４に、構造化プログラミング用に導入する６個の命令を示す。これら６個の命令は特殊で、Gフラグの値に拘らず実行される。
【００４６】
PSH命令は、オペランドにC, N, V, Zの中から任意個のコンディションフラグを指定できる。ここで、Cはキャリーフラグを示し、Nはネガティブフラグを示し、Vはオーバーフローフラグ、Zはゼロフラグを示す。このPSH命令は、Gフラグスタックを１段下にプッシュし、最上段に新たな値を設定する。例えば、「PSH C, Z」とすると、CとZフラグの論理和を取って、それが１ならば最上段を１にし、０ならば最上段を０にする。
【００４７】
PSHI命令は、Gフラグスタックを一段下にプッシュしオペランドの論理和を取った後で、それが０ならば最上段を１にし、１ならば最上段を０にする。これらの命令は「if 〜 then 文」に相当する。GINV命令は、最上段の値を反転し、「else文」に相当する。POP命令はGフラグスタックを１段上にポップし、最下層に１をセットする。これはif文の最後に相当する。POPI命令は、POP命令とGINV命令を一つに纏めたものであり、POP命令を実行した後にGINV命令を実行する。FLSH命令はGフラグスタックの内容を全て１にする。
【００４８】
図５に、サブPEが有するGフラグスタック１１の構成を示す。ここでは、１つのサブPEが有するGフラグスタック１１のみを示している。この図５の例では、Gフラグスタック１１を、フラグG0からフラグG3の４層としている。従って４層までのネスティングに対応可能である。同様の構成を有するGフラグスタック１１を、全てのサブPEが有している。なお、Gフラグスタック１１は、常に、図示されない並列計算装置１内部の基本クロックの立ち上がりで変化する。
【００４９】
図５に於いて、cnt_xxx信号はPE-I３でサブPEの命令をデコードし、同じ種類（例えばPE-A）の全てのサブPEに共通に与えられる制御信号である。このcnt_xxxとは、図５においては、cnt_PSH信号、cnt_POP信号、cnt_PSHI信号、cnt_GINV信号、cnt_FLASH信号、cnt_C_en、cnt_N_en、cnt_V_en、または、cnt_Z_en信号のことである。これらの制御信号はサブPE群毎に異なる。このcnt_xxx信号は、PE-I３から供給される制御信号である。また、これらの信号は、図４を用いて上述したPSH命令、POP命令、PSHI命令、GINV命令、FLSH命令に対応する制御信号である。
【００５０】
一方、flag_x信号は、サブPE固有のコンディションフラグとなる制御信号である。このflag_x信号とは、図５においては、flag_C信号、flag_N信号、flag_V信号、または、flag_Z信号のことである。本実施形態ではPE-Aが108個在り、サブPEが４種類在るので、１つのflag_x信号につき、合計432本の異なる信号になる。このflag_x信号は、後述するように、それぞれのサブPE内部で、演算論理装置ALUの演算結果に応じて生成される信号である。
【００５１】
system_reset信号は、システム全体をリセットする共通信号であり、この信号又はcnt_FLSH信号がアクティブになると、Gフラグスタックは全て１になる。このsystem_reset信号は、たとえば、並列計算装置１が起動またはリセットされた場合に、並列計算装置１が有する初期化を実行する初期化部から出力される。cnt_FLSH信号は、FLSH命令が発行されるとアクティブになる。このcnt_FLSH信号は、たとえば、PE-I３から供給される制御信号である。
【００５２】
この図５に示すようにGフラグスタック１１には、その制御回路として、ＡＮＤ回路１３１から１３４と１９、ＯＲ回路１２と１４と１７、および、ＥＸＯＲ回路１８とが備えられている。
【００５３】
flag_C信号とcnt_C_enとは、ＡＮＤ回路１３１の入力端子に入力される。flag_C信号とcnt_C_enと同様に、flag_N信号とcnt_N_en、flag_V信号とcnt_V_en、および、flag_Z信号とcnt_Z_enが、対応するＡＮＤ回路１３２〜１３４の入力端子にそれぞれ入力される。ＡＮＤ回路１３１〜１３４の出力は、ＯＲ回路１４の入力端子にそれぞれ入力される。
【００５４】
ＯＲ回路１４の出力は、ＥＸＯＲ回路１８の第１の入力端子に入力される。またcnt_PSHI信号が、ＥＸＯＲ回路１８の第２の入力端子と、ＯＲ回路１７の第１の入力端子とに入力される。またcnt_PSH信号が、ＯＲ回路１７の第２の入力端子に入力される。ＥＸＯＲ回路１８の出力は、Gフラグスタック１１のＤ端子に入力される。ＯＲ回路１７の出力は、Gフラグスタック１１のＰｕｓｈ端子とＬＥ端子とに入力される。
【００５５】
また、cnt_FLSH信号とsystem_reset信号とは、ＯＲ回路１２の入力端子に入力される。ＯＲ回路１２の出力は、Gフラグスタック１１のＳｅｔ端子に入力される。また、cnt_GINV信号が、Gフラグスタック１１のＩｎｖ端子に入力される。またcnt_POP信号が、Gフラグスタック１１のＰｏｐ端子に入力される。Gフラグスタック１１のＧ０からＧ３の出力は、ＡＮＤ回路１９の入力端子にそれぞれ入力される。ＡＮＤ回路１９の出力端子からは、Global_Inst_en信号（Gフラグ）が出力される。
【００５６】
次に、この図５を用いて説明したGフラグスタック１１の一例としての動作について説明する。たとえば、PSH命令が発行されると、cnt_PSH信号がアクティブになり、Gフラグスタックがプシュされる。即ち、G0の値がG1へ、G1の値がG2へ、G2の値がG3へとシフトされる。G3の値は捨てられる。同時にPSH命令のオペランド指定に応じてcnt_C_en信号、cnt_N_en信号、cnt_V_en信号、cnt_Z_en信号がアクティブになり、キャリーフラグ（C）、ネガティブフラグ（N）、オーバーフローフラグ（V）、ゼロフラグ（Z）の論理和が取られてG0に書き込まれる。PSHI命令の場合の動作は、PSH命令の場合の動作と同様であるが、各フラグの論理和を取った後で反転されてからG0に書き込まれる点が異なる。
【００５７】
GINV命令が発行されると、cnt_GINV信号がアクティブになり、G0の値が反転される。POP命令が発行されると、cnt_POP信号がアクティブになり、Gフラグスタックがポップされる。即ち、G1の値がG0へ、G2の値がG1へ、G3の値がG2へとシフトされる。G3には１がセットされる。POPI命令は、POP命令とGINV命令を同時に行う。即ち、Gフラグスタックを１段ポップして、その後で最上段のG0を反転する。G0からG3の全ての論理積を取った信号が、命令の実行制御をするGlobal_Inst_en信号（Gフラグ）として出力される。この信号はサブPE毎に異なる。
【００５８】
既に説明したように「命令を実行しない」という動作を、「演算結果を書き込まない」ということで実現できる。そこで、PE-I３が有する命令デコーダ３２から供給されるアキュムレータAccやレジスターR4〜R15のレジスター、或いはC, N, V, Zなどのコンディションフラグなどへの書き込み信号に、たとえばGlobal_Inst_en信号を論理積すれば、命令の実行制御機構を実現することができる。
【００５９】
次に図６を用いて、上述したGlobal_Inst_en信号を論理積して、アキュムレータAccへの書き込みを制御する回路の例を示す。ＡＮＤ回路９２には、PE-I３の命令デコーダ３２から出力されるアキュムレータへの書き込み信号であるcnt_Acc_wr信号と、図５を用いて説明したGlobal_Inst_en信号とが入力される。ＡＮＤ回路９２は、入力されたcnt_Acc_wr信号とGlobal_Inst_en信号との論理積をとり、その結果をのロードイネーブル信号（ＬＥ信号）として、アキュムレータAccのロードイネーブル端子（ＬＥ端子）に入力させる。このアキュムレータAccは、たとえば、ラッチ回路である。アキュムレータAccのデータ端子（Ｄ端子）には、演算論理装置ALUからの出力信号であるALU-OUT信号が入力される。このロードイネーブル信号がアクティブになると、図示されない並列計算装置１内部の基本クロックの立ち上がりでAccの出力が、データ端子に入力される値に応じて変化する。
【００６０】
次に図７を用いて、図１から図６を用いて説明したサブPEの全体としての構成について説明する。ここでは、PE-Aの構成について説明する。また、図１から図６と同様の構成には同一の符号を付し、相違点のみについて説明する。
【００６１】
この図７においては、図５を用いて説明したcnt_xxx信号を、cnt_xxx_A信号としている。またこの図７においては、図６を用いて説明したcnt_Acc_wr信号を、cnt_Acc_wr_A信号としている。更に、この図７においては、cnt_xxx信号として、cnt_C_wr_A信号、cnt_N_wr_A信号、cnt_V_wr_A信号、および、cnt_Z_wr_A信号が、PE-I３から入力される。この信号は、各フラグの値を、後述するラッチ回路でラッチするための制御信号である。
【００６２】
セレクターSelは、Acc-A信号、Acc-B信号、Acc-C信号、Acc-D信号、または、レジスターR4-R15の値に対応する信号のうちのいずれかの信号を選択する。たとえばセレクターSelは、PE-I３の命令デコーダ３２から供給される制御信号に基づいて、Acc-A信号、Acc-B信号、Acc-C信号、Acc-D信号、または、レジスターR4-R15の値に対応する信号のうちのいずれかの信号を選択する。このAcc-A信号とは、自サブPEのアキュムレータAcc（図７ではAc-A）からの出力信号である。Acc-B信号、Acc-C信号、Acc-D信号とは、自演算プロセッサー内のPE-B、PE-C、PE-Dが有するそれぞれのアキュムレータAccから出力される出力信号である。
【００６３】
演算論理装置ALUの第１の入力端子には、Acc-A信号が入力される。演算論理装置ALUの第２の入力端子には、セレクターSelで選択された信号が入力される。このようにして、演算論理装置ALUは、第１の入力を、自サブPE内のアキュムレータAccからの出力信号とし、第２の入力を、自演算プロセッサーが備えるサブPEのうちの任意に選択されたサブPE内のアキュムレータAccからの出力信号、または、レジスターR4-R15のうちの任意に選択されたレジスターとされている。
【００６４】
演算論理装置ALUによる計算結果としての出力は、アキュムレータAccのデータ端子に入力されるとともに、レジスターR4-R15のうちいずれかのレジスターにも書き込むことが可能となっている。ＡＮＤ回路９２には、図６を用いて説明したように、Global_Inst_en信号とcnt_Acc_wr信号とが入力され、その出力がアキュムレータAccのロードイネーブル端子（ＬＥ端子）に入力される。アキュムレータAccの出力は、Acc-A信号として演算論理装置ALUの第１の入力端子に入力されるとともに、自演算プロセッサーが備える他のサブPE（この場合、PE-BとPE-CとPE-D）が有するそれぞれのセレクターSelに入力される。
【００６５】
演算論理装置ALUが出力するＣ、Ｎ、Ｖ、Ｚのフラグ信号は、対応するラッチ回路９７１〜９７４のＤ端子に、それぞれ入力される。アキュムレータAccの場合と同様に、ラッチ回路９７１〜９７４のロードイネーブル端子には、対応する書き込み信号とGlobal_Inst_en信号とをＡＮＤ回路９６１〜９６４により論理積した信号が入力される。ラッチ回路９７１〜９７４からは、図５を用いて説明したflag_C信号、flag_N信号、flag_V信号、または、flag_Z信号が出力される。他の構成は、図１から図６を用いて説明した構成と同様であるため、その説明を省略する。
【００６６】
上述したＡＮＤ回路９６１〜９６４、ラッチ回路９７１〜９７４、ＡＮＤ回路１３１から１３４と１９、ＯＲ回路１２と１４と１７、および、ＥＸＯＲ回路１８により、制御部９０が構成されている。この制御部９０は、フラグ情報を、Gフラグスタック１１に順次蓄積させ、Gフラグスタック１１に蓄積されているフラグ情報の蓄積状態を、順次蓄積されたフラグ情報が蓄積される前の蓄積状態に順次戻す。ここでいうフラグ情報とは、演算論理装置ALUから出力されるフラグ情報を、ＯＲ回路１４で論理和した情報である。
【００６７】
なお、サブプロセッサーエレメントがPE-Aの場合には、ＡＮＤ回路１９の出力端子から出力されるGlobal_Inst_en信号（Gフラグ）は、レジスターR0〜R15の書き込み制御にも使われ、PE-Aがこららのレジスターに書き込むイネーブル信号とGlobal_Inst_en信号（Gフラグ）とがアンドされる。同様に、サブプロセッサーエレメントがPE-B、PE-C、または、PE-Dである場合には、ＡＮＤ回路１９の出力端子から出力されるGlobal_Inst_en信号（Gフラグ）は、それぞれにおいて、レジスターR4〜R15の書き込み制御にも使われる。これらの信号は、ＡＮＤ回路９２と同様の図示しないＡＮＤ回路によって、PE-B、PE-C、PE-DからレジスターR4〜R15の書き込み信号との論理積がとられ、レジスターR4〜R15の書き込みが制御される。
【００６８】
次に図８から図１４を用いて、上述した本実形態による並列計算装置１が、多重ネストされたプログラムを実行する場合の一例としての動作について説明する。ここでは図２０で説明した２重にネストしたプログラムコードを、図８に示すように、アセンブラで記述した場合について説明する。
【００６９】
ここで図２０のプログラムコード中の各変数は、図９に示す様に、レジスターヘ割り付けてあると仮定している。たとえば、変数「abc」をレジスターR4に割り付け、変数「def」をレジスターR5に割り付け、変数「hij」をレジスターR6に割り付け、変数「x1」をレジスターR7に割り付け、変数「x2」をレジスターR8に割り付け、変数「x3」をレジスターR9に割り付け、変数「x4」をレジスターR10に割り付けてある。
【００７０】
また、図４で説明した命令以外で図８のプログラムコードに出てくる命令については、図１０に、その命令の説明をしている。たとえば、「MVA命令」はオペランドの値をアキュムレータAccへ転送する命令である。「MV命令」はアキュムレータAccの値をオペランドへ転送する命令である。「CMP命令」はアキュムレータAccの値とオペランドの値を比較する命令である。「ADD命令」はアキュムレータAccの値とオペランドの値を加算する命令である。「CLR命令」はアキュムレータAccを0にするする命令である。「INC命令」はアキュムレータAccの値を１増加する命令である。
【００７１】
なお、図８中で、”//”という記号の後に続く記述はコメントであり、プログラムの動作を理解し易くする為のＣ言語形式に対応するプログラムコードが記載されている。このコメントは、図２０のプログラムコードに対応している。また、図８において、後述する図１１から図１４の処理に対応して、ステップＳ１からＳ６の記号が付されている。
【００７２】
次に図１１から図１４を用いて、上述した本実形態による並列計算装置１が、多重ネストされたプログラムを実行する場合の一例としての動作について説明する。この例では、ＩＦ文が２重にネストされており、第１のＩＦ文による判定結果が真の場合に、第２のＩＦ文による判定結果が真の場合と偽の場合とがあり、合計４つの場合がある。図１１は、第１のＩＦ文による判定結果が真であり、第２のＩＦ文による判定結果が真の場合に対応する。同様に、図１２は第１のＩＦ文による判定結果が真であり第２のＩＦ文による判定結果が偽の場合に対応し、図１３は第１のＩＦ文による判定結果が偽であり第２のＩＦ文による判定結果が真の場合に対応し、図１４は第１のＩＦ文による判定結果が偽であり第２のＩＦ文による判定結果が偽の場合に対応する。
【００７３】
この図１１から図１４の図においては、プログラムコードとともに、ＩＦ文の判定結果が示され、更に、図５を用いて説明したGフラグスタック１１に記憶されるフラグＧ０からＧ３の値が示されている。また、フラグＧ０からＧ３において、プッシュ動作またはプル動作により変化する箇所には斜線を付け、このスタックの最上位、すなわち、フラグＧ０の値が変化する場合には、横縞を付けている。また、プログラムコードにおいて、ＩＦ文の判定結果により実行されない箇所には、二重線を付けてある。なお、ＩＦ文の判定内容については記述を省略し、判定結果のみが示してある。また、ＩＦ文の中で実行されるプログラムコードについても、Ａ０〜Ａ４として、省略して記述してある。
【００７４】
まず、図１１の場合の場合について説明する。ステップＳ１で、第１のＩＦ文による判定が実行されるが、この第１のＩＦ文による判定結果は真であるため、Gフラグスタック１１には１がプッシュされる。この場合、フラグＧ０からＧ３の値が全て１であるため、Global_Inst_en信号が１となり、続くＡ０〜Ａ４のプログラムコードが実行される。
【００７５】
次のステップＳ２で、第２のＩＦ文による判定が実行されるが、この第２のＩＦ文による判定結果は真であるため、Gフラグスタック１１には１が更にプッシュされる。この場合、フラグＧ０からＧ３の値が全て１であるため、Global_Inst_en信号が１となり、続くＣ０〜Ｃ４のプログラムコードが実行される。
【００７６】
次のステップＳ３で、ｅｌｓｅ文に対応するGINV命令が実行され、最上位のフラグＧ０の値が１から０に反転される。この場合、フラグＧ０からＧ３の値が全て１でないため、Global_Inst_en信号が０となり、続くＤ０〜Ｄ４のプログラムコードが実行されない。
【００７７】
次のステップＳ４とＳ５で、第２のＩＦ文の最後である「｝」に対応して、ＰＯＰＩ命令が実行され、Gフラグスタック１１からポップされた後、最上位のフラグＧ０の値が１から０に反転される。この場合、フラグＧ０からＧ３の値が全て１でないため、Global_Inst_en信号が０となり、続くＢ０〜Ｂ４のプログラムコードが実行されない。
【００７８】
次のステップＳ６で、第１のＩＦ文の最後である「｝」に対応して、ＰＯＰ命令が実行され、Gフラグスタック１１からポップされ、処理が終了する。このようにして、図１１の場合には、第１のＩＦ文が真であり第２のＩＦ文が真であることに応じて、対応するＡ０〜Ａ４およびＣ０〜Ｃ４のプログラムコードのみが実行される。
【００７９】
次に、図１２の場合の場合について説明する。図１２の場合は、図１１の場合と対比して、ステップＳ２で第２のＩＦ文による判定結果が偽であり、Gフラグスタック１１に０がプッシュされる点が異なる。そのため、Gフラグスタック１１に０がプッシュされ、Global_Inst_en信号が０となるため、続くＣ０〜Ｃ４のプログラムコードが実行されない。次のステップＳ３で、ｅｌｓｅ文に対応するGINV命令が実行され、最上位のフラグＧ０の値が０から１に反転される。この場合、フラグＧ０からＧ３の値が全て１となるため、Global_Inst_en信号が１となり、続くＤ０〜Ｄ４のプログラムコードが実行される。以降は、図１２と図１１とは同様である。
【００８０】
このようにして図１２の場合は、Ｃ０〜Ｃ４のプログラムコードが実行されず、Ｄ０〜Ｄ４のプログラムコードが実行される点が異なる。よって、図１２の場合には、第１のＩＦ文が真であり第２のＩＦ文が偽であることに応じて、対応するＡ０〜Ａ４およびＤ０〜Ｄ４のプログラムコードのみが実行される。
【００８１】
次に、図１３と図１４との場合の場合について説明する。図１３と図１４との場合は、図１１の場合と対比して、ステップＳ１で第１のＩＦ文による判定結果が偽であり、Gフラグスタック１１には０がプッシュされる点が異なる。この場合、フラグＧ０からＧ３の値が全て１ではないため、Global_Inst_en信号が０となり、続くＡ０〜Ａ４のプログラムコードが実行されない。
【００８２】
その後ステップＳ２で、第２のＩＦ文による判定が実行され、第２のＩＦ文による判定結果がGフラグスタック１１に更にプッシュされる。しかし、この第２のＩＦ文による判定結果が真であっても偽であっても、Gフラグスタック１１のフラグＧ１には、第１のＩＦ文の判定結果である０がスタックされている。そのため、第２のＩＦ文による判定結果が真であっても偽であっても、すなわち、Gフラグスタック１１のフラグＧ０に１がスタックされても０がスタックされても、Global_Inst_en信号が０となり、続くＣ０〜Ｃ４およびＤ０からＤ４のいずれも実行されない。
なお、第１のＩＦ文が偽の場合、第２のＩＦ文の判定そのものが正しくない。これは、ＰＳＨ命令またはＰＳＨＩ命令の直前の、例えばＣＭＰ命令が実行されないからである。しかし、いずれにせよ、第２のＩＦ文以降のプログラムコード（Ｃ０〜Ｃ４およびＤ０からＤ４）は、全く実行されないので、問題は生じることがない。
【００８３】
その後、ステップＳ４とＳ５で、第２のＩＦ文の最後である「｝」に対応して、ＰＯＰＩ命令が実行され、Gフラグスタック１１からポップされた後、最上位のフラグＧ０の値が０から１に反転される。この場合、フラグＧ０からＧ３の値が全て１である、Global_Inst_en信号が１となり、続くＢ０〜Ｂ４のプログラムコードが実行される。
【００８４】
図１１から図１４を用いて説明したように、図１から図７を用いて説明した並列計算装置１は、演算プロセッサーPE-0〜PE-107のそれぞれが有するGフラグスタック１１を用いて、多重ネストにより生じるフラグを自Gフラグスタック１１に順次蓄積し、その順次蓄積したフラグの値に基づいて、自演算プロセッサーでの演算を制御する。そのため、演算プロセッサーPE-0〜PE-107のそれぞれに供給されるデータが異なり、たとえばデータの大小関係によりプログラムコードの分岐が異なるようになる場合であっても、また、この分岐により多重ネストが生じるような場合であっても、それぞれの演算プロセッサーで、演算を制御することが可能である。
【００８５】
以上、図１から図１４を用いて説明したように、本実施形態による並列計算装置１は、多重ネストされた複数のＩＦ文の判定結果を、Gフラグスタック１１に順にスタックしつつ、スタックされた判定結果の論理積であるGlobal_Inst_en信号に基づいて、ＩＦ文に続く次の命令を実行する、または、実行しないという制御をする。これにより、本実施形態による並列計算装置１は、多重ネストされた構造化プログラムを、容易に実行することができる。また、本実施形態による並列計算装置１に対応するプログラムを生成するコンパイラまたはプログラマーは、多重ネストされた構造化プログラムコードを、容易に作成することが可能となる。
【００８６】
なお、上述した図８のプログラムコードの実行は、演算プロセッサーPE-0〜PE-107がそれぞれ有するPE-A、PE-B、PE-C、PE-Dのうちのいずれか１つのサブプロセッサーエレメントを用いて実行されるようにしてもよいし、プログラムコードのうち互いに依存性の無いプログラムコードを、PE-A、PE-B、PE-C、PE-Dのうちのいずれかのサブプロセッサーエレメントに割り当てて、複数のサブプロセッサーエレメントを用いて並列に実行されるようにしてもよい。
【００８７】
また並列計算装置１は多重ネストされた構造化プログラムを容易に実行することができるようになっているために、並列計算装置１を用いる場合、構造化されたプログラムを、容易にアセンブラコードに変換できる。即ち容易に機械語に変換できる。このように、本実施形態による並列計算装置１は、SIMD型アーキテクチャを採用した並列計算装置において、複数のネストを持つ構造化プログラムをサポートするハードウェアを容易に実現できる。
【００８８】
なお、上述した実施形態の説明においては、１個の並列計算装置１の並列演算部２内が、PE-0〜PE-107の１０８個の演算プロセッサーを有する場合について説明したが、演算プロセッサーの個数は任意である。また、演算プロセッサーが、PE-A、PE-B、PE-C、PE-Dの４個のサブプロセッサーエレメントを有する場合について説明したが、このサブプロセッサーエレメントの個数も任意である。また、上記のGフラグスタック１１がフラグG0からフラグG3の４層のスタックを有する場合について説明したが、このスタックの段数も任意である。
【００８９】
なお、上述した実施形態においては、正論理の場合について説明し、Gフラグスタック１１のＧ０からＧ３の出力はＡＮＤ回路１９の入力端子に入力されるものとして説明したが、負論理の場合においては、ＡＮＤ回路１９の代わりに、ＯＲ回路を用いてもよい。また、正論理の場合に、ＡＮＤ回路１９に代わってＮＡＮＤ回路を用いてもよいし、負論理の場合に、上述したＯＲ回路の代わりにＮＯＲ回路を用いてもよい。このように、ＡＮＤ回路１９の代わりに、Gフラグスタック１１のＧ０からＧ３の出力を合成する合成回路を用いてもよい。
【００９０】
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
【符号の説明】
【００９１】
１…並列計算装置、２…並列演算部、３…PE-I（制御信号生成部）、４…IO-CPU、５…命令メモリ、９…外部メモリ、１１…Gフラグスタック、１２、１４、１７…ＯＲ回路、１８…ＥＸＯＲ回路、１９…ＡＮＤ回路（合成部）、３２…命令デコーダ、９０…制御部、Acc…アキュムレータ、ALU…演算論理装置、Sel…セレクタ、PE-0〜PE-107…演算プロセッサー、PE-A、PE-B、PE-C、PE-D（演算部）
【図１】
2010257200.tif 000003
【図２】
2010257200.tif 000004
【図３】
2010257200.tif 000005
【図４】
2010257200.tif 000006
【図５】
2010257200.tif 000007
【図６】
2010257200.tif 000008
【図７】
2010257200.tif 000009
【図８】
2010257200.tif 000010
【図９】
2010257200.tif 000011
【図１０】
2010257200.tif 000012
【図１１】
2010257200.tif 000013
【図１２】
2010257200.tif 000014
【図１３】
2010257200.tif 000015
【図１４】
2010257200.tif 000016
【図１５】
2010257200.tif 000017
【図１６】
2010257200.tif 000018
【図１７】
2010257200.tif 000019
【図１８】
2010257200.tif 000020
【図１９】
2010257200.tif 000021
【図２０】
2010257200.tif 000022
【図２１】
2010257200.tif 000023
【図２２】
2010257200.tif 000024