(57)【要約】【課題】少ないハードウェア量で、異なるハードウェア間でのプログラム互換性を保ち、高い性能スケーラビリティを実現できるプログラムを提供する。【解決手段】演算回路ＡＬＵ１〜ＡＬＵ３と制御回路ＣＴＲから構成される論理回路ＬＧＣ（ハードウェア）に与えるプログラム１００内に、実行すべき演算ＯＰ１〜ＯＰ５と、その演算を実行するための実行順序制約（依存関係）１０９を記述する。論理回路ＬＧＣ内の制御回路ＣＴＲにより、読み込んだプログラム１００に記述された依存関係１０９を基にして演算の実行順序を決定する。【選択図】図１
2004334429.tif 000002
【特許請求の範囲】
【請求項１】
論理演算又は算術演算を行う演算回路と、前記演算回路を制御する制御回路とを具備し、
前記制御回路は、演算回路に対して実行すべき演算の種別を規定する複数の命令と前記複数の命令の間の依存関係を示す情報とを含むプログラムが入力され、前記プログラムに従って前記演算回路を制御することを特徴とする論理回路。
【請求項２】
請求項１において、
前記制御回路は、前記依存関係を示す情報に従って、前記複数の命令の実行順序を決定し、前記演算回路に前記複数の命令のうち実行可能な命令を供給することを特徴とする論理回路。
【請求項３】
請求項２において、
前記依存関係を示す情報は、前記複数の命令のうち対応する命令を実行するために、既に実行が終了していなくてはいけない先行命令の情報であり、
前記制御回路は、前記先行命令が実行されたか判断することを特徴とする論理回路。
【請求項４】
請求項２において、
前記論理回路は、前記演算回路を複数有し、
前記制御回路は、前記複数の命令のうち実行可能な命令を並列に前記演算回路に出力することを特徴とする論理回路。
【請求項５】
請求項１において、
前記論理回路は、リコンフィギャラブルプロセッサであり、
前記演算回路は、複数の演算種を含むと共にアレイ状に配置され、
前記プログラムは、演算の入出力として使用するデータの定義と、前記演算回路に対する前記演算種の指定と、前記アレイ状に配置された演算回路間の配線の接続状態の指定と、前記アレイ状に配置された演算回路のうち対応する演算回路が演算を行うために必要な入力データの情報とを含み、
前記制御回路は、入力された前記プログラムに従って、前記アレイ状に配置された演算回路間の配線の接続状態を制御し、対応する前記演算回路が実行可能かを判断することを特徴とする論理回路。
【請求項６】
論理演算や算術演算などを行う演算回路と、演算回路を制御する制御回路とを有する論理回路に対して、前記制御回路を介して前記演算回路に指示を与えて目的の演算を前記論理回路に実行させるプログラムであって、
前記演算回路に対して実行すべき演算の種別を規定する命令、または複数の演算回路に対して実行すべき演算群の種別を規定する命令群を含み、かつ、前記命令又は前記命令群の間に存在する実行順序の依存関係が記述されていることを特徴とするプログラム。
【請求項７】
請求項６に記載のプログラムにおいて、
前記複数の命令または前記命令群から構成される命令ブロックを定義し、前記命令ブロック間の実行順序の依存関係が記述されていることを特徴とするプログラム。
【請求項８】
請求項６または７に記載のプログラムにおいて、
前記命令、前記命令群、または前記命令ブロックの間に存在する実行順序の依存関係を、
前記命令、前記命令群、または前記命令ブロックからなる演算群と、
前記命令、前記命令群、または前記命令ブロックの入力、または出力となるデータと、
前記演算群と、前記演算群の実行に必要とするデータとの間の関係と、
前記演算群と、前記演算群が生成するデータとの間の関係と、
が記述されていることを特徴とするプログラム。
【請求項９】
請求項６に記載のプログラムにおいて、
前記命令または前記命令群が規定する演算を開始するために、実行が終了していなくてはならない先行命令が記述されていることを特徴とするプログラム。
【請求項１０】
請求項６から９のいずれかに記載のプログラムは、前記演算回路がアレイ状に配置され、前記演算回路に対する演算種の指定と、前記演算回路間の接続を指定することにより動作を制御するリコンフィギャラブルプロセッサを対象とすることを特徴とするプログラム。
【請求項１１】
請求項１０に記載のプログラムおいて、
演算の入出力として使用するデータの定義と、
前記演算回路に対する演算種の指定と、
前記演算回路間の配線の指定とを、一つまたは複数の演算回路に対して指定することにより定義した命令ブロックが、演算を行うために必要な入力データの情報を有することを特徴とするプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、論理回路と、論理回路上で実行するプログラムに関する。
【０００２】
【従来の技術】
マイクロプロセッサの性能は年々向上してきている。性能向上の要因には、製造技術やアーキテクチャの改善が挙げられ、今後もこれらの技術の革新により、さらなる性能向上が期待されている。
【０００３】
アーキテクチャ改善による性能向上の一例に、スーパースカラやＶＬＩＷ（Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ）の採用がある。いずれも、複数の演算回路をハードウェアとして実装することにより、複数の命令を同時に実行し、プロセッサの性能を向上させる技術である。
【０００４】
スーパースカラ、ＶＬＩＷの両者は、複数命令を実行することにより処理性能を向上させる点で共通している。通常、プロセッサの実行時には、どのような演算を行うかを記述したプログラム（オブジェクトコード）が与えられる。スーパースカラやＶＬＩＷ以前のプロセッサでは、プログラムを一個ずつ逐次実行することを前提とした命令列により与えており、命令列は先頭から一個ずつ逐次実行すれば正しい演算結果が得られることは、プログラムの作成者により保障されていた。
【０００５】
しかし、プログラム中の複数命令を同時に実行した場合、正しい結果が得られる場合と、得られない場合がある。これは命令の実行順序に依存関係がある場合とない場合が存在するからであり、任意に選択した複数命令を同時に実行した場合は、一般には正しい結果を得ることができない。そのため、スーパースカラやＶＬＩＷでは、命令間の依存関係の解析を行い、正しい結果が得られる場合のみ、複数命令の同時実行を行っている。依存関係解析の手法は、以下のように両者で異なっている。
【０００６】
スーパースカラは、命令間の依存関係を評価し、同時実行可能な命令を検出する機構をハードウェアとして備える。スーパースカラを採用したプロセッサ（以下、「スーパースカラプロセッサ」と呼ぶ）はそれ以前のプロセッサと同様に、一命令ずつ実行することを前提としたプログラムを入力とするが、プログラム実行時にハードウェアで命令間の依存関係を調査し、正しい結果が得られると判断できた場合のみ、複数の命令を同時に実行する。
【０００７】
スーパースカラは、複数のプロセッサでプログラムを共有できることが利点である。つまり、スーパースカラプロセッサでは、プログラム中に命令の依存関係に関する情報を持っていないため、スーパースカラ以前のプロセッサや、同時実行可能な命令数の異なるスーパースカラプロセッサ間で、同一のプログラムを実行することができる。従って、同一のプログラムを用いても、プログラム実行時にハードウェアで依存関係の調査を行うため、同時実行可能な命令数の多いプロセッサでは、より多くの命令を同時に処理し、高い性能を出すことができる。このようなスーパースカラプロセッサについては、例えば、非特許文献１に記載されている。
【０００８】
これに対しＶＬＩＷは、プログラム作成時に命令間の依存関係をあらかじめ調査しておく。通常、プロセッサ向けのプログラムを作成する場合にはコンパイラを使用するが、ＶＬＩＷを採用したプロセッサ（以下、「ＶＬＩＷプロセッサ」と呼ぶ）向けのコンパイラは、コード生成時に命令間の依存関係の評価も同時に行う。また、ＶＬＩＷプロセッサ向けのプログラム（オブジェクトコード）は、同時に実行すべき命令を明示的に示す構造となっている。コンパイラは依存関係の評価結果をもとに、スケジューリング（同時実行する命令の組み合わせの決定）を行い、その結果をオブジェクトコード内に記述する。この方式は、命令間依存関係の調査をハードウェアで行う必要がないため、ハードウェア量が少なくてすむことが利点である。このようなＶＬＩＷプロセッサについては、例えば、非特許文献２に記載されている。
【０００９】
また、高い演算性能とフレキシビリティを同時に実現するＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）として、リコンフィギャラブル（Ｒｅ−ｃｏｎｆｉｇｕｒａｂｌｅ  Ｐｒｏｃｅｓｓｏｒ）プロセッサが近年注目されている。リコンフィギャラブルプロセッサは、アレイ状に配置されたＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃ  Ｕｎｉｔ）などの演算回路と、演算回路間を接続するスイッチから構成される。演算回路の機能と、演算回路間の配線は、コンフィグレーションレジスタと呼ばれるレジスタの内容により再構成することが可能であり、目的に応じて構成内容を変えることにより、プログラムを実行する。リコンフィギャラブルプロセッサの中でも、プログラムの実行中にコンフィグレーションレジスタの内容を変更できるものがダイナミックリコンフィギャラブルプロセッサと呼ばれ、近年特に注目されている。
【００１０】
リコンフィギャラブルプロセッサの演算回路は、ＡＬＵが持つ加減算やＮＡＮＤやＮＯＲなどの論理演算など、複数の演算が実行可能であり、それらのうちどの機能を選択するかは、コンフィグレーションレジスタの内容により決定される。また、演算の入力信号をどこから得るか、あるいは演算の出力をどこに出力するかなどは、スイッチの接続により決まり、スイッチの接続もコンフィグレーションレジスタの内容により決定される。リコンフィギャラブルプロセッサに対するプログラムは、このコンフィグレーションレジスタに対する設定を与えるものである。
【００１１】
リコンフィギャラブルプロセッサには、アレイを大きくすることにより性能向上が可能であるという特徴がある。つまり、半導体の製造技術の進歩などにより、チップ上に集積可能なトランジスタ数が増加した場合、演算回路数を増加させ、アレイを大きくすることにより、同時に実行可能な演算数を増やして性能を向上させることが可能であり、性能スケーラビリティがよい。なお、ここで、「性能スケーラビリティ」とは使用可能なトランジスタ数が増加した場合に、トランジスタ数に比例して性能を向上させられることを言う。このようなリコンフィギャラブルプロセッサについては、例えば、非特許文献３に記載されている。
【００１２】
【非特許文献１】
Ｓｏｈｉ，  Ｇ．  Ｓ，“Ｉｎｓｔｒｕｃｔｉｏｎ  ｉｓｓｕｅ  ｌｏｇｉｃ  ｆｏｒ  ｈｉｇｈ−ｐｅｒｆｏｒｍａｎｃｅ，  ｉｎｔｅｒｒｕｐｔｉｂｌｅ，  ｍｕｌｔｉｐｌｅ  ｆｕｎｃｔｉｏｎａｌ  ｕｎｉｔ，  ｐｉｐｅｌｉｎｅｄ  ｃｏｍｐｕｔｅｒｓ”，  ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｍｐｕｔｅｒｓ，  Ｖｏｌ．  ３９，  Ｎｏ．  ３，  Ｍａｒｃｈ  １９９０，  ｐｐ．  ３４９−３５９．
【非特許文献２】
Ｆｉｓｈｅｒ，  Ｊ．  Ａ，“Ｖｅｒｙ  Ｌｏｎｇ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｗｏｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ  ａｎｄ  ｔｈｅ  ＥＬＩ−５１２”，  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １０ｔｈ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｓｙｍｐｏｓｉｕｍ  ｏｎ  Ｃｏｍｐｕｔｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ，  １９８３．
【非特許文献３】
Ｒ．  Ｈａｒｔｅｎｓｔｅｉｎ，“Ｃｏａｒｓｅ  Ｇｒａｉｎ  Ｒｅｃｏｎｆｉｇｕｒａｂｌｅ  Ａｒｃｈｉｔｅｃｔｕｒｅｓ”，  ＡＳＰ−ＤＡＣ  ２００１，  ｐｐ．  ５６４−５６９．
【００１３】
【発明が解決しようとする課題】
しかしながら、前述したようにプロセッサのプログラム実行方式として、スーパースカラ、ＶＬＩＷの二つがあるが、それぞれハードウェア量、プログラムの互換性に関して欠点がある。つまり、スーパースカラでは、命令間の依存関係をハードウェアで評価するため、性能の異なるプロセッサ間でプログラムの互換性があるという利点があるものの、依存関係を調査する専用のハードウェアを持つため、ハードウェア量が増大するという欠点がある。
【００１４】
一方ＶＬＩＷでは、コンパイラであらかじめ命令間の依存関係を調査し、スケジューリングを行っておくため、ＬＳＩ上のハードウェア量は少なくて済むという利点があるものの、コンパイルの段階でスケジューリングを行うため、プログラム（オブジェクトコード）を複数種類のプロセッサ間で共有できないという欠点がある。つまり、コンパイラがプロセッサの持つ演算回路数を考慮したスケジューリングを行うため、別のＶＬＩＷプロセッサ向けにコンパイルされたオブジェクトコードは、異なる演算回路数のＶＬＩＷプロセッサでは使用できなくなり、プロセッサ間でのプログラム互換性がない。
【００１５】
したがって、スーパースカラ、ＶＬＩＷの両方式では、少ないハードウェア量で、しかも異なるプロセッサ間でプログラムの互換性を保つということができない。
【００１６】
また、現在利用されているリコンフィギャラブルプロセッサに対するプログラムは、特定の大きさのアレイに対するプログラムであり、異なるアレイサイズを持つリコンフィギャラブルプロセッサではそのプログラムを実行することができないという欠点がある。
【００１７】
そこで、本発明の目的は、異なるハードウェアで互換性を保ち、高い演算性能を実現できると共に、ハードウェア量を削減できる記述形式のプログラムを提供することにある。
【００１８】
また、そのプログラムを読み込み実行するのに最適な論理回路、及びプロセッサを提供することも本発明の目的の一つである。
【００１９】
【課題を解決するための手段】
本発明に係るプログラム及び論理回路の代表的手段の一例を示せば次の通りである。
【００２０】
本発明に係るプログラムは、論理演算や算術演算などを行う演算回路と、前記演算回路を制御する制御回路とから構成される論理回路に対して、前記制御回路を介して演算回路に指示を与えることにより、目的の演算を論理回路に実行させるプログラムであって、前記演算回路に対して実行すべき演算の種別を規定する命令、または複数の演算回路に対して実行すべき演算群の種別を規定する命令群を含み、かつ、前記命令又は命令群の間に存在する、実行順序の依存関係が記述されていることを特徴とするものである。
【００２１】
また、本発明に係る論理回路は、論理演算又は算術演算を行う演算回路と、前記演算回路を制御する制御回路とを具備し、前記制御回路は、演算回路に対して実行すべき演算の種別を規定する複数の命令と前記複数の命令の間の依存関係を示す情報とを含むプログラムが入力され、前記プログラムに従って前記演算回路を制御することを特徴とする。
【００２２】
【発明の実施の形態】
以下、本発明の好適な実施形態について、具体的な実施例を用いて添付図面を参照しながら詳細に説明する。
【００２３】
＜実施例１＞
本発明のプログラム、及びそのプログラムを実行する論理回路の一実施例を示す。
【００２４】
本実施例は、図１に示すように、実行する演算ＯＰ１〜ＯＰ５からなる演算群と、演算に要するデータ依存関係、すなわち演算の実行順序の制約１０９（図中に、制約があることを小さい丸を付加した矢印で示す）とを含むプログラム（ＰＲＧ）１００と、そのプログラムを実行する論理回路ＬＧＣから構成される。ここでは一例として、論理回路ＬＧＣは、一つの制御回路ＣＴＲと、３つの演算回路ＡＬＵ１〜ＡＬＵ３で構成される。
【００２５】
プログラム１００には、論理回路ＬＧＣで実施すべき演算ＯＰ１を記述するほか、演算で使用するデータの受け渡しに起因する演算の実行順序の制約１０９を記述する。プログラム１００内に書かれる演算は、演算の実行順序制約１０９が規定する実行順序制約を満たしていれば、どの順序で演算を行っても正しい結果が得られることをプログラム作成者により保障されている。
【００２６】
このプログラム１００を読み込み実行する論理回路ＬＧＣは、内部に３つの演算回路ＡＬＵ１〜ＡＬＵ３を持ち、同時に３個の演算を実行可能である。そのため、演算回路ＡＬＵ１〜ＡＬＵ３を制御する制御回路ＣＴＲは、論理回路ＬＧＣがプログラム全体を短時間で終了させるために、最大３個の並列実行可能な演算を抽出し、同時に実行するように演算回路ＡＬＵ１〜ＡＬＵ３に指示を出す。この例では、５個ある演算ＯＰ１〜ＯＰ５のうち、演算ＯＰ３及び演算ＯＰ４は、それぞれ演算ＯＰ１、ＯＰ２及びＯＰ５の終了後でなくては実行できないが、演算ＯＰ１、演算ＯＰ２、及び演算ＯＰ５は並列に実行しても実行順序制約に違反しないため、同時実行が可能である。そのため制御回路ＣＴＲは、演算回路ＡＬＵ１〜ＡＬＵ３に対し、まず演算ＯＰ１、ＯＰ２、ＯＰ５をそれぞれ実行させ、その後、演算ＯＰ３、及び演算ＯＰ４を実行させることにより、２ステップでプログラム全体の実行を完了する。
【００２７】
図２は、本実施例のプログラム１００と、制御回路ＣＴＲを、より詳細化した図面である。図２では、図１でのプログラム１００と同一の内容を表現しているが、プログラム１００内部で表現する実行順序制約１０９を、演算で使用するデータを用いて表している。つまり、演算を示すＯＰ１などだけでなく、演算の入出力となるデータとして、入力データ１２３（Ｉｎ−Ｄａｔａ１〜Ｉｎ−Ｄａｔａ３）、出力データ１２２（Ｏｕｔ−ｄａｔａ１、Ｏｕｔ−ｄａｔａ２）、およびデータ（ＤＡＴＡ１〜ＤＡＴＡ３）を用い、これらデータと演算との間の関係をデータフローグラフとして表現することにより、実行順序を規定している。
【００２８】
具体的には、演算ＯＰ１は、入力データ１２３の一部であるＩＮ−Ｄａｔａ１を用いて演算を行うが、入力データはプログラム１００の実行時には必ず用意されているため、演算ＯＰ１は任意の時刻で実行可能な演算となる。演算ＯＰ１は、実行を終えると演算結果としてＤＡＴＡ１を生成する。演算ＯＰ２、演算ＯＰ５についても同様であり、それぞれＤＡＴＡ２、ＤＡＴＡ３を生成する。
【００２９】
演算ＯＰ３は、演算の入力としてＤＡＴＡ１を使用する。入力データ１２３と異なり、プログラムの内部データであるＤＡＴＡ１は、プログラム実行開始当初には用意されておらず、利用不可である。ＤＡＴＡ１が利用可能になるのは、このデータを生成する演算ＯＰ１が実行を終えた後であり、このため演算ＯＰ３は演算ＯＰ１の実行後にしか実行できないという制約が生じる。演算ＯＰ４も演算ＯＰ３と同様であり、演算ＯＰ４の実行にはＤＡＴＡ２、ＤＡＴＡ３が必要であることから、演算ＯＰ２及び演算ＯＰ５の実行後にしか演算ＯＰ４が実行できないという制約が生じる。
【００３０】
図２の論理回路ＬＧＣ中の制御回路ＣＴＲは、前記のプログラム１００を読み込み、実行すべき演算を選択する機構を詳細化したものである。制御回路ＣＴＲは、演算管理部ＯＭ、データ管理部ＤＭ、実行演算選択部ＯＳの３つから構成される。また、図９には実行演算選択部ＯＳの処理内容の概略を示した。
【００３１】
プログラム実行開始前に、制御回路ＣＴＲがプログラム１００を読み込み、演算とデータとに分離して、それぞれ演算管理部ＯＭ、データ管理部ＤＭに格納する。演算管理部ＯＭへの格納時には、図１１に示すように演算名（ＯＰ１，ＯＰ２，ＯＰ３，…等）とその演算で必要とする入力データ名（Ｉｎ−Ｄａｔａ１，Ｉｎ−Ｄａｔａ２，ＤＡＴＡ１，…等）、データ管理部ＤＭへの格納時には、図１２に示すように演算名とその演算で必要なデータ名が格納される。データ名が格納されていれば利用可であり、データ名が格納されていなければ未だそのデータが利用不可の状態である。図１２では、一例として、プログラム実行開始時の状態、すなわちまだ演算ＯＰ３とＯＰ４で必要なデータ名ＤＡＴＡ１、ＤＡＴＡ２、ＤＡＴＡ３が格納されていない状態を示している。データの利用可・不可は、プログラム実行開始時には、使用可能な入力データのみ利用可となり、その他のデータは利用不可となる。プログラムの実行が進み、新たにデータが生成されると、その段階でデータ管理部ＤＭに利用可能としてデータ名が格納される。なお、利用可、利用不可については、データ名の外に利用可、利用不可のビットを設けて判断できるようにしてもよい。
【００３２】
プログラムを実行する際には、実行演算選択部ＯＳが、演算管理部ＯＭから演算名（ＯＰ）を取得する（図９のステップＳ９０）。次に、演算ＯＰの入力データの状態をデータ管理部ＤＭから取得する（ステップＳ９１）。これら取得した演算管理部ＯＭとデータ管理部ＤＭからの情報をもとに、演算が実行可能か（すなわち、演算に必要なデータが利用可能か）を判定し、実行すべき演算を決定する。演算が実行可能であるかの判定は、演算管理部ＯＭから受け取る演算実行に必要なデータに関する情報と、データ管理部ＤＭから受け取る必要なデータが利用可能であるかの情報とを組み合わせて行い、演算実行に必要な全てのデータがそろったものを実行可能であると判定する。
【００３３】
判定の結果、実行不可であればステップＳ９０に戻って次の演算ＯＰを取得し、実行可能であれば、同時実行可能な演算数以下、つまり演算回路ＡＬＵの個数以下、本実施例では演算回路の数はＡＬＵ１〜ＡＬＵ３の３個であるから、３個以下の演算が同時に実行可能であると判定された場合は、それらの演算を全て同時に実行するように各演算回路に対して指示を出す（ステップＳ９２）。同時実行可能な演算数が演算回路の個数より大きい場合には、同時実行可能な演算から演算回路の個数と等しい演算を、先に演算管理部ＯＭに入れられたものから選び、実行する。次に、実行後の演算ＯＰが生成したデータを利用可能に修正、すなわちデータ名をデータ管理部ＤＭに格納する（ステップＳ９３）。
【００３４】
本実施例によれば、論理回路に与えるプログラム内に実行すべき演算と、その演算を実行するための実行順序制約（依存関係）を記述し、プログラムを実行する論理回路は制御回路により、読み込んだプログラムに記述された実行順序制約に基いて演算回路の実行順序を決定して演算を実行する。これにより、異なる性能のハードウェア上での互換性を保ちつつ、高い性能スケーラビリティを実現できる。
【００３５】
＜実施例２＞
本発明のプログラム及びそのプログラムを実行するプロセッサの一実施例を示す。本実施例は図３に示すように、プログラム２００と、それを実行するプロセッサ２０４とから構成される。また、図１０にはディスパッチャ２１０の処理内容の概略を示した。
【００３６】
プログラム２００は、複数の命令ＩＮＳＴ１，ＩＮＳＴ２，ＩＮＳＴ３，ＩＮＳＴ４，…からなり、命令には、実行順序を規定する制約に関する情報を持つ。制約として持つ情報は、命令間に実行順序制約が存在する場合、先行して実行すべき命令には、先行命令であることを示す情報、先行命令の実行完了後に実行すべき命令は、実行が完了していなくてはならない先行命令のアドレスである。図３では一例として、命令ＩＮＳＴ１と命令ＩＮＳＴ３の命令間と、命令ＩＮＳＴ２と命令ＩＮＳＴ４の命令間に実行順序制約２０９（図中に、小さい丸を付加した矢印で示す）がある場合を示している。
【００３７】
プロセッサ２０４は、制御回路ＣＴＲと演算回路を持つ。制御回路ＣＴＲは、プログラム２００のフェッチ、デコードなどを含み、プログラム中の命令を演算回路に振り分けるディスパッチャＤＰＴと、実行順序の制御に使用する実行済み命令リストＥＩＬから構成される。演算回路は、ここでは一例として３個の演算回路ＡＬＵ１〜ＡＬＵ３で構成され、それぞれの演算回路が同時に異なる命令を実行可能である。
【００３８】
プログラムの実行時には、ディスパッチャＤＰＴがプログラム２００を読み込み、プログラムから命令を取得する（図１０のステップＳ１０）。取得した命令の先行命令の実行状態を、実行済み命令リストＥＩＬから取得し（ステップＳ１１）、先行命令が未実行であればステップＳ１０にもどり、実行済みであれば、次のステップＳ１２に進む。
【００３９】
ステップＳ１１での個々の命令が実行可能であるかの判定は、実行順序制約を用いて行う。もし、判定対象の命令に対する実行順序制約が存在しない場合、その命令は実行可能であるとする。実行順序制約があり、完了していなくてはならない先行命令が存在する場合、そのアドレスが実行済み命令リストＥＩＬに存在されているかを確認し、存在する場合は実行可能、存在しない場合は実行不可能と判定する。
【００４０】
ディスパッチャＤＰＴは、先頭から順に実行可能な命令を実行するように演算回路ＡＬＵに対し指示を出す（ステップＳ１２）が、実行を完了した命令が実行順序制約における先行命令になっていた場合、その命令のアドレスを実行済み命令リストＥＩＬに追加記録する（ステップＳ１３）。
【００４１】
なお、プログラムの分岐命令を実行した後には、実行済み命令リストＥＩＬを初期化する。
【００４２】
本実施例によれば、プロセッサに与えるプログラム内に実行すべき命令と、その命令を実行するための実行順序制約（依存関係）を記述し、プログラムを実行するハードウェアは制御回路内のディスパッチャＤＰＴにより、読み込んだプログラムに記述された実行順序制約に基いて演算回路への命令の割り当てと実行順序を決定して、実行する。これにより、異なる性能のプロセッサ上でのプログラム互換性を保ちつつ、高い性能スケーラビリティを実現できる。
【００４３】
＜実施例３＞
本発明のプログラム及びそのプログラムを実行するリコンフィギャラブルプロセッサの一実施例を示す。図４は、リコンフィギャラブルプロセッサを構成する演算回路アレイである。このリコンフィギャラブルプロセッサは、４×４個の演算回路セルＡＬＵＣにより構成さる。演算回路アレイ３００は、データ転送用のデータバス３０２と、コンフィグレーションデータ転送用のコンフィグレーションバス３０３を持つ。演算回路セルＡＬＵＣはデータバス３０２を通じて、メモリ、他の演算回路アレイ、他のモジュール、あるいは他のチップに接続される。またコンフィグレーションデータは、コンフィグレーションバス３０３を通じてコンフィグレーションメモリに書き込まれる。
【００４４】
図５は、図４の各演算回路セルＡＬＵＣの内部構造を示す図である。演算回路セルＡＬＵＣは、コンフィグレーションメモリＣＦＧ＿ＭＥＭおよび選択回路ＳＥＬと、加算回路（ＡＤＤ）４０３、ＮＡＮＤ回路４０４、ＮＯＲ回路４０５、……等の複数の異なる機能の各種回路とを含んでいる。通常、リコンフィギャラブルプロセッサのアレイ３００を構成する各演算回路セルＡＬＵＣは、それぞれ上記のような複数の異なる機能の回路を持ち、目的の演算に応じて使用する回路を切り替える。どの回路を選択するかは、コンフィグレーションメモリＣＦＧ＿ＭＥＭが記憶し、その内容に応じて選択回路ＳＥＬが、回路４０３、４０４、４０５…の中から、必要とする機能の回路の入出力を選択する。
【００４５】
コンフィグレーションメモリＣＦＧ＿ＭＥＭの内容は、コンフィグレーションバス３０３を通じて、外部からコンフィグレーションメモリＣＦＧ＿ＭＥＭに書き込まれる。各回路４０３〜４０５等は、選択回路ＳＥＬによりどれか一つが選択され、演算を行う。選択された回路は、演算回路セルＡＬＵＣのデータバス３０２の入力ポートＩＮからデータが選択回路ＳＥＬを通じて入力され、演算を行い、その結果を選択回路ＳＥＬを通じて演算回路セルＡＬＵＣのデータバス３０２の出力ポートＯＵＴに出力する。
【００４６】
図６は、リコンフィギャラブルプロセッサの全体像を示す図である。このリコンフィギャラブルプロセッサ５００は、複数の演算回路アレイ３００と、演算回路アレイ間を続する接続素子５０１、メモリＭＥＭ、およびコンフィグレーション制御回路ＣＦＧ＿ＣＴＲから構成される。個々の演算回路アレイ３００は、図４に示したように演算回路セルＡＬＵＣから構成され、図５に示したようにコンフィグレーションメモリＣＦＧ＿ＭＥＭの内容を書き換えることにより、様々な演算を行うことができる。
【００４７】
演算に要する入出力データは、データバス３０２と接続素子５０１とを経由して、メモリＭＥＭや他の演算回路アレイ３００の出力、あるいはプロセッサ外から受け取る。接続素子５０１は、演算回路アレイ３００間の接続を行う素子であり、外部からの指示に応じて演算回路アレイ間の接続、他モジュール、メモリ、あるいはチップ外部などと接続する。リコンフィギャラブルプロセッサ５００は、プロセッサ全体で処理する演算を分割し、内部に持つリコンフィギャラブルアレイすなわち演算回路アレイ３００に対し分配することにより、処理を行う。
【００４８】
演算回路アレイ３００の入出力データを格納するために要するメモリＭＥＭに対しても、接続素子５０１を経由してアクセスする。また、個々の演算回路アレイ３００に対するコンフィグレーションデータの書き込みは、コンフィグレーション制御回路ＣＦＧ＿ＣＴＲが行い、コンフィグレーションバス３０３を経由してコンフィグレーションデータを書き込む。
【００４９】
図７は、リコンフィギャラブルプロセッサ５００へ与えるプログラムの構造を示したものである。プログラム６００は、内部に演算回路アレイ３００に対するプログラムＡＬＵ−ＡＲＲＡＹ＿ＰＲＧ１、ＡＬＵ−ＡＲＲＡＹ＿ＰＲＧ２、ＡＬＵ−ＡＲＲＡＹ＿ＰＲＧ３、……を持つ。
【００５０】
図８は、演算回路アレイ３００に対するプログラムＡＬＵ−ＡＲＲＡＹ＿ＰＲＧ１の構造を示したものである。プログラムＡＬＵ−ＡＲＲＡＹ＿ＰＲＧ１は、入力データＩｎ−ｄａｔａ、出力データＯｕｔ−ｄａｔａ、及び各演算回路セルＡＬＵＣに対するプログラムＡＬＵＣ＿ＰＲＧ１−１、ＡＬＵＣ＿ＰＲＧ１−２、……から構成される。
【００５１】
入力データＩｎ−ｄａｔａは、演算回路アレイ上でプログラムＡＬＵ−ＡＲＲＡＹ＿ＰＲＧ１を実行するために必要な入力データを示したものであり、プログラム６００全体の中で、サブプログラム（演算回路アレイへのプログラム）の実行順序を規定する制約となる。出力データＯｕｔ−ｄａｔａは、演算回路アレイが出力するデータを示すものである。ある演算回路アレイが実行を完了すると、その演算回路アレイが出力したデータが、他のアレイで入力として使用可能になる。
【００５２】
各演算回路セルに対するプログラムＡＬＵＣ＿ＰＲＧ１−１、ＡＬＵＣ−ＰＲＧ＿１−２、……は、演算回路アレイ内に含まれる個々の演算回路セルＡＬＵＣに対してのプログラムであり、演算回路セルＡＬＵＣ内に含まれるコンフィグレーションメモリＣＦＧ−ＭＥＭの内容を示すものである。
【００５３】
リコンフィギャラブルプロセッサ５００全体の管理は、コンフィグレーション制御回路ＣＦＧ＿ＣＴＲが行う。この回路がプログラム６００を読み込み、実施例１の図２で示した方法と同一の手法により、プログラムの実行制御を行う。したがって、本実施例のリコンフィギャラブルプロセッサのプログラムは、異なるアレイサイズを持つリコンフィギャラブルプロセッサでも、同じプログラムを実行することができる。すなわち、プログラム互換性がある。
【００５４】
【発明の効果】
前述した実施例から明らかなように、本発明のプログラムは、ハードウェア（論理回路、プロセッサ）に与えるプログラム内に実行すべき演算と、その演算を実行するための依存関係（制約条件）を明示的に記述する。ハードウェアには、このプログラム内に記述された依存関係を基に実行順序を決定し実行する機構を設ける。これにより、スーパースカラのように依存関係を調査する専用ハードウェアを必要としないため、非常に少ないハードウェア量で済むと共に、ＶＬＩＥのようにコンパイルの段階でスケジューリングを行うものではないので、異なるプロセッサ間でプログラムの互換性を保つことができる。
【００５５】
また、異なるサイズのリコンフィギャラブルプロセッサ上で、同一のプログラムを効率よく実行することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施例を示す図であり、プログラムと、そのプログラムを実行する論理回路の構成を示す図。
【図２】図１のプログラムをデータフローグラフを用いて表現したプログラム記述と論理回路内の制御回路の構成とを示す図。
【図３】本発明の第２の実施例を示す図であり、プログラムと、そのプログラムを実行するプロセッサの構成を示す図。
【図４】本発明の第３の実施例を示す図であり、リコンフィギャラブルプロセッサを構成する演算回路アレイを示す図。
【図５】図４の演算回路アレイを構成する演算回路セルの内部構造を示す図。
【図６】図４の演算回路アレイからなるリコンフィギャラブルプロセッサを示す図。
【図７】図６のリコンフィギャラブルプロセッサへ与えるプログラムの構造を示す図。
【図８】図６の演算回路アレイに対するプログラムの構造を示す図。
【図９】図２の実行演算選択部ＯＳの処理内容の概略を示す図。
【図１０】図３のディスパッチャＤＰＴの処理内容の概略を示す図。
【図１１】図２の演算管理部ＯＭに格納される内容を示す図。
【図１２】図２のデータ管理部ＤＭに格納される内容を示す図。
【符号の説明】
１００…プログラム（ＰＲＧ）、１０９…実行順序制約、１２２…出力データ（Ｏｕｔ−ｄａｔａ１，Ｏｕｔ−ｄａｔａ２）、１２３…入力データ（Ｉｎ−Ｄａｔａ１〜Ｉｎ−Ｄａｔａ３）、２００…プログラム、２０４…プロセッサ、２０９…実行順序制約、３００…演算回路アレイ、３０２…データバス、３０３…コンフィグレーションバス、４０３…加算回路（ＡＤＤ）、４０４…ＮＡＮＤ回路、４０５…ＮＯＲ回路、５００…リコンフィギャラブルプロセッサ、５０１…接続素子、６００…リコンフィギャラブルプロセッサ用プログラム、ＡＬＵ１〜ＡＬＵ３…演算回路、ＡＬＵＣ…演算回路セル、ＣＦＧ＿ＭＥＭ…コンフィグレーションメモリ、ＣＦＧ＿ＣＴＲ…コンフィグレーション制御回路、ＣＴＲ…制御回路、ＤＭ…データ管理部、ＤＰＴ…ディスパッチャ、ＥＩＬ…実行済み命令リスト、ＡＬＵ−ＡＲＲＡＹ＿ＰＲＧ１〜ＡＬＵ−ＡＲＲＡＹ＿ＰＲＧ３…演算回路アレイに対するプログラム、ＡＬＵＣ＿ＰＲＧ１−１，ＡＬＵＣ＿ＰＲＧ１−２…演算回路セルに対するプログラム、ＩＮＳＴ１〜ＩＮＳＴ５…命令、ＬＧＣ…論理回路、ＭＥＭ…メモリ、ＯＭ…演算管理部、ＯＰ，ＯＰ１〜ＯＰ５…演算、ＯＳ…実行演算選択部、ＳＥＬ…選択回路。
【図１】
2004334429.tif 000003
【図２】
2004334429.tif 000004
【図３】
2004334429.tif 000005
【図４】
2004334429.tif 000006
【図５】
2004334429.tif 000007
【図６】
2004334429.tif 000008
【図７】
2004334429.tif 000009
【図８】
2004334429.tif 000010
【図９】
2004334429.tif 000011
【図１０】
2004334429.tif 000012
【図１１】
2004334429.tif 000013
【図１２】
2004334429.tif 000014