説明

演算処理装置および変換装置

【課題】複数の演算器を含む演算部を備える演算処理装置において、乗算を効率的に実行したい。
【解決手段】演算処理装置は外部から供給される設定データに応じて機能の変更が可能な演算部10を備える。演算部10は、は、乗算を除く複数種類の算術論理演算を選択的に実行可能な第1演算器11〜46と、乗算を単体で実行可能な第2演算器61、71とを備える。第1演算器11〜46は、x(xは2以上の整数)行×y(yは2以上の整数)列の第1演算器アレイを構成してもよい。第2演算器61、71は、m(mはx以下の自然数)行×n(nは自然数)列の、第2演算器列または第2演算器アレイを構成してもよい。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、複数の演算器を有する演算処理装置、およびその演算処理装置に設定すべき設定データをソースプログラムから生成する変換装置に関する。
【背景技術】
【0002】
近年、複数の演算器(以下適宜、ALU(Arithmetic Logic Unit)という)を有する演算部を備える演算処理装置の開発が進められている。このような演算処理装置では、制御部から上記演算部に設定データが供給されることにより、当該演算部内のALUおよび接続部が制御され、当該演算部が全体として所期の回路を構成する。
【0003】
従来、上記演算部に含まれる個々のALUに乗算機能を持たせない構成が一般的であった(たとえば、特許文献1〜3および非特許文献1参照)。ALUに乗算機能を持たせると、その回路規模および消費電力が増大してしまう点が考慮されてのことである。
【特許文献1】特開2004−220377号公報
【特許文献2】特開2007−213594号公報
【特許文献3】特開2005−275698号公報
【非特許文献1】飯塚和久、平瀬勝典、小曽根真、平松達夫、”ALUアレイアーキテクチャLSIを用いた放送受信機の実現”、電子情報通信学会技術研究報告 Vol.108, No.172, pp.43-47(SR2008-24), Jul. 2008
【発明の開示】
【発明が解決しようとする課題】
【0004】
上述した構成では、乗算式を展開することにより乗算を実行していた。たとえば、乗算式をシフト演算と加減算の組み合わせ式に変換することにより、乗算を実行していた。しかしながら、このようなアプローチは、フィルタ処理など乗算が多用されるアプリケーションに対して効率的でなかった。上記アプローチでは、複数のALUを用いて複数の演算ステップを経なければ乗算を実行できないため、処理時間の遅延につながったり、上記演算部に含まれるALUの利用効率の低下につながっていた。
【0005】
本発明はこうした状況に鑑みなされたものであり、その目的は、複数の演算器を含む演算部を備える演算処理装置において、乗算を効率的に実行することができる技術を提供することにある。
【課題を解決するための手段】
【0006】
本発明のある態様の演算処理装置は、外部から供給される設定データに応じて機能の変更が可能な演算部を備える演算処理装置であって、演算部は、乗算を除く複数種類の算術論理演算を選択的に実行可能な複数の第1演算器と、乗算を単体で実行可能な少なくとも一つの第2演算器と、を含む。
【0007】
本発明の別の態様は、変換装置である。この装置は、ソースプログラムを、演算処理装置で処理されるべき設定データに変換する変換装置であって、ソースプログラムに含まれる乗算処理を、第1演算器のシフト演算機能を用いて実行するか、第2演算器の乗算機能を用いて実行するかを判定する判定部と、乗算処理を、判定部による判定結果に応じた設定データに変換する設定データ生成部と、を備える。
【0008】
本発明のさらに別の態様もまた、変換装置である。この装置は、ソースプログラムを、演算処理装置で処理されるべき設定データに変換する変換装置であって、ソースプログラムに含まれる乗算処理を、第1演算器のシフト演算機能を用いて実行するか、第2演算器の乗算機能を用いて実行するかを判定する判定部と、乗算処理を、判定部による判定結果に応じた設定データに変換する設定データ生成部と、を備える。判定部は、第1演算器のシフト演算機能を用いて実行する、第2演算器の乗算機能を用いて実行するのうち、第1演算器アレイの行数を基準に、乗算処理を少ない行数で実行可能なほうを選択する。
【0009】
なお、以上の構成要素の任意の組み合わせ、本発明の表現を方法、装置、システム、記録媒体、コンピュータプログラムなどの間で変換したものもまた、本発明の態様として有効である。
【発明の効果】
【0010】
本発明によれば、複数の演算器を含む演算部を備える演算処理装置において、乗算を効率的に実行することができる。
【発明を実施するための最良の形態】
【0011】
図1は、本発明の実施の形態1に係る演算処理装置100の構成を示すブロック図である。演算処理装置100は、演算部10、制御部20および記憶部30を備える。
【0012】
演算部10は、制御部20から供給される設定データ(以下適宜、コマンドデータという)に基づいて所定の演算を実行する。演算部10は、当該コマンドデータに応じて動的に機能の変更が可能なリコンフィギュラブル回路を構成する。なお、演算部10の詳細な構成は後述する。
【0013】
制御部20は、外部から入力されるコマンドデータを保持し、その保持しているコマンドデータを順次、演算部10に供給する。このコマンドデータは、ソースプログラムから後述する変換装置200(図9参照)により変換されたデータであってもよい。
【0014】
記憶部30は、演算部10で処理される演算データを保持する。この演算データは、最終的な演算結果を示すデータに限らず、演算途中のデータも含まれる。また、この演算データは、変数であってもよいし、定数であってもよい。
【0015】
図2は、従来技術に係る演算部10の第1構成例を示す図である。この第1構成例に係る演算部10は、複数の第1演算器(図2〜8ではALUと表記)11〜46と、複数の接続部(図2、4、6〜8ではSWと表記)51〜54を含む。第1演算器11〜46は、x(xは2以上の整数)行×y(yは2以上の整数)列の第1演算器アレイを構成する。図2では、4行×6列の第1演算器アレイを構成する。以下適宜、y個の第1演算器を含む1行の演算器群を第1演算器列と表記する。第1演算器11〜46および接続部51〜54の構成は、上記コマンドデータにより動的に設定変更される。
【0016】
各接続部51〜54は、隣接する2段の第1演算器列の間に設けられる。各接続部51〜54は、前段の第1演算器列に含まれる第1演算器の出力と、後段の第1演算器列に含まれる第1演算器の入力との接続関係を設定する。最下段の第1演算器列は、接続部51を介して最上段の第1演算器列に他の段間と同様に接続される。
【0017】
当該第1演算器アレイでの処理は段毎に行われており、1段目の第1演算器列で処理された結果が接続部52を介して2段目の第1演算器列に渡され、その後に2段目の第1演算器列で処理されるようになっている。各段の処理は、それぞれ1クロックごとに行われる。4段のALUアレイが使用される場合、4つの独立した処理(以下、スレッドという)が動作できるようになっている。たとえば、スレッド1が1段目の第1演算器列で処理された後、つぎのクロックで、スレッド1が2段目の第1演算器列で処理されるとともに、スレッド2が1段目の第1演算器列で処理される。
【0018】
各第1演算器は、複数種類の多ビット演算を選択的に実行可能な算術論理回路であって、加減算、比較演算、論理演算、シフト演算、選択演算、乗算演算の補助演算などの複数種類の多ビット演算を設定により選択的に実行することができる。なお、乗算演算の補助演算の詳細は後述する。
【0019】
第1演算器は、乗算演算を実行することはできない。ここでの乗算演算とは、10進数の乗算を意味し、2進数の乗算を含まない。第1演算器はシフト演算機能を備えるため、10進数で記述された乗数が2の乗数である場合、結果的に乗算演算を単体で完結させることができるが、その乗数が2の乗数でない場合、単体ではその乗算演算を完結させることができない。この考察も含めて本明細書では、第1演算器は乗算演算機能を持たないと定義する。
【0020】
図3は、従来技術に係る演算部10の第2構成例を示す図である。この第2構成例に係る演算部10は、複数の第1演算器11〜46と、複数の接続部(図3、5では矢印のみで表記)51a〜54aを含む。図3でも、第1演算器11〜46は、4行×6列の第1演算器アレイを構成する。
【0021】
従来技術の第2構成例に係る演算部10の構成は、従来技術の第1構成例に係る演算部10と基本的に同じであるが、その第2構成例では接続部51a〜54aが第1演算器間の接続を制限している。すなわち、上記第2構成例に係る接続部51a〜54aは、前段の1つの第1演算器の出力先を後段の直下の第1演算器とその左右の第1演算器の3方向に制限する。これに対し、上記第1構成例に係る接続部51〜54は、前段の1つの第1演算器の出力先を制限しない。すなわち、前段の1つの第1演算器の出力を後段のいずれの第1演算器にも入力することができる。このように、上記第2構成例に係る演算部10では、上記接続制限が施されているため、上記第1構成例に係る演算部10と比較し、第1演算器間の接続数を大幅に削減することができる。
【0022】
以下、本発明の実施の形態1に係る演算部10について説明する。実施の形態1に係る演算部10は、複数の第1演算器と、複数の接続部に加えて、少なくとも1つの第2演算器(図3〜図8では乗算器と表記する)を含む。第2演算器は、m(mはx以下の自然数)行×n(nは自然数)列の、第2演算器列または第2演算器アレイを構成する。たとえば、第2演算器は、第1演算器アレイの複数行ごとに1つ設けられてもよい。
【0023】
第2演算器は、乗算演算を単体で実行可能な演算器である。第2演算器は、乗算演算を専属的に実行する演算器であってもよいし、乗算演算に加えてその他の種類の演算も選択的に実行可能な演算器であってもよい。なお、ここでの乗算演算とは10進数の乗算を意味する。
【0024】
図4は、本発明の実施の形態1に係る演算部10の第1構成例を示す図である。この演算部10は、従来技術の第1構成例に係る演算部10の構成に、第2演算器61、71が追加された構成である。実施の形態1の第1構成例では、第1演算器11〜46が4行×6列の第1演算器アレイを構成し、第2演算器61、71が2行×1列の第2演算器列を構成する。ここでは、第1演算器アレイの2行ごとに1つの第2演算器が設けられる。
【0025】
図5は、本発明の実施の形態1に係る演算部10の第2構成例を示す図である。この演算部10は、従来技術の第2構成例に係る演算部10の構成に、第2演算器61、71が追加された構成である。実施の形態1の第2構成例でも、第1演算器11〜46が4行×6列の第1演算器アレイを構成し、第2演算器61、71が2行×1列の第2演算器列を構成する。ここでも、第1演算器アレイの2行ごとに1つの第2演算器が設けられる。なお、図5では第2演算器61の出力先が第2演算器71と第1演算器36に制限されているが、実際は3段目の第1演算器列に含まれるいずれの第1演算器31〜36にも接続可能である。
【0026】
図6は、本発明の実施の形態1に係る演算部10の第3構成例を示す図である。この演算部10は、従来技術の第1構成例に係る演算部10の構成に、第2演算器61、62、71、72が追加された構成である。実施の形態1の第3構成例では、第1演算器11〜46が4行×6列の第1演算器アレイを構成し、第2演算器61、62、71、72が2行×2列の第2演算器アレイを構成する。ここでは、第1演算器アレイの2行ごとに2つの第2演算器が設けられる。
【0027】
図7は、本発明の実施の形態1に係る演算部10の第4構成例を示す図である。この演算部10は、従来技術の第1構成例に係る演算部10の構成に、第2演算器61が追加された構成である。実施の形態1の第4構成例では、第1演算器11〜46が4行×6列の第1演算器アレイを構成し、第2演算器が1つ設けられる。
【0028】
図8は、本発明の実施の形態1に係る演算部10の第5構成例を示す図である。この演算部10は、従来技術の第1構成例に係る演算部10の構成に、第2演算器61、71、81、91が追加された構成である。実施の形態1の第5構成例では、第1演算器11〜46が4行×6列の第1演算器アレイを構成し、第2演算器61、71、81、91が4行×1列の第2演算器列を構成する。ここでは、第1演算器アレイの1行に対して1つの第2演算器が設けられる。
【0029】
図3〜図7に示すように、第1演算器アレイの複数行に1つの第2演算器が対応するようになっているのは、第2演算器での乗算演算処理が第1演算器での算術論理演算処理よりも時間がかかるためである。すなわち、第1演算器アレイの1行に1つの第2演算器を対応させると、第1演算器の動作速度を第2演算器の動作速度に合わせる必要があり、演算部10全体の最大動作速度が低下してしまう。また、第2演算器の回路規模は第1演算器の回路規模より大きいため、第2演算器の数を多くしたくないという要請もある。ただし、演算部10全体の最大動作速度の低下をある程度許容して、図8に示すように第1演算器アレイの1行に1つの第2演算器を対応させてもよい。乗算演算が非常に多いアプリケーションの場合、図8の構成のほうがそのアプリケーション全体の処理時間を短縮できることもある。
【0030】
図9は、本発明の実施の形態2に係る変換装置200の構成を示すブロック図である。変換装置200は、所定のソースプログラムを実施の形態1に係る演算処理装置100で処理されるべきコマンドデータに変換する。すなわち、所定のソースプログラムを当該コマンドデータにコンパイルする。
【0031】
変換装置200は、抽出部210、判定部220、データフローグラフ生成部230、コマンドデータ生成部240を備える。これらの構成は、ハードウェア的には、任意のコンピュータのCPU、メモリ、その他のLSIで実現でき、ソフトウェア的にはメモリにロードされたプログラムなどによって実現されるが、ここではそれらの連携によって実現される機能ブロックを描いている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組み合わせによっていろいろな形で実現できることは、当業者には理解されるところである。
【0032】
抽出部210は、コンパイルされるべきソースプログラムから乗算処理を抽出する。より具体的には、乗算式が記述されたプログラムコードを抽出する。判定部220は、抽出部210により抽出された乗算処理を、演算処理装置100の演算部10に含まれる第1演算器のシフト演算機能を用いて実行するか、その演算部10に含まれる第2演算器の乗算機能を用いて実行するかを判定する。
【0033】
判定部220は、上記第1演算器のシフト演算機能を用いて実行する、上記第2演算器の乗算機能を用いて実行するのうち、上記第1演算器アレイの行数を基準に、上記乗算処理を少ない行数で実行可能なほうを選択する。判定部220は、当該乗算処理をデータフローグラフ生成部230にコンパイルさせ、そのデータフローグラフを生成させる。その際、判定部220は当該乗算処理を前者の機能を用いて実行する場合のデータフローグラフと、後者の機能を用いて実行する場合のデータフローグラフとを生成させる。抽出部210は二つのデータフローグラフのうち、行数の少ないほうを選択する。行数が少ないほうが上記乗算処理の処理時間が短いためである。
【0034】
ここで、データフローグラフとは、演算間の実行順序の依存関係を表現し、入力変数および定数の演算の流れをグラフ構造で示したものである。本明細書では主に、各演算が演算部10に含まれる第1演算器および第2演算器に割り当てられた後のものをデータフローグラフという。
【0035】
上記では、判定部220が実際に二つのデータフローグラフをデータフローグラフ生成部230に生成させて、いずれの機能を用いて実行するかを選択する手法を説明した。以下、判定部220がデータフローグラフをデータフローグラフ生成部230に生成させずに、上記乗算処理の性質を特定することにより、いずれの機能を用いて実行するかを選択する手法を3つ説明する。
【0036】
まず、第1手法について説明する。判定部220は、上記乗算処理が変数と定数との乗算であって、その定数が2の乗数であるとき、上記第1演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、上記第2演算器の乗算機能を用いて実行するを選択する。その定数が2、4、8、16、32、...の場合、上記変数を所定の桁数、左ビットシフトするだけで乗算演算が完了し、その定数が...、1/32、1/16、1/8、1/4、1/2の場合、上記変数を所定の桁数、右ビットシフトするだけで乗算演算が完了する。通常、第1演算器アレイの複数行に対して1つの第2演算器が設けられるため(図3〜図7参照)、乗算処理を1つの第1演算器のシフト演算機能で実行できる場合、第2演算器の乗算演算機能で実行する場合より、少ない行数で実行できることになる。
【0037】
なお、変数と変数との乗算の場合、それらの変数の値がプログラムの実行結果に依存するため、判定部220は上記第2演算器の乗算機能を用いて実行するを選択する。なお、第1演算器が持つ乗算演算の補助演算機能を用いて実行するを選択してもよい。この機能の詳細は後述する。
【0038】
つぎに、第2手法について説明する。判定部220は、上記乗算処理が変数と定数との乗算であって、その定数を2進数で表現した場合に1の数が所定の設定値以下であるとき、上記第1演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、上記第2演算器の乗算機能を用いて実行するを選択する。当該設定値は、実験結果やシミュレーション結果により得られた知見にもとづき設計者により設定されることができる。
【0039】
以下、上記設定値が3に設定された例を説明する。上記定数が、「12」、「38」、「8200」の場合について考える。
12(2進数表記、1100)=(2^3+2^2)
38(2進数表記、100110)=(2^5+2^2+2^1)
8200(2進数表記、10000000001000)=(2^13+2^3)
【0040】
いずれの定数も2進数で表現された場合、1が立っているビット数が3以下であるため、判定部220は、上記第1演算器のシフト演算機能を用いるほうを選択する。いずれの定数を用いた乗算演算も、三回以内のシフト演算と二回以内の加減算で実行することができ、第1演算器アレイを使用しても、比較的少ない行数で実行することができる。
【0041】
つぎに、第3手法について説明する。判定部220は、上記乗算処理が変数と定数との乗算であって、その定数が所定の設定値以下のシフト演算の組み合わせで表すことができるとき、上記第1演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、上記第2演算器の乗算機能を用いて実行するを選択する。すなわち、判定部220はその定数を多項式に展開した場合の項の数が当該設定値以下のとき、上記第1演算器のシフト演算機能を用いて実行するを選択する。当該設定値も、実験結果やシミュレーション結果により得られた知見にもとづき設計者により設定されることができる。
【0042】
以下、上記設定値が2に設定された例を説明する。上記定数が、「252」、「8190」の場合について考える。
252(2進数表記、11111100)=(2^8−2^2)
8190(2進数表記、1111111111110)=(2^13−2^1)
【0043】
いずれの定数も多項式に展開された場合の項の数が2以下であるため、判定部220は、上記第1演算器のシフト演算機能を用いるほうを選択する。いずれの定数を用いた乗算演算も、二回以内のシフト演算と一回の加減算で実行することができ、第1演算器アレイを使用しても、比較的少ない行数で実行することができる。
【0044】
図9にて、データフローグラフ生成部230は、抽出された乗算処理を、判定部220による判定結果に応じたデータフローグラフに変換する。すなわち、データフローグラフ生成部230は、判定部220により選択された機能を用いたデータフローグラフを生成する。コマンドデータ生成部240は、そのデータフローグラフからコマンドデータを生成する。
【0045】
以下、実際のソースプログラム例と、それに対応するデータフローグラフ例を挙げながら変換装置200の動作を具体的に説明する。ソースプログラム例はC言語で記述された例を示す。
【0046】
図10は、ソースプログラム例1を示す図である。このソースプログラムは変数in1と変数in2との乗算を記述したものである。
図11は、図2または図3に示した演算部10で、ソースプログラム例1を実行する場合のデータフローグラフ例を示す。図11のデータフローグラフ内の点線で描かれているノードは、演算部10に含まれる第1演算器を示す。ここでは、第1演算器に搭載されている乗算演算の補助演算機能を用いる例を示す。
【0047】
図11にて、「<<」コマンドは入力データを左ビットシフトするコマンドである。「And」コマンドは複数の入力データの論理積をとるコマンドである。「movコマンド」は、入力データをそのまま次のノードに出力するコマンドである。「neg」コマンドは入力データの符号を反転させるコマンドである。
【0048】
「mul_t」コマンドは、乗算補助コマンドであり、以下の処理を行うためのコマンドである。
out=(a>>1)+((a&1)?b:0)
(a、bは入力データ)
この式の右辺の、前の項はaを1ビット右シフトした値を示し、後の項はaの最下位ビットが1の場合、bとなり、0の場合、0となることを示す。したがって、aの最下位ビットが0の場合、outはaを1ビットシフトした値となり、1の場合、outはaを1ビットシフトした値とbの値との合計値となる。
【0049】
図11のデータフローグラフは、8ビットの変数in1と8ビットの変数in2との乗算を、筆算アルゴリズムを用いて実行する例を示す。1段目の1つのノードでは、「<<」コマンドにより変数in1が7ビット左シフトされる。1段目の別のノードでは、「And」コマンドにより、変数in2の9ビット目より上位に仮にデータが存在しても、そのデータがマスクされる。2段目以降のノードでは、変数in2の最下位ビットから、ビット単位の乗算が実行され、それらが加算されていく処理が逐次実行される。
【0050】
図12は、図4または図5に示した演算部10で、ソースプログラム例1を実行する場合のデータフローグラフ例を示す。図12のデータフローグラフ内の楕円形で描かれているノードは、演算部10に含まれる第2演算器を示す。「×」コマンドは複数の入力データを乗算するコマンドである。図12のデータフローグラフにて、第2演算器の1段目のノード(第1演算器の1段目と2段目に対応)で、「×」コマンドにより変数in1と変数in2とが乗算される。
【0051】
変数と変数との乗算を、第1演算器の乗算演算の補助演算機能を用いて実行するよりも、第2演算器の乗算演算機能を用いて実行するほうがデータフローグラフの行数が短くなる。図11と図12のデータフローグラフを比較すると、前者は9行必要であり、後者は2行で足りる。なお、変数のビット幅が大きいほど、前者では多くの行数が必要となり、後者を使用する効果がより大きくなる。
【0052】
図13は、ソースプログラム例2を示す図である。このソースプログラムは変数in1と定数「8192」との乗算を記述したものである。
図14は、図2または図3に示した演算部10で、ソースプログラム例2を実行する場合のデータフローグラフ例を示す。1段目のノードで、「<<」コマンドにより変数in1が13ビット左シフトされる。定数「8192」は2の13乗であるため、変数in1を13ビット左シフトすれば、上記乗算を実現することができる。
【0053】
図15は、図4または図5に示した演算部10で、ソースプログラム例2を実行する場合のデータフローグラフ例を示す。図15のデータフローグラフにて、第2演算器に対応するノード1つで、「×」コマンドにより変数in1と定数「8192」との乗算が実行される。
【0054】
変数と定数との乗算をシフト演算1回で実現可能な場合、その乗算を第2演算器の乗算演算機能を用いて実行するよりも、第1演算器のシフト演算機能を用いて実行するほうがデータフローグラフの行数が短くなる。図14と図15のデータフローグラフを比較すると、前者は1行で足り、後者は2行必要である。
【0055】
図16は、ソースプログラム例3を示す図である。このソースプログラムは変数in1と定数「12345」との乗算を記述したものである。
図17は、図2または図3に示した演算部10で、ソースプログラム例3を実行する場合のデータフローグラフ例を示す。「−」コマンドは二つの入力データを減算するコマンドである。「+」コマンドは複数の入力データを加算するコマンドである。図17のデータフローグラフでは、変数in1と定数「12345」との乗算を、4回の左ビットシフト、1回の減算および3回の加算に展開している。
【0056】
1段目の2番目のノードで、「<<」コマンドにより変数in1が3ビット左シフトされ、8倍される。2段目の1番目のノードで、「−」コマンドにより前段のノードから入力される値から変数in1が減算される。それと並行して2段目の2番目のノードで、「<<」コマンドにより前段のノードから入力される値が3ビット左シフトされ、8倍される。3段目の1番目のノードで、「+」コマンドにより前段の二つのノードから入力される値が加算される。それと並行して3段目の2番目のノードで、「<<」コマンドにより、前段の2番目のノードから入力される値が6ビット左シフトされ、64倍される。4段目の1番目のノードで、「+」コマンドにより前段の二つのノードから入力される値が加算される。それと並行して3段目の2番目のノードで、「<<」コマンドにより、前段の2番目のノードから入力される値が1ビット左シフトされ、2倍される。5段目の1番目のノードで、前段の二つのノードから入力される値が加算され、上記乗算が完了する。
【0057】
図18は、図4または図5に示した演算部10で、ソースプログラム例3を実行する場合のデータフローグラフ例を示す。図18のデータフローグラフにて、第2演算器の1段目のノード(第1演算器の1段目と2段目に対応)で、「×」コマンドにより変数in1と定数「12345」とが乗算される。
【0058】
変数と定数との乗算を展開すると、多数のシフト演算と多数の加減算の組み合わせに変換される場合、その乗算を第1演算器のシフト演算機能を用いて実行するよりも、第2演算器の乗算演算機能を用いて実行するほうがデータフローグラフの行数が短くなる。図17と図18のデータフローグラフを比較すると、前者は5行必要であり、後者は2行で足りる。
【0059】
図19は、ソースプログラム例4を示す図である。このソースプログラムは変数in1と定数「8208」との乗算結果と、変数in1と定数「8200」との乗算結果との加算を記述したものである。「8208」は「2^13+2^4」と、「8200」は「2^13+2^3」と展開することができる。
【0060】
図20は、図2または図3に示した演算部10で、ソースプログラム例4を実行する場合のデータフローグラフ例を示す。図20のデータフローグラフにて、1段目の2番目のノードで、「<<」コマンドにより変数in1が4ビット左シフトされ、16倍される。それと並行して1段目の3番目のノードで、「<<」コマンドにより、変数in1が3ビット左シフトされ、8倍される。2段目の1番目のノードで、「<<」コマンドにより前段の2番目のノードから入力される値が9ビット左シフトされ、512倍される。2段目の2番目のノードは「mov」コマンドにより前段の2番目のノードから入力される値をスルーする。それと並行して2段目の3番目のノードで、「<<」コマンドにより前段の3番目のノードから入力される値が10ビット左シフトされ、1024倍される。2段目の4番目のノードは「mov」コマンドにより前段の3番目のノードから入力される値をスルーする。
【0061】
3段目の2番目のノードで、「+」コマンドにより前段の1番目のノードと2番目のノードから入力される値が加算される。それと並行して3段目の3番目のノードで、「+」コマンドにより前段の3番目のノードと4番目のノードから入力される値が加算される。4段目の3番目のノードで、「+」コマンドにより前段の2番目のノードと3番目のノードから入力される値が加算される。これにより、変数in1と定数「8208」との乗算結果と、変数in1と定数「8200」との乗算結果との加算が完了する。
【0062】
図21は、図4または図5に示した演算部10で、ソースプログラム例4を実行する場合のデータフローグラフ例を示す。図21のデータフローグラフにて、第2演算器の1段目のノード(第1演算器の1段目と2段目に相当する)で、「×」コマンドにより変数in1と定数「8208」とが乗算される。第2演算器の2段目のノード(第1演算器の3段目と4段目に対応)で、「×」コマンドにより変数in1と定数「8200」とが乗算される。それと並行して、第1演算器の3段目のノードは「mov」コマンドにより第2演算器の1段目のノードから入力される値をスルーし、第1演算器の4段目のノードも「mov」コマンドにより第1演算器の3段目のノードから入力される値をスルーする。
【0063】
第1演算器の5段目のノードで、第1演算器の3段目のノードから入力される値と、第2演算器の2段目のノードから入力される値が加算される。これにより、変数in1と定数「8208」との乗算結果と、変数in1と定数「8200」との乗算結果との加算が完了する。
【0064】
変数と定数との乗算を複数含む式であって、各乗算を展開した場合のシフト演算の数が設定値より少ない場合、その複数の乗算を第2演算器の乗算演算機能を用いて実行するよりも、第1演算器のシフト演算機能を用いて実行するほうがデータフローグラフの行数が短くなることが多い。複数の乗算を第1演算器のシフト演算機能を用いて並行して実行することができるためである。図6に示したように、1段に複数の第2演算器が設けられる場合は、第2演算器の乗算演算機能を用いて実行するほうがデータフローグラフの行数が短くなることが多い。図20と図21のデータフローグラフを比較すると、前者は4行で足り、後者は5行必要である。
【0065】
図22は、ソースプログラム例5を示す図である。このソースプログラムは変数in1と変数in2との乗算結果と、変数in1と定数「8208」との乗算結果と、変数in2と定数「8200」との乗算結果との加算を記述したものである。
【0066】
図23は、図4または図5に示した演算部10で、ソースプログラム例5を実行する場合のデータフローグラフ例1を示す。このデータフローグラフ例1は、上記3つの乗算をすべての第2演算器の乗算演算機能を用いて実行する例である。図23のデータフローグラフにて、第2演算器の1段目のノード(第1演算器の1段目と2段目に相当する)で、「×」コマンドにより変数in1と変数in2とが乗算される。第2演算器の2段目のノード(第1演算器の3段目と4段目に対応)で、「×」コマンドにより変数in1と定数「8208」とが乗算される。それと並行して、第1演算器の3段目のノードは「mov」コマンドにより第2演算器の1段目のノードから入力される値をスルーし、第1演算器の4段目のノードも「mov」コマンドにより第1演算器の3段目のノードから入力される値をスルーする。
【0067】
第2演算器の3段目のノード(第1演算器の5段目と6段目に対応)で、「×」コマンドにより変数in2と定数「8200」とが乗算される。それと並行して、第1演算器の5段目のノードは「+」コマンドにより第1演算器の4段目のノードから入力される値と第2演算器の1段目のノードから入力される値とが加算され、第1演算器の6段目のノードは「mov」コマンドにより第1演算器の5段目のノードから入力される値をスルーする。第1演算器の7段目のノードで、第1演算器の6段目のノードから入力される値と、第2演算器の3段目のノードから入力される値が加算される。これにより、変数in1と変数in2との乗算結果と、変数in1と定数「8208」との乗算結果と、変数in2と定数「8200」との乗算結果との加算が完了する。
【0068】
図24は、図4または図5に示した演算部10で、ソースプログラム例5を実行する場合のデータフローグラフ例2を示す。このデータフローグラフ例2は、上記3つの乗算を第1演算器のシフト演算機能と第2演算器の乗算演算機能を併用して実行する例である。図24のデータフローグラフにて、第1演算器の1段目の4番目のノードで、「<<」コマンドにより変数in1が4ビット左シフトされ、16倍される。それと並行して第1演算器の1段目の5番目のノードで、「<<」コマンドにより、変数in2が3ビット左シフトされ、8倍される。
【0069】
第1演算器の2段目の3番目のノードで、「<<」コマンドにより前段の4番目のノードから入力される値が9ビット左シフトされ、512倍される。第1演算器の2段目の4番目のノードは「mov」コマンドにより前段の4番目のノードから入力される値をスルーする。それと並行して第1演算器の2段目の5番目のノードで、「<<」コマンドにより前段の5番目のノードから入力される値が10ビット左シフトされ、1024倍される。第1演算器の2段目の6番目のノードは「mov」コマンドにより前段の5番目のノードから入力される値をスルーする。
【0070】
第1演算器の3段目の4番目のノードで、「+」コマンドにより前段の3番目ノードと4番目のノードから入力される値が加算される。それと並行して第1演算器の3段目の4番目のノードで、「+」コマンドにより前段の5番目ノードと6番目のノードから入力される値が加算される。それと並行して第2演算器の2段目のノード(第1演算器の3段目と4段目に対応)で、「×」コマンドにより変数in1と変数in2とが乗算される。
【0071】
第1演算器の5段目の6番目のノードで、「+」コマンドにより第1演算器の4段目の5番目ノードから入力される値と、第2演算器の2段目のノードから入力される値が加算される。これにより、変数in1と変数in2との乗算結果と、変数in1と定数「8208」との乗算結果と、変数in2と定数「8200」との乗算結果との加算が完了する。
【0072】
ソースプログラム例5に示すように、変数と変数との乗算、変数と定数との乗算が混在する演算式の場合、その複数の乗算を第2演算器の乗算演算機能のみを用いて実行するよりも第1演算器のシフト演算機能と第2演算器の乗算演算機能とを併用して実行するほうがデータフローグラフの行数が短くなることが多い。第1演算器のシフト演算機能と第2演算器の乗算演算機能とを併用すると、複数の乗算を並行して実行することができるためである。図23と図24のデータフローグラフを比較すると、前者は7行必要であり、後者は5行で足りる。
【0073】
図25は、ソースプログラム例6を示す図である。このソースプログラム例6はソースプログラム例5と類似する。このソースプログラム例6は変数in1と変数in2との乗算結果と、変数in1と定数「252」との乗算結果と、変数in2と定数「8190」との乗算結果との加算を記述したものである。
【0074】
図26は、図4または図5に示した演算部10で、ソースプログラム例6を実行する場合のデータフローグラフ例1を示す。このデータフローグラフ例1は、上記3つの乗算をすべての第2演算器の乗算演算機能を用いて実行する例である。図26のデータフローグラフは、図23のデータフローグラフと基本的に同じ構造であり、第2演算器の2段目のノード(第1演算器の3段目と4段目に相当する)、およびその3段目のノードで(第1演算器の5段目と6段目に相当する)で、「×」コマンドにより乗算される定数が変更された点のみが異なる。
【0075】
図27は、図4または図5に示した演算部10で、ソースプログラム例6を実行する場合のデータフローグラフ例2を示す。このデータフローグラフ例2は、上記3つの乗算を第1演算器のシフト演算機能と第2演算器の乗算演算機能を併用して実行する例である。図27のデータフローグラフは、図24のデータフローグラフと基本的に同じ構造である。以下、相違点について説明する。第1演算器の1段目の4番目のノードで、「<<」コマンドにより変数in1が2ビット左シフトされ、4倍される。それと並行して第1演算器の1段目の5番目のノードで、「<<」コマンドにより、変数in2が1ビット左シフトされ、2倍される。
【0076】
第1演算器の2段目の3番目のノードで、「<<」コマンドにより前段の4番目のノードから入力される値が6ビット左シフトされ、64倍される。第1演算器の2段目の4番目のノードは「neg」コマンドにより前段の4番目のノードから入力される値の符号が反転される。それと並行して第1演算器の2段目の5番目のノードで、「<<」コマンドにより前段の5番目のノードから入力される値が12ビット左シフトされ、4096倍される。第1演算器の2段目の6番目のノードは「neg」コマンドにより前段の5番目のノードから入力される値の符号を反転させる。以下の処理は、図23のデータフローグラフと同じである。
【0077】
図24と図27のデータフローグラフを比較すると、前者では変数と定数との乗算が2回のシフト演算と1回の加算に展開され、後者では2回のシフト演算と1回の減算に展開される。ソースプログラム例6でも、上記複数の乗算を第2演算器の乗算演算機能のみを用いて実行するよりも第1演算器のシフト演算機能と第2演算器の乗算演算機能とを併用して実行するほうがデータフローグラフの行数が短くなる。図26と図27のデータフローグラフを比較すると、前者は7行必要であり、後者は5行で足りる。
【0078】
以上説明したように本実施の形態によれば、複数の第1演算器を含む演算部を備える演算処理装置において、乗算を単体で実行可能な第2演算器を搭載することにより、乗算を効率的に実行することができる。第2演算器を搭載することにより、その分、上記演算部の規模が増大するが、乗算演算にかかる処理時間が短縮される。乗算が多いアプリケーションでは、第2演算器を搭載したほうが全体の処理時間を短縮することができ、また、第1演算器アレイに含まれる複数の第1演算器アレイの利用効率を高めることができる。この場合、第1演算器アレイの回路規模を削減することができ、演算部全体の回路規模を削減することにもつながる。
【0079】
また、変換装置がソースプログラムをコンパイルする際、乗算を第1演算器のシフト演算機能を用いて実行するか、第2演算器の乗算演算機能を用いて実行するかを適宜、決定することにより、乗算演算にかかる処理時間を最適化することができる。それにより、消費電力も低減することができる。たとえば、変数と定数の乗算の場合で、その乗算が少ない回数のシフト演算の組み合わせで実現できる場合、第2演算器の乗算演算機能を用いるより、第1演算器のシフト演算を用いるほうが処理時間を短くすることができる場合が多い。
【0080】
以上、本発明をいくつかの実施形態をもとに説明した。これらの実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
【0081】
上述した実施の形態では、第2演算器が乗算演算のみを実行したが、第2演算器がその他の算術論理演算を実行してもよい。
【図面の簡単な説明】
【0082】
【図1】本発明の実施の形態1に係る演算処理装置の構成を示すブロック図である。
【図2】従来技術に係る演算部の第1構成例を示す図である。
【図3】従来技術に係る演算部の第2構成例を示す図である。
【図4】本発明の実施の形態1に係る演算部の第1構成例を示す図である。
【図5】本発明の実施の形態1に係る演算部の第2構成例を示す図である。
【図6】本発明の実施の形態1に係る演算部の第3構成例を示す図である。
【図7】本発明の実施の形態1に係る演算部の第4構成例を示す図である。
【図8】本発明の実施の形態1に係る演算部の第5構成例を示す図である。
【図9】本発明の実施の形態2に係る変換装置の構成を示すブロック図である。
【図10】ソースプログラム例1を示す図である。
【図11】図2または図3に示した演算部で、ソースプログラム例1を実行する場合のデータフローグラフ例を示す図である。
【図12】図4または図5に示した演算部で、ソースプログラム例1を実行する場合のデータフローグラフ例を示す図である。
【図13】ソースプログラム例2を示す図である。
【図14】図2または図3に示した演算部で、ソースプログラム例2を実行する場合のデータフローグラフ例を示す図である。
【図15】図4または図5に示した演算部で、ソースプログラム例2を実行する場合のデータフローグラフ例を示す図である。
【図16】ソースプログラム例3を示す図である。
【図17】図2または図3に示した演算部で、ソースプログラム例3を実行する場合のデータフローグラフ例を示す図である。
【図18】図4または図5に示した演算部で、ソースプログラム例3を実行する場合のデータフローグラフ例を示す図である。
【図19】ソースプログラム例4を示す図である。
【図20】図2または図3に示した演算部で、ソースプログラム例4を実行する場合のデータフローグラフ例を示す図である。
【図21】図4または図5に示した演算部で、ソースプログラム例4を実行する場合のデータフローグラフ例を示す図である。
【図22】ソースプログラム例5を示す図である。
【図23】図4または図5に示した演算部で、ソースプログラム例5を実行する場合のデータフローグラフ例1を示す図である。
【図24】図4または図5に示した演算部で、ソースプログラム例5を実行する場合のデータフローグラフ例2を示す図である。
【図25】ソースプログラム例6を示す図である。
【図26】図4または図5に示した演算部で、ソースプログラム例6を実行する場合のデータフローグラフ例1を示す図である。
【図27】図4または図5に示した演算部で、ソースプログラム例6を実行する場合のデータフローグラフ例2を示す図である。
【符号の説明】
【0083】
10 演算部、 11 第1演算器、 20 制御部、 30 記憶部、 51 接続部、 61 第2演算器、 100 演算処理装置、 200 変換装置、 210 抽出部、 220 判定部、 230 データフローグラフ生成部、 240 コマンドデータ生成部。

【特許請求の範囲】
【請求項1】
外部から供給される設定データに応じて機能の変更が可能な演算部を備える演算処理装置であって、
前記演算部は、
乗算を除く複数種類の算術論理演算を選択的に実行可能な複数の第1演算器と、
乗算を単体で実行可能な少なくとも一つの第2演算器と、
を含むことを特徴とする演算処理装置。
【請求項2】
前記第1演算器は、x(xは2以上の整数)行×y(yは2以上の整数)列の第1演算器アレイを構成し、
前記第2演算器は、m(mはx以下の自然数)行×n(nは自然数)列の、第2演算器列または第2演算器アレイを構成することを特徴とする請求項1に記載の演算処理装置。
【請求項3】
前記第1演算器は、x(xは2以上の整数)行×y(yは2以上の整数)列の第1演算器アレイを構成し、
前記第2演算器は、前記第1演算器アレイの複数行ごとに設けられることを特徴とする請求項1に記載の演算処理装置。
【請求項4】
ソースプログラムを、請求項1から3のいずれかに記載の演算処理装置で処理されるべき設定データに変換する変換装置であって、
前記ソースプログラムに含まれる乗算処理を、前記第1演算器のシフト演算機能を用いて実行するか、前記第2演算器の乗算機能を用いて実行するかを判定する判定部と、
前記乗算処理を、前記判定部による判定結果に応じた設定データに変換する設定データ生成部と、
を備えることを特徴とする変換装置。
【請求項5】
前記判定部は、前記乗算処理が変数と定数との乗算であって、その定数が2の乗数であるとき、前記第1演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、前記第2演算器の乗算機能を用いて実行するを選択することを特徴とする請求項4に記載の変換装置。
【請求項6】
前記判定部は、前記乗算処理が変数と定数との乗算であって、その定数を2進数で表現した場合に1の数が所定の設定値以下であるとき、前記第1演算器のシフト演算機能を用いて実行するを選択し、それ以外のとき、前記第2演算器の乗算機能を用いて実行するを選択することを特徴とする請求項4に記載の変換装置。
【請求項7】
ソースプログラムを、請求項2または3に記載の演算処理装置で処理されるべき設定データに変換する変換装置であって、
前記ソースプログラムに含まれる乗算処理を、前記第1演算器のシフト演算機能を用いて実行するか、前記第2演算器の乗算機能を用いて実行するかを判定する判定部と、
前記乗算処理を、前記判定部による判定結果に応じた設定データに変換する設定データ生成部と、を備え、
前記判定部は、前記第1演算器のシフト演算機能を用いて実行する、前記第2演算器の乗算機能を用いて実行するのうち、前記第1演算器アレイの行数を基準に、前記乗算処理を少ない行数で実行可能なほうを選択することを特徴とする変換装置。

【図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

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate

【図18】
image rotate

【図19】
image rotate

【図20】
image rotate

【図21】
image rotate

【図22】
image rotate

【図23】
image rotate

【図24】
image rotate

【図25】
image rotate

【図26】
image rotate

【図27】
image rotate


【公開番号】特開2010−134713(P2010−134713A)
【公開日】平成22年6月17日(2010.6.17)
【国際特許分類】
【出願番号】特願2008−310153(P2008−310153)
【出願日】平成20年12月4日(2008.12.4)
【出願人】(000001889)三洋電機株式会社 (18,308)
【Fターム(参考)】