(57)【要約】【課題】回路規模を拡大することなく、演算性能を向上可能な演算装置を提供すること。【解決手段】演算装置１Ａは、ＭＯＤＥ信号が第２演算モードを示す場合には、上位データｄｉｎ１＿ｈを出力データｄｏｕｔ１及び出力データｄｏｕｔ５とし、下位データｄｉｎ１＿ｌを出力データｄｏｕｔ３及び出力データｄｏｕｔ７として出力し、上位データｄｉｎ２＿ｈを出力データｄｏｕｔ２とし、下位データｄｉｎ２＿ｌを出力データｄｏｕｔ４として出力するとともに、上位データｄｉｎ３＿ｈを出力データｄｏｕｔ６とし、下位データｄｉｎ３＿ｌを出力データｄｏｕｔ８として出力するデータマルチプレクサ１１と、それぞれが２つの出力データの乗算を行う乗算器１２〜１５と、を備える。【選択図】図３
2018194905.tif 000002
【特許請求の範囲】
【請求項１】
それぞれが第１ビット数を有する第１〜第３入力データを入力し、演算モードを示すモード信号に応じて、それぞれが前記第１ビット数の半分の第２ビット数を有する第１〜第８出力データを出力するマルチプレクサと、
前記第１出力データと前記第２出力データとの乗算を行う第１乗算器と、
前記第３出力データと前記第４出力データとの乗算を行う第２乗算器と、
前記第５出力データと前記第６出力データとの乗算を行う第３乗算器と、
前記第７出力データと前記第８出力データとの乗算を行う第４乗算器と、
を備え、
前記マルチプレクサは、
前記モード信号が前記第１ビット数を有するデータを用いた第１演算モードを示す場合には、前記第１入力データのうちの前記第２ビット数の上位データである第１上位データを前記第１出力データ及び前記第５出力データとし、前記第１入力データのうちの前記第２ビット数の下位データである第１下位データを前記第３出力データ及び前記第７出力データとして出力するとともに、前記第２入力データのうちの前記第２ビット数の上位データである第２上位データを前記第２出力データ及び前記第４出力データとし、前記第２入力データのうちの前記第２ビット数の下位データである第２下位データを前記第６出力データ及び前記第８出力データとして出力し、
前記モード信号が前記第２ビット数を有するデータを用いた第２演算モードを示す場合には、前記第１上位データを前記第１出力データ及び前記第５出力データとし、前記第１下位データを前記第３出力データ及び前記第７出力データとして出力し、前記第２上位データを前記第２出力データとし、前記第２下位データを前記第４出力データとして出力するとともに、前記第３入力データのうちの前記第２ビット数の上位データである第３上位データを前記第６出力データとし、前記第３入力データのうちの前記第２ビット数の下位データである第３下位データを前記第８出力データとして出力する、演算装置。
【請求項２】
前記第１乗算器の乗算結果である第１乗算結果と前記第２乗算器の乗算結果である第２乗算結果との加算を行う第１加算器と、
前記第３乗算器の乗算結果である第３乗算結果と前記第４乗算器の乗算結果である第４乗算結果との加算を行う第２加算器と、
前記第１乗算結果、前記第２乗算結果、前記第３乗算結果、及び前記第４乗算結果の加算を行う部分加算器と、
をさらに備える、請求項１に記載の演算装置。
【請求項３】
前記第１乗算器は、前記第１乗算器の乗算の途中結果である第１中間結果及び第２中間結果を前記第１乗算結果として出力し、
前記第２乗算器は、前記第２乗算器の乗算の途中結果である第３中間結果及び第４中間結果を前記第２乗算結果として出力し、
前記第３乗算器は、前記第３乗算器の乗算の途中結果である第５中間結果及び第６中間結果を前記第３乗算結果として出力し、
前記第４乗算器は、前記第４乗算器の乗算の途中結果である第７中間結果及び第８中間結果を前記第４乗算結果として出力する、請求項２に記載の演算装置。
【請求項４】
それぞれが前記マルチプレクサ、前記第１乗算器、前記第２乗算器、前記第３乗算器、前記第４乗算器、及び前記部分加算器を有する複数の演算部と、
前記複数の演算部の前記部分加算器の加算結果の加算を行う第３加算器と、
前記第１加算器の加算結果である第１加算結果及び前記第２加算器の加算結果である第２加算結果と、前記第３加算器の加算結果である第３加算結果と、のいずれかを前記モード信号に応じて出力するセレクタと、
をさらに備え、
前記第１加算器は、前記複数の演算部の前記第１乗算結果及び前記第２乗算結果の加算を行い、
前記第２加算器は、前記複数の演算部の前記第３乗算結果及び前記第４乗算結果の加算を行い、
前記セレクタは、前記モード信号が前記第１演算モードを示す場合には、前記第３加算結果を出力し、前記モード信号が前記第２演算モードを示す場合には、前記第１加算結果及び前記第２加算結果を出力する、請求項２又は請求項３に記載の演算装置。
【請求項５】
前記第１乗算結果の第１シフト量、前記第２乗算結果の第２シフト量、前記第３乗算結果の第３シフト量、及び前記第４乗算結果の第４シフト量を演算するシフト量演算回路をさらに備え、
前記複数の演算部のそれぞれは、前記第１シフト量に基づいて前記第１乗算結果をシフト処理する第１整列部と、前記第２シフト量に基づいて前記第２乗算結果をシフト処理する第２整列部と、前記第３シフト量に基づいて前記第３乗算結果をシフト処理する第３整列部と、前記第４シフト量に基づいて前記第４乗算結果をシフト処理する第４整列部と、をさらに備える、請求項４に記載の演算装置。
【請求項６】
前記シフト量演算回路は、加算対象となる複数の対象データの指数部のうちの最大の指数部である最大指数を演算する最大値演算回路と、前記複数の対象データと前記最大指数との差分をシフト量として演算する減算回路と、を備える、請求項５に記載の演算装置。
【請求項７】
前記最大値演算回路は、前記複数の対象データの最上位ビットから最下位ビットに向かって順番に比較することによって、前記最大指数を演算する、請求項６に記載の演算装置。
【請求項８】
前記第１演算モードは、倍精度演算モードであり、
前記第２演算モードは、単精度演算モードである、請求項１〜請求項７のいずれか一項に記載の演算装置。
【請求項９】
前記第１演算モードは、単精度演算モードであり、
前記第２演算モードは、半精度演算モードである、請求項１〜請求項７のいずれか一項に記載の演算装置。
【請求項１０】
請求項１〜請求項９のいずれか一項に記載の演算装置であって、複数の前記演算装置を有する演算ユニットと、
前記演算ユニットを共有する複数のプロセッサと、
を備える演算システム。
【請求項１１】
前記複数のプロセッサは、行列演算を行う場合には、単一のプロセッサとして動作し、行列演算以外の演算を行う場合には、個別のプロセッサとして動作する、請求項１０に記載の演算システム。
【請求項１２】
前記複数のプロセッサは、１つのインストラクションで動作するＳＩＭＤ動作を行う、請求項１０又は請求項１１に記載の演算システム。
【請求項１３】
前記複数のプロセッサのそれぞれを一意に識別可能なプロセッサＩＤを含むメモリアドレスによってアクセス可能なメモリ空間を備え、
前記複数のプロセッサのそれぞれは、当該プロセッサのプロセッサＩＤを含むメモリアドレスによって示されるメモリ領域にアクセス可能である、請求項１０〜請求項１２のいずれか一項に記載の演算システム。
【請求項１４】
前記複数のプロセッサはリング結合されており、
前記複数のプロセッサのそれぞれは、前記演算ユニットから受信したデータを前記リング結合を介して他のプロセッサに順に転送する、請求項１３に記載の演算システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算装置及び演算システムに関する。
【背景技術】
【０００２】
従来、複数のデータに対し同一の演算を同時に行うことが可能なＳＩＭＤ（Single  Instruction  Multiple  Data）演算器が知られている。例えば、ＳＩＭＤ演算器を構成する各演算器に浮動小数点演算器を用いることにより、プロセッサの１コアにおいて並列浮動小数点演算が実現される。このような演算器では、供給可能なデータのビット数が一定であることから、例えば、２つの倍精度データに代えて、４つの単精度データを供給することにより、倍精度の１演算と単精度の２演算とを切り替えることが可能となる（例えば、特許文献１参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特表２００２−５２８７８６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
倍精度データの１つの演算に用いられる演算器の回路規模は、単精度データの１つの演算に用いられる演算器の回路規模の４倍程度である。しかしながら、２つの倍精度データを用いた１つの演算に用いられる演算器を、４つの単精度データを用いた２つの演算に用いる場合、演算に用いられる回路素子の割合が低下する。このように、所定のビット数を有する２つのデータを用いた１つの演算を、半分のビット数を有する４つのデータを用いた２つの演算に切り替えると、全体の半分程度の回路素子が使用されないことになる。本技術分野では、演算装置の回路規模を拡大することなく、演算装置の演算性能のさらなる向上が望まれている。
【０００５】
本発明は、回路規模を拡大することなく、演算性能を向上可能な演算装置及び演算システムを提供する。
【課題を解決するための手段】
【０００６】
本発明の一側面に係る演算装置は、それぞれが第１ビット数を有する第１〜第３入力データを入力し、演算モードを示すモード信号に応じて、それぞれが第１ビット数の半分の第２ビット数を有する第１〜第８出力データを出力するマルチプレクサと、第１出力データと第２出力データとの乗算を行う第１乗算器と、第３出力データと第４出力データとの乗算を行う第２乗算器と、第５出力データと第６出力データとの乗算を行う第３乗算器と、第７出力データと第８出力データとの乗算を行う第４乗算器と、を備える。マルチプレクサは、モード信号が第１ビット数を有するデータを用いた第１演算モードを示す場合には、第１入力データのうちの第２ビット数の上位データである第１上位データを第１出力データ及び第５出力データとし、第１入力データのうちの第２ビット数の下位データである第１下位データを第３出力データ及び第７出力データとして出力するとともに、第２入力データのうちの第２ビット数の上位データである第２上位データを第２出力データ及び第４出力データとし、第２入力データのうちの第２ビット数の下位データである第２下位データを第６出力データ及び第８出力データとして出力する。マルチプレクサは、モード信号が第２ビット数を有するデータを用いた第２演算モードを示す場合には、第１上位データを第１出力データ及び第５出力データとし、第１下位データを第３出力データ及び第７出力データとして出力し、第２上位データを第２出力データとし、第２下位データを第４出力データとして出力するとともに、第３入力データのうちの第２ビット数の上位データである第３上位データを第６出力データとし、第３入力データのうちの第２ビット数の下位データである第３下位データを第８出力データとして出力する。
【０００７】
この演算装置では、モード信号が第２演算モードを示す場合には、第１上位データ及び第２上位データが第１乗算器に供給され、第１乗算器はこれらのデータの乗算を行う。また、第１下位データ及び第２下位データが第２乗算器に供給され、第２乗算器はこれらのデータの乗算を行う。また、第１上位データ及び第３上位データが第３乗算器に供給され、第３乗算器はこれらのデータの乗算を行う。また、第１下位データ及び第３下位データが第４乗算器に供給され、第４乗算器はこれらのデータの乗算を行う。このように、第１演算モードだけでなく、第２演算モードにおいても、第１〜第４乗算器の全ての乗算器が演算を行う。その結果、演算装置の回路規模を拡大することなく、演算装置の演算性能を向上させることが可能となる。
【０００８】
演算装置は、第１乗算器の乗算結果である第１乗算結果と第２乗算器の乗算結果である第２乗算結果との加算を行う第１加算器と、第３乗算器の乗算結果である第３乗算結果と第４乗算器の乗算結果である第４乗算結果との加算を行う第２加算器と、第１乗算結果、第２乗算結果、第３乗算結果、及び第４乗算結果の加算を行う部分加算器と、をさらに備えてもよい。この場合、第１加算器によって、第１上位データ及び第１下位データと、第２上位データ及び第２下位データと、のベクトル積が得られ、第２加算器によって、第１上位データ及び第１下位データと、第３上位データ及び第３下位データと、のベクトル積が得られる。また、部分加算器によって、第１入力データと第２入力データとの乗算結果が得られる。
【０００９】
第１乗算器は、第１乗算器の乗算の途中結果である第１中間結果及び第２中間結果を第１乗算結果として出力してもよい。第２乗算器は、第２乗算器の乗算の途中結果である第３中間結果及び第４中間結果を第２乗算結果として出力してもよい。第３乗算器は、第３乗算器の乗算の途中結果である第５中間結果及び第６中間結果を第３乗算結果として出力してもよい。第４乗算器は、第４乗算器の乗算の途中結果である第７中間結果及び第８中間結果を第４乗算結果として出力してもよい。この場合、第１乗算器の乗算結果として第１中間結果及び第２中間結果が用いられることにより、第１乗算器の演算処理において、例えば桁上がり等による遅延を抑制することができる。これにより、第１乗算器の演算速度を向上させることが可能となる。同様に、第２乗算器、第３乗算器及び第４乗算器の演算速度を向上させることが可能となる。
【００１０】
演算装置は、それぞれがマルチプレクサ、第１乗算器、第２乗算器、第３乗算器、第４乗算器、及び部分加算器を有する複数の演算部と、複数の演算部の部分加算器の加算結果の加算を行う第３加算器と、第１加算器の加算結果である第１加算結果及び第２加算器の加算結果である第２加算結果と、第３加算器の加算結果である第３加算結果と、のいずれかをモード信号に応じて出力するセレクタと、をさらに備えてもよい。第１加算器は、複数の演算部の第１乗算結果及び第２乗算結果の加算を行ってもよく、第２加算器は、複数の演算部の第３乗算結果及び第４乗算結果の加算を行ってもよい。セレクタは、モード信号が第１演算モードを示す場合には、第３加算結果を出力し、モード信号が第２演算モードを示す場合には、第１加算結果及び第２加算結果を出力してもよい。この場合、第１加算器及び第２加算器によって、第２ビット数を有するデータでの２つの行列演算結果が得られ、第３加算器によって、第１ビット数を有するデータでの１つの行列演算結果が得られる。そして、セレクタによって、モード信号が第１演算モードを示す場合には、第１ビット数を有するデータでの１つの行列演算結果が出力され、モード信号が第２演算モードを示す場合には、第２ビット数を有するデータでの２つの行列演算結果が出力される。このように、演算モードに応じた行列演算を行うことが可能となる。
【００１１】
上記演算装置は、第１乗算結果の第１シフト量、第２乗算結果の第２シフト量、第３乗算結果の第３シフト量、及び第４乗算結果の第４シフト量を演算するシフト量演算回路をさらに備えてもよい。複数の演算部のそれぞれは、第１シフト量に基づいて第１乗算結果をシフト処理する第１整列部と、第２シフト量に基づいて第２乗算結果をシフト処理する第２整列部と、第３シフト量に基づいて第３乗算結果をシフト処理する第３整列部と、第４シフト量に基づいて第４乗算結果をシフト処理する第４整列部と、をさらに備えてもよい。第１乗算結果及び第２乗算結果が浮動小数点データである場合、第１乗算結果及び第２乗算結果を加算するためにはそれぞれの指数部を揃える必要がある。このため、第１シフト量で第１乗算結果をシフト処理し、第２シフト量で第２乗算結果をシフト処理することで、第１加算器での加算が可能となる。同様に、第３シフト量で第３乗算結果をシフト処理し、第４シフト量で第４乗算結果をシフト処理することで、第２加算器での加算が可能となる。
【００１２】
シフト量演算回路は、加算対象となる複数の対象データの指数部のうちの最大の指数部である最大指数を演算する最大値演算回路と、複数の対象データと最大指数との差分をシフト量として演算する減算回路と、を備えてもよい。対象データが浮動小数点データである場合、複数の対象データを加算するためにはそれぞれの指数部を揃える必要がある。このため、複数の対象データの最大指数と各指数部との差分をシフト量とすることで、複数の対象データの指数部を揃えることが可能となる。
【００１３】
最大値演算回路は、複数の対象データの最上位ビットから最下位ビットに向かって順番に比較することによって、最大指数を演算してもよい。この場合、複数の対象データが最上位ビットから順に比較されるので、比較するビット数を減らすことができ、最大指数の演算を高速化することが可能となる。
【００１４】
第１演算モードは倍精度演算モードであってもよく、第２演算モードは単精度演算モードであってもよい。この場合、倍精度演算モード及び単精度演算モードでの演算が可能となる。このような演算装置においても、演算装置の回路規模を拡大することなく、演算装置の演算性能を向上させることが可能となる。
【００１５】
第１演算モードは単精度演算モードであってもよく、第２演算モードは半精度演算モードであってもよい。この場合、単精度演算モード及び半精度演算モードでの演算が可能となる。このような演算装置においても、演算装置の回路規模を拡大することなく、演算装置の演算性能を向上させることが可能となる。
【００１６】
本発明の別の側面に係る演算システムは、上述の演算装置であって、複数の演算装置を有する演算ユニットと、演算ユニットを共有する複数のプロセッサと、を備える。この演算システムでは、演算ユニットが複数の演算装置を備えるので、演算ユニットの回路規模を拡大することなく、演算ユニットの演算性能を向上させることが可能となる。
【００１７】
複数のプロセッサは、行列演算を行う場合には、単一のプロセッサとして動作してもよく、行列演算以外の演算を行う場合には、個別のプロセッサとして動作してもよい。この場合、行列演算を複数のプロセッサで並列処理することができるので、行列演算の演算速度を向上させることが可能となる。
【００１８】
複数のプロセッサは、１つのインストラクションで動作するＳＩＭＤ動作を行ってもよい。この場合、複数のプロセッサが並列動作するので、処理の高速化が可能となる。
【００１９】
上記演算システムは、複数のプロセッサのそれぞれを一意に識別可能なプロセッサＩＤを含むメモリアドレスによってアクセス可能なメモリ空間を備えてもよい。複数のプロセッサのそれぞれは、当該プロセッサのプロセッサＩＤを含むメモリアドレスによって示されるメモリ領域にアクセス可能であってもよい。この場合、メモリ空間を拡張することができ、演算システムで扱えるデータサイズを大きくすることが可能となる。
【００２０】
複数のプロセッサはリング結合されていてもよく、複数のプロセッサのそれぞれは、演算ユニットから受信したデータをリング結合を介して他のプロセッサに順に転送してもよい。この場合、複数のプロセッサのそれぞれは、演算ユニットから受信したデータをリング結合を介して他の要素プロセッサに順に転送（循環シフト）することができる。これにより、複数のプロセッサのそれぞれは、当該プロセッサが直接アクセスできないメモリ領域へのアクセス（unaligned  access）を実行することが可能となる。
【発明の効果】
【００２１】
本発明によれば、演算装置の回路規模を拡大することなく、演算装置の演算性能を向上させることができる。
【図面の簡単な説明】
【００２２】
【図１】一実施形態に係る演算装置を含む演算システムの構成を概略的に示す図である。
【図２】第１実施形態に係る演算装置の構成を概略的に示す図である。
【図３】図２の演算装置に含まれる演算部の構成を概略的に示す図である。
【図４】図２の演算装置の第１演算モードでの動作を説明するための図である。
【図５】図２の演算装置の第２演算モードでの動作を説明するための図である。
【図６】比較例の演算装置に含まれる演算部の構成を概略的に示す図である。
【図７】図３の演算部の変形例を示す図である。
【図８】第２実施形態に係る演算装置の構成を概略的に示す図である。
【図９】図８の演算装置に含まれる演算部の構成を概略的に示す図である。
【図１０】図９の乗算器の構成を概略的に示す図である。
【図１１】シフト量演算回路の構成を概略的に示す図である。
【図１２】（ａ）は倍精度データの構成を示す図、（ｂ）は単精度データの構成を示す図、（ｃ）は半精度データの構成を示す図である。
【図１３】２つのビット列から最大値を演算する最大値演算回路の一構成例を示す回路図である。
【図１４】図１３の最大値演算回路の別の構成例を示す回路図である。
【図１５】複数のビット列から最大値を演算する最大値演算回路の構成例を示す図である。
【図１６】図８の演算装置の第１演算モードでの動作を説明するための図である。
【図１７】図８の演算装置の第２演算モードでの動作を説明するための図である。
【図１８】図８の演算装置の第３演算モードでの動作を説明するための図である。
【発明を実施するための形態】
【００２３】
以下、添付図面を参照しながら本発明の実施形態が詳細に説明される。図面の説明において、同一又は同等の要素には同一符号が用いられ、重複する説明は省略される。
【００２４】
図１は、一実施形態に係る演算装置を含む演算システムの構成を概略的に示す図である。図１に示される演算システムＳは、行列演算及び他の演算を行うためのシステムである。演算システムＳは、複数の要素プロセッサ（ここでは、４つの要素プロセッサＰＥ１〜ＰＥ４）と、演算ユニットＭＡＵと、を備える。
【００２５】
要素プロセッサＰＥ１〜ＰＥ４は、単一の演算ユニットＭＡＵを共有している。行列演算を行う際には、要素プロセッサＰＥ１〜ＰＥ４が１つのプロセッサとして動作し、行列演算以外の演算を行う際には、要素プロセッサＰＥ１〜ＰＥ４が個別のプロセッサとして動作する。行列演算以外の演算を行う際にも、要素プロセッサＰＥ１〜ＰＥ４が１つのプロセッサとして動作してもよい。要素プロセッサＰＥ１〜ＰＥ４が１つのプロセッサとして動作する場合、１つのインストラクションで要素プロセッサＰＥ１〜ＰＥ４が動作するので、要素プロセッサＰＥ１〜ＰＥ４はＳＩＭＤ動作を行っているとみなされ得る。
【００２６】
要素プロセッサＰＥ１〜ＰＥ４は、リング結合されている。具体的には、要素プロセッサＰＥ１及び要素プロセッサＰＥ２、要素プロセッサＰＥ２及び要素プロセッサＰＥ３、要素プロセッサＰＥ３及び要素プロセッサＰＥ４、要素プロセッサＰＥ４及び要素プロセッサＰＥ１がデータバスでそれぞれ接続されている。要素プロセッサＰＥ１〜ＰＥ４には、要素プロセッサを一意に識別可能なプロセッサＩＤ（００，０１，１０，１１）が予め設定されている。
【００２７】
演算システムＳには、メモリ空間が設定されている。メモリ空間のメモリアドレスは、プロセッサＩＤを含む。本実施形態では、演算システムＳは、４つの要素プロセッサを含むので、例えばメモリアドレスの下位２ビットがプロセッサＩＤに対応する。要素プロセッサＰＥ１〜ＰＥ４のそれぞれには、例えば、１０ビットのアドレスに対応するメモリ空間が割り当てられている。このため、演算システムＳのメモリ空間は、１２ビットに拡大されている。つまり、演算システムＳのメモリ空間が４等分され、各メモリアドレスによって示されるメモリ領域には、当該メモリアドレスに含まれるプロセッサＩＤによって示される要素プロセッサがアクセスする。
【００２８】
要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、当該要素プロセッサのプロセッサＩＤを含むメモリアドレスによって示されるメモリ領域（担当領域）へのアクセス（align  access）を実行できるが、当該要素プロセッサのプロセッサＩＤとは異なるプロセッサＩＤを含むメモリアドレスによって示されるメモリ領域（非担当領域）へのアクセス（unaligned  access）を実行できない。要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、リング結合を介して他の要素プロセッサに順にデータ転送（循環シフト）する。これにより、要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、非担当領域へのアクセスを実行することが可能となる。要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、メモリアドレスによって示される領域に、演算ユニットＭＡＵによる演算対象である入力データ、及び演算ユニットＭＡＵによる演算結果である出力データを保持する。
【００２９】
演算ユニットＭＡＵは、例えば、複数の浮動小数点演算を並列化して行う。演算ユニットＭＡＵは、例えば、ディープニューラルネットワーク（ＤＮＮ：Deep  Neural  Network）、及びコンボリューショナルニューラルネットワーク（ＣＮＮ：Convolutional  Neural  Network）向けのプロセッサに適用され得る。演算ユニットＭＡＵは、複数の演算装置（ここでは、演算装置１Ａ〜１Ｄ）を備える。演算装置１Ａ〜１Ｄのそれぞれは、演算ユニットＭＡＵの演算の一部を行う装置である。要素プロセッサＰＥ１は、演算装置１Ａのレジスタにアクセス可能である。要素プロセッサＰＥ２は、演算装置１Ｂのレジスタにアクセス可能である。要素プロセッサＰＥ３は、演算装置１Ｃのレジスタにアクセス可能である。要素プロセッサＰＥ４は、演算装置１Ｄのレジスタにアクセス可能である。
【００３０】
（第１実施形態）
図２は、第１実施形態に係る演算装置の構成を概略的に示す図である。図２に示される演算装置１Ａは、複数のデータに対し同一の演算を同時に行うことが可能なＳＩＭＤ演算器である。なお、演算装置１Ａ〜１Ｄの構成は同等であるので、ここでは演算装置１Ａについて説明する。
【００３１】
演算装置１Ａは、ＭＯＤＥ信号（モード信号）に応じて、演算装置１Ａの演算モードを第１演算モード及び第２演算モードのいずれかに切り替える。第１演算モードは、第１ビット数のデータを用いた演算を行うモードである。第２演算モードは、第２ビット数のデータを用いた演算を行うモードである。第２ビット数は、第１ビット数の半分のビット数である。ＭＯＤＥ信号は、演算装置１Ａの外部の装置（本実施形態では、要素プロセッサ）から供給される。ＭＯＤＥ信号は、演算装置１Ａの演算モードを示す信号である。ＭＯＤＥ信号は、例えば１ビットの信号であり、第１演算モード及び第２演算モードのいずれかを示す。
【００３２】
演算装置１Ａが実行し得る演算モードとしては、例えば、倍精度演算モード、単精度演算モード、及び半精度演算モードが挙げられる。倍精度演算モードは、単精度のデータ（以下、「単精度データ」という。）のビット数の２倍のビット数のデータを用いて演算を行うモードである。単精度演算モードは、倍精度のデータ（以下、「倍精度データ」という。）のビット数の半分のビット数のデータを用いて演算を行うモードである。半精度演算モードは、倍精度データのビット数の４分の１であり、単精度データのビット数の半分のビット数のデータを用いて演算を行うモードである。３２ビットを１ワードとする３２ビットアーキテクチャでは、倍精度データのビット数は６４ビット、単精度データのビット数は３２ビット、半精度のデータ（以下、「半精度データ」という。）のビット数は１６ビットである。つまり、第１演算モードが倍精度演算モードである場合、第２演算モードは単精度演算モードである。また、第１演算モードが単精度演算モードである場合、第２演算モードは半精度演算モードである。
【００３３】
演算装置１Ａは、複数の演算部（本実施形態では演算部１０Ａ〜１０Ｄ）と、レジスタ４０と、加算部５０と、を備える。複数の演算部１０Ａ〜１０Ｄのそれぞれは、演算装置１Ａの演算の一部を行う回路である。
【００３４】
図３は、図２の演算装置に含まれる演算部の構成を概略的に示す図である。なお、演算部１０Ａ〜１０Ｄの構成は同等であるので、ここでは演算部１０Ａについて説明する。図３に示されるように、演算部１０Ａは、データマルチプレクサ１１（マルチプレクサ）と、乗算器１２（第１乗算器）と、乗算器１３（第２乗算器）と、乗算器１４（第３乗算器）と、乗算器１５（第４乗算器）と、レジスタ４１と、レジスタ４２と、レジスタ４３と、を備える。データを送受信する２つの回路要素間は、送受信するデータのビット数に対応するバス幅のデータバスで接続されている。
【００３５】
レジスタ４１〜４３のそれぞれは、演算対象となる第１ビット数のビット列である入力データＤＩＮ１〜ＤＩＮ３（第１〜第３入力データ）を記憶保持する回路である。第１ビット数は、第１演算モードで用いられるデータのビット数に相当し、例えば６４ビットである。入力データＤＩＮ１〜ＤＩＮ３は、演算装置１Ａの外部の装置（本実施形態では、要素プロセッサ）からレジスタ４１〜４３にセットされる。入力データＤＩＮ１（第１入力データ）は、上位データｄｉｎ１＿ｈ（第１上位データ）と、下位データｄｉｎ１＿ｌ（第１下位データ）と、を含む。上位データｄｉｎ１＿ｈは、入力データＤＩＮ１のビット列のうちの最上位ビット（most  significant  bit：ＭＳＢ）を含む上半分のビット列である。下位データｄｉｎ１＿ｌは、入力データＤＩＮ１のビット列のうちの最下位ビット（least  significant  bit：ＬＳＢ）を含む下半分のビット列である。
【００３６】
入力データＤＩＮ２（第２入力データ）は、上位データｄｉｎ２＿ｈ（第２上位データ）と、下位データｄｉｎ２＿ｌ（第２下位データ）と、を含む。上位データｄｉｎ２＿ｈは、入力データＤＩＮ２のビット列のうちのＭＳＢを含む上半分のビット列である。下位データｄｉｎ２＿ｌは、入力データＤＩＮ２のビット列のうちのＬＳＢを含む下半分のビット列である。入力データＤＩＮ３（第３入力データ）は、上位データｄｉｎ３＿ｈ（第３上位データ）と、下位データｄｉｎ３＿ｌ（第３下位データ）と、を含む。上位データｄｉｎ３＿ｈは、入力データＤＩＮ３のビット列のうちのＭＳＢを含む上半分のビット列である。下位データｄｉｎ３＿ｌは、入力データＤＩＮ３のビット列のうちのＬＳＢを含む下半分のビット列である。
【００３７】
上位データｄｉｎ１＿ｈ、下位データｄｉｎ１＿ｌ、上位データｄｉｎ２＿ｈ、下位データｄｉｎ２＿ｌ、上位データｄｉｎ３＿ｈ、及び下位データｄｉｎ３＿ｌは、第２ビット数のビット列である。第２ビット数は、第２演算モードで用いられるデータのビット数に相当し、例えば３２ビットである。
【００３８】
データマルチプレクサ１１は、レジスタ４１〜４３から出力されている入力データＤＩＮ１〜ＤＩＮ３を入力し、ＭＯＤＥ信号に応じて、複数（ここでは８つ）の出力データｄｏｕｔ１〜ｄｏｕｔ８（第１〜第８出力データ）を出力する回路である。複数の出力データｄｏｕｔ１〜ｄｏｕｔ８のそれぞれは、第２ビット数のビット列である。
【００３９】
データマルチプレクサ１１は、ＭＯＤＥ信号が第１演算モードを示す場合には、上位データｄｉｎ１＿ｈを出力データｄｏｕｔ１（第１出力データ）及び出力データｄｏｕｔ５（第５出力データ）として出力し、下位データｄｉｎ１＿ｌを出力データｄｏｕｔ３（第３出力データ）及び出力データｄｏｕｔ７（第７出力データ）として出力する。また、データマルチプレクサ１１は、ＭＯＤＥ信号が第１演算モードを示す場合には、上位データｄｉｎ２＿ｈを出力データｄｏｕｔ２（第２出力データ）及び出力データｄｏｕｔ４（第４出力データ）として出力し、下位データｄｉｎ２＿ｌを出力データｄｏｕｔ６（第６出力データ）及び出力データｄｏｕｔ８（第８出力データ）として出力する。データマルチプレクサ１１は、ＭＯＤＥ信号が第１演算モードを示す場合には、入力データＤＩＮ３を受け取らない。
【００４０】
データマルチプレクサ１１は、ＭＯＤＥ信号が第２演算モードを示す場合には、上位データｄｉｎ１＿ｈを出力データｄｏｕｔ１及び出力データｄｏｕｔ５として出力し、下位データｄｉｎ１＿ｌを出力データｄｏｕｔ３及び出力データｄｏｕｔ７として出力する。また、データマルチプレクサ１１は、ＭＯＤＥ信号が第２演算モードを示す場合には、上位データｄｉｎ２＿ｈを出力データｄｏｕｔ２として出力し、下位データｄｉｎ２＿ｌを出力データｄｏｕｔ４として出力する。また、データマルチプレクサ１１は、ＭＯＤＥ信号が第２演算モードを示す場合には、上位データｄｉｎ３＿ｈを出力データｄｏｕｔ６として出力し、下位データｄｉｎ３＿ｌを出力データｄｏｕｔ８として出力する。
【００４１】
乗算器１２〜１５は、第２ビット数を有する２つのビット列の乗算を行う回路である。乗算器１２は、出力データｄｏｕｔ１と出力データｄｏｕｔ２との乗算を行う。乗算器１２は、例えば、ウォレスツリー（Wallace  Tree）回路を用いて２つのビット列の乗算を行い、乗算器１２の乗算の途中結果である中間結果ｍ１１（第１中間結果）及び中間結果ｍ１２（第２中間結果）を乗算結果（第１乗算結果）として出力する。中間結果ｍ１１及び中間結果ｍ１２は、第２ビット数のビット列である。中間結果ｍ１１及び中間結果ｍ１２は、乗算器１２の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。乗算器１２は、中間結果ｍ１１を整列部２１に出力し、中間結果ｍ１２を整列部２２に出力するとともに、中間結果ｍ１１及び中間結果ｍ１２を部分加算器１６に出力する。
【００４２】
乗算器１３は、出力データｄｏｕｔ３と出力データｄｏｕｔ４との乗算を行う。乗算器１３は、例えば、ウォレスツリー回路を用いて２つのビット列の乗算を行い、乗算器１３の乗算の途中結果である中間結果ｍ２１（第３中間結果）及び中間結果ｍ２２（第４中間結果）を乗算結果（第２乗算結果）として出力する。中間結果ｍ２１及び中間結果ｍ２２は、第２ビット数のビット列である。中間結果ｍ２１及び中間結果ｍ２２は、乗算器１３の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。乗算器１３は、中間結果ｍ２１を整列部２３に出力し、中間結果ｍ２２を整列部２４に出力するとともに、中間結果ｍ２１及び中間結果ｍ２２を部分加算器１６に出力する。
【００４３】
乗算器１４は、出力データｄｏｕｔ５と出力データｄｏｕｔ６との乗算を行う。乗算器１４は、例えば、ウォレスツリー回路を用いて２つのビット列の乗算を行い、乗算器１４の乗算の途中結果である中間結果ｍ３１（第５中間結果）及び中間結果ｍ３２（第６中間結果）を乗算結果（第３乗算結果）として出力する。中間結果ｍ３１及び中間結果ｍ３２は、第２ビット数のビット列である。中間結果ｍ３１及び中間結果ｍ３２は、乗算器１４の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。乗算器１４は、中間結果ｍ３１を整列部２５に出力し、中間結果ｍ３２を整列部２６に出力するとともに、中間結果ｍ３１及び中間結果ｍ３２を部分加算器１６に出力する。
【００４４】
乗算器１５は、出力データｄｏｕｔ７と出力データｄｏｕｔ８との乗算を行う。乗算器１５は、例えば、ウォレスツリー回路を用いて２つのビット列の乗算を行い、乗算器１５の乗算の途中結果である中間結果ｍ４１（第７中間結果）及び中間結果ｍ４２（第８中間結果）を乗算結果（第４乗算結果）として出力する。中間結果ｍ４１及び中間結果ｍ４２は、第２ビット数のビット列である。中間結果ｍ４１及び中間結果ｍ４２は、乗算器１５の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。乗算器１５は、中間結果ｍ４１を整列部２７に出力し、中間結果ｍ４２を整列部２８に出力するとともに、中間結果ｍ４１及び中間結果ｍ４２を部分加算器１６に出力する。
【００４５】
演算部１０Ａは、第１演算モードでの演算のために、部分加算器（partial  adder）１６と、整列部１７と、整列部１８と、丸め処理部１９と、丸め処理部２０と、をさらに備える。
【００４６】
部分加算器１６は、第１演算モードの乗算結果を生成する回路である。具体的には、部分加算器１６は、乗算器１２〜１５の乗算結果の加算を行う。本実施形態では、部分加算器１６は、中間結果ｍ１１、中間結果ｍ１２、中間結果ｍ２１、中間結果ｍ２２、中間結果ｍ３１、中間結果ｍ３２、中間結果ｍ４１、及び中間結果ｍ４２の加算を行う。部分加算器１６は、部分加算器１６の加算の途中結果である中間結果Ｐ１１及び中間結果Ｐ１２を加算結果として出力する。中間結果Ｐ１１及び中間結果Ｐ１２は、第１ビット数のビット列である。中間結果Ｐ１１及び中間結果Ｐ１２は、部分加算器１６の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。
【００４７】
整列部１７は、後述の加算器５１（第３加算器）によって加算されるビット列の指数部を揃えるために、中間結果Ｐ１１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部１７は、整列部１７の処理結果を丸め処理部１９に出力する。整列部１８は、加算器５１によって加算されるビット列の指数部を揃えるために、中間結果Ｐ１２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部１８は、整列部１８の処理結果を丸め処理部２０に出力する。
【００４８】
丸め処理部１９は、整列部１７によってシフト処理が行われた中間結果Ｐ１１に対して丸め処理を行う回路である。丸め処理部１９は、丸め処理部１９の演算結果Ｒ１１を加算部５０（加算器５１）に出力する。演算結果Ｒ１１は、第１ビット数のビット列である。丸め処理部２０は、整列部１８によってシフト処理が行われた中間結果Ｐ１２に対して丸め処理を行う回路である。丸め処理部２０は、丸め処理部２０の演算結果Ｒ１２を加算部５０（加算器５１）に出力する。演算結果Ｒ１２は、第１ビット数のビット列である。
【００４９】
演算部１０Ａは、第２演算モードでの演算のために、整列部２１〜２８と、丸め処理部３１〜３８と、をさらに備える。
【００５０】
整列部２１は、後述の加算器５２（第１加算器）によって加算されるビット列の指数部を揃えるために、中間結果ｍ１１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部２１は、整列部２１の処理結果を丸め処理部３１に出力する。整列部２２は、加算器５２によって加算されるビット列の指数部を揃えるために、中間結果ｍ１２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部２２は、整列部２２の処理結果を丸め処理部３２に出力する。整列部２３は、加算器５２によって加算されるビット列の指数部を揃えるために、中間結果ｍ２１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部２３は、整列部２３の処理結果を丸め処理部３３に出力する。整列部２４は、加算器５２によって加算されるビット列の指数部を揃えるために、中間結果ｍ２２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部２４は、整列部２４の処理結果を丸め処理部３４に出力する。
【００５１】
整列部２５は、後述の加算器５３（第２加算器）によって加算されるビット列の指数部を揃えるために、中間結果ｍ３１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部２５は、整列部２５の処理結果を丸め処理部３５に出力する。整列部２６は、加算器５３によって加算されるビット列の指数部を揃えるために、中間結果ｍ３２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部２６は、整列部２６の処理結果を丸め処理部３６に出力する。整列部２７は、加算器５３によって加算されるビット列の指数部を揃えるために、中間結果ｍ４１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部２７は、整列部２７の処理結果を丸め処理部３７に出力する。整列部２８は、加算器５３によって加算されるビット列の指数部を揃えるために、中間結果ｍ４２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部２８は、整列部２８の処理結果を丸め処理部３８に出力する。
【００５２】
丸め処理部３１は、整列部２１によってシフト処理が行われた中間結果ｍ１１に対して丸め処理を行う回路である。丸め処理部３１は、丸め処理部３１の演算結果ｒ１１を加算部５０（加算器５２）に出力する。丸め処理部３２は、整列部２２によってシフト処理が行われた中間結果ｍ１２に対して丸め処理を行う回路である。丸め処理部３２は、丸め処理部３２の演算結果ｒ１２を加算部５０（加算器５２）に出力する。丸め処理部３３は、整列部２３によってシフト処理が行われた中間結果ｍ２１に対して丸め処理を行う回路である。丸め処理部３３は、丸め処理部３３の演算結果ｒ２１を加算部５０（加算器５２）に出力する。丸め処理部３４は、整列部２４によってシフト処理が行われた中間結果ｍ２２に対して丸め処理を行う回路である。丸め処理部３４は、丸め処理部３４の演算結果ｒ２２を加算部５０（加算器５２）に出力する。演算結果ｒ１１，ｒ１２，ｒ２１，ｒ２２のそれぞれは、第２ビット数のビット列である。
【００５３】
丸め処理部３５は、整列部２５によってシフト処理が行われた中間結果ｍ３１に対して丸め処理を行う回路である。丸め処理部３５は、丸め処理部３５の演算結果ｒ３１を加算部５０（加算器５３）に出力する。丸め処理部３６は、整列部２６によってシフト処理が行われた中間結果ｍ３２に対して丸め処理を行う回路である。丸め処理部３６は、丸め処理部３６の演算結果ｒ３２を加算部５０（加算器５３）に出力する。丸め処理部３７は、整列部２７によってシフト処理が行われた中間結果ｍ４１に対して丸め処理を行う回路である。丸め処理部３７は、丸め処理部３７の演算結果ｒ４１を加算部５０（加算器５３）に出力する。丸め処理部３８は、整列部２８によってシフト処理が行われた中間結果ｍ４２に対して丸め処理を行う回路である。丸め処理部３８は、丸め処理部３８の演算結果ｒ４２を加算部５０（加算器５３）に出力する。演算結果ｒ３１，ｒ３２，ｒ４１，ｒ４２のそれぞれは、第２ビット数のビット列である。
【００５４】
図２に戻って、演算装置１Ａの説明を続ける。加算部５０は、加算器（final  adder）５１と、加算器（final  adder）５２と、加算器（final  adder）５３と、マルチプレクサ５９（セレクタ）と、を備える。レジスタ４０は、演算対象となる第１ビット数のビット列である入力データＤＩＮ０を記憶保持する回路である。入力データＤＩＮ０は、演算装置１Ａの外部の装置（本実施形態では、要素プロセッサ）からレジスタ４０にセットされる。入力データＤＩＮ０は、上位データｄｉｎ０＿ｈと、下位データｄｉｎ０＿ｌと、を含む。上位データｄｉｎ０＿ｈ、及び下位データｄｉｎ０＿ｌは、第２ビット数のビット列である。レジスタ４０は、上位データｄｉｎ０＿ｈを加算器５２に出力し、下位データｄｉｎ０＿ｌを加算器５３に出力するとともに、入力データＤＩＮ０を加算器５１に出力する。
【００５５】
加算器５１は、第１演算モードの演算結果Ｄ０（第３加算結果）を生成する回路である。具体的には、演算部１０Ａ〜１０Ｄの部分加算器１６の加算結果と入力データＤＩＮ０との加算を行う。本実施形態では、加算器５１は、演算部１０Ａ〜１０Ｄの演算結果Ｒ１１と、演算部１０Ａ〜１０Ｄの演算結果Ｒ１２と、入力データＤＩＮ０との加算を行う。加算器５１は、加算器５１の加算結果を演算結果Ｄ０としてマルチプレクサ５９に出力する。演算結果Ｄ０は、第１ビット数のビット列である。
【００５６】
加算器５２は、第２演算モードの演算結果ｄ０（第１加算結果）を生成する回路である。具体的には、加算器５２は、各演算部１０Ａ〜１０Ｄの乗算器１２の乗算結果及び乗算器１３の乗算結果と、上位データｄｉｎ０＿ｈとの加算を行う。本実施形態では、加算器５２は、演算部１０Ａ〜１０Ｄの演算結果ｒ１１，ｒ１２，ｒ２１，ｒ２２と、上位データｄｉｎ０＿ｈとの加算を行う。加算器５２は、加算器５２の加算結果を演算結果ｄ０としてマルチプレクサ５９に出力する。演算結果ｄ０は、第２ビット数のビット列である。
【００５７】
加算器５３は、第２演算モードの演算結果ｄ１（第２加算結果）を生成する回路である。具体的には、加算器５３は、各演算部１０Ａ〜１０Ｄの乗算器１４の乗算結果及び乗算器１５の乗算結果と、下位データｄｉｎ０＿ｌとの加算を行う。本実施形態では、加算器５３は、演算部１０Ａ〜１０Ｄの演算結果ｒ３１，ｒ３２，ｒ４１，ｒ４２と、下位データｄｉｎ０＿ｌとの加算を行う。加算器５３は、加算器５３の加算結果を演算結果ｄ１としてマルチプレクサ５９に出力する。演算結果ｄ１は、第２ビット数のビット列である。なお、演算結果ｄ０及び演算結果ｄ１が組み合わされて演算結果（ｄ０，ｄ１）が生成される。演算結果（ｄ０，ｄ１）は、演算結果ｄ０を上位ビットとし、演算結果ｄ１を下位ビットとするビット列である。つまり、演算結果（ｄ０，ｄ１）は、第１ビット数のビット列である。
【００５８】
マルチプレクサ５９は、演算結果Ｄ０及び演算結果（ｄ０，ｄ１）を入力し、ＭＯＤＥ信号に応じて、演算結果Ｄ０と演算結果（ｄ０，ｄ１）とのいずれかを出力する回路である。マルチプレクサ５９は、ＭＯＤＥ信号が第１演算モードを示す場合には、演算結果Ｄ０を出力する。マルチプレクサ５９は、ＭＯＤＥ信号が第２演算モードを示す場合には、演算結果（ｄ０，ｄ１）を出力する。
【００５９】
次に、図２〜図４を用いて演算装置１Ａ〜１Ｄの第１演算モードでの動作を説明する。図４は、図２の演算装置の第１演算モードでの動作を説明するための図である。ここでは、第１演算モードとして、倍精度演算モードを用い、演算ユニットＭＡＵが式（１）に示される倍精度の行列演算を行う場合を一例として説明する。この行列演算は、倍精度データＡ０〜Ａ３、倍精度データＢ００〜Ｂ０３，Ｂ１０〜Ｂ１３，Ｂ２０〜Ｂ２３，Ｂ３０〜Ｂ３３、及び倍精度データＣ０〜Ｃ３を用いた演算である。
【数１】
2018194905.tif 000003
【００６０】
演算装置１Ａ〜１Ｄはそれぞれ、式（２）〜（５）に示される行列演算を行う。
【数２】
2018194905.tif 000004
【数３】
2018194905.tif 000005
【数４】
2018194905.tif 000006
【数５】
2018194905.tif 000007
【００６１】
演算装置１Ａ〜１Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、ここでは演算装置１Ａについて説明する。演算装置１Ａの演算部１０Ａは、Ａ０×Ｂ００の演算を行う。演算装置１Ａの演算部１０Ｂは、Ａ１×Ｂ１０の演算を行う。演算装置１Ａの演算部１０Ｃは、Ａ２×Ｂ２０の演算を行う。演算装置１Ａの演算部１０Ｄは、Ａ３×Ｂ３０の演算を行う。各演算部１０Ａ〜１０Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、演算部１０Ａの動作を主に説明する。
【００６２】
倍精度データＡ０は、上位データａ０＿ｈと、下位データａ０＿ｌと、を含む。上位データａ０＿ｈは、倍精度データＡ０のビット列のうちのＭＳＢを含む上半分のビット列であり、単精度データと同じビット数を有する。下位データａ０＿ｌは、倍精度データＡ０のビット列のうちのＬＳＢを含む下半分のビット列であり、単精度データと同じビット数を有する。倍精度データＢ００は、上位データｂ００＿ｈと、下位データｂ００＿ｌと、を含む。上位データｂ００＿ｈは、倍精度データＢ００のビット列のうちのＭＳＢを含む上半分のビット列であり、単精度データと同じビット数を有する。下位データａ０＿ｌは、倍精度データＢ００のビット列のうちのＬＳＢを含む下半分のビット列であり、単精度データと同じビット数を有する。
【００６３】
演算部１０Ａは、式（６）に示されるように、倍精度データＡ０及び倍精度データＢ００のそれぞれを単精度データのビット数を有する２つのデータに分解することによって、倍精度データＡ０及び倍精度データＢ００の乗算を行う。
【数６】
2018194905.tif 000008
【００６４】
以下、具体的に説明する。レジスタ４１には、倍精度データＡ０が記憶されており、レジスタ４１からデータマルチプレクサ１１に入力データＤＩＮ１として倍精度データＡ０が供給されている。レジスタ４２には、倍精度データＢ００が記憶されており、レジスタ４２からデータマルチプレクサ１１に入力データＤＩＮ２として倍精度データＢ００が供給されている。レジスタ４３には、有効なデータは記憶されていない。
【００６５】
データマルチプレクサ１１には、倍精度演算モード（第１演算モード）を示すＭＯＤＥ信号が供給されている。このため、データマルチプレクサ１１は、上位データａ０＿ｈを出力データｄｏｕｔ１及び出力データｄｏｕｔ５として出力し、下位データａ０＿ｌを出力データｄｏｕｔ３及び出力データｄｏｕｔ７として出力する。また、データマルチプレクサ１１は、上位データｂ００＿ｈを出力データｄｏｕｔ２及び出力データｄｏｕｔ４として出力し、下位データｂ００＿ｌを出力データｄｏｕｔ６及び出力データｄｏｕｔ８として出力する。
【００６６】
そして、乗算器１２は、上位データａ０＿ｈと上位データｂ００＿ｈとの乗算を行い、中間結果ｍ１１及び中間結果ｍ１２を出力する。同様に、乗算器１３は、下位データａ０＿ｌと上位データｂ００＿ｈとの乗算を行い、中間結果ｍ２１及び中間結果ｍ２２を出力する。同様に、乗算器１４は、上位データａ０＿ｈと下位データｂ００＿ｌとの乗算を行い、中間結果ｍ３１及び中間結果ｍ３２を出力する。同様に、乗算器１５は、下位データａ０＿ｌと下位データｂ００＿ｌとの乗算を行い、中間結果ｍ４１及び中間結果ｍ４２を出力する。
【００６７】
そして、部分加算器１６は、中間結果ｍ１１、中間結果ｍ１２、中間結果ｍ２１、中間結果ｍ２２、中間結果ｍ３１、中間結果ｍ３２、中間結果ｍ４１、及び中間結果ｍ４２の加算を行い、中間結果Ｐ１１及び中間結果Ｐ１２を出力する。そして、整列部１７は、中間結果Ｐ１１の仮数部に対してシフト処理を行い、整列部１７の処理結果を丸め処理部１９に出力する。同様に、整列部１８は、中間結果Ｐ１２の仮数部に対してシフト処理を行い、整列部１８の処理結果を丸め処理部２０に出力する。
【００６８】
そして、丸め処理部１９は、整列部１７によってシフト処理が行われた中間結果Ｐ１１に対して丸め処理を行い、演算結果Ｒ１１を加算器５１に出力する。同様に、丸め処理部２０は、整列部１８によってシフト処理が行われた中間結果Ｐ１２に対して丸め処理を行い、演算結果Ｒ１２を加算器５１に出力する。
【００６９】
演算部１０Ｂ、演算部１０Ｃ、及び演算部１０Ｄにおいても、同様の演算が行われ、各演算部１０Ａ〜１０Ｄは、演算結果Ｒ１１及び演算結果Ｒ１２を加算器５１に出力する。また、レジスタ４０には、倍精度データＣ０が記憶されており、レジスタ４０から加算器５１に倍精度データＣ０が供給されている。
【００７０】
そして、加算器５１は、演算部１０Ａ〜１０Ｄの演算結果Ｒ１１及び演算結果Ｒ１２、並びにレジスタ４０から供給されている倍精度データＣ０の加算を行い、加算器５１の加算結果を演算結果Ｄ０としてマルチプレクサ５９に出力する。このとき、整列部２１〜２８、丸め処理部３１〜３８、加算器５２、及び加算器５３も演算を行っており、演算結果（ｄ０，ｄ１）がマルチプレクサ５９に出力されている。マルチプレクサ５９には、倍精度演算モードを示すＭＯＤＥ信号が供給されているので、マルチプレクサ５９は、演算結果Ｄ０を出力する。このようにして、倍精度の行列演算が行われる。
【００７１】
次に、図２、図３、及び図５を用いて演算装置１Ａ〜１Ｄの第２演算モードでの動作を説明する。図５は、図２の演算装置の第２演算モードでの動作を説明するための図である。ここでは、第２演算モードとして、単精度演算モードを用い、演算ユニットＭＡＵが式（７）に示される単精度の行列演算を行う場合を一例として説明する。式（７）に示される行列演算は、単精度データａ０〜ａ７、単精度データｂ００〜ｂ０７，ｂ１０〜ｂ１７，ｂ２０〜ｂ２７，ｂ３０〜ｂ３７，ｂ４０〜ｂ４７，ｂ５０〜ｂ５７，ｂ６０〜ｂ６７，ｂ７０〜ｂ７７、及び単精度データｃ０〜ｃ７を用いた演算である。
【数７】
2018194905.tif 000009
【００７２】
演算装置１Ａは、式（８）及び式（９）に示される行列演算を行う。
【数８】
2018194905.tif 000010
【数９】
2018194905.tif 000011
【００７３】
演算装置１Ｂは、式（１０）及び式（１１）に示される行列演算を行う。
【数１０】
2018194905.tif 000012
【数１１】
2018194905.tif 000013
【００７４】
演算装置１Ｃは、式（１２）及び式（１３）に示される行列演算を行う。
【数１２】
2018194905.tif 000014
【数１３】
2018194905.tif 000015
【００７５】
演算装置１Ｄは、式（１４）及び式（１５）に示される行列演算を行う。
【数１４】
2018194905.tif 000016
【数１５】
2018194905.tif 000017
【００７６】
演算装置１Ａ〜１Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、ここでは演算装置１Ａについて説明する。演算装置１Ａの演算部１０Ａは、ａ０×ｂ００＋ａ１×ｂ１０の演算、及びａ０×ｂ０１＋ａ１×ｂ１１の演算を行う。演算装置１Ａの演算部１０Ｂは、ａ２×ｂ２０＋ａ３×ｂ３０の演算、及びａ２×ｂ２１＋ａ３×ｂ３１の演算を行う。演算装置１Ａの演算部１０Ｃは、ａ４×ｂ４０＋ａ５×ｂ５０の演算、及びａ４×ｂ４１＋ａ５×ｂ５１の演算を行う。演算装置１Ａの演算部１０Ｄは、ａ６×ｂ６０＋ａ７×ｂ７０の演算、及びａ６×ｂ６１＋ａ７×ｂ７１の演算を行う。各演算部１０Ａ〜１０Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、演算部１０Ａの動作を主に説明する。
【００７７】
レジスタ４１の上位ビットには、単精度データａ０が記憶されており、レジスタ４１の下位ビットには単精度データａ１が記憶されている。レジスタ４１からデータマルチプレクサ１１に入力データＤＩＮ１として単精度データａ０及び単精度データａ１が供給されている。レジスタ４２の上位ビットには、単精度データｂ００が記憶されており、レジスタ４２の下位ビットには単精度データｂ１０が記憶されている。レジスタ４２からデータマルチプレクサ１１に入力データＤＩＮ２として単精度データｂ００及び単精度データｂ１０が供給されている。レジスタ４３の上位ビットには、単精度データｂ０１が記憶されており、レジスタ４３の下位ビットには単精度データｂ１１が記憶されている。レジスタ４３からデータマルチプレクサ１１に入力データＤＩＮ３として単精度データｂ０１及び単精度データｂ１１が供給されている。
【００７８】
データマルチプレクサ１１には、単精度演算モードを示すＭＯＤＥ信号が供給されている。このため、データマルチプレクサ１１は、単精度データａ０を出力データｄｏｕｔ１及び出力データｄｏｕｔ５として出力し、単精度データａ１を出力データｄｏｕｔ３及び出力データｄｏｕｔ７として出力する。また、データマルチプレクサ１１は、単精度データｂ００を出力データｄｏｕｔ２として出力し、単精度データｂ１０を出力データｄｏｕｔ４として出力する。また、データマルチプレクサ１１は、単精度データｂ０１を出力データｄｏｕｔ６として出力し、単精度データｂ１１を出力データｄｏｕｔ８として出力する。
【００７９】
そして、乗算器１２は、単精度データａ０と単精度データｂ００との乗算を行い、中間結果ｍ１１及び中間結果ｍ１２を出力する。同様に、乗算器１３は、単精度データａ１と単精度データｂ１０との乗算を行い、中間結果ｍ２１及び中間結果ｍ２２を出力する。同様に、乗算器１４は、単精度データａ０と単精度データｂ０１との乗算を行い、中間結果ｍ３１及び中間結果ｍ３２を出力する。同様に、乗算器１５は、単精度データａ１と単精度データｂ１１との乗算を行い、中間結果ｍ４１及び中間結果ｍ４２を出力する。
【００８０】
そして、整列部２１〜２８は、中間結果ｍ１１，ｍ１２，ｍ２１，ｍ２２，ｍ３１，ｍ３２，ｍ４１，ｍ４２の仮数部に対してシフト処理を行い、整列部２１〜２８の処理結果を丸め処理部３１〜３８に出力する。そして、丸め処理部３１〜３４は、整列部２１〜２４によってシフト処理が行われた中間結果ｍ１１，ｍ１２，ｍ２１，ｍ２２に対して丸め処理を行い、演算結果ｒ１１，ｒ１２，ｒ２１，ｒ２２を加算器５２に出力する。同様に、丸め処理部３５〜３８は、整列部２５〜２８によってシフト処理が行われた中間結果ｍ３１，ｍ３２，ｍ４１，ｍ４２に対して丸め処理を行い、演算結果ｒ３１，ｒ３２，ｒ４１，ｒ４２を加算器５３に出力する。
【００８１】
演算部１０Ｂ、演算部１０Ｃ、及び演算部１０Ｄにおいても、同様の演算が行われ、各演算部１０Ａ〜１０Ｄは、演算結果ｒ１１，ｒ１２，ｒ２１，ｒ２２を加算器５２に出力するとともに、演算結果ｒ３１，ｒ３２，ｒ４１，ｒ４２を加算器５３に出力する。また、レジスタ４０の上位ビットには、単精度データｃ０が記憶されており、レジスタ４０の下位ビットには単精度データｃ１が記憶されている。そして、レジスタ４０から加算器５２に単精度データｃ０が供給されるとともに、加算器５３に単精度データｃ１が供給されている。
【００８２】
そして、加算器５２は、演算部１０Ａ〜１０Ｄの演算結果ｒ１１，ｒ１２，ｒ２１，ｒ２２、及びレジスタ４０から供給されている単精度データｃ０の加算を行い、加算器５２の加算結果を演算結果ｄ０として出力する。また、加算器５３は、演算部１０Ａ〜１０Ｄの演算結果ｒ３１，ｒ３２，ｒ４１，ｒ４２、及びレジスタ４０から供給されている単精度データｃ１の加算を行い、加算器５３の加算結果を演算結果ｄ１として出力する。そして、演算結果ｄ０及び演算結果ｄ１が組み合わされて演算結果（ｄ０，ｄ１）が生成され、マルチプレクサ５９に供給される。このとき、部分加算器１６、整列部１７，１８、丸め処理部１９，２０、及び加算器５１も演算を行っており、演算結果Ｄ０がマルチプレクサ５９に出力されている。マルチプレクサ５９には、単精度演算モードを示すＭＯＤＥ信号が供給されているので、マルチプレクサ５９は、演算結果（ｄ０，ｄ１）を出力する。このようにして、２つの単精度の行列演算が行われる。
【００８３】
次に、比較例の演算装置と比較して、演算装置１Ａ〜１Ｄの作用効果を説明する。図６は、比較例の演算装置に含まれる演算部の構成を概略的に示す図である。図６に示される演算部１００は、演算部１０Ａ〜１０Ｄと比較して、レジスタ４３を備えない点、データマルチプレクサ１１に代えてデータマルチプレクサ１１１を備える点、整列部２１〜２８、及び丸め処理部３１〜３８に代えて加算器６１〜６４、整列部６５〜６８、及び丸め処理部６９〜７２を備える点、部分加算器１６に代えて部分加算器１１６を備える点、並びに整列部１７，１８及び丸め処理部１９，２０に代えて整列部１１７及び丸め処理部１１９を備える点において主に相違する。
【００８４】
データマルチプレクサ１１１には、ＭＯＤＥ信号が供給されない。このため、データマルチプレクサ１１１は、演算モードによらず、上位データｄｉｎ１＿ｈを出力データｄｏｕｔ１及び出力データｄｏｕｔ５として出力し、下位データｄｉｎ１＿ｌを出力データｄｏｕｔ３及び出力データｄｏｕｔ７として出力する。また、データマルチプレクサ１１１は、上位データｄｉｎ２＿ｈを出力データｄｏｕｔ２及び出力データｄｏｕｔ４として出力し、下位データｄｉｎ２＿ｌを出力データｄｏｕｔ６及び出力データｄｏｕｔ８として出力する。
【００８５】
加算器６１は、中間結果ｍ１１、及び中間結果ｍ１２を加算することにより、乗算器１２の乗算結果ｍ１を生成する回路である。加算器６１は、乗算結果ｍ１を整列部６５に出力する。加算器６２は、中間結果ｍ２１、及び中間結果ｍ２２を加算することにより、乗算器１３の乗算結果ｍ２を生成する回路である。加算器６２は、乗算結果ｍ２を整列部６６に出力する。加算器６３は、中間結果ｍ３１、及び中間結果ｍ３２を加算することにより、乗算器１４の乗算結果ｍ３を生成する回路である。加算器６３は、乗算結果ｍ３を整列部６７に出力する。加算器６４は、中間結果ｍ４１、及び中間結果ｍ４２を加算することにより、乗算器１５の乗算結果ｍ４を生成する回路である。加算器６４は、乗算結果ｍ４を整列部６８に出力する。乗算結果ｍ１〜ｍ４のそれぞれは、第２ビット数のビット列である。
【００８６】
整列部６５は、部分加算器１１６によって加算されるビット列の指数部を揃えるために、乗算結果ｍ１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部６５は、整列部６５の処理結果を丸め処理部６９に出力する。整列部６６は、部分加算器１１６によって加算されるビット列の指数部を揃えるために、乗算結果ｍ２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部６６は、整列部６６の処理結果を丸め処理部７０に出力する。整列部６７は、部分加算器１１６によって加算されるビット列の指数部を揃えるために、乗算結果ｍ３の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部６７は、整列部６７の処理結果を丸め処理部７１に出力する。整列部６８は、部分加算器１１６によって加算されるビット列の指数部を揃えるために、乗算結果ｍ４の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部６８は、整列部６８の処理結果を丸め処理部７２に出力する。
【００８７】
丸め処理部６９は、整列部６５によってシフト処理が行われた乗算結果ｍ１に対して丸め処理を行う回路である。丸め処理部６９は、丸め処理部６９の演算結果ｒ１を部分加算器１１６に出力する。丸め処理部７０は、整列部６６によってシフト処理が行われた乗算結果ｍ２に対して丸め処理を行う回路である。丸め処理部７０は、丸め処理部７０の演算結果ｒ２を部分加算器１１６に出力する。丸め処理部７１は、整列部６７によってシフト処理が行われた乗算結果ｍ３に対して丸め処理を行う回路である。丸め処理部７１は、丸め処理部７１の演算結果ｒ３を部分加算器１１６に出力する。丸め処理部７２は、整列部６８によってシフト処理が行われた乗算結果ｍ４に対して丸め処理を行う回路である。丸め処理部７２は、丸め処理部７２の演算結果ｒ４を部分加算器１１６に出力する。演算結果ｒ１〜ｒ４のそれぞれは、第２ビット数のビット列である。
【００８８】
部分加算器１１６は、演算結果ｒ１〜ｒ４の加算を行い、第１ビット数のビット列である加算結果Ｐ１を出力する。整列部１１７は、後段の加算器（不図示）によって加算されるビット列の指数部を揃えるために、加算結果Ｐ１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部１１７は、整列部１１７の処理結果を丸め処理部１１９に出力する。丸め処理部１１９は、整列部１１７によってシフト処理が行われた加算結果Ｐ１に対して丸め処理を行う回路である。丸め処理部１１９は、丸め処理部１１９の演算結果Ｒ１を後段の加算器に出力する。
【００８９】
演算部１００は、第１演算モードでは、演算部１０Ａ〜１０Ｄと同様に、第１ビット数を有する２つのデータのそれぞれを第２ビット数を有する２つのデータに分解することによって、第１ビット数を有する２つのデータの乗算を行う。第１演算モードとして倍精度演算モードを用い、倍精度データＡ０及び倍精度データＢ００を用いたＡ０×Ｂ００の演算を行う場合について説明する。図４と同様に、レジスタ４１には、倍精度データＡ０が記憶されており、レジスタ４１からデータマルチプレクサ１１１に入力データＤＩＮ１として倍精度データＡ０が供給されている。レジスタ４２には、倍精度データＢ００が記憶されており、レジスタ４２からデータマルチプレクサ１１１に入力データＤＩＮ２として倍精度データＢ００が供給されている。データマルチプレクサ１１１及び乗算器１２〜１５の動作は、第１演算モードにおける演算部１０Ａ〜１０Ｄのデータマルチプレクサ１１及び乗算器１２〜１５と同じであるので、説明を省略する。
【００９０】
そして、加算器６１は、中間結果ｍ１１及び中間結果ｍ１２を加算することにより、乗算器１２の乗算結果ｍ１を生成し、乗算結果ｍ１を整列部６５に出力する。同様に、加算器６２は、中間結果ｍ２１及び中間結果ｍ２２を加算することにより、乗算器１３の乗算結果ｍ２を生成し、乗算結果ｍ２を整列部６６に出力する。同様に、加算器６３は、中間結果ｍ３１及び中間結果ｍ３２を加算することにより、乗算器１４の乗算結果ｍ３を生成し、乗算結果ｍ３を整列部６７に出力する。同様に、加算器６４は、中間結果ｍ４１及び中間結果ｍ４２を加算することにより、乗算器１４の乗算結果ｍ４を生成し、乗算結果ｍ４を整列部６８に出力する。
【００９１】
そして、整列部６５〜６８は、乗算結果ｍ１〜ｍ４の仮数部に対してシフト処理を行い、整列部６５〜６８の処理結果を丸め処理部６９〜７２に出力する。そして、丸め処理部６９〜７２は、整列部６５〜６８によってシフト処理が行われた乗算結果ｍ１〜ｍ４に対して丸め処理を行い、演算結果ｒ１〜ｒ４を部分加算器１１６に出力する。
【００９２】
そして、部分加算器１１６は、演算結果ｒ１〜ｒ４の加算を行い、加算結果Ｐ１を出力する。そして、整列部１１７は、加算結果Ｐ１の仮数部に対してシフト処理を行い、整列部１１７の処理結果を丸め処理部１１９に出力する。そして、丸め処理部１１９は、整列部１１７によってシフト処理が行われた加算結果Ｐ１に対して丸め処理を行い、演算結果Ｒ１を後段の加算器に出力する。このようにして、Ａ０×Ｂ００の演算結果Ｒ１が得られる。
【００９３】
一方、第２演算モードでは、演算部１００は、第２ビット数を有する４つのデータを用いて、２つの乗算を行う。第２演算モードとして単精度演算モードを用い、単精度データａ０及び単精度データｂ００を用いたａ０×ｂ００の演算と、単精度データａ１及び単精度データｂ１０を用いたａ１×ｂ１０の演算とを行う場合について説明する。レジスタ４１の上位ビットには、単精度データａ０が記憶されており、レジスタ４１の下位ビットには単精度データａ１が記憶されている。レジスタ４１からデータマルチプレクサ１１に入力データＤＩＮ１として単精度データａ０及び単精度データａ１が供給されている。レジスタ４２の上位ビットには、単精度データｂ００が記憶されており、レジスタ４２の下位ビットには単精度データｂ１０が記憶されている。レジスタ４２からデータマルチプレクサ１１に入力データＤＩＮ２として単精度データｂ００及び単精度データｂ１０が供給されている。
【００９４】
データマルチプレクサ１１１は、単精度データａ０を出力データｄｏｕｔ１及び出力データｄｏｕｔ５として出力し、単精度データａ１を出力データｄｏｕｔ３及び出力データｄｏｕｔ７として出力する。また、データマルチプレクサ１１１は、単精度データｂ００を出力データｄｏｕｔ２及び出力データｄｏｕｔ４として出力し、単精度データｂ１０を出力データｄｏｕｔ６及び出力データｄｏｕｔ８として出力する。
【００９５】
そして、乗算器１２は、単精度データａ０と単精度データｂ００との乗算を行い、中間結果ｍ１１及び中間結果ｍ１２を出力する。同様に、乗算器１３は、単精度データａ１と単精度データｂ００との乗算を行い、中間結果ｍ２１及び中間結果ｍ２２を出力する。同様に、乗算器１４は、単精度データａ０と単精度データｂ１０との乗算を行い、中間結果ｍ３１及び中間結果ｍ３２を出力する。同様に、乗算器１５は、単精度データａ１と単精度データｂ１０との乗算を行い、中間結果ｍ４１及び中間結果ｍ４２を出力する。加算器６１〜６４、整列部６５〜６８、及び丸め処理部６９〜７２の動作は、第１演算モードと同様であるので説明を省略する。
【００９６】
しかしながら、ａ０×ｂ００の演算結果及びａ１×ｂ１０の演算結果を得るために、乗算器１３及び乗算器１４の乗算結果は用いられない。つまり、演算部１００では、乗算器１３及び乗算器１４は有効な演算を行っていないといえる。
【００９７】
これに対し、演算装置１Ａ〜１Ｄでは、ＭＯＤＥ信号が第１演算モードを示す場合には、入力データＤＩＮ１の上位データｄｉｎ１＿ｈ及び入力データＤＩＮ２の上位データｄｉｎ２＿ｈが乗算器１２に供給され、乗算器１２はこれらのデータの乗算を行う。また、入力データＤＩＮ１の下位データｄｉｎ１＿ｌ及び入力データＤＩＮ２の上位データｄｉｎ２＿ｈが乗算器１３に供給され、乗算器１３はこれらのデータの乗算を行う。また、入力データＤＩＮ１の上位データｄｉｎ１＿ｈ及び入力データＤＩＮ２の下位データｄｉｎ２＿ｌが乗算器１４に供給され、乗算器１４はこれらのデータの乗算を行う。また、入力データＤＩＮ１の下位データｄｉｎ１＿ｌ及び入力データＤＩＮ２の下位データｄｉｎ２＿ｌが乗算器１５に供給され、乗算器１５はこれらのデータの乗算を行う。つまり、第１ビット数を有する１つのデータを、第２ビット数を有する２つのデータに分割して、乗算が行われる。
【００９８】
一方、演算装置１Ａ〜１Ｄでは、ＭＯＤＥ信号が第２演算モードを示す場合には、入力データＤＩＮ１の上位データｄｉｎ１＿ｈ及び入力データＤＩＮ２の上位データｄｉｎ２＿ｈが乗算器１２に供給され、乗算器１２はこれらのデータの乗算を行う。また、入力データＤＩＮ１の下位データｄｉｎ１＿ｌ及び入力データＤＩＮ２の下位データｄｉｎ２＿ｌが乗算器１３に供給され、乗算器１３はこれらのデータの乗算を行う。また、入力データＤＩＮ１の上位データｄｉｎ１＿ｈ及び入力データＤＩＮ３の上位データｄｉｎ３＿ｈが乗算器１４に供給され、乗算器１４はこれらのデータの乗算を行う。また、入力データＤＩＮ１の下位データｄｉｎ１＿ｌ及び入力データＤＩＮ３の下位データｄｉｎ３＿ｌが乗算器１５に供給され、乗算器１５はこれらのデータの乗算を行う。このように、第１演算モードだけでなく、第２演算モードにおいても、乗算器１２〜１５の全ての乗算器が有効な演算を行う。その結果、演算装置１Ａ〜１Ｄの回路規模を拡大することなく、演算装置１Ａ〜１Ｄの演算性能を向上させることが可能となる。つまり、価格あたりの演算性能を向上させることが可能となる。
【００９９】
また、比較例の演算装置では、第２演算モードにおいて、演算部１００の乗算器１２〜１５のうち、２つの乗算器が有効な演算を行っているのに対し、演算装置１Ａ〜１Ｄでは、演算部１０Ａ〜１０Ｄの乗算器１２〜１５の全ての乗算器が有効な演算を行っている。このため、電力あたりの演算性能を向上させることが可能となる。言い換えれば、演算装置１Ａ〜１Ｄでは、比較例の演算装置に対し、演算装置１Ａ〜１Ｄを構成するトランジスタ等の回路素子の活用効率が向上するので、同じ演算性能を安価かつ低消費電力で提供することが可能となる。
【０１００】
加算器５２によって、入力データＤＩＮ１の上位データｄｉｎ１＿ｈ及び下位データｄｉｎ１＿ｌと、入力データＤＩＮ２の上位データｄｉｎ２＿ｈ及び下位データｄｉｎ２＿ｌと、のベクトル積が得られ、加算器５３によって、入力データＤＩＮ１の上位データｄｉｎ１＿ｈ及び下位データｄｉｎ１＿ｌと、入力データＤＩＮ３の上位データｄｉｎ３＿ｈ及び下位データｄｉｎ３＿ｌと、のベクトル積が得られる。また、部分加算器１６によって、入力データＤＩＮ１と入力データＤＩＮ２との乗算結果（第１ビット数を有する２つのビット列の乗算結果）が得られる。
【０１０１】
乗算器１２は、乗算器１２の乗算の途中結果である中間結果ｍ１１，ｍ１２を乗算結果として出力ししている。この中間結果ｍ１１，ｍ１２は、乗算器１２の演算遅延を生じさせない乗算器１２の乗算の途中結果である。このため、乗算器１２の乗算結果として中間結果ｍ１１，ｍ１２が出力されることにより、乗算器１２の演算処理において、例えば桁上がり等による遅延を抑制することができる。これにより、乗算器１２の演算速度を向上させることが可能となる。同様に、乗算器１３〜１５の演算速度を向上させることが可能となる。また、乗算の中間結果を用いることにより、後段の部分加算器１６における加算のために、加算対象となるビット列の指数部を揃える処理を省略し得るので、演算装置１Ａ〜１Ｄの演算速度を向上させることが可能となる。
【０１０２】
また、加算器５２及び加算器５３によって、第２ビット数を有するデータでの２つの行列演算結果が得られ、加算器５１によって、第１ビット数を有するデータでの１つの行列演算結果が得られる。そして、マルチプレクサ５９によって、ＭＯＤＥ信号が第１演算モードを示す場合には、第１ビット数を有するデータでの１つの行列演算結果が出力され、ＭＯＤＥ信号が第２演算モードを示す場合には、第２ビット数を有するデータでの２つの行列演算結果が出力される。このように、演算装置１Ａ〜１Ｄでは、２つの演算モードに応じた行列演算を行うことが可能となる。したがって、並列演算が必要となるＤＮＮ及びＣＮＮに演算装置１Ａ〜１Ｄが適用された場合には、必要となる行列積に対して高い演算性能を実現することができる。また、演算装置１Ａ〜１Ｄに行列演算を行わせることにより、データマルチプレクサ１１に供給するデータ数を減らすことができ、演算対象のデータを供給するためのデータバスのバンド幅を削減することが可能となる。
【０１０３】
第１演算モードが倍精度演算モードであり、第２演算モードが単精度演算モードである場合、演算部１０Ａ〜１０Ｄのそれぞれは、１個の倍精度の乗算器、及び４個の単精度の乗算器として再構成可能である。これにより、演算装置１Ａ〜１Ｄは、倍精度演算モード及び単精度演算モードでの演算を行うことが可能となる。このような演算装置１Ａ〜１Ｄにおいても、演算装置１Ａ〜１Ｄの回路規模を拡大することなく、演算性能を向上させることが可能となる。
【０１０４】
第１演算モードが単精度演算モードであり、第２演算モードが半精度演算モードである場合、演算部１０Ａ〜１０Ｄのそれぞれは、１個の単精度の乗算器、及び４個の半精度の乗算器として再構成可能である。これにより、演算装置１Ａ〜１Ｄは、単精度演算モード及び半精度演算モードでの演算を行うことが可能となる。このような演算装置１Ａ〜１Ｄにおいても、演算装置１Ａ〜１Ｄの回路規模を拡大することなく、演算性能を向上させることが可能となる。
【０１０５】
さらに、演算システムＳでは、演算ユニットＭＡＵは、４つの演算装置１Ａ〜１Ｄを備えることにより、式（１）に示されるような倍精度データの行列演算（４×４の行列ベクトル積）を行うことができる。演算ユニットＭＡＵは、単精度演算モードでは式（７）に示されるような８×８の行列ベクトル積を行うことが可能となる。この構成によれば、倍精度演算モードでは、それぞれが５２ビットの仮数の乗算を行う１６個の並列乗算器（１サイクルで１乗算を行う回路）を有する回路に相当する演算性能を実現することができる。単精度演算モードでは、それぞれが２３ビットの仮数の乗算を行う６４個の並列乗算器を有する回路に相当する演算性能を実現することができる。
【０１０６】
また、要素プロセッサＰＥ１〜ＰＥ４は、行列演算を行う場合には、単一のプロセッサとして動作するので、行列演算を要素プロセッサＰＥ１〜ＰＥ４で並列処理することができる。これにより、行列演算の演算速度を向上させることが可能となる。
【０１０７】
また、要素プロセッサＰＥ１〜ＰＥ４は、１つのインストラクションで動作するＳＩＭＤ動作を行うので、要素プロセッサＰＥ１〜ＰＥ４が並列動作する。これにより、処理の高速化が可能となる。
【０１０８】
演算システムＳには、プロセッサＩＤを含むメモリアドレスによってアクセス可能なメモリ空間が設定されている。要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、当該プロセッサＩＤを含むメモリアドレスによって示されるメモリ領域にアクセス可能である。このため、メモリ空間を拡張することができ、演算システムＳで扱えるデータサイズを大きくすることが可能となる。
【０１０９】
要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、演算ユニットＭＡＵから受信したデータをリング結合を介して他の要素プロセッサに順に転送（循環シフト）することができる。これにより、要素プロセッサＰＥ１〜ＰＥ４のそれぞれは、非担当領域へのアクセスを実行することが可能となる。
【０１１０】
上記実施形態では、演算部１０Ａ〜１０Ｄのそれぞれは、行列演算の専用回路として構成されている。つまり、乗算器１２〜１５の乗算の中間結果を用いて加算を行っているので、乗算器１２〜１５の乗算結果が得られない。図７に示されるように、変形例の演算部１０Ａは、整列部２１〜２８及び丸め処理部３１〜３８に代えて、加算器６１〜６４と、整列部６５〜６８と、丸め処理部６９〜７２と、を備える点で、上記実施形態の演算部１０Ａと主に相違している。
【０１１１】
加算器６１〜６４は、比較例の演算部１００の加算器６１〜６４と比較して、乗算結果ｍ１〜ｍ４を部分加算器１６にも出力する点において相違し、その余の処理については同じである。整列部６５〜６８は、比較例の演算部１００の整列部６５〜６８と同じであるので、説明を省略する。丸め処理部６９〜７２は、比較例の演算部１００の丸め処理部６９〜７２と比較して、演算結果の出力先において相違する。具体的には、丸め処理部６９は、演算結果ｒ１を加算器５２に出力する。丸め処理部７０は、演算結果ｒ２を加算器５２に出力する。丸め処理部７１は、演算結果ｒ３を加算器５３に出力する。丸め処理部７２は、演算結果ｒ４を加算器５３に出力する。
【０１１２】
変形例の演算部１０Ａによれば、加算器６１〜６４によって、第２演算モードでの乗算結果ｍ１〜ｍ４が得られる。このため、演算部１０Ａは、行列演算以外にも用いられ得る。
【０１１３】
（第２実施形態）
図８は、第２実施形態に係る演算装置の構成を概略的に示す図である。図８に示される演算装置１Ａは、第１実施形態に係る演算装置１Ａと比較して、切り替え可能な演算モードの数、並びに、演算部１０Ａ〜１０Ｄ、及び加算部５０に代えて、演算部２１０Ａ〜２１０Ｄ、及び加算部２５０を備える点において主に相違する。
【０１１４】
第２実施形態に係る演算装置１Ａは、ＭＯＤＥ信号に応じて、演算装置１Ａの演算モードを第１演算モード、第２演算モード、及び第３演算モードのいずれかに切り替える。第３演算モードは、第３ビット数のデータを用いた演算を行うモードである。第３ビット数は、第１ビット数の４分の１であり、第２ビット数の半分のビット数である。ＭＯＤＥ信号は、例えば２ビットの信号であり、第１演算モード、第２演算モード、及び第３演算モードのいずれかを示す。演算装置１Ａが実行し得る演算モードとしては、例えば、倍精度演算モード、単精度演算モード、及び半精度演算モードが挙げられる。つまり、第１演算モードが倍精度演算モードである場合、第２演算モードは単精度演算モードであり、第３演算モードは半精度演算モードである。
【０１１５】
図９は、図８の演算装置に含まれる演算部の構成を概略的に示す図である。演算部２１０Ａ〜２１０Ｄは、同様の構成を有するので、ここでは、演算部２１０Ａの構成について、演算部１０Ａとの相違点を中心に説明する。図９に示されるように、演算部２１０Ａは、演算部１０Ａと比較して、データマルチプレクサ１１及び乗算器１２〜１５に代えてデータマルチプレクサ２１１及び乗算器２１２〜２１５を備える点、レジスタ４４，４５をさらに備える点において、主に相違する。
【０１１６】
レジスタ４１〜４５のそれぞれは、演算対象となる第１ビット数のビット列である入力データＤＩＮ１〜ＤＩＮ５を記憶保持する。入力データＤＩＮ１〜ＤＩＮ５は、演算装置１Ａの外部の装置（本実施形態では、要素プロセッサ）からレジスタ４１〜４５にセットされる。入力データＤＩＮ１は、上述のように、上位データｄｉｎ１＿ｈと、下位データｄｉｎ１＿ｌと、を含む。上位データｄｉｎ１＿ｈは、データｄｉｎ’１＿１及びデータｄｉｎ’１＿２を含み、下位データｄｉｎ１＿ｌは、データｄｉｎ’１＿３及びデータｄｉｎ’１＿４を含む。データｄｉｎ’１＿１〜ｄｉｎ’１＿４は、その順に入力データＤＩＮ１のビット列のＭＳＢから順に配列されている。入力データＤＩＮ２〜ＤＩＮ５についても同様である。データｄｉｎ’１＿１〜ｄｉｎ’１＿４、データｄｉｎ’２＿１〜ｄｉｎ’２＿４、データｄｉｎ’３＿１〜ｄｉｎ’３＿４、データｄｉｎ’４＿１〜ｄｉｎ’４＿４、及びデータｄｉｎ’５＿１〜ｄｉｎ’５＿４は、第３ビット数のビット列である。第３ビット数は、第３演算モードで用いられるデータのビット数に相当し、例えば１６ビットである。
【０１１７】
データマルチプレクサ２１１は、レジスタ４１〜４５から出力されている入力データＤＩＮ１〜ＤＩＮ５を入力し、ＭＯＤＥ信号に応じて、複数の出力データｄｏｕｔ１〜ｄｏｕｔ１２を出力する回路である。出力データｄｏｕｔ１〜ｄｏｕｔ１２のそれぞれは、第２ビット数のビット列である。
【０１１８】
ＭＯＤＥ信号が第１演算モードを示す場合、及びＭＯＤＥ信号が第２演算モードを示す場合のデータマルチプレクサ２１１の動作は、データマルチプレクサ１１の動作と同じである。データマルチプレクサ２１１は、ＭＯＤＥ信号が第３演算モードを示す場合には、上位データｄｉｎ１＿ｈを出力データｄｏｕｔ１及び出力データｄｏｕｔ５として出力し、下位データｄｉｎ１＿ｌを出力データｄｏｕｔ３及び出力データｄｏｕｔ７として出力する。また、データマルチプレクサ２１１は、ＭＯＤＥ信号が第３演算モードを示す場合には、上位データｄｉｎ２＿ｈを出力データｄｏｕｔ２として出力し、下位データｄｉｎ２＿ｌを出力データｄｏｕｔ４として出力する。
【０１１９】
また、データマルチプレクサ２１１は、ＭＯＤＥ信号が第３演算モードを示す場合には、上位データｄｉｎ３＿ｈを出力データｄｏｕｔ９として出力し、下位データｄｉｎ３＿ｌを出力データｄｏｕｔ１０として出力する。また、データマルチプレクサ２１１は、ＭＯＤＥ信号が第３演算モードを示す場合には、上位データｄｉｎ４＿ｈを出力データｄｏｕｔ６として出力し、下位データｄｉｎ４＿ｌを出力データｄｏｕｔ８として出力する。また、データマルチプレクサ２１１は、ＭＯＤＥ信号が第３演算モードを示す場合には、上位データｄｉｎ５＿ｈを出力データｄｏｕｔ１１として出力し、下位データｄｉｎ５＿ｌを出力データｄｏｕｔ１２として出力する。
【０１２０】
乗算器２１２〜２１５は、第２ビット数を有する２つのビット列の乗算を行う回路である。乗算器２１２〜２１５は、同様の構成を有するので、ここでは、乗算器２１２の構成について説明する。図１０は、図９の乗算器の構成を概略的に示す図である。図１０に示されるように、乗算器２１２は、データマルチプレクサ３１１と、乗算器３１２〜３１５と、部分加算器３１６と、を備えている。
【０１２１】
データマルチプレクサ３１１は、出力データｄｏｕｔ１，ｄｏｕｔ２，ｄｏｕｔ９を入力し、ＭＯＤＥ信号に応じて、複数（ここでは８つ）の出力データｄｏｕｔ’１〜ｄｏｕｔ’８を出力する回路である。複数の出力データｄｏｕｔ’１〜ｄｏｕｔ’８のそれぞれは、第３ビット数のビット列である。出力データｄｏｕｔ１は、データｄｏｕｔ’１＿ｈ及びデータｄｏｕｔ’１＿ｌを含む。データｄｏｕｔ’１＿ｈ及びデータｄｏｕｔ’１＿ｌは、その順に出力データｄｏｕｔ１のビット列のＭＳＢから順に配列されている。出力データｄｏｕｔ２〜ｄｏｕｔ１２についても同様である。データｄｏｕｔ’１＿ｈ〜ｄｏｕｔ’１２＿ｈ，ｄｏｕｔ’１＿ｌ〜ｄｏｕｔ’１２＿ｌは、第３ビット数のビット列である。
【０１２２】
データマルチプレクサ３１１は、ＭＯＤＥ信号が第１演算モード及び第２演算モードを示す場合には、データｄｏｕｔ’１＿ｈを出力データｄｏｕｔ’１及び出力データｄｏｕｔ’５として出力し、データｄｉｎ’１＿ｌを出力データｄｏｕｔ’３及び出力データｄｏｕｔ’７として出力する。また、データマルチプレクサ３１１は、ＭＯＤＥ信号が第１演算モード及び第２演算モードを示す場合には、データｄｏｕｔ’２＿ｈを出力データｄｏｕｔ’２及び出力データｄｏｕｔ’４として出力し、データｄｏｕｔ’２＿ｌを出力データｄｏｕｔ’６及び出力データｄｏｕｔ’８として出力する。データマルチプレクサ３１１は、ＭＯＤＥ信号が第１演算モード及び第２演算モードを示す場合には、出力データｄｏｕｔ９を受け取らない。つまり、データマルチプレクサ３１１の第１演算モード及び第２演算モードでの動作は、データマルチプレクサ１１の第１演算モードでの動作と同じである。
【０１２３】
データマルチプレクサ３１１は、ＭＯＤＥ信号が第３演算モードを示す場合には、データｄｏｕｔ’１＿ｈを出力データｄｏｕｔ’１及び出力データｄｏｕｔ’５として出力し、データｄｉｎ’１＿ｌを出力データｄｏｕｔ’３及び出力データｄｏｕｔ’７として出力する。また、データマルチプレクサ３１１は、ＭＯＤＥ信号が第３演算モードを示す場合には、データｄｏｕｔ’２＿ｈを出力データｄｏｕｔ’２として出力し、データｄｏｕｔ’２＿ｌを出力データｄｏｕｔ’４として出力する。また、データマルチプレクサ３１１は、ＭＯＤＥ信号が第３演算モードを示す場合には、データｄｏｕｔ’９＿ｈを出力データｄｏｕｔ’６として出力し、データｄｏｕｔ’９＿ｌを出力データｄｏｕｔ’８として出力する。つまり、データマルチプレクサ３１１の第３演算モードでの動作は、データマルチプレクサ１１の第２演算モードでの動作と同じである。
【０１２４】
乗算器３１２〜３１５は、第３ビット数を有する２つのビット列の乗算を行う回路である。乗算器３１２は、出力データｄｏｕｔ’１と出力データｄｏｕｔ’２との乗算を行う。乗算器３１２は、例えば、ウォレスツリー回路を用いて２つのビット列の乗算を行い、乗算器３１２の乗算の途中結果である中間結果ｍ’１１及び中間結果ｍ’１２を乗算結果として出力する。中間結果ｍ’１１及び中間結果ｍ’１２は、第３ビット数のビット列である。中間結果ｍ’１１及び中間結果ｍ’１２は、乗算器３１２の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。乗算器３１２は、中間結果ｍ’１１を整列部３２１に出力し、中間結果ｍ’１２を整列部３２２に出力するとともに、中間結果ｍ’１１及び中間結果ｍ’１２を部分加算器３１６に出力する。
【０１２５】
乗算器３１３は、出力データｄｏｕｔ’３と出力データｄｏｕｔ’４との乗算を行う。乗算器３１３は、例えば、ウォレスツリー回路を用いて２つのビット列の乗算を行い、乗算器３１３の乗算の途中結果である中間結果ｍ’２１及び中間結果ｍ’２２を乗算結果として出力する。中間結果ｍ’２１及び中間結果ｍ’２２は、第３ビット数のビット列である。中間結果ｍ’２１及び中間結果ｍ’２２は、乗算器３１３の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。乗算器３１３は、中間結果ｍ’２１を整列部３２３に出力し、中間結果ｍ’２２を整列部３２４に出力するとともに、中間結果ｍ’２１及び中間結果ｍ’２２を部分加算器３１６に出力する。
【０１２６】
乗算器３１４は、出力データｄｏｕｔ’５と出力データｄｏｕｔ’６との乗算を行う。乗算器３１４は、例えば、ウォレスツリー回路を用いて２つのビット列の乗算を行い、乗算器３１４の乗算の途中結果である中間結果ｍ’３１及び中間結果ｍ’３２を乗算結果として出力する。中間結果ｍ’３１及び中間結果ｍ’３２は、第３ビット数のビット列である。中間結果ｍ’３１及び中間結果ｍ’３２は、乗算器３１４の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。乗算器３１４は、中間結果ｍ’３１を整列部３２５に出力し、中間結果ｍ’３２を整列部３２６に出力するとともに、中間結果ｍ’３１及び中間結果ｍ’３２を部分加算器３１６に出力する。
【０１２７】
乗算器３１５は、出力データｄｏｕｔ’７と出力データｄｏｕｔ’８との乗算を行う。乗算器３１５は、例えば、ウォレスツリー回路を用いて２つのビット列の乗算を行い、乗算器３１５の乗算の途中結果である中間結果ｍ’４１及び中間結果ｍ’４２を乗算結果として出力する。中間結果ｍ’４１及び中間結果ｍ’４２は、第３ビット数のビット列である。中間結果ｍ’４１及び中間結果ｍ’４２は、乗算器３１５の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。乗算器３１５は、中間結果ｍ’４１を整列部３２７に出力し、中間結果ｍ’４２を整列部３２８に出力するとともに、中間結果ｍ’４１及び中間結果ｍ’４２を部分加算器３１６に出力する。
【０１２８】
部分加算器３１６は、第２ビット数のビット列での乗算結果を生成する回路である。具体的には、部分加算器３１６は、乗算器３１２〜３１５の乗算結果の加算を行う。本実施形態では、部分加算器３１６は、中間結果ｍ’１１、中間結果ｍ’１２、中間結果ｍ’２１、中間結果ｍ’２２、中間結果ｍ’３１、中間結果ｍ’３２、中間結果ｍ’４１、及び中間結果ｍ’４２の加算を行う。部分加算器３１６は、部分加算器３１６の加算の途中結果である中間結果ｍ１１及び中間結果ｍ１２を加算結果として出力する。中間結果ｍ１１及び中間結果ｍ１２は、第２ビット数のビット列である。中間結果ｍ１１及び中間結果ｍ１２は、部分加算器３１６の演算遅延を生じさせない値であり、例えば、桁上がりを生じさせない部分的な合計値である。
【０１２９】
整列部３２１は、後述の加算器５４によって加算されるビット列の指数部を揃えるために、中間結果ｍ’１１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部３２１は、整列部３２１の処理結果を丸め処理部３３１に出力する。整列部３２２は、加算器５４によって加算されるビット列の指数部を揃えるために、中間結果ｍ’１２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部３２２は、整列部３２２の処理結果を丸め処理部３３２に出力する。整列部３２３は、加算器５４によって加算されるビット列の指数部を揃えるために、中間結果ｍ’２１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部３２３は、整列部３２３の処理結果を丸め処理部３３３に出力する。整列部３２４は、加算器５４によって加算されるビット列の指数部を揃えるために、中間結果ｍ’２２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部３２４は、整列部３２４の処理結果を丸め処理部３３４に出力する。
【０１３０】
整列部３２５は、後述の加算器５５によって加算されるビット列の指数部を揃えるために、中間結果ｍ’３１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部３２５は、整列部３２５の処理結果を丸め処理部３３５に出力する。整列部３２６は、加算器５５によって加算されるビット列の指数部を揃えるために、中間結果ｍ’３２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部３２６は、整列部３２６の処理結果を丸め処理部３３６に出力する。整列部３２７は、加算器５５によって加算されるビット列の指数部を揃えるために、中間結果ｍ’４１の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部３２７は、整列部３２７の処理結果を丸め処理部３３７に出力する。整列部３２８は、加算器５５によって加算されるビット列の指数部を揃えるために、中間結果ｍ’４２の仮数部に対してシフト処理（右ビットシフト）を行う回路である。整列部３２８は、整列部３２８の処理結果を丸め処理部３３８に出力する。
【０１３１】
丸め処理部３３１は、整列部３２１によってシフト処理が行われた中間結果ｍ’１１に対して丸め処理を行う回路である。丸め処理部３３１は、丸め処理部３３１の演算結果ｒ’１１を加算部５０（加算器５４）に出力する。丸め処理部３３２は、整列部３２２によってシフト処理が行われた中間結果ｍ’１２に対して丸め処理を行う回路である。丸め処理部３３２は、丸め処理部３３２の演算結果ｒ’１２を加算部５０（加算器５４）に出力する。丸め処理部３３３は、整列部３２３によってシフト処理が行われた中間結果ｍ’２１に対して丸め処理を行う回路である。丸め処理部３３３は、丸め処理部３３３の演算結果ｒ’２１を加算部５０（加算器５４）に出力する。丸め処理部３３４は、整列部３２４によってシフト処理が行われた中間結果ｍ’２２に対して丸め処理を行う回路である。丸め処理部３３４は、丸め処理部３３４の演算結果ｒ’２２を加算部５０（加算器５４）に出力する。演算結果ｒ’１１，ｒ’１２，ｒ’２１，ｒ’２２のそれぞれは、第３ビット数のビット列である。
【０１３２】
丸め処理部３３５は、整列部３２５によってシフト処理が行われた中間結果ｍ’３１に対して丸め処理を行う回路である。丸め処理部３３５は、丸め処理部３３５の演算結果ｒ’３１を加算部５０（加算器５５）に出力する。丸め処理部３３６は、整列部３２６によってシフト処理が行われた中間結果ｍ’３２に対して丸め処理を行う回路である。丸め処理部３３６は、丸め処理部３３６の演算結果ｒ’３２を加算部５０（加算器５５）に出力する。丸め処理部３３７は、整列部３２７によってシフト処理が行われた中間結果ｍ’４１に対して丸め処理を行う回路である。丸め処理部３３７は、丸め処理部３３７の演算結果ｒ’４１を加算部５０（加算器５５）に出力する。丸め処理部３３８は、整列部３２８によってシフト処理が行われた中間結果ｍ’４２に対して丸め処理を行う回路である。丸め処理部３３８は、丸め処理部３３８の演算結果ｒ’４２を加算部５０（加算器５５）に出力する。演算結果ｒ’３１，ｒ’３２，ｒ’４１，ｒ’４２のそれぞれは、第３ビット数のビット列である。
【０１３３】
このように、乗算器２１２〜２１５は、演算部１０Ａのデータマルチプレクサ１１、乗算器１２〜１５、部分加算器１６、整列部２１〜２８、及び丸め処理部３１〜３８と同様の構成を有している。なお、データマルチプレクサ２１１と各乗算器２１２〜２１５のデータマルチプレクサ３１１とは、１つのデータマルチプレクサで置き換えられてもよい。
【０１３４】
図８に戻って、演算装置１Ａの説明を続ける。加算部２５０は、加算部５０と比較して、マルチプレクサ５９に代えてマルチプレクサ２５９を備える点、加算器５４〜５７をさらに備える点において主に相違する。以下、加算部５０との相違点について説明する。
【０１３５】
レジスタ４０に保持される入力データＤＩＮ０は、第３ビット数のビット列であるデータｄｉｎ０＿１〜ｄｉｎ０＿４を含む。レジスタ４０は、データｄｉｎ０＿１を加算器５４に出力し、データｄｉｎ０＿２を加算器５５に出力し、データｄｉｎ０＿３を加算器５６に出力し、データｄｉｎ０＿４を加算器５７に出力する。
【０１３６】
加算器５４は、第３演算モードの演算結果ｄ’０を生成する。本実施形態では、加算器５４は、演算部２１０Ａ，２１０Ｂの乗算器２１２〜２１５の演算結果ｒ’１１，ｒ’１２，ｒ’２１，ｒ’２２と、データｄｉｎ’０＿１との加算を行うことによって、演算結果ｄ’０を生成する。加算器５４は、演算結果ｄ’０をマルチプレクサ２５９に出力する。
【０１３７】
加算器５５は、第３演算モードの演算結果ｄ’１を生成する。本実施形態では、加算器５５は、演算部２１０Ａ，２１０Ｂの乗算器２１２〜２１５の演算結果ｒ’３１，ｒ’３２，ｒ’４１，ｒ’４２と、データｄｉｎ０＿２との加算を行うことによって、演算結果ｄ’１を生成する。加算器５５は、演算結果ｄ’１をマルチプレクサ２５９に出力する。
【０１３８】
加算器５６は、第３演算モードの演算結果ｄ’２を生成する。本実施形態では、加算器５６は、演算部２１０Ｃ，２１０Ｄの乗算器２１２〜２１５の演算結果ｒ’１１，ｒ’１２，ｒ’２１，ｒ’２２と、データｄｉｎ０＿３との加算を行うことによって、演算結果ｄ’２を生成する。加算器５６は、演算結果ｄ’２をマルチプレクサ２５９に出力する。
【０１３９】
加算器５７は、第３演算モードの演算結果ｄ’３を生成する。本実施形態では、加算器５７は、演算部２１０Ｃ，２１０Ｄの乗算器２１２〜２１５の演算結果ｒ’３１，ｒ’３２，ｒ’４１，ｒ’４２と、データｄｉｎ０＿４との加算を行うことによって、演算結果ｄ’３を生成する。加算器５７は、演算結果ｄ’３をマルチプレクサ２５９に出力する。なお、演算結果ｄ’０〜ｄ’３が組み合わされて演算結果（ｄ’０，ｄ’１，ｄ’２，ｄ’３）が生成される。演算結果（ｄ’０，ｄ’１，ｄ’２，ｄ’３）は、演算結果ｄ’０〜ｄ’３をその順に上位ビットから配列したビット列である。つまり、演算結果（ｄ’０，ｄ’１，ｄ’２，ｄ’３）は、第１ビット数のビット列である。
【０１４０】
マルチプレクサ２５９は、演算結果Ｄ０、演算結果（ｄ０，ｄ１）、及び演算結果（ｄ’０，ｄ’１，ｄ’２，ｄ’３）を入力し、ＭＯＤＥ信号に応じて、演算結果Ｄ０と演算結果（ｄ０，ｄ１）と演算結果（ｄ’０，ｄ’１，ｄ’２，ｄ’３）とのいずれかを出力する回路である。マルチプレクサ２５９は、ＭＯＤＥ信号が第１演算モードを示す場合には、演算結果Ｄ０を出力する。マルチプレクサ２５９は、ＭＯＤＥ信号が第２演算モードを示す場合には、演算結果（ｄ０，ｄ１）を出力する。マルチプレクサ２５９は、ＭＯＤＥ信号が第３演算モードを示す場合には、演算結果（ｄ’０，ｄ’１，ｄ’２，ｄ’３）を出力する。
【０１４１】
演算装置１Ａは、シフト量演算回路２６０をさらに備える。図１１は、シフト量演算回路の構成を概略的に示す図である。図１１に示されるシフト量演算回路２６０は、各整列部におけるシフト処理のシフト量を演算する回路である。シフト量演算回路２６０は、指数部抽出回路２６１と、最大値演算回路２６２Ａ〜２６２Ｄと、減算回路２６３Ａ〜２６３Ｄと、を備える。
【０１４２】
指数部抽出回路２６１は、入力データＤＩＮ０〜ＤＩＮ５から指数部を抽出する回路である。指数部抽出回路２６１には、レジスタ４０から入力データＤＩＮ０が供給され、演算部２１０Ａ〜２１０Ｄから入力データＤＩＮ１〜ＤＩＮ５が供給されている。
【０１４３】
図１２（ａ）〜（ｃ）に示されるように、各入力データＤＩＮ０〜ＤＩＮ５が倍精度データ、単精度データ、及び半精度データのいずれを有するかに応じて、指数部の数及び位置が異なる。倍精度データのビット数が６４ビットである場合、倍精度データでは、ＭＳＢは符号を示し、続く１１ビットが指数部、残りの５２ビットが仮数部である。単精度データのビット数が３２ビットである場合、単精度データでは、ＭＳＢは符号を示し、続く８ビットが指数部、残りの２３ビットが仮数部である。半精度データのビット数が１６ビットである場合、半精度データでは、ＭＳＢは符号を示し、続く５ビットが指数部、残りの１０ビットが仮数部である。
【０１４４】
入力データＤＩＮ０〜ＤＩＮ５が倍精度データである場合、入力データＤＩＮ０〜ＤＩＮ５のそれぞれは１つの指数部を有する。入力データＤＩＮ０〜ＤＩＮ５が単精度データである場合、入力データＤＩＮ０〜ＤＩＮ５のそれぞれは２つの指数部を有する。入力データＤＩＮ０〜ＤＩＮ５が半精度データである場合、入力データＤＩＮ０〜ＤＩＮ５のそれぞれは４つの指数部を有する。指数部抽出回路２６１は、ＭＯＤＥ信号に応じて指数部を抽出し、抽出した指数部に基づいて、加算対象となる指数部を最大値演算回路２６２Ａ〜２６２Ｄ、及び減算回路２６３Ａ〜２６３Ｄに出力する。
【０１４５】
最大値演算回路２６２Ａ〜２６２Ｄは、加算対象となる複数の対象データの指数部のうちの最大の指数部である最大指数を演算する回路である。最大値演算回路２６２Ａ〜２６２Ｄは、指数部抽出回路２６１から供給された複数の指数部のうちの最大の指数部を最大指数とする。最大値演算回路２６２Ａ〜２６２Ｄは、例えば、複数の対象データのＭＳＢからＬＳＢに向かって順番に比較を行うことによって、最大値を有するビット列を特定し、特定したビット列の値を最大指数とする。最大値演算回路２６２Ａ〜２６２Ｄは、最大指数を減算回路２６３Ａ〜２６３Ｄに出力する。減算回路２６３Ａ〜２６３Ｄは、最大値演算回路２６２Ａ〜２６２Ｄによって演算された最大値から、指数部抽出回路２６１から供給された指数部を減算し、減算結果をシフト量として整列部に出力する。シフト量演算回路２６０の詳細な動作については後述する。
【０１４６】
ここで、図１３〜図１５を用いて最大値演算回路２６２Ａ〜２６２Ｄの構成例を説明する。図１３は、２つのビット列から最大値を演算する最大値演算回路の一構成例を示す回路図である。図１４は、図１３の最大値演算回路の別の構成例を示す回路図である。図１５は、複数のビット列から最大値を演算する最大値演算回路の構成例を示す図である。最大値演算回路２６２Ａ〜２６２Ｄは、同様の構成を有するので、ここでは、最大値演算回路２６２Ａの構成について説明する。
【０１４７】
図１３に示される最大値演算回路２６２Ａは、２つの数値のうちの最大値を算出する回路である。この例では、２つの数値を示すビット列Ｅ０，Ｅ１は、４ビットのビット列である。最大値演算回路２６２Ａは、ビット列Ｅ０，Ｅ１のうちの最大値を有するビット列Ｅｍａｘを出力する。ビット列Ｅ０は、ビットＥ０（０），Ｅ０（１），Ｅ０（２），Ｅ０（３）をその順に配列したビット列である。ビットＥ０（０）がＭＳＢであり、Ｅ０（３）がＬＳＢである。同様に、ビット列Ｅ１は、ビットＥ１（０），Ｅ１（１），Ｅ１（２），Ｅ１（３）をその順に配列したビット列である。ビットＥ１（０）がＭＳＢであり、Ｅ１（３）がＬＳＢである。同様に、ビット列Ｅｍａｘは、ビットＥｍａｘ（０），Ｅｍａｘ（１），Ｅｍａｘ（２），Ｅｍａｘ（３）をその順に配列したビット列である。ビットＥｍａｘ（０）がＭＳＢであり、Ｅｍａｘ（３）がＬＳＢである。
【０１４８】
最大値演算回路２６２Ａは、ビット生成部３６１ａ〜３６１ｄと、マスク信号生成部３６２ａ〜３６２ｄと、を備える。ビット生成部３６１ａは、ビットＥｍａｘ（０）を生成する。具体的には、ビット生成部３６１ａは、ＯＲゲートによって構成される。ビット生成部３６１ａは、ビットＥ０（０），Ｅ１（０）のＯＲ演算を行って、演算結果をビットＥｍａｘ（０）として出力する。
【０１４９】
ビット生成部３６１ｂは、ビットＥｍａｘ（１）を生成する。具体的には、ビット生成部３６１ｂは、２つのＡＮＤゲート及びＯＲゲートによって構成される。ビット生成部３６１ｂは、ビットＥ０（１）とマスク信号ｍａｓｋ０（０）とのＡＮＤ演算、及びビットＥ１（１）とマスク信号ｍａｓｋ１（０）とのＡＮＤ演算をそれぞれ行う。そして、ビット生成部３６１ｂは、２つのＡＮＤ演算の演算結果をＯＲ演算し、演算結果をビットＥｍａｘ（１）として出力する。
【０１５０】
ビット生成部３６１ｃは、ビットＥｍａｘ（２）を生成する。具体的には、ビット生成部３６１ｃは、２つのＡＮＤゲート及びＯＲゲートによって構成される。ビット生成部３６１ｃは、ビットＥ０（２）とマスク信号ｍａｓｋ０（１）とのＡＮＤ演算、及びビットＥ１（２）とマスク信号ｍａｓｋ１（１）とのＡＮＤ演算をそれぞれ行う。そして、ビット生成部３６１ｃは、２つのＡＮＤ演算の演算結果をＯＲ演算し、演算結果をビットＥｍａｘ（２）として出力する。
【０１５１】
ビット生成部３６１ｄは、ビットＥｍａｘ（３）を生成する。具体的には、ビット生成部３６１ｄは、２つのＡＮＤゲート及びＯＲゲートによって構成される。ビット生成部３６１ｄは、ビットＥ０（３）とマスク信号ｍａｓｋ０（２）とのＡＮＤ演算、及びビットＥ１（３）とマスク信号ｍａｓｋ１（２）とのＡＮＤ演算をそれぞれ行う。そして、ビット生成部３６１ｄは、２つのＡＮＤ演算の演算結果をＯＲ演算し、演算結果をビットＥｍａｘ（３）として出力する。
【０１５２】
マスク信号生成部３６２ａは、マスク信号ｍａｓｋ０（０），ｍａｓｋ１（０）を生成する。具体的には、マスク信号生成部３６２ａは、２つのＯＲゲートによって構成される。マスク信号生成部３６２ａは、ビットＥ０（０）とビットＥｍａｘ（０）の反転とをＯＲ演算し、演算結果をマスク信号ｍａｓｋ０（０）として出力する。マスク信号生成部３６２ａは、ビットＥ１（０）とビットＥｍａｘ（０）の反転とをＯＲ演算し、演算結果をマスク信号ｍａｓｋ１（０）として出力する。
【０１５３】
マスク信号生成部３６２ｂは、マスク信号ｍａｓｋ０（１），ｍａｓｋ１（１）を生成する。具体的には、マスク信号生成部３６２ｂは、２つのＯＲゲート及び２つのＡＮＤゲートによって構成される。マスク信号生成部３６２ｂは、ビットＥ０（１）とビットＥｍａｘ（１）の反転とをＯＲ演算し、さらにその演算結果とマスク信号ｍａｓｋ０（０）とをＡＮＤ演算し、その演算結果をマスク信号ｍａｓｋ０（１）として出力する。同様に、マスク信号生成部３６２ｂは、ビットＥ１（１）とビットＥｍａｘ（１）の反転とをＯＲ演算し、さらにその演算結果とマスク信号ｍａｓｋ１（０）とをＡＮＤ演算し、その演算結果をマスク信号ｍａｓｋ１（１）として出力する。
【０１５４】
マスク信号生成部３６２ｃは、マスク信号ｍａｓｋ０（２），ｍａｓｋ１（２）を生成する。具体的には、マスク信号生成部３６２ｃは、２つのＯＲゲート及び２つのＡＮＤゲートによって構成される。マスク信号生成部３６２ｃは、ビットＥ０（２）とビットＥｍａｘ（２）の反転とをＯＲ演算し、さらにその演算結果とマスク信号ｍａｓｋ０（１）とをＡＮＤ演算し、その演算結果をマスク信号ｍａｓｋ０（２）として出力する。同様に、マスク信号生成部３６２ｃは、ビットＥ１（２）とビットＥｍａｘ（２）の反転とをＯＲ演算し、さらにその演算結果とマスク信号ｍａｓｋ１（１）とをＡＮＤ演算し、その演算結果をマスク信号ｍａｓｋ１（２）として出力する。
【０１５５】
マスク信号生成部３６２ｄは、マスク信号ｍａｓｋ０（３），ｍａｓｋ１（３）を生成する。具体的には、マスク信号生成部３６２ｄは、２つのＯＲゲート及び２つのＡＮＤゲートによって構成される。マスク信号生成部３６２ｄは、ビットＥ０（３）とビットＥｍａｘ（３）の反転とをＯＲ演算し、さらにその演算結果とマスク信号ｍａｓｋ０（２）とをＡＮＤ演算し、その演算結果をマスク信号ｍａｓｋ０（３）として出力する。同様に、マスク信号生成部３６２ｄは、ビットＥ１（３）とビットＥｍａｘ（３）の反転とをＯＲ演算し、さらにその演算結果とマスク信号ｍａｓｋ１（２）とをＡＮＤ演算し、その演算結果をマスク信号ｍａｓｋ１（３）として出力する。
【０１５６】
このように、図１３の最大値演算回路２６２Ａでは、ビット列ＥｍａｘがＭＳＢから順に１ビットずつ算出される。マスク信号ｍａｓｋ０，ｍａｓｋ１がＭＳＢからＬＳＢに向かって順に伝搬しているので、最大値演算回路２６２Ａの遅延はこれらのマスク信号ｍａｓｋ０，ｍａｓｋ１が通過するゲート数によって律速される。なお、比較対象のビット列Ｅ０，Ｅ１は、４ビットのビット列であるので、マスク信号生成部３６２ｄは省略され得る。また、比較対象のビット列が４ビットよりも大きい場合には、ビット数に応じてビット生成部３６１ｄ及びマスク信号生成部３６２ｄがさらに追加される。
【０１５７】
図１４に示される最大値演算回路２６２Ａは、２つの数値のうちの最大値を算出する回路である。この例では、２つの数値を示すビット列Ｅ０，Ｅ１は、４ビットのビット列である。最大値演算回路２６２Ａは、図１３に示される最大値演算回路２６２Ａと比較して、マスク信号生成部３６２ａ，３６２ｃを備えない点、並びに、ビット生成部３６１ｂ，３６１ｄ及びマスク信号生成部３６２ｂ，３６２ｄの構成において主に相違する。
【０１５８】
ビット生成部３６１ｂは、３つのＡＮＤゲート及び２つのＯＲゲートによって構成される。ビット生成部３６１ｂは、ビットＥ０（０），Ｅ０（１）をＡＮＤ演算し、ビットＥ１（０），Ｅ１（１）をＡＮＤ演算する。ビット生成部３６１ｂは、ビットＥ０（１），Ｅ１（１）をＯＲ演算し、その演算結果とビットＥ０（０）の反転とビットＥ１（０）の反転とをＡＮＤ演算する。そして、ビット生成部３６１ｂは、３つのＡＮＤ演算の演算結果をさらにＯＲ演算し、演算結果をビットＥｍａｘ（１）として出力する。
【０１５９】
ビット生成部３６１ｄは、６つのＡＮＤゲート及び３つのＯＲゲートによって構成される。ビット生成部３６１ｄは、ビットＥ０（２），Ｅ０（３）をＡＮＤ演算し、ビットＥ１（２），Ｅ１（３）をＡＮＤ演算する。ビット生成部３６１ｄは、ビットＥ０（３），Ｅ１（３）をＯＲ演算し、その演算結果とビットＥ０（２）の反転とビットＥ１（２）の反転とをＡＮＤ演算する。そして、ビット生成部３６１ｄは、３つのＡＮＤ演算の演算結果をさらにＯＲ演算する。ビット生成部３６１ｄは、ＯＲ演算の演算結果とマスク信号ｍａｓｋ０（１），ｍａｓｋ１（１）とのＡＮＤ演算、ビットＥ０（３）の反転とマスク信号ｍａｓｋ０（１）とのＡＮＤ演算、ビットＥ１（３）の反転とマスク信号ｍａｓｋ１（１）とのＡＮＤ演算をさらに行い、３つのＡＮＤ演算の演算結果をＯＲ演算して演算結果をビットＥｍａｘ（３）として出力する。
【０１６０】
マスク信号生成部３６２ｂは、８つのＡＮＤゲート及び２つのＯＲゲートによって構成される。マスク信号生成部３６２ｂは、ビットＥ１（０），Ｅ１（１）のＡＮＤ演算結果の反転とビットＥ０（０）とをＡＮＤ演算し、その演算結果とビットＥ０（０），Ｅ０（１）のＡＮＤ演算結果とをさらにＡＮＤ演算する。そして、マスク信号生成部３６２ｂは、ビットＥ１（０）の反転とビットＥ０（１）とをＡＮＤ演算し、ビットＥ１（０）の反転とビットＥ１（１）の反転とをＡＮＤ演算する。そして、マスク信号生成部３６２ｂは、３つのＡＮＤ演算結果をＯＲ演算し、その演算結果をマスク信号ｍａｓｋ０（１）として出力する。
【０１６１】
また、マスク信号生成部３６２ｂは、ビットＥ０（０），Ｅ０（１）のＡＮＤ演算結果の反転とビットＥ１（１）とをＡＮＤ演算し、その演算結果とビットＥ１（０），Ｅ１（１）のＡＮＤ演算結果とをさらにＡＮＤ演算する。そして、マスク信号生成部３６２ｂは、ビットＥ０（０）の反転とビットＥ１（１）とをＡＮＤ演算し、ビットＥ０（０）の反転とビットＥ０（１）の反転とをＡＮＤ演算する。そして、マスク信号生成部３６２ｂは、３つのＡＮＤ演算結果をＯＲ演算し、その演算結果をマスク信号ｍａｓｋ１（１）として出力する。
【０１６２】
マスク信号生成部３６２ｄは、１２個のＡＮＤゲート及び３つのＯＲゲートによって構成される。マスク信号生成部３６２ｄは、マスク信号ｍａｓｋ０（１），ｍａｓｋ１（１）のＯＲ演算を行い、その演算結果の反転とマスク信号ｍａｓｋ０（１）とのＡＮＤ演算を行う。また、マスク信号生成部３６２ｄは、ビットＥ１（２），Ｅ１（３）のＡＮＤ演算結果の反転とビットＥ０（２）とをＡＮＤ演算し、その演算結果とビットＥ０（２），Ｅ０（３）のＡＮＤ演算結果とをさらにＡＮＤ演算する。そして、マスク信号生成部３６２ｄは、ビットＥ１（２）の反転とビットＥ０（３）とをＡＮＤ演算し、ビットＥ１（２）の反転とビットＥ１（３）の反転とをＡＮＤ演算する。そして、マスク信号生成部３６２ｄは、４つのＡＮＤ演算結果をＯＲ演算し、その演算結果とマスク信号ｍａｓｋ０（１），ｍａｓｋ１（１）のＯＲ演算結果とのＡＮＤ演算を行い、その演算結果をマスク信号ｍａｓｋ０（３）として出力する。
【０１６３】
マスク信号生成部３６２ｄは、マスク信号ｍａｓｋ０（１），ｍａｓｋ１（１）のＯＲ演算結果の反転とマスク信号ｍａｓｋ１（１）とのＡＮＤ演算を行う。また、マスク信号生成部３６２ｄは、ビットＥ０（２），Ｅ０（３）のＡＮＤ演算結果の反転とビットＥ１（３）とをＡＮＤ演算し、その演算結果とビットＥ１（２），Ｅ１（３）のＡＮＤ演算結果とをさらにＡＮＤ演算する。そして、マスク信号生成部３６２ｄは、ビットＥ０（２）の反転とビットＥ１（３）とをＡＮＤ演算し、ビットＥ０（２）の反転とビットＥ０（３）の反転とをＡＮＤ演算する。そして、マスク信号生成部３６２ｄは、４つのＡＮＤ演算結果をＯＲ演算し、その演算結果とマスク信号ｍａｓｋ０（１），ｍａｓｋ１（１）のＯＲ演算結果とのＡＮＤ演算を行い、その演算結果をマスク信号ｍａｓｋ１（３）として出力する。
【０１６４】
このように、図１４の最大値演算回路２６２Ａでは、ビット列ＥｍａｘがＭＳＢから順に２ビットずつ算出される。複数ビットをまとめて処理することによって、マスク信号ｍａｓｋ０，ｍａｓｋ１が通過するゲート数を図１３の最大値演算回路２６２Ａよりも減らすことができる。これにより、図１３の最大値演算回路２６２Ａと比較して、最大値演算回路２６２Ａの遅延を低減することができ、最大値演算回路２６２Ａの処理効率を向上させることが可能となる。
【０１６５】
なお、比較対象のビット列Ｅ０，Ｅ１は、４ビットのビット列であるので、マスク信号生成部３６２ｄは省略され得る。また、比較対象のビット列Ｅ０，Ｅ１が４ビットよりも大きい場合には、２ビットごとに、ビット生成部３６１ｃ，３６１ｄ及びマスク信号生成部３６２ｄがさらに追加される。
【０１６６】
図１５に示される最大値演算回路２６２Ａは、複数の数値のうちの最大値を算出する回路である。この例では、最大値演算回路２６２Ａは、８つのビット列Ｅ０〜Ｅ７のうちの最大値を有するビット列を出力する。最大値演算回路２６２Ａは、複数の最大値演算部（ここでは、最大値演算部２６２ａ〜２６２ｇ）を備える。最大値演算部２６２ａ〜２６２ｇのそれぞれは、２つの数値のうちの最大値を算出する回路であり、例えば、図１３又は図１４に示される最大値演算回路２６２Ａと同様の構成を有している。
【０１６７】
最大値演算部２６２ａは、ビット列Ｅ０，Ｅ１のうちの最大値を有するビット列を出力する。最大値演算部２６２ｂは、ビット列Ｅ２，Ｅ３のうちの最大値を有するビット列を出力する。最大値演算部２６２ｃは、ビット列Ｅ４，Ｅ５のうちの最大値を有するビット列を出力する。最大値演算部２６２ｄは、ビット列Ｅ６，Ｅ７のうちの最大値を有するビット列を出力する。最大値演算部２６２ｅは、最大値演算部２６２ａから出力されたビット列と最大値演算部２６２ｂから出力されたビット列とのうちの最大値を有するビット列を出力する。最大値演算部２６２ｆは、最大値演算部２６２ｃから出力されたビット列と最大値演算部２６２ｄから出力されたビット列とのうちの最大値を有するビット列を出力する。最大値演算部２６２ｇは、最大値演算部２６２ｅから出力されたビット列と最大値演算部２６２ｆから出力されたビット列とのうちの最大値を有するビット列を出力する。
【０１６８】
このように、最大値演算回路２６２Ａでは、複数の最大値演算部がツリー状に接続されている。これにより、複数のビット列のうちの最大値を有するビット列が出力される。
【０１６９】
次に、図１６を用いて演算装置１Ａ〜１Ｄの第１演算モードでの動作を説明する。図１６は、図８の演算装置の第１演算モードでの動作を説明するための図である。ここでは、第１演算モードとして、倍精度演算モードを用い、演算ユニットＭＡＵが式（１）に示される倍精度の行列演算を行う場合を一例として説明する。演算装置１Ａ〜１Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、ここでは演算装置１Ａについて説明する。また、演算部２１０Ａ〜２１０Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、ここでは演算部２１０Ａについて説明する。
【０１７０】
演算装置１Ａの演算部２１０Ａは、Ａ０×Ｂ００の演算を行う。倍精度データＡ０は、上位データａ０＿ｈと、下位データａ０＿ｌと、を含む。上位データａ０＿ｈは、データａ’０＿１及びデータａ’０＿２を含み、下位データａ０＿ｌは、データａ’０＿３及びデータａ’０＿４を含む。データａ’０＿１〜ａ’０＿４は、その順に倍精度データＡ０のビット列のＭＳＢから順に配列されている。倍精度データＢ００は、上位データｂ００＿ｈと、下位データｂ００＿ｌと、を含む。上位データｂ００＿ｈは、データｂ’００＿１及びデータｂ’００＿２を含み、下位データｂ００＿ｌは、データｂ’００＿３及びデータｂ’００＿４を含む。データｂ’００＿１〜ｂ’００＿４は、その順に倍精度データＢ００のビット列のＭＳＢから順に配列されている。データａ’０＿１〜ａ’０＿４、及びデータｂ’００＿１〜ｂ’００＿４は、半精度データと同じビット数を有する。
【０１７１】
演算部２１０Ａは、式（１６）に示されるように、倍精度データＡ０及び倍精度データＢ００のそれぞれを半精度データのビット数を有する４つのデータに分解することによって、倍精度データＡ０及び倍精度データＢ００の乗算を行う。
【数１６】
2018194905.tif 000018
【０１７２】
以下、具体的に説明する。レジスタ４１には、倍精度データＡ０が記憶されており、レジスタ４１からデータマルチプレクサ２１１に入力データＤＩＮ１として倍精度データＡ０が供給されている。レジスタ４２には、倍精度データＢ００が記憶されており、レジスタ４２からデータマルチプレクサ２１１に入力データＤＩＮ２として倍精度データＢ００が供給されている。レジスタ４３〜４５には、有効なデータは記憶されていない。
【０１７３】
データマルチプレクサ２１１には、倍精度演算モードを示すＭＯＤＥ信号が供給されている。このため、データマルチプレクサ２１１は、上位データａ０＿ｈ及び上位データｂ００＿ｈを乗算器２１２に出力する。また、データマルチプレクサ２１１は、下位データａ０＿ｌ及び上位データｂ００＿ｈを乗算器２１３に出力する。また、データマルチプレクサ２１１は、上位データａ０＿ｈ及び下位データｂ００＿ｌを乗算器２１４に出力する。また、データマルチプレクサ２１１は、下位データａ０＿ｌ及び下位データｂ００＿ｌを乗算器２１５に出力する。
【０１７４】
乗算器２１２では、データマルチプレクサ３１１には、倍精度演算モードを示すＭＯＤＥ信号が供給されている。このため、データマルチプレクサ３１１は、データａ’０＿１及びデータｂ’００＿１を乗算器３１２に出力し、データａ’０＿２及びデータｂ’００＿１を乗算器３１３に出力し、データａ’０＿１及びデータｂ’００＿２を乗算器３１４に出力し、データａ’０＿２及びデータｂ’００＿２を乗算器３１５に出力する。そして、各乗算器３１２〜３１５において乗算が行われ、その中間結果ｍ’１１，ｍ’１２，ｍ’２１，ｍ’２２，ｍ’３１，ｍ’３２，ｍ’４１，ｍ’４２を部分加算器３１６が加算し、中間結果ｍ１１及び中間結果ｍ１２を出力する。つまり、乗算器２１２では、ａ０＿ｈ×ｂ００＿ｈの演算が半精度データを用いて行われ、中間結果ｍ１１及び中間結果ｍ１２が出力される。
【０１７５】
同様に、乗算器３１３では、ａ０＿ｌ×ｂ００＿ｈの演算が半精度データを用いて行われ、中間結果ｍ２１及び中間結果ｍ２２が出力される。同様に、乗算器３１４では、ａ０＿ｈ×ｂ００＿ｌの演算が半精度データを用いて行われ、中間結果ｍ３１及び中間結果ｍ３２が出力される。同様に、乗算器３１５では、ａ０＿ｌ×ｂ００＿ｌの演算が半精度データを用いて行われ、中間結果ｍ４１及び中間結果ｍ４２が出力される。乗算器２１３〜２１５の動作も乗算器２１２の動作と同様であるので、説明を省略する。以降の処理は、演算部１０Ａと同じであるので、説明を省略する。
【０１７６】
ここで、シフト量演算回路２６０の第１演算モードでの動作を説明する。演算装置１Ａでは、式（２）に示される演算が行われるので、式（２）の右辺の各項を加算器５１において加算するために、各項の指数部が揃えられる必要がある。シフト量演算回路２６０は、各項のシフト量を演算する。以下、具体的に説明する。
【０１７７】
指数部抽出回路２６１には、倍精度演算モードを示すＭＯＤＥ信号が供給されている。このため、指数部抽出回路２６１は、演算部２１０Ａ〜２１０Ｄからの入力データＤＩＮ１，ＤＩＮ２のそれぞれと、入力データＤＩＮ０と、から指数部を抽出する。具体的には、指数部抽出回路２６１は、倍精度データＡ０〜Ａ３、倍精度データＢ００，Ｂ１０，Ｂ２０，Ｂ３０、及び倍精度データＣ０の指数部を抽出する。
【０１７８】
そして、指数部抽出回路２６１は、倍精度データＡ０の指数部と倍精度データＢ００の指数部との和を演算することで、Ａ０×Ｂ００の指数部を算出する。同様に、指数部抽出回路２６１は、倍精度データＡ１の指数部と倍精度データＢ１０の指数部との和を演算することで、Ａ１×Ｂ１０の指数部を算出する。同様に、指数部抽出回路２６１は、倍精度データＡ２の指数部と倍精度データＢ２０の指数部との和を演算することで、Ａ２×Ｂ２０の指数部を算出する。同様に、指数部抽出回路２６１は、倍精度データＡ３の指数部と倍精度データＢ３０の指数部との和を演算することで、Ａ３×Ｂ３０の指数部を算出する。そして、指数部抽出回路２６１は、Ａ０×Ｂ００の指数部、Ａ１×Ｂ１０の指数部、Ａ２×Ｂ２０の指数部、Ａ３×Ｂ３０の指数部、及び倍精度データＣ０の指数部を最大値演算回路２６２Ａに出力する。また、指数部抽出回路２６１は、Ａ０×Ｂ００の指数部、Ａ１×Ｂ１０の指数部、Ａ２×Ｂ２０の指数部、Ａ３×Ｂ３０の指数部をそれぞれ異なる減算回路２６３Ａに出力する。
【０１７９】
最大値演算回路２６２Ａは、Ａ０×Ｂ００の指数部、Ａ１×Ｂ１０の指数部、Ａ２×Ｂ２０の指数部、Ａ３×Ｂ３０の指数部、及び倍精度データＣ０の指数部から最大の指数部を、最大指数として算出（特定）する。そして、最大値演算回路２６２Ａは、各減算回路２６３Ａに最大指数を出力する。
【０１８０】
そして、各減算回路２６３Ａは、最大指数と各乗算結果の指数部との差を演算する。具体的には、Ａ０×Ｂ００の指数部が供給されている減算回路２６３Ａは、最大指数からＡ０×Ｂ００の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ａの整列部１７，１８に出力する。同様に、Ａ１×Ｂ１０の指数部が供給されている減算回路２６３Ａは、最大指数からＡ１×Ｂ１０の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ｂの整列部１７，１８に出力する。
【０１８１】
また、Ａ２×Ｂ２０の指数部が供給されている減算回路２６３Ａは、最大指数からＡ２×Ｂ２０の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ｃの整列部１７，１８に出力する。同様に、Ａ３×Ｂ３０の指数部が供給されている減算回路２６３Ａは、最大指数からＡ３×Ｂ３０の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ｄの整列部１７，１８に出力する。
【０１８２】
各整列部１７は、シフト量演算回路２６０から供給されたシフト量に基づいて、中間結果Ｐ１１の仮数部に対してシフト処理を行う。同様に、各整列部１８は、シフト量演算回路２６０から供給されたシフト量に基づいて、中間結果Ｐ１２の仮数部に対してシフト処理を行う。
【０１８３】
次に、図１７を用いて演算装置１Ａ〜１Ｄの第２演算モードでの動作を説明する。図１７は、図８の演算装置の第２演算モードでの動作を説明するための図である。ここでは、第２演算モードとして、単精度演算モードを用い、演算ユニットＭＡＵが式（７）に示される単精度の行列演算を行う場合を一例として説明する。演算装置１Ａ〜１Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、ここでは演算装置１Ａについて説明する。また、演算部２１０Ａ〜２１０Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、ここでは演算部２１０Ａについて説明する。
【０１８４】
演算装置１Ａの演算部２１０Ａは、ａ０×ｂ００＋ａ１×ｂ１０の演算と、ａ０×ｂ０１＋ａ１×ｂ１１の演算と、を行う。単精度データａ０は、単精度データａ０のビット列のうちの上半分のビット列であるデータａ’０＿ｈと、単精度データａ０のビット列のうちの下半分のビット列であるデータａ’０＿ｌと、を含む。単精度データａ１，ｂ００，ｂ１０，ｂ０１，ｂ１１についても同様である。データａ’０＿ｈ，ａ’０＿ｌ，ａ’１＿ｈ，ａ’１＿ｌ，ｂ’００＿ｈ，ｂ’００＿ｌ，ｂ’１０＿ｈ，ｂ’１０＿ｌ，ｂ’０１＿ｈ，ｂ’０１＿ｌ，ｂ’１１＿ｈ，ｂ’１１＿ｌは、半精度データと同じビット数を有する。
【０１８５】
演算部２１０Ａは、式（１７）に示されるように、単精度データａ０，ａ１及び単精度データｂ００，ｂ１０のそれぞれを半精度データのビット数を有する２つのデータに分解することによって、単精度データａ０及び単精度データｂ００の乗算と、単精度データａ１及び単精度データｂ１０の乗算と、を行う。
【数１７】
2018194905.tif 000019
【０１８６】
同様に、演算部２１０Ａは、式（１８）に示されるように、単精度データａ０，ａ１及び単精度データｂ０１，ｂ１１のそれぞれを半精度データのビット数を有する２つのデータに分解することによって、単精度データａ０及び単精度データｂ０１の乗算と、単精度データａ１及び単精度データｂ１１の乗算と、を行う。
【数１８】
2018194905.tif 000020
【０１８７】
以下、具体的に説明する。レジスタ４１の上位ビットには、単精度データａ０が記憶されており、レジスタ４１の下位ビットには単精度データａ１が記憶されている。レジスタ４１からデータマルチプレクサ２１１に入力データＤＩＮ１として単精度データａ０及び単精度データａ１が供給されている。レジスタ４２の上位ビットには、単精度データｂ００が記憶されており、レジスタ４２の下位ビットには単精度データｂ１０が記憶されている。レジスタ４２からデータマルチプレクサ２１１に入力データＤＩＮ２として単精度データｂ００及び単精度データｂ１０が供給されている。レジスタ４３の上位ビットには、単精度データｂ０１が記憶されており、レジスタ４３の下位ビットには単精度データｂ１１が記憶されている。レジスタ４３からデータマルチプレクサ２１１に入力データＤＩＮ３として単精度データｂ０１及び単精度データｂ１１が供給されている。レジスタ４４，４５には、有効なデータは記憶されていない。
【０１８８】
データマルチプレクサ２１１には、単精度演算モードを示すＭＯＤＥ信号が供給されている。このため、データマルチプレクサ２１１は、単精度データａ０及び単精度データｂ００を乗算器２１２に出力する。また、データマルチプレクサ２１１は、単精度データａ１及び単精度データｂ１０を乗算器２１３に出力する。また、データマルチプレクサ２１１は、単精度データａ０及び単精度データｂ０１を乗算器２１４に出力する。また、データマルチプレクサ２１１は、単精度データａ１及び単精度データｂ１１を乗算器２１５に出力する。
【０１８９】
乗算器２１２では、データマルチプレクサ３１１には、単精度演算モードを示すＭＯＤＥ信号が供給されている。このため、データマルチプレクサ３１１は、データａ’０＿ｈ及びデータｂ’００＿ｈを乗算器３１２に出力し、データａ’０＿ｌ及びデータｂ’００＿ｈを乗算器３１３に出力し、データａ’０＿ｈ及びデータｂ’００＿ｌを乗算器３１４に出力し、データａ’０＿ｌ及びデータｂ’００＿ｌを乗算器３１５に出力する。そして、各乗算器３１２〜３１５において乗算が行われ、その中間結果ｍ’１１，ｍ’１２，ｍ’２１，ｍ’２２，ｍ’３１，ｍ’３２，ｍ’４１，ｍ’４２を部分加算器３１６が加算し、中間結果ｍ１１及び中間結果ｍ１２を出力する。つまり、乗算器２１２では、ａ０×ｂ００の演算が半精度データを用いて行われ、中間結果ｍ１１及び中間結果ｍ１２が出力される。
【０１９０】
同様に、乗算器３１３では、ａ１×ｂ１０の演算が半精度データを用いて行われ、中間結果ｍ２１及び中間結果ｍ２２が出力される。同様に、乗算器３１４では、ａ０×ｂ０１の演算が半精度データを用いて行われ、中間結果ｍ３１及び中間結果ｍ３２が出力される。同様に、乗算器３１５では、ａ１×ｂ１１の演算が半精度データを用いて行われ、中間結果ｍ４１及び中間結果ｍ４２が出力される。乗算器２１３〜２１５の動作も乗算器２１２の動作と同様であるので、説明を省略する。以降の処理は、演算部１０Ａと同じであるので、説明を省略する。
【０１９１】
ここで、シフト量演算回路２６０の第２演算モードでの動作を説明する。演算装置１Ａでは、式（８）及び式（９）に示される演算が行われる。このため、式（８）の右辺の各項を加算器５２において加算するために、各項の指数部が揃えられる必要がある。同様に、式（９）の右辺の各項を加算器５３において加算するために、各項の指数部が揃えられる必要がある。シフト量演算回路２６０は、各項のシフト量を演算する。以下、具体的に説明する。
【０１９２】
指数部抽出回路２６１には、単精度演算モードを示すＭＯＤＥ信号が供給されている。このため、指数部抽出回路２６１は、演算部２１０Ａ〜２１０Ｄからの入力データＤＩＮ１〜ＤＩＮ３のそれぞれと、入力データＤＩＮ０と、から指数部を抽出する。具体的には、指数部抽出回路２６１は、単精度データａ０〜ａ７、単精度データｂ００，ｂ０１，ｂ１０，ｂ１１，ｂ２０，ｂ２１，ｂ３０，ｂ３１，ｂ４０，ｂ４１，ｂ５０，ｂ５１，ｂ６０，ｂ６１，ｂ７０，ｂ７１、及び単精度データｃ０，ｃ１の指数部を抽出する。
【０１９３】
そして、指数部抽出回路２６１は、単精度データａ０の指数部と単精度データｂ００の指数部との和を演算することで、ａ０×ｂ００の指数部を算出する。同様に、指数部抽出回路２６１は、ａ１×ｂ１０の指数部、ａ２×ｂ２０の指数部、ａ３×ｂ３０の指数部、ａ４×ｂ４０の指数部、ａ５×ｂ５０の指数部、ａ６×ｂ６０の指数部、及びａ７×ｂ７０の指数部を算出する。そして、指数部抽出回路２６１は、各乗算結果の指数部、及び単精度データｃ０の指数部を最大値演算回路２６２Ａに出力する。また、指数部抽出回路２６１は、各乗算結果の指数部を互いに異なる減算回路２６３Ａに出力する。
【０１９４】
同様に、指数部抽出回路２６１は、式（９）に示される右辺の各乗算結果の指数部を算出し、各乗算結果の指数部及び単精度データｃ１の指数部を最大値演算回路２６２Ｂに出力する。また、指数部抽出回路２６１は、各乗算結果の指数部を互いに異なる減算回路２６３Ｂに出力する。
【０１９５】
最大値演算回路２６２Ａは、ａ０×ｂ００の指数部、ａ１×ｂ１０の指数部、ａ２×ｂ２０の指数部、ａ３×ｂ３０の指数部、ａ４×ｂ４０の指数部、ａ５×ｂ５０の指数部、ａ６×ｂ６０の指数部、ａ７×ｂ７０の指数部、及び単精度データｃ０の指数部から最大の指数部を、最大指数として算出（特定）する。そして、最大値演算回路２６２Ａは、各減算回路２６３Ａに最大指数を出力する。
【０１９６】
そして、各減算回路２６３Ａは、最大指数と各乗算結果の指数部との差を演算する。具体的には、ａ０×ｂ００の指数部が供給されている減算回路２６３Ａは、最大指数からａ０×ｂ００の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ａの整列部２１，２２に出力する。同様に、ａ１×ｂ１０の指数部が供給されている減算回路２６３Ａは、最大指数からａ１×ｂ１０の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ａの整列部２３，２４に出力する。
【０１９７】
また、ａ２×ｂ２０の指数部が供給されている減算回路２６３Ａは、最大指数からａ２×ｂ２０の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ｂの整列部２１，２２に出力する。このように、各減算回路２６３Ａは、供給されている乗算の乗算結果（中間結果）をシフト処理する整列部に、算出したシフト量を出力する。最大値演算回路２６２Ｂ及び減算回路２６３Ｂの動作も同様であるので、説明を省略する。
【０１９８】
そして、各整列部は、シフト量演算回路２６０から供給されたシフト量に基づいて、中間結果の仮数部に対してシフト処理を行う。
【０１９９】
次に、図１８を用いて演算装置１Ａ〜１Ｄの第３演算モードでの動作を説明する。図１８は、図８の演算装置の第３演算モードでの動作を説明するための図である。ここでは、第３演算モードとして、半精度演算モードを用い、演算ユニットＭＡＵが式（１９）に示される単精度の行列演算を行う場合を一例として説明する。
【数１９】
2018194905.tif 000021
【０２００】
演算装置１Ａは、式（２０）〜式（２３）に示される行列演算を行う。
【数２０】
2018194905.tif 000022
【数２１】
2018194905.tif 000023
【数２２】
2018194905.tif 000024
【数２３】
2018194905.tif 000025
【０２０１】
演算装置１Ａ〜１Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、ここでは演算装置１Ａについて説明する。演算装置１Ａの演算部２１０Ａは、ａ’０×ｂ’００＋ａ’１×ｂ’１０＋ａ’２×ｂ’２０＋ａ’３×ｂ’３０の演算、ａ’０×ｂ’０１＋ａ’１×ｂ’１１＋ａ’２×ｂ’２１＋ａ’３×ｂ’３１の演算、ａ’０×ｂ’０２＋ａ’１×ｂ’１２＋ａ’２×ｂ’２２＋ａ’３×ｂ’３２の演算、及びａ’０×ｂ’０３＋ａ’１×ｂ’１３＋ａ’２×ｂ’２３＋ａ’３×ｂ’３３の演算を行う。演算装置１Ａの演算部２１０Ｂは、ａ’０×ｂ’４０＋ａ’１×ｂ’５０＋ａ’２×ｂ’６０＋ａ’３×ｂ’７０の演算、ａ’０×ｂ’４１＋ａ’１×ｂ’５１＋ａ’２×ｂ’６１＋ａ’３×ｂ’７１の演算、ａ’０×ｂ’４２＋ａ’１×ｂ’５２＋ａ’２×ｂ’６２＋ａ’３×ｂ’７２の演算、及びａ’０×ｂ’４３＋ａ’１×ｂ’５３＋ａ’２×ｂ’６３＋ａ’３×ｂ’７３の演算を行う。
【０２０２】
演算装置１Ａの演算部２１０Ｃは、ａ’０×ｂ’８０＋ａ’１×ｂ’９０＋ａ’２×ｂ’Ａ０＋ａ’３×ｂ’Ｂ０の演算、ａ’０×ｂ’８１＋ａ’１×ｂ’９１＋ａ’２×ｂ’Ａ１＋ａ’３×ｂ’Ｂ１の演算、ａ’０×ｂ’８２＋ａ’１×ｂ’９２＋ａ’２×ｂ’Ａ２＋ａ’３×ｂ’Ｂ２の演算、及びａ’０×ｂ’８３＋ａ’１×ｂ’９３＋ａ’２×ｂ’Ａ３＋ａ’３×ｂ’Ｂ３の演算を行う。演算装置１Ａの演算部２１０Ｄは、ａ’０×ｂ’Ｃ０＋ａ’１×ｂ’Ｄ０＋ａ’２×ｂ’Ｅ０＋ａ’３×ｂ’Ｆ０の演算、ａ’０×ｂ’Ｃ１＋ａ’１×ｂ’Ｄ１＋ａ’２×ｂ’Ｅ１＋ａ’３×ｂ’Ｆ１の演算、ａ’０×ｂ’Ｃ２＋ａ’１×ｂ’Ｄ２＋ａ’２×ｂ’Ｅ２＋ａ’３×ｂ’Ｆ２の演算、及びａ’０×ｂ’Ｃ３＋ａ’１×ｂ’Ｄ３＋ａ’２×ｂ’Ｅ３＋ａ’３×ｂ’Ｆ３の演算を行う。各演算部１０Ａ〜１０Ｄでは、演算対象のデータが異なるものの、動作は同じであるので、演算部１０Ａの動作を主に説明する。
【０２０３】
以下、具体的に説明する。レジスタ４１には、上位ビットから順に半精度データａ’０、半精度データａ’１、半精度データａ’２、及び半精度データａ’３が記憶されている。レジスタ４１からデータマルチプレクサ２１１に入力データＤＩＮ１として半精度データａ’０〜ａ’３が供給されている。レジスタ４２には、上位ビットから順に半精度データｂ’００、半精度データｂ’１０、半精度データｂ’２０、及び半精度データｂ’３０が記憶されている。レジスタ４２からデータマルチプレクサ２１１に入力データＤＩＮ２として半精度データｂ’００，ｂ’１０，ｂ’２０，ｂ’３０が供給されている。
【０２０４】
レジスタ４３には、上位ビットから順に半精度データｂ’０１、半精度データｂ’１１、半精度データｂ’２１、及び半精度データｂ’３１が記憶されている。レジスタ４３からデータマルチプレクサ２１１に入力データＤＩＮ３として半精度データｂ’０１，ｂ’１１，ｂ’２１，ｂ’３１が供給されている。レジスタ４４には、上位ビットから順に半精度データｂ’０２、半精度データｂ’１２、半精度データｂ’２２、及び半精度データｂ’３２が記憶されている。レジスタ４４からデータマルチプレクサ２１１に入力データＤＩＮ４として半精度データｂ’０２，ｂ’１２，ｂ’２２，ｂ’３２が供給されている。レジスタ４５には、上位ビットから順に半精度データｂ’０３、半精度データｂ’１３、半精度データｂ’２３、及び半精度データｂ’３３が記憶されている。レジスタ４５からデータマルチプレクサ２１１に入力データＤＩＮ５として半精度データｂ’０３，ｂ’１３，ｂ’２３，ｂ’３３が供給されている。
【０２０５】
データマルチプレクサ２１１には、半精度演算モードを示すＭＯＤＥ信号が供給されている。このため、データマルチプレクサ２１１は、半精度データａ’０，ａ’１、半精度データｂ’００，ｂ’１０、及び半精度データｂ’０１，ｂ’１１を乗算器２１２に出力する。また、データマルチプレクサ２１１は、半精度データａ’２，ａ’３、半精度データｂ’２０，ｂ’３０、及び半精度データｂ’２１，ｂ’３１を乗算器２１３に出力する。また、データマルチプレクサ２１１は、半精度データａ’０，ａ’１、半精度データｂ’０２，ｂ’１２、及び半精度データｂ’０３，ｂ’１３を乗算器２１４に出力する。また、データマルチプレクサ２１１は、半精度データａ’２，ａ’３、半精度データｂ’２２，ｂ’３２、及び半精度データｂ’２３，ｂ’３３を乗算器２１５に出力する。
【０２０６】
乗算器２１２では、データマルチプレクサ３１１には、半精度演算モードを示すＭＯＤＥ信号が供給されている。このため、データマルチプレクサ３１１は、半精度データａ’０及び半精度データｂ’００を乗算器３１２に出力し、半精度データａ’１及び半精度データｂ’１０を乗算器３１３に出力し、半精度データａ’０及び半精度データｂ’０１を乗算器３１４に出力し、半精度データａ’１及び半精度データｂ’１１を乗算器３１５に出力する。そして、各乗算器３１２〜３１５において乗算が行われ、その中間結果ｍ’１１，ｍ’１２，ｍ’２１，ｍ’２２，ｍ’３１，ｍ’３２，ｍ’４１，ｍ’４２が出力される。乗算器２１３〜２１５の動作も乗算器２１２の動作と同様であるので、説明を省略する。
【０２０７】
ここで、シフト量演算回路２６０の第３演算モードでの動作を説明する。演算部２１０Ａでは、式（２０）〜式（２３）に示される演算が行われる。このため、式（２０）の右辺の各項を加算器５４において加算するために、各項の指数部が揃えられる必要がある。同様に、式（２１）の右辺の各項を加算器５５において加算するために、各項の指数部が揃えられる必要がある。式（２２）の右辺の各項を加算器５６において加算するために、各項の指数部が揃えられる必要がある。式（２３）の右辺の各項を加算器５７において加算するために、各項の指数部が揃えられる必要がある。シフト量演算回路２６０は、各項のシフト量を演算する。以下、具体的に説明する。
【０２０８】
指数部抽出回路２６１には、半精度演算モードを示すＭＯＤＥ信号が供給されている。このため、指数部抽出回路２６１は、演算部２１０Ａ〜２１０Ｄからの入力データＤＩＮ１〜ＤＩＮ５のそれぞれと、入力データＤＩＮ０と、から指数部を抽出する。具体的には、指数部抽出回路２６１は、半精度データａ’０〜ａ’１５、半精度データｂ’００〜ｂ’０３，ｂ’１０〜ｂ’１３，・・・，ｂ’Ｆ０〜Ｆ３、及び半精度データｃ’０〜ｃ’３の指数部を抽出する。
【０２０９】
そして、指数部抽出回路２６１は、半精度データａ’０の指数部と半精度データｂ’００の指数部との和を演算することで、ａ’０×ｂ’００の指数部を算出する。同様に、指数部抽出回路２６１は、式（２０）に示される右辺の各乗算結果の指数部を算出する。そして、指数部抽出回路２６１は、各乗算結果の指数部、及び半精度データｃ’０の指数部を最大値演算回路２６２Ａに出力する。また、指数部抽出回路２６１は、各乗算結果の指数部を互いに異なる減算回路２６３Ａに出力する。
【０２１０】
また、指数部抽出回路２６１は、式（２１）に示される右辺の各乗算結果の指数部を算出し、各乗算結果の指数部及び半精度データｃ’１の指数部を最大値演算回路２６２Ｂに出力する。また、指数部抽出回路２６１は、各乗算結果の指数部を互いに異なる減算回路２６３Ｂに出力する。同様に、指数部抽出回路２６１は、式（２２）に示される右辺の各乗算結果の指数部を算出し、各乗算結果の指数部及び半精度データｃ’２の指数部を最大値演算回路２６２Ｃに出力する。また、指数部抽出回路２６１は、各乗算結果の指数部を互いに異なる減算回路２６３Ｃに出力する。指数部抽出回路２６１は、式（２３）に示される右辺の各乗算結果の指数部を算出し、各乗算結果の指数部及び半精度データｃ’３の指数部を最大値演算回路２６２Ｄに出力する。また、指数部抽出回路２６１は、各乗算結果の指数部を互いに異なる減算回路２６３Ｄに出力する。
【０２１１】
最大値演算回路２６２Ａは、各乗算結果の指数部、及び半精度データｃ’０の指数部から最大の指数部を、最大指数として算出（特定）する。そして、最大値演算回路２６２Ａは、各減算回路２６３Ａに最大指数を出力する。
【０２１２】
そして、各減算回路２６３Ａは、最大指数と各乗算結果の指数部との差を演算する。具体的には、ａ’０×ｂ’００の指数部が供給されている減算回路２６３Ａは、最大指数からａ’０×ｂ’００の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ａの乗算器２１２の整列部３２１，３２２に出力する。同様に、ａ’１×ｂ’１０の指数部が供給されている減算回路２６３Ａは、最大指数からａ’１×ｂ’１０の指数部を減算し、その減算結果をシフト量として算出する。そして、減算回路２６３Ａは、算出したシフト量を、演算部２１０Ａの乗算器２１２の整列部３２３，３２４に出力する。
【０２１３】
このように、各減算回路２６３Ａは、供給されている乗算の乗算結果（中間結果）をシフト処理する整列部に、算出したシフト量を出力する。最大値演算回路２６２Ｂ〜２６２Ｄ及び減算回路２６３Ｂ〜２６３Ｄの動作も同様であるので、説明を省略する。
【０２１４】
そして、整列部３２１〜３２８は、シフト量演算回路２６０から供給されたシフト量に基づいて、中間結果ｍ’１１，ｍ’１２，ｍ’２１，ｍ’２２，ｍ’３１，ｍ’３２，ｍ’４１，ｍ’４２の仮数部に対してシフト処理を行い、整列部３２１〜３２８の処理結果を丸め処理部３３１〜３３８に出力する。そして、丸め処理部３３１〜３３４は、整列部３２１〜３２４によってシフト処理が行われた中間結果ｍ’１１，ｍ’１２，ｍ’２１，ｍ’２２に対して丸め処理を行い、演算結果ｒ’１１，ｒ’１２，ｒ’２１，ｒ’２２を加算器５４に出力する。同様に、丸め処理部３３５〜３３８は、整列部３２５〜３２８によってシフト処理が行われた中間結果ｍ’３１，ｍ’３２，ｍ’４１，ｍ’４２に対して丸め処理を行い、演算結果ｒ’３１，ｒ’３２，ｒ’４１，ｒ’４２を加算器５５に出力する。乗算器２１３〜２１５においても、同様の演算が行われる。
【０２１５】
演算部２１０Ｂ、演算部２１０Ｃ、及び演算部２１０Ｄにおいても、同様の演算が行われる。各演算部２１０Ａ〜２１０Ｄの乗算器２１２，２１３は、演算結果ｒ’１１，ｒ’１２，ｒ’２１，ｒ’２２を加算器５４に出力するとともに、演算結果ｒ’３１，ｒ’３２，ｒ’４１，ｒ’４２を加算器５５に出力する。各演算部２１０Ａ〜２１０Ｄの乗算器２１４，２１５は、演算結果ｒ’１１，ｒ’１２，ｒ’２１，ｒ’２２を加算器５６に出力するとともに、演算結果ｒ’３１，ｒ’３２，ｒ’４１，ｒ’４２を加算器５７に出力する。また、レジスタ４０には、上位ビットから順に半精度データｃ’０、半精度データｃ’１、半精度データｃ’２、及び半精度データｃ’３が記憶されている。そして、レジスタ４０から加算器５４に半精度データｃ’０が供給され、加算器５５に半精度データｃ’１が供給され、加算器５６に半精度データｃ’２が供給され、加算器５７に半精度データｃ’３が供給されている。
【０２１６】
そして、加算器５４は、演算部２１０Ａ〜２１０Ｄの乗算器２１２，２１３の演算結果ｒ’１１，ｒ’１２，ｒ’２１，ｒ’２２、及び半精度データｃ’０の加算を行い、加算器５４の加算結果を演算結果ｄ’０として出力する。また、加算器５５は、演算部２１０Ａ〜２１０Ｄの乗算器２１２，２１３の演算結果ｒ’３１，ｒ’３２，ｒ’４１，ｒ’４２、及び半精度データｃ’１の加算を行い、加算器５５の加算結果を演算結果ｄ’１として出力する。同様に、加算器５６は、演算部２１０Ａ〜２１０Ｄの乗算器２１４，２１５の演算結果ｒ’１１，ｒ’１２，ｒ’２１，ｒ’２２、及び半精度データｃ’２の加算を行い、加算器５６の加算結果を演算結果ｄ’２として出力する。また、加算器５７は、演算部２１０Ａ〜２１０Ｄの乗算器２１４，２１５の演算結果ｒ’３１，ｒ’３２，ｒ’４１，ｒ’４２、及び半精度データｃ’３の加算を行い、加算器５７の加算結果を演算結果ｄ’３として出力する。
【０２１７】
そして、演算結果ｄ’０〜ｄ’３が組み合わされて演算結果（ｄ’０，ｄ’１，ｄ’２，ｄ’３）が生成され、マルチプレクサ２５９に供給される。このとき、部分加算器３１６、部分加算器１６、整列部１７，１８、丸め処理部１９，２０、整列部２１〜２８、丸め処理部３１〜３８、及び加算器５１〜５３も演算を行っており、演算結果Ｄ０及び演算結果（ｄ０，ｄ１）がマルチプレクサ２５９に出力されている。マルチプレクサ２５９には、半精度演算モードを示すＭＯＤＥ信号が供給されているので、マルチプレクサ２５９は、演算結果（ｄ’０，ｄ’１，ｄ’２，ｄ’３）を出力する。このようにして、４つの半精度の行列演算が行われる。
【０２１８】
第２実施形態に係る演算装置１Ａ〜１Ｄ、及びそれらを備える演算システムＳにおいても、上述した第１実施形態に係る演算システムＳ、及び演算装置１Ａ〜１Ｄと同様の効果が奏される。
【０２１９】
第２実施形態に係る演算装置１Ａ〜１Ｄでは、加算器５１によって、第１ビット数を有するデータでの１つの行列演算結果が得られ、加算器５２及び加算器５３によって、第２ビット数を有するデータでの２つの行列演算結果が得られ、さらに加算器５４〜５７によって、第３ビット数を有するデータでの４つの行列演算結果が得られる。そして、マルチプレクサ２５９によって、ＭＯＤＥ信号が第１演算モードを示す場合には、第１ビット数を有するデータでの１つの行列演算結果が出力され、ＭＯＤＥ信号が第２演算モードを示す場合には、第２ビット数を有するデータでの２つの行列演算結果が出力され、ＭＯＤＥ信号が第３演算モードを示す場合には、第３ビット数を有するデータでの４つの行列演算結果が出力される。このように、演算装置１Ａ〜１Ｄでは、３つの演算モードに応じた行列演算を行うことが可能となる。
【０２２０】
半精度演算モードの１演算に用いられる演算器の回路規模は、倍精度演算モードの１演算に用いられる演算器の１６分の１以下である。しかし、上述の比較例の演算装置と同様に、倍精度演算モードの１演算を半精度演算モードの４演算に切り替えると、倍精度演算モードの１演算を行う回路規模あたり、半精度演算モードでの演算が４つしか行えない。このため、倍精度演算モードの１演算を半精度演算モードの４演算に切り替えると、倍精度演算モードの１演算に用いられるトランジスタ等の回路素子の４分の１程度の回路素子しか使用されない。これに対し、上記構成の演算装置１Ａ〜１Ｄによれば、半精度演算モード及び単精度演算モードであっても、演算性能を２〜４倍に向上させることができ、電力効率も改善することができる。
【０２２１】
さらに、演算システムＳでは、演算ユニットＭＡＵは、４つの演算装置１Ａ〜１Ｄを備えることにより、式（１）に示されるような倍精度データの行列演算（４×４の行列ベクトル積）を行うことができる。演算ユニットＭＡＵは、単精度演算モードでは式（７）に示されるような８×８の行列ベクトル積、半精度演算モードでは式（１９）に示されるような１６×１６の行列ベクトル積を行うことが可能となる。この構成によれば、倍精度演算モードでは、それぞれが５２ビットの仮数の乗算を行う１６個の並列乗算器（１サイクルで１乗算を行う回路）を有する回路に相当する演算性能を実現することができる。単精度演算モードでは、それぞれが２３ビットの仮数の乗算を行う６４個の並列乗算器を有する回路に相当する演算性能を実現することができる。半精度演算モードでは、それぞれが１０ビットの仮数の乗算を行う２５６個の並列乗算器を有する回路に相当する演算性能を実現することができる。
【０２２２】
第１演算モードでは、加算器５１が演算部２１０Ａ〜２１０Ｄの中間結果Ｐ１１，Ｐ１２を加算するためには、それぞれの指数部を揃える必要がある。第２演算モードでは、加算器５２が演算部２１０Ａ〜２１０Ｄの中間結果ｍ１１，ｍ１２，ｍ２１，ｍ２２を加算するためには、それぞれの指数部を揃える必要があり、加算器５３が演算部２１０Ａ〜２１０Ｄの中間結果ｍ３１，ｍ３２，ｍ４１，ｍ４２を加算するためには、それぞれの指数部を揃える必要がある。同様に、第３演算モードでは、加算器５４〜５７が演算部２１０Ａ〜２１０Ｄの乗算器２１２〜２１５の中間結果ｍ’１１，ｍ’１２，ｍ’２１，ｍ’２２，ｍ’３１，ｍ’３２，ｍ’４１，ｍ’４２を加算するためには、加算対象となるデータの指数部を揃える必要がある。シフト量演算回路２６０によって、加算対象となるデータの最大指数と各指数部との差分をシフト量として演算することによって、加算対象となるデータの指数部を揃えることが可能となる。
【０２２３】
最大値演算回路２６２では、複数の比較対象のデータがＭＳＢから順に比較されるので、比較するビット数を減らすことができ、最大指数の演算を高速化することが可能となる。
【０２２４】
以上、本発明の実施形態について説明したが、本発明は上記実施形態に限られない。
【０２２５】
例えば、演算装置１Ａ〜１Ｄは、データフローグラフをマッピングできる再構成可能な演算器として利用されてもよい。
【０２２６】
演算装置１Ａ〜１Ｄは、レジスタ４０〜４５を備えなくてもよい。演算装置１Ａ〜１Ｄの外部からデータマルチプレクサ１１に入力データＤＩＮ０〜ＤＩＮ３が直接供給されてもよく、演算装置１Ａ〜１Ｄの外部からデータマルチプレクサ２１１に入力データＤＩＮ０〜ＤＩＮ５が直接供給されてもよい。
【０２２７】
また、演算装置１Ａ〜１Ｄの演算モードとして、倍精度演算モード、単精度演算モード、及び半精度演算モードが挙げられているが、これらに限られない。第１演算モードの演算で用いられるデータの第１ビット数が、第２演算モードの演算で用いられるデータの第２ビット数の２倍であればよい。また、第３演算モードの演算で用いられるデータの第３ビット数が、第２演算モードの演算で用いられるデータの第２ビット数の半分であればよい。例えば、４倍精度演算モード、及び１／４精度演算モード等が採用されてもよい。例えば、第１演算モードとして４倍精度演算モードが採用され、第２演算モードとして倍精度演算モードが採用され、第３演算モードとして単精度演算モードが採用され得る。また、第１演算モードとして単精度演算モードが採用され、第２演算モードとして半精度演算モードが採用され、第３演算モードとして１／４精度演算モードが採用され得る。採用される演算モードの精度を低下させることにより、演算装置１Ａ〜１Ｄの演算性能のさらなる向上が可能となる。
【０２２８】
さらに、演算装置１Ａ〜１Ｄにおいて採用される演算モードは異なっていてもよい。例えば、演算装置１Ａ〜１Ｃは、単精度演算モードと半精度演算モードを採用し、演算装置１Ｄは、倍精度演算モードと単精度演算モードを採用してもよい。この場合、演算ユニットＭＡＵとしての実効的な演算精度を、演算装置１Ａ〜１Ｃの演算精度よりも向上させることができる。また、アプリケーションで必要な演算精度を維持しつつ、高い演算性能を実現できる。
【０２２９】
さらに、演算装置１Ａ〜１Ｄは、ＭＯＤＥ信号に応じて、演算装置１Ａ〜１Ｄの演算モードを第１演算モード及び第３演算モードのいずれかに切り替え可能であってもよい。例えば、演算装置１Ａ〜１Ｄの演算モードとして、倍精度演算モード及び半精度モードが採用されてもよい。この場合、第２演算モード用の回路（整列部２１〜２８、丸め処理部３１〜３８、加算器５２，５３）を省略することができる。これにより、回路規模を小さくすることができ、性能向上及び省電力化が可能となる。さらに、この構成において、演算装置１Ａ〜１Ｄにおいて採用される演算モードは異なっていてもよい。この場合、広いアプリケーションレンジで、高い性能と省電力性とを両立させることができる。
【０２３０】
上記実施形態では、演算装置１Ａ〜１Ｄのそれぞれは、４つの演算部を備えているが、演算部の数は、演算目的に応じて適宜変更され得る。このため、演算装置１Ａ〜１Ｄのそれぞれは、少なくとも１つの演算部を備えていればよく、任意の複数個の演算部を備えてもよい。演算装置１Ａ〜１Ｄのそれぞれは、演算部とは別に１又は複数の倍精度乗算器をさらに備えてもよい。
【０２３１】
第１実施形態の演算装置１Ａ〜１Ｄは、シフト量演算回路２６０を備えていてもよい。
【０２３２】
乗算器３１２〜３１５は、乗算器２１２〜２１５の構成をさらに備えていてもよい。この場合、演算装置１Ａ〜１Ｄは、第３ビット数の半分の第４ビット数のデータを用いた第４演算モードをさらに行うことが可能となる。さらに、各乗算器に乗算器２１２〜２１５の構成が繰り返し適用されてもよい。これにより、所望の精度での演算が可能となる。
【０２３３】
上記実施形態及び各変形例において、各演算部１０Ａ〜１０Ｄは、レジスタ４４をさらに備えてもよい。レジスタ４４は、演算対象となる第１ビット数のビット列である入力データＤＩＮ４を記憶保持する回路である。入力データＤＩＮ４は、上位データｄｉｎ４＿ｈと、下位データｄｉｎ４＿ｌと、を含む。入力データＤＩＮ４は、演算装置１Ａ〜１Ｄの外部の装置（本実施形態では、要素プロセッサ）からレジスタ４４にセットされる。上位データｄｉｎ４＿ｈ、及び下位データｄｉｎ４＿ｌは、第２ビット数のビット列である。レジスタ４４は、保持している入力データＤＩＮ４をデータマルチプレクサ１１に出力する。この場合、データマルチプレクサ１１に４つの第１ビット数のデータが供給される。データマルチプレクサ１１は、ＭＯＤＥ信号が第２演算モードを示す場合には、上位データｄｉｎ１＿ｈを出力データｄｏｕｔ１として出力し、下位データｄｉｎ１＿ｌを出力データｄｏｕｔ３として出力する。また、データマルチプレクサ１１は、ＭＯＤＥ信号が第２演算モードを示す場合には、上位データｄｉｎ２＿ｈを出力データｄｏｕｔ２として出力し、下位データｄｉｎ２＿ｌを出力データｄｏｕｔ４として出力する。また、データマルチプレクサ１１は、ＭＯＤＥ信号が第２演算モードを示す場合には、上位データｄｉｎ３＿ｈを出力データｄｏｕｔ５として出力し、下位データｄｉｎ３＿ｌを出力データｄｏｕｔ７として出力する。また、データマルチプレクサ１１は、ＭＯＤＥ信号が第２演算モードを示す場合には、上位データｄｉｎ４＿ｈを出力データｄｏｕｔ６として出力し、下位データｄｉｎ４＿ｌを出力データｄｏｕｔ８として出力する。この構成によれば、演算部１０Ａ〜１０Ｄのそれぞれは、第２ビット数のビット列の乗算を行う４つの乗算器として機能する。このため、演算装置１Ａ〜１Ｄは行列演算以外の演算に用いられ得る。演算部２１０Ａ〜２１０Ｄについても同様に構成され得る。
【符号の説明】
【０２３４】
１Ａ〜１Ｄ…演算装置、１０Ａ〜１０Ｄ，２１０Ａ〜２１０Ｄ…演算部、１１，２１１，３１１…データマルチプレクサ（マルチプレクサ）、１２，２１２，３１２…乗算器（第１乗算器）、１３，２１３，３１３…乗算器（第２乗算器）、１４，２１４，３１４…乗算器（第３乗算器）、１５，２１５，３１５…乗算器（第４乗算器）、１６，３１６…部分加算器、５０，２５０…加算部、５１…加算器（第３加算器）、５２…加算器（第１加算器）、５３…加算器（第２加算器）、５９，２５９…マルチプレクサ（セレクタ）。
【図１】
2018194905.tif 000026
【図２】
2018194905.tif 000027
【図３】
2018194905.tif 000028
【図４】
2018194905.tif 000029
【図５】
2018194905.tif 000030
【図６】
2018194905.tif 000031
【図７】
2018194905.tif 000032
【図８】
2018194905.tif 000033
【図９】
2018194905.tif 000034
【図１０】
2018194905.tif 000035
【図１１】
2018194905.tif 000036
【図１２】
2018194905.tif 000037
【図１３】
2018194905.tif 000038
【図１４】
2018194905.tif 000039
【図１５】
2018194905.tif 000040
【図１６】
2018194905.tif 000041
【図１７】
2018194905.tif 000042
【図１８】
2018194905.tif 000043