JP5452066B2 - 並列計算装置 - Google Patents

並列計算装置 Download PDF

Info

Publication number
JP5452066B2
JP5452066B2 JP2009106238A JP2009106238A JP5452066B2 JP 5452066 B2 JP5452066 B2 JP 5452066B2 JP 2009106238 A JP2009106238 A JP 2009106238A JP 2009106238 A JP2009106238 A JP 2009106238A JP 5452066 B2 JP5452066 B2 JP 5452066B2
Authority
JP
Japan
Prior art keywords
unit
statement
flag
instruction
flag information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2009106238A
Other languages
English (en)
Other versions
JP2010257200A (ja
Inventor
新次郎 豊田
宣明 宮川
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Honda Motor Co Ltd
Original Assignee
Honda Motor Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Honda Motor Co Ltd filed Critical Honda Motor Co Ltd
Priority to JP2009106238A priority Critical patent/JP5452066B2/ja
Publication of JP2010257200A publication Critical patent/JP2010257200A/ja
Application granted granted Critical
Publication of JP5452066B2 publication Critical patent/JP5452066B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Description

本発明は、並列計算装置に関する。
近年、半導体技術の進歩により汎用プロセッサー(CPU(Central Processing Unit)等)の性能は飛躍的に向上したが(たとえば数Gflops/プロセッサー)、科学技術計算や画像処理等の分野において、更に大幅な性能向上が求められている。たとえば、数Tflops(Tera Floating point number Operations Per Second)、又は、数100GOPS(Giga Operation Per Second)以上の性能が求められている。こうした要求に応える為に、複数のプロセッサーを一個のLSI(Large Scale Integration)に集積する並列計算装置(並列プロセッサー)が研究開発されている。このような並列計算装置には、汎用CPUをコアとして、それを1つのLSI中に複数個集積する物もある。
こうした性能要求に応える物としては例えば、株式会社ソニー・コンピュータエンタテインメントと株式会社東芝とIBM社とが共同開発したCell Broadband Engine(以下Cellとする)(画像処理及び科学技術計算用)、日本電気株式会社が開発したIMAP(画像処理用)、CONNEX社が開発したLine Dancer (画像処理用)などがある(非特許文献1から3参照)。
ところで科学技術計算や画像処理では、膨大な量のデータに対してほぼ同一の処理を行うという特徴がある。この特徴を生かして上記プロセッサーではSIMD(Single Instruction Multi Data)型のアーキテクチャが採用されている。つまり、多数のプロセッサーに対して別々のデータを与えるが、命令は同一とする制御方式である。
命令を同一にする理由は、異なる命令をインストラクションメモリから同時に読み出して、各プロセッサーに供給するMIMD(Multi Instruction Multi Data)方式では、複数のインストラクションメモリとそのデコード回路が必要となるのでハードウェアコストが増大し、かつソフトウェア開発の大幅な複雑化及び、ソフトおよびハードのデバッグが非常に困難になるからである。
次に、構造化プログラミングについて説明する。図15は分岐の有るプログラムのフローチャートの一部である。このプログラムでは、変数abcと変数defの内容を比較し、変数abcの方が大きければ変数x1に変数abcの値を加え、そうでなければ変数x2に変数defの値を加えている。図16は図15のフローチャートをC言語で記述したものある。こうした記述方法は構造化プログラミングと呼ばれている。図17は図16のコードを計算機の機械語に近いアセンブラ言語へ変換したものである。ここでは、変数abcをレジスターR2に、変数defをレジスターR3に、変数x1をレジスターR4に、変数x2をレジスターR5に、それぞれCコンパイラが割り付けたと仮定している。図17で注意すべき点は、図15のフローを実装する為に、条件ジャンプ命令BGT(比較結果が大きかった場合にジャンプする)を用いていることである。因みに、BR命令は常にジャンプする命令である。
ところでSIMD型アーキテクチャでは、並列計算する場合において、条件ジャンプ命令を使ってプログラム分岐を実装することは難しい。例えば、8個のプロセッサーで構成されるSIMD型計算機を考える。レジスターR2やレジスターR3は8個のプロセッサーでそれぞれ別なので、それらに格納されているデータは異なる。従って、レジスターR2とレジスターR3との比較結果が各プロセッサーでバラバラなので、或るプロセッサーではジャンプし、別のプロセッサーではジャンプしないという状態が生じるが、SIMD型なので、それぞれのプロセッサーが別々の命令を実行できない。そのため、このままでは図15のフローを実現できないことになる。なお、この問題は、たとえばプログラム実行時にプロセッサー毎にジャンプ条件が異なる場合について発生する問題であり、たとえば、予め回数が決まっているループの制御などのように、常に全てのプロセッサーでジャンプ条件が一致するような制御は、SIMD型アーキテクチャでも実装可能である。
前述のSIMD型アーキテクチャの欠点を回避する方法として、通常の命令を条件付にするアーキテクチャがある。これについてはSIMD型ではないが、ARM社のARMプロセッサーのマニュアル「ARMアーキテクチャリファレンスマニュアル」(ARM v6.pdf)の第A3章に詳しい記述がある。ARMプロセッサーのほぼ全ての命令は条件付で実行できるので、これらを使うと図16のコードは例えば図18のように記述できる。図18中の「AL」は常に実行することを、「HI」は比較結果が大きかった場合に、「LS」は比較結果が小さいか等しい場合に実行することを示している。ここで「ADD HI, R4, R4, R2」という命令に“S”が付加されていないので、この命令ではCMP命令でセットされた条件が変更されない点に留意する。(上記マニュアルA3-7ページ参照)
ここで「命令を実行しない」ということの意味について説明する。一般的なプロセッサーに於いて命令は通常、命令フェッチ(IF)、命令解読(DEC)、オペランドフェッチ(OF)、演算実行(EXE)、演算結果の書き込み(WB)という手順で実行されている。現在の高速なプロセッサーではこの手順は、例えば図19のタイミングチャートに示すように5つに分割されパイプライン化されている。CMP命令の比較結果はその命令のEXE部の最後、又はWB部にならないと確定しない。従って、CMP命令の結果によって次のADD命令をNOP(ノーオペレーション)命令に変更するのは間に合わない。
しかしながら、次に続くADD命令の演算結果を所定の位置に書き込まなければ、何も実行しなかったことと等価である(ただし、オペランドフェッチ時等にプロセッサーの内部状態が変化してしまう場合を除く。こうしたことが起こる場合は後で補正が必要である。)。つまり、CMP命令の結果によって次のADD命令のWBを制御し、R4への書き込みを無効にしてしまえば、ADD命令はNOP命令と等価になる。CELL、IMAP、Line Dancer等のSIMD型プロセッサーは、このアイデアを元に条件付命令を実装している。
"CELLプロプグラミングチュートリアル"、「2.5 SIMD演算における条件分岐」、2009年4月13日検索、インターネット<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、2009年4月13日検索、<URL:http://www.hotchips.org/archives/hc18/2_Mon/HC18.S5/HC18.S5T2.pdf>
従来のSIMDを用いた技術では、分岐が一層までのフローには対応できるが、2層以上の分岐が有るネスト(入れ子)した構造化プログラムに対応するのは困難である。図20に2重にネストしたプログラムの例を示す。この例では、符号(2)の比較命令のところでコンディションフラグが書き換えられてしまうので、符号(1)の比較結果(コンディションフラグ)を符号(2)の命令実行前に一旦どこかに退避しておき、符号(3)のelse文で復帰させなければならない。ARMプロセッサーではコンディションフラグをレジスターに書き込むことで退避可能である。図21にプログラム例を示す。
MRS命令がコンディションフラグをレジスターR9に書き込む命令であり、MSR命令がレジスターから戻す命令である。ところがCELLやIMAP及びLine Dancerではコンディションコードを退避できない。従って、図20のコードは図22のようにネストしないコードに書き換えなければならない(図22のプログラムは変数x1の値によっては図20と同じ動作にならない点に要注意)。通常のプログラムではネストが3重4重と深くなることも珍しくなく、そうした場合には書き換えが複雑になりプログラムの記述性が低下する。つまり、従来のSIMD技術ではネストした構造化プログラミングへの対応が困難となる。
すなわち、従来の技術においては、並列計算装置において、複数のネストを持つ構造化プログラムを容易に実行することが難しいという問題があった。
本発明は、このような事情に鑑みてなされたもので、その目的は、複数のネストを持つ構造化プログラムを容易に実行することができる並列計算装置を提供することにある。
この発明は上述した課題を解決するためになされたもので、請求項1に記載の発明は、複数の演算プロセッサー(例えば実施形態のPE-0〜PE-107)を有する並列演算部(例えば実施形態の並列演算部2)と、前記複数の演算プロセッサーのそれぞれに制御命令を供給する制御信号生成部(例えば実施形態のPE-I3)と、を備え、前記複数の演算プロセッサーのそれぞれが、入力されたデータを前記制御命令に基づいて演算処理する演算部(例えば実施形態の(例えば実施形態のPE-A、PE-B、PE-C、PE-D)と、スタック構造を有しており、前記演算部により演算処理された結果に基づいたフラグ情報が前記スタック構造に順次蓄積される制御情報保持部(例えば実施形態のGフラグスタック11)と、前記制御情報保持部に順次蓄積された全てのフラグ情報のうち、少なくとも前記演算処理の結果として蓄積された全てのフラグ情報を合成する合成部(例えば実施形態のAND回路19)と、を備え、前記演算部が、前記合成部が合成したフラグ情報に基づいて前記演算処理する、ことを特徴とする並列計算装置である。
また請求項2に記載の発明は、前記合成部は、前記制御情報保持部に順次蓄積された全てのフラグ情報を合成することを特徴とする請求項1に記載の並列計算装置である。
また請求項3に記載の発明は、前記演算部は、前記合成部が合成した結果をスタック構造に蓄積することなく、該合成した結果に基づいて演算処理することを特徴とする請求項1又は2に記載の並列計算装置である。
また請求項に記載の発明は、前記フラグ情報を前記制御情報保持部に順次蓄積させ、前記制御情報保持部に蓄積されているフラグ情報の蓄積状態を、前記順次蓄積されたフラグ情報が蓄積される前の蓄積状態に順次戻す制御部(例えば実施形態の制御部90)、を有することを特徴とする請求項1から請求項3の何れか1項に記載の並列計算装置である。
また請求項に記載の発明は、前記制御部は、前記制御命令に含まれている条件判断が実行された場合に、当該条件判断された結果を前記フラグ情報として前記制御情報保持部に順次蓄積させる第1の制御部(例えば実施形態のcnt_PSH信号)と、前記条件判断した結果の影響が及ぶ範囲の処理が終了する場合に、前記制御情報保持部に蓄積されているフラグ情報を、当該影響が及ぶ範囲に対応する前記フラグ情報が蓄積される前の蓄積状態に順次戻す第2の制御部(例えば実施形態のcnt_POP信号)と、を有することを特徴とする請求項に記載の並列計算装置である。
また請求項に記載の発明は、前記制御部は、前記制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させる第3の制御部(例えば実施形態のcnt_GINV信号)、を有することを特徴とする請求項4又は請求項に記載の並列計算装置である。
また請求項7に記載の発明は、前記制御部は、第1のIF文について条件判断した結果の影響が及ぶ範囲の中で第2のIF文について条件判断がなされる場合であって、前記第1のIF文に関するTHEN文の影響が及ぶ範囲であり、かつ、前記第2のIF文について条件判断した結果の影響が及ぶ範囲の前記演算部による演算処理が終了し、その直後に、前記第1のIF文に関するELSE文の影響が及ぶ範囲の前記演算部による演算処理を実行する場合に、前記制御情報保持部に保持されているフラグ情報を、前記第2のIF文について条件判断した結果の影響が及ぶ範囲に対応する前記フラグ情報が蓄積される前の蓄積状態に戻すとともに、戻した後において前記制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させる第4の制御部(例えば実施形態のcnt_PSHI信号)、を有することを特徴とする請求項4に記載の並列計算装置である。
また請求項8に記載の発明は、前記制御命令には、前記制御情報保持部のスタック構造の最上段のフラグ情報を論理反転するための第1命令(例えば実施形態のGINV命令)と、前記制御情報保持部のスタック構造の全てのフラグ情報を1段分だけポップした上で、ポップ後の前記制御情報保持部のスタック構造の最上段のフラグ情報を論理反転するための第2命令(例えば実施形態のPOPI命令)が含まれており、前記制御部は、IF文に関するTHEN文の影響が及ぶ範囲の前記演算部による演算処理が終了し、その直後に、前記IF文に関するELSE文の影響が及ぶ範囲の前記演算部による演算処理を実行する場合に、前記第1命令による処理を実行する第3の制御部(例えば実施形態のcnt_GINV信号)、及び、第1のIF文について条件判断した結果の影響が及ぶ範囲の中で第2のIF文について条件判断がなされる場合であって、前記第1のIF文に関するTHEN文の影響が及ぶ範囲であり、かつ、前記第2のIF文について条件判断した結果の影響が及ぶ範囲である範囲の前記演算部による演算処理が終了し、その直後に、前記第1のIF文に関するELSE文の影響が及ぶ範囲の前記演算部による演算処理を実行する場合に、前記第2命令による処理を実行する第4の制御部(例えば実施形態のcnt_PSHI信号)、を有することを特徴とする請求項4に記載の並列計算装置である。
この発明によれば、SIMD型アーキテクチャを採用した並列計算装置において、複数のネストを持つ構造化プログラムをサポートすることができる。
また、請求項2に記載の本発明によれば、制御情報保持部に順次蓄積された全てのフラグ情報を合成することにより、制御情報保持部に蓄積されたフラグ情報の数に応じた数のネストされた判定条件を持つ構造化プログラムをサポートすることができる。また判定条件において、たとえば、IF文をサポートすることができる。
また、請求項3に記載の本発明によれば、前記演算部は、前記合成部が合成した結果をスタック構造に蓄積することなく、該合成した結果に基づいて演算処理することにより、並列計算を制御する際の応答性を高めることができる。
また、請求項に記載の本発明によれば、複数のネストに対応する判定条件を制御情報保持部に順次記憶および順次削除させることができる。これにより、複数のネストされた判定条件を持つ構造化プログラムをサポートすることができる。また判定条件において、たとえば、IF文をサポートすることができる。
また、請求項に記載の本発明によれば、条件判断した結果の影響が及ぶ範囲の処理が終了する場合に、制御情報保持部に蓄積されているフラグ情報を、当該影響が及ぶ範囲に対応するフラグ情報が蓄積される前の蓄積状態に順次戻す。これにより、判定条件の影響が及ぶ範囲を考慮して、複数のネストされた判定条件を持つ構造化プログラムをサポートすることができる。
また、請求項に記載の本発明によれば、制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させることにより、判定条件において、たとえば、else文をサポートすることができる。
また、請求項7又は8に記載の本発明によれば、判定条件の影響が及ぶ範囲を考慮して、複数のネストされた判定条件を持つ構造化プログラムをサポートすることができるとともに、判定条件において、たとえば、else文をサポートすることができる。
この発明の一実施形態による並列計算装置の構成を示すブロック図である。 演算プロセッサーのプログラミングモデルを説明する説明図である。 演算プロセッサーの構成を示すブロック図である。 本実施形態による並列計算装置で用いる命令を示す図である。 Gフラグスタック11の構成を示すブロック図である。 Global_Inst_en信号を用いてAccへの書き込みを制御する回路の例を示すブロック図である。 図1から図6を用いて説明したサブPEの構成を示すブロック図である。 並列計算装置1の一例としての動作を説明するためのプログラムコードを示す説明図である。 図8の場合において変数のレジスターへの割り付けを示す対応表である。 図8のプログラムコードに出てくる命令を説明する説明図である。 第1の条件の場合における並列計算装置の動作を示す動作図である。 第2の条件の場合における並列計算装置の動作を示す動作図である。 第3の条件の場合における並列計算装置の動作を示す動作図である。 第4の条件の場合における並列計算装置の動作を示す動作図である。 分岐の有るプログラムのフローチャートである。 図15のフローチャートに対応するC言語形式のプログラムコードを示す説明図である。 図15のフローチャートに対応する第1のアセンブラ言語形式のプログラムコードを示す説明図である。 図15のフローチャートに対応する第2のアセンブラ言語形式のプログラムコードを示す説明図である。 図18に示すプログラムコードをパイプライン化して実行する場合の動作を示すタイミングチャートである。 2重にネストしたプログラムコードの例を示す説明図である。 図20のプログラムコードに対応する第2のアセンブラ言語形式のプログラムコードを示す説明図である。 図20のプログラムコードをネストしないように書き換えたプログラムコードを示す説明図である。
以下、図面を参照して、本発明の実施の形態について説明する。図1は、本実施形態による並列計算装置1の構成を示すブロック図である、並列計算装置1は、複数の演算プロセッサーPE-0〜PE-107(以下、PE-0〜PE-107とする)を有する並列演算部2と、複数の演算プロセッサーのそれぞれに制御命令を供給する命令実行制御PE-I3(以下、PE-I3とする)と、を備えている。また並列計算装置1は、IO-CPU4と、命令メモリ5と、外部メモリ9とを備えている。
このように1個の並列計算装置1の並列演算部2内には、108個の演算プロセッサー(PE-0からPE-107)が実装されている。それぞれの演算プロセッサーは、サブプロセッサーエレメントPE-A、PE-B、PE-C、PE-D(以下、PE-A、PE-B、PE-C、PE-Dとする)の4個のサブプロセッサーエレメント(以下、サブPEとする)を備えており、それぞれが異なる命令を実行するVLIW(Very Long Instruction Word)型となっている。
PE-I3は、命令の実行順序を制御し、プログラムループやサブルーチンコールなどの制御を行う。このPE-I3は、108個のPE-Aに同じ制御命令を供給する。すなわち108個のPE-AはSIMD型を構成しており、PE-I3から供給される制御命令に基づいて、108個のPE-Aの全てにおいて同一の命令が実行される。同様に、PE-I3は、108個のPE-B、108個のPE-C、および、108個のPE-Dに、それぞれ同じ制御命令を供給する。すなわちPE-B、PE-C、および、PE-Dも、PE-Aと同様にSIMD型を構成している。
このようにPE-0〜PE-107のPE-A、PE-B、PE-C、PE-Dは、それぞれSIMD型を構成しているため、並列計算装置1には、独立して動作させることができるプロセッサーとして、PE-AからPE-D及びPE-I3の5個のプロセッサーがあることになる。そのため、この並列計算装置1を動作させるアセンブラプログラムは、PE-AからPE-D及びPE-I3の5個のプロセッサーに対する5命令が並列実行されるVLIW型として記述される。
PE-0〜PE-107は、それぞれ、レジスターR4〜R15の12個のレジスターを有している。PE-0〜PE-107のそれぞれにおいて、自演算プロセッサー内の4個のサブPE(PE-A, PE-B, PE-C, PE-D)は、いずれのサブPEもレジスターR4〜R15に読み書きできる。ただし、2つ以上のサブ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は外部機器や外部メモリ9とのデータ入出力を制御するとともに、外部機器や外部メモリ9から入力されたデータを、PE-I3に付属する命令メモリ5に書き込む。このIO-CPU4は、たとえば、汎用CPUである。外部メモリ9には、プログラムコードまたはデータが記憶されている。また外部メモリ9には、並列演算部2で演算された結果が、IO-CPU4を介して書き込まれる。
上述したように並列計算装置1は、SIMD+VLIW型並列計算装置である。この並列計算装置1上で実行されるプログラムコードは、計算開始前に、IO-CPU4によって外部メモリ9から読み込まれ、PE-I3が有する命令メモリ5に書き込まれる。その後、IO-CPU4がPE-I3に計算開始信号を送ると、PE-I3は、命令メモリ5から自分自身で実行する命令と、PE-AからPE-Dで実行すべき4個の命令とを読み出して計算を開始する。
たとえば、PE-I3が有する命令デコーダ32が、命令メモリ5に記憶されたプログラムコードを読み出して自分自身で実行する命令と、PE-AからPE-Dで実行すべき命令(たとえば、4個の命令)とをデコードする。
その後、計算対象となるデータはIO-CPU4によって外部機器や外部メモリ9から取り込まれ、並列演算部2が備えるPE-0からPE-107のプロセッサーのそれぞれに分割して転送される。たとえば、計算対象となるデータが、IO-CPU4により、PE-0からPE-107のそれぞれが有するレジスターR4〜R15に書き込まれる。この計算対象となるデータは、通常はPE-0からPE-107のそれぞれに対して異なっている。
その後、PE-0からPE-107のそれぞれ有するPE-AからPE-Dは、PE-I3から供給された命令に基づいて、レジスターR4〜R15に書き込まれたデータを演算する。PE-0からPE-107のそれぞれは、たとえば、計算結果をレジスターR4〜R15に書き込む。
その後、計算結果はIO-CPU4によって並列演算部2が備えるPE-0からPE-107のプロセッサーから読み出され、外部機器へ出力または外部メモリ9へ書き込まれる。たとえば、計算結果はPE-0からPE-107がそれぞれ有するレジスターR4〜R15に書き込まれており、IO-CPU4によって、PE-0からPE-107がそれぞれ有するレジスターR4〜R15から計算結果が読み出される。そして、IO-CPU4が、読み出した計算結果を、外部機器へ出力、または、外部メモリ9へ書き込む。
次に、本実施形態で用いる一例としての演算プロセッサーのプログラミングモデルを、図2を用いて説明する。サブPEのアーキテクチャはアキュムレータ方式とする。つまり、演算論理装置ALU(Arithmetic and Logic Unit)の入力データの第1の入力にはアキュムレータAccの出力が入力されており、その第1の入力はアキュムレータAccに固定であり、第2の入力だけを指定できる。また、演算結果は通常アキュムレータAccに格納される。このように限定することで命令に必要なオペランド数が減り、機械語のビット数を減らすことができる。
この図2に示すように、レジスター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のみが、書き込むことができる。
次に、図3を用いて、演算プロセッサーPE-0〜PE-107の構成について説明する。演算プロセッサーPE-0〜PE-107のそれぞれは、同一の構成であるため、ここでは1つの演算プロセッサーの構成のみについて説明する。
演算プロセッサーが有する複数のサブPE(PE-A、PE-B、PE-C、PE-D)は、それぞれ、演算論理装置ALUと、セレクタSelと、アキュムレータAccとを有している。また図1を用いて説明したように、演算プロセッサーはレジスターR4〜R15を有している。
各サブPEにおいて、各演算論理装置ALUの第1の入力はアキュムレータAccの出力に固定されており、第2の入力は、セレクタSelにより選択されるレジスターR4〜R15のうちのいずれかのレジスター、又は、各サブPEのアキュムレータAccの出力となっている。また、演算論理装置ALUにより演算された演算結果は、通常は各アキュムレータAccに書き込まれるが、アキュムレータAccのデータをレジスターへ転送する命令を使って、レジスターR4〜R15のいずれかに書き込むことができる。但し、自サブPE以外のサブPEが有するアキュムレータAccに、書き込むことはできない。
ここで、本実施形態において、多重ネストを実現することができる原理について説明する。基本的な原理は、命令の実行制御を命令毎に判断するのではなく、一つのフラグ(G)を設けておき、このフラグが1ならば命令を実行し、0ならば実行しないという機構を導入する。このようにすることで命令毎の条件判断フィールド(ビット)が不要になり、オブジェクトコードをコンパクトにできる。
更に、このフラグにスタック構造を設けることで、多重ネストが実現できる。今後は、Gフラグスタック内の全ての値の論理積を取った信号をGフラグと呼ぶことにする。Gフラグが1の場合に命令が実行され、0の場合には命令は実行されない。プロセッサーをリセットした直後は、Gフラグスタック内の値は全て1である。
図4に、構造化プログラミング用に導入する6個の命令を示す。これら6個の命令は特殊で、Gフラグの値に拘らず実行される。
PSH命令は、オペランドにC, N, V, Zの中から任意個のコンディションフラグを指定できる。ここで、Cはキャリーフラグを示し、Nはネガティブフラグを示し、Vはオーバーフローフラグ、Zはゼロフラグを示す。このPSH命令は、Gフラグスタックを1段下にプッシュし、最上段に新たな値を設定する。例えば、「PSH C, Z」とすると、CとZフラグの論理和を取って、それが1ならば最上段を1にし、0ならば最上段を0にする。
PSHI命令は、Gフラグスタックを一段下にプッシュしオペランドの論理和を取った後で、それが0ならば最上段を1にし、1ならば最上段を0にする。これらの命令は「if 〜 then 文」に相当する。GINV命令は、最上段の値を反転し、「else文」に相当する。POP命令はGフラグスタックを1段上にポップし、最下層に1をセットする。これはif文の最後に相当する。POPI命令は、POP命令とGINV命令を一つに纏めたものであり、POP命令を実行した後にGINV命令を実行する。FLSH命令はGフラグスタックの内容を全て1にする。
図5に、サブPEが有するGフラグスタック11の構成を示す。ここでは、1つのサブPEが有するGフラグスタック11のみを示している。この図5の例では、Gフラグスタック11を、フラグG0からフラグG3の4層としている。従って4層までのネスティングに対応可能である。同様の構成を有するGフラグスタック11を、全てのサブPEが有している。なお、Gフラグスタック11は、常に、図示されない並列計算装置1内部の基本クロックの立ち上がりで変化する。
図5に於いて、cnt_xxx信号はPE-I3でサブPEの命令をデコードし、同じ種類(例えばPE-A)の全てのサブPEに共通に与えられる制御信号である。このcnt_xxxとは、図5においては、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-I3から供給される制御信号である。また、これらの信号は、図4を用いて上述したPSH命令、POP命令、PSHI命令、GINV命令、FLSH命令に対応する制御信号である。
一方、flag_x信号は、サブPE固有のコンディションフラグとなる制御信号である。このflag_x信号とは、図5においては、flag_C信号、flag_N信号、flag_V信号、または、flag_Z信号のことである。本実施形態ではPE-Aが108個在り、サブPEが4種類在るので、1つのflag_x信号につき、合計432本の異なる信号になる。このflag_x信号は、後述するように、それぞれのサブPE内部で、演算論理装置ALUの演算結果に応じて生成される信号である。
system_reset信号は、システム全体をリセットする共通信号であり、この信号又はcnt_FLSH信号がアクティブになると、Gフラグスタックは全て1になる。このsystem_reset信号は、たとえば、並列計算装置1が起動またはリセットされた場合に、並列計算装置1が有する初期化を実行する初期化部から出力される。cnt_FLSH信号は、FLSH命令が発行されるとアクティブになる。このcnt_FLSH信号は、たとえば、PE-I3から供給される制御信号である。
この図5に示すようにGフラグスタック11には、その制御回路として、AND回路131から134と19、OR回路12と14と17、および、EXOR回路18とが備えられている。
flag_C信号とcnt_C_enとは、AND回路131の入力端子に入力される。flag_C信号とcnt_C_enと同様に、flag_N信号とcnt_N_en、flag_V信号とcnt_V_en、および、flag_Z信号とcnt_Z_enが、対応するAND回路132〜134の入力端子にそれぞれ入力される。AND回路131〜134の出力は、OR回路14の入力端子にそれぞれ入力される。
OR回路14の出力は、EXOR回路18の第1の入力端子に入力される。またcnt_PSHI信号が、EXOR回路18の第2の入力端子と、OR回路17の第1の入力端子とに入力される。またcnt_PSH信号が、OR回路17の第2の入力端子に入力される。EXOR回路18の出力は、Gフラグスタック11のD端子に入力される。OR回路17の出力は、Gフラグスタック11のPush端子とLE端子とに入力される。
また、cnt_FLSH信号とsystem_reset信号とは、OR回路12の入力端子に入力される。OR回路12の出力は、Gフラグスタック11のSet端子に入力される。また、cnt_GINV信号が、Gフラグスタック11のInv端子に入力される。またcnt_POP信号が、Gフラグスタック11のPop端子に入力される。Gフラグスタック11のG0からG3の出力は、AND回路19の入力端子にそれぞれ入力される。AND回路19の出力端子からは、Global_Inst_en信号(Gフラグ)が出力される。
次に、この図5を用いて説明したGフラグスタック11の一例としての動作について説明する。たとえば、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には1がセットされる。POPI命令は、POP命令とGINV命令を同時に行う。即ち、Gフラグスタックを1段ポップして、その後で最上段のG0を反転する。G0からG3の全ての論理積を取った信号が、命令の実行制御をするGlobal_Inst_en信号(Gフラグ)として出力される。この信号はサブPE毎に異なる。
既に説明したように「命令を実行しない」という動作を、「演算結果を書き込まない」ということで実現できる。そこで、PE-I3が有する命令デコーダ32から供給されるアキュムレータAccやレジスターR4〜R15のレジスター、或いはC, N, V, Zなどのコンディションフラグなどへの書き込み信号に、たとえばGlobal_Inst_en信号を論理積すれば、命令の実行制御機構を実現することができる。
次に図6を用いて、上述したGlobal_Inst_en信号を論理積して、アキュムレータAccへの書き込みを制御する回路の例を示す。AND回路92には、PE-I3の命令デコーダ32から出力されるアキュムレータへの書き込み信号であるcnt_Acc_wr信号と、図5を用いて説明したGlobal_Inst_en信号とが入力される。AND回路92は、入力されたcnt_Acc_wr信号とGlobal_Inst_en信号との論理積をとり、その結果をのロードイネーブル信号(LE信号)として、アキュムレータAccのロードイネーブル端子(LE端子)に入力させる。このアキュムレータAccは、たとえば、ラッチ回路である。アキュムレータAccのデータ端子(D端子)には、演算論理装置ALUからの出力信号であるALU-OUT信号が入力される。このロードイネーブル信号がアクティブになると、図示されない並列計算装置1内部の基本クロックの立ち上がりでAccの出力が、データ端子に入力される値に応じて変化する。
次に図7を用いて、図1から図6を用いて説明したサブPEの全体としての構成について説明する。ここでは、PE-Aの構成について説明する。また、図1から図6と同様の構成には同一の符号を付し、相違点のみについて説明する。
この図7においては、図5を用いて説明したcnt_xxx信号を、cnt_xxx_A信号としている。またこの図7においては、図6を用いて説明したcnt_Acc_wr信号を、cnt_Acc_wr_A信号としている。更に、この図7においては、cnt_xxx信号として、cnt_C_wr_A信号、cnt_N_wr_A信号、cnt_V_wr_A信号、および、cnt_Z_wr_A信号が、PE-I3から入力される。この信号は、各フラグの値を、後述するラッチ回路でラッチするための制御信号である。
セレクターSelは、Acc-A信号、Acc-B信号、Acc-C信号、Acc-D信号、または、レジスターR4-R15の値に対応する信号のうちのいずれかの信号を選択する。たとえばセレクターSelは、PE-I3の命令デコーダ32から供給される制御信号に基づいて、Acc-A信号、Acc-B信号、Acc-C信号、Acc-D信号、または、レジスターR4-R15の値に対応する信号のうちのいずれかの信号を選択する。このAcc-A信号とは、自サブPEのアキュムレータAcc(図7ではAc-A)からの出力信号である。Acc-B信号、Acc-C信号、Acc-D信号とは、自演算プロセッサー内のPE-B、PE-C、PE-Dが有するそれぞれのアキュムレータAccから出力される出力信号である。
演算論理装置ALUの第1の入力端子には、Acc-A信号が入力される。演算論理装置ALUの第2の入力端子には、セレクターSelで選択された信号が入力される。このようにして、演算論理装置ALUは、第1の入力を、自サブPE内のアキュムレータAccからの出力信号とし、第2の入力を、自演算プロセッサーが備えるサブPEのうちの任意に選択されたサブPE内のアキュムレータAccからの出力信号、または、レジスターR4-R15のうちの任意に選択されたレジスターとされている。
演算論理装置ALUによる計算結果としての出力は、アキュムレータAccのデータ端子に入力されるとともに、レジスターR4-R15のうちいずれかのレジスターにも書き込むことが可能となっている。AND回路92には、図6を用いて説明したように、Global_Inst_en信号とcnt_Acc_wr信号とが入力され、その出力がアキュムレータAccのロードイネーブル端子(LE端子)に入力される。アキュムレータAccの出力は、Acc-A信号として演算論理装置ALUの第1の入力端子に入力されるとともに、自演算プロセッサーが備える他のサブPE(この場合、PE-BとPE-CとPE-D)が有するそれぞれのセレクターSelに入力される。
演算論理装置ALUが出力するC、N、V、Zのフラグ信号は、対応するラッチ回路971〜974のD端子に、それぞれ入力される。アキュムレータAccの場合と同様に、ラッチ回路971〜974のロードイネーブル端子には、対応する書き込み信号とGlobal_Inst_en信号とをAND回路961〜964により論理積した信号が入力される。ラッチ回路971〜974からは、図5を用いて説明したflag_C信号、flag_N信号、flag_V信号、または、flag_Z信号が出力される。他の構成は、図1から図6を用いて説明した構成と同様であるため、その説明を省略する。
上述したAND回路961〜964、ラッチ回路971〜974、AND回路131から134と19、OR回路12と14と17、および、EXOR回路18により、制御部90が構成されている。この制御部90は、フラグ情報を、Gフラグスタック11に順次蓄積させ、Gフラグスタック11に蓄積されているフラグ情報の蓄積状態を、順次蓄積されたフラグ情報が蓄積される前の蓄積状態に順次戻す。ここでいうフラグ情報とは、演算論理装置ALUから出力されるフラグ情報を、OR回路14で論理和した情報である。
なお、サブプロセッサーエレメントがPE-Aの場合には、AND回路19の出力端子から出力されるGlobal_Inst_en信号(Gフラグ)は、レジスターR0〜R15の書き込み制御にも使われ、PE-Aがこららのレジスターに書き込むイネーブル信号とGlobal_Inst_en信号(Gフラグ)とがアンドされる。同様に、サブプロセッサーエレメントがPE-B、PE-C、または、PE-Dである場合には、AND回路19の出力端子から出力されるGlobal_Inst_en信号(Gフラグ)は、それぞれにおいて、レジスターR4〜R15の書き込み制御にも使われる。これらの信号は、AND回路92と同様の図示しないAND回路によって、PE-B、PE-C、PE-DからレジスターR4〜R15の書き込み信号との論理積がとられ、レジスターR4〜R15の書き込みが制御される。
次に図8から図14を用いて、上述した本実形態による並列計算装置1が、多重ネストされたプログラムを実行する場合の一例としての動作について説明する。ここでは図20で説明した2重にネストしたプログラムコードを、図8に示すように、アセンブラで記述した場合について説明する。
ここで図20のプログラムコード中の各変数は、図9に示す様に、レジスターヘ割り付けてあると仮定している。たとえば、変数「abc」をレジスターR4に割り付け、変数「def」をレジスターR5に割り付け、変数「hij」をレジスターR6に割り付け、変数「x1」をレジスターR7に割り付け、変数「x2」をレジスターR8に割り付け、変数「x3」をレジスターR9に割り付け、変数「x4」をレジスターR10に割り付けてある。
また、図4で説明した命令以外で図8のプログラムコードに出てくる命令については、図10に、その命令の説明をしている。たとえば、「MVA命令」はオペランドの値をアキュムレータAccへ転送する命令である。「MV命令」はアキュムレータAccの値をオペランドへ転送する命令である。「CMP命令」はアキュムレータAccの値とオペランドの値を比較する命令である。「ADD命令」はアキュムレータAccの値とオペランドの値を加算する命令である。「CLR命令」はアキュムレータAccを0にするする命令である。「INC命令」はアキュムレータAccの値を1増加する命令である。
なお、図8中で、”//”という記号の後に続く記述はコメントであり、プログラムの動作を理解し易くする為のC言語形式に対応するプログラムコードが記載されている。このコメントは、図20のプログラムコードに対応している。また、図8において、後述する図11から図14の処理に対応して、ステップS1からS6の記号が付されている。
次に図11から図14を用いて、上述した本実形態による並列計算装置1が、多重ネストされたプログラムを実行する場合の一例としての動作について説明する。この例では、IF文が2重にネストされており、第1のIF文による判定結果が真の場合に、第2のIF文による判定結果が真の場合と偽の場合とがあり、合計4つの場合がある。図11は、第1のIF文による判定結果が真であり、第2のIF文による判定結果が真の場合に対応する。同様に、図12は第1のIF文による判定結果が真であり第2のIF文による判定結果が偽の場合に対応し、図13は第1のIF文による判定結果が偽であり第2のIF文による判定結果が真の場合に対応し、図14は第1のIF文による判定結果が偽であり第2のIF文による判定結果が偽の場合に対応する。
この図11から図14の図においては、プログラムコードとともに、IF文の判定結果が示され、更に、図5を用いて説明したGフラグスタック11に記憶されるフラグG0からG3の値が示されている。また、フラグG0からG3において、プッシュ動作またはプル動作により変化する箇所には斜線を付け、このスタックの最上位、すなわち、フラグG0の値が変化する場合には、横縞を付けている。また、プログラムコードにおいて、IF文の判定結果により実行されない箇所には、二重線を付けてある。なお、IF文の判定内容については記述を省略し、判定結果のみが示してある。また、IF文の中で実行されるプログラムコードについても、A0〜A4として、省略して記述してある。
まず、図11の場合の場合について説明する。ステップS1で、第1のIF文による判定が実行されるが、この第1のIF文による判定結果は真であるため、Gフラグスタック11には1がプッシュされる。この場合、フラグG0からG3の値が全て1であるため、Global_Inst_en信号が1となり、続くA0〜A4のプログラムコードが実行される。
次のステップS2で、第2のIF文による判定が実行されるが、この第2のIF文による判定結果は真であるため、Gフラグスタック11には1が更にプッシュされる。この場合、フラグG0からG3の値が全て1であるため、Global_Inst_en信号が1となり、続くC0〜C4のプログラムコードが実行される。
次のステップS3で、else文に対応するGINV命令が実行され、最上位のフラグG0の値が1から0に反転される。この場合、フラグG0からG3の値が全て1でないため、Global_Inst_en信号が0となり、続くD0〜D4のプログラムコードが実行されない。
次のステップS4とS5で、第2のIF文の最後である「}」に対応して、POPI命令が実行され、Gフラグスタック11からポップされた後、最上位のフラグG0の値が1から0に反転される。この場合、フラグG0からG3の値が全て1でないため、Global_Inst_en信号が0となり、続くB0〜B4のプログラムコードが実行されない。
次のステップS6で、第1のIF文の最後である「}」に対応して、POP命令が実行され、Gフラグスタック11からポップされ、処理が終了する。このようにして、図11の場合には、第1のIF文が真であり第2のIF文が真であることに応じて、対応するA0〜A4およびC0〜C4のプログラムコードのみが実行される。
次に、図12の場合の場合について説明する。図12の場合は、図11の場合と対比して、ステップS2で第2のIF文による判定結果が偽であり、Gフラグスタック11に0がプッシュされる点が異なる。そのため、Gフラグスタック11に0がプッシュされ、Global_Inst_en信号が0となるため、続くC0〜C4のプログラムコードが実行されない。次のステップS3で、else文に対応するGINV命令が実行され、最上位のフラグG0の値が0から1に反転される。この場合、フラグG0からG3の値が全て1となるため、Global_Inst_en信号が1となり、続くD0〜D4のプログラムコードが実行される。以降は、図12と図11とは同様である。
このようにして図12の場合は、C0〜C4のプログラムコードが実行されず、D0〜D4のプログラムコードが実行される点が異なる。よって、図12の場合には、第1のIF文が真であり第2のIF文が偽であることに応じて、対応するA0〜A4およびD0〜D4のプログラムコードのみが実行される。
次に、図13と図14との場合の場合について説明する。図13と図14との場合は、図11の場合と対比して、ステップS1で第1のIF文による判定結果が偽であり、Gフラグスタック11には0がプッシュされる点が異なる。この場合、フラグG0からG3の値が全て1ではないため、Global_Inst_en信号が0となり、続くA0〜A4のプログラムコードが実行されない。
その後ステップS2で、第2のIF文による判定が実行され、第2のIF文による判定結果がGフラグスタック11に更にプッシュされる。しかし、この第2のIF文による判定結果が真であっても偽であっても、Gフラグスタック11のフラグG1には、第1のIF文の判定結果である0がスタックされている。そのため、第2のIF文による判定結果が真であっても偽であっても、すなわち、Gフラグスタック11のフラグG0に1がスタックされても0がスタックされても、Global_Inst_en信号が0となり、続くC0〜C4およびD0からD4のいずれも実行されない。
なお、第1のIF文が偽の場合、第2のIF文の判定そのものが正しくない。これは、PSH命令またはPSHI命令の直前の、例えばCMP命令が実行されないからである。しかし、いずれにせよ、第2のIF文以降のプログラムコード(C0〜C4およびD0からD4)は、全く実行されないので、問題は生じることがない。
その後、ステップS4とS5で、第2のIF文の最後である「}」に対応して、POPI命令が実行され、Gフラグスタック11からポップされた後、最上位のフラグG0の値が0から1に反転される。この場合、フラグG0からG3の値が全て1である、Global_Inst_en信号が1となり、続くB0〜B4のプログラムコードが実行される。
図11から図14を用いて説明したように、図1から図7を用いて説明した並列計算装置1は、演算プロセッサーPE-0〜PE-107のそれぞれが有するGフラグスタック11を用いて、多重ネストにより生じるフラグを自Gフラグスタック11に順次蓄積し、その順次蓄積したフラグの値に基づいて、自演算プロセッサーでの演算を制御する。そのため、演算プロセッサーPE-0〜PE-107のそれぞれに供給されるデータが異なり、たとえばデータの大小関係によりプログラムコードの分岐が異なるようになる場合であっても、また、この分岐により多重ネストが生じるような場合であっても、それぞれの演算プロセッサーで、演算を制御することが可能である。
以上、図1から図14を用いて説明したように、本実施形態による並列計算装置1は、多重ネストされた複数のIF文の判定結果を、Gフラグスタック11に順にスタックしつつ、スタックされた判定結果の論理積であるGlobal_Inst_en信号に基づいて、IF文に続く次の命令を実行する、または、実行しないという制御をする。これにより、本実施形態による並列計算装置1は、多重ネストされた構造化プログラムを、容易に実行することができる。また、本実施形態による並列計算装置1に対応するプログラムを生成するコンパイラまたはプログラマーは、多重ネストされた構造化プログラムコードを、容易に作成することが可能となる。
なお、上述した図8のプログラムコードの実行は、演算プロセッサーPE-0〜PE-107がそれぞれ有するPE-A、PE-B、PE-C、PE-Dのうちのいずれか1つのサブプロセッサーエレメントを用いて実行されるようにしてもよいし、プログラムコードのうち互いに依存性の無いプログラムコードを、PE-A、PE-B、PE-C、PE-Dのうちのいずれかのサブプロセッサーエレメントに割り当てて、複数のサブプロセッサーエレメントを用いて並列に実行されるようにしてもよい。
また並列計算装置1は多重ネストされた構造化プログラムを容易に実行することができるようになっているために、並列計算装置1を用いる場合、構造化されたプログラムを、容易にアセンブラコードに変換できる。即ち容易に機械語に変換できる。このように、本実施形態による並列計算装置1は、SIMD型アーキテクチャを採用した並列計算装置において、複数のネストを持つ構造化プログラムをサポートするハードウェアを容易に実現できる。
なお、上述した実施形態の説明においては、1個の並列計算装置1の並列演算部2内が、PE-0〜PE-107の108個の演算プロセッサーを有する場合について説明したが、演算プロセッサーの個数は任意である。また、演算プロセッサーが、PE-A、PE-B、PE-C、PE-Dの4個のサブプロセッサーエレメントを有する場合について説明したが、このサブプロセッサーエレメントの個数も任意である。また、上記のGフラグスタック11がフラグG0からフラグG3の4層のスタックを有する場合について説明したが、このスタックの段数も任意である。
なお、上述した実施形態においては、正論理の場合について説明し、Gフラグスタック11のG0からG3の出力はAND回路19の入力端子に入力されるものとして説明したが、負論理の場合においては、AND回路19の代わりに、OR回路を用いてもよい。また、正論理の場合に、AND回路19に代わってNAND回路を用いてもよいし、負論理の場合に、上述したOR回路の代わりにNOR回路を用いてもよい。このように、AND回路19の代わりに、Gフラグスタック11のG0からG3の出力を合成する合成回路を用いてもよい。
以上、この発明の実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
1…並列計算装置、2…並列演算部、3…PE-I(制御信号生成部)、4…IO-CPU、5…命令メモリ、9…外部メモリ、11…Gフラグスタック、12、14、17…OR回路、18…EXOR回路、19…AND回路(合成部)、32…命令デコーダ、90…制御部、Acc…アキュムレータ、ALU…演算論理装置、Sel…セレクタ、PE-0〜PE-107…演算プロセッサー、PE-A、PE-B、PE-C、PE-D(演算部)

Claims (8)

  1. 複数の演算プロセッサーを有する並列演算部と、
    前記複数の演算プロセッサーのそれぞれに制御命令を供給する制御信号生成部と、
    を備え、
    前記複数の演算プロセッサーのそれぞれが、
    入力されたデータを前記制御命令に基づいて演算処理する演算部と、
    スタック構造を有しており、前記演算部により演算処理された結果に基づいたフラグ情報が前記スタック構造に順次蓄積される制御情報保持部と、
    前記制御情報保持部に順次蓄積された全てのフラグ情報のうち、少なくとも前記演算処理の結果として蓄積された全てのフラグ情報を合成する合成部と、
    を備え、
    前記演算部が、
    前記合成部が合成したフラグ情報に基づいて前記演算処理する、
    ことを特徴とする並列計算装置。
  2. 前記合成部は、
    前記制御情報保持部に順次蓄積された全てのフラグ情報を合成する
    ことを特徴とする請求項1に記載の並列計算装置。
  3. 前記演算部は、
    前記合成部が合成した結果をスタック構造に蓄積することなく、該合成した結果に基づいて演算処理する
    ことを特徴とする請求項1又は2に記載の並列計算装置。
  4. 前記フラグ情報を前記制御情報保持部に順次蓄積させ、前記制御情報保持部に蓄積されているフラグ情報の蓄積状態を、前記順次蓄積されたフラグ情報が蓄積される前の蓄積状態に順次戻す制御部、
    を有することを特徴とする請求項1から請求項3の何れか1項に記載の並列計算装置。
  5. 前記制御部は、
    前記制御命令に含まれている条件判断が実行された場合に、当該条件判断された結果を前記フラグ情報として前記制御情報保持部に順次蓄積させる第1の制御部と、
    前記条件判断した結果の影響が及ぶ範囲の処理が終了する場合に、前記制御情報保持部に蓄積されているフラグ情報を、当該影響が及ぶ範囲に対応する前記フラグ情報が蓄積される前の蓄積状態に順次戻す第2の制御部と、
    を有することを特徴とする請求項4に記載の並列計算装置。
  6. 前記制御部は、
    前記制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させる第3の制御部、
    を有することを特徴とする請求項4又は請求項5に記載の並列計算装置。
  7. 前記制御部は、
    第1のIF文について条件判断した結果の影響が及ぶ範囲の中で第2のIF文について条件判断がなされる場合であって、前記第1のIF文に関するTHEN文の影響が及ぶ範囲であり、かつ、前記第2のIF文について条件判断した結果の影響が及ぶ範囲の前記演算部による演算処理が終了し、その直後に、前記第1のIF文に関するELSE文の影響が及ぶ範囲の前記演算部による演算処理を実行する場合に、前記制御情報保持部に保持されているフラグ情報を、前記第2のIF文について条件判断した結果の影響が及ぶ範囲に対応する前記フラグ情報が蓄積される前の蓄積状態に戻すとともに、戻した後において前記制御情報保持部に順次蓄積されているフラグ情報のうち最上位のフラグ情報の値を論理反転させる第4の制御部、
    を有することを特徴とする請求項4に記載の並列計算装置。
  8. 前記制御命令には、
    前記制御情報保持部のスタック構造の最上段のフラグ情報を論理反転するための第1命令と、前記制御情報保持部のスタック構造の全てのフラグ情報を1段分だけポップした上で、ポップ後の前記制御情報保持部のスタック構造の最上段のフラグ情報を論理反転するための第2命令が含まれており、
    前記制御部は、
    IF文に関するTHEN文の影響が及ぶ範囲の前記演算部による演算処理が終了し、その直後に、前記IF文に関するELSE文の影響が及ぶ範囲の前記演算部による演算処理を実行する場合に、前記第1命令による処理を実行する第3の制御部、及び、
    第1のIF文について条件判断した結果の影響が及ぶ範囲の中で第2のIF文について条件判断がなされる場合であって、前記第1のIF文に関するTHEN文の影響が及ぶ範囲であり、かつ、前記第2のIF文について条件判断した結果の影響が及ぶ範囲である範囲の前記演算部による演算処理が終了し、その直後に、前記第1のIF文に関するELSE文の影響が及ぶ範囲の前記演算部による演算処理を実行する場合に、前記第2命令による処理を実行する第4の制御部、
    を有することを特徴とする請求項4に記載の並列計算装置。
JP2009106238A 2009-04-24 2009-04-24 並列計算装置 Expired - Fee Related JP5452066B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009106238A JP5452066B2 (ja) 2009-04-24 2009-04-24 並列計算装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009106238A JP5452066B2 (ja) 2009-04-24 2009-04-24 並列計算装置

Publications (2)

Publication Number Publication Date
JP2010257200A JP2010257200A (ja) 2010-11-11
JP5452066B2 true JP5452066B2 (ja) 2014-03-26

Family

ID=43318034

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009106238A Expired - Fee Related JP5452066B2 (ja) 2009-04-24 2009-04-24 並列計算装置

Country Status (1)

Country Link
JP (1) JP5452066B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5358287B2 (ja) * 2009-05-19 2013-12-04 本田技研工業株式会社 並列計算装置
JP5358315B2 (ja) * 2009-06-24 2013-12-04 本田技研工業株式会社 並列計算装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2177526B (en) * 1985-06-24 1990-02-14 Pixar Selective operation of processing elements in a single instruction, multiple data stream (simd)computer system
EP0609372A1 (en) * 1991-10-24 1994-08-10 Intel Corporation Data processing system
GB2273377A (en) * 1992-12-11 1994-06-15 Hughes Aircraft Co Multiple masks for array processors
JPH10124315A (ja) * 1996-10-18 1998-05-15 Hitachi Ltd 分岐処理方法およびそのための情報処理装置
GB2411745B (en) * 2004-03-02 2006-08-02 Imagination Tech Ltd Method and apparatus for management of control flow in a simd device
US20050289329A1 (en) * 2004-06-29 2005-12-29 Dwyer Michael K Conditional instruction for a single instruction, multiple data execution engine

Also Published As

Publication number Publication date
JP2010257200A (ja) 2010-11-11

Similar Documents

Publication Publication Date Title
JP4986431B2 (ja) プロセッサ
TWI644208B (zh) 藉由對硬體資源之限制實現的向後相容性
US20120239907A1 (en) Active memory command engine and method
TW201704991A (zh) 藉由演算法匹配、停用特徵或限制效能之回溯相容性
JP5452066B2 (ja) 並列計算装置
US6012138A (en) Dynamically variable length CPU pipeline for efficiently executing two instruction sets
US6405300B1 (en) Combining results of selectively executed remaining sub-instructions with that of emulated sub-instruction causing exception in VLIW processor
JP5358287B2 (ja) 並列計算装置
JP2002229778A (ja) 高速ディスプレースメント付きpc相対分岐方式
JP5233078B2 (ja) プロセッサ及びその処理方法
JP5922353B2 (ja) プロセッサ
JP5110525B2 (ja) 動作合成システム、動作合成方法および動作合成用プログラム
JP2009507292A (ja) 分離したシリアルモジュールを備えるプロセッサアレイ
JP4444305B2 (ja) 半導体装置
JP2008071061A (ja) 情報処理装置
JP2005322240A (ja) インデックス付きレジスタアクセス用の方法および装置
GB2380283A (en) A processing arrangement comprising a special purpose and a general purpose processing unit and means for supplying an instruction to cooperate to these units
JPH07129399A (ja) 命令属性レジスターを使用して多機能命令を実行する マイクロコンピュータ
US8255672B2 (en) Single instruction decode circuit for decoding instruction from memory and instructions from an instruction generation circuit
US20230315456A1 (en) Processing apparatus
US10481867B2 (en) Data input/output unit, electronic apparatus, and control methods thereof
JP4197324B2 (ja) シンセサイザブル・パイプライン・コントロールの方法及び装置
JP4703735B2 (ja) コンパイラ、コード生成方法、コード生成プログラム
CN117873708A (zh) 为机器指令分配功能单元的方法、装置、介质及设备
JP5263497B2 (ja) 信号処理プロセッサ及び半導体装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20111124

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120518

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130521

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130604

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130725

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130813

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130927

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131015

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20131118

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20131203

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20131227

R150 Certificate of patent or registration of utility model

Ref document number: 5452066

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees