(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-11-30
(45)【発行日】2023-12-08
(54)【発明の名称】演算装置および演算システム
(51)【国際特許分類】
G06F 7/523 20060101AFI20231201BHJP
【FI】
G06F7/523
(21)【出願番号】P 2020509352
(86)(22)【出願日】2019-03-29
(86)【国際出願番号】 JP2019014330
(87)【国際公開番号】W WO2019189878
(87)【国際公開日】2019-10-03
【審査請求日】2021-12-16
(31)【優先権主張番号】P 2018069568
(32)【優先日】2018-03-30
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】503359821
【氏名又は名称】国立研究開発法人理化学研究所
(74)【代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】牧野 淳一郎
(72)【発明者】
【氏名】似鳥 啓吾
(72)【発明者】
【氏名】坪内 美幸
【審査官】田川 泰宏
(56)【参考文献】
【文献】特開2000-081966(JP,A)
【文献】特開平07-084762(JP,A)
【文献】特開2003-223316(JP,A)
【文献】特開平11-095981(JP,A)
【文献】米国特許第08307023(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/523
(57)【特許請求の範囲】
【請求項1】
可変精度で乗算を実行する演算装置であって、
複数の乗算器を有し、前記複数の乗算器が演算精度モードに応じて1または2以上の乗算器毎に分割されて1または複数のグループのそれぞれに割り当てられ、各グループにおいて各乗算器が演算精度モードに応じて当該グループに対する乗数の少なくとも一部の桁範囲である個別乗数および当該グループに対する被乗数の少なくとも一部の桁範囲である個別被乗数を乗算する乗算部と、
複数の加算器を有し、前記複数の加算器が演算精度モードに応じて1または2以上の加算器毎に分割されて前記1または複数のグループのそれぞれに割り当てられ、各グループに割り当てられた前記1または2以上の加算器が当該グループに割り当てられた各乗算器による各乗算結果を加算して前記乗数および前記被乗数の積を出力する加算部と、
演算精度モードに応じて、前記1または複数のグループのそれぞれについて、各乗算器による各乗算結果を、前記1また2以上の加算器における当該乗算結果を加えるべき桁位置へと入力させる第1接続切替器と
を備え、
少なくとも1つの演算精度モードにおいて、前記複数の乗算器および前記複数の加算器は2以上のグループに割り当てられ、前記2以上のグループのそれぞれについて前記乗数および前記被乗数の積を、複数のサイクルを用いて演算する
演算装置。
【請求項2】
前記複数の乗算器のそれぞれは、前記個別乗数および前記個別被乗数を乗算して各桁の和データおよび各桁からの桁上げデータを含む前記乗算結果を出力する請求項1に記載の演算装置。
【請求項3】
前記複数の乗算器のそれぞれは、1単位ビット長の前記個別乗数および前記個別被乗数を乗算して2単位ビット長の前記乗算結果を出力し、
前記複数の加算器のそれぞれは、2単位ビット長の複数の入力データを加算して2単位ビット長の和、および前記演算精度モードに応じて上位桁への桁上りを出力する
請求項1または2に記載の演算装置。
【請求項4】
1単位ビット長の前記乗数および前記被乗数を乗算する演算精度モードにおいて、
前記複数の乗算器は、各々が1個の乗算器を含む前記複数のグループに割り当てられ、
各グループに割り当てられた乗算器は、当該グループに割り当てられた1単位ビット長の前記乗数および前記被乗数を乗算する
請求項1から3のいずれか一項に記載の演算装置。
【請求項5】
2単位ビット長以上の前記乗数および前記被乗数を乗算する少なくとも1つの演算精度モードにおいて、
前記1または複数のグループのそれぞれについて、
前記1または2以上の乗算器は、サイクル毎に、前記乗数のうち各乗算器が担当する桁範囲の前記個別乗数と、前記被乗数におけるサイクル毎に上位桁から順に1単位ビット長ずつ選択された前記個別被乗数とを入力して、サイクル毎にそれぞれの前記個別乗数および前記個別被乗数の部分積を前記乗算結果として出力し、
前記第1接続切替器は、サイクル毎に、前記乗数における最下位側の桁範囲の前記個別乗数および前記個別被乗数の前記部分積が前記1または2以上の加算器における最下位の桁範囲に対応するように、前記1または2以上の乗算器が出力するそれぞれの前記部分積をシフトして前記1または2以上の加算器に入力させて中間結果に加算させ、
前記演算装置は、前記1または複数のグループのそれぞれについて、サイクル毎に、前記中間結果を上位側に1単位ビット長シフトさせて前記1または2以上の加算器へと入力させる第2接続切替器を更に備える
請求項1から3のいずれか一項に記載の演算装置。
【請求項6】
2単位ビット長以上の前記乗数および前記被乗数を乗算する少なくとも1つの演算精度モードにおいて、
前記1または複数のグループのそれぞれについて、
前記1または2以上の乗算器は、サイクル毎に、前記乗数のうち各乗算器が担当する桁範囲の前記個別乗数と、前記被乗数におけるサイクル毎に下位桁から順に1単位ビット長ずつ選択された前記個別被乗数とを入力して、サイクル毎にそれぞれの前記個別乗数および前記個別被乗数の部分積を前記乗算結果として出力し、
前記第1接続切替器は、サイクル毎に、前記乗数における最上位側の桁範囲の前記個別乗数および前記個別被乗数の前記部分積が前記1または2以上の加算器における最上位の桁範囲に対応するように、前記1または2以上の乗算器が出力するそれぞれの前記部分積をシフトして前記1または2以上の加算器に入力させて中間結果に加算させ、
前記演算装置は、前記1または複数のグループのそれぞれについて、サイクル毎に、前記中間結果を下位側に1単位ビット長シフトさせて前記1または2以上の加算器へと入力させる第2接続切替器を更に備える
請求項1から3のいずれか一項に記載の演算装置。
【請求項7】
前記加算部は、前記複数の加算器のそれぞれに対応してそれぞれ設けられ、前記中間結果における各加算器に対応する桁範囲をそれぞれ保持する複数の中間レジスタを有する請求項
5または6に記載の演算装置。
【請求項8】
前記複数の加算器のそれぞれは、各桁の和データおよび各桁からの桁上げデータを含む加算結果を出力する第1加算要素を含み、
前記複数の中間レジスタのそれぞれは、前記中間結果における対応する第1加算要素が出力する桁範囲の和データおよび桁上げデータを保持し、
前記加算部は、前記複数の加算器のそれぞれに対応してそれぞれ設けられる複数の第2加算要素であって、演算精度モードに応じて1または2以上の第2加算要素毎に分割されて前記1または複数のグループのそれぞれに割り当てられ、各グループにおいて1または2以上の前記第1加算要素が出力する和データおよび桁上げデータを加算して前記乗数および前記被乗数の積として出力する複数の第2加算要素を更に有する
請求項7に記載の演算装置。
【請求項9】
可変精度で乗算を実行する演算装置であって、
各々が1単位ビット長の2つの数を乗算して各桁の和データおよび各桁からの桁上がりデータを含む乗算結果を出力する複数の乗算器を有する乗算部と、
各々が前記複数の乗算器のうちの少なくとも1つの乗算器による前記乗算結果を含む少なくとも2つの入力データを加算する複数の加算器を有する加算部と、
演算精度モードに応じて、前記複数の乗算器および前記複数の加算器を、1以上の乗算器および1以上の加算器を含み互いに異なる乗数および被乗数を乗算するグループ毎に分割する分割数と、前記グループにおいて前記1以上の乗算器および前記1以上の加算器を用いて前記乗数および前記被乗数を乗算するのに用いるサイクル数とを選択するモード選択部と
を備え、
少なくとも1つの演算精度モードにおいて、前記複数の乗算器および前記複数の加算器は2以上のグループに割り当てられ、前記2以上のグループのそれぞれについて前記乗数および前記被乗数の積を、複数のサイクルを用いて演算する
演算装置。
【請求項10】
前記モード選択部は、n単位ビット長(nは自然数)の前記乗数および前記被乗数を乗算する演算精度モードにおいて、前記複数の乗算器および前記複数の加算器を、n個の乗算器およびn個の加算器をそれぞれ含む少なくとも1つの前記グループに分割し、
前記少なくとも1つのグループのそれぞれにおける前記n個の乗算器は、前記グループ毎の前記乗数に含まれる1単位ビット長の桁範囲ずつであるn個の個別乗数のそれぞれと、前記被乗数に含まれる1単位ビット長の桁範囲ずつであるn個の個別被乗数のそれぞれとの乗算を、nサイクルの間、1サイクルにn組ずつ乗算し、
前記少なくとも1つのグループのそれぞれにおける前記n個の加算器は組み合わされて、nサイクルの間、サイクル毎に同じグループの前記n個の乗算器からの各乗算結果を、前記乗数および前記被乗数の積の中間結果における各乗算結果に応じた桁位置に加算していく、
請求項9に記載の演算装置。
【請求項11】
請求項1から10のいずれか一項に記載の演算装置を複数個備える演算ユニットと、
前記演算ユニットを共有する複数のプロセッサと
を備える演算システム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、演算装置および演算システムに関し、特に、可変精度で乗算を実行する演算装置および演算システムに関する。
【背景技術】
【0002】
従来から、倍精度の乗算を実行する装置が知られている。たとえば、特許文献1に記載の演算装置は、2つの乗算器12,13と、ALU37と、アキュムレータ24,25とを備える。ALU37の入力部には、乗算器12,13の乗算結果と、アキュムレータ24,25の出力が与えられる。
【先行技術文献】
【特許文献】
【0003】
【解決しようとする課題】
【0004】
しかしながら、特許文献1に記載の装置は、2つの乗算器12,13が最終的な乗算結果まで求めるために回路規模が大きく、その結果電力効率が悪いという問題がある。
【0005】
さらに、近年では、1つの精度の乗算だけでなく、可変精度の乗算を小さな回路規模で実行することができる演算装置が望まれている。
【0006】
一般に、単精度の乗算に必要なトランジスタの数は、倍精度の乗算に必要なトランジスタの数の1/4以下であり、半精度の乗算に必要なトランジスタの数は、倍精度の乗算に必要なトランジスタの数の1/16以下である。したがって、例えば単精度と倍精度を切替えて実行するような一般的な演算装置は、回路規模としては倍精度演算1つ分、または単精度演算4つ分を実行することができるようなトランジスタ数を有する。このような一般的な演算装置では、単精度演算時に使用されるトランジスタが、倍精度演算に使用されるトランジスタの1/4以下となる。また、倍精度演算1つまたは単精度演算2つを切替可能とすることも考えられるが、その場合においても単精度演算時に使用されるトランジスタが、倍精度演算に使用されるトランジスタの1/2以下となる。つまり、このような演算装置は、倍精度演算のために大きな回路規模を有するにも係らず、単精度演算を実行するときには、演算装置内のトランジスタの3/4または1/2以上が使用されずに、無駄となる。
【0007】
それゆえに、本発明の目的は、小さな回路規模で、複数の精度の乗算をそれぞれ効率良く実行することができる演算装置および演算システムを提供することである。
【一般的開示】
【0008】
本発明の第1態様においては、可変精度で乗算を実行する演算装置を提供する。演算装置は、複数の乗算器を有し、複数の乗算器が演算精度モードに応じて1または2以上の乗算器毎に分割されて1または複数のグループのそれぞれに割り当てられ、各グループにおいて各乗算器が演算精度モードに応じて当該グループに対する乗数の少なくとも一部の桁範囲である個別乗数および当該グループに対する被乗数の少なくとも一部の桁範囲である個別被乗数を乗算する乗算部を備えてよい。演算装置は、複数の加算器を有し、複数の加算器が演算精度モードに応じて1または2以上の加算器毎に分割されて1または複数のグループのそれぞれに割り当てられ、各グループに割り当てられた1または2以上の加算器が当該グループに割り当てられた各乗算器による各乗算結果を加算して乗数および被乗数の積を出力する加算部を備えてよい。演算装置は、演算精度モードに応じて、1または複数のグループのそれぞれについて、各乗算器による各乗算結果を、1また2以上の加算器における当該乗算結果を加えるべき桁位置へと入力させる第1接続切替器を備えてよい。
【0009】
複数の乗算器のそれぞれは、個別乗数および個別被乗数を乗算して各桁の和データおよび各桁からの桁上げデータを含む乗算結果を出力してよい。
【0010】
複数の乗算器のそれぞれは、1単位ビット長の個別乗数および個別被乗数を乗算して2単位ビット長の乗算結果を出力してよい。複数の加算器のそれぞれは、2単位ビット長の複数の入力データを加算して2単位ビット長の和、および演算精度モードに応じて上位桁への桁上りを出力してよい。
【0011】
2単位ビット長以上の乗数および被乗数を乗算する少なくとも1つの演算精度モードにおいて、1または複数のグループのそれぞれについて、1または2以上の乗算器は、サイクル毎に、乗数のうち各乗算器が担当する桁範囲の個別乗数と、被乗数におけるサイクル毎に上位桁から順に1単位ビット長ずつ選択された個別被乗数とを入力して、サイクル毎にそれぞれの個別乗数および個別被乗数の部分積を乗算結果として出力してよい。第1接続切替器は、サイクル毎に、乗数における最下位側の桁範囲の個別乗数および個別被乗数の部分積が1または2以上の加算器における最下位の桁範囲に対応するように、1または2以上の乗算器が出力するそれぞれの部分積をシフトして1または2以上の加算器に入力させて中間結果に加算させてよい。演算装置は、1または複数のグループのそれぞれについて、サイクル毎に、中間結果を上位側に1単位ビット長シフトさせて1または2以上の加算器へと入力させる第2接続切替器を更に備えてよい。
【0012】
2単位ビット長以上の少なくとも1つの演算精度モードにおいて、複数の乗算器および複数の加算器は2以上のグループに割り当てられてよい。演算装置は、2以上のグループのそれぞれについて乗数および被乗数の積を、複数のサイクルを用いて演算してよい。
【0013】
1単位ビット長の乗数および被乗数を乗算する演算精度モードにおいて、複数の乗算器は、各々が1個の乗算器を含む複数のグループに割り当てられ、各グループに割り当てられた乗算器は、当該グループに割り当てられた1単位ビット長の乗数および被乗数を乗算してよい。
【0014】
加算部は、複数の加算器のそれぞれに対応してそれぞれ設けられ、中間結果における各加算器に対応する桁範囲をそれぞれ保持する複数の中間レジスタを有してよい。
【0015】
複数の加算器のそれぞれは、各桁の和データおよび各桁からの桁上げデータを含む加算結果を出力する第1加算要素を含んでよい。複数の中間レジスタのそれぞれは、中間結果における対応する第1加算要素が出力する桁範囲の和データおよび桁上げデータを保持してよい。加算部は、複数の加算器のそれぞれに対応してそれぞれ設けられる複数の第2加算要素であって、演算精度モードに応じて1または2以上の第2加算要素毎に分割されて1または複数のグループのそれぞれに割り当てられ、各グループにおいて1または2以上の第1加算要素が出力する和データおよび桁上げデータを加算して乗数および被乗数の積として出力する複数の第2加算要素を更に有してよい。
【0016】
本発明の第2態様においては、可変精度で乗算を実行する演算装置を提供する。演算装置は、各々が1単位ビット長の2つの数を乗算して各桁の和データおよび各桁からの桁上がりデータを含む乗算結果を出力する複数の乗算器を有する乗算部を備えてよい。演算装置は、各々が複数の乗算器のうちの少なくとも1つの乗算器による乗算結果を含む少なくとも2つの入力データを加算する複数の加算器を有する加算部を備えてよい。演算装置は、演算精度モードに応じて、複数の乗算器および複数の加算器を、1以上の乗算器および1以上の加算器を含み互いに異なる乗数および被乗数を乗算するグループ毎に分割する分割数と、グループにおいて1以上の乗算器および1以上の加算器を用いて乗数および被乗数を乗算するのに用いるサイクル数とを選択するモード選択部を備えてよい。
【0017】
モード選択部は、n単位ビット長(nは自然数)の乗数および被乗数を乗算する演算精度モードにおいて、複数の乗算器および複数の加算器を、n個の乗算器およびn個の加算器をそれぞれ含む少なくとも1つのグループに分割してよい。少なくとも1つのグループのそれぞれにおけるn個の乗算器は、グループ毎の乗数に含まれる1単位ビット長の桁範囲ずつであるn個の個別乗数のそれぞれと、被乗数に含まれる1単位ビット長の桁範囲ずつであるn個の個別被乗数のそれぞれとの乗算を、nサイクルの間、1サイクルにn組ずつ乗算してよい。少なくとも1つのグループのそれぞれにおけるn個の加算器は組み合わされて、nサイクルの間、サイクル毎に同じグループのn個の乗算器からの各乗算結果を、乗数および被乗数の積の中間結果における各乗算結果に応じた桁位置に加算していってよい。
【0018】
本発明の第3態様においては、可変精度で乗算を実行する演算装置であって、各々が、2つの入力データの乗算結果の1段前の和信号および桁上げ信号を出力するように構成される複数の乗算器と、複数の加算器と、各々が、対応する加算器の加算結果を保持するように構成される複数のレジスタと、複数の出力端子と、演算精度モードに応じて、前記複数の乗算器から出力される複数の和信号および複数の桁上げ信号を構成する複数の1単位ビット長のデータの出力先を前記複数の加算器の複数の入力の複数のビット位置の中のいずれかに切り替えるように構成される第1の切替器と、前記演算精度モードに応じて、前記複数のレジスタに保持されている複数の加算結果を構成する複数の1単位ビット長のデータの出力先を前記複数の加算器の複数の入力の複数のビット位置の中のいずれかに切り替え、または前記レジスタに保持されている複数の加算結果の出力先を前記複数の出力端子のいずれかに切り替えるように構成される第2の切替器とを備える演算装置を提供する。
【0019】
本発明の第4態様においては、可変精度で乗算を実行する演算装置であって、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第1の和信号および第1の桁上げ信号を出力するように構成される第1の乗算器と、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第2の和信号および第2の桁上げ信号を出力するように構成される第2の乗算器と、複数の2単位ビット長のデータの加算を実行するようにそれぞれ構成される第1および第2の加算器と、前記第1の加算器の第1の加算結果および前記第2の加算器の第2の加算結果をそれぞれ保持するように構成される第1および第2のレジスタと、第1および第2の出力端子と、演算精度モードに応じて、前記第1の乗算器から出力される前記第1の和信号および前記第1の桁上げ信号と、前記第2の乗算器から出力される前記第2の和信号および前記第2の桁上げ信号とをそれぞれ構成する複数の1単位ビット長のデータの出力先を前記第1の加算器および前記第2の加算器の複数の入力の複数のビット位置の中のいずれかに切り替えるように構成される第1の接続切替器と、前記演算精度モードに応じて、前記第1のレジスタ内の前記第1の加算結果および前記第2のレジスタ内の前記第2の加算結果をそれぞれ構成する複数の1単位ビット長のデータの出力先を前記第1の加算器および前記第2の加算器の複数の入力の複数のビット位置の中のいずれかに切替え、または前記第1のレジスタ内の前記第1の加算結果の出力先を前記第1の出力端子に切り替えるとともに前記第2のレジスタ内の前記第2の加算結果の出力先を前記第2の出力端子に切り替えるように構成される第2の接続切替器とを備える演算装置を提供する。
【0020】
本発明の第5態様においては、可変精度で乗算を実行する演算装置であって、各々が、2つの入力データの乗算結果の1段前の和信号および桁上げ信号を出力する複数の乗算器と、各々が、加算結果の1段前の和信号および桁上げ信号を出力するように構成される複数の第1段加算器と、各々が、対応する前記第1段加算器から出力される前記和信号を保持するように構成される複数の和信号保持レジスタと、各々が、対応する前記第1段加算器から出力される前記桁上げ信号を保持するように構成される複数の桁上げ信号保持レジスタと、各々が、入力される和信号と桁上げ信号とを加算するように構成される複数の第2段加算器と、演算精度モードに応じて、前記複数の乗算器から出力される複数の和信号および桁上げ信号を構成する複数の1単位ビット長のデータの出力先を前記複数の第1段加算器の複数の入力の複数のビット位置の中のいずれかに切り替え、または前記複数の乗算器から出力される複数の和信号および桁上げ信号の出力先を前記複数の第2段加算器の複数の入力のいずれかに切り替えるように構成される第1の接続切替器と、前記演算精度モードに応じて、前記複数の和信号保持レジスタに保持されている複数の和信号を構成する複数の1単位ビット長のデータおよび前記複数の桁上げ信号保持レジスタに保持されている複数の桁上げ信号を構成する複数の1単位ビット長のデータの出力先を前記複数の第1段加算器の複数の入力の複数のビット位置の中のいずれかに切り替え、または前記複数の和信号保持レジスタに保持されている複数の和信号および前記複数の桁上げ信号保持レジスタに保持されている複数の桁上げ信号を前記複数の第2段加算器の複数の入力のいずれかに切り替えるように構成される第2の接続切替器とを備える演算装置を提供する。
【0021】
本発明の第6態様においては、可変精度で乗算を実行する演算装置であって、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第1の和信号および第1の桁上げ信号を出力するように構成された第1の乗算器と、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第2の和信号および第2の桁上げ信号を出力するように構成された第2の乗算器と、複数の2単位ビット長のデータの加算結果の1段前の第3の和信号および第3の桁上げ信号を出力するように構成された第1の加算器と、複数の2単位ビット長のデータの加算結果の1段前の第4の和信号および第4の桁上げ信号を出力するように構成された第2の加算器と、前記第3の和信号、前記第3の桁上げ信号、前記第4の和信号、および前記第4の桁上げ信号をそれぞれ保持するように構成される第1~第4のレジスタと、入力される和信号と桁上げ信号とをそれぞれ加算するように構成される第3および第4の加算器と、前記第3の加算器の加算結果および前記第4の加算器の加算結果をそれぞれ出力する第1および第2の出力端子と、演算精度モードに応じて、前記第1の乗算器から出力される前記第1の和信号および前記第1の桁上げ信号と、前記第2の乗算器から出力される前記第2の和信号および前記第2の桁上げ信号とをそれぞれ構成する複数の1単位ビット長のデータの出力先を前記第1の加算器および前記第2の加算器の複数の入力の複数のビット位置の中のいずれかに切り替え、または前記第1の和信号および前記第1の桁上げ信号とを前記第3の加算器へ出力するととともに前記第2の和信号および前記第2の桁上げ信号とを前記第4の加算器へ出力するように構成された第1の接続切替器と、前記演算精度モードに応じて、前記第1のレジスタ内の前記第3の和信号、前記第2のレジスタ内の前記第3の桁上げ信号、前記第3のレジスタ内の前記第4の和信号、および前記第4のレジスタ内の前記第4の桁上げ信号をそれぞれ構成する複数の1単位ビット長のデータ出力先を前記第1の加算器および前記第2の加算器の複数の入力の複数のビット位置のいずれかに切り替え、または前記第1のレジスタ内の前記第3の和信号および前記第2のレジスタ内の前記第3の桁上げ信号とを前記第3の加算器へ出力するととともに前記第3のレジスタ内の前記第4の和信号および前記第4のレジスタ内の前記第4の桁上げ信号とを前記第4の加算器へ出力するように構成された第2の接続切替器とを備える演算装置を提供する。
【0022】
本発明の第7態様においては、可変精度で乗算を実行する演算装置であって、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第1の和信号および第1の桁上げ信号を出力するように構成される第1の乗算器と、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第2の和信号および第2の桁上げ信号を出力するように構成される第2の乗算器と、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第3の和信号および第3の桁上げ信号を出力するように構成される第3の乗算器と、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第4の和信号および第4の桁上げ信号を出力するように構成される第4の乗算器と、複数の2単位ビット長のデータの加算を実行するようにそれぞれ構成される第1~第4の加算器と、前記第1の加算器の第1の加算結果、前記第2の加算器の第2の加算結果、前記第3の加算器の第3の加算結果、および前記第4の加算器の第4の加算結果をそれぞれ保持するように構成される第1~第4のレジスタと、第1~第4の出力端子と、演算精度モードに応じて、前記第1の乗算器から出力される前記第1の和信号および前記第1の桁上げ信号と、前記第2の乗算器から出力される前記第2の和信号および前記第2の桁上げ信号と、前記第3の乗算器から出力される前記第3の和信号および前記第3の桁上げ信号と、前記第4の乗算器から出力される前記第4の和信号および前記第4の桁上げ信号とをそれぞれ構成する複数の1単位ビット長のデータの出力先を前記第1の加算器、前記第2の加算器、前記第3の加算器および前記第4の加算器の複数の入力の複数のビット位置のいずれかに切り替えるように構成される第1の接続切替器と、前記演算精度モードに応じて、前記第1のレジスタ内の前記第1の加算結果、前記第2のレジスタ内の前記第2の加算結果、前記第3のレジスタ内の前記第3の加算結果、および前記第4のレジスタ内の前記第4の加算結果をそれぞれ構成する複数の1単位ビット長のデータの出力先を前記第1の加算器、前記第2の加算器、前記第3の加算器、および前記第4の加算器の複数の入力の複数のビット位置のいずれかに切り替え、または前記第1のレジスタ内の前記第1の加算結果の出力先を前記第1の出力端子に切り替え、かつ前記第2のレジスタ内の前記第2の加算結果の出力先を前記第2の出力端子に切り替え、かつ前記第3のレジスタ内の前記第3の加算結果の出力先を前記第3の出力端子に切り替え、かつ前記第4のレジスタ内の前記第4の加算結果の出力先を前記第4の出力端子に切り替えるように構成される第2の接続切替器とを備える演算装置を提供する。
【0023】
本発明の第8態様においては、可変精度で乗算を実行する演算装置であって、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第1の和信号および第1の桁上げ信号を出力するように構成される第1の乗算器と、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第2の和信号および第2の桁上げ信号を出力するように構成される第2の乗算器と、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第3の和信号および第3の桁上げ信号を出力するように構成される第3の乗算器と、2つの1単位ビット長のデータの乗算結果の1段前の2単位ビット長の第4の和信号および第4の桁上げ信号を出力するように構成される第4の乗算器と、複数の2単位ビット長のデータの加算結果の1段前の第5の和信号および第5の桁上げ信号を出力するように構成された第1の加算器と、複数の2単位ビット長のデータの加算結果の1段前の第6の和信号および第6の桁上げ信号を出力するように構成された第2の加算器と、複数の2単位ビット長のデータの加算結果の1段前の第7の和信号および第7の桁上げ信号を出力するように構成された第3の加算器と、複数の2単位ビット長のデータの加算結果の1段前の第8の和信号および第8の桁上げ信号を出力するように構成された第4の加算器と、前記第5の和信号、前記第5の桁上げ信号、前記第6の和信号、前記第6の桁上げ信号、前記第7の和信号、前記第7の桁上げ信号、前記第8の和信号、および前記第8の桁上げ信号をそれぞれ保持するように構成される第1~第8のレジスタと、入力される和信号と桁上げ信号とを加算するようにそれぞれ構成される第5~第8の加算器と、前記第5の加算器の加算結果、前記第6の加算器の加算結果、前記第7の加算器の加算結果、および前記第8の加算器の加算結果をそれぞれ出力する第1~第4の出力端子と、演算精度モードに応じて、前記第1の乗算器から出力される前記第1の和信号および前記第1の桁上げ信号と、前記第2の乗算器から出力される前記第2の和信号および前記第2の桁上げ信号と、前記第3の乗算器から出力される前記第3の和信号および前記第3の桁上げ信号と、前記第4の乗算器から出力される前記第4の和信号および前記第4の桁上げ信号とをそれぞれ構成する複数の1単位ビット長のデータの出力先を前記第1の加算器、前記第2の加算器、前記第3の加算器および前記第4の加算器の複数の入力の複数のビット位置のいずれかに切り替え、または前記第1の和信号および前記第1の桁上げ信号とを前記第5の加算器へ出力し、かつ前記第2の和信号および前記第2の桁上げ信号とを前記第6の加算器へ出力し、かつ前記第3の和信号および前記第3の桁上げ信号とを前記第7の加算器へ出力し、かつ前記第4の和信号および前記第4の桁上げ信号とを前記第8の加算器へ出力するように構成される第1の接続切替器と、前記演算精度モードに応じて、前記第1のレジスタ内の前記第5の和信号、前記第2のレジスタ内の前記第5の桁上げ信号、前記第3のレジスタ内の前記第6の和信号、前記第4のレジスタ内の前記第6の桁上げ信号、前記第5のレジスタ内の前記第7の和信号、前記第6のレジスタ内の前記第7の桁上げ信号、前記第7のレジスタ内の前記第8の和信号、および前記第8のレジスタ内の前記第8の桁上げ信号をそれぞれ構成する複数の1単位ビット長のデータの出力先を前記第1の加算器、前記第2の加算器、前記第3の加算器、および前記第4の加算器の複数の入力の複数のビット位置のいずれかに切り替え、または前記第1のレジスタ内の前記第5の和信号および前記第2のレジスタ内の前記第5の桁上げ信号とを前記第5の加算器へ出力し、かつ前記第3のレジスタ内の前記第6の和信号および前記第4のレジスタ内の前記第6の桁上げ信号とを前記第6の加算器へ出力し、かつ前記第5のレジスタ内の前記第7の和信号および前記第6のレジスタ内の前記第7の桁上げ信号とを前記第7の加算器へ出力し、かつ前記第7のレジスタ内の前記第8の和信号および前記第8のレジスタ内の前記第8の桁上げ信号とを前記第8の加算器へ出力するように構成された第2の接続切替器と備える演算装置を提供する。
【0024】
本発明の第9態様においては、上述の演算装置を複数個備える演算ユニットと、演算ユニットを共有する複数のプロセッサとを備える演算システムを提供する。
【図面の簡単な説明】
【0025】
【
図1】本実施形態に係る演算装置405の構成を示す。
【
図2】本実施形態に係る演算装置405の半精度演算モードにおける演算を示す。
【
図3】単精度の乗数A1および被乗数B1の乗算を示す。
【
図4】本実施形態に係る演算装置405の単精度演算モードにおける演算を示す。
【
図5】倍精度の乗数A1および被乗数B1の乗算を示す。
【
図6】本実施形態の第1変形例に係る加算器540および中間レジスタ550の構成を示す。
【
図7】本実施形態の第2変形例に係る演算装置1の構成を示す。
【
図8】半精度演算モードにおける乗数Ai、被乗数Bi、およびこれらの積Ci(i=1~4)を示す。
【
図9】第2変形例に係る演算装置1の半精度演算モードにおける動作を示す。
【
図10】第2変形例の半精度演算モードにおける加算器4aの入出力を示す。
【
図11】単精度演算モードにおける乗数Ai、被乗数Bi、およびこれらの積Ci(i=1~2)を示す。
【
図12】第2変形例に係る演算装置1の単精度演算モードにおける動作を示す。
【
図13】第2変形例の単精度演算モードにおける第1サイクルの加算器4a~bの入出力を示す。
【
図14】第2変形例の単精度演算モードにおける第2サイクルの加算器4a~bの入出力を示す。
【
図15】倍精精度演算モードにおける乗数A1、被乗数B1、およびこれらの積C1を示す。
【
図16】第2変形例に係る演算装置1の
倍精度演算モードにおける動作を示す。
【
図17】第2変形例の倍精度演算モードにおける第1サイクルの加算器4a~dの入出力を示す。
【
図18】第2変形例の倍精度演算モードにおける第2サイクルの加算器4a~dの入出力を示す。
【
図19】Wallace木乗算器2aの構成を示す。
【
図20】Wallace木乗算器2aで生成されるデータを示す。
【
図21】本実施形態の第3変形例に係る演算装置101の構成を示す。
【
図22】第3変形例に係る演算装置101の半精度演算モードにおける動作を示す。
【
図23】第3変形例の半精度演算モードにおける加算器
16aの入出力を示す。
【
図24】第3変形例に係る演算装置101の単精度演算モードにおける動作を示す。
【
図25】第3変形例の単精度演算モードにおける第1サイクルの加算器14a~bの入出力を示す。
【
図26】第3変形例の単精度演算モードにおける第2サイクルの加算器14a~bの入出力を示す。
【
図27】第3変形例に係る演算装置101の倍精度演算モードにおける動作を示す。
【
図28A】第3変形例の倍精度演算モードにおける第1サイクルの加算器14a~bの入出力を示す。
【
図28B】第3変形例の倍精度演算モードにおける第1サイクルの加算器14c~dの入出力を示す。
【
図29A】第3変形例の倍精度演算モードにおける第2サイクルの加算器14a~bの入出力を示す。
【
図29B】第3変形例の倍精度演算モードにおける第2サイクルの加算器14c~dの入出力を示す。
【
図30】2個のCSAを用いて桁上げ信号保留加算を実行する加算器200の構成を示す。
【
図31】加算器200の入力データ、途中データ、出力データを示す。
【
図32】4個のCSAを用いて桁上げ信号保留加算を実行する加算器300の構成を示す。
【
図33】加算器300の入力データ、途中データ、出力データを表わす図である。
【
図34】8個のCSAを用いて桁上げ信号保留加算を実行する加算器400の構成を示す。
【
図35】本実施形態の第4変形例に係る演算システム1000の構成を示す。
【発明を実施するための形態】
【0026】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【0027】
図1は、本実施形態に係る演算装置405の構成を示す。演算装置405は、可変精度で乗算を実行する。本実施形態においては、一例として演算装置405は、例えば13ビットである半精度の乗数および被乗数を乗算する半精度演算モード、例えば26ビットである単精度の乗数および被乗数を乗算する単精度演算モード、および、例えば52ビットである倍精度の乗数および被乗数を乗算する倍精度演算モードの3つの演算精度モードを有する。なお、説明の便宜上乗算される2つの数を「乗数」および「被乗数」と示すが、これらの間に実質的な相違はない。したがって、請求の範囲および明細書等に記載の「乗数」および「被乗数」を入れ換えた構成も、請求の範囲に係る発明の技術的範囲に属し、本明細書等に開示されたものである。
【0028】
ここで、半精度の数を表すのに用いられるビット長(例えば13ビット)を「1単位ビット長」と表したとすると、単精度の数は2単位ビット長となり、倍精度の数は4単位ビット長となる。乗数および被乗数の乗算は、乗数の各桁および被乗数の各桁の全ての組合せについて桁同士の乗算をした各乗算結果を適切な桁位置に加えていくことによって最終の積を得る計算であることに鑑みれば、半精度の数同士の乗算は1単位ビット長の数同士の乗算を1回、単精度の数同士の乗算は1単位ビット長の数同士の乗算を4回(2×2)、倍精度の数同士の乗算は1単位ビット長の数同士の乗算を16回(4×4)回行うものとなる。そして、n単位ビット長の数同士の乗算は、1単位ビット長の数同士の乗算をn×n回行うものとなる。なお、1単位ビット長は、演算装置405の設計に応じて任意の長さであってよい。
【0029】
本実施形態に係る演算装置405は、半精度演算モード、単精度演算モード、および倍精度演算モードの各演算精度モードにおいて、演算装置405が有する複数の乗算器を有効利用する。
【0030】
演算装置405は、乗算部410と、加算部430と、モード選択部460と、第1接続切替器470と、第2接続切替器480とを備える。乗算部410は、複数の乗算器420、すなわち例えば本実施形態においては4つの乗算器420-1~4を有する。複数の乗算器420は、各々が1単位ビット長の2つの数を入力し、これらを乗算して乗算結果を出力する。各乗算器420-i(i=1,2,3,4)は、1単位ビット長の入力データINi0およびINi1を入力し、2単位ビット長の乗算結果を出力する。
【0031】
加算部430は、複数の加算器440と、複数の中間レジスタ450とを有する。本実施形態においては、加算部430は、一例として4つの加算器440-1~4と、4つの中間レジスタ450-1~4とを有する。
【0032】
複数の加算器440は、各々が複数の乗算器420-1~4のうちの少なくとも1つの乗算器420による乗算結果を含む少なくとも2つの入力データを加算する。各加算器440-i(i=1,2,3,4)は、2単位ビット長の複数の入力データを加算して2単位ビット長の和、および演算精度モードに応じて上位桁への桁上りを出力する。ここで、加算器440は、乗算器420と同数設けられてよく、乗算器420の出力データと同じビット長(例えば2単位ビット長)の入力データを入力可能であってよい。
【0033】
複数の中間レジスタ450-i(i=1,2,3,4)は、複数の加算器440-1~4のそれぞれに対応してそれぞれ設けられる。各中間レジスタ450は、対応する加算器440が出力する加算結果を保持する。
【0034】
モード選択部460は、演算装置405が動作すべき演算精度モードを入力し、演算精度モードに応じて演算装置405の各部を制御する。ここで、モード選択部460は、演算装置405に接続されたプロセッサ等から演算精度モードの指定を受けて、指定された演算精度モードで動作するように演算装置405の各部を動的に制御してもよく、設定レジスタ等に設定された演算精度モードを受けて、その演算精度モードで固定的に動作するように演算装置405の各部を制御してもよい。
【0035】
モード選択部460は、演算精度モードに応じて、複数の乗算器420および複数の加算器440を、1以上の乗算器420および1以上の加算器440を含むグループ毎に分割する分割数を選択する。これらの1または複数のグループは、互いに異なる乗数および被乗数を乗算するために用いられる。このようなグループ分割により、複数の乗算器420は、演算精度モードに応じて1または2以上の乗算器420毎に分割されて1または複数のグループのそれぞれに割り当てられる。そして、各グループにおいて、各乗算器420は、演算精度モードに応じて当該グループに対する乗数の少なくとも一部の桁範囲(例えば1単位ビット長の桁範囲)である個別乗数および当該グループに対する被乗数の少なくとも一部の桁範囲(例えば1単位ビット長の桁範囲)である個別被乗数を乗算する。
【0036】
また、モード選択部460は、演算精度モードに応じて、グループにおいて1以上の乗算器420および1以上の加算器440を用いて乗数および被乗数を乗算するのに用いるサイクル数を選択する。ここで、上記のグループ分割により、複数の加算器440は、演算精度モードに応じて1または2以上の加算器440に分割されて1または複数のグループのそれぞれに割り当てられる。そして、各グループに割り当てられた1または2以上の加算器440は、当該グループに割り当てられた各乗算器420による各乗算結果を加算する。各グループに割り当てられた1または2以上の加算器440は、演算精度モードに応じて選択したサイクル数の間、各乗算結果を加算していく。各グループの1または2以上の加算器440に対応する1または2以上の中間レジスタ450は、サイクル毎の加算結果である中間結果における、各加算器440に対応する桁範囲をそれぞれ保持する。これにより、各グループに割り当てられた1または2以上の加算器440は、最終的に乗数および被乗数の積を得て、これを出力する。
【0037】
本実施形態に係るモード選択部460は、半精度演算モードにおいては、4つの乗算器420および4つの加算器440を、1つの乗算器420および1つの加算器440を含む4つのグループに分割し、互いに異なりうる4組の乗数および被乗数の乗算を、4つのグループで並列に行う。
【0038】
また、モード選択部460は、単精度演算モードにおいては、4つの乗算器420および加算器440を、2つの乗算器420および2つの加算器440を含む2つのグループに分割し、互いに異なりうる2組の乗数および被乗数の乗算を、2つのグループで並列に行う。この場合、各グループは、1サイクルに1単位ビット長の乗算を2つ実行することで、2サイクルを用いて1単位ビット長の乗算を4回行う単精度の乗算を実行することが可能となる。
【0039】
また、モード選択部460は、倍精度演算モードにおいては、4つの乗算器420および加算器440を1つのグループとし、1組の乗数および被乗数の乗算を1つのグループで行う。この場合、グループは、1サイクルに1単位ビット長の乗算を4つ実行することで、4サイクルを用いて1単位ビット長の乗算を16回行う倍精度の乗算を実行することが可能となる。
【0040】
第1接続切替器470は、モード選択部460の制御を受けて、演算精度モードに応じて、各乗算器420が出力する各乗算結果を各加算器440の各入力データにおけるどの桁位置へと伝送するかを切り替える。第1接続切替器470は、演算精度モードに応じて、1または複数のグループのそれぞれについて、各乗算器420による各乗算結果を、グループ内の1また2以上の加算器440における当該乗算結果を加えるべき桁位置へと入力させる。
【0041】
第2接続切替器480は、モード選択部460の制御を受けて、演算精度モードに応じて、1または複数のグループのそれぞれについて、サイクル毎に、グループ内の2以上の中間レジスタ450に保持された中間結果をシフトして、グループ内の2以上の加算器440へと入力させる。これにより、演算装置405は、各グループについて、サイクル毎に、上位側(または下位側)から下位側(または上位側)へと乗算器420毎の乗算結果を算出し、各サイクルにおいて乗算器420毎の乗算結果をグループの中間結果の下位側(または上位側)に加え、次のサイクルで中間結果を上位側(または下位側)にシフトしていくことによって、乗数および被乗数の積における適切な位置に各乗算結果を加えることができる。
【0042】
図2は、本実施形態に係る演算装置405の半精度演算モードにおける演算を示す。半精度演算モードにおいて、演算装置405は、半精度、すなわち1単位ビット長の4組の乗数Aiおよび被乗数Bi(i=1,2,3,4)をそれぞれ乗算して、1サイクルで4組の積Ciを出力する。
【0043】
半精度演算ノードにおいて、複数の乗算器420は、各々が1個の乗算器420を含む複数のグループに割り当てられる。本実施例においては、乗算器420-i(i=1,2,3,4)は、4つのグループに1つずつ割り当てられる。各乗算器420-iは、そのグループに割り当てられた1単位ビット長の乗数Aiおよび被乗数Biを入力データINi0およびINi1として入力し、これらを乗算して2単位ビット長の積Ciを出力する。
【0044】
半精度演算モードにおいて、第1接続切替器470は、各乗算器420-iの乗算結果である積Ciを、各乗算器420-iに対応する加算器440-iに入力する。各加算器440-iは、例えば他の入力データとして値0を入力して積Ciに加える等により、積Ciを変更せずに各中間レジスタ450-iに格納する。第2接続切替器480は、各中間レジスタ450-iに格納された積Ciを最終的な乗算結果OUTiとして出力する。
【0045】
図3は、単精度、すなわち2単位ビット長の乗数A1および被乗数B1の乗算を示す。乗数A1は、各々1単位ビット長の桁範囲である上位側の個別乗数A10および下位側の個別乗数A11に分けることができる。また、被乗数B1は、同様に上位側の個別
被乗数B10および下位側の個別
被乗数B11に分けることができる。ここで個別乗数および個別被乗数は、乗数および被乗数を、各乗算器420に対して入力可能なビット長の桁範囲毎に分割した数である。
【0046】
乗数A1および被乗数B1の乗算結果は、A10およびB10の乗算、A11およびB10の乗算、A10およびB11の乗算、並びに、A11およびB11の乗算の4つの乗算結果を、図示したようにそれぞれ適切な桁位置で加算することによって計算することができる。
【0047】
図4は、本実施形態に係る演算装置405の単精度演算モードにおける演算を示す。単精度演算モードにおいて、演算装置405は、単精度、すなわち2単位ビット長の2組の乗数Aiおよび被乗数Bi(i=1,2)をそれぞれ並行して乗算して、2サイクルで2組の積Ciを出力する。
【0048】
単精度演算モードにおいて、複数の乗算器420および加算器440は、各々が2個の乗算器420および2個の加算器440を含む複数のグループに割り当てられる。本実施例においては、乗算器420-1~2および加算器440-1~2が第1グループに割り当てられ、乗算器420-3~4および加算器440-3~4が第2グループに割り当てられる。演算装置405は、第iグループに対する2単位ビット長の乗数Aiおよび被乗数Biを入力し、これらを乗算して第iグループに対する4単位ビット長の積Ciを出力する。第1グループおよび第2グループの動作は、割り当てられる乗算器420、加算器440、および中間レジスタ450が異なる他は同様であるから、以下第1グループの動作を中心に説明する。
【0049】
単精度演算モードにおいて、演算装置405は、各グループにおいて
図3に示した乗算方法を2サイクルで実現する。第1サイクルにおいて、演算装置405は、個別乗数A10およびA11のそれぞれと、個別被乗数B10との乗算およびこれに付随する加算を行う。
【0050】
第1サイクルにおいて、乗算器420-1は入力IN10にA10、入力IN11にB10を入力し、これらの積である部分積A10×B10を出力する。乗算器420-2は入力IN20にA11、入力IN21にB10を入力し、これらの積である部分積A11×B10を出力する。
【0051】
加算器440-1および加算器440-2は、組み合わされて4単位ビット長の加算器(「加算器Q」と示す。)として機能する。4単位ビット長の加算における加算器440-2から加算器440-1への桁上がりは、例えば桁上げ先見回路等によって生成され、加算器440-1へと供給されてよい。第1接続切替器470は、部分積A10×B10および部分積A11×B10のうち最下位側の部分積A11×B10が加算器Qの最下位側の桁範囲に対応するように、部分積A10×B10および部分積A11×B10をシフトして加算器Qに入力させる。すなわち、第1接続切替器470は、部分積A11×B10を、図中2および3と示した桁範囲へとシフトして加算器Qに入力させる。部分積A10×B10は部分積A11×B10よりも1単位ビット長分上位側に位置するので、第1接続切替器470は、部分積A10×B10を、図中1および2と示した桁範囲へとシフトして加算器Qに入力させる。この結果、加算器Qは、最下位の1単位ビット長の桁範囲3に部分積A11×B10の下位1単位ビット長の桁範囲、最下位から1単位ビット長分上位側の桁範囲2に部分積A10×B10の下位1単位ビット長の桁範囲および部分積A11×B10の上位1単位ビット長の桁範囲、最下位から2単位ビット長分上位側の桁範囲1に部分積A10×B10の上位1単位ビット長の桁範囲をそれぞれ入力して加算し、桁範囲1~3が乗数A1および個別被乗数B10の積である部分積A1×B10となる中間結果を出力する。加算器Qは、この部分積A1×B10を中間レジスタ450-1~2に格納する。
【0052】
第2サイクルにおいて、第2接続切替器480は、中間レジスタ450-1~2に格納された中間結果である部分積A1×B10を1単位ビット長分上位側にシフトして加算器Qに供給する。乗算器420-1~2および第1接続切替器470は、第1サイクルと同様にして部分積A10×B11および部分積A11×B11を算出し、これらの部分積を、最下位側の部分積A11×B11が加算器Qの最下位側の桁範囲に対応するように加算器Qに入力させる。加算器Qは、第2接続切替器480によってシフトされた部分積A1×B10と、第2サイクルに算出された部分積A10×B11およびA11×B11とを、桁範囲が正しく対応付けられた状態で入力して加算し、積A1×B1=C1を出力する。中間レジスタ450-1~2は積C1を保持し、第2接続切替器480は、中間レジスタ450-1~2に保持された積C1を第3サイクル以降にOUT1~2として出力する。
【0053】
図5は、倍精度、すなわち4単位ビット長の乗数A1および被乗数B1の乗算を示す。乗数A1は、上位側から順に各々1単位ビット長の個別乗数A10~A13に分けられる。被乗数B1は、上位側から順に各々1単位ビット長の個別被乗数B10~B13に分けられる。
【0054】
乗数A1および被乗数B1の乗算結果は、個別乗数A10~A13と、個別被乗数B10~B13との全組合せ(16組)の間の乗算結果をそれぞれ適切な桁位置で加算することによって計算することができる。ここで、最下位側からm単位ビット長分上位側にある個別乗数と、最下位側からn単位ビット長分上位側にある個別被乗数との乗算結果は、最下位側からm+n単位ビット長分上位側の桁位置において中間結果に加算される。
【0055】
倍精度演算モードにおいて、演算装置405は、倍精度、すなわち4単位ビット長の乗数A1および被乗数B1を4サイクルで乗算して、積C1を出力する。倍精度演算モードにおいては、複数の乗算器420および加算器440は、1つのグループに割り当てられる。
【0056】
第1サイクルにおいて、乗算器420-1~4は、A10~A13をIN10~IN40に、B10をIN11~IN41のそれぞれに入力し、A10~A13のそれぞれと、B10との積である部分積A10×B10、A11×B10、A12×B10、およびA13×B10を出力する。
【0057】
加算器440-1~4は、組み合わされて8単位ビット長の加算器(「加算器O」と示す。)として機能する。2単位ビット長の加算における加算器440-iから加算器440-(i-1)への桁上がりは、例えば桁上げ先見回路等によって生成され、加算器440-(i-1)へと供給されてよい。単精度演算モードと同様に、第1接続切替器470は、部分積A10×B10~A13×B10のうち最下位側の部分積A13×B10が加算器Oの最下位側の桁範囲に対応するように、部分積A10×B10~A13×B10をシフトして加算器Oに入力させる。この結果、加算器Oは、最下位側の桁範囲6~7に部分積A13×B10を、最下位から1単位ビット長分上位側の桁範囲5~6に部分積A12×B10を、最下位から2単位ビット長分上位側の桁範囲4~5に部分積A11×B10を、最下位から3単位ビット長分上位側の桁範囲3~4に部分積A10×B10をそれぞれ入力して加算し、桁範囲3~7が乗数A1および個別被乗数B10の積である部分積A1×B10となる中間結果を出力する。加算器Oは、この部分積A1×B10を中間レジスタ450-1~4に格納する。
【0058】
第2サイクルにおいて、第2接続切替器480は、中間レジスタ450-1~4に格納された中間結果を1単位ビット長分上位側にシフトして加算器Oに供給する。乗算器420-1~4および第1接続切替器470は、第1サイクルと同様にして部分積A10×B11~A13×B11を算出し、これらの部分積を、最下位側の部分積A13×B11が加算器Oの最下位側の桁範囲に対応するように加算器Oに入力させる。加算器Oは、第2接続切替器480によってシフトされた部分積A1×B10と、第2サイクルに算出された部分積A10×B11~A13×B11とを、桁範囲が正しく対応付けられた状態で入力して加算して、中間結果を出力する。加算器Oは、この中間結果を中間レジスタ450-1~4に格納する。
【0059】
第3~4サイクルにおいても、演算装置405は、第2サイクルと同様にして、中間レジスタ450-1~4に格納された中間結果を1単位ビット長分上位側にシフトした値と、部分積A10×B12~A13×B12(第3サイクルの場合)または部分積A10×B13~A13×B13(第4サイクルの場合)とを加算して中間レジスタ450-1~4に格納する。これにより、第4サイクルにおいて、中間レジスタ450-1~4は積C1を格納する。第2接続切替器480は、中間レジスタ450-1~4に保持された積C1を第5サイクル以降にOUT1~4として出力する。
【0060】
以上に示したように、演算装置405は、上記の単精度演算モードおよび倍精度演算モードのような、2単位ビット長以上の乗数および被乗数を乗算する少なくとも1つの演算精度モードにおいて、複数の乗算器420、複数の加算器440、および複数の中間レジスタ450を1または複数のグループに分割し、各グループが並行して複数サイクルを用いてグループ毎の乗数および被乗数の積を算出する。各グループにおいて、1または2以上の乗算器420は、サイクル毎に、乗数のうち各乗算器420が担当する桁範囲の個別乗数と、被乗数におけるサイクル毎に上位桁から順に1単位ビット長ずつ選択された個別被乗数とを入力して、サイクル毎にそれぞれの個別乗数および個別被乗数の部分積を乗算結果として出力する。第1接続切替器470は、サイクル毎に、乗数における最下位側の桁範囲の個別乗数および個別被乗数の部分積が1または2以上の加算器440における最下位の桁範囲に対応するように、1または2以上の乗算器420が出力するそれぞれの部分積をシフトして1または2以上の加算器440に入力させて中間結果に加算させる。第2接続切替器480は、サイクル毎に、中間結果を上位側に1単位ビット長シフトさせて1または2以上の加算器440-1~4へと入力させる。
【0061】
上記の半精度演算モードのような、1単位ビット長の演算精度モードにおいて、複数の乗算器420は、1個ずつの乗算器420を含む複数のグループに割り当てられる。そして、演算装置405は、複数のグループのそれぞれについて乗数および被乗数の積を1サイクルで演算する。これにより、演算装置405は、複数の乗算器420のそれぞれで別々の乗算を行うことで、複数の乗算器420を有効利用することができる。
【0062】
上記の単精度演算モードのような、2単位ビット長以上の少なくとも1つの演算精度モードにおいて、複数の乗算器420および複数の加算器440は、2以上のグループに割り当てられる。そして、演算装置405は、2以上のグループのそれぞれについて乗数および被乗数の積を、複数のサイクルを用いて演算する。これにより、演算装置405は、複数の乗算器420を複数のグループに分割し、サイクル数を増やして個別乗数および個別被乗数の乗算結果を必要数得ることにより、より高精度の演算精度モードにおいても複数の乗算器420を有効活用することができる。
【0063】
上記の倍精度演算モードのような、2単位ビット長以上の少なくとも1つの演算精度モードにおいて、複数の乗算器420および複数の加算器440は、1つのグループに割り当てられる。そして、演算装置405は、1つのグループにおいて乗数および被乗数の積を、複数のサイクルを用いて演算する。これにより、演算装置405は、複数の乗算器420を1つのグループにまとめ、サイクル数を増やして個別乗数および個別被乗数の乗算結果を必要数得ることにより、さらに高精度の演算精度モードにおいても複数の乗算器420を有効活用することができる。
【0064】
本実施形態においては、モード選択部460は、n単位ビット長(nは自然数)の乗数および被乗数を乗算する演算精度モードにおいて、複数の乗算器420および複数の加算器440を、n個の乗算器420およびn個の加算器440をそれぞれ含む少なくとも1つのグループに分割する。例えば、半精度演算モード(n=1)においては、モード選択部460は、全体で4個の乗算器420(および4個の加算器440)を、1個の乗算器420(および1個の加算器440)をそれぞれ含む4つのグループに分割する。単精度演算モード(n=2)においては、モード選択部460は、全体で4個の乗算器420および4個の加算器440を、2個の乗算器420および2個の加算器440をそれぞれ含む2つのグループに分割する。倍精度演算モード(n=4)においては、モード選択部460は、全体で4個の乗算器420および4個の加算器440を、4個の乗算器420および4個の加算器440を含む1つのグループに分割する(割り当てる)。
【0065】
そして、各グループにおけるn個の乗算器420は、グループ毎の乗数に含まれる1単位ビット長の桁範囲ずつであるn個の個別乗数のそれぞれと、被乗数に含まれる1単位ビット長の桁範囲ずつであるn個の個別被乗数のそれぞれとの乗算を、nサイクルの間、1サイクルにn組ずつ乗算する。各グループにおけるn個の加算器440は組み合わされて、nサイクルの間、サイクル毎に同じグループのn個の乗算器420からの各乗算結果を、乗数および被乗数の積の中間結果における各乗算結果に応じた桁位置に加算していく。
【0066】
ここで、n単位ビット長の乗数および被乗数を乗算する演算精度モードにおいて、グループにn未満の乗算器420を割り当てたとしても、グループ内の加算器440は、組み合わされて2n単位ビット長の加算をする必要があるから、1サイクルで加算をするためにはグループにn個の加算器440を設ける必要がある。逆に、n単位ビット長の乗数および被乗数を乗算する演算モードにおいて、グループにnを越える乗算器420を割り当てた場合、1サイクルで加算をするためにはグループにn個の加算器440を設ければ十分であるが、より多くの乗算結果を加算する必要があるので加算器440により多くの入力を設ける必要がある。これに対し、本実施形態の構成によれば、複数の乗算器420に加えて加算器440も有効活用することができる。なお、加算器440の有効活用を重視しない場合には、モード選択部460は、他のグループ分割および異なるサイクル数での演算を行うようにしてもよい。
【0067】
また、本実施形態においては、第1接続切替器470は、各乗算器420からの乗算結果を1または2以上の加算器440の下位側の桁範囲に入力し、第2接続切替器480は、中間結果を上位側にシフトする構成をとる。これに代えて、第1接続切替器470は、各乗算器420からの乗算結果を1または2以上の加算器440の上位側の桁範囲に入力し、第2接続切替器480は、中間結果を下位側にシフトする構成をとってもよい。また、演算装置405は、第2接続切替器480を備えない構成を採用してもよく、この場合に第1接続切替器470は各乗算結果を、最終的な積における対応する桁範囲に加算できるようにサイクル毎に接続を切り替えるようにしてもよい。
【0068】
なお、本実施形態に係る演算装置405は、半精度演算モード、単精度演算モード、および倍精度演算モードの3つの演算精度モードを備える。これに代えて演算装置405は、任意の演算精度モードを備えてよい。また、演算装置405は、1単位ビット長の2のべき乗倍のビット長を有する数に応じた各演算モードを備える。演算装置405は、1単位ビット長の2のべき乗倍以外のビット長を有する数(例えば3単位ビット長等)に応じた演算モードを1または複数備えてもよい。このような演算モードにおいて、演算装置405は、一部の乗算器420および加算器440をアイドル状態としてもよい。また、演算装置405は、2のべき乗倍となる個数の乗算器420、加算器440、および中間レジスタ450を有するのに代えて、2のべき乗倍とならない個数(例えば6個)の乗算器420、加算器440、および中間レジスタ450を有する構成をとってもよい。
【0069】
図6は、本実施形態の第1変形例に係る加算器540および中間レジスタ550の構成を示す。第1変形例は、主に、
図1から5に示した演算装置405における各加算器440を加算器540に、各中間レジスタ450を中間レジスタ550に変更したものであるから、以下演算装置405からの相違点を除いて説明を省略する。
【0070】
第1変形例においては、
図1の各加算器440による加算を、桁上げ保存加算器(CSA:Carry Save Adder、「桁上げ保留加算器」とも示す。)を含む加算器540によって行う。加算器540は、第1加算要素542と、第2加算要素544とを含む。
【0071】
第1加算要素542は、第1接続切替器470を介して入力される1または複数の乗算器420からの1または複数の乗算結果、および第2接続切替器480を介して入力される中間結果における当該加算器540に対応する桁範囲等の各入力データを加算して、各桁の和データおよび各桁からの桁上げデータを含む加算結果を出力するCSAである。
【0072】
第2加算要素544は、各加算器540に対応して設けられる。演算精度モードに応じて複数の加算器540が1または2以上の加算器540毎に分割されるのに伴って、複数の第2加算要素544は、1または2以上の第2加算要素544毎に分割されて1または複数のグループのそれぞれに割り当てられる。第2加算要素544は、各グループにおいて1または2以上の第1加算要素542が出力する和データおよび桁上げデータを加算して乗数および被乗数の積として出力する。
【0073】
より具体的には、第2加算要素544は、中間レジスタ550に保持された和データおよび桁上げデータを加算してOUTx(x=1,2,3,4)として出力する。第2加算要素544は、各桁からの桁上がりを上位桁に加算して桁上がりを反映した和を出力する、桁上げ先見加算器および桁上げ伝搬加算器等の加算器である。第2加算要素544は、モード選択部460によるグループ分割に応じて、必要によりグループ内の下位側の第2加算要素544からの桁上げを受け取って加算し、および必要によりグループ内の上位側の第2加算要素544へと加算結果の桁上がりを伝搬させる。
【0074】
中間レジスタ550は、対応する第1加算要素542が出力する桁範囲の和データおよび桁上げデータを保持する。中間レジスタ550は、保持している和データおよび桁上げデータを第2加算要素544へと出力する。本変形例において、中間レジスタ550は、保持している和データおよび桁上げデータを第2加算要素544を介さずに第2接続切替器480経由で1または2以上の第1加算要素542へと供給する。これにより、本変形例に係る演算装置405は、最終的に乗数および被乗数の積を算出し終えるまでの各サイクルにおいて、桁上がりを反映した和を算出する必要がなくなるので、中間結果を算出する回路における回路遅延を低減することができる。
【0075】
また、演算装置405は、複数の乗算器420のそれぞれとして、個別乗数および個別被乗数を乗算して各桁の和データおよび各桁からの桁上げデータを含む乗算結果を出力する、ウォレス木(Wallece tree)を用いた乗算器を用いてもよい。各乗算器420および各加算器540としてCSAおよびウォレスツリー乗算器を用いることにより、演算装置405は、回路遅延を低減し、1サイクルに要する処理時間を短縮することができる。
【0076】
以下に、他の変形例について、図面を参照して説明する。なお、以下に示す変形例は、
図1~6に示した実施形態またはその第1変形例と同一または類似の構成および機能を有するので、相違点を除いて説明を省略する場合がある。
【0077】
[第2変形例]
図7は、第2変形例の演算装置1の構成を表わす。
【0078】
この演算装置1は、可変精度で乗算を実行する。演算装置1は、Wallace木乗算器2a~2d(乗算器420-1~4に対応)と、第1の接続切替器20(第1接続切替器470に対応)と、加算器4a~4d(加算器440-1~4に対応)と、レジスタ5a~5d(中間レジスタ450-1~4に対応)と、第2の接続切替器30(第2接続切替器480に対応)と、出力端子OP1~OP4と、スイッチ9b,9c,9dとを備える。
【0079】
演算装置1は、8個の入力(IN1~IN8)を受けて、4個の出力(OUT1~OUT4)を出力する。入力IN1~IN8は、1単位ビット長(13ビット)のデータであり、出力OUT1~OUT4は、2単位ビット長(26ビット)である。
【0080】
Wallace木乗算器2aは、入力データIN1と入力データIN2とを受けて、Wallace木に基づいて、桁上がり保留加算を複数回実行することによって、入力データIN1と入力データIN2との乗算結果の1段前の26ビットの和信号Dおよび桁上げ信号Eとを出力する。Wallace木乗算器2b~2dは、入力データおよび出力する信号が本図のように相違する他はWallace木乗算器2aと同様である。
【0081】
加算器4a~4dは、それぞれ、複数の26ビット長のデータの加算を実行する。
レジスタ5a~5dは、それぞれ対応する加算器4a~4dの加算結果を保持する。
【0082】
第1の接続切替器20は、演算精度モードに応じて、Wallace木乗算器2a~2dから出力される和信号D、F、H、J、および桁上げ信号E、G、I、Kをそれぞれ構成する上位13ビットのデータ、下位13ビットのデータの出力先を加算器4a~4dの複数の入力の複数のビット位置(下位半分のビット位置または上位半分のビット位置)の中のいずれかに切り替える。第1の接続切替器20は、スイッチおよびシフタを有し、これらを制御することによって、上述の切替を実行する。
【0083】
第2の接続切替器30は、演算精度モードに応じて、レジスタ5a~5d内の複数の加算結果をそれぞれ構成する上位13ビットのデータ、下位13ビットのデータの出力先を加算器4a~4dの複数の入力の複数のビット位置(下位半分のビット位置または上位半分のビット位置)の中のいずれかに切り替え、またはレジスタ5a~5d内の加算器4a~4dの加算結果の出力先を出力端子OP1~4に切り替える。第2の接続切替器30は、スイッチおよびシフタを有し、これらを制御することによって、上述の切替を実行する。
【0084】
スイッチ9bは、加算器4bから加算器4aへ桁上りビットを送るか否かを切り替える。スイッチ9cは、加算器4cから加算器4bへ桁上りビットを送るか否かを切り替える。スイッチ9dは、加算器4dから加算器4cへ桁上りビットを送るか否かを切り替える。
【0085】
演算装置1は、半精度演算モード、単精度演算モード、および倍精度演算モードの複数の演算精度モードで動作する。以下では、各演算モードでの動作を説明する。
【0086】
(半精度演算モード)
半精度演算モードでは、乗数および被乗数は、13ビットであり、積は、26ビットである。半精度演算モードでは、1サイクルで乗算が実行される。半精度演算モードでは、スイッチ9b~9dは、オフとなる。
【0087】
図8は、半精度演算モード時の第iの乗数Ai、第iの被乗数Bi、第iの積Ciを表わす(i=1,2,3,4)。
図9は、第2変形例の演算装置1の半精度演算モードの動作を説明する。
【0088】
演算装置1は、第iの乗数Aiと第iの被乗数Biとを乗算して、第iの積Ciを出力する。Wallace木乗算器2aは、第1の乗数A1の全13ビットと、第1の被乗数B1の全13ビットとを受けたときに、和信号Dおよび桁上げ信号Eを出力する。Wallace木乗算器2b~2dは、入力および出力が本図のように相違する他はWallace木乗算器2aと同様に動作する。
【0089】
第1の接続切替器20によって、Wallace木乗算器2a~2dのそれぞれの出力(26ビットの和信号および26ビットの桁上げ信号)が、加算器4a~4dのうち対応する加算器に送られる。
【0090】
図10は、第2変形例の半精度演算モードにおける加算器4aの入力および出力を表わす。加算器4aは、第1の入力の全26ビットとして和信号Dの全26ビット{d25-d0}を、第2の入力の全26ビットとして桁上げ信号Eの全26ビット{e25-e0}をそれぞれ受ける。加算器4aの加算結果Lのうちの下位26ビット{l25-l0}がレジスタ5aに送られる。加算器4b~4dは、入力および出力が本図のように相違する他は加算器4aと同様に動作する。
【0091】
第2の接続切替器30は、レジスタ5a~d内のデータの出力先を出力端子OP1~4に切替える。これによって、出力端子OP1~4から、第1~4の積C1~4が出力される。
【0092】
(単精度演算モード)
単精度演算モードでは、乗数および被乗数は、26ビットであり、積は、52ビットである。単精度演算モードでは、2サイクルで乗算が実行される。単精度演算モードでは、スイッチ9b,9dは、オンとなり、スイッチ9cは、オフとなる。
【0093】
図11は、単精度演算モード時の第iの乗数Ai、第iの被乗数Bi、および第iの積Ciを表わす(i=1,2)。
図12は、第2変形例の演算装置1の単精度演算モードの動作を、主にi=1に関して説明する。なお、i=2に関する動作は、入力および出力が異なる他はi=1に関する動作と同様であるため説明を省略する。
【0094】
演算装置1は、第iの乗数Aiと第iの被乗数Biとを乗算して、第iの積Ciを出力する(i=1,2)。第iの乗数Aiの上位13ビットがAi0であり、下位13ビットがAi1である。第iの被乗数Biの上位13ビットがBi0であり、下位13ビットがBi1である。第iの積Ciの上位26ビットがCi0であり、下位26ビットがCi1である。
【0095】
まず、単精度演算モードにおける第1サイクルの計算手順を、主にi=1に関して説明する。
【0096】
Wallace木乗算器2aは、第1の乗数A1の上位13ビットA10と、第1の被乗数B1の上位13ビットB10とを受けたときに、和信号D(0)および桁上げ信号E(0)を出力する。Wallace木乗算器2bは、第1の乗数A1の下位13ビットA11と、第1の被乗数B1の上位13ビットB10とを受けたときに、和信号F(0)および桁上げ信号G(0)を出力する。
【0097】
第1の接続切替器20によって、Wallace木乗算器2a~2dの出力が、加算器4a~4dに送られる。第2の接続切替器30によって、レジスタ5a~5d内のデータが加算器4a~4dに送られる。
【0098】
すなわち、和信号D(0)の上位13ビットがシフタ6aに送られる。シフタ6aは、和信号D(0)の上位13ビットを下位へ13ビットだけシフトさせて、加算器4aの第1の入力の下位13ビット位置へ供給する。和信号D(0)の下位13ビットが加算器4bの第1の入力の上位13ビット位置へ送られる。桁上げ信号E(0)の上位13ビットがシフタ6bに送られる。シフタ6bは、桁上げ信号E(0)の上位13ビットを下位へ13ビットだけシフトさせて、加算器4aの第2の入力の下位13ビット位置へ供給する。桁上げ信号E(0)の下位13ビットが加算器4bの第2の入力の上位13ビット位置へ送られる。和信号F(0)の全26ビットが加算器4bの第3の入力の全26ビット位置へ供給される。桁上げ信号G(0)の全26ビットが加算器4bの第4の入力の全26ビット位置へ供給される。
【0099】
図13は、第2変形例の単精度演算モードにおける第1サイクルの加算器4a~bの入力および出力を表わす図である。
【0100】
加算器4aは、第1の入力の下位13ビット位置に、和信号D(0)の上位13ビット{d25(0)-d13(0)}を受ける。加算器4aは、第2の入力の下位13ビット位置に、桁上げ信号E(0)の上位13ビット{e25(0)-e13(0)}を受ける。加算器4aは、第3の入力の全26ビット位置に、シフタ7aから26ビット(全ビットが0)を受ける。加算器4aは、第4の入力の下位2ビット位置に、加算器4bの加算結果(28ビット)のうちの上位2ビットを受ける。
【0101】
加算器4aの加算結果L(0)のうちの下位26ビット{l25(0)-l0(0)}がレジスタ5aに送られる。
【0102】
加算器4bは、第1の入力の上位13ビット位置に、和信号D(0)の下位13ビット{d12(0)-d0(0)}を受ける。加算器4bは、第2の入力の上位13ビット位置に、桁上げ信号E(0)の下位13ビット{e12(0)-e0(0)}を受ける。
【0103】
加算器4bは、第3の入力の全26ビット位置に、和信号F(0)の全26ビット{f25(0)-f0(0)}を受ける。加算器4bは、第4の入力の全26ビット位置に、桁上げ信号G(0)の全26ビット{g25(0)-g0(0)}を受ける。加算器4bは、第5の入力の全26ビット位置に、シフタ7bから26ビット(全ビットが0)を受ける。
【0104】
加算器4bの加算結果M(0)のうちの下位26ビット{m25(0)-m0(0)}が第1の出力として、レジスタ5bに送られる。加算器4bの加算結果M(0)のうちの上位2ビットが第2の出力として、加算器4aの第4の入力の下位2ビット位置に送られる。
【0105】
次に、単精度演算モードにおける第2サイクルの計算手順を説明する。
Wallace木乗算器2aは、第1の乗数A1の上位13ビットA10と、第1の被乗数B1の下位13ビットB11とを受けたときに、和信号D(1)および桁上げ信号E(1)を出力する。Wallace木乗算器2bは、第1の乗数A1の下位13ビットA11と、第1の被乗数B1の下位13ビットB11とを受けたときに、和信号F(1)および桁上げ信号G(1)を出力する。
【0106】
第1の接続切替器20によって、Wallace木乗算器2a~2dの出力が、加算器4a~4dに送られる。第2の接続切替器30によって、レジスタ5a~5d内のデータが加算器4a~4dに送られる。第1の接続切替器20は、信号D(1)~G(1)を、第1サイクルの信号D(0)~G(0)と同様にして加算器4a~bに送る。
【0107】
図14は、第2変形例の単精度演算モードにおける第2サイクルの加算器4a~bの入力および出力を表わす。加算器4aの第1~2および4の入力並びに出力と、加算器4bの第1~4の入力並びに出力とは、本図に示したように第1サイクルにおいて各入力に与えられた信号および出力される信号に対応する第2サイクルの信号であるから、相違点を除き説明を省略する。
【0108】
シフタ7aは、レジスタ5aに保持されている26ビット{l25(0)-l0(0)}を上位へ13ビットだけシフトさせる。シフタ7bは、レジスタ5bに保持されている26ビット{m25(0)-m0(0)}を上位へ13ビットだけシフトさせて、シフタ7bから溢れた13ビット{m25(0)-m13(0)}をシフタ7aの下位13ビット位置に送る。加算器4aは、第3の入力の全26ビット位置に、シフタ7aから26ビット{上位13ビット:l12(0)-l0(0)、下位13ビット:m25(0)-m13(0)}を受ける。
【0109】
加算器4bは、第5の入力の全26ビット位置に、シフタ7bから26ビット{上位13ビット:m12(0)-m0(0)、下位13ビット:全ビットが0}を受ける。
【0110】
第2の接続切替器30は、第2サイクルの終了後、レジスタ5a~d内のデータの出力先を出力端子OP1~4へ切り替える。これによって、出力端子OP1~4から、第1の積の上位26ビットC10、第1の積の下位26ビットC11、第2の積の上位26ビットC20、第2の積の下位26ビットC21が出力される。
【0111】
(倍精度演算モード)
倍精度演算モードでは、乗数および被乗数は、52ビットであり、積は、104ビットである。倍精度演算モードでは、4サイクルで乗算が実行される。倍精度演算モードでは、スイッチ9b,9c,9dは、オンとなる。
【0112】
図15は、倍精精度演算モード時の乗数A1、および被乗数B1、積C1を表わす。
図16は、第2変形例の演算装置1の倍精度演算モードの動作を説明する。
【0113】
図15および
図16に示すように、演算装置1は、乗数A1と被乗数B1とを乗算して、積C1を出力する。乗数A1は、ビット位置が上位から順番に、第1~4ビット群(第1~4桁範囲)A10~A13に分割される。被乗数B1は、ビット位置が上位から順番に、第1~4ビット群(第1~4桁範囲)B10~B13に分割される。積C1は、ビット位置が上位から順番に、第1~4ビット群C10~C13に分割される。
【0114】
まず、倍精度演算モードにおける第1サイクルの計算手順を説明する。
Wallace木乗算器2aは、乗数A1の第1ビット群A10と、被乗数B1の第1ビット群B10とを受けて、和信号D(0)および桁上げ信号E(0)を出力する。Wallace木乗算器2bは、乗数A1の第2ビット群A11と、被乗数B1の第1ビット群B10とを受けて、和信号F(0)および桁上げ信号G(0)を出力する。Wallace木乗算器2cは、乗数A1の第3ビット群A12と、被乗数B1の第1ビット群B10とを受けて、和信号H(0)および桁上げ信号I(0)を出力する。Wallace木乗算器2dは、乗数A1の第4ビット群A13と、被乗数B1の第1ビット群B10とを受けて、和信号J(0)および桁上げ信号K(0)を出力する。
【0115】
第1の接続切替器20によって、Wallace木乗算器2a~2dの出力が、加算器4a~4dに送られる。第2の接続切替器30によって、レジスタ5a~5d内のデータが加算器4a~4dに送られる。
【0116】
すなわち、和信号D(0)の上位13ビットが加算器4bの第1の入力の下位13ビット位置に送られる。和信号D(0)の下位13ビットが加算器4cの第1の入力の上位13ビット位置に送られる。桁上げ信号E(0)の上位13ビットが加算器4bの第2の入力の下位13ビット位置に送られる。桁上げ信号E(0)の下位13ビットが加算器4cの第2の入力の上位13ビット位置に送られる。和信号F(0)の全26ビットが加算器4cの第3の入力の全26ビット位置に供給される。桁上げ信号G(0)の全26ビットが加算器4cの第4の入力の全26ビット位置に供給される。和信号H(0)の上位13ビットが加算器4cの第5の入力の下位13ビット位置に送られる。和信号H(0)の下位13ビットが加算器4dの第1の入力の上位13ビット位置に送られる。桁上げ信号I(0)の上位13ビットが加算器4cの第6の入力の下位13ビット位置に送られる。桁上げ信号I(0)の下位13ビットが加算器4dの第2の入力の上位13ビット位置に送られる。和信号J(0)の全26ビットが加算器4dの第3の入力の全26ビット位置に供給される。桁上げ信号K(0)の全26ビットが加算器4dの第4の入力の全26ビットと位置に供給される。
【0117】
図17は、第2変形例の倍精度演算モードにおける第1サイクルの加算器4a~dの入力および出力を表わす図である。加算器4aは、第1の入力の全26ビット位置に、シフタ7aから26ビット(全ビットが0)を受ける。加算器4aは、第2の入力の下位2ビット位置に、加算器4bの加算結果M(0)(28ビット)のうちの上位2ビットを受ける。
【0118】
加算器4aの加算結果L(0)のうちの下位26ビット{l25(0)-l0(0)}がレジスタ5aに送られる。
【0119】
加算器4bは、第1の入力の下位13ビット位置に、和信号D(0)の上位13ビット{d25(0)-d13(0)}を受ける。加算器4bは、第2の入力の下位13ビット位置に、桁上げ信号E(0)の上位13ビット{e25(0)-e13(0)}を受ける。加算器4bは、第3の入力の全26ビット位置に、シフタ7bから26ビット(全ビットが0)を受ける。加算器4bは、第4の入力の下位2ビット位置に、加算器4cの加算結果N(0)(28ビット)のうちの上位2ビットを受ける。
【0120】
加算器4bの加算結果M(0)のうちの下位26ビット{m25(0)-m0(0)}が第1の出力として、レジスタ5bに送られる。加算器4bの加算結果M(0)のうちの上位2ビットが第2の出力として、加算器4aの第2の入力の下位2ビット位置に送られる。
【0121】
加算器4cは、第1の入力の上位13ビット位置に、和信号D(0)の下位13ビット{d12(0)-d0(0)}を受ける。加算器4cは、第2の入力の上位13ビット位置に、桁上げ信号E(0)の下位13ビット{e12(0)-e0(0)}を受ける。加算器4cは、第3の入力の全26ビット位置に、和信号F(0)の全26ビット{f25(0)-f0(0)}を受ける。加算器4cは、第4の入力の全26ビット位置に、桁上げ信号G(0)の全26ビット{g25(0)-g0(0)}を受ける。加算器4cは、第5の入力の下位13ビット位置に、和信号H(0)の上位13ビット{h25(0)-h13(0)}を受ける。加算器4cは、第6の入力の下位13ビット位置に、桁上げ信号I(0)の上位13ビット{i25(0)-i13(0)}を受ける。加算器4cは、第7の入力の全26ビット位置に、シフタ7cから26ビット(全ビットが0)を受ける。加算器4cは、第8の入力の下位2ビット位置に、加算器4dの加算結果O(0)(28ビット)のうちの上位2ビットを受ける。
【0122】
加算器4cの加算結果N(0)のうちの下位26ビット{n25(0)-n0(0)}が第1の出力として、レジスタ5cに送られる。加算器4cの加算結果N(0)のうちの上位2ビットが第2の出力として、加算器4bの第4の入力の下位2ビット位置に送られる。
【0123】
加算器4dは、第1の入力の上位13ビット位置に、和信号H(0)の下位13ビット{h12(0)-h0(0)}を受ける。加算器4dは、第2の入力の上位13ビット位置に、桁上げ信号I(0)の下位13ビット{i12(0)-i0(0)}を受ける。加算器4dは、第3の入力の全26ビット位置に、和信号J(0)の全26ビット{j25(0)-j0(0)}を受ける。加算器4dは、第4の入力の全26ビット位置に、桁上げ信号K(0)の全26ビット{k25(0)-k0(0)}を受ける。加算器4dは、第5の入力の全26ビット位置に、シフタ7dから26ビット(全ビットが0)を受ける。
【0124】
加算器4dの加算結果O(0)のうちの下位26ビット{o25(0)-o0(0)}が第1の出力として、レジスタ5dに送られる。加算器4dの加算結果O(0)のうちの上位2ビットが第2の出力として、加算器4cの第8の入力の下位2ビット位置に送られる。
【0125】
次に、倍精度演算モードにおける第2サイクルの計算手順を説明する。
Wallace木乗算器2aは、乗数A1の第1ビット群A10と、被乗数B1の第2ビット群B11とを受けて、和信号D(1)および桁上げ信号E(1)を出力する。Wallace木乗算器2bは、乗数A1の第2ビット群A11と、被乗数B1の第2ビット群B11とを受けて、和信号F(1)および桁上げ信号G(1)を出力する。Wallace木乗算器2cは、乗数A1の第3ビット群A12と、被乗数B1の第2ビット群B11とを受けて、和信号H(1)および桁上げ信号I(1)を出力する。Wallace木乗算器2dは、乗数A1の第4ビット群A13と、被乗数B1の第2ビット群B11とを受けて、和信号J(1)および桁上げ信号K(1)を出力する。
【0126】
第1の接続切替器20によって、Wallace木乗算器2a~2dの出力が、加算器4a~4dに送られる。第2の接続切替器30によって、レジスタ5a~5d内のデータが加算器4a~4dに送られる。第1の接続切替器20は、信号D(1)~K(1)は、第1サイクルの信号D(0)~K(0)と同様にして加算器4a~dに送る。
【0127】
図18は、第2変形例の倍精度演算モードにおける第2サイクルの加算器4a~dの入力および出力を表わす。加算器4aの出力と、加算器4bの第1~2および4の入力並びに出力と、加算器4cの第1~6および8の入力並びに出力と、加算器4dの第1~4の入力および出力とは、本図に示したように第
1サイクルにおいて各入力に与えられた信号および出力される信号に対応する第2サイクルの信号であるから、相違点を除いて説明を省略する。
【0128】
シフタ7aは、レジスタ5aに保持されている26ビット{l25(0)-l0(0)}を上位へ13ビットだけシフトさせる。シフタ7bは、レジスタ5bに保持されている26ビット{m25(0)-m0(0)}を上位へ13ビットだけシフトさせて、シフタ7bから溢れた13ビット{m25(0)-m13(0)}をシフタ7aの下位13ビット位置に送る。
【0129】
加算器4aは、第1の入力の全26ビット位置に、シフタ7aから26ビット{上位13ビット:l12(0)-l0(0)、下位13ビット:m25(0)-m13(0)}を受ける。
【0130】
シフタ7cは、レジスタ5cに保持されている26ビット{n25(0)-n0(0)}を上位へ13ビットだけシフトさせて、シフタ7cから溢れた13ビット{n25(0)-n13(0)}をシフタ7bの下位13ビット位置に送る。
【0131】
加算器4bは、第3の入力の全26ビット位置に、シフタ7bから26ビット{上位13ビット:m12(0)-m0(0)、下位13ビット:n25(0)-n13(0)}を受ける。加算器4bは、第4の入力の下位2ビット位置に、加算器4cの加算結果N(1)(28ビット)のうちの上位2ビットを受ける。
【0132】
シフタ7dは、レジスタ5dに保持されている26ビット{o25(0)-o0(0)}を上位へ13ビットだけシフトさせて、シフタ7dから溢れた13ビット{o25(0)-o13(0)}をシフタ7cの下位13ビット位置に送る。
【0133】
加算器4cは、第7の入力の全26ビット位置に、シフタ7cから26ビット{上位13ビット:n12(0)-n0(0)、下位13ビット:o25(0)-o13(0)}を受ける。
【0134】
加算器4dは、第5の入力の全26ビット位置に、シフタ7dから26ビット{上位13ビット:o12(0)-o0(0)、下位13ビット:全ビットが0}を受ける。
【0135】
加算器4dの加算結果O(1)のうちの下位26ビット{o25(1)-o0(1)}が第1の出力として、レジスタ5dに送られる。加算器4dの加算結果O(1)のうちの上位2ビットが第2の出力として、加算器4cの第8の入力の下位2ビット位置に送られる。
【0136】
倍精度演算モードにおける第3サイクルにおけるWallace木乗算器2a~2dの入力は以下のように動作する。
【0137】
Wallace木乗算器2aは、乗数A1の第1ビット群A10と、被乗数B1の第3ビット群B12とを受けて、和信号D(2)および桁上げ信号E(2)を出力する。Wallace木乗算器2bは、乗数A1の第2ビット群A11と、被乗数B1の第3ビット群B12とを受けて、和信号F(2)および桁上げ信号G(2)を出力する。Wallace木乗算器2cは、乗数A1の第3ビット群A12と、被乗数B1の第3ビット群B12とを受けて、和信号H(2)および桁上げ信号I(2)を出力する。Wallace木乗算器2dは、乗数A1の第4ビット群A13と、被乗数B1の第3ビット群B12とを受けて、和信号J(2)および桁上げ信号K(2)を出力する。
【0138】
第3サイクルの以降の計算手順は、第2サイクルの計算手順と同様なので、説明を繰り返さない。
【0139】
倍精度演算モードにおける第4サイクルにおけるWallace木乗算器2a~2dの入力は以下のように動作する。
【0140】
Wallace木乗算器2aは、乗数A1の第1ビット群A10と、被乗数B1の第4ビット群B13とを受けて、和信号D(3)および桁上げ信号E(3)を出力する。Wallace木乗算器2bは、乗数A1の第2ビット群A11と、被乗数B1の第4ビット群B13とを受けて、和信号F(3)および桁上げ信号G(3)を出力する。Wallace木乗算器2cは、乗数A1の第3ビット群A12と、被乗数B1の第4ビット群B13とを受けて、和信号H(3)および桁上げ信号I(3)を出力する。Wallace木乗算器2dは、乗数A1の第4ビット群A13と、被乗数B1の第4ビット群B13とを受けて、和信号J(3)および桁上げ信号K(3)を出力する。
【0141】
第4サイクルの以降の計算手順は、第2サイクルの計算手順と同様なので、説明を繰り返さない。
【0142】
第2の接続切替器30は、第4サイクルの終了後、レジスタ5a~d内のデータの出力先を出力端子OP1~4に切替える。これによって、出力端子OP1~4から、積C1の第1~4ビット群C10~C13が出力される。
【0143】
図19は、Wallace木乗算器2aの構成を表わす。
図20は、Wallace木乗算器2aで生成されるデータを表わす。
【0144】
Wallace木乗算器2aは、入力生成器79と、CSA(Carry Save Adder)51~CSA61とを備える。入力生成器79は、13ビットの入力IN1と、13ビットの入力IN2とから、各々13ビットのX0~X12を生成する。
【0145】
X0は、IN1と、IN2の第0ビット(LSB)との積である。IN2の第0ビットが0の場合に、X0の全ビットが0である。IN2の第0ビットが1の場合には、X0の全ビットは、IN1の全ビットと同じである。同様に、Xi(i=1~13)は、IN1と、IN2の第iビットとの積である。
【0146】
CSA51は、X1と、X2と、X3とを桁上げ信号保留加算して、和信号1Sと、桁上げ信号1Rとを出力する。CSA52は、X3と、X4と、X5とを桁上げ信号保留加算して、和信号2Sと、桁上げ信号2Rとを出力する。CSA53は、X6と、X7と、X8とを桁上げ信号保留加算して、和信号3Sと、桁上げ信号3Rとを出力する。CSA54は、X9と、X10と、X11とを桁上げ信号保留加算して、和信号4Sと、桁上げ信号4Rとを出力する。CSA55は、和信号1Sと、桁上げ信号1Rと、和信号2Sとを桁上げ信号保留加算して、和信号5Sと、桁上げ信号5Rとを出力する。CSA56は、桁上げ信号2Rと、和信号3Sと、桁上げ信号3Rとを桁上げ信号保留加算して、和信号6Sと、桁上げ信号6Rとを出力する。CSA57は、和信号4Sと、桁上げ信号4Rと、X12とを桁上げ信号保留加算して、和信号7Sと、桁上げ信号7Rとを出力する。CSA58は、和信号5Sと、桁上げ信号5Rと、和信号6Sとを桁上げ信号保留加算して、和信号8Sと、桁上げ信号8Rとを出力する。CSA59は、桁上げ信号6Rと、和信号7Sと、桁上げ信号7Rとを桁上げ信号保留加算して、和信号9Sと、桁上げ信号9Rとを出力する。CSA60は、和信号8Sと、桁上げ信号8Rと、和信号9Sとを桁上げ信号保留加算して、和信号10Sと、桁上げ信号10Rとを出力する。CSA61は、和信号10Sと、桁上げ信号10Rと、桁上げ信号9Rとを桁上げ信号保留加算して、和信号11Sと、桁上げ信号11Rとを出力する。和信号11SがWallace木乗算器2aから出力される和信号Dとなり、桁上げ信号11RがWallace木乗算器2aから出力される桁上げ信号Eとなる。
【0147】
加算器4a~4dも、複数のCSAを備え、Wallace木に基づいて、加算を実行するものであってもよい。
【0148】
以上のように、本変形例によれば、小さな回路規模で、半精度演算、単精度演算、または倍精度演算を実行することができる。
【0149】
[第3変形例]
図21は、第3変形例の演算装置101の構成を表わす。
【0150】
この演算装置101は、Wallace木乗算器2a~2dと、第1の接続切替器120と、加算器14a~14dと、レジスタ15a~15dと、レジスタ25a~25dと、第2の接続切替器130と、加算器16a~16dと、出力端子OP1~OP4と、スイッチ161b~161d、151b~151dを備える。演算装置101は、第2変形例と同様に、8個の入力(IN1~IN8)を受けて、4個の演算結果(OUT1~OUT4)を出力する。
【0151】
第3変形例の演算装置101は、第2変形例の演算装置1における加算器4a~dを桁上げ保存加算器(CSA)としたものであり、第2変形例の演算装置1に対し、
図1の実施形態から
図6の第1変形例への変更と同様の変更を加えたものである。すなわち、演算装置1におけるレジスタ5a~5dは、和信号および桁上げ信号を別々に保持できるようにレジスタ15a~dおよびレジスタ25a~dに分けられている。また、レジスタ15a~dおよびレジスタ25a~dに保持される和信号および桁上げ信号を加算して最終的な積を算出するために、第1変形例の第2加算要素544に対応する加算器16a~dが設けられる。また、加算器4a~dをCSAとしたことに伴って、加算器4b~dからの桁上がりビットを上位側に送るか否かを切り替えるスイッチ9b~dは、和信号用のスイッチ161b~dおよび桁上げ信号用のスイッチ151b~dに分けられる。以下、第2変形例の演算装置1からの変更点を中心に、演算装置101の構成および動作を説明する。
【0152】
Wallace木乗算器2a~2dは、第2変形例と同様である。
加算器14a~14dは、Wallace木に基づいて、複数の2単位ビット長のデータの加算結果の1段前の和信号および桁上げ信号を出力する。
【0153】
レジスタ15a~15dは、それぞれ対応する加算器14a~14dから出力される和信号を保持する。
レジスタ25a~25dは、それぞれ対応する加算器14a~14dから出力される桁上げ信号を保持する。
【0154】
加算器16a~16dは、それぞれ入力される和信号と桁上げ信号とを加算する。
出力端子OP1~OP4は、それぞれ加算器16a~16dの加算結果を出力する。
【0155】
第1の接続切替器120は、第2変形例と同様である。
【0156】
第2の接続切替器130は、第2変形例と同様に、レジスタ5a~dの各加算結果に代えて、レジスタ15aおよびレジスタ25aの和信号および桁上げ信号の組、レジスタ15bおよびレジスタ25bの和信号および桁上げ信号の組、レジスタ15cおよびレジスタ25cの和信号および桁上げ信号の組、レジスタ15dおよびレジスタ25dの和信号および桁上げ信号の組の出力先を切り替える。
【0157】
スイッチ161bは、加算器14bから加算器14aへ和信号の桁上りビットを送るか否かを切り替える。スイッチ161cは、加算器14cから加算器14bへ和信号の桁上りビットを送るか否かを切り替える。スイッチ161dは、加算器14dから加算器14cへ和信号の桁上りビットを送るか否かを切り替える。スイッチ151bは、加算器14bから加算器14aへ桁上げ信号の桁上りビットを送るか否かを切り替える。スイッチ151cは、加算器14cから加算器14bへ桁上げ信号の桁上りビットを送るか否かを切り替える。スイッチ151dは、加算器14dから加算器14cへ桁上げ信号の桁上りビットを送るか否かを切り替える。
【0158】
演算装置101は、第2変形例と同様に、半精度演算モード、単精度演算モード、および倍精度演算モードで動作する。以下では、各演算モードについて、第2変形例の演算装置1の動作との相違点を中心に動作を説明する。
【0159】
(半精度演算モード)
図22は、第3変形例の演算装置101の半精度演算モードの動作を説明する。半精度演算モードでは、第1の接続切替器120によって、Wallace木乗算器2a~2dの出力が、加算器16a~16dに送られる。
【0160】
すなわち例えば、和信号Dの全26ビットが加算器16aの第1の入力の全26ビット位置に供給され、桁上げ信号Eの全26ビットが加算器16aの第2の入力の全26ビット位置に供給される。
【0161】
図23は、第3変形例の半精度演算モードにおける加算器16aの入力を表わす。
【0162】
加算器16aは、第1の入力の全26ビット位置に、和信号Dの全26ビット{d25-d0}を受ける。加算器16aは、第2の入力の全26ビット位置に、桁上げ信号Eの全26ビット{e25-e0}を受ける。加算器16aは、和信号Dの全26ビットと桁上げ信号Eの全26ビットとを加算して、第1の積C1として下位26ビットを出力する。加算器16b~dは、入力および出力が
図22のように相違する他は加算器16aと同様に動作する。
【0163】
(単精度演算モード)
図24は、第3変形例の演算装置101の単精度演算モードの動作を、主に乗数A1および被乗数B1の積C1を算出する動作における第2変形例との相違点を中心に説明する。
図16のシフタ7a~dは、和信号および桁上げ信号をシフトするべくシフタ17a~dおよびシフタ27a~dに分けられる。
【0164】
図25は、第3変形例の単精度演算モードにおける第1サイクルの加算器14a~bの入力および出力を表わす。
【0165】
加算器14aの入力および出力は、第2変形例における加算器4aの入力および出力に対して、第3の入力が和信号の第3入力および桁上げ信号の第4の入力に分けられ、第4の入力が和信号の第5の入力および桁上げ信号の第6の入力に分けられ、出力が和信号の第1の出力および桁上げ信号の第2の出力に分けられたものとなる。加算器14aは、第3の入力の全26ビット位置に、シフタ17aから26ビット(全ビットが0)を受ける。加算器14aは、第4の入力の全26ビット位置に、シフタ27aから26ビット(全ビットが0)を受ける。加算器14aは、第5の入力の下位2ビット位置に、加算器14bの加算結果である和信号SM(28ビット)の上位2ビットを受ける。加算器14aは、第6の入力の下位3ビット位置に、加算器14bの加算結果である桁上げ信号RM(29ビット)の上位3ビットを受ける。
【0166】
加算器14aの加算結果である和信号SL(0)のうちの下位26ビット{Sl25(0)-Sl0(0)}が第1の出力として、レジスタ15aに送られる。加算器14aの加算結果である桁上げ信号RL(0)のうちの下位26ビット{Rl25(0)-Rl0(0)}が第2の出力として、レジスタ25aに送られる。
【0167】
加算器14bの入力および出力は、第2変形例における加算器4bの入力および出力に対して、第5の入力が和信号の第5の入力および桁上げ信号の第6の入力に分けられ、第1の出力が和信号の第1の出力および桁上げ信号の第2の出力に分けられ、第2の出力が和信号の第3の出力および桁上げ信号の第4の出力に分けられたものとなる。加算器14bは、第5の入力の全26ビット位置に、シフタ17bから26ビット(全ビットが0)を受ける。加算器14bは、第6の入力の全26ビット位置に、シフタ27bから26ビット(全ビットが0)を受ける。
【0168】
加算器14bの加算結果である和信号SM(0)のうちの下位26ビット{Sm25(0)-Sm0(0)}が第1の出力として、レジスタ15bに送られる。加算器14bの加算結果である和信号SM(0)のうちの上位2ビットが第3の出力として、加算器14aの第5の入力の下位2ビット位置に送られる。加算器14bの加算結果である桁上げ信号RM(0)のうちの下位26ビット{Rm25(0)-Rm0(0)}が第2の出力として、レジスタ25bに送られる。加算器14bの加算結果である桁上げ信号RM(0)のうちの上位3ビットが第4の出力として、加算器14aの第6の入力の下位3ビット位置に送られる。
【0169】
図26は、第3変形例の単精度演算モードにおける第2サイクルの加算器14a~bの入力および出力を表わす。加算器14a~bに対する信号の入力元は、第1サイクルと同様である。
【0170】
シフタ17aは、レジスタ15aに保持されている26ビット{Sl25(0)-Sl0(0)}を上位へ13ビットだけシフトさせる。シフタ17bは、レジスタ15bに保持されている26ビット{Sm25(0)-Sm0(0)}を上位へ13ビットだけシフトさせて、シフタ17bから溢れた13ビット{Sm25(0)-Sm13(0)}をシフタ17aの下位13ビット位置に送る。シフタ27aは、レジスタ25aに保持されている26ビット{Rl25(0)-Rl0(0)}を上位へ13ビットだけシフトさせる。シフタ27bは、レジスタ25bに保持されている26ビット{Rm25(0)-Rm0(0)}を上位へ13ビットだけシフトさせて、シフタ27bから溢れた13ビット{Rm25(0)-Rm13(0)}をシフタ27aの下位13ビット位置に送る。
【0171】
加算器14aは、第3の入力の全26ビット位置に、シフタ17aから26ビット{上位13ビット:Sl12(0)-Sl0(0)、下位13ビット:Sm25(0)-Sm13(0)}を受ける。加算器14aは、第4の入力の全26ビット位置に、シフタ27aから26ビット{上位13ビット:Rl12(0)-Rl0(0)、下位13ビット:Rm25(0)-Rm13(0)}を受ける。
【0172】
加算器14aは、第5の入力の下位2ビット位置に、加算器14bの加算結果である和信号SM(1)(28ビット)のうちの上位2ビットを受ける。加算器14aは、第6の入力の下位3ビット位置に、加算器14bの加算結果である桁上げ信号RM(1)(29ビット)のうちの上位3ビットを受ける。
【0173】
加算器14aの加算結果である和信号SL(1)のうちの下位26ビット{Sl25(1)-Sl0(1)}がレジスタ15aに送られる。加算器14aの加算結果である桁上げ信号RL(1)のうちの下位26ビット{Rl25(1)-Rl0(1)}がレジスタ25aに送られる。
【0174】
加算器14bは、第5の入力の全26ビット位置に、シフタ17bから26ビット{上位13ビット:Sm12(0)-Sm0(0)、下位13ビット:全ビットが0}を受ける。加算器14bは、第6の入力の全26ビット位置に、シフタ27bから26ビット{上位13ビット:Rm12(0)-Rm0(0)、下位13ビット:全ビットが0}を受ける。
【0175】
加算器14bの加算結果である和信号SM(1)のうちの下位26ビット{Sm25(1)-Sm0(1)}が第1の出力として、レジスタ15bに送られる。加算器14bの加算結果である和信号SM(1)のうちの上位2ビットが第3の出力として、加算器14aの第5の入力の下位2ビット位置に送られる。加算器14bの加算結果である桁上げ信号RM(1)のうちの下位26ビット{Rm25(1)-Rm0(1)}が第2の出力として、レジスタ25bに送られる。加算器14bの加算結果である桁上げ信号RM(1)のうちの上位3ビットが第4の出力として、加算器14aの第6の入力の下位3ビット位置に送られる。
【0176】
第2の接続切替器130は、第2サイクルの終了後、レジスタ15a~15d、25a~25d内のデータを加算器16a~16dのいずれかに出力する。
【0177】
レジスタ15aに保持されている和信号{Sl25(1)-Sl0(1)}と、レジスタ25aに保持されている桁上げ信号{Rl25(1)-Rl0(1)}とが加算器16aへ送られる。加算器16aは、加算を実行して、第1の積C1の上位26ビットC10を出力端子OP1へ出力する。加算器16bも同様にして、第1の積C1の下位26ビットC11を出力端子OP2へ出力する。ここで、加算器16bは、この加算に伴う桁上がりを加算器16aへと供給し、加算器16aはこの桁上がりを含めて上記の加算を行ってよい。
【0178】
(倍精度演算モード)
図27は、第3変形例の演算装置101の倍精度演算モードの動作を、第2変形例との相違点を中心に説明する。
【0179】
図28Aおよび
図28Bは、第3変形例の倍精度演算モードにおける第1サイクルの加算器14a~dの入力および出力を表わす。
【0180】
第2変形例のレジスタ5a~dを和信号用のレジスタ15a~dおよび桁上げ信号用のレジスタ25a~dに分けたことに伴い、第2変形例におけるシフタ7a~dから加算器4a~dへの入力が、シフタ17a~dから加算器14a~dへの和信号の入力およびシフタ27a~dから加算器14a~dへの桁上げ信号の入力に分けられる。また、加算器14a~dをCSAとしたことに伴い、下位桁からの桁上がりが和信号からの桁上がりおよび桁上げ信号からの桁上がりに分けられる。また、加算器4a~dの出力は、和信号および桁上げ信号に分けられる。これらの相違を除き、
図28A~Bに示した加算器14a~dの入出力は、
図17に示した加算器4a~dの入出力と同様である。
【0181】
加算器14aは、第1の入力の全26ビット位置に、シフタ17aから26ビット(全ビットが0)を受ける。加算器14aは、第2の入力の全26ビット位置に、シフタ27aから26ビット(全ビットが0)を受ける。加算器14aは、第3の入力の下位2ビット位置に、加算器14bの加算結果である和信号SM(0)(28ビット)のうちの上位2ビットを受ける。加算器14aは、第4の入力の下位3ビット位置に、加算器14bの加算結果である桁上げ信号RM(0)(29ビット)のうちの上位3ビットを受ける。
【0182】
加算器14aの加算結果である和信号SL(0)のうちの下位26ビット{Sl25(0)-Sl0(0)}がレジスタ15aに送られる。加算器14aの加算結果である桁上げ信号RL(0)のうちの下位26ビット{Rl25(0)-Rl0(0)}がレジスタ25aに送られる。
【0183】
加算器14bは、第3の入力の全26ビット位置に、シフタ17bから26ビット(全ビットが0)を受ける。加算器14bは、第4の入力の全26ビット位置に、シフタ27bから26ビット(全ビットが0)を受ける。加算器14bは、第5の入力の下位3ビット位置に、加算器14cの加算結果である和信号SN(0)(29ビット)のうちの上位3ビットを受ける。加算器14bは、第6の入力の下位4ビット位置に、加算器14cの加算結果である桁上げ信号RN(0)(30ビット)のうちの上位4ビットを受ける。
【0184】
加算器14bの加算結果である和信号SM(0)のうちの下位26ビット{Sm25(0)-Sm0(0)}が第1の出力として、レジスタ15bに送られる。加算器14bの加算結果である和信号SM(0)のうちの上位2ビットが第3の出力として、加算器14aの第3の入力の下位2ビット位置に送られる。加算器14bの加算結果である桁上げ信号RM(0)のうちの下位26ビット{Rm25(0)-Rm0(0)}が第2の出力として、レジスタ15bに送られる。加算器14bの加算結果である桁上げ信号RM(0)のうちの上位3ビットが第4の出力として、加算器14aの第4の入力の下位3ビット位置に送られる。
【0185】
加算器14cは、第7の入力の全26ビット位置に、シフタ17cから26ビット(全ビットが0)を受ける。加算器14cは、第8の入力の全26ビット位置に、シフタ27cから26ビット(全ビットが0)を受ける。加算器14cは、第9の入力の下位2ビット位置に、加算器14dの加算結果である和信号SO(0)(28ビット)のうちの上位2ビットを受ける。加算器14cは、第10の入力の下位3ビット位置、加算器14dの加算結果である桁上げ信号RO(0)(29ビット)のうちの上位3ビットを受ける。
【0186】
加算器14cの加算結果である和信号SN(0)のうちの下位26ビット{Sn25(0)-Sn0(0)}が第1の出力として、レジスタ15cに送られる。加算器14cの加算結果である和信号SN(0)のうちの上位3ビットが第3の出力として、加算器14bの第5の入力の下位3ビット位置に送られる。加算器14cの加算結果である桁上げ信号RN(0)のうちの下位26ビット{Rn25(0)-Rn0(0)}が第2の出力として、レジスタ25cに送られる。加算器14cの加算結果である桁上げ信号RN(0)のうちの上位4ビットが第4の出力として、加算器14bの第6の入力の下位4ビット位置に送られる。
【0187】
加算器14dは、第5の入力の全26ビット位置に、シフタ17dから26ビット(全ビットが0)を受ける。加算器14dは、第5の入力の全26ビット位置に、シフタ27dから26ビット(全ビットが0)を受ける。
【0188】
加算器14dの加算結果SO(0)のうちの下位26ビット{So25(0)-So0(0)}が第1の出力として、レジスタ15dに送られる。加算器14dの加算結果である桁上げ信号RO(0)のうちの上位2ビットが第3の出力として、加算器14cの第9の入力の下位2ビット位置に送られる。加算器14dの加算結果である桁上げ信号RO(0)のうちの下位26ビット{Ro25(0)-Ro0(0)}が第2の出力として、レジスタ15dに送られる。加算器14dの加算結果である桁上げ信号RO(0)のうちの上位3ビットが第4の出力として、加算器14cの第10の入力の下位3ビット位置に送られる。
【0189】
図29A~Bは、第3変形例の倍精度演算モードにおける第2サイクルの加算器14a~dの入出力を表わす図である。加算器14a~dに対する信号の入力元は、第
1サイクルと同様である。
【0190】
シフタ17aは、レジスタ15aに保持されている26ビット{Sl25(0)-Sl0(0)}を上位へ13ビットだけシフトさせる。シフタ17bは、レジスタ15bに保持されている26ビット{Sm25(0)-Sm0(0)}を上位へ13ビットだけシフトさせて、シフタ17bから溢れた13ビット{Sm25(0)-Sm13(0)}をシフタ17aの下位13ビット位置に送る。シフタ27aは、レジスタ25aに保持されている26ビット{Rl25(0)-Rl0(0)}を上位へ13ビットだけシフトさせる。シフタ27bは、レジスタ25bに保持されている26ビット{Rm25(0)-Rm0(0)}を上位へ13ビットだけシフトさせて、シフタ27bから溢れた13ビット{Rm25(0)-Rm13(0)}をシフタ27aの下位13ビット位置に送る。
【0191】
加算器14aは、第1の入力の全26ビット位置に、シフタ17aから26ビット{上位13ビット:Sl12(0)-Sl0(0)、下位13ビット:Sm25(0)-Sm13(0)}を受ける。加算器14aは、第2の入力の全26ビット位置に、シフタ27aから26ビット{上位13ビット:Rl12(0)-Rl0(0)、下位13ビット:Rm25(0)-Rm13(0)}を受ける。加算器14aは、第3の入力の下位2ビット位置に、加算器14bの加算結果である和信号SM(1)(28ビット)のうちの上位2ビットを受ける。加算器14aは、第4の入力の下位3ビット位置に、加算器14bの加算結果である桁上げ信号RM(1)(29ビット)のうちの上位3ビットを受ける。
【0192】
加算器14aの加算結果である和信号SL(1)のうちの下位26ビット{Sl25(1)-Sl0(1)}がレジスタ15aに送られる。加算器14aの加算結果である桁上げ信号RL(1)のうちの下位26ビット{Rl25(1)-Rl0(1)}がレジスタ25aに送られる。
【0193】
シフタ17cは、レジスタ15cに保持されている26ビット{Sn25(0)-Sn0(0)}を上位へ13ビットだけシフトさせて、シフタ17cから溢れた13ビット{Sn25(0)-Sn13(0)}をシフタ17bの下位13ビット位置に送る。シフタ27cは、レジスタ25cに保持されている26ビット{Rn25(0)-Rn0(0)}を上位へ13ビットだけシフトさせて、シフタ27cから溢れた13ビット{Rn25(0)-Rn13(0)}をシフタ27bの下位13ビット位置に送る。
【0194】
加算器14bは、第3の入力の全26ビット位置に、シフタ17bから26ビット{上位13ビット:Sm12(0)-Sm0(0)、下位13ビット:Sn25(0)-Sn13(0)}を受ける。加算器14bは、第4の入力の全26ビット位置に、シフタ27bから26ビット{上位13ビット:Rm12(0)-Rm0(0)、下位13ビット:Rn25(0)-Rn13(0)}を受ける。加算器14bは、第5の入力の下位3ビット位置に、加算器14cの加算結果である和信号SN(1)(29ビット)のうちの上位3ビットを受ける。加算器14bは、第6の入力の下位4ビット位置に、加算器14cの加算結果である桁上げ信号RN(1)(30ビット)のうちの上位4ビットを受ける。
【0195】
加算器14bの加算結果である和信号SM(1)のうちの下位26ビット{Sm25(1)-Sm0(1)}が第1の出力として、レジスタ15bに送られる。加算器14bの加算結果である和信号SM(1)のうちの上位2ビットが第3の出力として、加算器14aの第3の入力の下位2ビット位置に送られる。加算器14bの加算結果である桁上げ信号RM(1)のうちの下位26ビット{Rm25(1)-Rm0(1)}が第2の出力として、レジスタ25bに送られる。加算器14bの加算結果である桁上げ信号RM(1)のうちの上位3ビットが第4の出力として、加算器14aの第4の入力の下位3ビット位置に送られる。
【0196】
シフタ17dは、レジスタ15dに保持されている26ビット{So25(0)-So0(0)}を上位へ13ビットだけシフトさせて、シフタ17dから溢れた13ビット{So25(0)-So13(0)}をシフタ17cの下位13ビット位置に送る。シフタ27dは、レジスタ25dに保持されている26ビット{Ro25(0)-Ro0(0)}を上位へ13ビットだけシフトさせて、シフタ27dから溢れた13ビット{Ro25(0)-Ro13(0)}をシフタ27cの下位13ビット位置に送る。
【0197】
加算器14cは、第7の入力の全26ビット位置に、シフタ17cから26ビット{上位13ビット:Sn12(0)-Sn0(0)、下位13ビット:So25(0)-So13(0)}を受ける。加算器14cは、第8の入力の全26ビット位置に、シフタ27cから26ビット{上位13ビット:Rn12(0)-Rn0(0)、下位13ビット:Ro25(0)-Ro13(0)}を受ける。加算器14cは、第9の入力の下位2ビット位置に、加算器14dの加算結果である和信号SO(1)(28ビット)のうちの上位2ビットを受ける。加算器14cは、第10の入力の下位3ビット位置に、加算器14dの加算結果である桁上げ信号RO(1)(29ビット)のうちの上位3ビットを受ける。
【0198】
加算器14cの加算結果である和信号SN(1)のうちの下位26ビット{Sn25(1)-Sn0(1)}が第1の出力として、レジスタ15cに送られる。加算器14cの加算結果である和信号SN(1)のうちの上位3ビットが第3の出力として、加算器14bの第5の入力の下位3ビット位置に送られる。加算器14cの加算結果である桁上げ信号RN(1)のうちの下位26ビット{Rn25(1)-Rn0(1)}が第2の出力として、レジスタ25cに送られる。加算器14cの加算結果である桁上げ信号RN(1)のうちの上位4ビットが第4の出力として、加算器14bの第6の入力の下位4ビット位置に送られる。
【0199】
加算器14dは、第5の入力の全26ビット位置に、シフタ17dから26ビット{上位13ビット:So12(0)-So0(0)、下位13ビット:全ビットが0}を受ける。加算器14dは、第6の入力の全26ビット位置に、シフタ27dから26ビット{上位13ビット:Ro12(0)-Ro0(0)、下位13ビット:全ビットが0}を受ける。
【0200】
加算器14dの加算結果である和信号SO(1)のうちの下位26ビット{So25(1)-So0(1)}が第1の出力として、レジスタ15dに送られる。加算器14dの加算結果である和信号SO(1)のうちの上位2ビットが第3の出力として、加算器14cの第9の入力の下位2ビット位置に送られる。加算器14dの加算結果である桁上げ信号RO(1)のうちの下位26ビット{Ro25(1)-Ro0(1)}が第2の出力として、レジスタ25dに送られる。加算器14dの加算結果である桁上げ信号RO(1)のうちの上位3ビットが第4の出力として、加算器14cの第10の入力の下位3ビット位置に送られる。
【0201】
倍精度演算モードにおける第3~4サイクルにおけるWallace木乗算器2a~2dの入力は第2変形例と同様である。第3~4サイクルの以降の計算手順は、第2サイクルの計算手順と同様なので、説明を繰り返さない。
【0202】
第2の接続切替器130は、第4サイクルの終了後、レジスタ15a~15d、25a~25d内のデータを加算器16a~16dのいずれかに出力する。
【0203】
レジスタ15aに保持されている和信号{Sl25(3)-Sl0(3)}と、レジスタ25aに保持されている桁上げ信号{Rl25(3)-Rl0(3)}とが加算器16aに送られる。加算器16aは、加算を実行して、積C1の第1ビット群C10を出力端子OP1へ出力する。加算器16b~dも同様にして、積C1の第2~4ビット群C11~C13を出力端子OP2~4へ出力する。ここで、加算器16b~dは、この加算に伴う桁上がりを上位側の加算器16a~cへ供給し、上位側の加算器16a~cはこの桁上がりを含めて上記の加算を行ってよい。
【0204】
次に、加算器14a~14dの具体的な構成例を説明する。
半精度演算モードでは、加算器14a~dには、データが入力されない。すなわち、Wallace木乗算器2a~dから出力される和信号D、F、H、およびJと桁上げ信号E、G、I、およびKとが、加算器14a~dを迂回して、加算器16a~dに送られる。単精度演算モードでは、加算器14a~dは、順に、6入力2出力、6入力2出力+2桁上げ信号出力、6入力2出力、6入力2出力+2桁上げ信号出力の桁上げ信号保留加算を実行する。倍精度演算モードでは、加算器14a~dは、順に、4入力2出力、6入力2出力+2桁上げ信号出力、10入力2出力+2桁上げ信号出力、6入力2出力+2桁上げ信号出力の桁上げ信号保留加算を実行する。
【0205】
加算器14aは、4個のCSAを備える。加算器14aは、単精度演算モードでは、4個のCSAを用いて桁上げ信号保留加算を実行し、倍精度演算モードでは、2個のCSAを用いて桁上げ信号保留加算を実行する。
【0206】
加算器14bは、4個のCSAを備える。加算器14bは、単精度演算モードおよび倍精度演算モードでは、4個のCSAを用いて桁上げ信号保留加算を実行する。
【0207】
加算器14cは、8個のCSAを備える。加算器14cは、単精度演算モードでは、4個のCSAを用いて桁上げ信号保留加算を実行し、倍精度演算モードでは、8個のCSAを用いて桁上げ信号保留加算を実行する。
【0208】
加算器14dは、4個のCSAを備える。加算器14dは、単精度演算モードおよび倍精度演算モードでは、4個のCSAを用いて桁上げ信号保留加算を実行する。
【0209】
図30は、2個のCSAを用いて桁上げ信号保留加算を実行する加算器200の構成を表わす。この加算器200の構成は、加算器14aの倍精度演算モード時の構成である。
図31は、加算器200の入力データ、途中データ、出力データを表わす。
【0210】
この加算器200には、4つのデータY0、Y1、Y2、Y3が入力される。
CSA111は、Y0と、Y1と、Y2とを桁上げ信号保留加算して、和信号1Sと、桁上げ信号1Rとを出力する。CSA112は、Y3と、和信号1Sと、桁上げ信号1Rとを桁上げ信号保留加算して、和信号2Sと、桁上げ信号2Rとを出力する。
【0211】
和信号2Sの下位26ビットが一方のレジスタへ出力され、桁上げ信号2Rの下位26ビットが他方のレジスタへ出力される。
【0212】
図32は、4個のCSAを用いて桁上げ信号保留加算を実行する加算器300の構成を表わす図である。この加算器300の構成は、加算器14a~dの単精度演算モード時の構成、および加算器14b,dの倍精度演算モード時の構成である。
図33は、加算器300の入力データ、途中データ、出力データを表わす図である。
【0213】
この加算器300には、6つのデータY0、Y1、Y2、Y3、Y4、Y5が入力される。
【0214】
CSA121は、Y0と、Y1と、Y2とを桁上げ信号保留加算して、和信号1Sと、桁上げ信号1Rとを出力する。CSA122は、Y3と、Y4と、Y5とを桁上げ信号保留加算して、和信号2Sと、桁上げ信号2Rとを出力する。CSA123は、和信号1Sと、桁上げ信号1Rと、和信号2Sとを桁上げ信号保留加算して、和信号3Sと、桁上げ信号3Rとを出力する。CSA124は、和信号3Sと、桁上げ信号3Rと、桁上げ信号2Rとを桁上げ信号保留加算して、和信号4Sと、桁上げ信号4Rとを出力する。
【0215】
和信号4Sの下位26ビットが一方のレジスタへ出力され、桁上げ信号4Rの下位26ビットが他方のレジスタへ出力される。桁上げ信号出力する場合には、和信号4Sの上位2ビットが他の加算器へ桁上げ信号出力され、桁上げ信号4Rの上位3ビットが他の加算器へ桁上げ信号出力される。
【0216】
なお、和信号1S、2S、桁上げ信号1R,2Rが生成された時点で、それらのパターンに従って、2ビットまたは3ビットの桁上げビットを生成して、加算器300から他の加算器へ出力するものとしてもよい。
【0217】
図34は、8個のCSAを用いて桁上げ信号保留加算を実行する加算器400の構成を表わす図である。この加算器400の構成は、加算器14cの倍精度演算モード時の構成である。この加算器400には、10個のデータY0~Y9が入力される。
【0218】
CSA131は、Y0と、Y1と、Y2とを桁上げ信号保留加算して、和信号1Sと、桁上げ信号1Rとを出力する。CSA132は、Y3と、Y4と、Y5とを桁上げ信号保留加算して、和信号2Sと、桁上げ信号2Rとを出力する。CSA133は、Y6と、Y7と、Y8とを桁上げ信号保留加算して、和信号3Sと、桁上げ信号3Rとを出力する。
【0219】
CSA134は、和信号1Sと、桁上げ信号1Rと、和信号2Sとを桁上げ信号保留加算して、和信号4Sと、桁上げ信号4Rとを出力する。CSA135は、Y9と、桁上げ信号2Rと、和信号3Sとを桁上げ信号保留加算して、和信号5Sと、桁上げ信号5Rとを出力する。CSA136は、和信号4Sと、桁上げ信号4Rと、和信号5Sとを桁上げ信号保留加算して、和信号6Sと、桁上げ信号6Rとを出力する。CSA137は、和信号6Sと、桁上げ信号3Rと、桁上げ信号5Rとを桁上げ信号保留加算して、和信号7Sと、桁上げ信号7Rとを出力する。CSA138は、桁上げ信号6Rと、和信号7Sと、桁上げ信号7Rとを桁上げ信号保留加算して、和信号8Sと、桁上げ信号8Rとを出力する。
【0220】
和信号8Sの下位26ビットが一方のレジスタへ出力され、桁上げ信号8Rの下位26ビットが他方のレジスタへ出力される。また、和信号8Sの上位3ビットが他の加算器へ桁上げ信号出力され、桁上げ信号8Rの上位4ビットが他の加算器へ桁上げ信号出力される。
【0221】
本実施の形態の演算装置によれば、加算器14a~14dは、加算結果の1段前の和信号および桁上げ信号を出力し、加算器16a~16dは、単精度演算では、2サイクルに1回だけ、倍精度演算では、4サイクルに1回だけ加算を実行すればよい。したがって、本実施の形態では、演算装置全体の動作速度および電力効率を第2変形例よりも増加させることができる。
【0222】
[第4変形例]
図35は、第4変形例の演算システム1000の構成を表わす。この演算システム100は、演算ユニット900と、複数の要素プロセッサPE1~PE4とを備える。
【0223】
複数の要素プロセッサPE1~PE4は、演算ユニット900を共有して使用する。演算システム1000が行列演算を実行するときには、要素プロセッサPE1~PE4が協同して1つのプロセッサとして動作し、行列演算以外の演算を実行するときには、要素プロセッサPE1~PE4が個別のプロセッサとして動作する。演算システム1000が行列演算以外の演算を実行する際にも、要素プロセッサPE1~PE4が1つのプロセッサとして動作するものとしてもよい。要素プロセッサPE1~PE4が1つのプロセッサとして動作する場合、1つのインストラクションで要素プロセッサPE1~PE4が動作するので、要素プロセッサPE1~PE4は、SIMD動作を行っているとみなされうる。
【0224】
要素プロセッサPE1~PE4は、リング結合されている。具体的には、要素プロセッサPE1と要素プロセッサPE2とがデータバスで接続され、要素プロセッサPE2と要素プロセッサPE3とがデータバスで接続され、要素プロセッサPE3と要素プロセッサPE4とがデータバスで接続され、要素プロセッサPE4と要素プロセッサPE1とがデータバスで接続されている。要素プロセッサPE1~PE4には、要素プロセッサを一意に識別可能なプロセッサID(00,01,10,11)が設定されている。
【0225】
演算システム1000には、メモリ空間が設定されている。メモリ空間のメモリアドレスは、プロセッサIDを含む。たとえば、メモリアドレスの下位2ビットがプロセッサIDに対応するものとしてもよい。要素プロセッサPE1~PE4のそれぞれには、たとえば、10ビットのアドレスに対応するメモリ空間が割り当てられている。したがって、演算システム1000のメモリ空間は、12ビットに拡大されている。つまり、演算システム1000のメモリ空間が4等分され、各メモリアドレスによって示されるメモリ領域には、当該メモリアドレスに含まれるプロセッサIDによって示される要素プロセッサがアクセスする。
【0226】
要素プロセッサPE1~PE4のそれぞれは、当該要素プロセッサのプロセッサIDを含むメモリアドレスによって示されるメモリ領域(担当領域)へアクセスできるが、当該要素プロセッサのプロセッサIDとは異なるプロセッサIDを含むメモリアドレスによって示されるメモリ領域(非担当領域)へアクセスできない。要素プロセッサPE1~PE4のそれぞれは、リング結合を介して他の要素プロセッサに順にデータ転送(循環シフト)する。これにより、要素プロセッサPE1~PE4のそれぞれは、非担当領域のデータを読出し、または非担当領域にデータを書込むことができる。要素プロセッサPE1~PE4のそれぞれは、メモリアドレスによって示される領域に、演算ユニット900による演算対象である入力データ、および演算ユニット900による演算結果である出力データを保持する。
【0227】
演算ユニット900は、たとえば、複数の浮動小数点演算を並列して実行することができる。演算ユニット900は、たとえば、ディープニューラルネットワーク(DNN:Deep Neural Network)およびコンボリューションニューラルネットワーク(CNN:Convolutional Network)のための演算を実行することができる。
【0228】
演算ユニット900は、複数の演算装置1A~1Dを備える。演算装置1A~1Dのそれぞれは、実施形態で説明した演算装置405、第1変形例で説明した演算装置405、第2変形例で説明した演算装置1、または第3変形例で説明した演算装置101である。
【0229】
演算装置1A~1Dの各々は、演算ユニット900の演算の一部を実行する装置である。要素プロセッサPE1は、演算装置1Aのレジスタにアクセス可能である。要素プロセッサPE2は、演算装置1Bのレジスタにアクセス可能である。要素プロセッサPE3は、演算装置1Cのレジスタにアクセス可能である。要素プロセッサPE4は、演算装置1Dのレジスタにアクセス可能である。
【0230】
(他の変形例)
本発明は、上記の実施形態に限定されるものではなく、たとえば以下のような変形例も含む。
【0231】
(1)上記の実施形態では、演算装置は、乗算(A*B)を実行しているが、A*B+Cを実行することも可能である。このためには、単精度演算の場合には、加算器4a、4c、14a,14cの第3の入力の初期値を0からCに変更すればよく、倍精度演算の場合には、加算器4a、14aの第1の入力の初期値を0からCに変更すればよい。半精度の場合にも、加算器4a~4d、14a~14dの使用されていない入力ポートにCを供給すればよい。
【0232】
(2)上記の実施形態では、浮動小数点形式のデータの仮数部分の演算回路を示しているが、固定小数点形式およびブロック浮動小数点形式のデータの演算回路としても適用可能である。また、これらの演算データ(浮動小数点形式、固定小数点形式、およびブロック浮動小数点形式)が混在したデータの演算回路としても適用可能である。
【0233】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて請求の範囲によって示され、請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【符号の説明】
【0234】
1,1A~1D,101 演算装置、2a~2d Wallace木乗算器、4a~4d,14a~14d,16a~16d,200,300,400 加算器、5a~5d,15a~15d,25a~25d レジスタ、6a~6d,7a~7d,17a~17d,27a~27d シフタ、9b~9d,151b~151d,161b~161d スイッチ、20,120 第1の接続切替器、30,130 第2の接続切替器、51~61,111,112,121~124,131~138 CSA、79 入力生成器、900 演算ユニット、1000 演算システム、PE1~PE4 要素プロセッサ、OP1~OP4 出力端子、405 演算装置、410 乗算部、420-1~4 乗算器、430 加算部、440-1~4 加算器、450-1~4 中間レジスタ、460 モード選択部、470 第1接続切替器、480 第2接続切替器、540 加算器、542 第1加算要素、544 第2加算要素、550 中間レジスタ。