(57)【要約】【課題】複数のネストを持つ構造化プログラムを容易に実行することができる並列計算装置を提供する。【解決手段】並列計算装置は、複数の演算プロセッサーのそれぞれが、複数のサブプロセッサーを用いて並列演算処理を行う。サブプロセッサー（ＳＰＥ）１０２Ａは、入力されたデータを制御命令に基づいて演算処理するＡＬＵ９５Ａと、演算処理された結果に基づいたフラグ情報が順次蓄積されるＧフラグスタック１１と、蓄積されたフラグ情報を合成部１９が合成した合成フラグ情報に基づいてＡＬＵ９５Ａに演算処理させるＳＰＥ制御部１９９Ａとを備える。サブプロセッサー１０２Ｂは、入力されたデータを前記制御命令に基づいて演算処理するＡＬＵ９５Ｂと、合成部１９が合成した合成フラグ情報に基づいてＡＬＵ９５Ｂに演算処理させるＳＰＥ制御部１９９Ｂとを備える。【選択図】図１１
2010271799.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の値を加えている。図４１は図４０のフローチャートをＣ言語で記述したものある。こうした記述方法は構造化プログラミングと呼ばれている。図４２は図４１のコードを計算機の機械語に近いアセンブラ言語へ変換したものである。ここでは、変数abcをレジスターR2（レジスター2）に、変数defをレジスターR3に、変数x1をレジスターR4に、変数x2をレジスターR5に、それぞれＣコンパイラーが割り付けたと仮定している。図４２で注意すべき点は、図４０のフローを実装する為に、条件ジャンプ命令BGT（比較結果が大きかった場合にジャンプする）を用いていることである。因みに、BR命令は常にジャンプする命令である。
【０００７】
ところでSIMD型アーキテクチャでは、並列計算する場合において、条件ジャンプ命令を使ってプログラム分岐を実装することができない。例えば、８個のプロセッサーで構成されるSIMD型計算機を考える。レジスターR2やレジスターR3は８個のプロセッサーでそれぞれ別なので、それらに格納されているデータは異なる。したがって、レジスター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 cost-effective 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型アーキテクチャの技術ではネストした構造化プログラミングへの対応が困難となる。
【００１４】
すなわち、従来の技術においては、並列計算装置において、複数のネストを持つ構造化プログラムを容易に実行することが難しいという問題があった。
【００１５】
本発明は、このような事情に鑑みてなされたもので、その目的は、複数のネストを持つ構造化プログラムを容易に実行できる並列計算装置を提供することにある。
【課題を解決するための手段】
【００１６】
上記問題を解決するために、請求項１に記載した発明は、並列して演算処理を行う複数の演算プロセッサー（例えば、実施の形態における演算プロセッサーＰＥ１０２）と、前記複数の演算プロセッサーのそれぞれに制御命令を供給する制御信号生成部（例えば、実施の形態における制御信号生成部（ＰＥ-Ｉ）３）と、を備え、前記複数の演算プロセッサーのそれぞれが、入力されたデータを前記制御命令に基づいて演算処理する第１演算部（例えば、実施の形態におけるＡＬＵ９５Ａ）と、スタック構造であり、演算処理された結果に基づいたフラグ情報が順次蓄積される第１制御情報保持部（例えば、実施の形態におけるＧフラグスタック１１）と、前記第１制御情報保持部に蓄積されたフラグ情報を合成する第１合成部（例えば、実施の形態における合成部１９）と、前記第１合成部が合成した合成フラグ情報に基づいて前記第１演算部に演算処理させる第１制御部（例えば、実施の形態におけるＳＰＥ制御部１９９Ａ）と、を備える特定サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ１０２Ａ）と、入力されたデータを前記制御命令に基づいて演算処理する第２演算部（例えば、実施の形態におけるＡＬＵ９５Ｂ〜９５Ｄ）と、前記第１合成部が合成した合成フラグ情報に基づいて前記第２演算部に演算処理させる第２制御部（例えば、実施の形態におけるＳＰＥ制御部１９９Ｂ〜１９９Ｄ）と、を備えるサブプロセッサー（例えば、実施の形態におけるＳＰＥ１０２Ｂ〜ＳＰＥ１０２Ｄ）と、を備えることを特徴とする並列計算装置（例えば、実施の形態における並列計算装置１）である。
【００１７】
請求項２に記載した発明は、前記サブプロセッサー（例えば、実施の形態におけるＳＰＥ２０２Ｂ〜ＳＰＥ２０２Ｄ）は、前記演算プロセッサーごとに蓄積され、前記第１合成部によって合成された合成フラグ情報によって該サブプロセッサーの命令を実行するか否かを選択する選択部（例えば、実施の形態における実行選択部２４Ｂ〜２４Ｄ）を備え、前記第２制御部（例えば、実施の形態におけるＳＰＥ制御部２９９Ｂ〜２９９Ｄ）が、前記選択部で選択されたフラグ情報に応じて、前記特定サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ２０２Ａ）と同期して第２演算部（例えば、実施の形態におけるＡＬＵ９５Ｂ〜９５Ｄ）に命令を実行させることを特徴とする。
【００１８】
請求項３に記載した発明は、前記サブプロセッサー（例えば、実施の形態におけるＳＰＥ３０２Ｂ〜ＳＰＥ３０２Ｄ）は、スタック構造であり、演算処理された結果に基づいたフラグ情報が順次蓄積される第２制御情報保持部（例えば、実施の形態におけるＧフラグスタック１１Ｂ）と、前記第２制御情報保持部に蓄積されたフラグ情報を合成する第２合成部（例えば、実施の形態における合成部１９Ｂ）と、前記演算プロセッサー内の前記特定サブプロセッサーの前記第１制御情報保持部及び自サブプロセッサーの前記第２制御情報保持部のいずれかに保持され、合成された合成フラグ情報を選択する選択部（例えば、実施の形態における実行選択部３４Ｂ）と、を備え、前記第２制御部（例えば、実施の形態におけるＳＰＥ制御部３９９Ｂ）が、前記選択部で選択されたフラグ情報に応じて、前記特定サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ３０２Ａ）と同期して第２演算部に命令を実行させることを特徴とする。
【００１９】
請求項４に記載した発明は、前記サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ４０２Ｂ〜ＳＰＥ４０２Ｄ）は、スタック構造であり、演算処理された結果に基づいたフラグ情報が順次蓄積される第２制御情報保持部（例えば、実施の形態におけるＧフラグスタック１１Ｂ）と、前記第２制御情報保持部に蓄積されたフラグ情報を合成する第２合成部（例えば、実施の形態における合成部１９Ｂ）と、前記演算プロセッサー内の前記特定サブプロセッサーの前記第１制御情報保持部及び任意のサブプロセッサーの前記第２制御情報保持部のいずれかに保持され、合成された合成フラグ情報を選択する選択部（例えば、実施の形態における実行選択部４４Ｂ）と、を備え、前記第１制御部又は第２制御部（例えば、実施の形態におけるＳＰＥ制御部４９９Ａ又は４９９Ｂ）が、前記選択部により選択されたフラグ情報に応じて、該フラグ情報を保持していた前記特定サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ４０２Ａ）及び前記サブプロセッサーと同期して前記第１演算部又は前記第２演算部に命令を実行させることを特徴とする。
【００２０】
請求項５に記載した発明は、前記サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ５０２Ｂ）は、前記特定サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ５０２Ａ）が蓄積するフラグ情報及び前記第２演算部におけるフラグ情報のいずれかを選択する選択部（例えば、実施の形態における実行選択部５５Ｂ）と、スタック構造であり、前記選択部によって選択された結果に基づいたフラグ情報が前記スタック構造に、前記特定サブプロセッサーと同期して順次蓄積される第２制御情報保持部（例えば、実施の形態におけるＧフラグスタック５１Ｂ）と、前記第２制御情報保持部に蓄積されたフラグ情報を合成する第２合成部（例えば、実施の形態における合成部５９Ｂ）と、を備えることを特徴とする。
【００２１】
請求項６に記載した発明は、前記サブプロセッサー（例えば、実施の形態におけるＳＰＥ６０２Ｂ）は、前記特定サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ６０２Ａ）及び任意のサブプロセッサー（例えば、実施の形態におけるＳＰＥ６０２Ｂ〜ＳＰＥ６０２Ｄ）が蓄積するフラグ情報のいずれかを選択する選択部（例えば、実施の形態における実行選択部６４５Ｂ）と、スタック構造であり、前記選択部によって選択された結果に基づいたフラグ情報が前記スタック構造に、選択されたフラグ情報を蓄積する前記特定サブプロセッサー及び任意のサブプロセッサーのいずれかと同期して順次蓄積される第２制御情報保持部（例えば、実施の形態におけるＧフラグスタック５１Ｂ）と、前記第２制御情報保持部に蓄積されたフラグ情報を合成する第２合成部（例えば、実施の形態における合成部５９Ｂ〜５９Ｄ）と、を備えることを特徴とする。
【００２２】
請求項７に記載した発明は、前記サブプロセッサー（例えば、実施の形態におけるサブプロセッサーＳＰＥ７０２Ｂ〜ＳＰＥ７０２Ｄ）は、入力される前記合成フラグ情報、前記合成フラグ情報を反転した反転フラグ情報、常に命令実行を可能にするフラグ情報のいずれかを選択する選択部（例えば、実施の形態における処理選択部７５Ｂ〜７５Ｄ）と、を備え、前記第２制御部（例えば、実施の形態におけるＳＰＥ制御部７９９Ｂ〜７９９Ｄ）は、前記選択部によって選択された結果に応じて前記第２演算部に命令を実行させることを特徴とする。
【発明の効果】
【００２３】
請求項１から請求項７に記載した発明によれば、本発明の技術を使うことで、SIMD型にVLIW型を組み合わせた並列計算装置において、多重にネストした構造化プログラムをサポートするハードウェアを容易に実現できる。したがって、多数の演算素子（プロセッサー）を効率的に並列動作させられるので、科学技術計算や画像処理に必要とされる数Tflops又は数100GOPSの演算能力を持つ並列計算装置を容易に実現できる。
【図面の簡単な説明】
【００２４】
【図１】本発明の第１実施形態を示す概略ブロック図である。
【図２】本発明の実施形態による演算プロセッサー２における各サブプロセッサーが参照可能な記憶部を示す図である。
【図３】本発明の実施形態による演算プロセッサー２の構成を示すブロック図である。
【図４】本発明の実施形態による構造化プログラミング用に導入する６個の命令を示す。
【図５】本発明の実施形態によるフラグ処理部の構成例を示すブロック図である。  る。
【図６】本発明の実施形態によるアキュムレータへの書き込み制御回路の構成例を示すブロック図である。
【図７】本発明の実施形態によるプログラム例を示す。
【図８】第1実施形態のプログラム例の変数とレジスターとの対応を示す。
【図９】第1実施形態のプログラム例の命令の動作を示す。
【図１０】第1実施形態の並列計算装置１の演算処理部の概略構成を示すブロック図である。
【図１１】第1実施形態の演算プロセッサーにおける演算制御処理を行う構成を示すブロック図である。
【図１２】第1実施形態のＧフラグ処理部とＳＰＥ制御部を示すブロック図である。
【図１３】第１実施形態による高速化処理が行えるプログラムを示す。
【図１４】第１実施形態による並列演算処理のプログラムを示す。
【図１５】第２実施形態の並列計算装置１の演算処理部の概略構成を示すブロック図である。
【図１６】第２実施形態の構成において追加する命令を示す。
【図１７】第２実施形態のＧフラグ処理部とＳＰＥ制御部を示すブロック図である。
【図１８】第２実施形態の並列計算装置１において、図１３のプログラムを実行するために４並列処理を行うVLIW型用に変換した例を示す。
【図１９】第３実施形態の並列計算装置１の演算処理部の概略構成を示すブロック図である。
【図２０】第３実施形態の構成において追加する命令を示す。
【図２１】第３実施形態のＧフラグ処理部とＳＰＥ制御部を示すブロック図である。
【図２２】第３実施形態の並列計算装置１において、図１３のプログラムを実行するために４並列処理を行うVLIW型用に変換した例を示す。
【図２３】第４実施形態の並列計算装置１の演算処理部の概略構成を示すブロック図である。
【図２４】第４実施形態の構成において追加する命令を示す。
【図２５】第４実施形態のＧフラグ処理部とＳＰＥ制御部を示すブロック図である。
【図２６】第４実施形態のセレクターの制御を示す図である。
【図２７】第４実施形態の並列計算装置１において、図１３のプログラムを実行するために４並列のVLIW型用に変換した例を示す。
【図２８】第５実施形態の並列計算装置１の演算処理部の概略構成を示すブロック図である。
【図２９】第５実施形態の構成において追加する命令を示す。
【図３０】第５実施形態のＳＰＥの同期化回路を示すブロック図である。
【図３１】第５実施形態の図１３のプログラムを並列化した例を示す。
【図３２】第６実施形態の並列計算装置１の演算処理部の概略構成を示すブロック図である。
【図３３】第６実施形態の構成において追加する命令を示す。
【図３４】第６実施形態のＳＰＥの同期化回路を示すブロック図である。
【図３５】第６実施形態の並列計算装置１において、図１３のプログラムを実行するために４並列のVLIW型用に変換した例を示す。
【図３６】第７実施形態の並列計算装置１の演算処理部の概略構成を示すブロック図である。
【図３７】第７実施形態の構成において追加する命令を示す。
【図３８】第７実施形態のＳＰＥの同期化回路を示すブロック図である。
【図３９】第７実施形態の並列計算装置１において、図１３のプログラムを実行するために４並列のVLIW型用に変換した例を示す。
【図４０】分岐の有るプログラムのフローチャートの一部である。
【図４１】図４０のフローチャートをＣ言語で記述したものある。
【図４２】図４１のコードを計算機の機械語に近いアセンブラ言語へ変換したものである。
【図４３】図４１のコードを計算機の機械語に近いアセンブラ言語へ変換したものである。
【図４４】従来技術によるプログラム例によるタイミングチャートを示す。
【図４５】従来技術によるプログラム例を示す。
【図４６】従来技術によるプログラム例を示す。
【図４７】従来技術によるプログラム例を示す。
【発明を実施するための形態】
【００２５】
（第１実施形態）
図を参照し、並列計算装置の一実施形態について示す。
図１は、本発明の第１実施形態を示す概略ブロック図である。
この図に示される並列計算装置１は、演算処理部１００に含まれる複数のプロセッサーによって並列処理を行う。各実施形態の詳細な説明に先立ち、並列計算装置１の構成概要について説明する。
並列計算装置１は、演算処理部１００、ＩＯ−ＣＰＵ４、命令メモリ５、外部メモリ９を備える。
演算処理部１００は、１０８個の演算プロセッサー（ＰＥ）２−０〜２−１０７（まとめて「演算プロセッサー（ＰＥ）２」という。）、及びＰＥ２のそれぞれに制御命令を供給する制御信号生成部（ＰＥ−Ｉ）３が実装されている。
【００２６】
演算プロセッサー２は、それぞれが４個のサブプロセッサー（ＳＰＥ）２Ａ〜２Ｄを有する。
ＳＰＥ２Ａ〜２Ｄは、それぞれが異なる命令を実行するVLIW（Very Long Instruction Word）型の構成を有している。それぞれのＰＥ２は、ＳＰＥが組み合わされた同じ構成である。また、全てのＰＥ２が有する１０８個のＳＰＥ２Ａは、SIMD(Single Instruction Multi Data)型で構成され、全てのＳＰＥ２Ａで同一の命令を実行する。また、ＳＰＥ２Ｂ、ＳＰＥ２Ｃ、ＳＰＥ２Ｄについても同様である。
それらのＳＰＥ２Ａ〜２Ｄは、構成の異なる２種類のＳＰＥの組み合わせで構成される。演算プロセッサー２の基本制御機能を有するＳＰＥ２Ａと、ＳＰＥ２Ａの制御を受けるＳＰＥ２Ｂ〜ＳＰＥ２Ｄの組み合わせを例にして説明する。
【００２７】
制御信号生成部（ＰＥ−Ｉ）３は、演算プロセッサー２の命令の実行順序を制御する。
ＰＥ−Ｉ３は、演算プロセッサー２のプログラムにおけるループ処理やサブルーチンコールなどの条件分岐を必要とする処理の制御を行う。ＰＥ-Ｉ３及びＰＥ２の命令をアセンブラプログラムで記述すると、ＳＰＥ２ＡからＳＰＥ２Ｄ及びＰＥ-Ｉ３の命令の５命令を並列に実行するVLIW型の命令として記述される。
SIMD+VLIW型の並列計算装置１で実行されるプログラムコードは、計算開始前にＩＯ−ＣＰＵ４によって外部メモリ９から予め読み込まれ、ＰＥ-Ｉ３に付属する命令メモリ５に書き込まれる。その後、ＩＯ−ＣＰＵ４がＰＥ-Ｉ３に計算開始信号を送ると、ＰＥ-Ｉ３は命令メモリから自分自身で実行する命令と、ＳＰＥ２ＡからＳＰＥ２Ｄで実行すべき４個の命令とを読み出して計算を開始する。計算対象のデータはＩＯ−ＣＰＵ４によって外部から取り込まれ、ＰＥ２のデータ入力レジスターにそれぞれ分割して転送される。また、計算結果はＩＯ−ＣＰＵ４によって演算処理部１００から読み出され、外部機器又は外部メモリ９へ転送される。
このように、演算処理部１００における複数のＰＥ２は、並列して演算処理を行うことができる。
【００２８】
図を参照し演算プロセッサー２のプログラミングモデルを説明する。
図２は、本発明の実施形態における演算プロセッサー２における各サブプロセッサーが参照可能な記憶部を示す図である。この図に示されるＲ０からＲ１５は、各ＳＰＥが参照できる記憶領域を示す。
【００２９】
各サブプロセッサーは、アキュムレータ（Ａｃｃ）方式で形成されている。つまり、ＡＬＵ（Arithmetic and Logic Unit）の入力の一方はＡｃｃに固定され、他方の入力だけ入力するデータの参照先を指定することできる。また、演算結果は通常、Ａｃｃに格納される。このように限定することで命令に必要なオペランドを少なくでき、機械語のビット数を減らすことができる。
４個のＳＰＥから共通に参照可能な１２個のレジスターR4〜R15がある。これらのレジスターは各ＳＰＥから読み書きできるが、２つ以上のＳＰＥからの書き込み処理が重なる場合は、ＳＰＥ２Ａ、ＳＰＥ２Ｂ、ＳＰＥ２Ｃ、ＳＰＥ２Ｄの順で優先的に処理される。ＳＰＥ２ＡのＡｃｃは、ＳＰＥ２Ａが参照するほかに、他のＳＰＥからはレジスターR0として参照することにより読み出すことができる。また、ＳＰＥ２ＡのＡｃｃは、ＳＰＥ２Ａは書き込むことができるが、ＳＰＥ２Ａ以外のＳＰＥからは書き込むことはできない。同様に、ＳＰＥ２Ｂ、ＳＰＥ２Ｃ、ＳＰＥ２ＤのＡｃｃは、それぞれレジスターR1、R2、R3として参照することにより読み出すことができるが、同じＳＰＥにないＡｃｃには書き込むことはできない。
【００３０】
図３は、本発明の実施形態における演算プロセッサー２の構成を示すブロック図である。
演算プロセッサー２は、ＳＰＥ２Ａ〜２Ｄと、各ＳＰＥから参照されるレジスター９１を備える
ＳＰＥ２Ａは、Ａｃｃ９３Ａ、セレクター９４Ａ、ＡＬＵ９５Ａ、フラグレジスター９７Ａ、ＳＰＥ制御部９９Ａを備える。同様に、ＳＰＥ２Ｂは、Ａｃｃ９３Ｂ、セレクター９４Ｂ、ＡＬＵ９５Ｂ、フラグレジスター９７Ｂ、ＳＰＥ制御部９９Ｂを備える。ＳＰＥ２Ｃは、Ａｃｃ９３Ｃ、セレクター９４Ｃ、ＡＬＵ９５Ｃ、フラグレジスター９７Ｃ、制御部９９Ｃを備える。ＳＰＥ２Ｄは、Ａｃｃ９３Ｄ、セレクター９４Ｄ、ＡＬＵ９５Ｄ、フラグレジスター９７Ｄ、制御部９９Ｄを備える。
Ａｃｃ９３Ａ〜Ａｃｃ９３Ｄは、ＡＬＵ９５Ａ〜９５Ｄが参照するアキュムレータである。セレクター９４Ａ〜９４Ｄは、Ａｃｃ９３Ａ〜Ａｃｃ９３Ｄからの入力を選択する。ＡＬＵ９５Ａ〜９５Ｄは、各ＳＰＥにおいて演算を行うＡＬＵである。
【００３１】
まず、ＳＰＥ２Ａ〜２Ｄに共通する構成について示し、ＳＰＥ２Ａを代表して説明する。
ＳＰＥ２Ａにおいて、ＡＬＵ９５Ａの一方の入力は、Ａｃｃ９３Ａからのデータが供給される。ＡＬＵ９５Ａの他方の入力は、セレクター９４Ａにより、レジスター９１、Ａｃｃ９３ＡとＡｃｃ９３ＢとＡｃｃ９３ＣとＡｃｃ９３Ｄからのデータが選択され供給される。ＡＬＵ９５Ａによる演算結果は通常はＡｃｃ９３Ａに書き込まれるが、Ａｃｃ９３Ａのデータをレジスター９１へ転送する命令を使って、レジスターR4〜R15のいずれかを選択して書き込むことができる。但し、ＳＰＥ２Ａ以外の他のＳＰＥのＡｃｃ９３Ｂ〜Ａｃｃ９３Ｄに書き込むことはできない。
ＳＰＥ２Ｂ〜ＳＰＥ２Ｄにおいても、ＳＰＥ２Ａと同じ構成を有する。
【００３２】
また、フラグレジスター９７Ａは、ＡＬＵ９５Ａにおける演算処理の結果を示すフラグの値を記録し、保持する。フラグレジスター９７Ａが保持するフラグは、ＡＬＵ９５Ａが出力する４つのフラグ（Ｃ、Ｎ、Ｖ、Ｚ）がある。Ｃ（キャリー）フラグは、演算結果に桁上がりが生じたことを示す。Ｎ（ネガティブ）フラグは、演算処理により値が負となったことを示す。Ｖ（オーバーフロー）フラグは、演算処理により値がオーバーフローしたことを示す。Ｚ（ゼロ）フラグは、演算処理により値が０になったことを示す。
【００３３】
制御部９９Ａは、フラグレジスター９７Ａなどに記録されているフラグの値や、ＰＥ-Ｉ３からの制御により、アキュムレータＡｃｃ９３Ａやレジスター９１（R4-R15）及びフラグレジスター９７Ａを制御する。
なお、フラグレジスター９７Ａ〜９７Ｄ及び制御部９９Ａ〜９９Ｄは、構成、機能の定義を代えることにより、いくつかの並列処理の方法を設定することができる。詳細については、以下に示す実施形態を参照する。
【００３４】
続いて、並列計算装置１における多重ネスト（入れ子）を可能とする条件分岐処理を実現する構成例について説明する。
各実施形態に共通する基本構成として、各ＡＬＵにおける命令の実行制御を命令ごとに判断するのではなく、一つのフラグ（Ｇ)を設けて、その値が「１」ならば命令を実行し、「０」ならば実行しないという判定を行うこととする。このような構成にすることで命令ごとの条件判断フィールド（ビット）が不要になり、オブジェクトコードをコンパクトにできる。さらに、スタック構造を設けたＧフラグスタックによってこのフラグの値を保持することで、ＰＥ２の処理は、多重ネストを可能とする条件分岐処理が実現できる。
また、Ｇフラグスタック内に保持される全ての値の論理積を取った信号をＧフラグと呼ぶことにする。各ＳＰＥでは、Ｇフラグの値が「１」の場合に命令を実行し、「０」の場合には命令は実行しないように制御することが容易になる。また、ＰＥ２をリセット（初期化）した直後は、Ｇフラグスタック内の値は全て１とする。これにより、リセット直後の命令の実行は、Ｇフラグにより制限されることはない。
【００３５】
図４は、本発明の実施形態における構造化プログラミング用に導入する６個の命令を示す。
これら６個の命令は、Ｇフラグの値に拘らず実行される。
「PSH」命令はオペランドにＣ、Ｎ、Ｖ、Ｚの各コンディションフラグの中から任意の数のコンディションフラグを選択し、条件判定の条件に指定できる。この命令はＧフラグスタックを１段下にプッシュし、最上段に新たな値を設定する。例えば、「PSH C, Z」命令とすると、Ｃ（キャリー）フラグとＺ（ゼロ）フラグの論理和を取って、それが「１」ならばＧフラグスタックの最上段の値を１にし、「０」ならば最上段の値を０にする。
「PSHI」命令は、Ｇフラグスタックを１段下にプッシュし、最上段に新たな値を設定する。この命令は、オペランド指定されたフラグの論理和を取った後で、それが「０」ならば、Ｇフラグスタックの最上段の値を１にし、「１」ならば最上段の値を０にする。これらの命令は「if 〜 then 文」によって示される処理に相当する。
「GINV」命令は、Ｇフラグスタックの最上段の値を反転するので、「else文」に相当する。
「POP」命令は、Ｇフラグスタックを１段上にポップ(シフト)し、最下層に１をセットする。これは「if文」の最後に相当する。
「POPI」命令は、「POP」命令と「GINV」命令を一つに纏めたものである。
「FLSH」命令は、Ｇフラグスタックに保持される値を全て１にする。
【００３６】
図５は、本発明の実施形態におけるフラグ処理部の構成例を示すブロック図である。
図に示されるフラグ処理部１０は、Ｇフラグスタック１１、ＯＲ回路１２、ＡＮＤ回路１３、ＯＲ回路１４、ＯＲ回路１７、ＥＸＯＲ回路１８及び合成部（ＡＮＤ回路）１９が示されている。フラグ処理部１０は、ＰＥごとに少なくとも１個が設けられる。
Ｇフラグスタック１１は、フラグの値を記憶するスタック構造化された記憶部である。例としてスタックの階層を４層として示す。したがって、４層までのネスティングに対応可能である。同様の構成が全てのＰＥ２に必要である。Ｇフラグスタックは常に、図示されない並列計算装置１内部の基本クロックの立ち上がりで変化する。
【００３７】
図において、cnt_xxxとして示す信号はＰＥ-Ｉ３でＰＥ２の命令をデコードし、各ＰＥ２に含まれる同じ種類（例えばＳＰＥ２Ａ）の全てのＳＰＥに共通に与えられる制御信号である。上記の同じ種類の全てのＳＰＥは、ＳＩＭＤ構成により同じ命令による処理が並列処理されるものであり、その単位でＳＰＥ群を形成する。これらの制御信号は、ＳＰＥ群ごとに異なる。
一方、flag_xとして示す信号は、ＡＬＵ（例えば、図２におけるＡＬＵ９５Ａ）が出力したコンディションフラグをフラグレジスター（例えば、図２におけるフラグレジスター９７Ａ）で保持した値を出力する出力信号を示す。flag_xという信号は、個々のＳＰＥから出力される固有のコンディションフラグの値を示す信号である。したがって、全てのＳＰＥにそれぞれフラグレジスターを配置した構成では、ＰＥ２が１０８個在り、各ＰＥ２にＳＰＥが４個在るので、合計４３２本の異なる信号になる。
system_resetとして示す信号は、並列計算装置１のシステム全体をリセットする共通信号であり、この信号又はcnt_FLSH信号がアクティブになると、Ｇフラグスタックの値は全て１になる。
cnt_FLSH信号は、「FLSH」命令が発行されるとアクティブになる。
【００３８】
「PSH」命令が発行されるとcnt_PSH信号がアクティブになり、Ｇフラグスタックがプシュされる。すなわち、スタック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信号がアクティブになり、Ｇフラグスタックがポップされる。すなわち、スタックG1に保持された値がスタックG0へ、スタックG2に保持された値がスタックG1へ、スタックG3に保持された値がスタックG2へとシフトされる。また、スタックG3には１がセットされる。
「POPI」命令は、「POP」命令と「GINV」命令を組み合わせて一度に行う。すなわち、Ｇフラグスタックを１段ポップして、その後で最上段のスタックG0を反転する。
合成部１９は、スタックG0からスタックG3の全ての値の論理積を取った結果を示す信号が、命令の実行を制御する信号Global_Inst_en（Ｇフラグ）になる。この信号はＳＰＥごとに異なる。
【００４０】
ＰＥ２の制御において、「命令を実行しない」という動作を、「演算結果を書き込まない」ということで実現できる。そこで、ＰＥ-Ｉ３に在る命令デコーダ（図示しない）から供給されるＡｃｃの書き込み制御信号やレジスターR4〜R15の書き込み制御信号、或いはＣ、Ｎ、Ｖ、Ｚのコンディションフラグの書き込み制御信号に、Ｇフラグ（Global_Inst_en信号）との論理積をとることにより、命令の実行制御機構を実現する。
【００４１】
図６は、本発明の実施形態におけるＡｃｃへの書き込み制御回路の構成例を示すブロック図である。
図には、Ａｃｃ制御部９２とＡｃｃ９３が示され、ALU_out信号は、ＡＬＵ（例えば、ＡＬＵ９５Ａ）が出力する信号であり、Acc_out信号は、Ａｃｃ９３がＡＬＵ（例えば、ＡＬＵ９５Ａ）に入力する信号である。また、Ａｃｃ制御部９２は、ＰＥ-Ｉ３に在る命令デコーダ（図示しない）からのＡｃｃ９３への書き込み制御信号cnt_Acc_wrと、Ｇフラグ（Global_Inst_en信号）との論理積をとってＡｃｃ９３のロードイネーブル信号としている。ロードイネーブル信号がアクティブになると、図示されない並列計算装置１内部の基本クロックの立ち上がりでＡｃｃ９３の状態が変化する。
【００４２】
図７、図８、図９を参照し、第1実施形態のプログラム例を示す。
図７は、２重にネスト（入れ子）したプログラムを、並列計算装置１のアセンブラプログラムで記述した例を示す。このプログラムでは、図７のコード中の各変数を、図８に示すように各レジスターヘ割り付けてあると仮定している。また、図４２に示した命令以外に図７で用いる命令については、図９にその動作が説明されている。図７中で”//”記号の後には、プログラムの動作を理解し易くする為のコメントをＣ言語的に示す。これらのコメントは、図４５に示されたコードに対応している。この様に、本発明の技術を用いることで構造化されたプログラムを、容易にアセンブラコードに変換できる。すなわち容易に機械語に変換できる。
【００４３】
図１０は、並列計算装置１の演算処理部の概略構成を示すブロック図である。
ここでは、演算制御処理の説明に必要な主たる構成を示す。演算処理に関する基本構成は図３を参照する。
図に示される演算処理部１００は、並列して演算処理を行う複数の演算プロセッサー（ＰＥ）１０２と、複数のＰＥ１０２にＳＰＥ制御信号線を介して制御命令を供給する制御信号生成部（ＰＥ−Ｉ）３とを備える。
【００４４】
ＰＥ１０２のそれぞれが、サブプロセッサー１０２Ａ（ＳＰＥ１０２Ａ）と、サブプロセッサー１０２Ｂ〜１０２Ｄ（ＳＰＥ１０２Ｂ〜１０２Ｄ）を備える。
ＳＰＥ１０２Ａ〜ＳＰＥ１０２Ｄは、図３のＳＰＥ２Ａ〜２Ｄの演算処理の基本構成と同じ構成を有するほかに、それぞれ次の構成を有する。
ＳＰＥ１０２Ａは、Ｇフラグ処理部１０とＳＰＥ制御部１９９Ａを備え、ＳＰＥ１０２Ｂ〜１０２Ｄは、ＳＰＥ制御部１９９Ｂ〜１９９Ｄを備える。
また、ＳＰＥ１０２ＡにおけるＧフラグ処理部１０は、ＳＰＥ制御部１９９Ａ〜１９９ＤにＧフラグ信号を供給する。ＳＰＥ制御部１９９Ａ〜１９９Ｄは、供給されたＧフラグ信号に基づいて、それぞれのＳＰＥにおける演算制御を行う。
【００４５】
図１１は、演算プロセッサーにおける演算制御処理を行う構成を示すブロック図である。
この図には、ＰＥ１０２におけるＳＰＥ１０２Ａ〜１０２Ｄの構成が示される。
ＳＰＥ１０２Ａでは、ＳＰＥ演算処理部１９０ＡとＧフラグ処理部１０の詳細構成、ＳＰＥ１０２Ｂでは、ＳＰＥ演算処理部１９０Ｂの詳細構成が示される。ＳＰＥ１０２ＣとＳＰＥ１０２Ｄでは、ＳＰＥ１０２Ｂと同様の構成を備えることから、記載を省略する。また、前述の図５と同じ構成には同じ数字の符号を附し、異なる構成について説明する。
【００４６】
ＳＰＥ１０２ＡにおけるＳＰＥ演算処理部１９０Ａは、前述の図３に示したＡｃｃ９３Ａ、セレクター９４Ａ、ＡＬＵ９５Ａ、フラグレジスター９７Ａ、ＳＰＥ制御部１９９Ａを備える。
フラグレジスター９７Ａは、フラグレジスター９７Ａ−Ｃ、９７Ａ−Ｎ、９７Ａ−Ｖ、９７Ａ−Ｚを備え、それぞれが、ＡＬＵ９５Ａの演算結果に応じて変化するコンディションフラグＣ、Ｎ、Ｖ、Ｚの値を記録し、保持する。フラグレジスター９７Ａ−Ｃ、９７Ａ−Ｎ、９７Ａ−Ｖ、９７Ａ−Ｚは、記録された値の基づいてflag-C信号、flag-N信号、flag-V信号、flag-Z信号をそれぞれ出力する。
【００４７】
ＳＰＥ１０２Ａにおける制御部１９９Ａは、Ａｃｃ制御部９２Ａとフラグ制御部９６Ａを備える。
Ａｃｃ制御部９２Ａは、図６に示したＡｃｃ制御部９２と同じ構成であるが、ＳＰＥ１０２Ａの構成であることを示すため符号に「A」を付している。Ａｃｃ制御部９２Ａは、ＰＥ-Ｉ３に在る命令デコーダ（図示しない）からのアキュムレータへの書き込み信号cnt_Acc_wr_Aと、Ｇフラグ（Global_Inst_en信号）との論理積をとってＡｃｃ９３Ａのロードイネーブル信号としている。
フラグ制御部９６Ａは、フラグレジスター９７Ａに記憶される各コンディションフラグの値の書き込みをＧフラグとＰＥ-Ｉ３からの制御信号に応じて制御する。Ｇフラグがアクティブであり、それぞれのフラグの状態の書き込みを行う指令がＰＥ-Ｉ３から出力されているときに、フラグレジスター９７Ａは書き込まれる。コンディションフラグの書き込みを行う指令は、cnt_C_wr_A、cnt_N_wr_A、cnt_V_wr_A、cnt_Z_wr_A信号がアクティブであるとき、それぞれキャリーフラグ（C）、ネガティブフラグ（N）、オーバーフローフラグ（V）、ゼロフラグ（Z）の値が書き込まれる。レジスター９１（R4-R15）も同様に、ＰＥ−Ｉ３から出力される書き込みを行う指令に、Ｇフラグの値との論理積が取られる。
【００４８】
同様にＳＰＥ１０２ＢにおけるＳＰＥ演算処理部１９０Ｂは、前述の図３に示したＡｃｃ９３Ｂ、セレクター９４Ｂ、ＡＬＵ９５Ｂ、ＳＰＥ制御部１９９Ｂを備える。ＳＰＥ演算処理部１９０Ｂは、図３に示したフラグレジスター９７Ｂを備えていない。
ＳＰＥ演算処理部１９０ＢにおけるＳＰＥ制御部１９９Ｂは、Ａｃｃ制御部９２Ｂを備える。Ａｃｃ制御部９２Ｂは、Ａｃｃ制御部９２Ａと同じ構成であり、ＰＥ-Ｉ３に在る命令デコーダ（図示しない）からのＡｃｃ９３Ｂへの書き込み信号cnt_Acc_wr_Bと、Ｇフラグ（Global_Inst_en信号）との論理積をとってＡｃｃ９３Ｂのロードイネーブル信号としている。
【００４９】
また、ＳＰＥ１０２ＡにおけるＧフラグ処理部１０について、Ｇフラグ処理部とＳＰＥ制御部との関係を示し説明する。
図１２は、Ｇフラグ処理部とＳＰＥ制御部を示すブロック図である。
この図には、Ｇフラグ処理部１０と、各ＳＰＥが備えるＳＰＥ制御部１９９Ａ〜１９９Ｄが示される。前述の図１０に示したように、Ｇフラグ処理部１０は、出力するＧフラグ信号（Global_Inst_en）をＳＰＥ制御部１９９Ａ〜１９９Ｄに入力する。
図に示されるＧフラグ処理部１０は、図５に示したＧフラグ処理部１０と同じ構成を有する。
【００５０】
以上に示した構成により、ＧフラグスタックをＳＰＥ２Ａにだけ設け、ここから出力されるGlobal_Inst_en信号を、ＳＰＥ１０２ＡだけでなくＳＰＥ１０２Ｂ、ＳＰＥ１０２Ｃ、ＳＰＥ１０２Ｄの全ての実行制御に用いる。これにより、ＳＰＥ１０２Ａで条件判断を行って、その結果をＧフラグスタックに書き込むと同時に、他の全てのＳＰＥもその条件判断の結果にしたがって命令を実行する。
【００５１】
図を参照し、第１実施形態に示す並列計算装置１によって処理が高速化されることを、プログラム例を用いて示す。
図１３は、高速化処理が行えるプログラムを示す。
この図に示されるプログラムは、前述の図７と同じであるが、後の説明を分かり易くする為に処理単位ごとに「＊印」をつけ分類する。
図１４は、第１実施形態による並列演算処理のプログラムを示す。
この図に示されるプログラムは、第１実施形態に示した構成を用いてプログラムを４並列に変換した例を示す。ＳＰＥ１０２Ａで条件判断を行い、ＳＰＥ１０２Ｂ等ではその結果に応じて命令実行が制御される。
先ず「＊１」を付した命令部分を説明する。ＳＰＥ１０２Ａで条件判断する（ステップ３）までの間に、ＳＰＥ１０２Ｂによって「ADD R7」命令まで実行する。ＳＰＥ１０２Ｂは、「PSHI C,Z」命令を実行した直後のステップ４の「MV R7」命令で、演算結果をレジスターR7に書き込む。
【００５２】
「＊２」を付した命令の部分も同様に、予めＳＰＥ１０２Ｂで「CLR」命令でＡｃｃ−Ｂを「０」にしておき、ＳＰＥ１０２Ａで「CMP R6」命令の結果をＧフラグスタックにプッシュしたステップ６の直後にレジスターR7に「０」を書き込む。
「＊３」と「＊４」を付した命令の部分は、注意が必要である。ＳＰＥ１０２ＣとＳＰＥ１０２Ｄで予めデータを用意しておいて、命令実行条件が決定した直後に用意したデータを続けて書き込みたいが、ステップ３ではＳＰＥ１０２Ａで「PSHI C,Z」命令が実行される。
ＳＰＥ１０２Ａでステップ３の「PSHI C,Z」命令が実行された後では、条件判断が行われることからＳＰＥ１０２ＣとＳＰＥ１０２Ｄで命令が実行されるかどうか不明である。そこで、ＳＰＥ１０２Ａにおいてステップ３の「PSHI C,Z」命令が実行される前に、ＳＰＥ１０２ＣとＳＰＥ１０２Ｄでは、データを準備している。このように４つのＳＰＥで並列処理することで、図１３では２１クロックかかった処理が、図１４では１１クロックと約半分で終えることができる。
【００５３】
なお、図１４においてＳＰＥ１０２Ａ〜１０２Ｄで有効に使われていない部分を空白又は網掛けで示す。空白部分には任意の命令を配置することができるが、網掛け部分にはＳＰＥ１０２Ａの状態に同期して実行する命令（図１３のコード中には対象無し）か、図示する「NOP」命令を配置することができる。
【００５４】
本実施形態によると、複数の演算プロセッサーＰＥ１０２のそれぞれが、サブプロセッサーＳＰＥ１０２ＡとサブプロセッサーＳＰＥ１０２Ｂ〜１０２Ｄによって形成される。
サブプロセッサーＳＰＥ１０２Ａにおいて、ＡＬＵ９５Ａは、入力されたデータを前記制御命令に基づいて演算処理する。Ｇフラグスタック１１は、スタック構造を有する記憶部であり、演算処理された結果に基づいたフラグ情報が順次蓄積される。合成部１９は、Ｇフラグスタック１１に蓄積されたフラグ情報を合成する。ＳＰＥ制御部１９９Ａは、合成部１９が合成した合成フラグ情報に基づいてＡｃｃ９３Ａやフラグレジスター９７Ａ及びレジスター９１への書き込みを制御する。
サブプロセッサーＳＰＥ１０２Ｂ〜１０２Ｄにおいて、ＡＬＵ９５Ｂ〜９５Ｄは、入力されたデータを制御命令に基づいて演算処理する。ＳＰＥ制御部１９９Ｂ〜１９９Ｄは、合成部１９が合成した合成フラグ情報に基づいてＡｃｃ９３Ｂ及びレジスター９１への書き込みを制御する。
これにより、SIMD型にVLIW型を組み合わせた並列計算装置において、多重にネストした構造化プログラムをサポートするハードウェアを容易に実現できる。
【００５５】
（第２実施形態）
次に本発明の第２実施形態について説明する。
図１５は、並列計算装置１の演算処理部の概略構成を示すブロック図である。
ここでは、演算制御処理の説明に必要な主たる構成を示す。演算処理については、図に示される演算処理部２００は、並列して演算処理を行う複数の演算プロセッサー（ＰＥ）２０２と、複数のＰＥ２０２にＳＰＥ制御信号線を介して制御命令を供給する制御信号生成部（ＰＥ−Ｉ）３と、ＰＥ−Ｉ３の制御を受けて各ＳＰＥを同期させる実行制御部２０Ｂ〜２０Ｄを備える。
【００５６】
ＰＥ２０２のそれぞれが、サブプロセッサー（ＳＰＥ）２０２Ａと、サブプロセッサー（ＳＰＥ）２０２Ｂ〜２０２Ｄを備える。
ＳＰＥ２０２Ａは、Ｇフラグ処理部１０とＳＰＥ制御部２９９Ａを備える。
ＳＰＥ２０２Ｂ〜２０２Ｄは、それぞれＳＰＥ制御部２９９Ｂ〜２９９Ｄと実行選択部２４Ｂ〜２４Ｄを備える。
Ｇフラグ処理部１０は、ＳＰＥ制御部２９９Ａ〜２９９ＤにＧフラグ信号を供給する。
実行選択部２４Ｂ〜２４Ｄは、供給されたＧフラグ信号と実行許可信号に基づいて、ＳＰＥ制御部２９９Ｂ〜２９９Ｄにそれぞれ実行許可信号を出力する。
ＳＰＥ制御部２９９Ａ〜２９９Ｄは、供給された実行許可信号に基づいて、それぞれのＳＰＥの演算制御を行う。
【００５７】
図１６は、第２実施形態の構成において追加する命令を示す。
前述の図１５に示すように、Ｇフラグ処理部１０は、ＳＰＥ２０２Ａにだけ設ける。ＳＰＥ２０２Ａ以外のＳＰＥは、ＳＰＥ２０２Ａが出力するＧフラグの値に応じて命令実行が制御されるか、又はＳＰＥ２０２ＡのＧフラグに影響されず常に命令を実行するかを選択できるようにする。
この選択を行うために、この図に示される命令を追加する。これらの命令はＳＰＥ２０２Ｂ、ＳＰＥ２０２Ｃ、ＳＰＥ２０２Ｄで常に実行可能である。
例えば、ＳＰＥ２０２Ｂにおいて「SYNC」命令を実行すると、ＳＰＥ２０２Ｂは、それ以降はＳＰＥ２０２ＡのＧフラグの値を命令実行制御に使うようになり、「ASYNC」命令を実行すると、それ以降はＳＰＥ２０２ＡのＧフラグの値とは無関係に命令を実行するようになる。
【００５８】
また、ＳＰＥ１０２ＡにおけるＧフラグ処理部１０を参照し、Ｇフラグ処理部とＳＰＥ制御部の接続を示しつつ説明する。
図１７は、Ｇフラグ処理部とＳＰＥ制御部を示すブロック図である。
この図には、Ｇフラグ処理部１０と、各ＳＰＥが備えるＳＰＥ制御部２９９Ａ〜２９９Ｄ、実行選択部２４Ｂ〜２４Ｄ及び実行制御部２０Ｂ〜２０Ｄが示される。前述の図１０、１２、１５に示した構成と同じ構成には、同じ符号を附す。
Ｇフラグ処理部１０は、前述の図５に示した構成と同じであり、出力する信号をGlobal_Inst_en_Aとする。Global_Inst_en_Aは、ＳＰＥ２０２Ａの信号であることを明示する以外は、図５のGlobal_Inst_en信号と同じである。
【００５９】
実行制御部２０Ｂは、図示しないＰＥ-Ｉ３からの制御信号によりＳＰＥ２０２Ｂの実行を制御する制御信号（en0_B）を出力する。
実行制御部２０Ｂからの出力en0_Bは、実行選択部２４Ｂに入り、ＳＰＥ制御部２９９Ｂを制御する制御信号Global_Inst_en_B信号を生成する。Global_Inst_en_B信号は、ＳＰＥ２０２Ｂにおいて、命令実行制御に使われる。並列計算装置１を初期化するsystem_reset信号がアクティブ(「１」)になると、フリップフロップ２１がセットされてen0_B信号が「１」になる。これにより、実行選択部２４ＢがＳＰＥ制御部２９９Ｂに入力するGlobal_Inst_en_B信号が常に「１」になるので、ＳＰＥ２０２Ｂでは、常に命令が実行される。
また、「SYNC」命令が発行されるとcnt_SYNC_B信号がアクティブになるが、cnt_ASYNC_B信号はノンアクティブ（「０」）のままなので、フリップフロップ２１の出力en0_Bが「０」になる。したがって、Global_Inst_en_Aの状態に応じてGlobal_Inst_en_ Bの状態が定まる。 つまり、ＳＰＥ２０２ＢはＳＰＥ２０２ＡのＧフラグに応じて、その命令実行が制御される。
【００６０】
「ASYNC」命令が発行されるとcnt_ASYNC_B信号がアクティブになり、フリップフロップ２１の出力en0_Bは「１」になる。なお、フリップフロップ２１は、図示しない並列計算装置１内部の基本クロックの立ち上がりで変化する。
実行制御部２０Ｃ及び２０Ｄは、実行制御部２０Ｂと同じ構成であり、入力される信号がそれぞれＳＰＥ２０２Ｃ及びＳＰＥ２０２Ｄの制御信号である点が異なる。
実行選択部２４Ｃ及び２４Ｄは、それぞれ実行制御部２０Ｃ及び２０Ｄからの制御信号en0_C及びen0_Dによって制御され、出力に接続されるＳＰＥ制御部２９９Ｃ及び２９９Ｄを介してＳＰＥ２０２Ｃ及びＳＰＥ２０２Ｄの制御を行う。
【００６１】
以上に示した構成により、ＧフラグスタックをＳＰＥ２０２Ａにだけ設け、ＳＰＥ２０２Ａ以外のＳＰＥは、ＳＰＥ２０２ＡのＧフラグに応じて命令実行が制御されるか、又はＳＰＥ２０２ＡのＧフラグに影響されず常に命令を実行するかを選択できる。
【００６２】
第２の実施形態に示すように並列計算装置１によって処理が高速化されることを、プログラム例を用いて示す。
図１８は、本実施形態に示した並列計算装置１において、図１３のプログラムを実行するために、４並列処理を行うVLIW型用に変換した例を示す。
ＳＰＥ２０２Ａにおいて、条件判断等を行い、ＳＰＥ２０２Ｂ等ではその結果に同期して命令を実行する。
先ず、「＊１」を付した命令の部分であるが、ＳＰＥ２０２Ａで条件判断する（ステップ３）までの間にＳＰＥ２０２Ｂで「ADD R7」命令まで実行する。ＳＰＥ２０２Ａで「PSHI C,Z」命令を実行した直後に「MV R7」命令で結果をレジスターR7に書き込む。「＊２」を付した命令の部分も同様であり、ステップ６において、Ａｃｃ−Ｂに予め「０」を用意しておくことで、ＳＰＥ２０２Ａで「CMP R6」命令の結果をＧフラグスタックにプッシュした直後にレジスターR7を「０」を書き込む。同時に「＊３」を付した命令で示すようにＳＰＥ２０２Ｃでも予めデータを用意しておき、直ぐにレジスターR9への書き込みを行える。
【００６３】
ＳＰＥ２０２Ｄによって実行される「＊４」を付した命令部分については注意が必要である。これらの命令はＳＰＥ２０２Ａにおける「GINV」命令（ステップ７）の後で、実行するかしないかが決定される。つまり、ＳＰＥ２０２Ｃのように事前にデータを用意することができない。そこで、ＳＰＥ２０２Ｄは、ＳＰＥ２０２ＡのＧフラグの値とは無関係に「MVA R10」命令と「INC」命令を実行しておき、ＳＰＥ２０２Ａでの「GINV」命令と同時に「SYNC」命令を実行することで、「MV R10」命令の実行制御をＳＰＥ２０２Ａと同期させている。
【００６４】
このように４つのＳＰＥで並列処理することで、図１３では２１クロックかかった処理が、本実施形態では１２クロックで行える。
なお、図１８においてＳＰＥ２０２Ｂ〜２０２Ｄで使われていない部分を空白又は網掛けで示した。空白部分には任意の命令をおくことができ、ＳＰＥ２０２Ａと同期する必要が無い命令を並列実行できる。一方、網掛けの部分には、ＳＰＥ２０２Ａと同期した命令か、「NOP」命令が配置できる。本実施形態では、第１実施形態に比べて１クロック余計に掛かっているが、空白部分に他の命令を配置することができる。したがって、実施形態１よりも実行効率を高めることができるため、演算処理全体では短時間で処理を終了することが可能となる。
【００６５】
（第３実施形態）
次に本発明の第３実施形態について説明する。
図１９は、並列計算装置１の演算処理部の概略構成を示すブロック図である。
ここでは、演算制御処理の説明に必要な主たる構成を示す。演算処理については、図に示される演算処理部３００は、並列して演算処理を行う複数の演算プロセッサー（ＰＥ）３０２と、複数のＰＥ３０２にＳＰＥ制御信号線を介して制御命令を供給する制御信号生成部（ＰＥ−Ｉ）３と、ＰＥ−Ｉ３の制御を受けて各ＳＰＥを同期させる実行制御部３０Ｂ〜３０Ｄを備える。
【００６６】
ＰＥ３０２のそれぞれが、サブプロセッサー（ＳＰＥ）３０２Ａと、サブプロセッサー（ＳＰＥ）３０２Ｂ〜３０２Ｄを備える。
ＳＰＥ３０２Ａは、Ｇフラグ処理部１０ＡとＳＰＥ制御部３９９Ａを備える。
ＳＰＥ３０２Ｂは、Ｇフラグ処理部１０ＢとＳＰＥ制御部３９９Ｂと実行選択部３４Ｂを備える。ＳＰＥ３０２Ｂは、前述の図１１に示したＳＰＥ１０２Ａに相当する構成に加え、実行選択部３４Ｂを備える。Ｇフラグ処理部１０ＢとＳＰＥ制御部３９９Ｂは、それぞれＧフラグ処理部１０とＳＰＥ制御部１９９Ａに相当し、入出力信号が、ＳＰＥ３０２Ｂとしての接続に代わる。また、Ｇフラグ処理部１０ＢとＳＰＥ制御部３９９Ｂは、実行選択部３４Ｂを介して接続する。
また、ＳＰＥ３０２Ｃは、Ｇフラグ処理部１０ＣとＳＰＥ制御部３９９Ｃと実行選択部３４Ｃを備える。ＳＰＥ３０２Ｄは、Ｇフラグ処理部１０ＤとＳＰＥ制御部３９９Ｄと実行選択部３４Ｄを備える。ＳＰＥ３０２ＣとＳＰＥ３０２Ｄは、ＳＰＥ３０２Ｂと同様の構成を有する。
【００６７】
Ｇフラグ処理部１０Ａは、ＳＰＥ制御部３９９Ａと、実行選択部３４Ｂ〜３４Ｄを介してＳＰＥ制御部３９９Ｂ〜３９９ＤにＧフラグ信号を供給する。Ｇフラグ処理部１０Ｂは、実行選択部３４Ｂを介してＳＰＥ制御部３９９ＢにＧｂフラグ信号を供給する。Ｇフラグ処理部１０Ｃは、実行選択部３４Ｃを介してＳＰＥ制御部３９９ＣにＧｃフラグ信号を供給する。Ｇフラグ処理部１０Ｄは、実行選択部３４Ｄを介してＳＰＥ制御部３９９ＤにＧｄフラグ信号を供給する。
実行選択部３４Ｂは、供給されたＧフラグ信号とＧｂフラグ信号のいずれかを、ＳＰＥ制御部３９９Ｂの実行許可信号として出力する。実行選択部３４Ｃは、供給されたＧフラグ信号とＧｃフラグ信号のいずれかを、ＳＰＥ制御部３９９Ｃの実行許可信号として出力する。実行選択部３４Ｄは、供給されたＧフラグ信号とＧｄフラグ信号のいずれかを、ＳＰＥ制御部３９９Ｄの実行許可信号として出力する。
ＳＰＥ制御部３９９Ａ〜３９９Ｄは、供給された実行許可信号に基づいて、それぞれのＳＰＥの演算制御を行う。
【００６８】
本実施形態では、図５に示すＧフラグスタックをＳＰＥ３０２Ａ、ＳＰＥ３０２Ｂ、ＳＰＥ３０２Ｃ及びＳＰＥ３０２Ｄにそれぞれ設けた構成である。各ＳＰＥは通常はそれぞれのＧ、Ｇｂ、Ｇｃ、Ｇｄフラグで個別に命令実行が制御されるが、必要に応じて特定のＳＰＥのＧフラグに応じて命令実行が制御されるようにする。ここでは例として特定のＳＰＥをＳＰＥ３０２Ａとする。
【００６９】
実行選択部の制御を行うために、この図に示される命令を追加する。
図２０は、第３実施形態の構成において追加する命令を示す。
これらの命令はＳＰＥ３０２Ｂ、ＳＰＥ３０２Ｃ、ＳＰＥ３０２Ｄで実行可能である。
例えば、ＳＰＥ３０２Ｂにおいて「SYNC」命令を実行すると、ＳＰＥ３０２Ｂは、それ以降はＳＰＥ３０２ＡのＧフラグを命令実行制御に使うようになり、「ASYNC」命令を実行すると、それ以降はＳＰＥ３０２ＡのＧフラグから切り替えて、ＳＰＥ３０２Ｂが有するＧフラグ（Ｇｂ）の値を命令実行制御に使うようになる。ＳＰＥ３０２Ｃ、ＳＰＥ３０２Ｄについても、同様である。
【００７０】
また、ＳＰＥ１０２ＡにおけるＧフラグ処理部１０を参照し、Ｇフラグ処理部とＳＰＥ制御部の接続を示しつつ説明する。
図２１は、Ｇフラグ処理部とＳＰＥ制御部を示すブロック図である。
この図には、Ｇフラグ処理部１０Ａ〜１０Ｄと、各ＳＰＥが備えるＳＰＥ制御部３９９Ａ〜３９９Ｄ、実行選択部３４Ｂ〜３４Ｄは、及び実行制御部３０Ｂ〜３０Ｄが示される。前述の図１０、１２に示した構成と同じ構成には、同じ数字の符号を附す。
Ｇフラグ処理部１０Ａ〜１０Ｄは、前述の図５に示した構成と同じであり、それぞれ出力する信号をGlobal_Inst_en_A（「G」と示す。）〜Global_Inst_en_D（「Gd」と示す。）とする。Global_Inst_en_Aは、ＳＰＥ３０２Ａの信号であることを明示する以外は、図５のGlobal_Inst_en信号と同じである。Global_Inst_en_B（Gb）〜Global_Inst_en_D（Gd）についても同様である。
【００７１】
実行制御部３０Ｂは、ＰＥ-Ｉ３からの制御信号によりＳＰＥ３０２Ｂの実行を制御する制御信号（sel_B）を出力する。
実行制御部３０Ｂは、実行選択部３４Ｂを制御する制御信号sel_B信号を生成する。並列計算装置１を初期化するsystem_reset信号がアクティブ(「１」)になると、フリップフロップ３１Ｂはセットされsel_B信号が「１」になる。したがって、セレクター３４ＢでGlobal_Inst_en_B信号が選ばれて、ＳＰＥＢ３０２Ｂの命令を制御するGlobal_Inst_en_act_B（Gba）信号になる。つまり、リセット直後はＳＰＥ３０２ＢのＧｂフラグで命令実行が制御される。
【００７２】
「SYNC」命令が発行されるとcnt_SYNC_B信号がアクティブになるが、その時cnt_ASYNC_B信号がノンアクティブのままなので、sel_B信号が「０」になる。したがって、セレクター３４Ｂにおいて、Global_Inst_en_A信号が選ばれてlobal_Inst_en_act_B信号になる。つまり、ＳＰＥ３０２Ｂは、ＳＰＥ３０２ＡのＧフラグに応じて命令実行が制御される。
「ASYNC」命令が発行されるとcnt_ASYNC_B信号がアクティブになり、フリップフロップ３１Ｂには「１」が書き込まれる。したがって、ＳＰＥ３０２Ｂは、Ｇｂフラグの値を実行制御に使うようになる。なお、フリップフロップ３１Ｂは図示しない並列計算装置１内部の基本クロックの立ち上がりで変化する。
ＳＰＥ３０２Ｃ、ＳＰＥ３０２Ｄの実行制御回路３０Ｃと３０Ｄ（シンクロナイズ回路）も実行制御回路３０Ｂと同様であるが、図示されないセレクターのＢ入力への信号がGlobal_Inst_en_Bではなく、それぞれGlobal_Inst_en_CとGlobal_Inst_en_Dとなり、セレクターのＳ入力への信号がsel_Bではなく、それぞれsel_Cとsel_Dとなり、またセレクターの出力がGlobal_Inst_en_act_C（Gca）とGlobal_Inst_en_act_D（Gda）となるところが異なる。
【００７３】
第３の実施形態に示す並列計算装置１によって処理が高速化されることを、プログラム例を用いて示す。
図２２に並列計算装置１において、図１３のプログラムを実行するために４並列処理を行うVLIW型用に図１３のプログラムを変換した例を示す。
ＳＰＥ３０２Ａで条件判断等を行い、ＳＰＥ３０２Ｂ等ではその結果に同期して命令を実行する。
先ず、「＊１」を付した命令の部分であるが、ＳＰＥ３０２Ａで条件判断する（ステップ３）までの間にＳＰＥ３０２Ｂによって「ADD R7」命令まで実行する。ＳＰＥ３０２Ａで「PSHI C,Z」命令を実行した直後に「MV R7」命令で結果をレジスターR7に書き込む。「＊２」を付した命令の部分も同様であり、Ａｃｃ−Ｂに予め０を用意しておくことで、ＳＰＥ３０２Ａで「CMP R6」命令の結果をＧフラグスタック１１Ａにプッシュした直後にレジスターR7をクリアできる。同時に「＊３」を付した命令で示すようにＳＰＥ３０２Ｃでも予めデータを用意しておき、直ぐにレジスターR9への書き込みを行える。
ＳＰＥ３０２Ｄで実行される「＊４」を付した命令部分については注意が必要である。これらの命令はＳＰＥ３０２Ａにおける「GINV」命令の後で、実行するかしないかが決定される。つまり、ＳＰＥ３０２Ｃのように事前にデータを用意することができない。そこで、ＳＰＥ３０２ＡのＧフラグとは無関係に「MVA R10」命令と「INC」命令を実行しておき、ＳＰＥ３０２Ａでの「GINV」命令と同時に「SYNC」命令を実行することで、「MV R10」命令だけをＳＰＥ３０２Ａと同期させている。このように４つのＳＰＥで並列処理することで、図１３では２１クロックかかった処理が１２クロックで終了することができる。
【００７４】
なお、図２２においてＳＰＥ３０２Ｂ、ＳＰＥ３０２Ｃ、ＳＰＥ３０２Ｄで使われていない部分が空白又は網掛けで示されている。空白部分には任意の命令を配置することができ、ＳＰＥ３０２Ａと同期する必要が無い命令を並列実行できる。一方、網掛けの部分にはＳＰＥ３０２Ａと同期した命令か、「NOP」命令を配置できる。
この例では、前述の第２実施形態と同じ結果になっているが、各ＳＰＥが独立にネストしたプログラムを実行できるので命令実行の柔軟性が上がり、演算処理全体では第２実施形態よりも短時間で処理できる。
【００７５】
（第４実施形態）
次に、本発明の第４の実施形態について説明する。
図２３は、並列計算装置１の演算処理部の概略構成を示すブロック図である。
ここでは、演算制御処理の説明に必要な主たる構成を示す。演算処理については、図に示される演算処理部４００は、並列して演算処理を行う複数の演算プロセッサー（ＰＥ）４０２と、複数のＰＥ４０２にＳＰＥ制御信号線を介して制御命令を供給する制御信号生成部（ＰＥ−Ｉ）３と、ＰＥ−Ｉ３の制御を受けて各ＳＰＥを同期させる実行制御部４０Ａ〜４０Ｄを備える。
【００７６】
ＰＥ４０２のそれぞれが、サブプロセッサー（ＳＰＥ）４０２Ａと、サブプロセッサー（ＳＰＥ）４０２Ｂ〜４０２Ｄを備える。
ＳＰＥ４０２Ａは、Ｇフラグ処理部１０ＡとＳＰＥ制御部４９９Ａと実行選択部４４Ａを備える。ＳＰＥ４０２Ａは、前述の図１１に示したＳＰＥ１０２Ａに相当する構成に加え、実行選択部４４Ａを備える。Ｇフラグ処理部１０ＡとＳＰＥ制御部４９９Ａは、それぞれＧフラグ処理部１０とＳＰＥ制御部１９９Ａに相当し、入出力信号が、ＳＰＥ４０２Ａとしての接続を示す。また、Ｇフラグ処理部１０ＡとＳＰＥ制御部４９９Ａは、実行選択部４４Ａを介して接続する。
ＳＰＥ４０２Ｂは、Ｇフラグ処理部１０ＢとＳＰＥ制御部４９９Ｂと実行選択部４４Ｂを備える。ＳＰＥ４０２Ｂは、前述の図１１に示したＳＰＥ１０２Ａに相当する構成に加え、実行選択部４４Ｂを備える。Ｇフラグ処理部１０ＢとＳＰＥ制御部４９９Ｂは、それぞれＧフラグ処理部１０とＳＰＥ制御部１９９Ａに相当し、入出力信号が、ＳＰＥ４０２Ｂとしての接続に代わる。また、Ｇフラグ処理部１０ＢとＳＰＥ制御部４９９Ｂは、実行選択部４４Ｂを介して接続する。
また、ＳＰＥ４０２Ｃは、Ｇフラグ処理部１０ＣとＳＰＥ制御部４９９Ｃと実行選択部４４Ｃを備える。ＳＰＥ４０２Ｄは、Ｇフラグ処理部１０ＤとＳＰＥ制御部４９９Ｄと実行選択部４４Ｄを備える。ＳＰＥ４０２ＣとＳＰＥ４０２Ｄは、ＳＰＥ４０２Ｂと同様の構成を有する。
【００７７】
Ｇフラグ処理部１０Ａは、実行選択部４４Ａ〜４４Ｄを介してＳＰＥ制御部４９９Ａ〜４９９ＤにＧフラグ信号を供給する。Ｇフラグ処理部１０Ｂは、実行選択部４４Ａ〜４４Ｄを介してＳＰＥ制御部４９９Ａ〜４９９ＤにＧｂフラグ信号を供給する。Ｇフラグ処理部１０Ｃは、実行選択部４４Ａ〜４４Ｄを介してＳＰＥ制御部４９９Ａ〜４９９ＤにＧｃフラグ信号を供給する。Ｇフラグ処理部１０Ｄは、実行選択部４４Ａ〜４４Ｄを介してＳＰＥ制御部４９９Ａ〜４９９ＤにＧｄフラグ信号を供給する。
実行選択部４４Ａ〜４４Ｄは、Ｇフラグ信号とＧｂフラグ信号〜Ｇｄフラグ信号のいずれかをそれぞれ選択し、ＳＰＥ制御部４９９Ａ〜４９９Ｄの実行許可信号として出力する。
ＳＰＥ制御部４９９Ａ〜４９９Ｄは、供給された実行許可信号に基づいて、それぞれのＳＰＥの演算制御を行う。
【００７８】
本実施形態では、図５に示すＧフラグスタックをＳＰＥ４０２Ａ、ＳＰＥ４０２Ｂ、ＳＰＥ４０２Ｃ及びＳＰＥ４０２Ｄにそれぞれ設けた構成である。各ＳＰＥは通常はそれぞれのＧ、Ｇｂ、Ｇｃ、Ｇｄフラグの値で個別に命令実行が制御されるが、必要に応じて特定のＳＰＥのＧフラグの値に応じて命令実行が制御されるようにする。
【００７９】
図２４は、第４実施形態の構成において追加する命令を示す。
前述の図２０との違いは「SYNC」命令にA、B、C又はDの何れか一つのオペランドを指定できることである。例えば、ＳＰＥ４０２Ａにおいて「SYNC B」命令を実行すると、それ以降はＳＰＥ４０２ＢのＧフラグの値を命令実行制御に使うようになる。「ASYNC」命令を実行すると、それ以降は各ＳＰＥ４０２内に備えるＧフラグを参照し、その値命令実行制御に使うようになる。
【００８０】
図２５は、Ｇフラグ処理部とＳＰＥ制御部を示すブロック図である。
また、ＳＰＥ１０２ＡにおけるＧフラグ処理部１０を参照し、Ｇフラグ処理部とＳＰＥ制御部の接続を示しつつ説明する。
この図には、Ｇフラグ処理部１０Ａ〜１０Ｄと、各ＳＰＥが備えるＳＰＥ制御部４９９Ａ〜４９９Ｄ、実行選択部４４Ｂ〜４４Ｄは、及び実行制御部４０Ｂ〜４０Ｄが示される。前述の図１０、１２、１５に示した構成と同じ構成には、同じ符号を附す。
Ｇフラグ処理部１０Ａ〜１０Ｄは、前述の図１０に示した構成と同じであり、それぞれ出力する信号をGlobal_Inst_en_A（「Ｇａ」と示す。）〜Global_Inst_en_D（「Ｇｄ」と示す。）とする。Global_Inst_en_Aは、ＳＰＥ４０２Ａの信号であることを明示する以外は、図１０のGlobal_Inst_en信号と同じである。Global_Inst_en_B（Ｇｂ）〜Global_Inst_en_D（Ｇｄ）についても同様である。
【００８１】
この回路の動作をＳＰＥ４０２Ａの場合について示す。Global_Inst_en_A（Ｇａ）は、図５のGlobal_Inst_en信号と同じであるが、他のＳＰＥの信号と識別する為に最後に_Aを付加している。 Global_Inst_en_Bなども同様である。
system_resetか又は、「ASYNC」命令が発行されてcnt_ASYNC_Aがアクティブになると、図中の２つのフリップフロップ４１Ａ、４２Ａはリセットされてsel1_A信号とsel0_A信号は共に「０」になる。よって、セレクター４４ＡでGlobal_Inst_en_A（Ｇａ）が選ばれて、ＳＰＥ４０２Ａの命令を制御する信号Global_Inst_en_act_Aになる。つまり、リセット直後は自分自身のＧフラグの値を実行制御に使う。「SYNC」命令が発行されるとcnt_SYNC_Aがアクティブになり、cnt_Gsel_1_Aとcnt_Gsel_0_Aの値をフリップフロップ４１Ａ、４２Ａに書き込む。これらの値によって選ばれたＧフラグ信号がGlobal_Inst_en_act_Aになる。
【００８２】
図２６は、フリップフロップ４１Ａ、４２Ａの制御を示す図である。
フリップフロップ４１Ａ、４２Ａの制御は、cnt_Gsel_1_Aとcnt_Gsel_0_Aの設定により行う。
この図に示されるように、「SYNC」命令のオペランドに応じて値が決まる。図２５に示したフリップフロップ４１Ａ、４２Ａは、ＳＰＥ４０２Ａの場合である。ＳＰＥ４０２Ｂ、ＳＰＥ４０２Ｃ、ＳＰＥ４０２Ｄの実行制御回路４０Ｂ〜４０Ｄも同様である。ただし、system_resetかcnt_ASYNC_B〜cnt_ASYNC_Dがアクティブになった時のsel1_B〜sel1_Dとsel0_B〜sel0_Dを保持するフリップフロップ４１Ｂ〜４１Ｄ、４２Ｂ〜４２Ｄが出力する値が異なり、ＳＰＥ４０２Ｂは(0,1)、ＳＰＥ４０２Ｃは(1,0)、そしてＳＰＥ４０２Ｄは(1,1)である。
【００８３】
第４の実施形態によって処理が高速化されることを、プログラム例を用いて示す。
図２７は、並列計算装置１において、図１３のプログラムを実行するために４並列のVLIW型用に図１３のプログラムを変換した例を示す。
条件判断はどのＳＰＥでも実行できるが、ここではＳＰＥ４０２Ｂで条件判断等を行い、他のＳＰＥはその結果に同期して命令を実行する。先ず、「＊１」を付した命令の部分であるが、ＳＰＥ４０２Ｂで条件判断する間にＳＰＥ４０２Ａによって「ADD R7」命令（ステップ３）まで実行しておき、ＳＰＥ４０２Ｂで「PSHI C,Z」命令を実行した直後に「MV R7」命令で結果をレジスターR7に書き込む。「＊２」を付した命令の部分も同様であり、Ａｃｃ９３Ａを予めＳＰＥ４０２Ａで「０」にしておくことで、ＳＰＥ４０２Ｂで「CMP R6」命令の結果をＧフラグスタックにプッシュした（ステップ６）直後にレジスターR7をクリアできる。同時に「＊３」を付した命令で示すようにＳＰＥ４０２Ｃでも予めデータを用意しておき、直ぐにレジスターR9への書き込みを行える。
【００８４】
ＳＰＥ４０２Ｄで実行される「＊４」を付した命令部分については注意が必要である。これらの命令はＳＰＥ４０２Ｂにおける「GINV」命令の後で、実行するか否かが決定される。つまり、ＳＰＥ４０２Ｃのように事前にデータを用意することができない。そこで、ＳＰＥ４０２ＢのＧフラグの値とは無関係に「MVA R10」命令と「INC」命令を実行しておき、ＳＰＥ４０２Ｂでの「GINV」命令と同時に「SYNC B」命令を実行することで、「MV R10」命令だけをＳＰＥ４０２Ｂと同期させている。このように４つのＳＰＥで並列処理することで、図１３では２１クロックかかる処理を１２クロックで終了することができる。
【００８５】
なお、図２７でＳＰＥ４０２Ａ、ＳＰＥ４０２Ｃ、ＳＰＥ４０２Ｄで使われていない部分が空白又は網掛けで示される。空白部分には任意の命令を配置することができ、ＳＰＥ４０２Ｂと同期する必要が無い命令を並列実行できる。一方、網掛け部分にはＳＰＥ４０２Ｂと同期した命令か、「NOP」命令を配置することができる。この例では第３実施形態と処理速度が同じであるが、どのＳＰＥでも条件判断を行うマスターPEに設定できるので、ＳＰＥを使う上での柔軟性が格段に向上し、演算処理全体では第３実施形態よりも短時間で処理できる。
【００８６】
（第５実施形態）
本発明の第５の実施形態について説明する。
ここでは例としてＳＰＥ５０２Ａを特別なＳＰＥとし、他のＳＰＥがそれに同期するか否かを制御できるようにする。
【００８７】
図２８は、並列計算装置１の演算処理部の概略構成を示すブロック図である。
ここでは、演算制御処理の説明に必要な主たる構成を示す。演算処理については、図に示される演算処理部５００は、並列して演算処理を行う複数の演算プロセッサー（ＰＥ）５０２と、複数のＰＥ５０２にＳＰＥ制御信号線を介して制御命令を供給する制御信号生成部（ＰＥ−Ｉ）３と、ＰＥ−Ｉ３の制御を受けて各ＳＰＥを同期させる実行制御部５０ＳＣＢ〜５０ＳＣＤを備える。
【００８８】
ＰＥ５０２のそれぞれが、サブプロセッサー（ＳＰＥ）５０２Ａと、サブプロセッサー（ＳＰＥ）５０２Ｂ〜５０２Ｄを備える。
ＳＰＥ５０２Ａは、Ｇフラグソース５０ＦＳＡとＧフラグスタック５０ＳＴＡとＳＰＥ制御部５９９Ａを備える。
ＳＰＥ５０２Ａは、前述の図１１に示したＳＰＥ１０２Ａに相当する構成において、Ｇフラグ処理部１０を２つに分けた構成を有する。一方の前段処理を行うＧフラグソース５０ＦＳＡは、選択されたフラグレジスターの出力を１つの信号にまとめ、出力する。他方の後段処理を行うＧフラグスタック５０ＳＴＡは、前述のＧフラグスタック１１と合成部１９に相当する。Ｇフラグスタック５０ＳＴＡは、前段のフラグソース５０ＦＳＡが出力した信号を条件に応じて記録する。ＳＰＥ制御部５９９Ａは、ＳＰＥ制御部１９９Ａに相当する。
ＳＰＥ５０２Ｂは、Ｇフラグソース５０ＦＳＢとＧフラグスタック５０ＳＴＢとＳＰＥ制御部５９９Ｂと実行選択部５５Ｂを備える。すなわち、ＳＰＥ５０２Ｂは、前述のＳＰＥ５０２Ａに相当する構成に加え、実行選択部５５Ｂを備える。また、Ｇフラグソース５０ＦＳＢとＧフラグスタック５０ＳＴＢは、実行選択部５５Ｂを介して接続する。
また、ＳＰＥ５０２Ｃは、Ｇフラグソース５０ＦＳＣとＧフラグスタック５０ＳＴＣとＳＰＥ制御部５９９Ｃと実行選択部５５Ｃを備える。ＳＰＥ５０２Ｄは、Ｇフラグソース５０ＦＳＤとＧフラグスタック５０ＳＴＤとＳＰＥ制御部５９９Ｄと実行選択部５５Ｄを備える。ＳＰＥ５０２ＣとＳＰＥ５０２Ｄは、ＳＰＥ５０２Ｂと同様の構成を有する。
【００８９】
Ｇフラグソース５０ＦＳＡは、Ｇフラグスタック５０ＳＴＡ〜５０ＳＴＤにＧフラグソース信号を供給する。Ｇフラグソース５０ＦＳＢは、実行選択部５５Ｂを介してＧフラグスタック５０ＳＴＢにＧフラグソース信号を供給する。Ｇフラグソース５０ＦＳＣは、実行選択部５５Ｃを介してＧフラグスタック５０ＳＴＣにＧフラグソース信号を供給する。Ｇフラグソース５０ＦＳＤは、実行選択部５５Ｄを介してＧフラグスタック５０ＳＴＤにＧフラグソース信号を供給する。
実行選択部５５Ｂ〜５５Ｄは、Ｇフラグソース信号又はＧｂフラグソース信号〜Ｇｄフラグソース信号のいずれかをそれぞれ選択し、それぞれのＧフラグスタック５０ＳＴＢ〜５０ＳＴＤに蓄積する。それぞれのＧフラグスタック５０ＳＴＢ〜５０ＳＴＤは、蓄積されたＧフラグソース信号に基づいて、ＳＰＥ制御部５９９Ａ〜５９９Ｄの実行制御信号を出力する。
ＳＰＥ制御部５９９Ａ〜５９９Ｄは、供給された実行許可信号に基づいて、それぞれのＳＰＥの演算制御を行う。
【００９０】
本実施形態では、図５に示すＧフラグスタックをＳＰＥ５０２Ａ、ＳＰＥ５０２Ｂ、ＳＰＥ５０２Ｃ及びＳＰＥ５０２Ｄにそれぞれ設けた構成である。各ＳＰＥは通常はそれぞれのＧ、Ｇｂ、Ｇｃ、Ｇｄフラグソース信号に基づいて個別に命令実行が制御されるが、必要に応じて特定のＳＰＥのＧフラグソースに応じて命令実行が制御されるようにする。
【００９１】
図２９は、第５実施形態の構成において追加する命令を示す。
これらの命令はＳＰＥ５０２Ｂ、ＳＰＥ５０２Ｃ、ＳＰＥ５０２Ｄでのみ有効であり、ＳＰＥ５０２Ａで「PSH」命令又は「PSHI」命令でＧフラグスタックをプッシュするタイミングでのみ実行できる。
【００９２】
図３０は、ＳＰＥ５０２Ｂの同期化回路を示すブロック図である。
この図には、ＳＰＥ５０２Ａの概略構成と、ＳＰＥ５０２Ｂの構成を示す。
ＳＰＥ５０２Ａは、Ｇフラグソース５０ＦＳＡ、フラグスタック５０ＳＴＡ及びＳＰＥ制御部５９９Ａが示されている。
Ｇフラグソース５０ＦＳＡは、図示されないフラグレジスター９７から出力されるコンディションフラグの値と、ＰＥ−Ｉ３が指定した制御信号とのゲート処理を行って、判定するコンディションフラグの状態を検出したＧフラグソース信号（Gflag_org_A）を出力する。入力される各信号は、前述の図５と同じである。
Ｇフラグソース５０ＦＳＡは、ＳＰＥ５０２ＡにおけるＧフラグスタック５０ＳＴＡにＧフラグソース信号（Gflag_org_A）を供給し、ＳＰＥ５０２Ａの制御を行う。また、Ｇフラグソース５０ＦＳＡは、ＳＰＥ５０２Ｂ及び図示されないＳＰＥ５０２Ｃ、ＳＰＥ５０２ＤにＧフラグソース信号（Gflag_org_A）を供給する。ＳＰＥ制御部５９９Ａは、ＳＰＥ制御部１９９Ａに相当する。
【００９３】
ＳＰＥ５０２Ｂは、Ｇフラグソース５０ＦＳＢ、フラグスタック５０ＳＴＢ及びＳＰＥ制御部５９９Ｂ、実行選択部５５Ｂ及び実行制御部５０ＳＣＢが示されている。
Ｇフラグソース５０ＦＳＢ及びＳＰＥ制御部５９９Ｂは、前述のＳＰＥ５０２Ａと同じ構成を有する。
実行選択部５５Ｂは、入力されるＧフラグソース５０ＦＳＡ及びＧフラグソース５０ＦＳＢの信号を選択してフラグスタック５０ＳＴＢに出力する。
実行制御部５０ＳＣＢは、ＳＰＥ５０２Ｂにおける「PSH」命令か「PSHI」命令に応じて、実行制御部５５Ｂの入力信号の選択を制御する。
フラグスタック５０ＳＴＢは、実行選択部５５Ｂで選択された結果を、Ｇフラグスタック５１Ｂに順次蓄積する。
ＳＰＥ５０２Ｂについて示したが、ＳＰＥ５０２Ｃ、ＳＰＥ５０２Ｄについても同じ構成で接続される。
【００９４】
この実施形態ではＧフラグスタック５０ＳＴＡ〜５０ＳＴＤを全てのＳＰＥに設け、そこにプッシュされる値自体を制御している点が、前述の実施形態２、３、４と異なる。ＳＰＥ５０２ＡのＧフラグスタックは図５と基本的に同じであるが、オペランドの論理和をとった信号Gflag_org_Aを引き出して、他のＳＰＥに供給するところが異なる。
【００９５】
ＳＰＥ５０２Ｂにおいて「PSH」命令か「PSHI」命令が実行された場合は、Ｇフラグスタックにプッシュされる値は図５の場合と同じである。したがって、ＳＰＥ５０２ＢはＳＰＥ５０２Ａと非同期にネスト（入れ子）したプログラムを実行できる。ＳＰＥ５０２Ｂにおいて「SYNC」命令又は「SYNCI」命令が発行されると、cnt_SYNC_B又はcnt_SYNCI_B信号がアクティブになり、sel1で選択されたGflag_org_Aが、Ｇフラグスタックにプッシュされる。「SYNCI」命令と「PSHI」命令の場合には、sel1で選択されたコンディションコードの値が反転されてからＧフラグスタックに書き込まれる。その他、「POP」命令や「FLSH」命令が発行された時の動作や、システムリセット信号system_resetがアクティブになった時の動作は、図５の場合と同様である。
【００９６】
第５の実施形態によって処理が高速化されることを、プログラム例を用いて説明する。
図３１は、並列計算装置１において、図１３のプログラムを実行するために図１３のプログラムを並列化した例を示す。
ＳＰＥ５０２Ａで条件判断を２回行って「PSHI」命令でＧフラグスタックにプッシュしている。同時にＳＰＥ５０２ＢとＳＰＥ５０２Ｃでは２回とも「SYNCI」命令でＧフラグスタックにプッシュしている。この結果、ＳＰＥ５０２ＢとＳＰＥ５０２ＣのＧフラグはＳＰＥ５０２ＡのＧフラグ同じ値を保持しているので、ＳＰＥ５０２Ａで実行される命令はＳＰＥ５０２ＢとＳＰＥ５０２Ｃでも実行され、ＳＰＥ５０２Ａで実行されない命令はＳＰＥ５０２ＢとＳＰＥ５０２Ｃでも実行されない。
【００９７】
特徴的なのはＳＰＥ５０２Ｄの動作である。ＳＰＥ５０２ＤではＳＰＥ５０２Ａで最初の「PSHI C,Z」命令が実行される時に、「SYNC」命令でＳＰＥ５０２ＡのＧフラグスタックにプッシュされる値の反転を、自身のＧフラグスタックにプッシュしている。したがって、ＳＰＥ５０２Ｄでは「else文」以降に相当する「＊５」を付した命令部分を直ぐに実行できる。
そこで、予め「MVA R8」命令と「ADD R5」命令でデータを用意しておき、「SYNC」命令の直後に「MV R8」命令で結果をレジスターR8に書き込んでいる。「MV R8」命令直後の「GINV」命令には注意が必要である。図１３の「＊４」を付した命令部分はＳＰＥ５０２Ａでの最初の条件判断が真で、２番目の条件判断が偽の場合に実行される。ＳＰＥ５０２Ｄでは最初の条件判断でＳＰＥ５０２Ａとは反対の値をＧフラグスタックにプッシュしているので、そのままでは「＊４」を付した命令部分を実行できない。そこで「GINV」命令によって最初にプッシュした値を反転している。その後、ＳＰＥ５０２Ａで２度目の「PSHI C,Z」命令が実行される時に、「SYNC」命令でＳＰＥ５０２Ａとは反対の値をプッシュすることで「＊４」を付した命令部分を担当できるようになる。この実施形態では全ての処理が１０クロックで終了する。
【００９８】
ＳＰＥ５０２Ａでは最後に「POP」命令を２度繰り返しているが、ＳＰＥ５０２Ｂなどと同様に１つの「FLSH」命令に置き換えることができる。また、ＳＰＥ５０２Ａ、ＳＰＥ５０２Ｂ、ＳＰＥ５０２Ｃで使われていない部分が空白となっているが、ここには任意の命令をおくことができ、ＳＰＥ５０２Ａとシンクロする必要が無い命令を並列に実行できる。
【００９９】
（第６実施形態）
本発明の第６の実施形態について説明する。
図３２は、並列計算装置１の演算処理部の概略構成を示すブロック図である。
ここでは、演算制御処理の説明に必要な主たる構成を示す。演算処理については、図に示される演算処理部６００は、並列して演算処理を行う複数の演算プロセッサー（ＰＥ）６０２と、複数のＰＥ６０２にＳＰＥ制御信号線を介して制御命令を供給する制御信号生成部（ＰＥ−Ｉ）３と、ＰＥ−Ｉ３の制御を受けて各ＳＰＥを同期させる実行制御部５０ＳＣＡ〜５０ＳＣＤを備える。
【０１００】
ＰＥ６０２のそれぞれが、サブプロセッサー（ＳＰＥ）６０２Ａと、サブプロセッサー（ＳＰＥ）６０２Ｂ〜６０２Ｄを備える。
ＳＰＥ６０２Ａは、Ｇフラグソース５０ＦＳＡ、Ｇフラグスタック６０ＳＴＡ、ＳＰＥ制御部６９９Ａ及び実行選択部６４５Ａを備える。
ＳＰＥ６０２Ａは、前述のＳＰＥ５０２Ａに相当する構成に加え、入力されるＧフラグソース信号を実行選択部６４５Ａからの制御信号に基づいて選択する構成を備える。Ｇフラグスタック６０ＳＴＡは、Ｇフラグスタック５０ＳＴＡと同じ構成である。ＳＰＥ制御部６９９Ａは、ＳＰＥ制御部１９９Ａに相当する。
ＳＰＥ６０２Ｂは、Ｇフラグソース５０ＦＳＢとＧフラグスタック６０ＳＴＢとＳＰＥ制御部６９９Ｂと実行選択部６４５Ｂを備える。ＳＰＥ６０２Ｃは、Ｇフラグソース５０ＦＳＣとＧフラグスタック６０ＳＴＣとＳＰＥ制御部６９９Ｃと実行選択部６４５Ｃを備える。ＳＰＥ６０２Ｄは、Ｇフラグソース５０ＦＳＤとＧフラグスタック６０ＳＴＤとＳＰＥ制御部６９９Ｄと実行選択部６４５Ｄを備える。
ＳＰＥ６０２Ｂ〜ＳＰＥ６０２Ｄは、ＳＰＥ６０２Ａと同様の構成を有する。
【０１０１】
Ｇフラグソース５０ＦＳＡ〜５０ＦＳＤは、実行選択部６４５Ａ〜６４５Ｄを介してＧフラグスタック６０ＳＴＡ〜６０ＳＴＤにＧフラグソース信号を供給する。
実行選択部６４５Ａ〜６４５Ｄは、Ｇフラグソース５０ＦＳＡ〜５０ＦＳＤから供給されたＧフラグソース信号（Ｇａフラグソース信号〜Ｇｄフラグソース信号）のいずれかをそれぞれ選択し、選択された信号の値をそれぞれのＧフラグスタック６０ＳＴＡ〜６０ＳＴＤに蓄積する。それぞれのＧフラグスタック６０ＳＴＡ〜６０ＳＴＤは、蓄積されたＧフラグソース信号に基づいて、ＳＰＥ制御部６９９Ａ〜６９９Ｄの実行制御信号を出力する。
ＳＰＥ制御部６９９Ａ〜６９９Ｄは、供給された実行許可信号に基づいて、それぞれのＳＰＥの演算制御を行う。
【０１０２】
本実施形態では、図５に示すＧフラグスタックをＳＰＥ６０２Ａ、ＳＰＥ６０２Ｂ、ＳＰＥ６０２Ｃ及びＳＰＥ６０２Ｄにそれぞれ設けた構成である。各ＳＰＥは通常はそれぞれのＧａ、Ｇｂ、Ｇｃ、Ｇｄフラグソース信号の値に基づいて個別に命令実行が制御されるが、必要に応じての任意のＳＰＥのＧフラグに応じて命令実行が制御される。
【０１０３】
図３３は、第６実施形態の構成において追加する命令を示す。
図３４は、第６実施形態のＳＰＥの同期化回路を示すブロック図である。
図３４には、代表してＳＰＥ６０２Ａの構成例を示す。ＳＰＥ６０２Ａは、Ｇフラグソース５０ＦＳＡとＧフラグスタック６０ＳＴＡとＳＰＥ制御部６９９Ａと実行選択部６４５Ａを備える。
実行選択部６４５Ａは、実行選択部６４Ａと６５Ａを備える。
実行選択部６４Ａは、図２５に示す実行選択部４４Ａと同じで構成であり、実行選択部６５Ａは、図３０に示した実行選択部５５Ｂと同じ構成である。
また、実行制御部６０ＳＣＡは、図３０に示した実行制御部５０ＳＣＢに相当する実行制御部５０ＳＣＡの構成と図２５に示した実行制御部４０Ａの構成を合わせて備える。
【０１０４】
実行選択部６４５Ａにおける実行選択部６４Ａは、入力されるＧフラグソース５０ＦＳＡからＧフラグソース５０ＦＳＤの信号のいずれかを選択してその値を出力する。また、実行選択部６５Ａは、実行選択部６４Ａから出力されたフラグソース信号とＧフラグソース５０ＦＳＡからの信号のいずれかを選択してその値をフラグスタック６０ＳＴＡに出力する。
実行制御部６０ＳＣＡは、ＳＰＥ６０２Ａにおける「PSH」命令か「PSHI」命令に応じて、実行制御部６４５Ａの入力信号の選択を制御する。
フラグスタック６０ＳＴＡは、実行選択部６４５Ａで選択された結果を、Ｇフラグスタック５１Ａに順次蓄積する。
ＳＰＥ６０２Ａについて示したが、ＳＰＥ６０２Ｂ、ＳＰＥ６０２Ｃ、ＳＰＥ６０２Ｄについても同じ構成で接続される。
【０１０５】
「SYNC」命令と「SYNCI」命令はオペランドにA, B, C, Dの何れか一つを指定でき、それに応じて、前述の図２６のようにcnt_Gsel_1_Aとcnt_Gsel_0_A信号が決定される。これらの命令にしたがって、実行制御部６０ＳＣＡにおける実行制御部４０Ａは、ＳＰＥの実行制御の条件を他の任意のＳＰＥのＧフラグを参照させることにより、ＳＰＥの実行制御を他の任意のＳＰＥに同期させる。
また、「PSH」命令か又は「PSHI」命令が実行された場合に、Ｇフラグスタックにプッシュされる値は、図５の場合と同じである。これらの命令のオペランドによって選択されたコンディションフラグは、Gflag_org_Aとして他のＳＰＥにも供給される。Gflag_org_B、Gflag_org_C、Gflag_org_Dは、それぞれＳＰＥ６０２Ｂ、ＳＰＥ６０２Ｃ、ＳＰＥ６０２Ｄで生成される信号である。
「SYNC」命令又は「SYNCI」命令が発行されると、cnt_SYNC_A又はcnt_SYNCI_A信号がアクティブになり、実行選択部６４Ａで選択されたコンディションコードが、実行選択部６５Ａによって選択されてその値がＧフラグスタックにプッシュされる。「SYNCI」命令と「PSHI」命令の場合には、選択されたコンディションコードの値が反転されてからＧフラグスタックに書き込まれる。「POP」命令、「POPI」命令、「GINV」命令及び「FLSH」命令が発行された時の動作や、システムリセット信号system_resetがアクティブになった時の動作は、図５の場合と同じである。
【０１０６】
第６の実施形態によって処理が高速化されることを、プログラム例を用いて説明する。
図３５は、第６実施形態の並列計算装置１において、図１３のプログラムを実行するために４並列のVLIW型用に図１３のプログラムを変換した例を示す。
この例ではＳＰＥ６０２Ｂで２回条件判断を行い、「PSHI」命令でＧフラグスタックにプッシュしている。
同時にＳＰＥ６０２ＡとＳＰＥ６０２Ｃでは「SYNCI B」命令でＧフラグスタックをプッシュしている。したがって、ＳＰＥ６０２ＡとＳＰＥ６０２ＣのＧフラグはＳＰＥ６０２ＢのＧフラグと同じ値を保持しているので、ＳＰＥ６０２Ｂで実行される命令はＳＰＥ６０２Ａ及びＳＰＥ６０２Ｃでも実行され、ＳＰＥ６０２Ｂで実行されない命令はＳＰＥ６０２Ａ又はＳＰＥ６０２Ｃでも実行されない。
【０１０７】
特徴的なのはＳＰＥ６０２Ｄの動作である。ここではＳＰＥ６０２Ｂで最初の「PSHI C,Z」命令が実行される時に、「SYNC B」命令でＳＰＥ６０２ＢのＧフラグスタックにプッシュされる値の反転を、自身のＧフラグスタックにプッシュしている。したがって、ＳＰＥ６０２Ｄでは「else文」以降に相当する「＊５」を付した命令部分を直ぐに実行できる。そこで、予め「MVA R8」命令と「ADD R5」命令でデータを用意しておき、「SYNC B」命令の直後に「MV R8」命令で結果をレジスターR8に書き込んでいる。「MV R8」命令直後の「GINV」命令は注意が必要である。図１３の「＊４」を付した命令部分はＳＰＥ６０２Ｂでの最初の条件判断が真で、２番目の条件判断が偽の場合に実行される。ＳＰＥ６０２Ｄでは最初の条件判断でＳＰＥ６０２Ｂとは反対の値をＧフラグスタックにプッシュしているので、そのままでは「＊４」を付した命令部分を実行することができない。そこで「GINV」命令によって、最初にプッシュした値を反転している。そして、ＳＰＥ６０２Ｂで２度目の「PSHI C,Z」命令が実行される時に、「SYNC B」命令でＳＰＥ６０２Ｂとは反対の値をプッシュすることで「＊４」を付した命令部分を担当できる。この実施形態では全ての処理が１０クロックで終了している。
【０１０８】
なお、ＳＰＥ６０２Ａ、ＳＰＥ６０２Ｂ、ＳＰＥ６０２Ｃで使われていない部分が空白となっているが、ここには任意の命令をおくことができ、ＳＰＥ６０２Ｂと同期する必要が無い命令を並列に実行できる。 このプログラム例では処理に必要なクロック数が実施形態５と同じであるが、条件判断するＳＰＥを任意に設定できるので、ＳＰＥの使い方の柔軟性が向上し、一般的には実施形態５よりも処理を高速化できる。
【０１０９】
（第７実施形態）
次に本発明の第７の実施形態について説明する。
この実施形態では、図５に示すＧフラグスタックをＳＰＥ７０２Ａにだけ設け、ＳＰＥ７０２Ａ以外のＳＰＥはＳＰＥ７０２ＡのＧフラグ又はＧフラグの反転信号に応じて命令実行が制御されるか、又はＳＰＥ７０２ＡのＧフラグに影響されず常に命令を実行するかを選択する。
【０１１０】
図３６は、並列計算装置１の演算処理部の概略構成を示すブロック図である。
ここでは、演算制御処理の説明に必要な主たる構成を示す。演算処理については、図に示される演算処理部７００は、並列して演算処理を行う複数の演算プロセッサー（ＰＥ）７０２と、複数のＰＥ７０２にＳＰＥ制御信号線を介して制御命令を供給する制御信号生成部（ＰＥ−Ｉ）３と、ＰＥ−Ｉ３の制御を受けて各ＳＰＥを同期させる実行制御部７０ＳＣＢ〜７０ＳＣＤ、ＰＥ−Ｉ３の制御を受けてＧフラグの信号を反転させる反転制御部７９Ｂ〜７９Ｄを備える。
【０１１１】
ＰＥ７０２のそれぞれが、サブプロセッサー（ＳＰＥ）７０２Ａと、サブプロセッサー（ＳＰＥ）７０２Ｂ〜７０２Ｄを備える。ＳＰＥ７０２Ａは、Ｇフラグ処理部１０とＳＰＥ制御部７９９Ａを備える。ＳＰＥ７０２Ｂ〜７０２Ｄは、それぞれＳＰＥ制御部７９９Ｂ〜７９９Ｄ、処理選択部７５Ｂ〜７５Ｄを備える。
ＳＰＥ７０２Ｂ〜７０２Ｄにおける処理選択部７５Ｂ〜７５Ｄは、それぞれ実行選択部７４Ｂ〜７４Ｄと反転処理部７８Ｂ〜７８Ｄを備える。
Ｇフラグ処理部１０は、ＳＰＥ制御部７９９Ａと、反転処理部７８Ｂ〜７８Ｄ、実行選択部７４Ｂ〜７４Ｄを介してＳＰＥ制御部７９９Ｂ〜７９９ＤにＧフラグ信号を供給する。
反転処理部７８Ｂ〜７８Ｄは、Ｇフラグ処理部１０から供給されるＧフラグに対し、反転制御部７９Ｂ〜７９Ｄからの制御信号に基づいて反転処理を行う。実行選択部７４Ｂ〜７４Ｄは、供給されたＧフラグ信号又は反転されたＧフラグ信号と、実行制御部７０ＳＣＢ〜７０ＳＣＤの実行許可信号に基づいて、ＳＰＥ制御部７９９Ｂ〜７９９Ｄにそれぞれ実行許可信号を出力する。
ＳＰＥ制御部７９９Ａ〜７９９Ｄは、供給された実行許可信号に基づいて、それぞれのＳＰＥの演算制御を行う。
【０１１２】
図３７は、第７実施形態の構成において追加する命令を示す。
これらの命令はＳＰＥ７０２Ｂ、ＳＰＥ７０２Ｃ及びＳＰＥ７０２Ｄでのみ実行可能である。例えば、ＳＰＥ７０２Ｂにおいて「SYNC」命令を実行するとＳＰＥ７０２ＡのＧフラグを命令実行制御に使うようになり、「SYNCI」命令を実行するとＳＰＥ７０２ＡのＧフラグの値の反転を命令実行制御に使うようになり、「ASYNC」命令を実行するとＳＰＥ７０２ＡのＧフラグの値とは無関係に命令を実行するようになる。
【０１１３】
図３８は、ＳＰＥの同期化回路を示すブロック図である。
この例はＳＰＥ７０２Ｂの場合であり、煩雑になるので図５と同じ回路の図示を省略している。
この図には、Ｇフラグ処理部１０と、ＳＰＥ７０２Ａと７０２Ｂが備えるＳＰＥ制御部７９９Ａと７９９Ｂ、実行選択部７４Ｂ及び実行制御部７０ＳＣＢ、反転制御部７９Ｂ、反転処理部７８Ｂが示される。前述の図１０、１２、１５に示した構成と同じ構成には、同じ符号を附す。
Ｇフラグ処理部１０は、前述の図５に示した構成と同じであり、出力する信号をGlobal_Inst_en_Aとする。Global_Inst_en_Aは、ＳＰＥ７０２Ａの信号であることを明示する以外は、図５のGlobal_Inst_en信号と同じである。
【０１１４】
実行制御部７０ＳＣＢは、ＰＥ-Ｉ３からの制御信号によりＳＰＥ７０２Ｂの実行を制御する制御信号（Async_B）を出力する。実行制御部７０ＳＣＢは、実行選択部７４Ｂを制御して制御信号Global_Inst_en_B信号を生成する。反転処理部７８Ｂは、Ｇフラグの値の反転処理を行う。ここではＥＸＯＲ回路で示す。反転制御部７９Ｂは、ＰＥ−Ｉ３からの制御信号によりＳＰＥ７０２Ｂの実行を制御する制御信号（Inv_B）を出力する。
【０１１５】
Global_Inst_en_BはＳＰＥ７０２Ｂで命令実行制御に使われる信号である。system_resetがアクティブ(「１」)になると、フリップフロップ７１ＢがセットされてAsync_B信号が「１」になる。よって、Global_Inst_en_Bが常に「１」になるので、ＳＰＥ７０２Ｂでは常に命令が実行される。「SYNC」命令が発行されるとcnt_SYNC_B信号がアクティブになり、Inv_B信号は「０」にAsync_B信号も「０」になる。したがって、Global_Inst_en_BはGlobal_Inst_en_Aと同じになる。つまり、ＳＰＥ７０２ＢはＳＰＥ７０２ＡのＧフラグの値に応じて、その命令実行が制御される。
【０１１６】
「SYNCI」命令が発行されるとcnt_SYNCI_B信号がアクティブになり、Inv_B信号は「１」にAsync_B信号は「０」になる。したがって、Global_Inst_en_BはGlobal_Inst_en_Aの反転になる。つまり、ＳＰＥ７０２ＢはＳＰＥ７０２ＡのＧフラグの値の反転に応じて、その命令実行が制御される。「ASYNC」命令が発行されるとcnt_ASYNC_B信号がアクティブになり、Inv_B信号は「０」に、Async_B信号は「１」になる。なお、フリップフロップ７１Ｂと反転制御部７９Ｂは、図示しない並列計算装置１内部の基本クロックの立ち上がりで変化する。
ＳＰＥ７０２Ｃ、ＳＰＥ７０２ＤについてもＳＰＥ７０２Ｂに示した構成と同じである。
【０１１７】
第７の実施形態によって処理が高速化されることを、プログラム例を用いて示す。
図３９は、第７実施形態の並列計算装置１において、図１３のプログラムを実行するために４並列のVLIW型用に図１３のプログラムを変換した例を示す。
ＳＰＥ７０２Ａで条件判断等を行い、ＳＰＥ７０２Ｂ等ではその結果に同期して命令を実行する。先ず、「＊１」を付した命令の部分であるが、ＳＰＥ７０２Ａで条件判断するまでの間にＳＰＥ７０２Ｂで「ADD R7」命令まで実行しておき、ＳＰＥ７０２Ａで「PSHI C,Z」命令を実行した直後に「MV R7」命令で結果をレジスターR7に書き込む。「＊２」を付した命令の部分も同様であり、「CLR」命令でＡｃｃ−Ａを予め「０」にしておくことで、ＳＰＥ７０２Ａで「CMP R6」命令の結果をＧフラグスタックにプッシュした直後にレジスターR7をクリアできる。
同様に「＊３」を付した命令で示すようにＳＰＥ７０２Ｃでも予めデータを用意しておき、直ぐにレジスターR9への書き込みを行える。
【０１１８】
ＳＰＥ７０２Ｄの「＊５」を付した命令部分では、先ずＳＰＥ７０２Ａの状態に拠らず「MVA R8」命令と「ADD R5」命令まで実行しておき、ＳＰＥ７０２Ａで「PSHI C,Z」命令を実行した時に「SYNCI」命令を実行している。したがって、ＳＰＥ７０２ＡのＧフラグの値の反転で実行制御されるので、「else文」以降に相当する「MV R8」命令を直ぐに実行できる。「＊４」を付した命令部分も同様で、一旦「ASYNC」命令を実行してＳＰＥ７０２ＡのＧフラグの値とは無関係に「MVA R10」命令と「INC」命令を実行しておき、ＳＰＥ７０２Ａでの「GINV」命令の後で「SYNC」命令を実行することで、「MV R10」命令だけをＳＰＥ７０２Ａと同期させている。このように４つのＳＰＥで並列処理することで、図１３では２１クロックかかった処理が１０クロックで終わる。
【０１１９】
なお、図３９でＳＰＥ７０２Ｂ、ＳＰＥ７０２Ｃ、ＳＰＥ７０２Ｄで使われていない部分が空白又は網掛けで示されている。空白部分には任意の命令を配置することができ、ＳＰＥ７０２Ａと同期する必要が無い命令を並列実行できる。一方、網掛けの部分にはＳＰＥ７０２Ａと同期した命令か、「NOP」命令が配置できる。本実施形態では、第２実施形態に比べて２クロック少なくて処理できる。したがって、演算処理全体でも第２実施形態より短時間で終わる可能性が高い。
【０１２０】
以上に示された本発明の実施形態によれば、SIMD型にVLIW型を組み合わせた並列計算装置において、多重にネストした構造化プログラムをサポートするハードウェアを容易に実現できる。したがって、多数の演算素子（プロセッサー）を効率的に並列動作させられるので、科学技術計算や画像処理に必要とされる数Tflops又は数100GOPSの演算能力を持つ計算機を容易に実現できる。
【０１２１】
なお、本発明は、上記の各実施形態に限定されるものではなく、本発明の趣旨を逸脱しない範囲で変更可能である。
例えば、本発明の１個の並列処理装置１に内蔵される演算プロセッサーの個数を１０８としたが、本発明はこれに制限されるものではなく、一般的に２以上の演算プロセッサーを内蔵する計算機に適用できる。また、プログラムのネストの階層を４としたが、本発明はこれに制限されるものではなく、一般的に２以上のネストを持つ構造に有効である。
また、VLIW型で並列化するサブプロセッサーの個数を演算プロセッサーごとに４としたが、本発明はこれに制限されるものではなく、２以上のサブプロセッサーを持つシステムに適用できる。
また、命令実行を制御するフラグ情報として、キャリー（Ｃ）フラグ、ネガティブ（Ｎ）フラグ、オーバーフロー（Ｖ）フラグ、ゼロ（Ｚ）フラグの４つを用いているが、本発明はこれに制限されるものではなく、これらの中のいくつか、例えばＶフラグを省略することが可能であるし、或いは逆にハーフキャリー（Ｈ）を採用することも可能である。
また、本発明の実施形態では、特にアキュムレーター（Ａｃｃ）やＡＬＵのビット数について言及しなかったが、任意のビット数を持つ並列計算装置に、本発明を適用可能である。
【符号の説明】
【０１２２】
１０２  演算プロセッサー（ＰＥ）
１０２Ａ  サブ演算プロセッサー（ＳＰＥ、特定サブプロセッサー）
１０２Ｂ、１０２Ｃ、１０２Ｄ  サブ演算プロセッサー（ＳＰＥ、サブプロセッサー）
１１  Ｇフラグスタック（第１制御情報保持部）
１９  合成部（第１合成部）
９５Ａ  ＡＬＵ（第１演算部）
１９９Ａ  ＳＰＥ制御部（第１制御部）
９５Ｂ  ＡＬＵ（第２演算部）
【図１】
2010271799.tif 000003
【図２】
2010271799.tif 000004
【図３】
2010271799.tif 000005
【図４】
2010271799.tif 000006
【図５】
2010271799.tif 000007
【図６】
2010271799.tif 000008
【図７】
2010271799.tif 000009
【図８】
2010271799.tif 000010
【図９】
2010271799.tif 000011
【図１０】
2010271799.tif 000012
【図１１】
2010271799.tif 000013
【図１２】
2010271799.tif 000014
【図１３】
2010271799.tif 000015
【図１４】
2010271799.tif 000016
【図１５】
2010271799.tif 000017
【図１６】
2010271799.tif 000018
【図１７】
2010271799.tif 000019
【図１８】
2010271799.tif 000020
【図１９】
2010271799.tif 000021
【図２０】
2010271799.tif 000022
【図２１】
2010271799.tif 000023
【図２２】
2010271799.tif 000024
【図２３】
2010271799.tif 000025
【図２４】
2010271799.tif 000026
【図２５】
2010271799.tif 000027
【図２６】
2010271799.tif 000028
【図２７】
2010271799.tif 000029
【図２８】
2010271799.tif 000030
【図２９】
2010271799.tif 000031
【図３０】
2010271799.tif 000032
【図３１】
2010271799.tif 000033
【図３２】
2010271799.tif 000034
【図３３】
2010271799.tif 000035
【図３４】
2010271799.tif 000036
【図３５】
2010271799.tif 000037
【図３６】
2010271799.tif 000038
【図３７】
2010271799.tif 000039
【図３８】
2010271799.tif 000040
【図３９】
2010271799.tif 000041
【図４０】
2010271799.tif 000042
【図４１】
2010271799.tif 000043
【図４２】
2010271799.tif 000044
【図４３】
2010271799.tif 000045
【図４４】
2010271799.tif 000046
【図４５】
2010271799.tif 000047
【図４６】
2010271799.tif 000048
【図４７】
2010271799.tif 000049