以下、図面を参照して実施形態を説明する。
(第1の実施形態)
(構成)
  図1は、本実施形態に係わるデータ処理装置のブロック図である。データ処理装置1は、1つあるいは2以上の半導体装置からなるプロセッサであり、入力されたデータに対して所定の演算処理を実行して、演算結果を出力する。
  データ処理装置1は、浮動小数点演算装置2と、主記憶装置3と、入出力装置4と、相互接続網5とで構成されている。浮動小数点演算装置2、主記憶装置3及び入出力装置4は、相互接続網5を介して互いにデータのやりとりが出来る。
  浮動小数点演算装置2は、機械区間演算(以下、区間演算という)とSIMD演算とを切り替えて実行可能である。ここでは、2つのベクトルの内積の演算結果と演算精度情報とが同時に取得される区間演算を実行可能な浮動小数点演算装置について説明する。
  浮動小数点演算装置2は、入力されたデータに対して浮動小数点演算を行う回路である。
  主記憶装置3は、入力データ及び出力データを一時的に記憶する。
  入出力装置4は、図示しない外部装置からのデータを入力し、その外部装置へデータを出力するためのインターフェース回路である。
  入出力装置4を介して入力されたデータは、主記憶装置3に記憶される。浮動小数点演算装置2は、入力されたデータに対して所定の演算を実行して、演算結果を主記憶装置3に記憶する。演算結果データは、入出力装置4を介して外部装置へ出力される。
  図2は、浮動小数点演算装置2の構成を示すブロック図である。浮動小数点演算装置2は、2つの演算器11,12と、制御器13と、インターフェース14と、4つの入力レジスタ15〜18と、2つの出力レジスタ19,20と、2つのマルチプレクサ(図中、MUXで示す)21,22とを含む。
  インターフェース14は、相互接続網5を介して入力データを入力して、入力レジスタ15〜18へ出力する。入力レジスタ15、16には、第1の入力データが入力される。入力レジスタ17、18には、第2の入力データが入力される。インターフェース14は、出力レジスタ19と20からの出力データを入力して、相互接続網5へ出力する。
  制御器13は、インターフェース14を介して入力されたコマンドに応じて、2つの演算器11,12と、2つのマルチプレクサ21,22へ制御信号を出力する。制御器13は、入力レジスタ15〜18からの入力データに対して所定の演算を実行するように、浮動小数点演算装置2内の各回路を制御する。
  マルチプレクサ21は、入力レジスタ15と17からデータを入力し、制御信号に基づいて選択されたデータを、演算器12へ出力する。
  マルチプレクサ22は、入力レジスタ16と18からデータを入力し、制御信号に基づいて選択されたデータを、演算器12へ出力する。
  演算器11は、入力レジスタ15、16、演算器12及び制御器13からデータを入力し、演算結果を出力レジスタ19と演算器12に出力する。演算器12は、マルチプレクサ21、22、演算器11及び制御器13からデータを入力し、演算結果を出力レジスタ20と演算器11に出力する。
  特に、本実施形態の浮動小数点演算装置2では、演算器11の演算結果が演算器12へ入力され、演算器12の演算結果が演算器11へ入力される。
  以下、入力レジスタ15、16、17、18に格納される入力データを、それぞれ入力A0,B0,A1,B1とし、出力レジスタ19と20に格納される出力データを、それぞれ出力S0,S1という。
  浮動小数点演算装置2は、区間演算モードとSIMD演算モードを有している。演算モードは、入出力装置4を介して外部から指定されたり、実行する演算プログラムにおいて指定される。
  区間演算モードの際には、入力レジスタ15に入力A0が、入力レジスタ16に入力B0が、入力される。入力データは、マルチプレクサ21と22を介して演算器11、12に入力される。すなわち、演算器11、12では、同一入力データの演算が行われる。演算器11は、中心値である出力S0を出力レジスタ19へ出力し、演算器12は、誤差半径である出力S1を出力レジスタ20へ出力する。
  なお、区間演算モードのとき、マルチプレクサ21と22を用いず、入力レジスタ17に入力レジスタ15と同一の入力A0を、入力レジスタ18に入力レジスタ18と同一の入力B0を、入力するようにしても良い。
  SIMD演算モードの際には、入力レジスタ15と16にそれぞれ入力A0および入力B0が入力され、入力レジスタ17と18にそれぞれ入力A1と入力B1が入力される。すなわち、入力A0と入力B0が演算器11に入力され、入力A1と入力B1が演算器12に入力され、演算器11、12は所定の演算を実行する。演算器11は入力A0、B0の演算結果である出力S0を出力レジスタ19に出力し、演算器12は入力A1、B1の演算結果である出力S1を出力レジスタ20に出力する。
  なお、2つの演算器11と12は、同じ演算を実行してもよいし、互いに異なる演算を実行するようにしてもよい。
  図3は、演算器11、12の回路図である。各演算器11,12は、乗算器(図中、×で示す)31と、マルチプレクサ(図中、MUXで示す)32と、加減算器(図中、+で示す)33と、1/2器34と、マルチプレクサ(図中、MUXで示す)35と、レジスタ36により構成される。
  乗算器31の入力端には、2つの入力データが入力され、乗算結果はマルチプレクサ32の1つの入力端に入力される。また、マルチプレクサ32の他の入力端には、他の演算器の出力データが入力される。
  具体的には、演算器11のマルチプレクサ32には、演算器12のレジスタ36のレジスタ値である出力S1が入力される。演算器12のマルチプレクサ32には、演算器11のレジスタ36のレジスタ値である出力S0も入力される。
  加減算器33の入力端には、マルチプレクサ32の出力及びレジスタ36の出力が入力される。1/2器34の入力端には、加減算器33の出力が入力される。マルチプレクサ35の入力端には、加減算器33の出力及び1/2器34の出力が入力される。レジスタ36の入力端には、マルチプレクサ35の出力が入力される。
  乗算器31と加減算器33は、少なくとも2種の丸めモード(上向き、下向き)に応じた演算機能を備える。丸めモードの指定は、乗算器31と加減算器33への制御信号(点線で示す)により行われる。
  よって、演算器11は、設定された第1の丸めモードで、第1の入力データに対し第1の演算処理を実行する第1の演算器を構成し、演算器12は、設定された第2の丸めモードで、第2の入力データに対し第2の演算処理を実行する第2の演算器を構成する。
  区間演算モードのときは、演算器11は上向きの丸めモードで処理を行い、演算器12は、下向きの丸めモードで処理を行う。
  SIMD演算モードのときは、演算器11と演算器12は共に、上向きの丸めモード又は下向きの丸めモードのいずれかの同じ処理を行う。
  また、マルチプレクサ32、35の入力の選択も、制御信号(点線で示す)により行われる。レジスタ36の初期化も制御信号(点線で示す)により行われる。
  よって、演算器11の加減算器33と1/2器34は、加減算器33の演算結果に演算器12の演算結果を加算して得られた値を1/2にした第1の出力と、演算器11の加減算器33の演算結果と、を選択的に出力可能な第1の出力回路を構成する。演算器12の加減算器33と1/2器34は、演算器11の加減算器33の演算結果から演算器12の加減算器33の演算結果を減算して得られた値を1/2にした第2の出力と、演算器12の加減算器33の演算結果と、を選択的に出力可能な第2の出力回路を構成する。
  そして、演算器11は、演算器である乗算器31の演算結果を入力して累積加算する加減算器33と、加減算器33により累積加算して得られた加算値を格納するレジスタ36と、乗算器31の演算結果と演算器12のレジスタ36のレジスタ値とを選択的に切り替えて、加減算器33へ入力する選択回路としてのマルチプレクサ32を有する。
  演算器12は、演算器である乗算器31の演算結果を入力して累積加算する加減算器33と、加減算器33により累積加算して得られた加算値を格納するレジスタ36と、乗算器31の演算結果と演算器11のレジスタ36のレジスタ値とを選択的に切り替えて、加減算器33へ入力する選択回路としてのマルチプレクサ32を有する。
  さらに、演算器11の第1の出力回路は、1/2回路である1/2器34の出力と、加減算器33の演算結果とを選択的に切り替えて、レジスタ36へ出力する選択回路であるマルチプレクサ35を有する。
  演算器12の第2の出力回路は、1/2回路である1/2器34の出力と、加減算器33の演算結果とを選択的に切り替えて、レジスタ36へ出力する選択回路であるマルチプレクサ35を有する。
(動作)
  データ処理装置1は、区間演算とSIMD演算の両方が実行可能である。区間演算モードが設定されると区間演算が実行され、SIMD演算モードが設定されるとSIMD演算が実行される。
  次に、区間演算モード時とSIMD演算モード時の動作を説明する。
a.区間演算に基づく内積の演算
  はじめに、区間演算モード時の浮動小数点演算装置2の動作を説明する。ここでは、2つのベクトルX,Yの内積演算を例として、区間演算を説明する。
a1)データ処理装置1が区間演算モードに設定されると、浮動小数点演算装置2では、一方の演算器の乗算器31と加減算器33は上向きの丸めモードに、他方の演算器の乗算器31と加減算器33は下向きの丸めモードに設定される。ここでは、演算器11の乗算器31と加減算器33が上向きの丸めモードに設定され、演算器12の乗算器31と加減算器33が下向きの丸めモードに設定されるとする。
a2)制御器13は、演算器11、12において、加減算器33の入力として乗算器31の出力が選択されるようにマルチプレクサ32を制御する。
a3)制御器13は、演算器11、12において、レジスタ36の入力として加減算器33の出力が選択されるようにマルチプレクサ35を制御する。
a4)制御器13は、演算器11、12のレジスタ36を初期化する。
a5)次に、2つのベクトルX,Yの各要素について、以下の処理が実行される。
a5-1)まず、入力レジスタ15に入力A0として、ベクトルXの要素が入力される。入力レジスタ16に入力B0として、ベクトルYの要素が入力される。
a5-2)演算器11、12の乗算器31において、入力A0、B0の乗算が実行される。
a5-3)演算器11、12の加減算器33において、乗算器31の乗算結果とレジスタ36のレジスタ値の加算が実行される。
a5-4)加減算器33の加減算結果が、レジスタ36に格納される。
  以上のa5-1〜a5-4の処理が2つのベクトルX,Yの全要素について実行される。演算器11は、ベクトルX,Yの上向きの丸め処理がされた内積値を出力し、演算器12は、ベクトルX,Yの下向きの丸め処理がされた内積値を出力する。
  すなわち、上述した式(8)により示されるベクトルXとベクトルYの内積値が出力される。演算器11のレジスタ36のレジスタ値は、2つのベクトルX,Yの内積についての区間演算の上限値である。演算器12のレジスタ36のレジスタ値は、2つのベクトルX,Yの内積についての区間演算の下限値である。
a6)2つのベクトルX,Yの全要素について実行された後、制御器13は、演算器11、12において、加減算器33の入力として他方の演算器の演算結果が選択されるように、マルチプレクサ32を制御する。加減算器33への入力は、演算器11の場合、演算器12の出力であり、演算器12の場合、演算器11の出力である。
a7)さらに、制御器13は、演算器11、12において、レジスタ36の入力として1/2器34の出力が選択されるように、マルチプレクサ35を制御する。
a8)演算器11の加減算器33は、レジスタ36のレジスタ値と、演算器12の出力値とを加算する。
a9)演算器12の加減算器33は、演算器11の出力値から、レジスタ36のレジスタ値を減算する。
a10)演算器11の加減算器33は、区間演算の上限値と下限値の和を1/2器34に出力する。演算器11のレジスタ36には、1/2器34の出力である区間演算の中心値が格納される。
a11)演算器12の加減算器33は、区間演算の上限値と下限値の差を1/2器34に出力する。演算器12のレジスタ36には、区間演算の演算精度情報の一つで1/2器34の出力である区間演算の半径が格納される。
  以上のように、浮動小数点演算装置2は、区間演算モードでは2つの演算器を用いて、区間演算の演算結果と演算精度情報とを出力する。
b.SIMD演算に基づく内積の演算
  次に、SIMD演算モード時の浮動小数点演算装置2の動作を説明する。ここでは、ベクトルX,Yの内積演算を2つ実行するSIMD演算を説明する。
b1)データ処理装置1がSIMD演算モードに設定されると、制御器13は、演算器11、12の乗算器31と加減算器33を同一丸めモードに設定する。すなわち、制御器13は、演算器11と12の両方を、上向き又は下向きの同じモードに設定する。ここでは、丸めモードが上向きに設定されるとする。
b2)制御器13は、演算器11、12において、加減算器33の入力として乗算器31の出力が選択されるように、マルチプレクサ32を制御する。
b3)制御器13は、演算器11、12において、レジスタ36の入力として加減算器33の出力が選択されるように、マルチプレクサ35を制御する。
b4)そして、制御器13は、両演算器11と12のレジスタ36を初期化する。
b5)次に、ベクトルX0とベクトルY0の各要素及びベクトルX1とベクトルY1の各要素について、以下の処理が実行される。
b5-1)まず、制御器13が、インターフェース14を制御して、ベクトルX0の要素をレジスタ15に入力し、ベクトルY0の要素をレジスタ16に入力し、ベクトルX1の要素をレジスタ17に入力し、ベクトルY1の要素をレジスタ18に入力する。
b5-2)演算器11の乗算器31において入力A0、B0の乗算が実行され、演算器12の乗算器31において入力A1、B1の乗算が実行される。
b5-3)演算器11、12の加減算器33において、乗算器31の乗算結果とレジスタ36のレジスタ値の加算が実行される。
b5-4)演算器11、12の加減算器33の加算結果が、それぞれのレジスタ36に格納される。
  以上のb-1〜b-5の処理が、ベクトルX0とベクトルY0の各要素及びベクトルX1とベクトルY1の各要素について実行されることにより、演算器11、12のそれぞれにおいてSIMD演算が実行される。
  以上のSIMD演算は、演算器11、12を用いて2つの内積を求めているが、2つの演算器11、12を用いて1つの内積を倍速で実行するようにしてもよい。
  その場合のSIMD演算モード時の浮動小数点演算装置2の動作を説明する。
c1)データ処理装置1がSIMD演算モードに設定されると、制御器13が、2つの演算器11と12の両方の乗算器31と加減算器33の丸めモードを同一丸めモードに設定してから、両演算器11と12のレジスタ36を初期化するまでの処理は、上述したSIMD演算の動作b1〜b4と同様である。
c2)次に実行されるベクトルXとベクトルYの各要素について処理を行う。この処理は、上述したSIMD演算の動作と異なっている。
c2-1)制御器13は、インターフェース14を制御して、ベクトルXとベクトルYのそれぞれの要素を順番に、入力レジスタに交互に入力させる。インターフェース14は、ベクトルXの要素を入力A0に入力し、ベクトルYの要素を入力B0に入力し、次のベクトルXの要素をA1入力し、次のベクトルYの要素を入力B1に入力する処理を、繰り返す。
  例えば、制御器13は、ベクトルXの奇数番目の要素を入力レジスタ15に入力し、ベクトルYの奇数番目の要素を入力レジスタ16に入力し、ベクトルXの偶数番目の要素を入力レジスタ17に入力し、ベクトルYの偶数番目の要素を入力レジスタ18に入力する。
  すなわち、演算器11には、ベクトルXとベクトルYの一対のベクトルデータの半分が入力され、演算器12には、ベクトルXとベクトルYの一対のベクトルデータの残り半分が入力される。
c2-2)演算器11において、入力A0とB0の演算が実行され、演算器12において、入力A1とB1の演算が実行される。
  以上の処理が、演算器11では、ベクトルXとベクトルYの奇数番目の処理対象要素の全てに対して実行され、演算器12では、ベクトルXとベクトルYの偶数番目の処理対象要素の全てに対して実行される。
  そして、ベクトルX、Yの全て要素に対して実行されると、加減算器33への入力が他の演算器の出力となるように、マルチプレクサ32が制御器13により制御される。
c3)演算器11の加減算器33において、演算器11のレジスタ36のレジスタ値と、演算器12のレジスタ36のレジスタ値が加算され、その加算値が演算器11のレジスタ36に格納される。
  以上のように、ベクトルXとベクトルYに対するSIMD演算が2つの演算器11、12により実行されることにより倍速で実行される。
  本実施形態によれば、2つの演算器を用いて、SIMD演算モードと区間演算モードとが切り替え可能で、2つの演算モードが実行可能な浮動小数点演算装置を実現することができる。すなわち、本実施形態の浮動小数点演算装置は、演算精度を要求されない演算モードのときは、SIMD演算が実行可能である。一方、演算精度が要求される演算モードのときは、2つのベクトルの内積の演算結果と演算精度が取得できる区間演算を実行可能である。
(第2の実施形態)
  第1の実施形態の浮動小数点演算装置は、区間演算又はSIMD演算に基づく内積演算を実行可能であるが、第2の実施形態の浮動小数点演算装置は、区間演算又はSIMD演算に基づく行列積演算を実行可能である。
(構成)
  図4は、第2の実施形態の浮動小数点演算装置のブロック図である。浮動小数点演算装置2Aは、演算アレイ41と、インターフェース42と、制御器43と、4つの入力レジスタ44〜47と、2つの出力レジスタ48,49と、2つのマルチプレクサ50,51とで構成される。本実施形態の浮動小数点演算装置2Aを有するデータ処理装置は、図1と同様の構成である。
  なお、ここでは、4×4の行列の行列積の演算を実行する例を説明する。
  演算アレイ41は、アレイ状に接続された複数の演算ノード52から構成される。図4に示す演算アレイ41は、演算ノード52が左右に接続される部分は、左側の演算ノード52の出力が右側の演算ノード52の入力に、演算ノード52が上下に接続される部分は、上側の演算ノード52の出力が下側の演算ノード52の入力に、それぞれ接続されるように、構成されている。
  インターフェース42は、相互接続網5を介して入力されたデータを入力レジスタ44〜47へ出力する。また、インターフェース42は、出力レジスタ48と49からの出力データを相互接続網5へ出力する。
  制御器43は、インターフェース42を介して入力されたコマンドに応じて、演算アレイ41と、マルチプレクサ50,51へ制御信号を出力する。また、制御器43は、演算アレイ41の各演算ノード52の各演算器61,62(図5)へも制御信号を出力する。
  マルチプレクサ50は、入力レジスタ45と46からの入力データを入力し、制御信号に基づいて選択されたデータを演算アレイ41へ出力する。
  マルチプレクサ51は、入力レジスタ44と47からの入力データを入力し、制御信号に基づいて選択されたデータを演算アレイ41へ出力する。
  図5は、演算アレイ41の各演算ノード52の構成を示すブロック図である。演算ノード52は、2つの演算器61、62と、2つの入力制御器63、64と、2つの出力制御器65、66とで構成されている。さらに、演算ノード52は、6つの入力端子A0in,A1in,B0in,B1in,S0in,S1inと、6つの出力端子A0out,A1out,B0 out,B1out,S0out,S1 outを有している。
  演算器61、62は、図3と同じ構成を有する。
  演算器61には、入力制御器63の2つの出力と、演算器62の出力とが入力される。演算器62には、入力制御器64の2つの出力と、演算器61の出力とが入力される。
  演算器61の出力は、出力制御器65と演算器62に入力される。演算器62の出力は、出力制御器66と演算器61に入力される。
  図6は、入力制御器63、64の回路図である。
  入力制御器63,64は、2つのレジスタ71と72を有する。レジスタ71の入力には、入力端子A0in, A1inが接続され、レジスタ72の入力には、入力端子B0in,B1inが接続されている。レジスタ71の出力は、演算器61,62の入力と出力端子A0out,A1outとに接続されている。レジスタ72の出力は、演算器61,62の入力と出力端子B0out,B1outとに接続されている。
  演算アレイ41において右端以外の演算ノード52の出力端子A0outとB1outは、演算アレイ41において右側に隣接する演算ノード52の入力端子A0inとB1inに接続される。すなわち、右端以外の演算ノード52の入力制御器63のレジスタ71の出力は、右側隣接演算ノード52の入力制御器63のレジスタ71に入力され、右端以外の演算ノード52の入力制御器64のレジスタ72の出力は、右側隣接演算ノード52の入力制御器64のレジスタ72に入力される。
  また、演算アレイ41において下端以外の演算ノード52の出力端子A1outとB0outは、演算アレイ41において下側に隣接する演算ノード52の入力端子A1inとB0inに接続される。すなわち、下端以外の演算ノード52の入力制御器64のレジスタ71の出力は、下側隣接演算ノード52の入力制御器64のレジスタ71に入力され、下端以外の演算ノード52の入力制御器63のレジスタ72の出力は、下側隣接演算ノード52の入力制御器63のレジスタ72に入力される。
  すなわち、各入力制御器63,64は、入力データである入力Aと入力Bをそれぞれ、レジスタ71と72に格納し出力する。
  図7は、出力制御器65、66の回路図である。
  出力制御器65、66は、2つのレジスタ73と74と、マルチプレクサ75を有する。レジスタ73の入力には、演算器61,62の出力が接続されている。マルチプレクサ75の入力には、レジスタ73の出力と入力端子S0in,S1inが接続されている。マルチプレクサ75の出力は、レジスタ74の入力に接続されている。
  各出力制御器65、66は、各演算器61,62の出力をレジスタ73に格納する。マルチプレクサ75は、入力端子S0in,S1inからの入力があれば、その入力を選択し、入力端子S0in,S1inからの入力がなければレジスタ73の出力を選択する。選択された値は、レジスタ74に格納され、出力される。
(動作)
  本実施形態のデータ処理装置1も、区間演算とSIMD演算の両方が実行可能である。
  次に、区間演算モード時とSIMD演算モード時の動作を説明する。
  まず、2つの行列AA0とBB0の行列積を求める区間演算モード時の動作について説明する。
  このとき、浮動小数点演算装置2Aでは、行列AA0の行ベクトルデータが入力レジスタ44に入力A0として、行列BB0の列ベクトルデータが入力レジスタ45に入力B0として、演算ノード52の入力端子A0in,B0inに入力される。また同時に、入力A0とB0と同一の入力データが、マルチプレクサ50,51を介して入力端子A1in,B1inに入力される。
  その結果、演算アレイ41は、各演算ノード52において、行列積の区間演算を実行し、演算結果である行列積の機械区間の上限値を出力レジスタ48に出力S0として出力し、機械区間の下限値を出力レジスタ49に出力S1として出力すると共に、行列積の機械区間の出力後に、出力レジスタ48に中心値の行列、出力レジスタ49に誤差半径の行列を出力する。
  なお、マルチプレクサを用いず、入力A0と入力B1、入力B0と入力A1のそれぞれに同一入力データを入力するようにしてもよい。
  また、入力A0とB0の行列演算と入力A1とB1の行列演算とで異なる演算を行うようにしてもよい。
d.区間演算に基づく行列積の演算
  次に、区間演算に基づく行列積の演算の動作について詳述する。
d1) 浮動小数点演算装置2Aでは、各演算ノード52の2つの演算器61と62の一方における乗算器31と加減算器33は上向きの丸めモードに、各演算ノード52の2つの演算器61と62の他方における乗算器31と加減算器33は下向の丸めきモードに設定される。
d2)各演算ノード52の2つの演算器61と62の加減算器33の入力として乗算器31の出力が選択されるように、制御器43は、マルチプレクサ32を制御する。
d3)さらに、各演算ノード52のレジスタ36の入力として加減算器33の出力が選択されるように、制御器43は、マルチプレクサ35を制御する。
d4)制御器43は、各演算ノード52のレジスタ36を初期化する。
d5)制御器43は、行列AA0を行ベクトルに分割し、行ベクトルを入力A0として、入力レジスタ44に入力する。同様に、制御器43は、行列BB0を列ベクトルに分割し、列ベクトルを入力B0として、入力レジスタ44に入力する。
d6)行列AA0の1行目の行ベクトルA0-0を、演算アレイ41の1行目の入力A0inと入力B1inに入力し、行列AA0の2行目の行ベクトルA0-1を、演算アレイ41の2行目の入力A0inと入力B1inに入力し、行列AA0の3行目の行ベクトルA0-2を、演算アレイ41の3行目の入力A0inと入力B1inに入力し、行列AA0の4行目の行ベクトルA0-3を、演算アレイ41の4行目の入力A0inと入力B1inに入力する。
d7)行列BB0の1列目の列ベクトルB0-0を、演算アレイ41の1列目の入力B0inと入力A1inに入力し、行列BB0の2行目の列ベクトルB0-1を、演算アレイ41の2列目の入力B0inと入力A1inに入力し、行列BB0の3行目の列ベクトルB0-2を、演算アレイ41の3列目の入力B0inと入力A1inに入力し、行列BB0の4行目の列ベクトルB0-3を、演算アレイ41の4列目の入力B0inと入力A1inに入力する。
d8)各演算ノード52では、入力された各ベクトル要素に対して次の処理が実行される。
d8-1)入力制御器63は、入力A0inと入力B0inを順に格納して出力する。
d8-2)入力制御器64は、入力A1inと入力B1inを順に格納して出力する。
d8-3)各演算器61と62の乗算器31では、2つの入力が乗算される。
d8-4)各演算器61と62の加減算器33では、乗算器31の乗算結果とレジスタ36のレジスタ値とが加算される。
d8-5)各演算器61と62のレジスタ36には、加算結果が格納され、出力制御器65から区間演算の演算結果の行列積の要素の機械区間の上限値が出力され、出力制御器66から区間演算の演算結果の行列積の要素の機械区間の下限値が出力される。
d9)行列積の全要素の機械区間の出力の完了後、各演算ノード52で、以下の処理が行われる。
d9-1)各演算ノード52の両演算器61と62の加減算器33の入力として、外部からの入力を選択するように、制御器43は、マルチプレクサ32を制御する。
d9-2)さらに、各演算ノード52の両演算器61、62において、レジスタ36の入力として、1/2器34の出力が選択されるように、制御器43は、マルチプレクサ35を制御する。
d9-3)そして、各演算器61の加減算器33において、2つの入力の加算が行われ、各演算器62の加減算器33において、2つの入力の減算が行われる。
d9-4)各演算ノード52の両演算器61と62の1/2器34において、加減算器33の出力の1/2演算が実行され、1/2器34の演算結果が、レジスタ36に格納される。
d9-5)出力制御器65は、演算器61のレジスタ36の出力を順に格納して出力する。
d9-6)出力制御器66は、演算器62のレジスタ36の出力を順に格納して出力する。
  演算アレイ41において、1列目の出力S0は結果行列S0の1列目の列ベクトルS0-0として、2列目の出力S0は結果行列S0の2列目の列ベクトルS0-1として、3列目の出力S0は結果行列S0の3列目の列ベクトルS0-2として、4列目の出力S0は結果行列S0の4列目の列ベクトルS0-3として、出力レジスタ48に出力される。
  演算アレイ41において、1行目の出力S1は結果行列S1の1行目の行ベクトルS1-0として、2行目の出力S1は結果行列S1の2行目の行ベクトルS1-1として、3行目の出力S1は結果行列S1の3行目の行ベクトルS1-2として、4行目の出力S1は結果行列S1の4行目の行ベクトルS1-3として、出力レジスタ49に出力される。
  行列積の機械区間が出力される際には、出力レジスタ48の4つの列ベクトルS0-0〜S0-3は、統合されて行列積の演算結果である行列SS0の機械区間の上限値として出力され、出力レジスタ49の4つの行ベクトルS1-0〜S1-3は、統合されて行列積の演算結果である行列SS0の機械区間の下限値として出力される。
  行列積の中心値と誤差半径が出力される際には、出力レジスタ48の4つの列ベクトルS0-0〜S0-3は、統合されて中心値行列SS0として出力され、出力レジスタ49の4つの行ベクトルS1-0〜S1-3は、統合されて誤差半径行列SS1として出力される。
  次に、SIMD演算モード時の動作を説明する。
  このとき、浮動小数点演算装置2Aでは、入力レジスタ44に入力A0が、入力レジスタ45に入力B0が入力されて1つの行列積が算出され、入力レジスタ46に入力A1が、入力レジスタ47に入力B1が入力されて、別の行列積が算出される。その場合、演算アレイ41内では、入力A0とB0の演算と入力A1とB1の演算は個別に実行され、出力S0に入力A0とB0の演算結果が、出力S1に入力A1とB1の演算結果が出力される。
e. SIMD演算に基づく行列積の演算
  次に、SIMD演算に基づく行列積の演算動作について詳述する。
e1)まず、制御器43は、各演算ノードの演算器61と62の乗算器31と加減算器33を同一の丸めモードに設定する。例えば、演算器61の乗算器31と加減算器33が上向きモードに設定されたときは、演算器62の乗算器31と加減算器33も上向きモードに設定される。
e2)演算器61と62の加減算器33の入力として乗算器31の出力が選択されるように、制御器43は、マルチプレクサ32を制御する。
e3)演算器61と62のレジスタ36の入力として、加減算器33の出力が選択されるように、制御器43は、マルチプレクサ35を制御する。
e4)制御器43は、演算器61と62の両方のレジスタ36を初期化する。
e5)行列AA0を行ベクトルに分割して、各行ベクトルを入力A0として入力レジスタ44に入力する。
e6)行列BB0を列ベクトルに分割して、各列ベクトルを入力B0として入力レジスタ45に入力する。
e7)行列AA0の1行目の行ベクトルA0-0が、演算アレイ41の1行目の入力A0inに入力され、行列AA0の2行目の行ベクトルA0-1が、演算アレイ41の2行目の入力A0inに入力され、行列AA0の3行目の行ベクトルA0-2が、演算アレイ41の3行目の入力A0inに入力され、行列AA0の4行目の行ベクトルA0-3が、演算アレイ41の4行目の入力A0inに入力される。
e8)行列BB0の1列目の列ベクトルB0-0が、演算アレイ41の1列目の入力B0に入力され、行列BB0の2行目の列ベクトルB0-1が、演算アレイ41の2列目の入力B0に入力され、行列BB0の3行目の列ベクトルB0-2が、演算アレイ41の3列目の入力B0に入力され、行列BB0の4行目の列ベクトルB0-3が、演算アレイ41の4列目の入力B0に入力される。
e9)また、行列AA1を行ベクトルに分割して、各行ベクトルを入力A1として入力レジスタ46に入力する。
e10)行列BB1を列ベクトルに分割して、各列ベクトルを入力B1として入力レジスタ47に入力する。
e11)行列AA1の1行目の行ベクトルA1-0が、演算アレイ41の1列目の入力A1inに入力され、行列AA1の2列目の行ベクトルA1-1が、演算アレイ41の2列目の入力A1inに入力され、行列AA1の3行目の行ベクトルA1-2が、演算アレイ41の3列目の入力A1inに入力され、行列AA1の4行目の行ベクトルA1-3が、演算アレイ41の4列目の入力A1inに入力される。
e12)行列BB1の1列目の列ベクトルB1-0が、演算アレイ41の1行目の入力B1inに入力され、行列BB1の2行目の列ベクトルB1-1が、演算アレイ41の2行目の入力B1inに入力され、行列BB1の3行目の列ベクトルB1-2が、演算アレイ41の3行目の入力B1inに入力され、行列BB1の4行目の列ベクトルB1-3が、演算アレイ41の4行目の入力B1inに入力される。
e13)各演算ノード52では、入力された各ベクトル要素について次の処理が実行される。
e13-1)入力制御器63は、入力A0inと入力B0inを順に格納して出力する。
e13-2)入力制御器64は、入力A1inと入力B1inを順に格納して出力する。
e13-3)各演算器61と62では、2つの入力に対する演算が行われる。
e14)全ベクトル要素の処理の完了後、各演算ノード52で次の処理が実行される。
e14-1)各演算ノード52の出力制御器65は、演算器61の出力を順に格納して出力する。
e14-2)各演算ノード52の出力制御器66は、演算器62の出力を順に格納して出力する。
e15)演算アレイ41の1列目の出力S0は、結果行列S0の1列目の列ベクトルS0-0として出力レジスタ48に出力され、演算アレイ41の2列目の出力S0は、結果行列S0の2列目の列ベクトルS0-1として出力レジスタ48に出力され、演算アレイ41の3列目の出力S0は、結果行列S0の3列目の列ベクトルS0-2として出力レジスタ48に出力され、演算アレイ41の4列目の出力S0は、結果行列S0の4列目の列ベクトルS0-3として出力レジスタ48に出力される。
e16)また、演算アレイ41の1行目の出力S1は、結果行列S1の1列目の列ベクトルS1-0として出力レジスタ49に出力され、区間演算アレイの2行目の出力S1は、結果行列S1の2列目の列ベクトルS1-1として出力レジスタ49に出力され、区間演算アレイの3行目の出力S1は、結果行列S1の3列目の列ベクトルS1-2として出力レジスタ49に出力され、演算アレイ41の4行目の出力S1は、結果行列S1の4列目の列ベクトルS1-3として出力レジスタ49に出力される。
e17) 出力レジスタ48の4つの列ベクトルS0-0〜S0-3は、統合されて結果行列SS0として出力される。
e18) 出力レジスタ49の4つの行ベクトルS1-0〜S1-3は、統合されて結果行列SS1として出力される。
  以上のSIMD演算は、各演算器61、62において、2つの行列積のための演算が行われるが、2つの演算器61と62を用いて1つの行列積を倍速で実行するようにしてもよい。
  その場合のSIMD演算モード時の浮動小数点演算装置2Aの動作を説明する。
f1)まず、制御器43は、各演算ノードの演算器61と62の両方における乗算器31と加減算器33を同一の丸めモードに設定する。例えば、演算器61の乗算器31と加減算器33が上向きの丸めモードに設定されたときは、演算器62の乗算器31と加減算器33も上向きの丸めモードに設定される。
f2)演算器61と62の両方の加減算器33の入力として乗算器31の出力を選択するように、制御器43は、マルチプレクサ32を制御する。
f3)演算器61と62の両方のレジスタ36の入力として、加減算器33の出力を選択するように、制御器43は、マルチプレクサ35を制御する。
f4)制御器43は、演算器61と62の両方のレジスタ36を初期化する。
f5)行列AA0を行ベクトルに分割して、各行ベクトルを入力A0として入力レジスタ44に入力する。
f6)行列BB0を列ベクトルに分割して、各列ベクトルを入力B0として入力レジスタ45に入力する。
f7)行列AA0の1行目の行ベクトルA0-0の各要素が、演算アレイ41の1行目の入力A0inと入力B1inに交互に入力され、行列A0の2行目の行ベクトルA0-1の各要素が、演算アレイ41の2行目の入力A0inと入力B1inに交互に入力され、行列A0の3行目の行ベクトルA0-2の各要素が、演算アレイ41の3行目の入力A0inと入力B1inに交互に入力され、行列A0の4行目の行ベクトルA0-3の各要素が、演算アレイ41の4行目の入力A0inと入力B1inに交互に入力される。
f8)行列BB0の1列目の列ベクトルB0-0の各要素が、演算アレイ41の1列目の入力B0inと入力A1inに交互に入力され、行列B0の2行目の列ベクトルB0-1の各要素が、演算アレイ41の2列目の入力B0inと入力A1inに交互に入力され、行列B0の3行目の列ベクトルB0-2の各要素が、演算アレイ41の3列目の入力B0inと入力A1inに交互に入力され、行列B0の4行目の列ベクトルB0-3の各要素が、演算アレイ41の4列目の入力B0inと入力A1inに交互に入力される。
f9)各演算ノード52では、入力された各ベクトル要素について次の処理が実行される。
f9-1)入力制御器63は、入力A0inと入力B0inを順に格納して出力する。
f9-2)入力制御器64は、入力A1inと入力B1inを順に格納して出力する。
f9-3)各演算器61と62では、2つの入力に対する演算が行われる。
f10)全ベクトル要素の処理の完了後、各演算ノード52で次の処理が実行される。
f10-1)演算器61の加減算器33の入力として外部からの入力を選択するように、制御器43は、マルチプレクサ32を制御する。
f10-2)演算器61の加減算器33で、レジスタ36のレジスタ値と、外部からの入力としての演算器12のレジスタ36のレジスタ値とが加算される。
f10-3)演算器61のレジスタ36に加減算器33の加算結果が格納される。
f11)各演算ノード52の出力制御器65は、演算器61の出力を順に格納して出力する。
f12)演算アレイ41の1列目の出力S0は、結果行列S0の1列目の列ベクトルS0-0として出力レジスタ48に出力され、演算アレイ41の2列目の出力S0は、結果行列S0の2列目の列ベクトルS0-1として出力レジスタ48に出力され、演算アレイ41の3列目の出力S0は、結果行列S0の3列目の列ベクトルS0-2として出力レジスタ48に出力され、演算アレイ41の4列目の出力S0は、結果行列S0の4列目の列ベクトルS0-3として出力レジスタ48に出力される。
f13) 出力レジスタ48の4つの列ベクトルS0-0〜S0-3は、統合されて結果行列SS0として出力される。
  以上のように、演算アレイ41の各演算ノード52の2つの演算器61と62を用いて1つの行列積を倍速で実行することができる。
  以上のように、本実施形態の浮動小数点演算装置は、演算精度を要求されない演算モードのときは、SIMD演算に基づく行列積演算を実行し、演算精度が要求される演算モードのときは、演算結果と演算精度情報が取得できる区間演算に基づく行列積演算を実行することができる。
  各実施形態の浮動小数点演算装置は、種々の分野において利用可能である。例えば、第2の実施形態の浮動小数点演算装置2Aは、例えば画像処理システムなどに適用可能である。図8は、本実施形態の浮動小数点演算装置を有する情報処理システムの構成を示すブロック図である。図8において、図1と同じ構成要素については、同じ符号を付して説明は省略する。
  図8に示す情報処理システム100の例は、浮動小数点演算装置2Aと、主記憶装置3と、入出力装置4と、相互接続網5と、例えばイメージセンサを有するカメラ101と、表示装置としてのモニタ102とを含む画像処理システムである。図8の点線で示す範囲が、例えば1つの半導体装置上に形成される。
  例えば、車両に搭載されたカメラ101により撮像された画像から、周囲の建物等の被写体の3次元の形状データを生成するような応用である。その場合、撮像して得られた2次元画像データから、被写体の3次元データを構築するアプリケーションプログラムの実行において、画像データの画素の位置データの演算精度が要求される。そのようなシステムにおいては、本浮動小数点演算装置2Aは、極めて有効である。2次元画像データに対する画像は、区間演算モードにて処理が実行され、3次元データが生成される。演算結果及び演算精度情報はモニタ102に表示され、ユーザは、その演算精度情報を利用した高精度の3次元データを目視することができる。
  以上のように、各実施形態によれば、区間演算の演算結果と演算精度情報を同時に取得する区間演算と、SIMD演算とを切り替えて実行可能な浮動小数点演算装置、半導体装置及び情報処理システムを提供することができる。
  本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として例示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。