(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-28
(45)【発行日】2023-12-06
(54)【発明の名称】演算装置及び演算方法
(51)【国際特許分類】
G06F 9/38 20180101AFI20231129BHJP
G06F 15/173 20060101ALI20231129BHJP
H03K 19/177 20200101ALI20231129BHJP
【FI】
G06F9/38 310J
G06F15/173 685M
G06F9/38 310G
H03K19/177
(21)【出願番号】P 2022505966
(86)(22)【出願日】2021-03-03
(86)【国際出願番号】 JP2021008131
(87)【国際公開番号】W WO2021182222
(87)【国際公開日】2021-09-16
【審査請求日】2022-07-22
(31)【優先権主張番号】P 2020042169
(32)【優先日】2020-03-11
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】519084397
【氏名又は名称】株式会社エヌエスアイテクス
(73)【特許権者】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(74)【代理人】
【識別番号】100113549
【氏名又は名称】鈴木 守
(74)【代理人】
【識別番号】100115808
【氏名又は名称】加藤 真司
(74)【代理人】
【識別番号】100169199
【氏名又は名称】石本 貴幸
(72)【発明者】
【氏名】西村 成司
【審査官】三坂 敏夫
(56)【参考文献】
【文献】特開2007-166535(JP,A)
【文献】特開2006-040254(JP,A)
【文献】特開2016-103240(JP,A)
【文献】特開平11-259290(JP,A)
【文献】吉見 真聡 他,FPGAを用いた確率モデル生化学シミュレータ,情報処理学会論文誌,社団法人情報処理学会,2007年02月15日, 第48巻 No.SIG3(ACS17),第45頁-第58頁,ISSN:0387-5806
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30-9/42
G06F 15/173
H03K 19/177
(57)【特許請求の範囲】
【請求項1】
複数の種類の機能ユニット(12)を
それぞれ複数個備えるパイプラインを具備し、チェイニングによって演算を行う演算装置(10)であって、
命令を実行中でない前記機能ユニットの有無を判定する判定部(22)と、
前記何れかの機能ユニットが命令を実行している際に、前記命令を実行中でない前記機能ユニットに対して、前記何れかの機能ユニットによる命令実行と並行して実行可能な前記命令を実行させることで、より段数の小さいパイプラインに再構成する制御部(24)と、
を備える、演算装置。
【請求項2】
前記機能ユニットは、前記命令の実行状態を示すマスクレジスタ(30)を備え、
複数の他の前記機能ユニットによる演算結果を用いて次の前記命令を実行する前記機能ユニットは、複数の他の前記機能ユニットのマスクレジスタが前記命令の実行終了を示した後に次の前記命令を実行する、請求項1記載の演算装置。
【請求項3】
前記機能ユニットは、前記命令の実行中であるか否かを識別する識別子が設定され、
前記判定部は、前記識別子に基づいて、前記命令を実行中でない前記機能ユニットを判定する、
請求項1又は請求項2記載の演算装置。
【請求項4】
前記機能ユニットによる実行待ちの前記命令は記憶媒体(14)へ記憶され、
前記記憶媒体に記憶された前記命令を実行可能な前記機能ユニットが有った場合に、前記記憶媒体から前記命令が順次読み出されて前記機能ユニットによって実行される、
請求項1から請求項3記載の演算装置。
【請求項5】
複数の種類の機能を有する複数の機能ユニットを
それぞれ複数個備えるパイプラインを用いたチェイニングによる演算方法であって、
命令を実行中でない前記機能ユニットの有無を判定する第1工程と、
前記何れかの機能ユニットが命令を実行している際に、前記命令を実行中でない前記機能ユニットに対して、前記何れかの機能ユニットによる命令実行と並行して実行可能な前記命令を実行させることで、より段数の小さいパイプラインに再構成する第2工程と、
を有する、演算方法。
【発明の詳細な説明】
【関連出願への相互参照】
【0001】
本出願は、2020年3月11日に出願された特許出願番号2020-042169号に基づくものであって、その優先権の利益を主張するものであり、その特許出願のすべての内容が、参照により本明細書に組み入れられる。
【技術分野】
【0002】
本開示は、演算装置及び演算方法に関する。
【背景技術】
【0003】
従来から、命令を処理する演算器である機能ユニットを複数備え、入力される一連の命令に対して複数の機能ユニットでパイプライン処理(以下「多段演算パイプライン」ともいう。)を行なう演算装置が用いられている。
【0004】
例えば特許文献1には、乗算器MULと加算機ADD等の複数の機能ユニットによってパイプライン処理を行う構成が開示されている。特許文献1に記載の構成は、乗算器MULは同時に入力された値「a」「b」の対応する要素の組の各データを乗算して加算器ADDに順次出力し、加算器ADDは出力された乗算値と、前回の加算器ADDの出力とを順次加算している。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【0006】
ここで、多段演算パイプラインを用いたチェイニングによって命令(演算)を行う演算装置は、パイプラインの立ち上げや立ち下がりのオーバーヘッドを要し、加算や乗算等が組み合わさった複雑な演算を実行する際に、パイプラインの立ち上げ立ち下げを複数回行う場合があった。また、複雑な演算を実行する場合には、他の機能ユニットによる演算の終了を待ってから演算を行う機能ユニットが存在する場合があった。すなわち、パイプラインを用いたチェイニングでは効率的な演算を行えない場合があった。
【0007】
本開示は、パイプラインを用いたチェイニングによる演算をより効率的に行える、演算装置及び演算方法を提供することを目的とする。
【0008】
本開示の一態様の演算装置は、同じ機能を有する複数の機能ユニットを含むパイプラインを具備し、チェイニングによって演算を行う演算装置であって、命令を実行中でない前記機能ユニットの有無を判定する判定部と、前記何れかの機能ユニットが命令を実行している際に、前記命令を実行中でない前記機能ユニットに対して、前記何れかの機能ユニットによる命令実行と並行して実行可能な前記命令を実行させる制御部と、を備える。
【0009】
本発明によれば、パイプラインを用いたチェイニングによる演算をより効率的に行える。
【図面の簡単な説明】
【0010】
本開示についての上記目的およびその他の目的、特徴や利点は、添付の図面を参照しながら下記の詳細な記述により、より明確になる。その図面は、
【
図1】
図1は、実施形態の演算装置の概略構成図である。
【
図2】
図2は、実施形態のチェイニングを示す模式図である。
【
図3】
図3は、実施形態のチェイニングを示す模式図である。
【
図4】
図4は、実施形態のチェイニング演算処理の流れを示すフローチャートである。
【発明を実施するための形態】
【0011】
以下、図面を参照して本開示の実施形態を説明する。なお、以下に説明する実施形態は、本開示を実施する場合の一例を示すものであって、本開示を以下に説明する具体的構成に限定するものではない。本開示の実施にあたっては、実施形態に応じた具体的構成が適宜採用されてよい。
【0012】
図1は、本実施形態の演算装置10の概略構成図である。本実施形態の演算装置10は、複数の機能ユニット12を含むパイプラインを具備し、チェイニングによって演算を行うものである。
【0013】
機能ユニット12は、例えば、メモリからレジスタへデータをコピーするLD、レジスタからメモリにデータをコピーするST、加算機能を有するADD(加算器)、乗算機能を有するMUL(乗算器)、除算機能を有するDIV(除算器)等の演算器である。これら複数の機能ユニット12は、パイプライン処理を実行するマルチパイプベクトル演算器(以下「ベクトル演算器」という。)20に備えられる。
【0014】
次に、本実施形態の演算装置10によるパイプライン処理について説明する。
【0015】
まず、一例として、パイプラインの段数(以下「パイプライン段数」という。)を4段とし、機能ユニット12の数を5つ(LD、ST、ADD、MUL、DIV)で構成されるベクトル演算器20を想定する。以下の説明では、パイプライン段数を4段とするベクトル演算器20のハードウエア状態をディフォルトモードという。
【0016】
このディフォルトモードは、パイプライン段数をより少なくしたモード1とモード2に再構成することが可能である。モード1は、パイプライン段数が2段であり、機能ユニット12の数が8つ(LD、ST、2つのADD、2つのMUL、2つのDIV)である。モード2は、パイプライン段数が1段であり、機能ユニット12の数が14個(LD、ST、4つのADD、4つのMUL、4つのDIV)である。このように、ディフォルトモードよりも段数を少なくしたモード1やモード2では、ADD、MUL、DIV等の同じ機能を有する機能ユニット12が複数存在する。
【0017】
なお、本実施形態の演算装置10は、一例として、ハードウエアのモード(パイプライン段数と機能ユニット12の数の組み合わせ)の全バリエーションが予め定義されており、現在のハードウエアのモードはフラグ値として専用のレジスタ(モードレジスタ)に保持される。そして、ハードウエアのモードは専用の制御命令により設定される。
【0018】
このように、本実施形態の演算装置10は、ディフォルトモードから、同じ機能を有する複数の機能ユニット12を含んでパイプラインを再構成可能とされている。そして、本実施形態の演算装置10は、機能ユニット12が命令を実行している場合に、命令を実行中でない他の機能ユニット12に対して並行して実行可能な命令を実行させる。このため、本実施形態の演算装置10は、ある機能ユニット12が命令を実行している場合に、他の機能ユニット12が命令を実行しているか否かを判定する機能(Out-of-Order機能)を有している。
【0019】
Out-of-Order機能を実現するために、本実施形態の機能ユニット12は、命令の実行中であるか否かを識別する識別子を保持するステートレジスタを有している。演算装置10は、このステートレジスタに基づいて、命令を実行中でない機能ユニット12を判定し、機能ユニット12毎に命令の割り当てを行う。本実施形態では、一例として、命令を実行中である機能ユニット12のステートレジスタは“1”であり、命令を実行中でない機能ユニット12のステートレジスタは“0”である。
【0020】
なお、演算に寄与する機能ユニット12の総数(パイプライン段数と対応する機能ユニット12の数との積)が一定であるので、ステートレジスタは、機能ユニット12の総数を保持するために十分なbit数があればよい。上記例では、パイプライン段数が最大で4段であり、同じ機能を有する機能ユニット12が3種類(ADD、MUL、DIV)であるので、ステートレジスタは3×4=12bitでよい。なお、Out-of-Order機能を実行するためには、LD及びSTの機能ユニット12が実行中か否かを判定する必要があるのでLD及びSTも1bitずつのステートレジスタを有する。但し、LD及びSTのステートレジスタは、パイプライン段数には関係なく1bitずつであればよい。
【0021】
次に、一例として、
図2を参照して、モード1で“((A+B)+C)×D”という演算をチェイニングする場合について説明する。モード1では、上述のように、ADD、MUL、DIVの機能ユニット12の数は各々2つである。なお、
図2及び後述の
図3における各値(A,B,C,D)に対応するベクトルレジスタ幅は固定されており、例えば64bitや32bitである。
【0022】
モード1では、まず“A+B”の演算結果をレジスタ(中間レジスタ)へ書き出す処理(ADD命令)が発行される。ADD命令の発行時点では、何れの機能ユニット12も未だ命令を実行中でないので、全ての機能ユニット12のステートレジスタは“0”である。ここでADD命令を発行することにより、1つ目のADDに対応する機能ユニット12のステートレジスタを“1”に設定する。
【0023】
そして、次の命令サイクルでは、最初のADD命令の完了を待たず、最初のADD命令の結果に対して“C”を加算するADD命令が発行される。2つ目のADDのステートレジスタは“0”なので、命令を実行中でないADDがあると判断され、2つ目のADDのステートレジスタを“1”に設定し、最初のADD命令とのチェイニングが行われる。
【0024】
さらに、次の命令サイクルでは先行の2つのADD命令の終了を待たずに、“(A+B)+C”に対する“D”の乗算命令が発行される。このときMULのステートレジスタは“0”なので、1つ目のMULのステートレジスタを“1”に設定し、先行の2つのADD命令とのチェイニングが行われる。
【0025】
次に、
図3を参照して“(A+B)×(C+D)”という演算をモード1でチェイニングする場合について説明する。まず“(A+B)”と“(C+D)”との演算は各々独立して実行が可能である。このため“(A+B)”の演算を一つのADDが行うと共に、“(C+D)”の演算命令は、もう他のADDによって演算が行われる。すなわち、これらの2つのADD命令は互いの終了を待つことなく同時に発行される。従って、モード1の場合にはハードウエアのリソースとしてこれら2つのADD命令を同時に割り当て可能である。
【0026】
図3の例では、MULの機能ユニット12が一つ空きとなる。ここで次の命令(後続命令)に上記のチェイニング演算とは依存関係のないMUL命令がある場合には、そのMUL命令を同時実行できる。結果として演算機能ユニットの稼働率をディフォルトモードよりも高くすることができ、従来と同じハードウエアリソース(演算器の数)でもより高い実効性能を発揮することが可能となる。
【0027】
また、本実施形態の機能ユニット12は、命令の実行状態を示すマスクレジスタ30(
図2,3参照)を備える。そして、複数の他の機能ユニット12による演算結果を用いて次の命令を実行する機能ユニット12は、複数の他の機能ユニット12のマスクレジスタ30が命令の実行終了を示した後に次の命令を実行する。
【0028】
より具体的にはマスクレジスタ30は、ベクトルレジスタ長に対応して設けられており、演算の進行度合いに応じて“0”が“1”に書き換えられる。各機能ユニット12における演算が完了すると、マスクレジスタ30は全て“1”とされる。そして、先の命令を実行した複数の機能ユニット12のマスクレジスタ30のAND(論理積)によって、当該複数の機能ユニット12による演算が完了したか否かが判定される。すなわち、先の命令を実行する複数の機能ユニット12による演算が終了するまで、次の命令を実行する機能ユニット12は演算を行わない。
【0029】
すなわち、
図3の例では、“A+B”の演算が完了するとレジスタ領域が全て“1”となり、“C+D”の演算が完了するとレジスタ領域が全て“1”となる。そして、“A+B”の演算及び“C+D”の演算が完了した場合に、“(A+B)×(C+D)”の演算が開始される。
【0030】
これにより、複数の機能ユニット12が先の命令を非同期で行っても、次の命令を実行する機能ユニット12は、複数の機能ユニット12による命令の実行完了を待って演算を行うことになるので、エラーを生じさせることなく次の命令の実行が可能となる。
【0031】
なお、先の命令を実行するパイプラインの段数よりも次の命令を実行するパイプラインの段数が多い場合、例えば先のパイプラインが2段であり、後のパイプラインが4段の場合にも、上述と同様にマスクレジスタ30によって先のパイプラインによる命令(演算)の進行度合いが判定される。このため、異なる段数のパイプラインの組み合わせによってチェイニングによる演算が行われる場合であっても、エラーを生じさせることなく命令の実行が可能となる。
【0032】
このように、本実施形態の演算装置10は、4段のパイプラインをそれよりも段数の小さいパイプライン(2段のパイプライン)に再構成することによって、パイプラインの立ち上げ、立ち下がりのオーバーヘッドを少なくできる。このとき、2段のパイプラインでは、同じ機能を有する機能ユニット12を複数(少なくとも2つ)備えることになる。
【0033】
具体的には、上述の4段のパイプラインによって“((A+B)+C)×D”という演算を行う場合、“A+B=E”の演算をチェイニングで行った後に、“(E+C)×D”を新たなチェイニングで行う必要がある。このため、4段のパイプラインでは、パイプラインの立ち上げと立ち下がりとを2度行う必要があり、オーバーヘッドが2回分必要となる。また、“A+B=E”の演算結果を一旦メモリに記憶(ストア)させ、“(E+C)×D”の演算を行う場合に、演算結果である“E”をメモリから読み出す必要があり、処理が非効率であった。
【0034】
一方、2段のパイプラインでは、同じ機能を有する機能ユニット12(ADD、MUL、DIV)を2つずつ有することとなる。そして、ある機能ユニット12が命令を実行している際に、命令を実行中でない他の機能ユニット12の有無を判定し(Out-of-Order機能)、命令を実行中でない他の機能ユニット12に対して、ある機能ユニット12による命令実行と並行して実行可能な命令を実行させる。
【0035】
これにより、2段のパイプラインでは、“((A+B)+C)×D”の演算を一度のチェイニングによって行うことができ、パイプラインの立ち上げと立ち下がりと(オーバーヘッド)が1度で済む。また、2段のパイプラインでは、4段のパイプラインで行ったような演算結果を一旦メモリに記憶させるという処理は不要なため、より効率的な処理が可能となる。
【0036】
このことから、本実施形態のようにパイプラインの段数を少なくし、同じ機能を有する複数の機能ユニット12を含むパイプラインとすることで、パイプラインの立ち上げと立ち下がりとに要するオーバーヘッドの時間を削減でき、演算の効率化が可能となる。
【0037】
このようなパイプラインによるチェイニングを実行するために、
図1に示されるように本実施形態の演算装置10は、実行判定部22と制御部24とを備える。
【0038】
実行判定部22は、Out-of-Order機能を実行する構成要素であり、命令を実行中でない機能ユニット12の有無を判定する。なお、実行判定部22は、ステートレジスタに基づいて、命令を実行中でない機能ユニット12を判定する。
【0039】
制御部24は、命令を実行中でない機能ユニット12に対して実行可能な命令を実行させる。本実施形態の制御部24は、何れかの機能ユニット12が命令を実行している際に、命令を実行中でない機能ユニット12に対して、何れかの機能ユニット12による命令実行と並行して実行可能な命令を実行させる。
【0040】
なお、演算装置10は、パイプラインの段数に応じた、換言するとモードに応じた制御を行う。例えば、4段のパイプライン(ディフォルトモード)では、Out-of-Order機能を実行せずに、2段又は1段のパイプラン(モード1又はモード2)ではOut-of-Order機能を実行する。換言すると、Out-of-Order機能は、同じ機能を有する複数の機能ユニット12を備えるパイプラインに対して実行される。なお、モードは、ベクトル演算器20に実行させる一連の演算に応じて適宜選択される。
【0041】
また、これに限らず、ディフォルトモードであってもOut-of-Order機能を実行するとしてもよい。すなわち、同じ機能を有する機能ユニット12だけでなく、異なる機能ユニット12(LD、ST、MUL、ADD、DIV)全てにおいて依存関係にない機能ユニット12は同時に実行可能としてもよい。
【0042】
なお、本実施形態の演算装置10は、機能ユニット12による実行待ちの命令を命令待機バッファ14に記憶させる。そして、命令待機バッファ14に記憶された命令を実行可能な機能ユニット12が有った場合に、命令待機バッファ14から命令が順次読み出されて機能ユニット12によって実行される。これにより、命令を実行中でない機能ユニット12へ命令を効率的に割り当てることを可能とする。
【0043】
図4は、Out-of-Order機能を実行するチェイニング演算処理の流れを示すフローチャートである。このチェイニング演算処理は、演算装置10が備える記録媒体に格納されたプログラムによって実行される。このプログラムが実行されることで、プログラムに対応する方法が実行される。
【0044】
なお、
図4に示されるチェイニング演算処理はOut-of-Order機能を実行するものであるため、このチェイニング演算処理の実行前にモードレジスタを確認することで、Out-of-Order機能を実行可能なモードであるか否かが判定される。Out-of-Order機能を実行可能なモードでない場合は、Out-of-Order機能を実行しない通常のチェイニング演算処理が実行される。または、Out-of-Order機能を実行可能なモードに再構成される。
【0045】
まず、ステップS100では、実行判定部22が各機能ユニット12のステートレジスタを確認し、命令を実行中でない機能ユニット12の有無を判定する(Out-of-Order機能)。なお、ここでいう機能ユニット12の有無とは、与えられた命令を実行可能な機能ユニット12である。例えば与えられた命令がADD命令である場合には、このADD命令を実行可能な機能ユニット12の有無が実行判定部22によって判定される。
【0046】
次のステップS102では、命令を実行中でない機能ユニット12が有る場合は、ステップS106へ移行する一方、命令を実行しないない機能ユニット12が無い場合は、ステップS104へ移行する。
【0047】
ステップS104では、命令を実行できる機能ユニット12が無いため、当該命令を実行待ちの命令として命令待機バッファ14へキューイングし、ステップS100へ戻る。
【0048】
ステップS106では、制御部24が、命令を実行中でない機能ユニット12へ命令の割り当てを行う。
【0049】
次のステップS108では、制御部24が、命令が割り当てられた機能ユニット12のステートレジスタを“1”に設定する。
【0050】
次のステップS110では、機能ユニット12が割り当てられた命令を実行する。
【0051】
次のステップS112では、制御部24が、割り当てられた命令の実行を機能ユニット12が完了したか否かを判定し、肯定判定の場合はステップS114へ移行し、否定判定の場合はステップS116へ移行する。なお、命令を実行している機能ユニット12が複数有る場合、ステップS112では各々の機能ユニット12毎に命令の実行が完了したか否かを判定する。
【0052】
ステップS114では、制御部24が、命令を完了した機能ユニット12のステートレジスタを“0”に設定し、ステップS116へ移行する。
【0053】
ステップS116では、次の命令の有無を制御部24が判定し、次の命令がある場合にはステップS100へ戻り、次の命令に対応させて各ステップを実行する。
【0054】
一方、ステップS116において次の命令がないと判定された場合には、入力された一連の演算命令の全てが完了したことになるので、本チェイニングを終了する。
【0055】
このように、本実施形態の演算装置10は、何れかの機能ユニット12が命令を実行している際に、命令を実行中でない機能ユニット12に対して、何れかの機能ユニット12による命令実行と並行して実行可能な命令を実行させる。これにより、本実施形態の演算装置10は、パイプラインを用いたチェイニングによる演算をより効率的に行える。
【0056】
以上、本開示を、上記実施形態を用いて説明したが、本開示の技術的範囲は上記実施形態に記載の範囲には限定されない。開示の要旨を逸脱しない範囲で上記実施形態に多様な変更又は改良を加えることができ、該変更又は改良を加えた形態も本開示の技術的範囲に含まれる。
【0057】
例えば、上記実施形態では、4段のパイプラインを2段のパイプラインや1段のパイプラインに再構成する形態について説明したが、本開示は、これに限定されるものではない。例えば、5段やそれ以上の段数のパイプラインをより少ない段数のパイプラインに再構成してもよい。また、パイプラインの再構成という概念を有さず、ベクトル演算器20は、例えば、2段で固定されたパイプラインで構成されてもよい。