(57)【要約】【課題】複数の演算器を含む演算部を備える演算処理装置において、乗算を効率的に実行したい。【解決手段】演算処理装置は外部から供給される設定データに応じて機能の変更が可能な演算部１０を備える。演算部１０は、は、乗算を除く複数種類の算術論理演算を選択的に実行可能な第１演算器１１〜４６と、乗算を単体で実行可能な第２演算器６１、７１とを備える。第１演算器１１〜４６は、ｘ（ｘは２以上の整数）行×ｙ（ｙは２以上の整数）列の第１演算器アレイを構成してもよい。第２演算器６１、７１は、ｍ（ｍはｘ以下の自然数）行×ｎ（ｎは自然数）列の、第２演算器列または第２演算器アレイを構成してもよい。【選択図】図４
2010134713.tif 000002
【特許請求の範囲】
【請求項１】
外部から供給される設定データに応じて機能の変更が可能な演算部を備える演算処理装置であって、
前記演算部は、
乗算を除く複数種類の算術論理演算を選択的に実行可能な複数の第１演算器と、
乗算を単体で実行可能な少なくとも一つの第２演算器と、
を含むことを特徴とする演算処理装置。
【請求項２】
前記第１演算器は、ｘ（ｘは２以上の整数）行×ｙ（ｙは２以上の整数）列の第１演算器アレイを構成し、
前記第２演算器は、ｍ（ｍはｘ以下の自然数）行×ｎ（ｎは自然数）列の、第２演算器列または第２演算器アレイを構成することを特徴とする請求項１に記載の演算処理装置。
【請求項３】
前記第１演算器は、ｘ（ｘは２以上の整数）行×ｙ（ｙは２以上の整数）列の第１演算器アレイを構成し、
前記第２演算器は、前記第１演算器アレイの複数行ごとに設けられることを特徴とする請求項１に記載の演算処理装置。
【請求項４】
ソースプログラムを、請求項１から３のいずれかに記載の演算処理装置で処理されるべき設定データに変換する変換装置であって、
前記ソースプログラムに含まれる乗算処理を、前記第１演算器のシフト演算機能を用いて実行するか、前記第２演算器の乗算機能を用いて実行するかを判定する判定部と、
前記乗算処理を、前記判定部による判定結果に応じた設定データに変換する設定データ生成部と、
を備えることを特徴とする変換装置。
【請求項５】
前記判定部は、前記乗算処理が変数と定数との乗算であって、その定数が２の乗数であるとき、前記第１演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、前記第２演算器の乗算機能を用いて実行するを選択することを特徴とする請求項４に記載の変換装置。
【請求項６】
前記判定部は、前記乗算処理が変数と定数との乗算であって、その定数を２進数で表現した場合に１の数が所定の設定値以下であるとき、前記第１演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、前記第２演算器の乗算機能を用いて実行するを選択することを特徴とする請求項４に記載の変換装置。
【請求項７】
ソースプログラムを、請求項２または３に記載の演算処理装置で処理されるべき設定データに変換する変換装置であって、
前記ソースプログラムに含まれる乗算処理を、前記第１演算器のシフト演算機能を用いて実行するか、前記第２演算器の乗算機能を用いて実行するかを判定する判定部と、
前記乗算処理を、前記判定部による判定結果に応じた設定データに変換する設定データ生成部と、を備え、
前記判定部は、前記第１演算器のシフト演算機能を用いて実行する、前記第２演算器の乗算機能を用いて実行するのうち、前記第１演算器アレイの行数を基準に、前記乗算処理を少ない行数で実行可能なほうを選択することを特徴とする変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の演算器を有する演算処理装置、およびその演算処理装置に設定すべき設定データをソースプログラムから生成する変換装置に関する。
【背景技術】
【０００２】
近年、複数の演算器（以下適宜、ＡＬＵ（Arithmetic Logic Unit）という）を有する演算部を備える演算処理装置の開発が進められている。このような演算処理装置では、制御部から上記演算部に設定データが供給されることにより、当該演算部内のＡＬＵおよび接続部が制御され、当該演算部が全体として所期の回路を構成する。
【０００３】
従来、上記演算部に含まれる個々のＡＬＵに乗算機能を持たせない構成が一般的であった（たとえば、特許文献１〜３および非特許文献１参照）。ＡＬＵに乗算機能を持たせると、その回路規模および消費電力が増大してしまう点が考慮されてのことである。
【特許文献１】特開２００４−２２０３７７号公報
【特許文献２】特開２００７−２１３５９４号公報
【特許文献３】特開２００５−２７５６９８号公報
【非特許文献１】飯塚和久、平瀬勝典、小曽根真、平松達夫、”ＡＬＵアレイアーキテクチャＬＳＩを用いた放送受信機の実現”、電子情報通信学会技術研究報告 Vol.108, No.172, pp.43-47(SR2008-24), Jul. 2008
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上述した構成では、乗算式を展開することにより乗算を実行していた。たとえば、乗算式をシフト演算と加減算の組み合わせ式に変換することにより、乗算を実行していた。しかしながら、このようなアプローチは、フィルタ処理など乗算が多用されるアプリケーションに対して効率的でなかった。上記アプローチでは、複数のＡＬＵを用いて複数の演算ステップを経なければ乗算を実行できないため、処理時間の遅延につながったり、上記演算部に含まれるＡＬＵの利用効率の低下につながっていた。
【０００５】
本発明はこうした状況に鑑みなされたものであり、その目的は、複数の演算器を含む演算部を備える演算処理装置において、乗算を効率的に実行することができる技術を提供することにある。
【課題を解決するための手段】
【０００６】
本発明のある態様の演算処理装置は、外部から供給される設定データに応じて機能の変更が可能な演算部を備える演算処理装置であって、演算部は、乗算を除く複数種類の算術論理演算を選択的に実行可能な複数の第１演算器と、乗算を単体で実行可能な少なくとも一つの第２演算器と、を含む。
【０００７】
本発明の別の態様は、変換装置である。この装置は、ソースプログラムを、演算処理装置で処理されるべき設定データに変換する変換装置であって、ソースプログラムに含まれる乗算処理を、第１演算器のシフト演算機能を用いて実行するか、第２演算器の乗算機能を用いて実行するかを判定する判定部と、乗算処理を、判定部による判定結果に応じた設定データに変換する設定データ生成部と、を備える。
【０００８】
本発明のさらに別の態様もまた、変換装置である。この装置は、ソースプログラムを、演算処理装置で処理されるべき設定データに変換する変換装置であって、ソースプログラムに含まれる乗算処理を、第１演算器のシフト演算機能を用いて実行するか、第２演算器の乗算機能を用いて実行するかを判定する判定部と、乗算処理を、判定部による判定結果に応じた設定データに変換する設定データ生成部と、を備える。判定部は、第１演算器のシフト演算機能を用いて実行する、第２演算器の乗算機能を用いて実行するのうち、第１演算器アレイの行数を基準に、乗算処理を少ない行数で実行可能なほうを選択する。
【０００９】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【００１０】
本発明によれば、複数の演算器を含む演算部を備える演算処理装置において、乗算を効率的に実行することができる。
【発明を実施するための最良の形態】
【００１１】
図１は、本発明の実施の形態１に係る演算処理装置１００の構成を示すブロック図である。演算処理装置１００は、演算部１０、制御部２０および記憶部３０を備える。
【００１２】
演算部１０は、制御部２０から供給される設定データ（以下適宜、コマンドデータという）に基づいて所定の演算を実行する。演算部１０は、当該コマンドデータに応じて動的に機能の変更が可能なリコンフィギュラブル回路を構成する。なお、演算部１０の詳細な構成は後述する。
【００１３】
制御部２０は、外部から入力されるコマンドデータを保持し、その保持しているコマンドデータを順次、演算部１０に供給する。このコマンドデータは、ソースプログラムから後述する変換装置２００（図９参照）により変換されたデータであってもよい。
【００１４】
記憶部３０は、演算部１０で処理される演算データを保持する。この演算データは、最終的な演算結果を示すデータに限らず、演算途中のデータも含まれる。また、この演算データは、変数であってもよいし、定数であってもよい。
【００１５】
図２は、従来技術に係る演算部１０の第１構成例を示す図である。この第１構成例に係る演算部１０は、複数の第１演算器（図２〜８ではＡＬＵと表記）１１〜４６と、複数の接続部（図２、４、６〜８ではＳＷと表記）５１〜５４を含む。第１演算器１１〜４６は、ｘ（ｘは２以上の整数）行×ｙ（ｙは２以上の整数）列の第１演算器アレイを構成する。図２では、４行×６列の第１演算器アレイを構成する。以下適宜、ｙ個の第１演算器を含む１行の演算器群を第１演算器列と表記する。第１演算器１１〜４６および接続部５１〜５４の構成は、上記コマンドデータにより動的に設定変更される。
【００１６】
各接続部５１〜５４は、隣接する２段の第１演算器列の間に設けられる。各接続部５１〜５４は、前段の第１演算器列に含まれる第１演算器の出力と、後段の第１演算器列に含まれる第１演算器の入力との接続関係を設定する。最下段の第１演算器列は、接続部５１を介して最上段の第１演算器列に他の段間と同様に接続される。
【００１７】
当該第１演算器アレイでの処理は段毎に行われており、１段目の第１演算器列で処理された結果が接続部５２を介して２段目の第１演算器列に渡され、その後に２段目の第１演算器列で処理されるようになっている。各段の処理は、それぞれ１クロックごとに行われる。４段のＡＬＵアレイが使用される場合、４つの独立した処理（以下、スレッドという）が動作できるようになっている。たとえば、スレッド１が１段目の第１演算器列で処理された後、つぎのクロックで、スレッド１が２段目の第１演算器列で処理されるとともに、スレッド２が１段目の第１演算器列で処理される。
【００１８】
各第１演算器は、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、加減算、比較演算、論理演算、シフト演算、選択演算、乗算演算の補助演算などの複数種類の多ビット演算を設定により選択的に実行することができる。なお、乗算演算の補助演算の詳細は後述する。
【００１９】
第１演算器は、乗算演算を実行することはできない。ここでの乗算演算とは、１０進数の乗算を意味し、２進数の乗算を含まない。第１演算器はシフト演算機能を備えるため、１０進数で記述された乗数が２の乗数である場合、結果的に乗算演算を単体で完結させることができるが、その乗数が２の乗数でない場合、単体ではその乗算演算を完結させることができない。この考察も含めて本明細書では、第１演算器は乗算演算機能を持たないと定義する。
【００２０】
図３は、従来技術に係る演算部１０の第２構成例を示す図である。この第２構成例に係る演算部１０は、複数の第１演算器１１〜４６と、複数の接続部（図３、５では矢印のみで表記）５１ａ〜５４ａを含む。図３でも、第１演算器１１〜４６は、４行×６列の第１演算器アレイを構成する。
【００２１】
従来技術の第２構成例に係る演算部１０の構成は、従来技術の第１構成例に係る演算部１０と基本的に同じであるが、その第２構成例では接続部５１ａ〜５４ａが第１演算器間の接続を制限している。すなわち、上記第２構成例に係る接続部５１ａ〜５４ａは、前段の１つの第１演算器の出力先を後段の直下の第１演算器とその左右の第１演算器の３方向に制限する。これに対し、上記第１構成例に係る接続部５１〜５４は、前段の１つの第１演算器の出力先を制限しない。すなわち、前段の１つの第１演算器の出力を後段のいずれの第１演算器にも入力することができる。このように、上記第２構成例に係る演算部１０では、上記接続制限が施されているため、上記第１構成例に係る演算部１０と比較し、第１演算器間の接続数を大幅に削減することができる。
【００２２】
以下、本発明の実施の形態１に係る演算部１０について説明する。実施の形態１に係る演算部１０は、複数の第１演算器と、複数の接続部に加えて、少なくとも１つの第２演算器（図３〜図８では乗算器と表記する）を含む。第２演算器は、ｍ（ｍはｘ以下の自然数）行×ｎ（ｎは自然数）列の、第２演算器列または第２演算器アレイを構成する。たとえば、第２演算器は、第１演算器アレイの複数行ごとに１つ設けられてもよい。
【００２３】
第２演算器は、乗算演算を単体で実行可能な演算器である。第２演算器は、乗算演算を専属的に実行する演算器であってもよいし、乗算演算に加えてその他の種類の演算も選択的に実行可能な演算器であってもよい。なお、ここでの乗算演算とは１０進数の乗算を意味する。
【００２４】
図４は、本発明の実施の形態１に係る演算部１０の第１構成例を示す図である。この演算部１０は、従来技術の第１構成例に係る演算部１０の構成に、第２演算器６１、７１が追加された構成である。実施の形態１の第１構成例では、第１演算器１１〜４６が４行×６列の第１演算器アレイを構成し、第２演算器６１、７１が２行×１列の第２演算器列を構成する。ここでは、第１演算器アレイの２行ごとに１つの第２演算器が設けられる。
【００２５】
図５は、本発明の実施の形態１に係る演算部１０の第２構成例を示す図である。この演算部１０は、従来技術の第２構成例に係る演算部１０の構成に、第２演算器６１、７１が追加された構成である。実施の形態１の第２構成例でも、第１演算器１１〜４６が４行×６列の第１演算器アレイを構成し、第２演算器６１、７１が２行×１列の第２演算器列を構成する。ここでも、第１演算器アレイの２行ごとに１つの第２演算器が設けられる。なお、図５では第２演算器６１の出力先が第２演算器７１と第１演算器３６に制限されているが、実際は３段目の第１演算器列に含まれるいずれの第１演算器３１〜３６にも接続可能である。
【００２６】
図６は、本発明の実施の形態１に係る演算部１０の第３構成例を示す図である。この演算部１０は、従来技術の第１構成例に係る演算部１０の構成に、第２演算器６１、６２、７１、７２が追加された構成である。実施の形態１の第３構成例では、第１演算器１１〜４６が４行×６列の第１演算器アレイを構成し、第２演算器６１、６２、７１、７２が２行×２列の第２演算器アレイを構成する。ここでは、第１演算器アレイの２行ごとに２つの第２演算器が設けられる。
【００２７】
図７は、本発明の実施の形態１に係る演算部１０の第４構成例を示す図である。この演算部１０は、従来技術の第１構成例に係る演算部１０の構成に、第２演算器６１が追加された構成である。実施の形態１の第４構成例では、第１演算器１１〜４６が４行×６列の第１演算器アレイを構成し、第２演算器が１つ設けられる。
【００２８】
図８は、本発明の実施の形態１に係る演算部１０の第５構成例を示す図である。この演算部１０は、従来技術の第１構成例に係る演算部１０の構成に、第２演算器６１、７１、８１、９１が追加された構成である。実施の形態１の第５構成例では、第１演算器１１〜４６が４行×６列の第１演算器アレイを構成し、第２演算器６１、７１、８１、９１が４行×１列の第２演算器列を構成する。ここでは、第１演算器アレイの１行に対して１つの第２演算器が設けられる。
【００２９】
図３〜図７に示すように、第１演算器アレイの複数行に１つの第２演算器が対応するようになっているのは、第２演算器での乗算演算処理が第１演算器での算術論理演算処理よりも時間がかかるためである。すなわち、第１演算器アレイの１行に１つの第２演算器を対応させると、第１演算器の動作速度を第２演算器の動作速度に合わせる必要があり、演算部１０全体の最大動作速度が低下してしまう。また、第２演算器の回路規模は第１演算器の回路規模より大きいため、第２演算器の数を多くしたくないという要請もある。ただし、演算部１０全体の最大動作速度の低下をある程度許容して、図８に示すように第１演算器アレイの１行に１つの第２演算器を対応させてもよい。乗算演算が非常に多いアプリケーションの場合、図８の構成のほうがそのアプリケーション全体の処理時間を短縮できることもある。
【００３０】
図９は、本発明の実施の形態２に係る変換装置２００の構成を示すブロック図である。変換装置２００は、所定のソースプログラムを実施の形態１に係る演算処理装置１００で処理されるべきコマンドデータに変換する。すなわち、所定のソースプログラムを当該コマンドデータにコンパイルする。
【００３１】
変換装置２００は、抽出部２１０、判定部２２０、データフローグラフ生成部２３０、コマンドデータ生成部２４０を備える。これらの構成は、ハードウェア的には、任意のコンピュータのＣＰＵ、メモリ、その他のＬＳＩで実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
【００３２】
抽出部２１０は、コンパイルされるべきソースプログラムから乗算処理を抽出する。より具体的には、乗算式が記述されたプログラムコードを抽出する。判定部２２０は、抽出部２１０により抽出された乗算処理を、演算処理装置１００の演算部１０に含まれる第１演算器のシフト演算機能を用いて実行するか、その演算部１０に含まれる第２演算器の乗算機能を用いて実行するかを判定する。
【００３３】
判定部２２０は、上記第１演算器のシフト演算機能を用いて実行する、上記第２演算器の乗算機能を用いて実行するのうち、上記第１演算器アレイの行数を基準に、上記乗算処理を少ない行数で実行可能なほうを選択する。判定部２２０は、当該乗算処理をデータフローグラフ生成部２３０にコンパイルさせ、そのデータフローグラフを生成させる。その際、判定部２２０は当該乗算処理を前者の機能を用いて実行する場合のデータフローグラフと、後者の機能を用いて実行する場合のデータフローグラフとを生成させる。抽出部２１０は二つのデータフローグラフのうち、行数の少ないほうを選択する。行数が少ないほうが上記乗算処理の処理時間が短いためである。
【００３４】
ここで、データフローグラフとは、演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。本明細書では主に、各演算が演算部１０に含まれる第１演算器および第２演算器に割り当てられた後のものをデータフローグラフという。
【００３５】
上記では、判定部２２０が実際に二つのデータフローグラフをデータフローグラフ生成部２３０に生成させて、いずれの機能を用いて実行するかを選択する手法を説明した。以下、判定部２２０がデータフローグラフをデータフローグラフ生成部２３０に生成させずに、上記乗算処理の性質を特定することにより、いずれの機能を用いて実行するかを選択する手法を３つ説明する。
【００３６】
まず、第１手法について説明する。判定部２２０は、上記乗算処理が変数と定数との乗算であって、その定数が２の乗数であるとき、上記第１演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、上記第２演算器の乗算機能を用いて実行するを選択する。その定数が２、４、８、１６、３２、．．．の場合、上記変数を所定の桁数、左ビットシフトするだけで乗算演算が完了し、その定数が．．．、１／３２、１／１６、１／８、１／４、１／２の場合、上記変数を所定の桁数、右ビットシフトするだけで乗算演算が完了する。通常、第１演算器アレイの複数行に対して１つの第２演算器が設けられるため（図３〜図７参照）、乗算処理を１つの第１演算器のシフト演算機能で実行できる場合、第２演算器の乗算演算機能で実行する場合より、少ない行数で実行できることになる。
【００３７】
なお、変数と変数との乗算の場合、それらの変数の値がプログラムの実行結果に依存するため、判定部２２０は上記第２演算器の乗算機能を用いて実行するを選択する。なお、第１演算器が持つ乗算演算の補助演算機能を用いて実行するを選択してもよい。この機能の詳細は後述する。
【００３８】
つぎに、第２手法について説明する。判定部２２０は、上記乗算処理が変数と定数との乗算であって、その定数を２進数で表現した場合に１の数が所定の設定値以下であるとき、上記第１演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、上記第２演算器の乗算機能を用いて実行するを選択する。当該設定値は、実験結果やシミュレーション結果により得られた知見にもとづき設計者により設定されることができる。
【００３９】
以下、上記設定値が３に設定された例を説明する。上記定数が、「１２」、「３８」、「８２００」の場合について考える。
１２（２進数表記、１１００）＝（２＾３＋２＾２）
３８（２進数表記、１００１１０）＝（２＾５＋２＾２＋２＾１）
８２００（２進数表記、１０００００００００１０００）＝（２＾１３＋２＾３）
【００４０】
いずれの定数も２進数で表現された場合、１が立っているビット数が３以下であるため、判定部２２０は、上記第１演算器のシフト演算機能を用いるほうを選択する。いずれの定数を用いた乗算演算も、三回以内のシフト演算と二回以内の加減算で実行することができ、第１演算器アレイを使用しても、比較的少ない行数で実行することができる。
【００４１】
つぎに、第３手法について説明する。判定部２２０は、上記乗算処理が変数と定数との乗算であって、その定数が所定の設定値以下のシフト演算の組み合わせで表すことができるとき、上記第１演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、上記第２演算器の乗算機能を用いて実行するを選択する。すなわち、判定部２２０はその定数を多項式に展開した場合の項の数が当該設定値以下のとき、上記第１演算器のシフト演算機能を用いて実行するを選択する。当該設定値も、実験結果やシミュレーション結果により得られた知見にもとづき設計者により設定されることができる。
【００４２】
以下、上記設定値が２に設定された例を説明する。上記定数が、「２５２」、「８１９０」の場合について考える。
２５２（２進数表記、１１１１１１００）＝（２＾８−２＾２）
８１９０（２進数表記、１１１１１１１１１１１１０）＝（２＾１３−２＾１）
【００４３】
いずれの定数も多項式に展開された場合の項の数が２以下であるため、判定部２２０は、上記第１演算器のシフト演算機能を用いるほうを選択する。いずれの定数を用いた乗算演算も、二回以内のシフト演算と一回の加減算で実行することができ、第１演算器アレイを使用しても、比較的少ない行数で実行することができる。
【００４４】
図９にて、データフローグラフ生成部２３０は、抽出された乗算処理を、判定部２２０による判定結果に応じたデータフローグラフに変換する。すなわち、データフローグラフ生成部２３０は、判定部２２０により選択された機能を用いたデータフローグラフを生成する。コマンドデータ生成部２４０は、そのデータフローグラフからコマンドデータを生成する。
【００４５】
以下、実際のソースプログラム例と、それに対応するデータフローグラフ例を挙げながら変換装置２００の動作を具体的に説明する。ソースプログラム例はＣ言語で記述された例を示す。
【００４６】
図１０は、ソースプログラム例１を示す図である。このソースプログラムは変数ｉｎ１と変数ｉｎ２との乗算を記述したものである。
図１１は、図２または図３に示した演算部１０で、ソースプログラム例１を実行する場合のデータフローグラフ例を示す。図１１のデータフローグラフ内の点線で描かれているノードは、演算部１０に含まれる第１演算器を示す。ここでは、第１演算器に搭載されている乗算演算の補助演算機能を用いる例を示す。
【００４７】
図１１にて、「＜＜」コマンドは入力データを左ビットシフトするコマンドである。「Ａｎｄ」コマンドは複数の入力データの論理積をとるコマンドである。「ｍｏｖコマンド」は、入力データをそのまま次のノードに出力するコマンドである。「ｎｅｇ」コマンドは入力データの符号を反転させるコマンドである。
【００４８】
「ｍｕｌ＿ｔ」コマンドは、乗算補助コマンドであり、以下の処理を行うためのコマンドである。
ｏｕｔ＝（ａ＞＞１）＋（（ａ＆１）？ｂ：０）
（ａ、ｂは入力データ）
この式の右辺の、前の項はａを１ビット右シフトした値を示し、後の項はａの最下位ビットが１の場合、ｂとなり、０の場合、０となることを示す。したがって、ａの最下位ビットが０の場合、ｏｕｔはａを１ビットシフトした値となり、１の場合、ｏｕｔはａを１ビットシフトした値とｂの値との合計値となる。
【００４９】
図１１のデータフローグラフは、８ビットの変数ｉｎ１と８ビットの変数ｉｎ２との乗算を、筆算アルゴリズムを用いて実行する例を示す。１段目の１つのノードでは、「＜＜」コマンドにより変数ｉｎ１が７ビット左シフトされる。１段目の別のノードでは、「Ａｎｄ」コマンドにより、変数ｉｎ２の９ビット目より上位に仮にデータが存在しても、そのデータがマスクされる。２段目以降のノードでは、変数ｉｎ２の最下位ビットから、ビット単位の乗算が実行され、それらが加算されていく処理が逐次実行される。
【００５０】
図１２は、図４または図５に示した演算部１０で、ソースプログラム例１を実行する場合のデータフローグラフ例を示す。図１２のデータフローグラフ内の楕円形で描かれているノードは、演算部１０に含まれる第２演算器を示す。「×」コマンドは複数の入力データを乗算するコマンドである。図１２のデータフローグラフにて、第２演算器の１段目のノード（第１演算器の１段目と２段目に対応）で、「×」コマンドにより変数ｉｎ１と変数ｉｎ２とが乗算される。
【００５１】
変数と変数との乗算を、第１演算器の乗算演算の補助演算機能を用いて実行するよりも、第２演算器の乗算演算機能を用いて実行するほうがデータフローグラフの行数が短くなる。図１１と図１２のデータフローグラフを比較すると、前者は９行必要であり、後者は２行で足りる。なお、変数のビット幅が大きいほど、前者では多くの行数が必要となり、後者を使用する効果がより大きくなる。
【００５２】
図１３は、ソースプログラム例２を示す図である。このソースプログラムは変数ｉｎ１と定数「８１９２」との乗算を記述したものである。
図１４は、図２または図３に示した演算部１０で、ソースプログラム例２を実行する場合のデータフローグラフ例を示す。１段目のノードで、「＜＜」コマンドにより変数ｉｎ１が１３ビット左シフトされる。定数「８１９２」は２の１３乗であるため、変数ｉｎ１を１３ビット左シフトすれば、上記乗算を実現することができる。
【００５３】
図１５は、図４または図５に示した演算部１０で、ソースプログラム例２を実行する場合のデータフローグラフ例を示す。図１５のデータフローグラフにて、第２演算器に対応するノード１つで、「×」コマンドにより変数ｉｎ１と定数「８１９２」との乗算が実行される。
【００５４】
変数と定数との乗算をシフト演算１回で実現可能な場合、その乗算を第２演算器の乗算演算機能を用いて実行するよりも、第１演算器のシフト演算機能を用いて実行するほうがデータフローグラフの行数が短くなる。図１４と図１５のデータフローグラフを比較すると、前者は１行で足り、後者は２行必要である。
【００５５】
図１６は、ソースプログラム例３を示す図である。このソースプログラムは変数ｉｎ１と定数「１２３４５」との乗算を記述したものである。
図１７は、図２または図３に示した演算部１０で、ソースプログラム例３を実行する場合のデータフローグラフ例を示す。「−」コマンドは二つの入力データを減算するコマンドである。「＋」コマンドは複数の入力データを加算するコマンドである。図１７のデータフローグラフでは、変数ｉｎ１と定数「１２３４５」との乗算を、４回の左ビットシフト、１回の減算および３回の加算に展開している。
【００５６】
１段目の２番目のノードで、「＜＜」コマンドにより変数ｉｎ１が３ビット左シフトされ、８倍される。２段目の１番目のノードで、「−」コマンドにより前段のノードから入力される値から変数ｉｎ１が減算される。それと並行して２段目の２番目のノードで、「＜＜」コマンドにより前段のノードから入力される値が３ビット左シフトされ、８倍される。３段目の１番目のノードで、「＋」コマンドにより前段の二つのノードから入力される値が加算される。それと並行して３段目の２番目のノードで、「＜＜」コマンドにより、前段の２番目のノードから入力される値が６ビット左シフトされ、６４倍される。４段目の１番目のノードで、「＋」コマンドにより前段の二つのノードから入力される値が加算される。それと並行して３段目の２番目のノードで、「＜＜」コマンドにより、前段の２番目のノードから入力される値が１ビット左シフトされ、２倍される。５段目の１番目のノードで、前段の二つのノードから入力される値が加算され、上記乗算が完了する。
【００５７】
図１８は、図４または図５に示した演算部１０で、ソースプログラム例３を実行する場合のデータフローグラフ例を示す。図１８のデータフローグラフにて、第２演算器の１段目のノード（第１演算器の１段目と２段目に対応）で、「×」コマンドにより変数ｉｎ１と定数「１２３４５」とが乗算される。
【００５８】
変数と定数との乗算を展開すると、多数のシフト演算と多数の加減算の組み合わせに変換される場合、その乗算を第１演算器のシフト演算機能を用いて実行するよりも、第２演算器の乗算演算機能を用いて実行するほうがデータフローグラフの行数が短くなる。図１７と図１８のデータフローグラフを比較すると、前者は５行必要であり、後者は２行で足りる。
【００５９】
図１９は、ソースプログラム例４を示す図である。このソースプログラムは変数ｉｎ１と定数「８２０８」との乗算結果と、変数ｉｎ１と定数「８２００」との乗算結果との加算を記述したものである。「８２０８」は「２＾１３＋２＾４」と、「８２００」は「２＾１３＋２＾３」と展開することができる。
【００６０】
図２０は、図２または図３に示した演算部１０で、ソースプログラム例４を実行する場合のデータフローグラフ例を示す。図２０のデータフローグラフにて、１段目の２番目のノードで、「＜＜」コマンドにより変数ｉｎ１が４ビット左シフトされ、１６倍される。それと並行して１段目の３番目のノードで、「＜＜」コマンドにより、変数ｉｎ１が３ビット左シフトされ、８倍される。２段目の１番目のノードで、「＜＜」コマンドにより前段の２番目のノードから入力される値が９ビット左シフトされ、５１２倍される。２段目の２番目のノードは「ｍｏｖ」コマンドにより前段の２番目のノードから入力される値をスルーする。それと並行して２段目の３番目のノードで、「＜＜」コマンドにより前段の３番目のノードから入力される値が１０ビット左シフトされ、１０２４倍される。２段目の４番目のノードは「ｍｏｖ」コマンドにより前段の３番目のノードから入力される値をスルーする。
【００６１】
３段目の２番目のノードで、「＋」コマンドにより前段の１番目のノードと２番目のノードから入力される値が加算される。それと並行して３段目の３番目のノードで、「＋」コマンドにより前段の３番目のノードと４番目のノードから入力される値が加算される。４段目の３番目のノードで、「＋」コマンドにより前段の２番目のノードと３番目のノードから入力される値が加算される。これにより、変数ｉｎ１と定数「８２０８」との乗算結果と、変数ｉｎ１と定数「８２００」との乗算結果との加算が完了する。
【００６２】
図２１は、図４または図５に示した演算部１０で、ソースプログラム例４を実行する場合のデータフローグラフ例を示す。図２１のデータフローグラフにて、第２演算器の１段目のノード（第１演算器の１段目と２段目に相当する）で、「×」コマンドにより変数ｉｎ１と定数「８２０８」とが乗算される。第２演算器の２段目のノード（第１演算器の３段目と４段目に対応）で、「×」コマンドにより変数ｉｎ１と定数「８２００」とが乗算される。それと並行して、第１演算器の３段目のノードは「ｍｏｖ」コマンドにより第２演算器の１段目のノードから入力される値をスルーし、第１演算器の４段目のノードも「ｍｏｖ」コマンドにより第１演算器の３段目のノードから入力される値をスルーする。
【００６３】
第１演算器の５段目のノードで、第１演算器の３段目のノードから入力される値と、第２演算器の２段目のノードから入力される値が加算される。これにより、変数ｉｎ１と定数「８２０８」との乗算結果と、変数ｉｎ１と定数「８２００」との乗算結果との加算が完了する。
【００６４】
変数と定数との乗算を複数含む式であって、各乗算を展開した場合のシフト演算の数が設定値より少ない場合、その複数の乗算を第２演算器の乗算演算機能を用いて実行するよりも、第１演算器のシフト演算機能を用いて実行するほうがデータフローグラフの行数が短くなることが多い。複数の乗算を第１演算器のシフト演算機能を用いて並行して実行することができるためである。図６に示したように、１段に複数の第２演算器が設けられる場合は、第２演算器の乗算演算機能を用いて実行するほうがデータフローグラフの行数が短くなることが多い。図２０と図２１のデータフローグラフを比較すると、前者は４行で足り、後者は５行必要である。
【００６５】
図２２は、ソースプログラム例５を示す図である。このソースプログラムは変数ｉｎ１と変数ｉｎ２との乗算結果と、変数ｉｎ１と定数「８２０８」との乗算結果と、変数ｉｎ２と定数「８２００」との乗算結果との加算を記述したものである。
【００６６】
図２３は、図４または図５に示した演算部１０で、ソースプログラム例５を実行する場合のデータフローグラフ例１を示す。このデータフローグラフ例１は、上記３つの乗算をすべての第２演算器の乗算演算機能を用いて実行する例である。図２３のデータフローグラフにて、第２演算器の１段目のノード（第１演算器の１段目と２段目に相当する）で、「×」コマンドにより変数ｉｎ１と変数ｉｎ２とが乗算される。第２演算器の２段目のノード（第１演算器の３段目と４段目に対応）で、「×」コマンドにより変数ｉｎ１と定数「８２０８」とが乗算される。それと並行して、第１演算器の３段目のノードは「ｍｏｖ」コマンドにより第２演算器の１段目のノードから入力される値をスルーし、第１演算器の４段目のノードも「ｍｏｖ」コマンドにより第１演算器の３段目のノードから入力される値をスルーする。
【００６７】
第２演算器の３段目のノード（第１演算器の５段目と６段目に対応）で、「×」コマンドにより変数ｉｎ２と定数「８２００」とが乗算される。それと並行して、第１演算器の５段目のノードは「＋」コマンドにより第１演算器の４段目のノードから入力される値と第２演算器の１段目のノードから入力される値とが加算され、第１演算器の６段目のノードは「ｍｏｖ」コマンドにより第１演算器の５段目のノードから入力される値をスルーする。第１演算器の７段目のノードで、第１演算器の６段目のノードから入力される値と、第２演算器の３段目のノードから入力される値が加算される。これにより、変数ｉｎ１と変数ｉｎ２との乗算結果と、変数ｉｎ１と定数「８２０８」との乗算結果と、変数ｉｎ２と定数「８２００」との乗算結果との加算が完了する。
【００６８】
図２４は、図４または図５に示した演算部１０で、ソースプログラム例５を実行する場合のデータフローグラフ例２を示す。このデータフローグラフ例２は、上記３つの乗算を第１演算器のシフト演算機能と第２演算器の乗算演算機能を併用して実行する例である。図２４のデータフローグラフにて、第１演算器の１段目の４番目のノードで、「＜＜」コマンドにより変数ｉｎ１が４ビット左シフトされ、１６倍される。それと並行して第１演算器の１段目の５番目のノードで、「＜＜」コマンドにより、変数ｉｎ２が３ビット左シフトされ、８倍される。
【００６９】
第１演算器の２段目の３番目のノードで、「＜＜」コマンドにより前段の４番目のノードから入力される値が９ビット左シフトされ、５１２倍される。第１演算器の２段目の４番目のノードは「ｍｏｖ」コマンドにより前段の４番目のノードから入力される値をスルーする。それと並行して第１演算器の２段目の５番目のノードで、「＜＜」コマンドにより前段の５番目のノードから入力される値が１０ビット左シフトされ、１０２４倍される。第１演算器の２段目の６番目のノードは「ｍｏｖ」コマンドにより前段の５番目のノードから入力される値をスルーする。
【００７０】
第１演算器の３段目の４番目のノードで、「＋」コマンドにより前段の３番目ノードと４番目のノードから入力される値が加算される。それと並行して第１演算器の３段目の４番目のノードで、「＋」コマンドにより前段の５番目ノードと６番目のノードから入力される値が加算される。それと並行して第２演算器の２段目のノード（第１演算器の３段目と４段目に対応）で、「×」コマンドにより変数ｉｎ１と変数ｉｎ２とが乗算される。
【００７１】
第１演算器の５段目の６番目のノードで、「＋」コマンドにより第１演算器の４段目の５番目ノードから入力される値と、第２演算器の２段目のノードから入力される値が加算される。これにより、変数ｉｎ１と変数ｉｎ２との乗算結果と、変数ｉｎ１と定数「８２０８」との乗算結果と、変数ｉｎ２と定数「８２００」との乗算結果との加算が完了する。
【００７２】
ソースプログラム例５に示すように、変数と変数との乗算、変数と定数との乗算が混在する演算式の場合、その複数の乗算を第２演算器の乗算演算機能のみを用いて実行するよりも第１演算器のシフト演算機能と第２演算器の乗算演算機能とを併用して実行するほうがデータフローグラフの行数が短くなることが多い。第１演算器のシフト演算機能と第２演算器の乗算演算機能とを併用すると、複数の乗算を並行して実行することができるためである。図２３と図２４のデータフローグラフを比較すると、前者は７行必要であり、後者は５行で足りる。
【００７３】
図２５は、ソースプログラム例６を示す図である。このソースプログラム例６はソースプログラム例５と類似する。このソースプログラム例６は変数ｉｎ１と変数ｉｎ２との乗算結果と、変数ｉｎ１と定数「２５２」との乗算結果と、変数ｉｎ２と定数「８１９０」との乗算結果との加算を記述したものである。
【００７４】
図２６は、図４または図５に示した演算部１０で、ソースプログラム例６を実行する場合のデータフローグラフ例１を示す。このデータフローグラフ例１は、上記３つの乗算をすべての第２演算器の乗算演算機能を用いて実行する例である。図２６のデータフローグラフは、図２３のデータフローグラフと基本的に同じ構造であり、第２演算器の２段目のノード（第１演算器の３段目と４段目に相当する）、およびその３段目のノードで（第１演算器の５段目と６段目に相当する）で、「×」コマンドにより乗算される定数が変更された点のみが異なる。
【００７５】
図２７は、図４または図５に示した演算部１０で、ソースプログラム例６を実行する場合のデータフローグラフ例２を示す。このデータフローグラフ例２は、上記３つの乗算を第１演算器のシフト演算機能と第２演算器の乗算演算機能を併用して実行する例である。図２７のデータフローグラフは、図２４のデータフローグラフと基本的に同じ構造である。以下、相違点について説明する。第１演算器の１段目の４番目のノードで、「＜＜」コマンドにより変数ｉｎ１が２ビット左シフトされ、４倍される。それと並行して第１演算器の１段目の５番目のノードで、「＜＜」コマンドにより、変数ｉｎ２が１ビット左シフトされ、２倍される。
【００７６】
第１演算器の２段目の３番目のノードで、「＜＜」コマンドにより前段の４番目のノードから入力される値が６ビット左シフトされ、６４倍される。第１演算器の２段目の４番目のノードは「ｎｅｇ」コマンドにより前段の４番目のノードから入力される値の符号が反転される。それと並行して第１演算器の２段目の５番目のノードで、「＜＜」コマンドにより前段の５番目のノードから入力される値が１２ビット左シフトされ、４０９６倍される。第１演算器の２段目の６番目のノードは「ｎｅｇ」コマンドにより前段の５番目のノードから入力される値の符号を反転させる。以下の処理は、図２３のデータフローグラフと同じである。
【００７７】
図２４と図２７のデータフローグラフを比較すると、前者では変数と定数との乗算が２回のシフト演算と１回の加算に展開され、後者では２回のシフト演算と１回の減算に展開される。ソースプログラム例６でも、上記複数の乗算を第２演算器の乗算演算機能のみを用いて実行するよりも第１演算器のシフト演算機能と第２演算器の乗算演算機能とを併用して実行するほうがデータフローグラフの行数が短くなる。図２６と図２７のデータフローグラフを比較すると、前者は７行必要であり、後者は５行で足りる。
【００７８】
以上説明したように本実施の形態によれば、複数の第１演算器を含む演算部を備える演算処理装置において、乗算を単体で実行可能な第２演算器を搭載することにより、乗算を効率的に実行することができる。第２演算器を搭載することにより、その分、上記演算部の規模が増大するが、乗算演算にかかる処理時間が短縮される。乗算が多いアプリケーションでは、第２演算器を搭載したほうが全体の処理時間を短縮することができ、また、第１演算器アレイに含まれる複数の第１演算器アレイの利用効率を高めることができる。この場合、第１演算器アレイの回路規模を削減することができ、演算部全体の回路規模を削減することにもつながる。
【００７９】
また、変換装置がソースプログラムをコンパイルする際、乗算を第１演算器のシフト演算機能を用いて実行するか、第２演算器の乗算演算機能を用いて実行するかを適宜、決定することにより、乗算演算にかかる処理時間を最適化することができる。それにより、消費電力も低減することができる。たとえば、変数と定数の乗算の場合で、その乗算が少ない回数のシフト演算の組み合わせで実現できる場合、第２演算器の乗算演算機能を用いるより、第１演算器のシフト演算を用いるほうが処理時間を短くすることができる場合が多い。
【００８０】
以上、本発明をいくつかの実施形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【００８１】
上述した実施の形態では、第２演算器が乗算演算のみを実行したが、第２演算器がその他の算術論理演算を実行してもよい。
【図面の簡単な説明】
【００８２】
【図１】本発明の実施の形態１に係る演算処理装置の構成を示すブロック図である。
【図２】従来技術に係る演算部の第１構成例を示す図である。
【図３】従来技術に係る演算部の第２構成例を示す図である。
【図４】本発明の実施の形態１に係る演算部の第１構成例を示す図である。
【図５】本発明の実施の形態１に係る演算部の第２構成例を示す図である。
【図６】本発明の実施の形態１に係る演算部の第３構成例を示す図である。
【図７】本発明の実施の形態１に係る演算部の第４構成例を示す図である。
【図８】本発明の実施の形態１に係る演算部の第５構成例を示す図である。
【図９】本発明の実施の形態２に係る変換装置の構成を示すブロック図である。
【図１０】ソースプログラム例１を示す図である。
【図１１】図２または図３に示した演算部で、ソースプログラム例１を実行する場合のデータフローグラフ例を示す図である。
【図１２】図４または図５に示した演算部で、ソースプログラム例１を実行する場合のデータフローグラフ例を示す図である。
【図１３】ソースプログラム例２を示す図である。
【図１４】図２または図３に示した演算部で、ソースプログラム例２を実行する場合のデータフローグラフ例を示す図である。
【図１５】図４または図５に示した演算部で、ソースプログラム例２を実行する場合のデータフローグラフ例を示す図である。
【図１６】ソースプログラム例３を示す図である。
【図１７】図２または図３に示した演算部で、ソースプログラム例３を実行する場合のデータフローグラフ例を示す図である。
【図１８】図４または図５に示した演算部で、ソースプログラム例３を実行する場合のデータフローグラフ例を示す図である。
【図１９】ソースプログラム例４を示す図である。
【図２０】図２または図３に示した演算部で、ソースプログラム例４を実行する場合のデータフローグラフ例を示す図である。
【図２１】図４または図５に示した演算部で、ソースプログラム例４を実行する場合のデータフローグラフ例を示す図である。
【図２２】ソースプログラム例５を示す図である。
【図２３】図４または図５に示した演算部で、ソースプログラム例５を実行する場合のデータフローグラフ例１を示す図である。
【図２４】図４または図５に示した演算部で、ソースプログラム例５を実行する場合のデータフローグラフ例２を示す図である。
【図２５】ソースプログラム例６を示す図である。
【図２６】図４または図５に示した演算部で、ソースプログラム例６を実行する場合のデータフローグラフ例１を示す図である。
【図２７】図４または図５に示した演算部で、ソースプログラム例６を実行する場合のデータフローグラフ例２を示す図である。
【符号の説明】
【００８３】
１０  演算部、  １１  第１演算器、  ２０  制御部、  ３０  記憶部、  ５１  接続部、  ６１  第２演算器、  １００  演算処理装置、  ２００  変換装置、  ２１０  抽出部、  ２２０  判定部、  ２３０  データフローグラフ生成部、  ２４０  コマンドデータ生成部。
【図１】
2010134713.tif 000003
【図２】
2010134713.tif 000004
【図３】
2010134713.tif 000005
【図４】
2010134713.tif 000006
【図５】
2010134713.tif 000007
【図６】
2010134713.tif 000008
【図７】
2010134713.tif 000009
【図８】
2010134713.tif 000010
【図９】
2010134713.tif 000011
【図１０】
2010134713.tif 000012
【図１１】
2010134713.tif 000013
【図１２】
2010134713.tif 000014
【図１３】
2010134713.tif 000015
【図１４】
2010134713.tif 000016
【図１５】
2010134713.tif 000017
【図１６】
2010134713.tif 000018
【図１７】
2010134713.tif 000019
【図１８】
2010134713.tif 000020
【図１９】
2010134713.tif 000021
【図２０】
2010134713.tif 000022
【図２１】
2010134713.tif 000023
【図２２】
2010134713.tif 000024
【図２３】
2010134713.tif 000025
【図２４】
2010134713.tif 000026
【図２５】
2010134713.tif 000027
【図２６】
2010134713.tif 000028
【図２７】
2010134713.tif 000029