(57)【要約】【課題】複数の演算器を備える演算処理装置の回路規模を縮小したい。【解決手段】演算部１０は、演算器がｘ（ｘは２以上の整数）段×ｙ（ｙは２以上の整数）列のアレイ状に配置された演算器アレイを含む。記憶部は、演算部１０により演算されるべきデータを保持する。入力制御部３０は、記憶部から、演算器アレイを構成するｍ（ｍは整数であり、２≦ｍ≦ｘ）段×ｎ（ｎは整数であり、２≦ｎ≦ｙ）列の第１演算器群に対して入力されるデータの数を所定の第１設定数に制限する。第１設定数は、第１演算器群における記憶部と接続可能な演算器の入力ポートの総数未満である。【選択図】図１
2010140197.tif 000002
【特許請求の範囲】
【請求項１】
演算器がｘ（ｘは２以上の整数）段×ｙ（ｙは２以上の整数）列のアレイ状に配置された演算器アレイを含む演算部と、
前記演算部により演算されるべきデータを保持する記憶部と、
前記記憶部から、前記演算器アレイを構成するｍ（ｍは整数であり、２≦ｍ≦ｘ）段×ｎ（ｎは整数であり、２≦ｎ≦ｙ）列の第１演算器群に対して入力される前記データの数を所定の第１設定数に制限する入力制御部と、を備え、
前記第１設定数は、前記第１演算器群における前記記憶部と接続可能な演算器の入力ポートの総数未満であることを特徴とする演算処理装置。
【請求項２】
前記入力制御部は、前記記憶部から、前記ｍ段×ｎ列の第１演算器群を構成する各段のｎ個の第２演算器群に対して入力される前記データの数を所定の第２設定数に制限し、
前記第２設定数は、前記各段における前記記憶部と接続可能な演算器の入力ポートの総数未満であることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記第１設定数は、ｍ×ｎ未満に設定され、
前記第２設定数は、ｎ未満に設定されることを特徴とする請求項２に記載の演算処理装置。
【請求項４】
前記記憶部は、前記第１設定数に対応する数の記憶領域を含むことを特徴とする請求項１から３のいずれかに記載の演算処理装置。
【請求項５】
前記入力制御部は、前記記憶部から特定の演算器に前記データが供給されるとき、その演算器が属する段に応じて、そのデータを遅延させることを特徴とする請求項１から４のいずれかに記載の演算処理装置。
【請求項６】
前記記憶部に保持されるデータは、定数データであることを特徴とする請求項１から５のいずれかに記載の演算処理装置。
【請求項７】
請求項１から６のいずれかに記載の演算処理装置で処理されるべき設定データを、ソースプログラムに所定の変換処理を施して生成する情報処理装置であって、
前記演算部に含まれる前記演算器をノードとし、前記演算器間の接続をエッジとして表現するデータフローグラフを生成するデータフローグラフ生成部と、
前記データフローグラフ生成部により生成されたデータフローグラフから設定データを生成する設定データ生成部と、を備え、
前記データフローグラフ生成部は、前記第１演算器群に対応するノード群に対して入力される前記演算されるべきデータの数を前記第１設定数に制限したデータフローグラフを生成することを特徴とする情報処理装置。
【請求項８】
前記データフローグラフ生成部は、生成したデータフローグラフの、前記ノード群に対して入力される前記データの数が前記第１設定数を超える場合、前記ノード群に含まれる少なくとも一つのノードの配置を変更することにより、前記データの数を前記第１設定数以下に制限したデータフローグラフを生成することを特徴とする請求項７に記載の情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算器を有する演算処理装置、およびその演算処理装置に設定すべき設定データを生成する情報処理装置に関する。
【背景技術】
【０００２】
近年、複数の演算器（以下適宜、ＡＬＵ（Arithmetic Logic Unit）という）を有する演算部を備える演算処理装置（たとえば、リコンフィギュラブル装置）の開発が進められている。リコンフィギュラブル装置では、制御部から演算部に設定データが供給されることにより、当該演算部内のＡＬＵおよび接続部が制御され、当該演算部が全体として所期の回路を構成し、所期の演算処理を実行する（たとえば、特許文献１、２参照）。
【特許文献１】特開２００５−２７６８５３号公報
【特許文献２】特開２００５−２７７６７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
このように、リコンフィギュラブル装置には複数の演算器が搭載されるため回路規模が増大しがちであり、その小型化が求められている。とくに、リコンフィギュラブル装置が民生機器で使用される場合、小型化が強く求められる。
【０００４】
リコンフィギュラブル装置には、上記演算部に供給されるべき設定データを一時保持するための記憶領域が必要であり、その記憶領域が回路規模を増大させる大きな要因となっている。ところで、上記設定データには、ＡＬＵおよび接続部を制御するためのコマンドデータ、およびＡＬＵで演算されるべきデータ（たとえば、定数データおよび変数データ）が含まれる。とくにＡＬＵで演算されるべきデータは、コマンドデータより大きなデータであることが多いため、このＡＬＵで演算されるべきデータを一時保持するための記憶領域の回路規模を縮小できれば、リコンフィギュラブル装置全体の小型に非常に有効である。
【０００５】
本発明はこうした状況に鑑みなされたものであり、その目的は、複数の演算器を備える演算処理装置の回路規模を縮小することができる技術を提供することにある。
【課題を解決するための手段】
【０００６】
本発明のある態様の演算処理装置は、演算器がｘ（ｘは２以上の整数）段×ｙ（ｙは２以上の整数）列のアレイ状に配置された演算器アレイを含む演算部と、演算部により演算されるべきデータを保持する記憶部と、記憶部から、演算器アレイを構成するｍ（ｍは整数であり、２≦ｍ≦ｘ）段×ｎ（ｎは整数であり、２≦ｎ≦ｙ）列の第１演算器群に対して入力されるデータの数を所定の第１設定数に制限する入力制御部と、を備える。第１設定数は、第１演算器群における記憶部と接続可能な演算器の入力ポートの総数未満である。
【０００７】
本発明の別の態様は、情報処理装置である。この装置は、演算処理装置で処理されるべき設定データを、ソースプログラムに所定の変換処理を施して生成する情報処理装置であって、演算部に含まれる演算器をノードとし、演算器間の接続をエッジとして表現するデータフローグラフを生成するデータフローグラフ生成部と、データフローグラフ生成部により生成されたデータフローグラフから設定データを生成する設定データ生成部と、を備える。データフローグラフ生成部は、第１演算器群に対応するノード群に対して入力される演算されるべきデータの数を第１設定数に制限したデータフローグラフを生成する。
【０００８】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【０００９】
本発明によれば、複数の演算器を備える演算処理装置の回路規模を縮小することができる。
【発明を実施するための最良の形態】
【００１０】
図１は、本発明の実施の形態１に係る演算処理装置１００の構成を示すブロック図である。演算処理装置１００は、機能の変更が可能なリコンフィギュラブル装置を構成する。演算処理装置１００は、演算部１０、制御部２０、入力制御部３０および演算データ記憶部４０を備える。
【００１１】
演算部１０は、制御部２０から供給される設定データに基づいて所定の演算を実行する。演算部１０は、当該設定データに含まれるコマンドデータに応じて動的に機能の変更が可能なリコンフィギュラブル回路を構成する。
【００１２】
図２は、実施の形態１に係る演算部１０の構成の一例を示す図である。演算部１０は、複数のＡＬＵを備える。ＡＬＵは、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、加減算、比較演算、論理演算、シフト演算、選択演算、乗算演算の補助演算などの複数種類の多ビット演算を設定により選択的に実行することができる。各ＡＬＵは、複数の演算機能を設定するためのセレクタを有して構成されている。図示の例では、ＡＬＵが、２つの入力端子と１つの出力端子を有して構成される。
【００１３】
演算部１０は、ＡＬＵがｘ（ｘは２以上の整数）段×ｙ（ｙは２以上の整数）列のアレイ状に配置されたＡＬＵアレイを含む。演算部１０は、接続部１１ａ〜１（ｘ＋１）ａ、およびＡＬＵ列１１ｂ〜１ｘｂを備える。接続部１１ａ〜１（ｘ＋１）ａおよびＡＬＵ列１１ｂ〜１ｘｂの構成は上記コマンドデータにより動的に設定変更される。接続部１１ａ〜１（ｘ＋１）ａは前後段のＡＬＵ列の間に設けられて、前段のＡＬＵの出力と後段のＡＬＵの入力の接続関係を設定する。最下段のＡＬＵ列１ｘｂは、接続部１（ｘ＋１）ａおよび接続部１１ａを介して最上段のＡＬＵ列１１ｂに、他の段間と同様に接続される。なお、接続部１１ａ〜１（ｘ＋１）ａは、前段の１つのＡＬＵの出力先を後段の直下のＡＬＵとその左右のＡＬＵの３方向に制限してもよい。この接続制限によりＡＬＵ間の接続数を大幅に削減することができる。なお、上記ＡＬＵアレイは、ＡＬＵの物理的配置がアレイ状であることに限定されるものではなく、ＡＬＵ間の接続関係がアレイ状であればよい。
【００１４】
当該ＡＬＵアレイでの処理は段毎に行われており、１段目のＡＬＵ列１１ｂで処理された結果が接続部１２ａを介して２段目のＡＬＵ列１２ｂに渡され、その後に２段目のＡＬＵ列１２ｂで処理されるようになっている。各段の処理は、それぞれ１クロックごとに行われる。４段のＡＬＵアレイが使用される場合、４つの独立した処理（以下、スレッドという）が動作できるようになっている。たとえば、スレッド１が１段目のＡＬＵ列１１ｂで処理された後、つぎのクロックで、スレッド１が２段目のＡＬＵ列１２ｂで処理されるとともに、スレッド２が１段目のＡＬＵ列１１ｂで処理される。
【００１５】
図１に戻る。制御部２０は、外部から入力される設定データを一時保持し、所定のタイミングでその設定データを演算部１０に供給する。この設定データは、ソースプログラムから後述する情報処理装置２００（図６参照）による所定の変換処理を経て生成されたデータであってもよい。この変換処理の詳細は後述する。
【００１６】
制御部２０は、シーケンサ２１、コマンドデータ記憶部２２、定数データ記憶部２３を含む。コマンドデータ記憶部２２は外部から入力されるコマンドデータを保持する。定数データ記憶部２３は外部から入力される、演算部１０により演算されるべきデータを保持する。ここでは演算部１０により演算されるべき定数データを保持する。ここで、定数データとはある処理の実行中は値が変化しないデータをいう。コマンドデータ記憶部２２および定数データ記憶部２３は、ＲＡＭで構成されても、ＲＯＭで構成されても、その他のデータ保持回路で構成されてもよい。
【００１７】
定数データ記憶部２３は、それぞれが定数データを格納可能な、複数の記憶領域を持つ。本実施の形態では、定数データ記憶部２３は、後述する第１設定数に対応または一致する数の記憶領域を持つ。この記憶領域の数の詳細な説明は後述する。
【００１８】
シーケンサ２１は、所定のクロックにより規定されるタイミングにしたがい、コマンドデータ記憶部２２にアドレスを供給することにより、接続部１１ａ〜１（ｘ＋１）ａおよびＡＬＵ１１〜ｘｙに設定されるべき、コマンドデータおよび定数データをコマンドデータ記憶部２２および定数データ記憶部２３に指定する。シーケンサ２１は、基本的に、コマンドデータ記憶部２２および定数データ記憶部２３のアドレスをインクリメントしていくが、上記ＡＬＵアレイで分岐処理が実行された場合、つぎのアドレスを分岐先の、コマンドデータおよび定数データのアドレスに変更する。
【００１９】
入力制御部３０は、定数データ記憶部２３から、１つのＡＬＵアレイを構成するｍ（ｍは整数であり、２≦ｍ≦ｘ）段×ｎ（ｎは整数であり、２≦ｎ≦ｙ）列の第１ＡＬＵ群に対して入力される定数データの数を所定の第１設定数に制限する。ここで、定数データの数は、定数データの個数であってもよいし、種類数であってもよい。以下、種類数の場合を例に説明する。第１設定数は、ｍ段×ｎ列の第１ＡＬＵ群を構成するＡＬＵの数による制限の他、記憶領域からデータ供給を受けるＡＬＵの入力ポート数による制限も受ける。ここでは、第１設定数は、第１ＡＬＵ群における定数データ記憶部２３と接続可能なＡＬＵの入力ポートの総数未満に設定される。上記定義から明らかなように、上記入力制限は演算部１０内のＡＬＵアレイ全体に対して適用されることも、その一部の構成に対して適用されることも可能である。したがって、当該ＡＬＵアレイ全体の内、上記入力制限が適用される領域と、適用されない領域とが含まれる構成であってもよい。
【００２０】
所定の第１設定数は設計者が任意に設定可能な値である。ここで、ｍ段×ｎ列の第１ＡＬＵ群で実行されるべき設定データで使用される定数データの種類数は、後述するように、第１設定数以下に制限されることがあらかじめ保証されている。すなわち、ソースプログラムから設定データにコンパイルされる際、その種類数が第１設定数以下となるようにコンパイルされる。したがって、定数データ記憶部２３の記憶領域が、ＡＬＵと同じクロックで動作する場合、少なくとも第１設定数に一致する数、設けられていれば、定数データ記憶部２３の記憶領域が不足することはない。そして、たとえば、定数データ記憶部２３の記憶領域がＡＬＵの２倍のクロックで動作する場合、少なくとも第２設定数の１／２の数、設けていれば、定数データ記憶部２３の記憶領域が不足することはない。
【００２１】
一般に、第１設定数を小さくするほど、定数データ記憶部２３の記憶領域の数を減らすことができるが、ｍ段×ｎ列の第１ＡＬＵ群で実行されるべき設定データに対応する、後述するデータフローグラフが長くなる可能性が高くなる。逆に、第１設定数を大きくするほど、そのデータフローグラフが短くなる可能性を高めることができるが、定数データ記憶部２３の記憶領域の数を増やさなければならない。設計者はそのトレードオフ関係を考慮して、第１設定数の値を決定する。
【００２２】
本実施の形態のように、入力制御部３０が入力制限するデータが定数データの場合において、ＡＬＵに入力される定数データが１つならば、第１設定数はｍ×ｎの値未満に設定される。
【００２３】
入力制御部３０は、定数データ記憶部２３から、上述したｍ段×ｎ列の第１ＡＬＵ群を構成する各段のｎ個の第２ＡＬＵ群に対して入力される定数データの種類数を所定の第２設定数に制限してもよい。所定の第２設定数も設計者が任意に設定可能な値である。第２設定数は、各段における定数データ記憶部２３と接続可能なＡＬＵの入力ポートの総数未満に設定されてもよい。本実施の形態のように入力制御部３０が入力制限するデータが定数データの場合において、ＡＬＵに入力される定数データが１つならば、第２設定数はｎの値未満に設定される。なお、上述したｍ段×ｎ列の第１ＡＬＵ群を構成するＡＬＵアレイの段単位で、第２設定数の値が異なっていてもよい。
【００２４】
演算データ記憶部４０は、演算部１０で処理されるべき演算データを保持する。この演算データは、最終的な演算結果を示すデータに限らず、演算途中のデータも含まれる。また、この演算データは、変数であってもよいし、定数であってもよい。演算データ記憶部４０は、複数の記憶領域を持つＲＡＭで構成されることができる。
【００２５】
図３は、実施の形態１の実施例１に係る演算処理装置１００の、定数データ記憶部２３、入力制御部３０および演算部１０の構成を示す部分構成図である。この実施例１は、演算部１０内のＡＬＵアレイ全体に上記入力制限を適用した例である。
【００２６】
定数データ記憶部２３は３つの記憶領域を含み、それらの記憶領域に保持される３種類の定数データを同時に出力することができる。この定数データ記憶部２３から出力された定数データは、入力制御部３０を通って、演算部１０内のＡＬＵアレイを構成する、指定されたＡＬＵに入力される。
【００２７】
演算部１０は、３段×４列のＡＬＵアレイを含む。なお、各ＡＬＵ１１〜３４の出力段には、後段にデータを渡すタイミングを調整するためのフリップフロップ回路（図３、４ではＤＦＦ１１〜３４と記述している）が設けられる。
【００２８】
入力制御部３０は、定数データ記憶部２３から、３段×４列のＡＬＵアレイに入力されるべき定数データの種類数を３に制限している。以下、より具体的に説明する。入力制御部３０は、スイッチ３１ａ〜３３ａ、および遅延回路３１ｂ、３２ｂを含む。スイッチ３１ａ〜３３ａは、上記ＡＬＵアレイの段数に対応して設けられる。各スイッチ３１ａ〜３３ａは、上記ＡＬＵアレイの各段に入力されるべき定数データの種類数を制限する。これにより、各ＡＬＵにデータを入力するための構成を簡素化することができる。
【００２９】
ここでは、各段に４つのＡＬＵが設けられているが、各スイッチ３１ａ〜３３ａは、各段に入力されるべき定数データの種類数を２に制限する。本来、各ＡＬＵの入力側は３種類の定数データから１つを選択するための構成（たとえば、スイッチや配線）が必要であるが、この制限を設けたことにより、２種類の定数データから１つを選択するための構成で足りる。したがって、前者より後者のほうが接続部の構成を簡素化することができる。各段に含まれるＡＬＵの数が多いほど、この効果は顕著に現れる。
【００３０】
コマンドデータは、定数データ記憶部２３にアドレスを出力するとともに、スイッチ３１ａ〜３３ａに、その接続先を指定するための制御信号を出力する。これにより、定数データ記憶部２３から、指定された段の接続部に、指定された定数データを供給することが可能となる。また、設定されたコマンドデータにより、接続部内の図示しないスイッチが制御され、指定されたＡＬＵにその定数データが入力されることが可能となる。
【００３１】
定数データ記憶部２３から特定のＡＬＵに定数データが供給されるとき、遅延回路３１ｂ、３２ｂは、そのＡＬＵが属する段に応じて、その定数データを遅延させる。各遅延回路３１ｂ、３２ｂは、上記ＡＬＵアレイ内の、特定の段からその後段にデータが渡されるタイミングに、その後段への定数データの入力タイミングを合わせるために設けられる。なお、このタイミング調整はその他の構成でも実現可能であり、その場合、遅延回路３１ｂ、３２ｂを設ける必要はない。
【００３２】
図４は、比較例に係る演算処理装置１００の、定数データ記憶部２３および演算部１０の構成を示す部分構成図である。この比較例は、演算部１０内のＡＬＵアレイの段ごとに定数データの入力制限を適用した例である。本比較例ではＡＬＵアレイの各段に入力されるべき定数データの種類数を２に制限している。本比較例では入力制御部３０は設けられない。
【００３３】
演算部１０は、実施例１と同様に３段×４列のＡＬＵアレイを含む。定数データ記憶部２３は、上記ＡＬＵアレイの各段に対応させて、それぞれ２つの記憶領域を含む。本比較例に係るＡＬＵアレイの段数は３段であるため、定数データ記憶部２３は、全体で六つの記憶領域を含む。各段に対応する２つの記憶領域はその段にのみ、２種類の定数データを同時に出力することができ、他の段には出力することができない。
【００３４】
図５は、実施の形態１の実施例２に係る演算処理装置１００の、定数データ記憶部２３、入力制御部３０および演算部１０の構成を示す部分構成図である。この実施例２は、演算部１０内のＡＬＵアレイ全体を複数の領域に分割し、それぞれの領域を構成するＡＬＵアレイごとに定数データの入力制限を適用した例である。定数データ記憶部２３および入力制御部３０は、その領域単位で設けられる。
【００３５】
演算部１０は、４段×６列のＡＬＵアレイを含む。本実施例２では、このＡＬＵアレイが３つの領域に分割される。この３つの領域はそれぞれ、２段×３列の第１ＡＬＵアレイ、２段×３列の第２ＡＬＵアレイ、および４段×３列の第３ＡＬＵアレイを構成する。第１ＡＬＵアレイはＡＬＵアレイ全体の左上部分に相当し、６つのＡＬＵ１１〜１３、２１〜２３を含む。それに対応して、第１定数データ記憶部２３ａおよび第１入力制御部３０ａが設けられる。第２ＡＬＵアレイはＡＬＵアレイ全体の左下部分に相当し、６つのＡＬＵ３１〜３３、４１〜４３を含む。それに対応して、第２定数データ記憶部２３ｂおよび第２入力制御部３０ｂが設けられる。第３ＡＬＵアレイはＡＬＵアレイ全体の右半分に相当し、１２個のＡＬＵ１４〜１６、２４〜２６、３４〜３６、４４〜４６を含む。それに対応して、第３定数データ記憶部２３ｃおよび第３入力制御部３０ｃが設けられる。
【００３６】
第１定数データ記憶部２３ａ、第２定数データ記憶部２３ｂおよび第３定数データ記憶部２３ｃはそれぞれ、３つの記憶領域を含む。第１入力制御部３０ａは第１ＡＬＵアレイ全体に入力されるべき定数データの種類数を３に制限しつつ、第１ＡＬＵアレイの各段に入力されるべき定数データの種類数を２に制限する。同様に、第２入力制御部３０ｂは第２ＡＬＵアレイ全体に入力されるべき定数データの種類数を３に制限しつつ、第２ＡＬＵアレイの各段に入力されるべき定数データの種類数を２に制限する。同様に、第３入力制御部３０ｃは第３ＡＬＵアレイ全体に入力されるべき定数データの種類数を３に制限しつつ、第３ＡＬＵアレイの各段に入力されるべき定数データの種類数を２に制限する。
【００３７】
以上説明したように実施の形態１によれば、ＡＬＵアレイに入力されるべき定数データの種類数を制限することにより、定数データ記憶部２３の記憶領域の数を少なくすることができ、回路規模を縮小することができる。図３に示す実施例１と図４に示す比較例を比較すると、両者とも、ＡＬＵアレイの各段に入力されるべき定数データの種類数を２に制限しているが、前者ではその記憶領域の数が３つであり、後者では６つである。前者のほうが定数データ記憶部２３の回路規模を縮小することができることが分かる。これは、アレイ単位で入力制限されているか否かの差異による。
【００３８】
図３に示す実施例１の構成では、図４に示す比較例と比較し、入力制御部３０を追加する必要があるが、この入力制御部３０の回路規模は、定数データ記憶部２３の回路規模と比べて非常に小さい。すなわち、定数データ記憶部２３の回路規模の縮小効果のほうが、入力制御部３０の回路規模の増大効果より非常に大きい。さらに、図３に示す実施例１の構成では、定数データ記憶部２３を制御するコマンドデータの量を少なくすることができるため、演算処理装置１００全体の回路規模の縮小につながる。回路規模の縮小により、消費電力も低減される。
【００３９】
後述するデータフローグラフが割り当てられたＡＬＵアレイにて、定数データが使用されない段も発生しうる。この状況では、ＡＬＵアレイの段ごとに定数データ記憶部２３を設ける構成は効率的ではない。本実施の形態のように、定数データ記憶部２３内の１つの記憶領域から複数の段に定数データを供給可能なほうが効率的である。また、複数の段で同じ定数データが使用されることもある。この場合、本実施の形態では、１つの記憶領域に保持される１つの定数データを複数の段で共用することができるため、定数データ記憶部２３に含まれる記憶領域を効率的に利用することができる。また、ＡＬＵアレイの各段に入力されるべき定数データの種類数に対する制限も併用することにより、比較例に係る構成で得られる、接続部の構成を簡素化する効果も維持することができる。
【００４０】
図６は、本発明の実施の形態２に係る情報処理装置２００の構成を示すブロック図である。情報処理装置２００は、上述した演算処理装置１００で処理されるべき設定データを、ソースプログラムに所定の変換処理を施して生成するコンパイル装置を構成する。情報処理装置２００は、解析部２１０、データフローグラフ生成部２２０および設定データ生成部２３０を備える。
【００４１】
これらの構成は、ハードウェア的には、任意のコンピュータのＣＰＵ、メモリ、その他のＬＳＩで実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
【００４２】
解析部２１０は、ソースプログラムを解析する。データフローグラフ生成部２２０は、解析部２１０による解析結果に基づいて、演算部１０に含まれるＡＬＵをノードとし、ＡＬＵ間の接続をエッジとして表現したデータフローグラフを生成する。データフローグラフ生成部２２０は、解析部２１０により解析された、ソースプログラム内の、命令、データおよびデータの流れに基づいて、データフローグラフを生成する。
【００４３】
データフローグラフ生成部２２０は、上述したｍ段×ｎ列のＡＬＵアレイを構成する第１ＡＬＵ群に対応するノード群に対して入力される、上記演算されるべきデータの種類数を第１設定数に制限したデータフローグラフを生成する。たとえば、データフローグラフ生成部２２０は、生成したデータフローグラフの、当該ノード群に対して入力される上記データの種類数が第１設定数を超える場合、当該ノード群に含まれる少なくとも１つのノードの配置を変更することにより、当該種類数を第１設定数以下に制限したデータフローグラフを生成する。
【００４４】
データフローグラフ生成部２２０は、その制限に加えて、そのＡＬＵアレイを構成する各段の第２ＡＬＵ群に対応するノード群に対して入力される、当該データの種類数を第２設定数以下に制限したデータフローグラフを生成してもよい。設定データ生成部２３０は、データフローグラフ生成部２２０により生成されたデータフローグラフから設定データを生成する。
【００４５】
以下、実施の形態２に係る情報処理装置２００が、定数データの入力制限を満たした設定データを生成するための２つの実施例を具体例を挙げながら説明する。
【００４６】
図７は、実施の形態２に係る情報処理装置２００によりコンパイルされるべきソースプログラムの一例を示す図である。このソースプログラムはＣ言語によりユーザに記述されたものである。このプログラムではつぎの処理を実行する。まず、変数ｘに１を加算し、変数ｙに３を加算する。つぎに、変数ｘを１ビット右シフトすることにより、変数ｘを１／２にし、変数ｙを２ビット左シフトすることにより、変数ｙを４倍にし、変数ｚに３を加算する。つぎに、変数ｘと７との論理積をとってその演算結果を新たな変数ｘとし、変数ｙに論理積がとられる前の変数ｘを加算し、変数ｚを３ビット左シフトすることにより、変数ｚを８倍にする。最後に、変数ｚに変数ｙを加算し、変数ｘを減算する。
【００４７】
まず、実施の形態２の実施例１に係る情報処理装置２００の動作を説明する。以下、演算部１０内のＡＬＵアレイが６段×４列である例を説明する。そして、そのＡＬＵアレイの、上半分の３段×４列の第１ＡＬＵアレイと下半分の３段×４列の第２ＡＬＵアレイのそれぞれに対して、入力されるべき定数データの種類数が３に制限され（以下、第１定数制限という）、およびそれらの各段に対して入力されるべき定数データの種類数が２に制限される（以下、第２定数制限という）例を説明する。
【００４８】
図８は、実施の形態２の実施例１に係る情報処理装置２００の動作を示すフローチャートである。図９は、実施の形態２の実施例１に係る情報処理装置２００によるコンパイル途中で生成される、図７のソースプログラムに対応するデータフローグラフ（定数制限未対応）を示す図である。図９にて、楕円で描かれているノードは、ＡＬＵアレイを構成するＡＬＵを示す。ノード内の、「＋」は加算コマンド、「−」は減算コマンド、「＞＞」は右ビットシフトコマンド、「＜＜」は左ビットシフトコマンド、「＆」は論理積コマンド、および「ＭＯＶ」は上段から入力されるデータを下段に渡すためのコマンドを示す。
【００４９】
図８に戻り、解析部２１０は図７に示したソースプログラムを解析する（Ｓ１０）。データフローグラフ生成部２２０は、その解析結果に基づいてデータフローグラフを生成する（Ｓ１２）。データフローグラフ生成部２２０は、生成したデータフローグラフをＡＬＵアレイに割り当てる（Ｓ１４）。その際、ＡＬＵアレイの物理的な制限などを満たした上で、コマンドが割り当てられるノードの数、およびそのプログラム全体を実行するに必要なＡＬＵアレイの段数ができるだけ小さくなるように割り当てる。
【００５０】
図９は、このステップＳ１４により上記ＡＬＵアレイに割り当てられた後のデータフローグラフを示す。ここで、点線枠Ｆ１は第１定数制限が３に設定された第１ＡＬＵアレイを示し、点線枠Ｆ２は第１定数制限が３に設定された第２ＡＬＵアレイを示している。上記割当は、第１定数制限および第２定数制限が考慮されずに実行されているため、すなわち、既存の割当アルゴリズムにより実行されているため、割当後のデータフローグラフが第１定数制限または第２定数制限を満たさない場合がある。
【００５１】
図９では、ＡＬＵアレイ全体の２段目に定数データが３種類（「１」、「２」、「３」）、入力される構造となっており、第２定数制限を満たしていない。また、点線枠Ｆ１で囲われている第１ＡＬＵアレイに定数データが４種類（「１」、「２」、「３」、「７」）、入力される構造となっており、第１定数制限を満たしていない。そこで本実施例では、第１定数制限および第２定数制限を満たすように、このデータフローグラフを整形する処理が追加される。図８のステップＳ１６〜Ｓ２６に示される処理が、このデータフローグラフの整形処理に相当する。
【００５２】
データフローグラフ生成部２２０は、ＡＬＵアレイ全体から第２定数制限を満たさない段を一つ抽出する（Ｓ１６）。第２定数制限を満たさない段が複数、存在する場合、上段から抽出する。図９では２段目が抽出される。データフローグラフ生成部２２０は、第２定数制限を満たさない段が存在するか否かを判定する（Ｓ１８）。存在する場合（Ｓ１８のＹ）、ステップＳ２０に遷移する。存在しない場合（Ｓ１８のＮ）、ステップＳ２２に遷移する。
【００５３】
データフローグラフ生成部２２０は、ステップＳ１６にて抽出された段に属する１つ以上のノードを他の段、すなわち上下のいずれかの段に移動させる（Ｓ２０）。その際、移動させるノードは、そのノードの移動によって移動させられる他のノードの数が最も少ないノードであることが好ましい。なお、「ｍｏｖ」コマンドが割り当てられているノードは単にデータをスルーするためのノードであるため、この処理ではそのノードはカウント対象から除かれてもよい。
【００５４】
図９では２段目に属する３つのノードのうち１つを他の段に移動させなければならない。まず、左端のノードを上段に移動させた場合、それにより移動が必要なノードの数は１段目の左端のノードの１つである。また、下段に移動させた場合、その出力につながっている５つのノードの移動が必要となる。同様に、２段目の中央のノードおよび右端のノードをそれぞれ上段および下段に移動させた場合について検証すると、右端のノードを上段に移動させた場合、他のノードの移動が必要ないことが分かる。したがって、２段目の右端のノードを上段に移動させる。
【００５５】
そのノードの移動が完了すると、ステップＳ１６に戻り、すべての段が第２定数制限を満たすようになるまで、ステップＳ１６〜Ｓ２０の処理が繰り返される。このループ処理から出る際に、第２定数制限を満たさない段を再度抽出する処理（Ｓ１６）を試みるのは、ノードの移動によって新たに第２定数制限を満たさない段が発生する場合があり、それをチェックするためである。図９では２段目の右端のノードが１段目の右端に移動されると、すべての段が第２定数制限を満たすため、ステップＳ２２に遷移する。
【００５６】
データフローグラフ生成部２２０は、ＡＬＵアレイ全体から第１定数制限を満たさない、第１定数制限の適用領域を構成するＡＬＵアレイを一つ抽出する（Ｓ２２）。図９では点線枠Ｆ１で囲われた第１ＡＬＵアレイに定数データが４種類入力される構造であるため、第１ＡＬＵアレイは第１定数制限を満たしていない。そこで、第１ＡＬＵアレイが抽出される。データフローグラフ生成部２２０は、第１定数制限を満たさないＡＬＵアレイが存在するか否かを判定する（Ｓ２４）。存在する場合（Ｓ２４のＹ）、ステップＳ２６に遷移する。存在しない場合（Ｓ２４のＮ）、ステップＳ２８に遷移する。
【００５７】
データフローグラフ生成部２２０は、ステップＳ２２にて抽出されたＡＬＵアレイのノードを他のＡＬＵアレイに移動させる（Ｓ２６）。ステップＳ２０と同様に、移動させるノードは、そのノードの移動によって移動させられる他のノードの数が最も少ないノードであることが好ましい。図９では、第１ＡＬＵアレイの３段目の左端のノードを下の第２ＡＬＵアレイの１段目の左端に移動させた場合、他に移動させるノードを最も少なくすることができるため、そのように移動させる。
【００５８】
そのノードの移動が完了すると、ステップＳ２２に戻り、第１定数制限の適用領域を構成するすべてＡＬＵアレイが第１定数制限を満たすようになるまで、ステップＳ２２〜Ｓ２６の処理が繰り返される。このループ処理から出る際に、当該ＡＬＵアレイを再度抽出する処理（Ｓ２２）を試みるのは、ノードの移動によって新たに第１定数制限を満たさない当該ＡＬＵアレイが発生する場合があり、それをチェックするためである。図９では第１ＡＬＵアレイの３段目の左端のノードが第２ＡＬＵアレイの１段目の左端に移動されると、すべての当該ＡＬＵアレイが第１定数制限を満たすため、ステップＳ２８に遷移する。
【００５９】
図１０は、図７のソースプログラムに対応するデータフローグラフ（定数制限対応）を示す図である。このデータフローグラフは、図９のデータフローグラフがステップＳ１６〜Ｓ２６に示される処理を経て、整形処理されたものであり、第１定数制限および第２定数制限のいずれも満たしている。
【００６０】
図８に戻り、設定データ生成部２３０は、整形されたデータフローグラフに基づいて、演算部１０に設定されるべきコマンドデータおよび定数データ記憶部２３に格納されるべき定数データを含む設定データを生成する（Ｓ２８）。
【００６１】
図１１は、実施の形態２の実施例２に係る情報処理装置２００の動作を示すフローチャートである。図１２は、実施の形態２の実施例２に係る情報処理装置２００によるコンパイル途中で生成される、図７のソースプログラムに対応するデータフローグラフ（定数制限未対応）を示す図である。
【００６２】
図１１に戻り、解析部２１０は図７に示したソースプログラムを解析する（Ｓ３０）。データフローグラフ生成部２２０は、その解析結果に基づいてデータフローグラフを生成する（Ｓ３２）。本実施例ではこの段階では、当該データフローグラフをＡＬＵアレイに割り当てない。また、当該データフローグラフ内のノードに「ｍｏｖ」コマンドを割り当てる必要もない。
【００６３】
図１２は、このステップＳ３２により生成されたデータフローグラフを示す。以下、このデータフローグラフをステップＳ３４〜Ｓ４８に示す処理により整形する。まず、データフローグラフ生成部２２０は、ＡＬＵアレイに含まれるＡＬＵに割り当てるべき順に、当該データフローグラフ内のノードをソートする（Ｓ３４）。図１２では、左上のノードから右下のノードに向かって（ノードの右に記述しているアルファベット順に）、それらのノードをソートする。
【００６４】
つぎに、データフローグラフ生成部２２０は初期値設定として、変数ｎにノード数を、変数ｉにゼロを代入する（Ｓ３６）。図１２ではノード数は１０である。つぎに、データフローグラフ生成部２２０は変数ｎと変数ｉとを比較し（Ｓ３８）、一致しないとき（Ｓ３８のＮ）、ステップＳ４０に遷移し、一致したとき（Ｓ３８のＹ）、ステップＳ５０に遷移する。
【００６５】
データフローグラフ生成部２２０は、ノード（ｉ）を割当可能な、上記ＡＬＵアレイ内のＡＬＵを１つ選択する（Ｓ４０）。この際、接続制限を考慮して配置可能な位置を選択する。以下、上記ＡＬＵアレイ内のＡＬＵの位置を、ＡＬＵ（段番号，列番号）と表記する。そして、ＡＬＵ（０，０）→ＡＬＵ（０，１）→ＡＬＵ（０，２）→ＡＬＵ（１，０）→ＡＬＵ（１，１）→．．．というように、左上のＡＬＵから右下のＡＬＵに向かって割当可能な位置を検証する。
【００６６】
データフローグラフ生成部２２０は、上記ＡＬＵアレイの段が第２定数制限を満たしているか否か判定する（Ｓ４２）。満たしているとき（Ｓ４２のＹ）、ステップＳ４４に遷移し、満たしていないとき（Ｓ４２のＮ）、ステップＳ４０に遷移する。データフローグラフ生成部２２０は、上記ＡＬＵアレイ全体の第１定数制限の適用領域を構成するＡＬＵアレイが、第１定数制限を満たしているか否か判定する（Ｓ４４）。満たしているとき（Ｓ４４のＹ）、ステップＳ４６に遷移し、満たしていないとき（Ｓ４４のＮ）、ステップＳ４０に遷移する。データフローグラフ生成部２２０は、ノード（ｉ）をステップＳ４０にて選択されたＡＬＵに割り当てる（Ｓ４６）。データフローグラフ生成部２２０は、変数ｉをインクリメントする（Ｓ４８）。その後、ステップＳ３８に遷移する。
【００６７】
以下、ステップＳ３８〜Ｓ４８の処理を図１２のデータフローグラフに適用した例を説明する。ノードａの入力には他のノードがつながっておらず、ＡＬＵ（０，０）にはノードが割り当てられていないため、データフローグラフ生成部２２０は、ノードａをＡＬＵ（０，０）に割り当てることができる。したがって、ノードａの割当位置候補をＡＬＵ（０，０）とする（ステップＳ４０）。ＡＬＵ（０，０）が属する段に他のノードが割り当てられていないため、ＡＬＵ（０，０）が属する段に入力される定数データは「１」のみであり、第２定数制限を満たしている（ステップＳ４２のＹ）。また、ＡＬＵ（０，０）が属する第１定数制限の適用領域を構成するＡＬＵアレイ（図９の点線枠Ｆ１で囲われた領域に相当する）に入力される定数データは「１」のみであり、第１定数制限を満たしている（ステップＳ４４のＹ）。したがって、データフローグラフ生成部２２０はノードａをＡＬＵ（０，０）に割り当てる（Ｓ４６）。
【００６８】
つぎに、ＡＬＵ（０，０）にはノードａが配置されているため、データフローグラフ生成部２２０は、ノードｂの割当位置候補をＡＬＵ（０，１）とする（Ｓ４０）。以下、ノードａと同様の処理を経て、データフローグラフ生成部２２０は、ノードｂをＡＬＵ（０，１）に割り当てる（Ｓ４６）。
【００６９】
つぎに、ノードｃの入力にはノードａがつながっているため、データフローグラフ生成部２２０は、ノードａが割り当てられているＡＬＵ（０，０）と接続可能なＡＬＵで、かつノードが割り当てられていないＡＬＵを選択する。以下、これまでのノードと同様の処理を経て、データフローグラフ生成部２２０は、ノードｃをＡＬＵ（１，０）に割り当てる（Ｓ４６）。
【００７０】
これまでのノードと同様の処理を経て、データフローグラフ生成部２２０は、ノードｄをＡＬＵ（１，１）に、ノードｅをＡＬＵ（０，２）に割り当てる（Ｓ４６）。つぎに、データフローグラフ生成部２２０は、ノードｆの割当位置候補をＡＬＵ（２，０）とする（Ｓ４０）。ＡＬＵ（２，０）が属する段は第２定数制限を満たしているが（Ｓ４２のＹ）、ＡＬＵ（２，０）が属する第１定数制限の適用領域を構成するＡＬＵアレイは第１定数制限を満たしていない（Ｓ４４のＮ）。すなわち、そのＡＬＵアレイに入力される定数データは、「１」、「２」、「３」の３種類であり、ノードｆに入力される定数データである「７」を含めると４種類となり、第１定数制限を満たさない。
【００７１】
データフローグラフ生成部２２０は、ノードｆの割当位置候補をＡＬＵ（２，０）からＡＬＵ（２，１）に変更する（Ｓ４０）。この変更処理を繰り返した後、データフローグラフ生成部２２０は、ノードｆをＡＬＵ（３，０）に割り当てる（Ｓ４６）。その際、データフローグラフ生成部２２０は、ノードｃからノードｆにデータを渡すための「ｍｏｖ」コマンドをＡＬＵ（２，０）に割り当てる。
【００７２】
これまでのノードと同様の処理を経て、データフローグラフ生成部２２０は、ノードｇをＡＬＵ（２，１）に割り当てる（Ｓ４６）。つぎに、データフローグラフ生成部２２０は、ノードｈの割当位置候補をＡＬＵ（１，２）とする（Ｓ４０）。ＡＬＵ（１，２）が属する段は第２定数制限を満たしていない（Ｓ４２のＮ）。すなわち、その段に入力される定数データは、「１」、「２」の２種類であり、ノードｈに入力される定数データである「３」を含めると３種類となり、第２定数制限を満たさない。
【００７３】
データフローグラフ生成部２２０は、ノードｈの割当位置候補をＡＬＵ（１，２）からＡＬＵ（２，２）に変更する（Ｓ４０）。データフローグラフ生成部２２０は、ノードｈをＡＬＵ（２，２）に割り当てる（Ｓ４６）。
【００７４】
これまでのノードと同様の処理を経て、データフローグラフ生成部２２０は、ノードｉをＡＬＵ（３，１）に、ノードｊをＡＬＵ（４，０）に割り当てる（Ｓ４６）。すべてのノードの割り当てが終了すると（Ｓ３８のＹ）、データフローグラフの整形処理が終了する。この段階のデータフローグラフは図９に示したものと同様となる。
【００７５】
図１１に戻り、設定データ生成部２３０は、整形されたデータフローグラフに基づいて、演算部１０に設定されるべきコマンドデータおよび定数データ記憶部２３に格納されるべき定数データを含む設定データを生成する（Ｓ５０）。
【００７６】
以上説明したように実施の形態２によれば、実施の形態１に係る演算処理装置１００で正常に実行される設定データを生成することができる。すなわち、定数データ記憶部２３の記憶領域を削減することを担保することができる。
【００７７】
以上、本発明をいくつかの実施形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００７８】
上述した実施の形態では、定数データに対する入力制限について説明したが、変数データに対する入力制限を設けてもよい。演算部１０と演算データ記憶部４０との間に、入力制御部３０と同様の入力制御部を設ければよい。情報処理装置２００のデータフローグラフ生成部２２０が定数データと同様に、変数データの種類数をアレイ単位および／または段単位で所定の値以下に制限すればよい。
【００７９】
また、演算部１０内のＡＬＵアレイで複数のスレッドを処理する場合、スレッド単位で上記入力制限を施せばよい。その際、定数データ記憶部２３および入力制御部３０は全スレッドで共有できる。
【００８０】
また、実施の形態１では定数データ記憶部２３を制御部２０内に設ける例を説明したが、演算データ記憶部４０内に設けてもよい。
【図面の簡単な説明】
【００８１】
【図１】本発明の実施の形態１に係る演算処理装置の構成を示すブロック図である。
【図２】実施の形態１に係る演算部の構成の一例を示す図である。
【図３】実施の形態１の実施例１に係る演算処理装置の、定数データ記憶部、入力制御部および演算部の構成を示す部分構成図である。
【図４】比較例に係る演算処理装置の、定数データ記憶部および演算部の構成を示す部分構成図である。
【図５】実施の形態１の実施例２に係る演算処理装置の、定数データ記憶部、入力制御部および演算部の構成を示す部分構成図である。
【図６】本発明の実施の形態２に係る情報処理装置の構成を示すブロック図である。
【図７】実施の形態２に係る情報処理装置によりコンパイルされるべきソースプログラムの一例を示す図である。
【図８】実施の形態２の実施例１に係る情報処理装置の動作を示すフローチャートである。
【図９】実施の形態２の実施例１に係る情報処理装置によるコンパイル途中で生成される、図７のソースプログラムに対応するデータフローグラフ（定数制限未対応）を示す図である。
【図１０】図７のソースプログラムに対応するデータフローグラフ（定数制限対応）を示す図である。
【図１１】実施の形態２の実施例２に係る情報処理装置の動作を示すフローチャートである。
【図１２】実施の形態２の実施例２に係る情報処理装置によるコンパイル途中で生成される、図７のソースプログラムに対応するデータフローグラフ（定数制限未対応）を示す図である。
【符号の説明】
【００８２】
１０  演算部、  １１  ＡＬＵ、  １１ａ  接続部、  １１ｂ  ＡＬＵ列、  ２０  制御部、  ２１  シーケンサ、  ２２  コマンドデータ記憶部、  ２３  定数データ記憶部、  ３０  入力制御部、  ３１ａ  スイッチ、  ３１ｂ  遅延回路、  ４０  演算データ記憶部、  １００  演算処理装置、  ２００  情報処理装置、  ２１０  解析部、  ２２０  データフローグラフ生成部、  ２３０  設定データ生成部。
【図１】
2010140197.tif 000003
【図２】
2010140197.tif 000004
【図３】
2010140197.tif 000005
【図４】
2010140197.tif 000006
【図５】
2010140197.tif 000007
【図６】
2010140197.tif 000008
【図７】
2010140197.tif 000009
【図８】
2010140197.tif 000010
【図９】
2010140197.tif 000011
【図１０】
2010140197.tif 000012
【図１１】
2010140197.tif 000013
【図１２】
2010140197.tif 000014