以下に添付図面を参照して、この発明にかかる半導体装置の好適な実施の形態を詳細に説明する。
本実施の形態にかかる半導体装置は、1個以上の命令(演算)を含む複数の演算処理を実行する演算装置と、演算装置による演算処理を制御する制御装置とを含む。各演算処理は、例えばあるプログラムに含まれる演算のうち、条件分岐が発生せずに逐次的に実行できる複数の演算をまとめた処理単位である。条件分岐に相当する処理であっても逐次的に実行できれば処理単位に含めてもよい。例えば、ある演算の結果から複数の信号のうち1つを選択するような処理は逐次的に実行可能であるため、処理単位に含めることができる。本実施の形態では、処理単位である演算処理に含まれるすべての演算の実行が完了する前であっても、条件分岐の判断に必要な情報が得られたときにその情報を演算装置から制御装置に出力する。そして、制御装置は、この情報を参照して条件分岐制御を行う。これにより、制御装置による分岐演算(条件分岐制御のための演算)と、演算装置による演算処理とを並列に実行できる。すなわち、分岐処理を含む処理をより効率的に実行することが可能となる。
(全体の概要)
図1−1は、本実施の形態に係る半導体装置1の構成例を示すブロック図である。図1−1に示すように、本実施の形態に係る半導体装置1は、制御装置100と、演算装置200と、記憶装置300とを備えている。
制御装置100は、処理実行開始の制御を行う。演算装置200は、記憶装置300に保持される情報に対して制御装置100により指示された演算処理を実行する。記憶装置300は、制御装置100と演算装置200とが参照する各種情報を保持する。半導体装置1は、外部からのクロック信号に同期して動作する。
(演算処理の制御)
制御装置100は、条件分岐制御に用いる情報である分岐制御情報を記憶装置300から入力し、演算装置200が実行する演算処理と、当該演算処理を開始可能な条件とを決定し、実行する演算処理を一意に識別する識別情報を含む処理制御情報を演算装置200に対して出力する。
識別情報は、演算装置200が実行する演算処理を特定できれば特に形態は問わない。例えば、0以上の整数(自然数)を各演算処理に割り当てて識別情報として用いても良い。また、数値および文字列を含む識別情報を用いても良い。また、例えば、演算処理の中で実行する命令を保持するメモリのアドレスポインタであってもよいし、メモリのアドレスポインタと1対1に対応する識別子でもよい。また、より具体的に1つ以上の命令を含む情報で構成してもよい。
演算装置200は、処理制御情報を制御装置100から入力し、演算処理の対象となる情報である処理対象情報を記憶装置300から入力し、処理制御情報にしたがって、処理制御情報に含まれる識別情報で識別される演算処理を実行し、処理結果を記憶装置300に出力する。
なお、図1−1には1つの演算装置200のみを記載しているが、半導体装置1が複数の演算装置200を備えてもよい。図1−2は、複数の演算装置200aおよび200bを備える場合の半導体装置1−2の構成例を示すブロック図である。また、演算装置200が、記憶装置300以外の記憶装置を備えてもよい。例えば、外部システムメモリのような外部記憶装置や、各演算装置200専用のローカルメモリのような専用記憶装置などを備えてもよい。演算装置200が記憶装置300以外の記憶装置を備える場合は、処理対象情報の入出力は記憶装置300でなくともよい。
演算装置200は、処理制御情報に含まれる識別情報で識別される演算処理を実行する装置なら特に形態は問わない。例えば、構成情報が示す処理を行うリコンフィギャラブル回路でも良いし、プログラムが示す処理を行うプロセッサであっても良い。ただし、演算装置200が実行する演算処理は、制御装置100から入力された処理制御情報に含まれる識別情報により一意に定まる。例えば、同一の処理制御情報が入力される場合は同一の演算処理を実行し、通常のプロセッサの条件分岐等の機能はサポートせず、実行する演算処理は入力情報や内部状態等に影響されないことを前提とする。この前提により、演算処理ごとの演算装置200の動作時間、動作タイミングを一意に決定することができるため、演算処理のスケジュールが容易となる。特に、半導体装置1が複数の演算装置200を備える場合は、複数の演算装置200間でのデータ共有およびデータ転送などの同期処理などの制御が容易となる。
記憶装置300は、演算装置200が演算処理を施す対象である処理対象情報と、制御装置100が条件分岐制御に用いる分岐制御情報を保持する。記憶装置300は、1つ以上の演算装置200と、制御装置100とで処理対象情報を共有することができる構造をとる。例えば、記憶装置300としてマルチポートのメモリを用いても良い。また、演算装置200および制御装置100それぞれに対して専用のメモリを用意し、処理対象情報を共有するための制御装置を別途用意しても良い。
(タイミングの制御)
制御装置100は、制御装置100の動作を制御するための予め設定された第1装置制御情報に従い制御を行う。第1装置制御情報は、演算処理を実行開始可能な条件(処理開始条件)と、演算処理の次の演算処理(以下、次処理という)の決定処理が実行開始可能な条件(決定開始条件)と、次処理を決定する条件(決定条件)と、決定条件による判定結果ごとの次処理を示す情報(次処理候補情報)と、を含む。第1装置制御情報の詳細については後述する。
制御装置100は、決定開始条件と、演算装置200や記憶装置300から入力される情報(第1完了情報、詳細は後述)とに従い、次処理を決定するタイミングを判定する。決定開始条件を満たす場合、制御装置100は、記憶装置300から入力される分岐制御情報を用いて決定条件を判定する。そして、制御装置100は、決定条件により判定された次処理の識別情報を生成し、適切なタイミングで演算装置200に出力する。
条件判定後、制御装置100は、決定された次処理の識別情報に対応する処理開始条件を判定し、演算の実行を開始するか否かを表す開始制御情報を生成して演算装置200に出力する。まず、制御装置100は、処理開始条件と、演算装置200から入力される情報(第2完了情報、詳細は後述)と、に従い、識別情報が示す演算処理の実行開始タイミングを判定する。処理開始条件を満たす場合、制御装置100は、実行開始可能であることを表す開始制御情報を生成して演算装置200に出力する。処理開始条件を満たさない場合、制御装置100は、実行開始不可であることを表す開始制御情報を生成し、演算装置200に出力する。
また、制御装置100は、次処理を決定する処理(以下、決定処理という)が完了後、更に次に実行する演算処理を決定するための決定処理を実行する。更に次に実行する演算処理を決定するための決定処理は、識別情報が示す演算処理に対する第1装置制御情報を用いることで同様に実行することができる。この決定処理を実行するタイミングは、識別情報を生成した後でも良いし、識別情報を生成し、更に処理開始条件を満たし、処理実行可能である旨の開始制御情報を生成した後でもよい。
演算装置200は、制御装置100から入力される識別情報が示す演算処理を実行する。演算処理を開始するタイミングは開始制御情報により制御される。次処理が決定していても、開始制御情報により次処理の実行が許可されていない場合は、決定された次処理を実行することはできない。ただし、次処理の実行に必要な準備を行うことは可能である。例えば、リコンフィギャラブル回路の場合は、識別情報が示す演算処理の構成情報を予め演算装置200に設定するように構成してもよい。これにより、演算処理開始時の設定に関するオーバヘッドを削減することができる。また、キャッシュを備えた演算装置200の場合、演算処理に必要な設定情報を予めキャッシュにプリフェッチするように構成してもよい。これにより実行中のキャッシュミスを回避することができ、パフォーマンスの向上が期待できる。このように、実行開始前に次処理の準備を行うことにより全体のパフォーマンスを向上することができる。
また、制御装置100と演算装置200との間、または、制御装置100および演算装置200の少なくとも一方の内部に、識別情報および開始制御情報を保持するための記憶装置(図示せず)を備えてもよい。このような構成により、制御装置100は、次に実行する1つの演算処理のみだけでなく、その後に実行する複数の演算処理それぞれに対応する複数の処理制御情報を生成することができるようになる。また、演算装置200は、今後実行すべき複数の演算処理が確定した状態となるため、効率的に演算処理の準備を行うことができる。特に、複数の演算装置200を備える構成の場合には、1つの演算装置200に対して、同一または類似した演算処理を割り当てることで制御の効率化を図ることが可能となる。
(装置構成の概要)
図2−1は、本実施の形態に係る半導体装置1の構成の一例を示すブロック図である。最初に、制御装置100の各構成部の機能について説明する。図2−1に示すように、制御装置100は、次処理を決定する決定回路101と、演算装置200が演算処理を開始するタイミングを制御する開始制御回路102と、第1装置制御情報を保持する記憶装置103と、を備える。
決定回路101は、第1完了情報を演算装置200から入力し、分岐制御情報を記憶装置300から入力し、第1装置制御情報を記憶装置103から入力する。第1完了情報とは、演算装置200により特定の演算処理に含まれる特定の演算の実行が完了したことを表す情報である。本実施の形態では、条件分岐制御に必要な情報を出力する予め定められた演算の実行が完了したことを表す情報を第1完了情報として用いる。
例えば、第1完了情報は、演算処理の決定に必要な情報を記憶装置300に書き込んだことを示す割り込み信号でも良いし、演算処理に含まれる個々の命令(演算)のうち特定の演算が完了したことを通知する割込み信号でも良い。また、記憶装置300に情報を書き込む際のアドレス情報でも良い。
なお、第1完了情報を演算装置200から入力する代わりに、記憶装置300から入力するように構成しても良い。図2−2は、このように構成した本実施の形態の変形例1に係る半導体装置1の構成の一例を示すブロック図である。本変形例では、演算制御回路201−2が第1完了情報を記憶装置300−2に保存し、決定回路101−2が記憶装置300−2から第1完了情報を入力する点が、図2−1の構成と異なっている。その他の構成は図2−1と同様であるため同一の符号を付し説明を省略する。特に、書き込まれたアドレス情報を通知する場合には、本変形例のように記憶装置300から第1完了情報を入力することにより制御が単純化できる。
図2−1に戻り、決定回路101は、第1装置制御情報に含まれる決定開始条件、決定条件および処理開始条件と、分岐制御情報とから、次処理の識別情報と処理開始条件を含む開始条件情報とを生成する。そして、決定回路101は、識別情報を演算装置200に出力し、開始条件情報を開始制御回路102に出力する。
開始条件情報に含まれる処理開始条件は、演算処理の実行開始の可否を判定する条件である。例えば、処理開始条件は、演算装置200または記憶装置300から特定の割込み信号または情報が入力されたか否かを判定する条件を表す。なお、識別情報により演算装置200が実行する演算処理が一意に定まるため、識別情報ごとに演算処理全体の実行サイクル数や特定の情報が生成されるまでのサイクル数も特定できる。したがって、処理開始条件が、特定した演算処理開始までの待機時間(サイクル数)が経過したかを判定する条件を表すように構成してもよい。
決定回路101は、決定開始条件を満たした場合に決定条件に従い次処理を決定する決定処理を実行し、決定開始条件を満たさない場合は決定処理を行わない。決定回路101は、第1完了情報が決定開始条件を満たすか否かにより判定を行う。例えば、決定開始条件がある割込みフラグの入力である場合、決定回路101は、演算装置200から該当する割込みフラグが入力されたら決定処理を実行する。決定回路101は、決定処理では、決定条件により次処理を決定する。次処理が決定すると、決定回路101は、次処理の処理開始条件を含む開始条件情報を生成して開始制御回路102に出力する。また、決定回路101は、決定した次処理に対応する第1装置制御情報を記憶装置103から読出し、更に次処理の次の処理の決定処理を行う。
開始制御回路102は、開始条件情報を決定回路101から入力し、第2完了情報を演算装置200から入力する。第2完了情報は、第1完了情報と同様に、演算装置200により特定の演算処理に含まれる特定の演算の実行が完了したことを表す情報である。本実施の形態では、他の演算処理に必要な情報を出力する予め定められた演算の実行が完了したことを表す情報を第2完了情報として用いる。言い換えると、第2完了情報は、ある演算処理と、当該演算処理の出力結果を用いる他の演算処理との同期を取るために利用する情報である。
開始制御回路102は、開始条件情報と第2完了情報とから、演算処理の実行が開始できるか否かを判断し、結果を表す開始制御情報を出力する。例えば、開始制御回路102は、第2完了情報により内部状態を遷移し、内部状態が開始条件情報に含まれる処理開始条件を満たす場合に、演算処理が実行開始可能であることを表す開始制御情報を生成する。また、開始制御回路102は、内部状態が処理開始条件を満たさない場合に実行開始不可であることを表す開始制御情報を生成する。そして、開始制御回路102は、生成した開始制御情報を演算装置200に出力する。
開始制御回路102による実行開始可否の判断方法は上記に限られず、開始条件情報に含まれる処理開始条件に応じてあらゆる方法を用いることができる。例えば、処理開始条件が、サイクル数が経過したかを判定する条件を表す場合、開始制御回路102は、サイクル数のカウンタの値が一定値に達した時点で実行開始許可を示す開始制御情報を出力すればよい。また、処理開始条件が、演算装置200または記憶装置300から特定の割込み信号が入力されるまで待機するという条件を表す場合、開始制御回路102は、この割込み信号が入力された時点で実行開始許可を示す開始制御情報を出力すればよい。
記憶装置103は、第1装置制御情報を保持する。記憶装置103は、決定回路101から要求を受けると、決定回路101に対して第1装置制御情報を出力する。
ここで、第1装置制御情報の詳細について説明する。第1装置制御情報は、現在実行している演算処理に対して、次処理と次処理を実行するタイミングとを制御装置100が決定できれば特に形態は問わない。図3−1は、第1装置制御情報のデータ構造の一例を示す図である。
図3−1に示すように、第1装置制御情報は、現在実行中の演算処理(現処理)に対して、処理開始条件と、決定開始条件と、決定条件と、次処理候補情報とを含む。図3−1では、決定条件による判定結果が真のときの演算処理の識別情報(1)、および、偽のときの演算処理の識別情報(2)が次処理候補情報として設定される例が示されている。
なお、第1装置制御情報が処理制御に関するその他の情報を含んでも良い。例えば、第1装置制御情報が、次処理を候補から確定する条件を含んでも良い。また、図3−1では省略しているが、記憶装置103は、すべての演算処理が完了したことを示す情報を含む第1装置制御情報を記憶する。例えば、最後に実行する演算処理の次処理候補情報に、すべての演算処理の完了を示す情報を設定する。
図3−1の例では、現処理および次処理をそれぞれ識別情報で示しているが、演算処理の内容自体を記載してもよい。また、演算処理の内容を保持する記憶装置203のアドレスポインタを記載してもよい。識別情報を用いる場合は、第1装置制御情報をメモリに保持する場合に第1装置制御情報の読出しが容易となる。また、アドレスポインタを用いる場合は、演算装置200内部での演算処理への変換が容易となる。
また、図3−1の例では、処理開始条件および決定開始条件として、「flag1」などのように特定のフラグが入力されたことを表す条件が示されている。各条件の指定方法はこれに限られず、演算処理または決定処理を開始する条件を示せれば形態は問わない。例えば、「3サイクル待機」のように具体的な待機サイクル数で指定してもよいし、「c==0」のように特定の情報が特定の値域になる条件を指定してもよい。特定の情報は、演算装置200から入力される情報(第1完了情報、第2完了情報等)でもよいし、記憶装置300に保持される情報でもよい。
また、図3−1の例では、決定条件として、「c==0」のように真偽の2通りの判定結果を取る条件を指定しているが、適用できる条件はこれに限られるものではない。例えば、(a<b)&&(c<d)の真偽判定による2通りの判定や、(a<b)の結果と(c<d)の結果の組合せた4通りの判定などのように複数の条件比較を用いても構わない。また、3個以上の判定結果を取る条件でもよい。その場合は、判定結果それぞれに対応する次処理も、判定結果の個数分用意する必要がある。例えば、「x&0x7」のような条件の場合は、判定結果に対応する次処理は8つ用意する必要がある。このような条件を用いれば、より柔軟な条件判定が可能となる。また、図3−1の例のように特定のフラグの入力を待つような条件を用いる場合は、判定回路の単純化、および、判定処理の高速化が可能となる。
ここで、記憶装置300が記憶する分岐制御情報の詳細について説明する。分岐制御情報は、決定条件の指定方法に応じて様々な構成をとることができる。「C==0」や「X<0」のような演算を伴う決定条件の場合は、例えば演算に用いる変数(C、Xなど)を記憶するアドレスとして指定されたアドレス、または、当該変数を分岐制御情報とすることができる。また、「flagA」のような特定のフラグの有無などを判定する決定条件の場合は、情報そのものではなく、1つ以上の割込み信号等のフラグを示す信号を分岐制御情報としてもよい。また、記憶装置300の特定のアドレスにフラグの有無を示す情報を格納し、制御装置100が当該アドレスの値の判定(例えば非ゼロ判定)により条件分岐を行うように構成してもよい。
また、実行すべき処理が常に一意に定められており、条件を判定する必要がない場合は、処理開始条件、決定開始条件、および決定条件を、真および偽のいずれかを用いて表現しても良い。例えば、常に演算処理を実行可能な場合は処理開始条件に「真(true)」を登録し、演算処理が常に実行不可な場合は処理開始条件に「偽(false)」を登録すれば良い。また、常に決定処理を実行可能な場合は決定開始条件に「真」を登録し、決定処理が常に実行不可な場合は決定開始条件に「偽」を登録すれば良い。また、常に次処理が1つの演算処理に定まっている場合は、決定条件を「真」として、真を示す判定結果に当該演算処理を登録するか、全ての判定結果に当該演算処理を登録すれば良い。
なお、一意に定まる処理を実行することを示す方法はこれらに限られるものではないが、上記のような方法であれば、条件判定の有無に関わらず同一のフォーマットで表現可能であるため、フォーマットを解釈する回路を簡略化できる。
図3−2は、第1装置制御情報のデータ構造の別の一例を示す図である。図3−2の第1装置制御情報の構成は、処理開始条件のみが図3−1の構成と異なる。図3−2の第1装置制御情報は、処理開始条件として、現処理の処理開始条件ではなく、次処理の処理開始条件が登録される。これにより次処理の候補ごとに処理開始条件を示す必要があるため、情報量は増大するが、演算処理の前後関係により処理開始条件が異なる場合には制御が容易となる。また、次処理が決定後、新しい第1装置制御情報を読み込む前に処理開始条件が決定する点でも制御の単純化に貢献できる。
図2−1に戻り、次に演算装置200の各構成部の機能について説明する。図2−1に示すように、演算装置200は、制御装置100から入力された識別情報および開始制御情報に従い、演算処理の実行を制御する演算制御回路201と、記憶装置300から入力した処理対象情報に対して演算処理を実行する実行回路202と、演算処理に必要な情報を保持する記憶装置203と、を備える。
記憶装置203は、演算制御回路201からの要求に従い、識別情報が示す演算処理に対応する第2装置制御情報を演算制御回路201に出力する。記憶装置203は、演算処理開始前に予め演算処理に必要な第2装置制御情報が入力される。演算処理実行中に外部から記憶装置203に第2装置制御情報を入力してもよい。また、識別情報が1つ以上の命令を含む構成の場合には記憶装置203は備えなくても良い。
演算制御回路201は、識別情報と開始制御情報とを制御装置100から入力し、識別情報が示す演算処理を、開始制御情報が示すタイミングで実行するように制御する。また演算制御回路201は、演算処理に含まれる各演算の実行を制御するための演算制御情報を生成し、実行回路202に出力する。
演算制御回路201は、記憶装置203から、入力された識別情報に対応する第2装置制御情報を読み出す。第2装置制御情報は、識別情報で識別される演算処理に含まれる各演算の内容等を定めた情報である。なお、識別情報が1つ以上の命令を含む構成の場合、実行する命令が識別情報に含まれているため、記憶装置203から第2装置制御情報を読み出す必要はない。
識別情報が記憶装置203のアドレスである場合、演算制御回路201は、当該アドレスから第2装置制御情報を読み出す。演算制御回路201は、読み出した第2装置制御情報から生成した演算制御情報を実行回路202に出力する。その後、演算制御回路201は、記憶装置203の次の第2装置制御情報を保持するアドレスから第2装置制御情報を読み出す。次の第2装置制御情報のアドレスは、例えば識別情報として指定されたアドレスの次のアドレスとして特定する。第2装置制御情報内に次の第2装置制御情報のアドレスを特定できる情報を備えていても良い。以上の処理を、演算完了を示す情報を含む第2装置制御情報を読み込むまで繰り返す。
図4−1〜図4−4は、記憶装置203に保持される第2装置制御情報のデータ構造の一例を示す図である。図4−1の例では、第2装置制御情報は、演算処理の識別情報と、実行回路202が実行する命令と、処理開始条件の判定に用いられる第2完了情報と、決定開始条件の判定に用いられる第1完了情報と、演算処理に含まれるすべての演算が完了したか否かを示す情報(演算完了)と、を含む。
なお、第2装置制御情報の各行は、1つの演算処理に含まれる1つの演算に対応する。1つの演算処理が複数の演算を含む場合は、実行する順序で各演算を上から記載する。図4−1では、2番目以降に実行する演算の識別情報に「−」を設定する例が示されている。演算完了は、1つの演算処理に含まれる演算のうち、後に実行する演算が存在しない演算に対して「Yes」が設定される。後に実行する演算が存在する場合は、演算完了に「No」を設定する。
演算装置200は、制御装置100から入力された処理制御情報に含まれる識別情報で識別される演算処理を逐次的に実行する場合、識別情報が一致する命令から最も近い演算完了を示す命令までを順番に実行する。
図4−1では、識別情報として数値を用いる例が示されている。上述のように、識別情報としてアドレスポインタを用いてもよい。図4−2は、識別情報としてアドレスポインタを用いる場合の第2装置制御情報のデータ構造の例を示している。
数値を識別情報として用いる場合は、少ない情報量で演算処理の特定を行うことが可能である。一方、アドレスポインタを用いる場合は、特定の演算処理の途中の演算から開始するといった柔軟な指定が可能となる。
命令(演算)は、演算装置200の構成により大きく異なる。図4−1等の例では命令として算術演算が示されているが、演算装置200が外部メモリのコントローラの場合は、ロードストア等の命令が登録されても良い。また、演算装置200が動的再構成可能なデバイスのように命令が複雑な回路の場合は、命令の代わりにコンフィギュレーションIDなどの識別子を用いても良い。
第2完了情報および第1完了情報は、制御装置100に対して出力するフラグを示しているが、それぞれ処理開始条件および決定開始条件による判定で利用できる情報であれば形態は問わない。例えば、フラグではなく特定の値を指定してもよいし、特定のアドレスと値の組を指定してもよい。また、第2完了情報および第1完了情報がいずれも同じ構造の場合(例えば図4−1、4−2のようにフラグで表される場合)は、第2装置制御情報内で区別する必要はない。例えば、第2装置制御情報が1つの「完了情報」を含むように構成してもよい。この場合は、演算制御回路201は、第1完了情報と第2完了情報とを区別せずに「完了情報」として送信し、制御装置100内の決定回路101および開始制御回路102がそれぞれ受信した「完了情報」を用いて条件を判定する。
演算処理に含まれるすべての演算が完了したか否かを示す情報は、図4−1および図4−2のような情報(演算完了)に限られるものではない。例えば、識別情報により識別される演算処理の最初の演算に対して実行命令数を付加してもよい。この場合、演算制御回路201は、実行命令数分の演算を実行したときに、すべての演算が完了したと判断する。また、図4−3のように、命令の欄に「HALT」等の処理の完了を示す命令を登録してもよい。
また、図4−1〜図4−3の第2装置制御情報は、制御装置100からの制御信号(開始制御情報)によりタイミング制御が行われる場合の構成例を示している。制御装置100内部で静的にタイミング制御を行う場合は、第1完了情報および第2完了情報が不要となるため、図4−4に示すように、第2装置制御情報が識別情報と命令と演算完了とを含むように構成しても良い。
図2−1に戻り、演算制御回路201は、制御装置100から入力される開始制御情報に従い、指定された演算処理が実行開始可能な状態になるまで待機し、実行開始可能な状態になった場合に、第2装置制御情報から演算制御情報を生成し、生成した演算制御情報を実行回路202に出力する。演算制御情報は、例えば、図4−1のような第2装置制御情報の各行の命令を含む。
演算制御回路201は、逐次的に演算を実行するため、処理実行可能な状態の間は連続的に第2装置制御情報を読み出し、読み出した第2装置制御情報に定められた命令を含む演算制御情報を実行回路202に出力する。読み出した第2装置制御情報が演算完了を示す情報(演算完了=「Yes」など)を含む場合は演算処理を完了し、状態を処理実行停止状態に遷移する。
演算制御回路201は、実行回路202に演算制御情報を出力するとともに、自身や別の演算装置200の演算処理の実行可能状態の制御を行う第2完了情報や、自身や別の演算装置200の次処理を決定する決定処理の開始可否を制御する第1完了情報を生成し、制御装置100に出力する。また、図2−2に示すように第1完了情報が記憶装置300から制御装置100に入力される場合には、演算制御回路201は、第2完了情報のみを制御装置100に出力する。
実行回路202は、演算制御情報を演算制御回路201から入力し、処理対象情報を記憶装置300から入力し、演算制御情報が示す演算を処理対象情報に対して実行し、演算の結果を記憶装置300に出力する。
実行回路202は、演算制御回路201から演算制御情報が入力されると、演算制御情報から、処理対象情報、実行する演算、および、演算結果の保存先などを特定する。そして、実行回路202は、特定した処理対象情報を記憶装置300から読出し、特定した演算を実行し、特定した保存先に演算結果を保存する。処理対象情報の読出し元や、書き出し先は記憶装置300のみではなく、例えば半導体装置1外部のシステムメモリや半導体装置1内部の別の記憶装置を指定してもよいし、演算装置200内部のローカルメモリを指定してもよい。
次に、制御装置100の各構成部のさらに詳細な構成について説明する。図5−1は、制御装置100の決定回路101および開始制御回路102のより詳細な構成の一例を示すブロック図である。最初に、決定回路101の詳細構成について説明する。図5−1に示すように、決定回路101は、判定回路101aと、比較回路101bと、選択回路101cと、保持回路101dと、を備える。
判定回路101aは、次処理が確定するタイミングを判定する回路である。判定回路101aは、内部状態と、演算装置200または記憶装置300から入力される情報(第1完了情報または第2完了情報)などが、記憶装置103から入力される決定開始条件を満たすか否かを判定する。判定回路101aは、判定結果を比較回路101bに出力する。例えば、判定回路101aは、決定開始条件が満たされた場合に「有効(true)」を表す判定結果を出力し、決定開始条件が満たされない場合に「無効(false)」を表す判定結果を出力する。また、判定回路101aは、記憶装置103に対して、次処理に該当する演算処理の第1装置制御情報を要求する要求情報を出力する。
判定回路101aによる判定処理は、決定開始条件を満たすか否かを判定できれば特に限定されない。例えば、決定開始条件が待機サイクル数のみを示す場合は、サイクル数のカウンタが一定値になった時点で判定回路101aが判定結果=「有効」を出力する構成とすればよい。
このような構成は、次処理が確定するタイミングが決定開始条件に示される構成であるといえる。例えば、演算装置200が条件分岐機構などを持たず、逐次的、静的に動作する場合には、処理の実行タイミングが静的に確定する。このような場合は、決定開始条件に待機サイクル数のみ指定する構成でタイミング制御を行うことが可能となる。このような構成により、制御装置100を単純な構造とすることが可能となる。
決定開始条件が、演算装置200、記憶装置300、および制御装置100の内部から特定の制御信号が入力するまで待機する条件の場合は、判定回路101aが当該制御信号を判定するような構成としてもよい。例えば、判定回路101aが、演算装置200または記憶装置300から入力される第1完了情報により決定開始条件を判定しても良い。
このような構成により、固定サイクル数待機する場合に比べて、より柔軟なタイミング制御が実現できる。また、第1完了情報が入力されるタイミングが異なる場合でも、タイミング制御のために同一の制御情報を利用することができるため、制御情報のサイズを削減することが可能となる。判定回路101aは、次処理が確定した後に、記憶装置103に対して、次処理に該当する第1装置制御情報を要求する要求情報を出力する。
比較回路101bは、判定回路101aによる判定結果を判定回路101aから入力し、決定条件を記憶装置103から入力し、分岐制御情報を記憶装置300から入力する。判定回路101aによる判定結果が有効である場合、比較回路101bは、分岐制御情報が決定条件を満たすかを判定し、判定結果を選択回路101cに出力する。判定回路101aによる判定結果が無効である場合、比較回路101bは、無効を表す判定結果を選択回路101cに出力する。
比較回路101bが出力する判定結果の構成は、第1装置制御情報に含まれる次処理候補情報の候補数により定められる。次処理候補情報の数が1つの場合は、次処理の候補からいずれを選択するかを表す情報は必要なく、条件が満たされたことを表す情報のみで十分である。次処理候補情報の候補数が2つの場合は、条件が満たされたことを表す情報の他に、2つの候補から選択できる情報(例えば真と偽などの情報)を判定結果に含めればよい。また、次処理候補情報の候補数が3以上の場合、適切な候補を選択できる情報を判定結果に含めれば良い。
比較回路101bは、決定条件に示す処理を実行できる回路であれば特に構成は限定しない。例えば、決定条件が入力された分制御情報の有無のみで判定する条件の場合は、比較回路101bが、分岐制御情報が真か偽かを判定する回路で構成されてもよい。また、決定条件が、C言語等のプログラミング言語の条件文(例えば「c==0」)のように、数値計算の結果の値域を判定する条件の場合は、比較回路101bが、比較演算、論理演算、および四則演算など演算を実行できる構成をとっても良い。
選択回路101cは、次処理候補情報および処理開始条件を記憶装置103から入力し、比較回路101bによる判定結果を比較回路101bから入力する。選択回路101cは、次処理候補情報に含まれる次処理の候補から、比較回路101bによる判定結果が示す次処理を選択する。選択回路101cは、次処理の識別情報に対応した処理開始条件を選択し、次処理の識別情報と選択した処理開始条件とを含む開始条件情報を生成する。選択回路101cは、次処理の識別情報を保持回路101dへ出力し、開始条件情報を開始制御回路102に出力する。
開始条件情報の生成は、第1装置制御情報のデータ構造により異なってもよい。第1装置制御情報が、現在実行中の演算処理の処理開始条件を含む場合は(図4−1の例)、次処理が確定後、確定した次処理の処理開始条件を読み出して出力する構成をとっても良い。また、次処理候補情報とともに次処理の処理開始条件を付加する構成をとる場合は(図4−2の例)、次処理候補情報とともに処理開始条件を選択する構成をとってもよい。
保持回路101dは、選択回路101cから入力される識別情報を保持し、演算装置200に対して出力する回路である。保持回路101dは、1つの識別情報のみを保持する構成でもよいし、複数の識別情報を保持する構成でもよい。複数の識別情報を保持する構成の場合、識別情報の入力順序を保障する構成であればどのような構成であってもよい。例えば、汎用の記憶装置と制御回路でもよいし、FIFOのような先入れ先出し記憶装置でも良い。
保持回路101dは、識別情報を受理したことを表す受理情報が演算装置200から入力されると、該当する識別情報は演算装置200に受理されたと判断し、演算装置200に対する当該識別情報の出力を完了する。1つの識別情報のみを保持する構成の場合は、内部に識別情報を保持している間は、選択回路101cから新しい識別情報が入力されても、保持回路101dは内部の識別情報を更新せず、演算装置200に受理された後に新しい識別情報を内部に保持する。
複数の識別情報を保持できる構成の場合は、内部に識別情報を保持している間に、選択回路101cから新しい識別情報を入力されたとき、保持回路101dは、内部の記憶領域に空きがあれば、新しい識別情報を保持することができる。内部の記憶領域に空きがない場合は、保持回路101dは、1つの識別情報のみ保持できる構成と同様に、演算装置200に識別情報が受理されるまで待機する。また、内部の記憶領域に2つ以上の識別情報を保持している状態で演算装置200から受理情報が入力されると、保持回路101dは、出力している識別情報を内部の記憶領域から廃棄し、次に入力された識別情報を演算装置200に対して出力する。
次に、開始制御回路102の詳細構成について説明する。図5−1に示すように、開始制御回路102は、保持回路102aと、判定回路102bと、を備える。
保持回路102aは、決定回路101から開始条件情報が入力されると、内部に開始条件情報を保持し、判定回路102bに対して該当する開始条件情報を出力する。保持回路102aは、判定回路102bから第2完了情報が入力されると、開始条件情報が受理されたと判断し、開始条件情報の出力を完了する。保持回路102aは、1つの開始条件情報のみ保持できる構成でもよいし、複数の開始条件情報を保持する構成でもよいが、保持回路101dによる識別情報の保持数と同等数の開始条件情報を保持する必要がある。また、保持回路101dと同様に、複数の識別情報を保持する場合は、入力順序を保障する必要がある。
判定回路102bは、保持回路102aから入力される開始条件情報と、演算装置200から入力される第2完了情報から、次処理の実行可否を判定し、演算装置200に対して判定結果である開始制御情報を出力する。判定回路102bは、開始条件情報に含まれる処理開始条件が示す処理を実行できれば特に構成は問わない。例えば、処理開始条件が待機サイクル数を示す場合は、判定回路102bがカウンタなどでサイクル数をカウントし、待機サイクル数と現在のカウント数とを比較する構成としても良い。この場合は、演算装置200からの第2完了情報は不要となり制御が単純化できる。また、処理開始条件が、演算装置200、記憶装置300、および制御装置100から特定の割込み信号の入力を待つという条件の場合は、判定回路102bが、指定された割込み信号の入力判定が可能な構成とする。この場合は、一定サイクルを固定的に待つ場合に比べて柔軟性の高い制御が可能となる。また、処理開始条件が、記憶装置300に保持される特定の情報が特定値になるまで待機するという条件の場合は、判定回路102bが、記憶装置300へのアクセス、四則演算、および論理演算などの処理をサポートする構成としても良い。
次に、制御装置100の各構成部の他の構成例について説明する。図5−2は、他の構成例での決定回路101−2および開始制御回路102−2のより詳細な構成の一例を示すブロック図である。
図5−2は、制御装置100(保持回路102a)ではなく、演算装置200内に開始条件情報を保持する場合の構成例を示している。図5−2に示すように、開始条件情報は、識別信号とともに選択回路101−2cから保持回路101−2dを経由して演算装置200に出力される。また、判定回路102−2bは、演算装置200から開始条件情報を入力し、図5−1の保持回路102aから開始条件情報を入力する場合と同様に判定処理を行う。そして、判定回路102−2bは、開始制御情報を演算装置200に出力する。
このような処理により、保持回路101−2dが、開始条件情報と常に対応づけられた状態で複数の識別情報を保持する場合でも回路の制御を単純化することができる。また、複数の演算装置200を備える構成の場合は、それぞれの演算装置200が開始条件情報を保持することで、条件判定の制御が容易になる。
次に、演算装置200の各構成部のさらに詳細な構成について説明する。最初に、演算制御回路201の詳細構成について説明する。図6−1は、演算装置200の演算制御回路201のより詳細な構成の一例を示すブロック図である。図6−1に示すように、演算制御回路201は、第1生成回路201aと、実行制御回路201bと、第2生成回路201cと、を備える。なお、図6−1は、図5−1の制御装置100に対応する演算制御回路201の構成例を示している。
第1生成回路201aは、制御装置100から入力される識別情報に従い、演算制御情報を生成し、生成した演算制御情報を実行制御回路201bに出力する。また、識別情報を受信可能な状態で制御装置100から識別情報が入力された場合、識別情報を受理したことを表す受理情報を制御装置100に出力する。
第1生成回路201aが、識別情報から演算制御情報を生成する方法は、識別情報の構成により様々である。例えば、識別情報が具体的な命令などの実行する演算そのもので構成される場合は、第1生成回路201aは、識別情報をそのまま演算制御情報として生成する。識別情報が記憶装置203のアドレスポインタである場合は、第1生成回路201aは、アドレスポインタに該当する記憶装置203のアドレスから第2装置制御情報を読み出し、読み出した第2装置制御情報内の命令を含む演算制御情報を生成して実行制御回路201bに出力する。また、識別情報が数値等で表される場合は、第1生成回路201aは、例えば識別情報と演算制御情報とを対応付けたルックアップテーブル等を用いて、識別情報に対応する演算制御情報を生成する。また、この場合、第1生成回路201aが、識別情報と記憶装置203のアドレスポインタとを対応付けたルックアップテーブルを用いるように構成してもよい。
また、識別情報が実行する演算と、第1完了情報と、第2完了情報とを含んでも良い。この場合、演算装置200は記憶装置203を備えず、制御装置100から入力される識別情報内の演算を含む演算制御情報を実行回路202に出力し、演算を実行した後に、制御装置100に対して、第1完了情報または第2完了情報を出力する。
演算制御情報には、実行回路202が実行する命令の他、演算装置200の制御に必要な情報が含まれる。例えば、演算制御情報が、識別情報が示す演算処理の完了を示す情報を含んでも良い。また、演算制御情報が、制御装置100および他の演算装置200と同期を取るための情報(以下、同期制御情報という)を含んでも良い。同期制御情報は、例えば上述の第1完了情報および第2完了情報が該当する。演算処理が複数の命令で構成される場合には、1つの演算処理につき1つの同期制御情報を持つように構成しても良いし、1つの命令につき1つの同期制御情報を持つように構成しても良い。
第1生成回路201aは、識別情報が入力されると、記憶装置203に対して識別情報で識別される演算処理に含まれる最初の演算に対応する第2装置制御情報を要求する。記憶装置203から第2装置制御情報が入力されると、第1生成回路201aは、第2装置制御情報内の命令を含む演算制御情報を生成し、実行制御回路201bに生成した演算制御情報を出力する。
第1生成回路201aは、実行制御回路201bから、実行制御回路201bの状態を表す状態情報を入力する。第1生成回路201aは、入力された状態情報が処理実行中を示す場合は、引き続き次の第2装置制御情報の要求を記憶装置203に出力する。
第1生成回路201aが、実行制御回路201bの状態が実行状態になった場合に初めて第2装置制御情報を読み出してもよいが、実行状態でない場合に予め第2装置制御情報を読み出すことで、実行開始時の初期化オーバヘッドを削減することが可能となる。
実行制御回路201bは、制御装置100から入力される開始制御情報と、第1生成回路201aから入力される演算制御情報とから、演算装置200の動作状態を制御し、第1生成回路201aに状態情報を出力する。
実行制御回路201bは、制御装置100から入力される開始制御情報に従い、内部状態を更新する。初期状態では、実行制御回路201bは停止状態である。停止状態中に実行開始可能であることを表す開始制御情報が入力されると、実行制御回路201bは実行可能状態となる。実行制御回路201bは、実行可能状態の場合、第1生成回路201aから入力される演算制御情報を実行回路202に出力する。これにより、一連の演算を連続して実行することができる。また、実行可能状態中に、第1生成回路201aから入力される演算制御情報にすべての演算が完了したことを示す情報が含まれる場合は、実行制御回路201bは、内部状態を停止状態に遷移し演算処理を完了する。
演算制御情報に同期制御情報が含まれる場合、実行制御回路201bは、第2生成回路201cに対して同期制御情報を出力する。実行制御回路201bは、実行制御回路201bが実行状態の場合に、演算制御情報に含まれる同期制御情報を、第2生成回路201cに対して出力する。例えば、同期制御情報が第1完了情報の場合、第2生成回路201cは、制御装置100が次処理の決定処理が実行開始可能か判定するための情報として第1完了情報を出力する。同期制御情報が第2完了情報の場合、第2生成回路201cは、制御装置100が次処理の実行開始可能か判定するための情報として第2完了情報を出力する。
次に、演算制御回路201の他の構成例について説明する。図6−2は、他の構成例にかかる演算制御回路201−2の詳細な構成の一例を示すブロック図である。図6−2は、図5−2の制御装置100に対応する演算制御回路201−2の構成例を示している。
図6−2に示すように、この構成例では、第1生成回路201−2aに識別情報とともに開始条件情報が入力され、第1生成回路201−2aが実行制御回路201−2bに開始条件情報を出力する。実行制御回路201−2bは、制御装置100に対して開始条件情報を出力し、開始制御情報の入力の真偽により状態遷移を行う。
次に、演算装置200の実行回路202のさらに詳細な構成について図7〜図14を用いて説明する。図7は、演算装置200の実行回路202のより詳細な構成の一例を示すブロック図である。図7に示すように、実行回路202は、演算回路701を備える。
上述のように、実行回路202は、演算制御回路201から演算制御情報を入力して演算を実行する。演算制御情報は、例えば実行する演算を特定する演算識別情報と、入力データの読出し先および演算に用いる定数値を含む入力元情報と、演算結果の書込み先を含む出力先情報と、を含む。演算制御情報の具体的なデータ構造は、実行回路202の構成により異なる。
図7に示す構成の場合、実行回路202は、単一の演算回路701により構成される。演算回路701は、データと命令を入力とし、入力したデータに対して、入力した命令に従い演算を実行する。演算回路701は、例えば、単一のALUなどの演算器で構成してもよいし、複数の演算器を備え、全ての演算器で同一の命令を入力するSIMD構成としてもよい。また、演算回路701が複数の演算器を備え、演算器ごとに別々の命令を入力可能なMIMD構成としてもよい。さらに、これらの構成の演算器を組み合わせて演算回路701を構成してもよい。
図7の構成例のような場合には、演算回路701に対応した単一の命令を演算識別情報とすればよい。図8は、図7の構成で用いる演算制御情報の一例を示す図である。図8に示すように、演算回路701が単一の演算器の場合には、演算制御情報は、命令(演算識別情報)と、入力元情報と、出力先情報とを備えればよい。なお、例えば図8の1行目の演算制御情報は、reg0から入力データを読み出して定数値2を加算(add)してreg0に書き込むことを表している。複数の演算器を備える構成の場合は、演算制御情報が、命令、入力元情報、および出力先情報をそれぞれ複数備えればよい。
図9は、図7と異なる構成の実行回路202−2を含む演算装置200−2の詳細な構成の一例を示すブロック図である。図9に示すように、実行回路202−2は、演算回路701−2と、定数情報記憶装置702−2と、処理情報記憶装置703−2と、を備える。
処理情報記憶装置703−2は、演算識別情報を入力とし、演算識別情報に対応する命令を出力する。図10は、処理情報記憶装置703−2に記憶される処理情報のデータ構造の一例を示す図である。図10に示すように、処理情報記憶装置703−2は、命令自体ではなく記号および数値等で表された演算識別情報(例えばcmd0)と命令とを対応付けた処理情報を記憶する。
定数情報記憶装置702−2は、演算に用いる定数値を識別する定数識別情報を入力とし、定数識別情報に対応する定数値を出力する。図11は、定数情報記憶装置702−2に記憶される定数情報のデータ構造の一例を示す図である。図11に示すように、定数情報記憶装置702−2は、定数識別情報と定数とを対応付けた定数情報を記憶する。
演算回路701−2は、処理情報記憶装置703−2から入力した命令と、定数情報記憶装置702−2から入力した定数値と、記憶装置300から入力した入力データとを用いて演算を行い、演算結果を記憶装置300に出力する。
図12は、図9の構成で用いる演算制御情報の一例を示す図である。図9の例のような場合には、図12に示すように、演算制御情報は、処理情報記憶装置703−2の処理情報に含まれる演算識別情報と、定数情報記憶装置702−2の定数情報に含まれる定数識別情報とを含めばよい。図12では、入力元情報内に定数識別情報(imm0など)を含む例が示されている。
なお、図9の例では処理情報記憶装置703−2と、定数情報記憶装置702−2のそれぞれを備えるが、いずれか一方のみを備えてもよいし、両者をまとめて単一の記憶装置として備えてもよい。処理情報記憶装置703−2のみ備える場合は、演算制御情報が定数識別情報の代わりに演算に必要な定数値を示す情報を含めばよい。また、定数情報記憶装置702−2のみ備える場合は、演算制御情報は記号および数値等で表された演算識別情報の代わりに、演算に必要な命令自体を含めばよい。
演算回路701−2が、多数の演算器それぞれに対して別々の命令を入力可能なMIMD構成の場合、図7の例のように演算識別情報に全ての命令を保持させると、記憶装置203に大きなメモリが必要となる。そのため、図9の例のように、処理情報記憶装置703−2と、定数情報記憶装置702−2にそれぞれ命令と定数を保持し、記憶装置203にはそれらの識別情報(演算識別情報および定数識別情報)のみを保持することにより、より少ない情報量で同一の処理を実現することができる。
図13は、図7および図9とさらに異なる演算装置200−3の詳細な構成の一例を示すブロック図である。図13に示すように、演算装置200−3は、図9の実行回路202−2にセレクタ(セレクタ704−3a、704−3b)を追加した2つの実行回路202−3aおよび202−3bを備えた構成となっている。なお、実行回路202−3の個数は3以上であってもよい。
図14は、図13の構成で用いる演算制御情報の一例を示す図である。図13の例のような場合、演算制御情報は図14に示すように実行回路202−2の数分の演算識別情報、入力元情報、および出力先情報の組を含めばよい。
上述のように、処理開始条件および決定開始条件は、特定の割込み信号の入力を待つという条件である必要はなく、サイクル数などの静的に決定される値を待つ条件でもよい。以下に、このように構成する場合の本実施の形態の変形例2について説明する。図15は、本実施の形態の変形例2に係る半導体装置1の構成の一例を示すブロック図である。
本変形例では、演算装置200−4の演算制御回路201−3から制御装置100−3の決定回路101−3に対する第1完了情報の出力、および、演算装置200−4の演算制御回路201−3から制御装置100−3の開始制御回路102−3に対する第2完了情報の出力が不要となる点が、図2−1の構成と異なっている。その他の構成は図2−1と同様であるため同一の符号を付し説明を省略する。
また、図16および図17は、それぞれ図15の変形例2の制御装置100−3および演算装置200−4のより詳細なブロック図である。
制御装置100−3の決定回路101内の判定回路101a−3は、処理開始条件を入力後、一定サイクル数待機した後に有効である旨の判定結果を出力すれば良いため、構造を単純化できる。例えば、判定回路101a−3の内部にカウンタ(図示せず)と、カウンタの値と待機サイクル数を比較する比較器(図示せず)とを備えれば実現できる。判定回路102b−3も同様に単純な構造で実現できる。
また、演算装置200−4の演算制御回路201−3は、第1完了情報および第2完了情報を出力する必要がないため、第2生成回路201cが不要となり、制御が単純化できる。
本変形例のように、処理開始条件および決定開始条件を静的に決定できる値で構成する場合は、処理の前後関係が異なる場合には別の制御が必要になるため、柔軟な制御が困難になるが、回路を単純化できる。
次に、このように構成された半導体装置1の制御装置100および演算装置200の動作について図18および図19を用いて説明する。図18は、本実施の形態における制御装置100の動作全体の流れを示すフローチャートである。
まず、制御装置100の決定回路101は、記憶装置103から第1装置制御情報を読み出す(ステップS101)。読み出す際に指定するアドレスは、固定であってもよいし、処理開始時に指定してもよい。また、これ以降、記憶装置103から第1装置制御情報を読み出す際のアドレスは、逐次的に増加させてもよいし、第1装置制御情報内で指定するように構成してもよい。
次に、決定回路101は、第1装置制御情報に含まれる決定開始条件が満たされたか否かを判断する(ステップS102)。決定開始条件が満たされない場合(ステップS102:No)、決定回路101は、決定開始条件が満たされるまで待機する。決定開始条件が満たされた場合(ステップS102:Yes)、決定回路101は、次処理を決定する決定処理を実行する(ステップS103)。
上述のように、決定処理が実行開始可能な状態の検出方法(決定開始条件)は、第1装置制御情報に含まれる。決定開始条件は、回路上で条件の判定が実現可能であれば、例えば決定処理が実行開始可能になるまでの待機サイクル数で示しても良いし、演算装置200または記憶装置300から入力される、決定処理が実行可能状態になること表す入力情報で示しても良い。
決定回路101は、決定した次処理の識別情報を含む処理制御情報を演算装置200に出力する(ステップS104)。
次に、開始制御回路102が、第1装置制御情報に含まれる処理開始条件が満たされたか否かを判断する(ステップS105)。処理開始条件が満たされない場合(ステップS105:No)、開始制御回路102は、処理開始条件が満たされるまで待機する。処理開始条件が満たされた場合(ステップS105:Yes)、開始制御回路102は、次処理が実行開始可能であることを表す開始制御情報を演算装置200に出力する(ステップS106)。
上述のように、処理開始条件は第1装置制御情報に含まれる。処理開始条件は、回路上で条件の判定が実現可能であれば、例えば、演算処理が実行可能となるまでのサイクル数で示しても良い。また、処理開始条件は、演算装置200または記憶装置300から入力される、演算処理が実行可能となることを表す入力情報で示しても良いし、制御装置100の内部状態で示しても良い。また、その際に制御装置100の内部状態は、演算装置200、記憶装置300、および外部からの信号により状態遷移してもよい。
図18では、決定処理(ステップS103)の後で、処理開始条件の判定(ステップS105)を行っているが、これらのステップは順番が前後しても良いし、同時に行っても良い。ただし、開始制御情報が対応する処理制御情報と関連付けられて演算装置200に入力される必要がある。例えば、処理制御情報と開始制御情報とを同時に出力する、処理制御情報の後で開始制御情報を出力する、または、開始制御情報の後で処理制御情報を出力する等のプロトコル上の制約を設ける方法を用いることができる。また、対応する処理制御情報と開始制御情報とをタグ付けして関連付けるなどの方法を用いても良い。
開始制御情報を出力後、決定回路101は、第1装置制御情報が演算処理の完了を示す情報を含むか否かを判断する(ステップS107)。演算処理の完了を示す情報を含まない場合は(ステップS107:No)、次の第1装置制御情報を読み出し(ステップS101)、処理を繰り返す。演算処理の完了を示す情報を含む場合は(ステップS107:Yes)、制御装置100は動作を終了する。
図19は、本実施の形態における演算装置200の動作全体の流れを示すフローチャートである。
まず、演算装置200の演算制御回路201は、制御装置100から処理制御情報が入力されるまで待機する(ステップS201)。処理制御情報が入力されると、演算制御回路201は、処理制御情報に従い、コンフィギュレーションの設定等の準備を行い(ステップS202)、開始制御情報が入力されるまで待機する(ステップS203)。処理の準備は行わなくてもよいが、準備を行うことで、開始制御情報を入力するときのコンフィギュレーション設定によるオーバヘッドを削減することができる。
開始制御情報が入力されると、演算制御回路201は、記憶装置203から第2装置制御情報を読み出し、第2装置制御情報に含まれる命令の実行を実行回路202に指示する(ステップS204)。
演算制御回路201は、読み出した第2装置制御情報に第1完了情報が含まれか否かを判断する(ステップS205)。第2装置制御情報に第1完了情報が含まれる場合は(ステップS205:Yes)、演算制御回路201は、制御装置100に第1完了情報を出力する(ステップS206)。また、演算制御回路201は、読み出した第2装置制御情報に第2完了情報が含まれか否かを判断する(ステップS207)。第2装置制御情報に第2完了情報が含まれる場合は(ステップS207:Yes)、演算制御回路201は、制御装置100に第2完了情報を出力する(ステップS208)。演算の実行(ステップS204)、第1完了情報の出力(ステップS206)、および、第2完了情報の出力(ステップS208)は、図19に示された順番である必要はなく、任意の順序で実行してもよいし、同時に実行してもよい。
演算制御回路201は、実行回路202による演算の実行が完了した後、演算制御情報に演算完了を示す情報が含まれるか否かを判断する(ステップS209)。演算完了を示す情報が含まれない場合は(ステップS209:No)、次の第2装置制御情報を読み出し(ステップS204)、処理を繰り返す。演算完了を示す情報が含まれる場合は(ステップS209:Yes)、演算装置200は動作を終了する。
次に、半導体装置1の動作の具体例について図20〜図25を用いて説明する。図20は、この例で実行するプログラムの一例を示す図である。
図20に示すプログラムは、4つのベーシックブロックから構成される。ベーシックブロックは、条件分岐が発生せずに逐次的に実行できる1以上の演算を含む処理単位、すなわち、上述の演算処理に相当する。図20の例では、識別情報=0〜3の4つのベーシックブロックを含むプログラムが示されている。
識別情報=1および2のベーシックブロックは、(3)式により条件分岐が行われ、いずれか一方のみが実行される。また、(3)式はデータcを用いるため、(3)式を実行するには、データcを算出する(0)式が完了している必要がある。以下、この依存関係を依存関係Aという。
識別情報=1のベーシックブロックは、当該ベーシックブロック外のデータeを演算に用いているため、データeを算出する(1)式が完了するまで、演算を開始できない。以下、この依存関係を依存関係Bという。同様に、識別情報=2のベーシックブロックは、データfを算出する(2)式が完了するまで演算を開始できない。以下、この依存関係を依存関係Cという。識別情報=3のベーシックブロックは、データhを算出する(5)式または(9)式が完了するまで演算を実行できない。以下、この依存関係を依存関係Dという。
図21および図22は、図20のプログラムを実行するための第1装置制御情報および第2装置制御情報をそれぞれ表す図である。
上述した演算の依存関係はフラグレジスタ等に保持するフラグを用いることにより解決している。依存関係Aについては「flagA」で解消される。依存関係Bおよび依存関係Cは「flagB」で解消される。依存関係Dについては「flagC」で解消される。
なお、図21の表の右欄に記載した(A)〜(F)は、図23〜図25で説明する演算処理との対応のために記載したものである。また、図22の表の右欄に記載した(0)〜(12)は、図20の各式である(0)式〜(12)式に対応することを表している。これらの記号は説明の便宜上記載したものであり、第1装置制御情報および第2装置制御情報がこれらの記号を含む必要はない。
図23、図24、および図25は、それぞれ図20のプログラムを、従来の汎用プロセッサで処理した場合、演算装置200を1つ備える半導体装置1(図1−1)で処理した場合、および演算装置200を2つ備える半導体装置1−2(図1−2)で処理した場合のタイミングチャートを示す図である。
従来の汎用プロセッサで処理する場合は、図23に示すように、分岐演算と、その他の演算処理とを全て同じプロセッサで実行する必要があるため、並列性を得ることはできず実行時間が大きい。
演算装置200を1つ備える半導体装置1で処理する場合は、図24に示すように分岐演算と演算処理とを並列に実行できる。そのため、条件分岐に要するコストを削減でき、従来のプロセッサに比べ高速に処理を実行することが可能となる。
制御装置100は、演算処理(B)の条件判定を実行するのに演算装置200の実行する(0)式が完了することが必要(決定開始条件のflagA)であるため、演算処理(A)が完了後、演算装置200の演算(0)が完了するまで待機する。また、演算処理(C)および演算処理(E)は決定開始条件が真であるため、他の演算処理を待つことなく次の演算処理を決定することができる。
また、演算装置200が1つしか存在しないため、識別情報=1および3の演算処理のように、処理開始条件でフラグが指定されている演算処理であっても、各演算処理を実行開始する時点では処理開始条件(それぞれflagBおよびflagCの入力)を満たしている。そのため、演算処理をすぐに実行することができる。
図1−2のように2つの演算装置200aおよび200bを備える場合は、図25に示すように、分岐処理と演算処理とを並列に実行するだけでなく、演算装置200aと演算装置200bとの間で演算処理を並列に実行可能となる。これにより、実行時間をさらに短縮することができる。図25の例では、演算装置200aによる識別情報=1の演算処理((0)、(1)、(2)式)および識別情報=3の演算処理((11)、(12)式)と、演算装置200bによる識別情報=2の演算処理((4)、(5)、(6)式)と、を並列に実行できる。
識別情報=2の演算処理は、処理開始条件がflagBであるため、演算装置200aが(1)式を完了するまで、演算装置200bは識別情報=2の演算処理を実行開始せずに待機する。同様に、識別情報=3の演算処理は、処理開始条件がflagCであるため、演算装置200aは演算装置200bが(5)式を完了するまで、識別情報=3を実行開始せずに待機する。
上記のように依存関係を解消したのちは、各演算処理を並列に実行可能であるため、(2)式と(4)式、(6)式と(11)式のように複数の演算装置200aおよびBで処理を並列に実行することで実行時間を短縮することが可能となる。
次に、図1−2のように複数の演算装置200aおよび200bを備える場合に、各演算装置200aおよび200bに演算処理を振り分ける方法について説明する。最初に、ソフトウェアによる静的な制御により振り分ける方法を説明する。
この場合は、例えば第1装置制御情報の次処理候補情報で指定される次処理の識別情報それぞれに対して、実行する演算装置200の識別子を付加する。これにより、実行する演算処理(次処理)に対して明示的に実行する演算装置200を指定することができる。図26は、図20のプログラムが図25のように動作する場合の第1装置制御情報の例を示した図である。図26の例では、識別情報=0および3の演算処理3は、演算装置200aが実行し、識別情報=1および2の演算処理は演算装置200bが実行することを示している。なお、図26の例では、演算装置200aおよび200bの識別子をそれぞれ「A」および「B」で表している。なお、図26は、一度に1つの演算装置200の処理のみ決定する例を示しているが、一度に複数の演算装置200の処理を決定するように構成してもも良い。
このように、第1装置制御情報により各演算処理を実行する演算装置200を指定することで、複数の演算装置200間で記憶装置103の内容(第1装置制御情報)が異なっても対応可能である。
次に、ハードウェアによる動的な制御により振り分ける方法を説明する。図27は、ハードウェアによる制御により振り分ける場合の半導体装置1−3の構成例を示すブロック図である。図27に示すように半導体装置1−3は、制御装置100−3と、演算装置200−3aおよび200−3bと、記憶装置300と、分散装置400と、を備えている。
制御装置100−3は、分散装置400に対して処理制御情報を入力する。分散装置400は、処理制御情報が入力されると、各演算装置200の動作状況に応じて、所定の判断基準により適切な演算装置200を選択し、選択した演算装置200に対して処理制御情報を出力する。例えば、分散装置400は、負荷の小さい演算装置200に処理制御情報を出力するという判断基準を用いる。この場合、分散装置400は、例えば演算装置200が実行中か停止中かを判断し、停止中の演算装置200に対して処理制御情報を出力する。
また、分散装置400は、演算装置200が処理制御情報を格納するメモリを保持している場合は、メモリに保持されている処理制御情報が少ない演算装置200に対して処理制御情報を出力するという判断基準を用いてもよい。このように負荷の小さい演算装置200に優先的に演算処理を割り当てることで、効率的な負荷分散が実現でき、処理性能の向上が期待できる。
また、負荷以外の判断基準を用いてもよい。例えば、演算によるデータの依存関係の強い演算処理を同じ演算装置200で実行するように割り当てることで、メモリへのアクセス回数を削減できる。また、必要に応じて演算処理の割当てに必要な情報を処理制御情報に付加してもよい。
このように動的な振り分け制御を行うことで、負荷に応じて最適な演算装置200で処理を実行することができる。全ての演算装置200に対して動的に演算処理が発行されるため、各演算装置200が同一の演算制御情報を保持する必要がある。すなわち、各演算装置200の記憶装置103の内容を全て統一する必要がある。その際に、マルチポートメモリや階層キャッシュ構造により記憶装置103を共有すれば、より少ないハードウェア資源で同一の演算制御情報の保持が可能となる。また、性能劣化を許容できる場合は、記憶装置103を共有メモリとし、複数の演算装置200からアクセスがあった場合には調停を行うことで、より少ない資源で演算制御情報の共有が可能である。
このように、本実施の形態にかかる半導体装置1は、演算装置と制御装置とを含む。実行中の演算処理に含まれる演算で条件分岐の判断に必要な情報が得られたときに、演算装置が、その情報を制御装置に出力する。制御装置は、この情報を参照して条件分岐制御を行う。これにより、制御装置による分岐演算と、演算装置による演算処理とを並列に実行できる。すなわち、分岐処理を含む処理をより効率的に実行することが可能となる。
なお、本発明は、上記実施の形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化することができる。また、上記実施の形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成することができる。例えば、実施の形態に示される全構成要素からいくつかの構成要素を削除してもよい。さらに、異なる実施の形態にわたる構成要素を適宜組み合わせても良い。