説明

ブランチング・プログラム・マシン及び並列プロセッサ

【課題】QDDを模擬する演算を実行することが可能なブランチング・プログラム・マシンを提供する。
【解決手段】命令メモリ7には、2アドレス2分岐命令、3アドレス4分岐命令、出力命令の3種の命令を少なくとも含む命令系列が記憶され、命令メモリ7はプログラムカウンタ10に設定されたアドレス情報に従って該アドレス情報で指令されるアドレスに格納された命令を命令レジスタ8に出力する。命令デコーダ9は、2アドレス2分岐命令又は3アドレス4分岐命令の場合、入力セレクタ3で入力変数を入力レジスタ4に設定し、この値に基づきジャンプ先の命令メモリ7のアドレス情報を選択しプログラムカウンタ10に設定する。また、出力命令の場合、指定される出力レジスタ5のアドレスに、指定される出力データを設定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、多値論理決定グラフ(MDD:Multiple-valued Decision Diagram)を模擬する演算が可能なブランチング・プログラム・マシン(BM:Branching Program Machine)及びブランチング・プログラム・マシンを並列に接続した多段ブランチング・プログラム・マシン(多段ブランチング・プログラム・マシン)、並びに多段ブランチング・プログラム・マシンを並列に接続した並列プロセッサに関する。
【背景技術】
【0002】
二分決定グラフ(以下「BDD(Binary Decision Diagram)」という。)を模擬するブランチング・プログラム・マシンは、分岐命令と出力命令の2種類の命令を有するプロセッサである(非特許文献1,2参照)。従って、ブランチング・プログラム・マシンは、汎用プロセッサに比べてアーキテクチャが単純である。また、制御回路などに於いて多く用いられる条件分岐を、専用命令で実行するため、特定のアプリケーションに於いては汎用プロセッサよりも高速の処理が可能となる。ブランチング・プログラム・マシンのアプリケーションは、制御回路、回路シミュレータ、ネットワーク機器の経路表やパケット分類、及びパターンマッチングなどが挙げられる。従来のブランチング・プログラム・マシンとしては、2値の入力変数に対するBDDを模擬するものが知られている(非特許文献1,2参照)。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】P. C. Baracos, R. D. Hudson, L. J. Vroomen, and P. J. A. Zsombor-Murray, "Advances in binary decision based programmable controllers," IEEE Transactions on Industrial Electornics, Vol. 35, No. 3, pp. 417-425, Aug., 1988.
【非特許文献2】R. T. Boute, "The binary-decision machine as programmable controller," Euromicro Newsletter, Vol. 1, No. 2, pp. 16-22, 1976.
【非特許文献3】R. E. Bryant, "Graph-based algorithms for boolean function manipulation," IEEE Trans. Comput., Vol. C-35, No. 8, pp. 677-691, Aug. 1986.
【非特許文献4】Y. Iguchi, T. Sasao, and M. Matsuura, "Evaluation of multiple-output logic functions," Asia and South Pacific Design Automation Conference'2003, Kitakyushu, Japan, pp. 312-315, Jan. 21-24, 2003.
【非特許文献5】T. Kam, T. Villa, R. K. Brayton, and A. L. Sagiovanni-Vincentelli, "Multi-valued decision diagrams: Theory and Applications," Multiple-Valued Logic, Vol. 4, No. 1-2, pp. 9-62, 1998.
【非特許文献6】Y. Iguchi, T. Sasao, and M. Matsuura, "Implementation of multiple-output functions using PROMDDs," 30th International Symposium on Mulitple-Valued Logic, Portland, Oreon, U.S.A, pp. 199-205, May 23-25 2000.
【非特許文献7】S. Nagayama, T. Sasao, Y. Iguchi, and M. Matsuura, "Area-time complexities of multi-valued decision diagrams," IEICE Transactions on Fundamentals of Electronics, Vol. E87-A, No. 5, pp. 1020-1028, May 2004.
【非特許文献8】S. Nagayama, and T. Sasao, "On the optimization of heterogeneous MDDs," IEEE Transactions on CAD, Vol. 24, No. 11, pp. 1645-1659, Nov. 2005.
【発明の概要】
【発明が解決しようとする課題】
【0004】
任意のn入力論理関数はBDDにより表現することができる(非特許文献3)。多出力論理関数を表現するBDDはMTBDD(multi-terminal binary decision diagram)と呼ばれ、高々n回のテーブル参照で多出力を同時に評価することができる(非特許文献4)。図1にMTBDDの例を示す。テーブル参照の回数の平均値を平均パス長という。BDDの評価時間は平均パス長に比例する。
【0005】
ところで、BDDの評価時間を更に削減する方法として、多値論理決定グラフ(以下「MDD(Multiple-valued Decision Diagram)」という。)を用いる方法が知られている(非特許文献5参照)。MDDでは、入力変数はk個の2値変数の組に分割される。k個の2値変数の組は2値の超変数となる。2値の超変数で表現した決定グラフをMDD(k)と記す。BDDはMDD(1)と等価である。
【0006】
MDD(2)は各節点が4分岐を持つので、本稿に於いてはMDD(2)をQDD(Quaternary Decision Diagram)という。入力変数を組み分けした際の各組の2値変数の個数がすべて等しいMDDを「ホモジニアスMDD」という。一方、各組の2値変数の個数がすべて等しくはないMDDを「ヘテロジニアスMDD」という。
【0007】
ヘテロジニアスMDDは、変数の組み分け(グルーピング)を工夫することによって、ホモジニアスMDDよりもテーブル参照回数と節点数を削減することができる(非特許文献8参照)。以下、本稿ではヘテロジニアスMTQDD(multi-terminal Quaternary Decision Diagram)を単にQDDと呼ぶ。図2に、図1のMTBDDを変換して得られたQDDを示す。図2のQDDは、最上位の節点のみが2分岐であり、他の節点は4分岐となっている。
【0008】
論理関数をMDD(k)で表現すると、BDDで表現した場合に比べてメモリの参照回数をしばしば1/kまで削減することができる(非特許文献6)。従って、kを増加させると、論理関数の評価時間を短縮することができる。しかしながら、1つの節点を表現するために必要なメモリ量は2のオーダーで増加する。そのため、多くのベンチマーク関数に於いて、k=2のときのMDD(k)の総メモリー量が最小となる(非特許文献7参照)。従って、論理関数の評価に於いては、BDDよりもQDDの方がより適しているといえる。
【0009】
そこで、本発明の目的は、かかるQDDを模擬する演算を実行することが可能なブランチング・プログラム・マシンを提供することにある。また、本発明の目的は、さらなる高速化のため、ブランチング・プログラム・マシンを並列に接続した多段ブランチング・プログラム・マシン、並びに多段ブランチング・プログラム・マシンを並列に接続した並列プロセッサを提供することにある。
【課題を解決するための手段】
【0010】
本発明に係るブランチング・プログラム・マシンは、複数の入力変数が入力される変数入力バスと、
前記変数入力バスから入力変数を選択する入力セレクタと、
前記入力セレクタにより選択される入力変数が一時的に設定される入力レジスタと、
出力変数が設定される出力レジスタと、
前記出力レジスタに設定された出力変数が出力される変数出力バスと、
プログラムにおいて実行する各命令が記憶された命令メモリと、
命令メモリから順次読み出される命令が一時的に設定される命令レジスタと、
入力レジスタから読み出される入力変数と、命令レジスタから読み出される命令とに基づいて当該命令を実行する命令デコーダと、
次に読み出す命令の命令メモリ内のアドレス情報を記憶するプログラムカウンタと、
を備えたブランチング・プログラム・マシンであって、
前記命令メモリには、(1)参照する入力変数のインデックス、入力変数が0のときにジャンプする先の命令メモリのアドレス情報、及び入力変数が1のときにジャンプする先の命令メモリのアドレス情報を含む2アドレス2分岐命令、(2)参照する入力変数のインデックス、入力変数が第1の値のときにジャンプする先の命令メモリのアドレス情報、入力変数が第2の値のときにジャンプする先の命令メモリのアドレス情報、及び入力変数が第3の値のときにジャンプする先の命令メモリのアドレス情報を含む3アドレス4分岐命令、並びに、(3)出力先の出力レジスタのアドレス情報、及び出力データを含む出力命令の3種の命令を少なくとも含む命令系列が記憶され、前記プログラムカウンタに設定されたアドレス情報に従って該アドレス情報で指令されるアドレスに格納された命令を前記命令レジスタに出力するものであり、
前記命令デコーダは、(a)前記命令レジスタに設定された命令が前記2アドレス2分岐命令又は前記3アドレス4分岐命令の場合、当該命令で指定される入力変数のインデックスに基づき前記入力セレクタにより入力変数を選択して前記入力レジスタに設定し該入力レジスタに設定される入力変数の値に基づいて、当該命令で指定されるジャンプする先の命令メモリのアドレス情報を選択して前記プログラムカウンタに設定する処理を実行し、(b)前記命令レジスタに設定された命令が前記出力命令の場合、当該命令で指定される出力レジスタのアドレス情報に従って該アドレス情報で指令される前記出力レジスタのアドレスに、当該命令で指定される出力データを設定する処理を実行することを特徴とする。
【0011】
この構成により、QDDを模擬する演算を実行することが可能となる。
【0012】
また、本発明に於いては、前記命令メモリに記憶された3アドレス4分岐命令は、参照する入力変数のインデックス、入力変数の値に対する分岐先アドレスの組み合わせを指定する機能選択フラグ、入力変数が第1の値のときにジャンプする先の命令メモリのアドレス情報ADDR0、入力変数が第2の値のときにジャンプする先の命令メモリのアドレス情報ADDR1、及び入力変数が第3の値のときにジャンプする先の命令メモリのアドレス情報ADDR2を含み、前記命令デコーダは、前記命令レジスタに設定された命令が前記3アドレス4分岐命令の場合には、当該命令で指定される入力変数のインデックスに基づき前記入力セレクタにより入力変数を選択して前記入力レジスタに設定し、該入力レジスタに設定される入力変数の値が前記第1,第2,第3の値の場合、それぞれ、当該命令で指定されるジャンプする先の命令メモリの前記アドレス情報ADDR0,ADDR1,ADDR2を選択し、該入力レジスタに設定される入力変数の値が前記第1,第2,又は第3の値以外の場合、現在の命令のアドレスPの次のアドレス(P+1)のアドレス情報を選択して前記プログラムカウンタに設定する処理を実行するようにすることもできる。
【0013】
本発明に係る多段ブランチング・プログラム・マシンは、前記のブランチング・プログラム・マシンが直列に接続され、後段の前記ブランチング・プログラム・マシンの変数入力バスの少なくとも一部には、前段の前記ブランチング・プログラム・マシンの前記変数出力バスが接続され、残りの変数入力バスには入力変数が入力されることを特徴とする。
【0014】
このようにブランチング・プログラム・マシンを多段に直列に接続することで、より大きな論理関数の演算を行うことができる。
【0015】
また、本発明に於いて、前記各ブランチング・プログラム・マシンの前記変数出力バスは、プログラマブル・ルーティング・ボックスを介して後段のブランチング・プログラム・マシンの前記変数入力バスに接続された構成とすることができる。
【0016】
これにより、各段のブランチング・プログラム・マシンの出力変数の順序を自由に組み替えて後段のブランチング・プログラム・マシンの入力変数として入力することができる。従って、順序回路を実現するための各段のブランチング・プログラム・マシンの命令のコーディングが容易となる。
【0017】
本発明に係る並列プロセッサは、複数個並列に接続された上述の多段ブランチング・プログラム・マシンと、
複数の選択入力ノードと複数の選択出力ノードとを備え、前記各多段ブランチング・プログラム・マシンの前記各変数出力バスが前記各選択入力ノードに接続され、選択出力ノードの少なくとも一部が前記各多段ブランチング・プログラム・マシンの変数入力バスの一部に接続され、前記各選択入力ノードと前記各選択出力ノードとの接続を組み替え可能としたプログラマブル相互接続回路と、を備えたことを特徴とする。
【0018】
これにより、並列演算が可能となり、論理関数の演算速度を更に速めることができる。
【発明の効果】
【0019】
以上のように、本発明のブランチング・プログラム・マシンによれば、QDDを模擬する演算を実行することが可能となる。また、本発明の多段ブランチング・プログラム・マシンによれば、多段化することでより大きな論理関数の演算を行うことが可能となる。また、本発明に係る並列プロセッサによれば、並列演算により論理関数の演算速度を更に速めることができる。
【図面の簡単な説明】
【0020】
【図1】MTBDDの例である。
【図2】図1のMTBDDを変換して得られたQDDである。
【図3】本発明の実施例1に係るブランチング・プログラム・マシンの構成を表すブロック図である。
【図4】図3の出力レジスタを構成するダブルランク・フリップフロップを示す図である。
【図5】各命令のニーモニックとメモリ内部表現を示す図である。
【図6】4種の3アドレス4分岐命令における分岐先アドレスの組み合わせを示す図である。
【図7】図5の命令セットのコードによって各3アドレス4分岐命令(Q_BRANCH)のアドレスを割り当てた結果である。
【図8】実施例2に係る多段ブランチング・プログラム・マシンの構成を表すブロック図である。
【図9】実施例3に係る並列プロセッサ30の構成を表すブロック図である。
【発明を実施するための形態】
【0021】
以下、本発明を実施するための形態について、図面を参照しながら説明する。
【実施例1】
【0022】
図3は、本発明の実施例1に係るブランチング・プログラム・マシン(以下、略して「BM」という。)の構成を表す図である。
【0023】
BM1は、変数入力バス2、入力セレクタ3、入力レジスタ4、レジスタ・ファイル5、変数出力バス6、命令メモリ7、命令レジスタ8、命令デコーダ9、プログラムカウンタ10、及びフラグ出力バス11を備えている。
【0024】
変数入力バス2は、MPUなどの外部回路から複数の入力変数が入力されるバスである。入力セレクタ3は、変数入力バス2から入力される入力変数を選択するセレクタである。入力セレクタ3としては、シフタ、クロスバースイッチ、マルチプレクサ等が使用される。入力レジスタ4は、入力セレクタ3により選択される入力変数が一時的に設定されるレジスタである。
【0025】
命令メモリ7は、プログラムにおいて実行する各命令が記憶されたメモリである。本実施例では、命令メモリ7は、語長が32ビットのBM命令を256個格納することができる。命令レジスタ8は、命令メモリ7から順次読み出される命令が一時的に設定されるレジスタである。命令デコーダ9は、命令メモリ7から命令レジスタ8へ読み出された命令を解釈し、実行を行うデコーダである。この命令デコーダ9は、入力レジスタ4へ設定される入力変数と、命令レジスタ8へ設定される命令とに基づいて当該命令を実行する。プログラムカウンタ10は、次に読み出す命令の命令メモリ7内のアドレス情報を記憶する。
【0026】
ここで、命令メモリ7には、2アドレス2分岐命令(B_BRANCH)、3アドレス4分岐命令(Q_BRANCH)、データセット命令(出力命令)(DATASET)、及び無条件ジャンプ命令の4種類の命令セットからなる命令系列が記憶されている。2アドレス2分岐命令(B_BRANCH)、3アドレス4分岐命令(Q_BRANCH)、及び無条件ジャンプ命令は、MTBDD又はQDDの非終端節点を評価する命令であり、データセット命令(DATASET)はQDDの終端節点を評価する命令である。図5に各命令のニーモニックとメモリ内部表現を示す。
【0027】
尚、1命令の長さを削減するために、2アドレス2分岐命令(B_BRANCH)に代わる1アドレス2分岐命令も提案されているが(例えば、非特許文献2参照)、1アドレス方式を用いると実行時間がしばしば増加する。そこで、本発明に於いては2アドレス方式の2分岐命令を採用している。
【0028】
また、QDDにおいて、2変数を2個同時に評価する命令は、4アドレス4分岐命令によって実現できる。4アドレス4分岐命令は2分岐命令に比べて評価時間を半分に削減することができる。しかしながら、4アドレス4分岐命令は長い命令語を必要とし、現在の組み込みプロセッサの標準的な語長(32ビット)には適していない。そこで、本発明では4アドレス4分岐命令の代わりに3アドレス4分岐命令(Q_BRANCH)を採用している。
【0029】
図5(a)は2アドレス2分岐命令(B_BRANCH)である。2アドレス2分岐命令(B_BRANCH)は、2つの分岐先アドレスのうち、1つのアドレスにジャンプする命令である。2アドレス2分岐命令は、参照する入力変数のインデックス(INDEX)、入力変数が0のときにジャンプする先の命令メモリのアドレス情報(ADDR0)、及び入力変数が1のときにジャンプする先の命令メモリのアドレス情報(ADDR1)を含む。インデックス(INDEX)で指定された変数の値が0であればアドレス情報(ADDR0)に指定されたアドレスにジャンプし、そうでなければアドレス情報(ADDR1)に指定されたアドレスにジャンプする。本実施例では、図5(a)に示すように、アドレス情報(ADDR0),(ADDR1)は8ビット、入力変数のインデックス(INDEX)は6ビットで表現する。また、2アドレス2分岐命令(B_BRANCH)のメモリ内部表現における29−31ビットに格納されたコード「111」は、この命令が2アドレス2分岐命令(B_BRANCH)であることを表す命令識別コードである。
【0030】
図5(b)はデータセット命令(DATASET)である。データセット命令(DATASET)は指定されたデータを指定された出力レジスタに出力する命令である。データセット命令(DATASET)は、出力先の出力レジスタのアドレス情報(REG)、出力データ(DATA)、及び命令実行後にジャンプする先の命令メモリのアドレス情報(ADDR)を含む。本実施例では、図5(b)に示すように、出力データ(DATA)は16ビット、アドレス情報(ADDR)は8ビット、出力レジスタのアドレス情報(REG)は6ビットで表現する。また、データセット命令(DATASET)のメモリ内部表現における30−31ビットに格納されたコード「10」は、この命令がデータセット命令(DATASET)であることを表す命令識別コードである。
【0031】
図5(c)は3アドレス4分岐命令(Q_BRANCH)である。3アドレス4分岐命令(Q_BRANCH)は、4つの分岐先アドレスのうち、1つのアドレスにジャンプする命令である。3アドレス4分岐命令(Q_BRANCH)は、参照する入力変数のインデックス(INDEX)、入力変数の値に対する分岐先アドレスの組み合わせを指定する機能選択フラグ(SEL)、入力変数が第1の値のときにジャンプする先の命令メモリのアドレス情報(ADDR0)、入力変数が第2の値のときにジャンプする先の命令メモリのアドレス情報(ADDR1)、及び入力変数が第3の値のときにジャンプする先の命令メモリのアドレス情報(ADDR2)を含む。本実施例では、図5(c)に示すように、アドレス情報(ADDR0),(ADDR1),(ADDR2)は8ビット、入力変数のインデックス(INDEX)は5ビット、機能選択フラグ(SEL)は2ビットの合計31ビットで表現する。また、3アドレス4分岐命令(Q_BRANCH)のメモリ内部表現における31ビットに格納されたコード「0」は、この命令が3アドレス4分岐命令(Q_BRANCH)であることを表す命令識別コードである。
【0032】
3アドレス4分岐命令(Q_BRANCH)において、4つの分岐先アドレスのうちの3つのアドレスは、アドレス情報(ADDR0, ADDR1, ADDR2)により指定される。残り1つの分岐先アドレスは、現在の命令のアドレス(PC)の次のアドレス(PC+1)とする。
【0033】
本発明に於いては、評価時間とステップ数の削減のため、図6に示すような4種の3アドレス4分岐命令を用いる。3アドレス4分岐命令(Q_BRANCH)内の機能選択フラグ(SEL)は、4種の3アドレス4分岐命令のうちの1つを指定するフラグである。入力変数のインデックス(INDEX)で指定された変数をiとすると、SEL=iのときに次のアドレス(PC+1)にジャンプする。アドレスの割り付けを工夫することによって、ステップ数や実行時間を最適化することができる。
【0034】
尚、3アドレス4分岐命令(Q_BRANCH)を使用する場合、現在の命令アドレス(PC)の次のアドレス(PC+1)が、他の3アドレス4分岐命令(Q_BRANCH)のPC+1と競合する場合が生じる。従って、かかる競合を避けるため、無条件ジャンプ命令が必要となる。無条件ジャンプ命令は、強制的に指定されたアドレスにジャンプする命令である。この無条件ジャンプ命令は、上述の2アドレス2分岐命令(B_BRANCH)を用いて実現される。無条件ジャンプ命令の場合、インデックス(INDEX)には無効値(例えば「0」)が設定され、アドレス情報(ADDR0)及びアドレス情報(ADDR1)には同じジャンプ先のアドレスが設定される。これにより、無条件ジャンプ命令が実行されると、入力変数の値を評価することなく、無条件にアドレス情報(ADDR0),(ADDR1)に設定されたアドレスにジャンプする。
【0035】
図3の命令デコーダ9は、命令レジスタ8に設定された命令が2アドレス2分岐命令(B_BRANCH)又は3アドレス4分岐命令(Q_BRANCH)の場合、当該命令で指定される入力変数のインデックス(INDEX)に基づき入力セレクタ3により入力変数を選択して入力レジスタ4に設定し、入力レジスタ4に設定される入力変数の値({0,1}又は{00,01,10,11})に基づいて、当該命令で指定されるジャンプする先の命令メモリのアドレス情報((ADDR0),(ADDR1),(ADDR2))を選択してプログラムカウンタ10に設定する処理を実行する。また、命令レジスタ8に設定された命令がデータセット命令(DATASET)の場合、当該命令で指定される出力レジスタのアドレス情報(REG)で指令されるレジスタ・ファイル5内の出力レジスタに、当該命令で指定される出力データ(DATA)を設定する処理を実行し、当該命令で指定されるジャンプする先の命令メモリのアドレス情報(ADDR)を選択してプログラムカウンタ10に設定する処理を実行する。
【0036】
図3のレジスタ・ファイル5は、「出力レジスタ」や「状態レジスタ」、及び「入力選択レジスタ」や「フラグレジスタ」と呼ばれるレジスタで構成される。出力レジスタ及び状態レジスタは、出力変数が設定されるレジスタである。出力レジスタ及び状態レジスタは、図4に示したようなダブルランク・フリップフロップにより構成されている。
【0037】
図4において、L1,L2はDラッチである。出力レジスタや状態レジスタはデータセット命令によって更新されるが、このデータセット命令は16ビット毎にしか値を更新することができない。そのため、16ビットよりもビット数の大きな出力や状態変数を持つ回路を評価する場合、前後の状態の値が混ざってしまうという問題が生じる。そこで、このダブルランク・フリップフロップを用いて、状態遷移信号(S_Clock)がHighのときに一度に値を更新する。
【0038】
入力選択レジスタには、入力セレクタ3が入力レジスタ4に設定する変数を選択するための入力選択信号(ISR)が設定される。
【0039】
フラグレジスタは、BM1の動作を指定する特殊なレジスタである。フラグレジスタは、「RUNビット」、「IRQビット」、「RCOPYビット」、「ACTビット」、及び「FETCHビット」を有し、各ビットはそれぞれ以下のような固有の役割を持つ。
(1)「RUNビット」は、1のときのみBM1のプログラムカウンタ10の更新が行われる。
(2)「IRQビット」は、1のとき割り込み信号が外部に送られる。
(3)「RCOPYビット」は、1のときダブルランク・フリップフロップのデータ転送が行われる。
(4)「ACTビット」は、1のとき後述するBM1を接続する回路を起動する。
(5)「FETCHビット」は1のとき入力レジスタ4に値が取り込まれる。
【0040】
変数出力バス6は、レジスタ・ファイル5内の出力レジスタや状態レジスタに設定された出力変数及び状態変数が出力されるバスである。また、フラグ出力バス11は、レジスタ・ファイル5内のフラグレジスタに設定された各フラグが出力されるバスである。
【0041】
BM1は、出力レジスタに設定された出力変数を入力レジスタ4にフィードバックして順序回路を実現することができる。入力レジスタ4には、これらのフィードバックされた値や外部入力や隣接するBM1から送られてくる出力変数が設定される。これらは、入力選択レジスタの値を用いて、入力セレクタ3が選択する。
【0042】
以上のように構成された本実施例に係るBM1について、以下その動作を説明する。ここでは簡単な具体例として、図1に示したMTBDDを実行する場合と、図2に示したQDDを実行する場合とを採り上げてBM1の動作を説明することにする。
【0043】
(1)図1に示したMTBDDを実行する場合
図1に示したMTBDDを実行する場合に命令メモリ7に格納される命令セットのコードは次表の通りである。
【0044】
【表1】

【0045】
まず、初期状態では、プログラムカウンタ10にはアドレス情報としてA0が設定される。
【0046】
プログラムの実行が開始されると、まず、命令メモリ7は、プログラムカウンタ10のアドレス情報A0を参照して、アドレスA0に格納された命令B_BRANCH (A1,A7),x0を命令レジスタ8に出力し設定する。命令デコーダ9は、命令レジスタ8に設定された命令B_BRANCH (A1,A7),x0を参照し、解読・実行する。この場合、2アドレス2分岐命令なので、まず、入力変数のインデックス(INDEX)をレジスタ・ファイル5内の「入力選択レジスタ」に設定し、レジスタ・ファイル5内の「フラグレジスタ」の「FETCHビット」を一定期間1に設定する。入力セレクタ3は、「FETCHビット」を1に設定されると、「入力選択レジスタ」に設定された入力変数x0のインデックス(INDEX)に従って、変数入力バス2のラインの1つを選択し、選択されたラインから入力される入力変数x0を入力レジスタ4に設定する。次に、命令デコーダ9は、入力レジスタ4に設定された入力変数x0の値を参照し、x0が0の場合にはアドレスA1をプログラムカウンタ10に設定し、x0が1の場合にはアドレスA7をプログラムカウンタ10に設定する。
【0047】
ここでは例として、x0=1であったとする。この場合、プログラムカウンタ10にはアドレスA7が設定される。
【0048】
次に、命令メモリ7は、プログラムカウンタ10のアドレス情報A7を参照して、アドレスA7に格納された命令B_BRANCH (A3,A8),x1を命令レジスタ8に出力し設定する。命令デコーダ9は、命令レジスタ8に設定された命令B_BRANCH (A3,A8),x1を参照し、解読・実行する。この場合、2アドレス2分岐命令なので、まず、入力変数x1のインデックス(INDEX)をレジスタ・ファイル5内の「入力選択レジスタ」に設定し、レジスタ・ファイル5内の「フラグレジスタ」の「FETCHビット」を一定期間1に設定する。入力セレクタ3は、「FETCHビット」を1に設定されると、「入力選択レジスタ」に設定された入力変数x1のインデックス(INDEX)に従って、変数入力バス2のラインの1つを選択し、選択されたラインから入力される入力変数x1を入力レジスタ4に設定する。次に、命令デコーダ9は、入力レジスタ4に設定された入力変数x1の値を参照し、x1が0の場合にはアドレスA3を、x1が1の場合にはアドレスA8をプログラムカウンタ10に設定する。
【0049】
ここでは例として、x1=0であったとする。この場合、プログラムカウンタ10にはアドレスA3が設定される。
【0050】
次に、命令メモリ7は、プログラムカウンタ10のアドレス情報A3を参照して、アドレスA3に格納された命令B_BRANCH (A4,A5),x2を命令レジスタ8に出力し設定する。命令デコーダ9は、命令レジスタ8に設定された命令B_BRANCH (A4,A5),x2を参照し、解読・実行する。この場合、2アドレス2分岐命令なので、まず、入力変数x2のインデックス(INDEX)をレジスタ・ファイル5内の「入力選択レジスタ」に設定し、レジスタ・ファイル5内の「フラグレジスタ」の「FETCHビット」を一定期間1に設定する。入力セレクタ3は、「FETCHビット」を1に設定されると、「入力選択レジスタ」に設定された入力変数x2のインデックス(INDEX)に従って、変数入力バス2のラインの1つを選択し、選択されたラインから入力される入力変数x2を入力レジスタ4に設定する。次に、命令デコーダ9は、入力レジスタ4に設定された入力変数x2の値を参照し、x2が0の場合にはアドレスA4を、x2が1の場合にはアドレスA5をプログラムカウンタ10に設定する。
【0051】
ここでは例として、x2=0であったとする。この場合、プログラムカウンタ10にはアドレスA4が設定される。
【0052】
次に、命令メモリ7は、プログラムカウンタ10のアドレス情報A4を参照して、アドレスA4に格納された命令DATASET 10,0,A0を命令レジスタ8に出力し設定する。命令デコーダ9は、命令レジスタ8に設定された命令DATASET 10,0,A0を参照し、解読・実行する。この場合、データセット命令なので、まず、レジスタ・ファイル5内のアドレス0にある「出力レジスタ」に出力データ「10」を出力し設定する。そして、次に、命令デコーダ9は、アドレスA0をプログラムカウンタ10に設定した後、終端節点なのでプログラムの実行を終了する。
【0053】
(2)図2に示したQDDを実行する場合
図2に示したQDDを実行する場合に命令メモリ7に格納される命令セットのコードは次表の通りである。
【0054】
【表2】

【0055】
この命令セットのコードによって各3アドレス4分岐命令(Q_BRANCH)のアドレスを割り当てた結果を図7に示す。
【0056】
まず、初期状態では、プログラムカウンタ10にはアドレス情報としてA0が設定される。
【0057】
プログラムの実行が開始されると、まず、命令メモリ7は、プログラムカウンタ10のアドレス情報A0を参照して、アドレスA0に格納された命令Q_BRANCH (A2,A2,A5),X0,00を命令レジスタ8に出力し設定する。命令デコーダ9は、命令レジスタ8に設定された命令Q_BRANCH (A2,A2,A5),X0,00を参照し、解読・実行する。この場合、3アドレス4分岐命令(Q_BRANCH)なので、まず、入力変数x0のインデックス(INDEX)をレジスタ・ファイル5内の「入力選択レジスタ」に設定し、レジスタ・ファイル5内の「フラグレジスタ」の「FETCHビット」を一定期間1に設定する。入力セレクタ3は、「FETCHビット」を1に設定されると、「入力選択レジスタ」に設定された入力変数x0のインデックス(INDEX)に従って、変数入力バス2のラインの1つを選択し、選択されたラインから入力される入力変数x0を入力レジスタ4に設定する。次に、命令デコーダ9は、入力レジスタ4に設定された入力変数x0の値を参照し、機能選択フラグ(SEL)が「00」なので、x0が「00」の場合には現在のアドレスA0の次のアドレスA1を、x0が「01」の場合にはアドレスA2を、x0が「10」の場合にはアドレスA2を、x0が「11」の場合にはアドレスA5をプログラムカウンタ10に設定する。
【0058】
ここでは例として、x0=11であったとする。この場合、プログラムカウンタ10にはアドレスA5が設定される。
【0059】
次に、命令メモリ7は、プログラムカウンタ10のアドレス情報A5を参照して、アドレスA5に格納された命令Q_BRANCH (A4,A4,A4),X1,10を命令レジスタ8に出力し設定する。命令デコーダ9は、命令レジスタ8に設定された命令Q_BRANCH (A4,A4,A4),X1,10を参照し、解読・実行する。この場合、3アドレス4分岐命令(Q_BRANCH)なので、まず、入力変数x1のインデックス(INDEX)をレジスタ・ファイル5内の「入力選択レジスタ」に設定し、レジスタ・ファイル5内の「フラグレジスタ」の「FETCHビット」を一定期間1に設定する。入力セレクタ3は、「FETCHビット」を1に設定されると、「入力選択レジスタ」に設定された入力変数x1のインデックス(INDEX)に従って、変数入力バス2のラインの1つを選択し、選択されたラインから入力される入力変数x1を入力レジスタ4に設定する。次に、命令デコーダ9は、入力レジスタ4に設定された入力変数x1の値を参照し、機能選択フラグ(SEL)が「10」なので、x1が「00」の場合にはアドレスA4を、x0が「01」の場合にはアドレスA4を、x1が「10」の場合には現在のアドレスA5の次のアドレスA6を、x0が「11」の場合にはアドレスA4をプログラムカウンタ10に設定する。
【0060】
ここでは例として、x1=10であったとする。この場合、プログラムカウンタ10にはアドレスA6が設定される。
【0061】
次に、命令メモリ7は、プログラムカウンタ10のアドレス情報A6を参照して、アドレスA6に格納された命令B_BRANCH (A3,A3),--を命令レジスタ8に出力し設定する。命令デコーダ9は、命令レジスタ8に設定された命令B_BRANCH (A3,A3),--を参照し、解読・実行する。この場合、命令コードの種類は2アドレス2分岐命令(B_BRANCH)であるが、指定された2つのジャンプ先のアドレスが等しいので、入力変数の値には依存せず、無条件ジャンプ命令となる。従って、命令デコーダ9は、指定されたアドレスA3をプログラムカウンタ10に設定する。
【0062】
次に、命令メモリ7は、プログラムカウンタ10のアドレス情報A3を参照して、アドレスA3に格納された命令DATASET 10,0,A0を命令レジスタ8に出力し設定する。命令デコーダ9は、命令レジスタ8に設定された命令DATASET 10,0,A0を参照し、解読・実行する。この場合、データセット命令(DATASET)なので、まず、レジスタ・ファイル5内のアドレス「0」にある「出力レジスタ」に出力データ「10」を出力し設定する。そして、次に、命令デコーダ9は、アドレスA0をプログラムカウンタ10に設定した後、終端節点なのでプログラムの実行を終了する。
【実施例2】
【0063】
本実施例では、実施例1で説明したBM1を8個直列に接続した多段ブランチング・プログラム・マシン(以下「多段BM」という。)について説明する。
【0064】
図8に、実施例2に係る多段BMの構成を表すブロック図である。図8において、BM1、並びに変数入力バス2、入力セレクタ3、入力レジスタ4、レジスタ・ファイル5、変数出力バス6、命令メモリ7、命令レジスタ8、命令デコーダ9、及びプログラムカウンタ10は図3と同様のものである。
【0065】
本実施例の多段BM20は、8個のBM1(BM〜BM)がカスケード接続された構成からなる。
【0066】
各BMの変数出力バス6は、プログラマブル・ルーティング・ボックス22を介して後段のBMn+1の変数入力バス2又は後段のプログラマブル・ルーティング・ボックス22若しくは出力レジスタ24に接続されている。また、各BMのフラグ出力バス11は、プログラマブル・ルーティング・ボックス21を介して後段のBMn+1の変数入力バス2又は後段のプログラマブル・ルーティング・ボックス21若しくはフラグレジスタ23に接続されている。また、出力レジスタ24の外部出力バスr_outは、外部回路に接続されると共に、分岐して最前段のBMの入力バスにカスケード接続されたプログラマブル・ルーティング・ボックス22に接続されている。また、フラグレジスタ23の外部出力バスf_outは、外部回路に接続されると共に、分岐して最前段のBMの入力バスにカスケード接続されたプログラマブル・ルーティング・ボックス21に接続されている。
【0067】
各プログラマブル・ルーティング・ボックス21,22は、入力配線と出力配線との接続を再構成可能に組み替える接続回路である。各プログラマブル・ルーティング・ボックス21,22は、クロスバースイッチ、マルチプレクサ等によって構成される。
【0068】
また、各プログラマブル・ルーティング・ボックス21,22は、コンフィギュレーションを変えることで、前段のBM1の出力と現在のBMの出力のビットワイズANDやビットワイズOR演算ができる。また、定数出力もできる。ビットワイズAND演算を行う場合、末端(図8で斜線で示された部分)のプログラマブル・ルーティング・ボックス21,22で定数1を生成する。一方、ビットワイズOR演算を行う場合、末端(図8で斜線で示された部分)のプログラマブル・ルーティング・ボックス21,22で定数0を生成する。
【0069】
これにより、各BMにおいて演算結果としてレジスタ・ファイル5内の各出力レジスタ及び各状態レジスタに設定された出力変数、並びにフラグレジスタに設定された各フラグは、カスケード接続されたプログラマブル・ルーティング・ボックス22,21を経由して、一旦、出力レジスタ24及びフラグレジスタ23に格納される。出力レジスタ24及びフラグレジスタ23に格納された値は、フードバックされて再び各BMの入力変数バス2に送られる。
【0070】
また、最前段のBMの入力バスにカスケード接続されたプログラマブル・ルーティング・ボックス21,22には、外部回路からの外部入力バスf_in,r_inも接続されている。従って、これらの外部入力バスf_in,r_inを介して入力される外部入力も、各プログラマブル・ルーティング・ボックス21,22を経由して各BM1にブロードキャストされる。
【0071】
また、多段BM20の出力をフィードバックして各BM1で参照することもできる。従って、各BM1を独立に動作させることもできる。
【0072】
この多段BM20では、各BM1間の通信時間は、レジスタ(フラグレジスタ23又は出力レジスタ24)を1つ経由するだけなので、レジスタに値を書き込んだ後、1クロック後に参照可能である。BM1は1命令の処理に2クロック使用しており、多段BM20内であれば命令レベルの通信時間の遅延は発生しない。
【実施例3】
【0073】
本実施例では、実施例1で説明したBM1を128個用いた並列プロセッサ30について説明する。128個のBM1を、実施例2のようにカスケード状に多段接続し、相互に通信可能とした場合、接続回路(プログラマブル・ルーティング・ボックス21,22)は非常に大きくなり、現実的ではない。そこで、本実施例では階層的な接続回路を用いる。本実施例では、実施例2で説明したような、BM1を8台カスケード接続した多段BM20を1ユニットとし、この多段BM20を16個並べて階層構造を構成する。
【0074】
順序回路を模擬する場合には、状態遷移を行うため他の多段BM20を参照する。この際、各多段BM20間の接続には、プログラマブル接続回路31を用いる。前述したように、各多段BM20内のBM1間の通信は1クロックで行うことができる。一方、異なる多段BM20間の通信は、4クロック必要となる。
【0075】
図9は、実施例3に係る並列プロセッサ30の構成を表すブロック図である。並列プロセッサ30は、16個の多段BM20(8−BM_0〜8−BM_15)、プログラマブル接続回路31、ビットワイズAND/OR回路32、及びACT積演算回路33を備えている。
【0076】
各多段BM20の出力レジスタ24の外部出力バスr_outは、プログラマブル接続回路31の入力側に接続されている。また、各多段BM20の最前段のプログラマブル・ルーティング・ボックス22の外部入力バスr_inは、プログラマブル接続回路31の出力側に接続されている。
【0077】
プログラマブル接続回路31は、入力側に接続されるバスの各配線と出力側に接続されるバスの各配線との接続順序を再構成可能に切り替える接続回路である。プログラマブル接続回路31は、複雑な信号選択を行うため、多段のマルチプレクサによって構成される。従って、単純な構成ではこのプログラマブル接続回路31がクリティカルパスとなり、並列プロセッサ30全体の動作周波数が極端に低下する。そこで、プログラマブル接続回路31内にはパイプライン・レジスタを挿入し、動作周波数を向上させるように構成する。但し、パイプライン・レジスタを挿入するため、プログラマブル接続回路31の出力を確定させるためには4クロック必要である。並列プロセッサ30では1命令につき2クロック使用しているため、プログラマブル接続回路31を通してデータを転送するには2命令待つ必要がある。
【0078】
各多段BM20のフラグレジスタ23の外部出力バスf_outは、ビットワイズAND/OR回路32の入力側に接続されている。また、各多段BM20の最前段のプログラマブル・ルーティング・ボックス21の外部入力バスf_inは、ビットワイズAND/OR回路32の出力側に接続されている。
【0079】
ビットワイズAND/OR回路32は、入力側に接続されるバスの各配線と出力側に接続されるバスの各配線との接続順序を再構成可能に切り替えるとともに、コンフィギュレーションを変えることで、各多段BM20の出力するフラグ間のビットワイズANDやビットワイズOR演算ができるように構成した接続回路である。
【0080】
また、各多段BM20のフラグレジスタ23の外部出力バスf_outの中の出力線f_out[12]は、プログラマブル接続回路31を活性化するACTフラグとして使用されている。各多段BM20の出力線f_out[12]は、ACT積演算回路33に接続されている。ACT積演算回路33はこれらのACTフラグのAND演算を行い、ACT信号を生成する。このACT信号はプログラマブル接続回路31のACT入力端子に入力される。プログラマブル接続回路31はACT信号が1のときに活性化され、前回の活性時に確定した値を保持する。
【符号の説明】
【0081】
1 ブランチング・プログラム・マシン
2 変数入力バス
3 入力セレクタ
4 入力レジスタ
5 レジスタ・ファイル
6 変数出力バス
7 命令メモリ
8 命令レジスタ
9 命令デコーダ
10 プログラムカウンタ
11 フラグ出力バス
20 多段ブランチング・プログラム・マシン
21 プログラマブル・ルーティング・ボックス
22 プログラマブル・ルーティング・ボックス
23 フラグレジスタ
24 出力レジスタ
30 並列プロセッサ
31 プログラマブル接続回路
32 ビットワイズAND/OR回路
33 ACT積演算回路

【特許請求の範囲】
【請求項1】
複数の入力変数が入力される変数入力バスと、
前記変数入力バスから入力変数を選択する入力セレクタと、
前記入力セレクタにより選択される入力変数が一時的に設定される入力レジスタと、
出力変数が設定される出力レジスタと、
前記出力レジスタに設定された出力変数が出力される変数出力バスと、
プログラムにおいて実行する各命令が記憶された命令メモリと、
命令メモリから順次読み出される命令が一時的に設定される命令レジスタと、
入力レジスタから読み出される入力変数と、命令レジスタから読み出される命令とに基づいて当該命令を実行する命令デコーダと、
次に読み出す命令の命令メモリ内のアドレス情報を記憶するプログラムカウンタと、
を備えたブランチング・プログラム・マシンであって、
前記命令メモリには、(1)参照する入力変数のインデックス、入力変数が0のときにジャンプする先の命令メモリのアドレス情報、及び入力変数が1のときにジャンプする先の命令メモリのアドレス情報を含む2アドレス2分岐命令、(2)参照する入力変数のインデックス、入力変数が第1の値のときにジャンプする先の命令メモリのアドレス情報、入力変数が第2の値のときにジャンプする先の命令メモリのアドレス情報、及び入力変数が第3の値のときにジャンプする先の命令メモリのアドレス情報を含む3アドレス4分岐命令、並びに、(3)出力先の出力レジスタのアドレス情報、及び出力データを含む出力命令の3種の命令を少なくとも含む命令系列が記憶され、前記プログラムカウンタに設定されたアドレス情報に従って該アドレス情報で指令されるアドレスに格納された命令を前記命令レジスタに出力するものであり、
前記命令デコーダは、(a)前記命令レジスタに設定された命令が前記2アドレス2分岐命令又は前記3アドレス4分岐命令の場合、当該命令で指定される入力変数のインデックスに基づき前記入力セレクタにより入力変数を選択して前記入力レジスタに設定し、当該入力レジスタに設定される入力変数の値に基づいて、当該命令で指定されるジャンプする先の命令メモリのアドレス情報を選択して前記プログラムカウンタに設定する処理を実行し、(b)前記命令レジスタに設定された命令が前記出力命令の場合、当該命令で指定される出力レジスタのアドレス情報に従って該アドレス情報で指令される前記出力レジスタのアドレスに、当該命令で指定される出力データを設定する処理を実行することを特徴とするブランチング・プログラム・マシン。
【請求項2】
前記命令メモリに記憶された3アドレス4分岐命令は、参照する入力変数のインデックス、入力変数の値に対する分岐先アドレスの組み合わせを指定する機能選択フラグ、入力変数が第1の値のときにジャンプする先の命令メモリのアドレス情報ADDR0、入力変数が第2の値のときにジャンプする先の命令メモリのアドレス情報ADDR1、及び入力変数が第3の値のときにジャンプする先の命令メモリのアドレス情報ADDR2を含み、
前記命令デコーダは、前記命令レジスタに設定された命令が前記3アドレス4分岐命令の場合には、当該命令で指定される入力変数のインデックスに基づき前記入力セレクタにより入力変数を選択して前記入力レジスタに設定し、該入力レジスタに設定される入力変数の値が前記第1,第2,第3の値の場合、それぞれ、当該命令で指定されるジャンプする先の命令メモリの前記アドレス情報ADDR0,ADDR1,ADDR2を選択し、該入力レジスタに設定される入力変数の値が前記第1,第2,又は第3の値以外の場合、現在の命令のアドレスPの次のアドレス(P+1)のアドレス情報を選択して前記プログラムカウンタに設定する処理を実行すること
を特徴とする請求項1記載のブランチング・プログラム・マシン。
【請求項3】
複数個の請求項1又は2に記載のブランチング・プログラム・マシンがカスケード接続され、後段の前記ブランチング・プログラム・マシンの変数入力バスの少なくとも一部には、前段の前記ブランチング・プログラム・マシンの前記変数出力バスが接続され、残りの変数入力バスには入力変数が入力されることを特徴とする多段ブランチング・プログラム・マシン。
【請求項4】
前記各ブランチング・プログラム・マシンの前記変数出力バスは、プログラマブル・ルーティング・ボックスを介して後段のブランチング・プログラム・マシンの前記変数入力バスに接続されていることを特徴とする請求項3記載の多段ブランチング・プログラム・マシン。
【請求項5】
複数個並列に接続された請求項3又は4記載の多段ブランチング・プログラム・マシンと、
複数の選択入力ノードと複数の選択出力ノードとを備え、前記各多段ブランチング・プログラム・マシンの前記各変数出力バスが前記各選択入力ノードに接続され、選択出力ノードの少なくとも一部が前記各多段ブランチング・プログラム・マシンの変数入力バスの一部に接続され、前記各選択入力ノードと前記各選択出力ノードとの接続を組み替え可能としたプログラマブル相互接続回路と、
を備えたことを特徴とする並列プロセッサ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate


【公開番号】特開2010−204969(P2010−204969A)
【公開日】平成22年9月16日(2010.9.16)
【国際特許分類】
【出願番号】特願2009−49981(P2009−49981)
【出願日】平成21年3月3日(2009.3.3)
【国等の委託研究の成果に係る記載事項】(出願人による申告)平成20年度、文部科学省、地域科学技術振興事業委託事業「高速パターンマッチング回路の合成とその応用に関する研究開発」委託研究、産業技術力強化法第19条の適用を受ける特許出願
【出願人】(504174135)国立大学法人九州工業大学 (489)
【出願人】(503121103)株式会社ルネサステクノロジ (4,790)
【Fターム(参考)】