(57)【要約】【課題】オペランドのシフトを要することなく消費電力の削減をはかる。【解決手段】高速化回路（固定小数点オーバーフロー先見回路５、スティッキービット先見回路６）を備え、乗算命令に基づき入力される第１オペランドと第２オペランドの積を算出するベクトル乗算処理装置であって、高速化回路を使用し、入力される第１オペランドと第２オペランドとの部分積を生成し、乗算命令とデータ形式とに応じて、部分積の生成に関し、結果的に参照されない特定範囲の回路動作を抑止する乗算回路４（部分積生成回路４１、部分積制御回路４２）、を備える。【選択図】図１
2010238011.tif 000002
【特許請求の範囲】
【請求項１】
固定小数点データ形式のオーバーフロー先見回路と、浮動小数点データ形式のスティッキービット先見回路と、を少なくとも備え、乗算命令に基づき入力される第１オペランドと第２オペランドの積を算出するベクトル乗算処理装置であって、
前記オーバーフロー先見回路と前記スティッキービット先見回路とを使用し、入力される第１オペランドと第２オペランドとの部分積を生成し、前記乗算命令とデータ形式とに応じて、前記部分積の生成に関し、結果的に参照されない特定範囲の回路動作を抑止する乗算回路、
を備えたことを特徴とするベクトル乗算処理装置。
【請求項２】
前記乗算回路は、
前記乗算命令が固定小数点演算命令か浮動小数点乗算命令かを示す命令種別と、前記入力される第１、第２オペラントが有するデータ長とに応じて、前記部分積生成に関して結果として参照されない領域の動作を抑止することを特徴とする請求項１に記載のベクトル乗算処理装置。
【請求項３】
前記乗算回路は、
前記乗算命令とデータ形式にしたがい、前記部分積生成に関して結果として参照されない領域の動作を抑止する制御信号を生成する部分積制御回路と、
前記部分積制御回路により出力される制御信号にしたがい前記第２のオペランドの仮数部から部分積を生成する部分積生成回路と、
を備えたことを特徴とする請求項１または請求項２に記載のベクトル乗算処理装置。
【請求項４】
入力される第１のオペランドと前記第２のオペランドを乗算命令とデータ形式にしたがって指数部と仮数部とに分割する前処理回路と、
前記部分積制御回路と部分積演算回路とを含み、前記第１のオペランドと前記第２のオペランドにそれぞれ接続される前記前処理回路の出力である仮数部の乗算を行う乗算回路と、
前記第１のオペランドと前記第２のオペランドを入力として固定小数点乗算結果がオーバーフローするか否かの先見を行う前記オーバーフロー先見回路と、
前記第１のオペランド仮数部及び第２のオペランド仮数部を入力としてスティッキービットを生成する前記スティッキービット先見回路と、
前記第１のオペランドと前記第２のオペランドにそれぞれ接続される前記前処理回路の出力である符号の判定及び指数部の加算を行う指数部加算器と、
前記乗算回路の出力の加算を行う浮動小数点加算器と、
前記乗算回路の出力の加算を行う固定小数点加算器と、
前記浮動小数点加算器の出力を入力として最上位ビット部位からのビット０の数をカウントする０カウンタと、
前記０カウンタの出力に従い前記浮動小数点加算器の出力をシフトして正規化及び丸めを行う正規化丸め回路と、
前記０カウンタの出力に従い前記指数部加算器の出力を補正する指数部補正回路と、
前記乗算命令が浮動小数点乗算を示す場合は、前記指数部補正回路の符号及び指数部出力と、前記正規化丸め回路の仮数部出力とを連結して浮動小数点乗算結果として出力し、前記乗算命令が固定小数点乗算を示す場合は、前記固定小数点加算器の出力を固定小数点の演算結果として出力する選択回路と、
を備えたことを特徴とする請求項１から請求項３のいずれか１項に記載のベクトル乗算処理装置。
【請求項５】
前記第１のオペランドが格納される第１のベクトルレジスタと、
前記第２のオペランドが格納される第２のベクトルレジスタ２と、
前記第１と第２のベクトルレジスタと、前記乗算回路との間に、不正なオペランドが入力されたために生じる結果を示す非数を検出して前記部分積検出回路を制御する非数検出回路を備え、
前記部分積制御回路は、
前記非数検出回路で非数が検出された場合、前記部分積生成回路の全ての範囲の回路動作を抑止することを特徴とする請求項１から請求項４のいずれか１項に記載のベクトル乗算処理装置。
【請求項６】
固定小数点データ形式のオーバーフロー先見回路と、浮動小数点データ形式のスティッキービット先見回路と、を少なくとも備え、乗算命令に基づき入力される第１オペランドと第２オペランドの積を算出するベクトル乗算処理装置に用いられるベクトル乗算処理方法であって、
前記オーバーフロー先見回路と前記スティッキービット先見回路とを使用し、入力される第１オペランドと第２オペランドとの部分積を生成するステップと、
前記乗算命令とデータ形式とに応じて、前記部分積の生成に関し、結果的に参照されない特定範囲の回路動作を抑止するステップと、
を有することを特徴とするベクトル乗算処理方法。
【請求項７】
コンピュータ上で実行され、固定小数点データ形式のオーバーフロー先見回路と、浮動小数点データ形式のスティッキービット先見回路と、を少なくとも備え、乗算命令に基づき入力される第１オペランドと第２オペランドの積を算出するベクトル乗算処理装置のベクトル乗算処理プログラムであって、
前記コンピュータに、
前記オーバーフロー先見回路とスティッキービット先見回路とを使用し、入力される第１オペランドと第２オペランドとの部分積を生成する部分積生成処理と、
前記乗算命令とデータ形式とに応じて、前記部分積の生成に関し、結果的に参照されない特定範囲の回路動作を抑止する回路動作抑止処理と、
を実行させることを特徴とするベクトル乗算処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ベクトル乗算処理装置および方法ならびにプログラムに関し、特に、複数のデータ形式を１個の乗算回路で対応可能な技術に関する。
【背景技術】
【０００２】
複数のデータ形式に１個の乗算回路で対応可能なベクトル乗算処理装置は、乗算結果算出の高速化のために、固定小数点データ形式のオーバーフロー先見処理や、浮動小数点データ形式のスティッキービット先見処理のための専用のハードウエア回路を実装している。
【０００３】
例えば、特許文献１には、浮動小数点データ形式のスティッキービット先見回路を実装し、浮動小数点データの仮数部の乗算動作と並行してスティッキービットを生成することにより高速演算を行う浮動小数点乗算器が開示されている。
【０００４】
また、特許文献２には、複数のアレイエレメントを含む部分積アレイで構成されたアレイ乗算器において、部分積アレイの対応する大きさより小さいオペランドについては、アレイの最上位、または列の方にシフトしてオペランド積の計算に使用されるアレイエレメントの数を減少させる技術が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−２５９３９４号公報
【特許文献２】特開２００８−５３３６１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述した特許文献１に開示された技術によれば、これらの処理を乗算回路の出力から判定しているため、このような高速化回路を実装している場合に乗算回路中の部分積生成回路にて演算動作を行っても結果として参照しない領域が存在する。ベクトル乗算器の場合、ベクトル要素について連続してパイプライン処理により演算動作を行うことで、要素毎に回路が絶えず動作するため、消費電力が高くなる一因になる。
【０００７】
一方、特許文献２に開示された技術によれば、上述した問題は回避されるが、被乗数または乗数、あるいはその両方がシフトされることで使用されないアレイエレメントを生み出しており、このための回路素子が必要になり、また、そのための処理負荷を要する。
【０００８】
（発明の目的）
本発明の目的は、高速化回路を実装している場合に、乗算回路中の部分積生成回路にて演算動作を行っても結果として参照されない領域を部分積生成回路で直接抑止することで、オペランドのシフトを要することなく消費電力の削減をはかる、ベクトル乗算処理装置および方法ならびにプログラムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の第１のベクトル乗算処理装置は、固定小数点データ形式のオーバーフロー先見回路と、浮動小数点データ形式のスティッキービット先見回路と、を少なくとも備え、乗算命令に基づき入力される第１オペランドと第２オペランドの積を算出するベクトル乗算処理装置であって、オーバーフロー先見回路とスティッキービット先見回路とを使用し、入力される第１オペランドと第２オペランドとの部分積を生成し、乗算命令とデータ形式とに応じて、部分積の生成に関し、結果的に参照されない特定範囲の回路動作を抑止する乗算回路、を含む。
【００１０】
本発明の第２のベクトル乗算処理方法は、固定小数点データ形式のオーバーフロー先見回路と、浮動小数点データ形式のスティッキービット先見回路と、を少なくとも備え、乗算命令に基づき入力される第１オペランドと第２オペランドの積を算出するベクトル乗算処理装置に用いられるベクトル乗算処理方法であって、オーバーフロー先見回路とスティッキービット先見回路とを使用し、入力される第１オペランドと第２オペランドとの部分積を生成するステップと、乗算命令とデータ形式とに応じて、部分積の生成に関し、結果的に参照されない特定範囲の回路動作を抑止するステップと、を有する。
【００１１】
本発明の第３のベクトル乗算処理プログラムは、コンピュータ上で実行され、固定小数点データ形式のオーバーフロー先見回路と、浮動小数点データ形式のスティッキービット先見回路と、を少なくとも備え、乗算命令に基づき入力される第１オペランドと第２オペランドの積を算出するベクトル乗算処理装置のベクトル乗算処理プログラムであって、コンピュータに、オーバーフロー先見回路とスティッキービット先見回路とを使用し、入力される第１オペランドと第２オペランドとの部分積を生成する部分積生成処理と、乗算命令とデータ形式とに応じて、部分積の生成に関し、結果的に参照されない特定範囲の回路動作を抑止する回路動作抑止処理と、を実行させる。
【発明の効果】
【００１２】
本発明によれば、高速化回路を実装している場合に、乗算回路中の部分積生成回路にて演算動作を行っても結果として参照しない領域を部分積生成回路で直接抑止することで、オペランドのシフトを要することなく消費電力の削減をはかる、ベクトル乗算処理装置および方法ならびにプログラムを提供することができる。
【００１３】
その理由は、部分積制御回路が、乗算命令とデータ形式とに応じて、部分積生成回路の出力に関して結果的に参照されない特定範囲の回路動作を抑止するからである。
【図面の簡単な説明】
【００１４】
【図１】本発明の第１の実施の形態によるベクトル乗算処理装置の内部構成を示すブロック図である。
【図２】本発明の第１の実施の形態によるベクトル乗算処理装置の乗算回路の内部構成を示すブロック図である。
【図３】本発明の第１の実施の形態によるベクトル乗算処理装置の固定小数点６４ビットの部分積生成動作を説明するために引用した模式図である。
【図４】本発明の第１の実施の形態によるベクトル乗算処理装置の固定小数点３２ビットの部分積生成動作を説明するために引用した模式図である。
【図５】本発明の第１の実施の形態によるベクトル乗算処理装置の浮動小数点倍精度５３ビットの部分積生成動作を説明するために引用した模式図である。
【図６】本発明の第１の実施の形態によるベクトル乗算処理装置の浮動小数点単精度２４ビットの部分積生成動作を説明するために引用した模式図である。
【図７】本発明の第１の実施の形態によるベクトル乗算処理装置の乗算回路（部分積生成回路の１ビット分）の内部回路図である。
【図８】本発明の第１の実施の形態によるベクトル乗算処理装置で使用される乗算命令およびデータ形式の一例を示す図である。
【図９】本発明の第２の実施の形態によるベクトル乗算処理装置の内部構成を示すブロック図である。
【図１０】本発明の第１の実施の形態によるベクトル乗算処理装置で使用する乗算命令とデータ形式によって区分される制御パターンの種別、および第２の実施の形態による非数の種別について、それぞれ表形式で示した図である。
【発明を実施するための形態】
【００１５】
次に、本発明の実施の形態について図面を参照して詳細に説明する。
【００１６】
（第１の実施の形態の構成）
図１は、本発明の第１の実施の形態によるベクトル乗算処理装置の構成を示すブロック図である。
【００１７】
図１を参照すると、本実施の形態によるベクトル乗算処理装置２０は、ベクトルレジスタ１と、ベクトルレジスタ２と、前処理回路３と、乗算回路４と、固定小数点オーバーフロー先見回路５と、スティッキービット先見回路６と、浮動小数点加算器７と、固定小数点加算器８と、指数部加算器９と、０カウンタ１０と、正規化丸め回路１１と、指数部補正回路１２と、選択回路１３と、を含む。
【００１８】
ベクトルレジスタ１は、前処理回路３と固定小数点オーバーフロー先見回路５に接続され、第１オペランド（ＯＰ）を格納する。ベクトルレジスタ２は、前処理回路３と固定小数点オーバーフロー先見回路５に接続され、第２オペランドを格納する。前処理回路３はベクトルレジスタ１またはベクトルレジスタ２と乗算回路４とスティッキービット先見回路６と指数部加算器９と接続され、ベクトルレジスタ１またはベクトルレジスタ２から供給されるオペランドを乗算命令とデータ形式に従って指数部と仮数部に分割する。
【００１９】
乗算回路４は、前処理回路３と浮動小数点加算器７と固定小数点加算器８とに接続され、前処理回路３の出力である仮数部同士について乗算を行い、乗算結果を浮動小数点加算器７と固定小数点加算器８へ出力する。
【００２０】
固定小数点オーバーフロー先見回路５は、ベクトルレジスタ１とベクトルレジスタ２と選択回路１３とに接続され、第１オペランド及び第２オペランドを入力として固定小数点乗算結果がオーバーフローするか否かの先見を行う。スティッキービット先見回路６は、前処理回路３と正規化丸め回路１１とに接続され、第１オペランド仮数部及び第２オペランド仮数部を入力として浮動小数点乗算結果のうち丸め処理に用いるスティッキービットを先見する。
【００２１】
浮動小数点加算器７は、乗算回路４と０カウンタ１０と正規化丸め回路１１とに接続され、乗算回路４の２出力の加算を行い、結果を０カウンタ１０と正規化丸め回路１１へ出力する。固定小数点加算器８は、乗算回路４と選択回路１３とに接続され、乗算回路４の２出力の加算を行い、加算結果のうち有効桁を選択回路１３へ出力する。固定小数点加算器８の出力が固定小数点乗算結果となる。
【００２２】
指数部加算器９は、前処理回路３と指数部補正回路１２とに接続され、前処理回路３の出力である符号の判定及び指数部同士の加算を行い、符号及び指数部加算結果を指数部補正回路１２に出力する。０カウンタ１０は、浮動小数点加算器７と正規化丸め回路１１と指数部補正回路１２とに接続され、浮動小数点加算器７の出力を入力として最上位ビット（ＭＳＢ）からのビット０の数をカウントして正規丸め回路１１及び指数部補正回路１２へ出力する。
【００２３】
正規化丸め回路１１は、スティッキービット先見回路６と浮動小数点加算器７と０カウンタ１０と選択回路１３とに接続され、０カウンタ１０の出力に従い浮動小数点加算器７の出力をシフトして正規化を行い、更にスティッキービット先見回路６の出力を入力として丸め処理を行って選択回路１３へ出力する。正規化丸め回路１１の出力が浮動小数点乗算結果の仮数部となる。指数部補正回路１２は、指数部加算器９と０カウンタ１０と選択回路１３とに接続され、０カウンタ１０の出力に従い指数部加算器９の出力のうち指数部加算結果を補正する。指数部補正回路１２の出力が浮動小数点乗算結果の指数部となる。
【００２４】
選択回路１３は、固定小数点オーバーフロー先見回路５と固定小数点加算器８と正規化丸め回路１１と指数部補正回路１２とに接続され、乗算命令が浮動小数点乗算を示す場合は、指数部補正回路１２の符号及び指数部出力と正規化丸め回路１１の仮数部出力とを連結し、浮動小数点乗算結果として出力する。乗算命令が固定小数点乗算を示す場合は、固定小数点加算器８の出力を固定小数点の演算結果として出力する。この時に固定小数点オーバーフロー先見回路５の出力がオーバーフローを示している場合にはあらかじめ定められたフォーマット（最大数など）を固定小数点乗算の演算結果として出力する。
【００２５】
図２は、図１に示す乗算回路４の内部構成の詳細を説明するために引用した図である。図２を参照すると、乗算回路４は、例えば、６４×６４ビット乗算アレイで構成される部分積生成回路４１と、部分積制御回路４２と、デコーダ４３と、部分積加算器４４とを含む。
【００２６】
図２を参照すると、デコーダ４３は、前処理回路３と部分積生成回路４１と接続され、第１オペランドの仮数部を入力として再コード化の処理を行い、デコード信号を部分積生成回路４１に出力する。
【００２７】
部分積制御回路４２は、部分積生成回路４１に接続され、乗算命令とデータ形式を入力として得、制御信号（ｏｆｆ１、ｏｆｆ２、ｏｆｆ３、ｏｆｆ４）を生成して部分積生成回路４１へ出力する。部分積生成回路４１は、前処理回路３と部分積制御回路４２とデコーダ４３と部分積加算器４４とに接続され、第２オペランドの仮数部を入力として得、デコーダ４３から送出されるデコード信号と、部分積制御回路４２により出力されるｏｆｆ信号とに基づき、第２オペランド仮数部を乗じた部分積を生成する。
【００２８】
部分積加算器４４は、部分積生成回路４１と浮動小数点加算器７と固定小数点加算器８とに接続され、部分積生成回路４１の出力であるｎ個の部分積が２個になるまで加算し、最終的に得られた２つの部分積を浮動小数点加算器７、および固定小数点加算器８に出力する。
【００２９】
（第１の実施の形態の動作）
次に、本実施の形態によるベクトル演算処理装置２０の動作について、図３〜図８、ならびに図１０（ａ）を参照して詳細に説明する。
【００３０】
本実施の形態によるベクトル乗算処理装置２０は、乗算命令とデータ形式にしたがいベクトルデータに対する浮動小数点乗算と固定小数点乗算とを同一のハードウェアで行う。ここでは、後述する図８（ａ）〜（ｄ）に示すＩＥＥＥ浮動小数点データ形式の倍精度、単精度に加え、固定小数点データ形式の６４ビット、３２ビットの組み合わせからなる計４個の制御パターン（後述する図１０（ａ）参照）フォーマットに対応するベクトル乗算処理装置を例に説明する。
【００３１】
まず、固定小数点乗算を実行する場合の動作について、図３、図４に示す乗算アレイ４１の模式図を参照しながら説明する。
【００３２】
上述した前処理回路３、乗算回路４、および選択回路１２へ送出される乗算命令は、”固定小数点乗算”が指定され、また、データ形式は“６４ビット”、または、“３２ビット”が指定されるものとする。このとき、前処理回路３は、この乗算命令とデータ形式とにしたがい、ここでは固定小数点乗算であるため、“０”を指数部として指数部加算器９へ、また、固定小数点乗算６４ビットならば、例えば、図８（ａ）に示すように、第１及び第２オペランドのビット全てを仮数部とし、固定小数点乗算３２ビットならば、図８（ｂ）に示すように第１及び第２オペランドの有効桁３２ビットの下位側３２ビット分の“０”を付加と、これを仮数部として乗算回路４へそれぞれ出力する。
【００３３】
乗算回路４は、入力された６４ビットの第１オペランド仮数部を乗算として、第２オペランド仮数部を被乗数として、乗数の各ビットに被乗数を乗じたもの（部分積）、を図３、図４に示すように、２進数の筆算の形にｎ段並べ（乗算アレイ）、これを加算することによって積を求める。図３に、固定小数点６４ビットの部分積を示す。図３を参照すると、各部分積のうち、下位６４ビットの領域が固定小数点乗算６４ビットの乗算結果となり、波線部で示される上位６４ｂビットがオーバーフローの検出に用いられる。
【００３４】
本実施の形態によるベクトル乗算処理装置２０では、固定小数点オーバーフロー先見回路５で、第1及び第２オペランドを入力として固定小数点乗算結果がオーバーフローするか否かの先見を行い、その結果を選択回路１２に出力する。このため、図３の波線部で示される領域は、以降の回路の何れにも参照されることがない。したがって、乗算アレイ全体の１／２にあたる領域が未参照領域となる。
【００３５】
なお、固定小数点乗算のオーバーフローの先見については、各入力データのＭＳＢからの“０”の数を計上し、合計が一定数以内の場合にオーバーフローとなることが知られている。図４に固定小数点３２ビットの部分積を示す。３２ビット×３２ビット乗算アレイの領域のうち、下位３２ビットの領域が固定小数点乗算３２ビットの乗算結果となり、波線部で示される上位３２ビットがオーバーフローの検出に用いられる。固定小数点乗算６４ビットのときと同様、本実施の形態によるベクトル乗算処理装置では、固定小数点オーバーフロー先見回路５で固定小数点乗算結果がオーバーフローするか否かの先見を行うため、図４の波線部で示される領域は、以降の回路の何れにも参照されることがない。したがって、乗算アレイの全体の１／８にあたる領域が未参照領域となる。
【００３６】
図２に示す乗算回路４の構成において、デコーダ４３は第1オペランド仮数部を入力として再コード化の処理を行い、デコード信号を部分積生成回路４１に送信する。部分積生成回路４１は、第２オペランド仮数部を入力としてデコーダ４３から送出されるデコード信号に部分積制御回路４２から送出されるｏｆｆ信号と第２オペランド仮数部を乗じた部分積を生成し、筆算の形にｎ段並べる。この時、部分積生成回路４１の１ビット分は、図７に示されるように、論理ゲート中にｏｆｆ信号を入力とするＡＮＤゲートを有する。
【００３７】
図６において、部分積制御回路４２は、乗算命令とデータ形式を入力としてｏｆｆ信号を生成し、部分積生成回路４１へ分配する。ｏｆｆ信号は、例えば、図１０（ａ）に表１として示されるように、乗算命令とデータ形式によって、ｏｆｆ１、ｏｆｆ２、ｏｆｆ３、ｏｆｆ４の、４個の制御パターンに分類されている。固定小数点乗算６４ビットの場合はｏｆｆ１信号を、固定小数点乗算３２ビットの場合はｏｆｆ２信号を生成するものとする。それぞれのｏｆｆ信号は、有効時に“０”になるものとする。
【００３８】
図７を参照すると、部分積生成回路４１に有効なｏｆｆ信号（値は０）が入力されると、出力は“０”に保たれる。これにより、固定小数点乗算６４ビットの場合は、図６のｏｆｆ１信号を入力とする領域が、固定小数点乗算３２ビットの場合はｏｆｆ２信号を入力とする領域が全て“０”出力になる。
【００３９】
説明を図２に戻す。部分積生成回路４１の出力である各部分積は、部分積加算器４４によってｎ個の部分積を２個になるまで加算し、最終的に得られた２個の部分積を浮動小数点加算器７、及び固定小数点加算器８に出力する。この加算処理の際に、部分積生成回路４１で出力が“０”に保たれる領域は動作しない。図１において、固定小数点加算器８は、乗算回路４の２出力を入力として加算を行い、加算結果のうち有効桁の部分を選択回路１２へ出力する。固定小数点加算器８の出力が固定小数点乗算結果になる。選択回路１２は、固定小数点加算器８の出力を固定小数点乗算として出力する。演算結果の出力の際に固定小数点オーバーフロー先見回路５の出力がオーバーフローを示している場合にはあらかじめ定められたフォーマット（最大数）を固定小数点乗算結果として出力する。
【００４０】
次に、浮動小数点乗算を実行する場合の動作について、図５、図６の乗算アレイの模式図を参照しながら説明する。このとき、前処理回路３及び乗算回路４及び選択回路１２に送出される乗算命令は、“浮動小数点乗算”が指定され、データ形式は“６４ビット（倍精度）”、または“３２ビット（単精度）”が指定される。
【００４１】
前処理回路３は、この乗算命令とデータ形式に従い、例えば、図８（ｃ）に示されるように、浮動小数点乗算倍精度ならば、符号（Ｓ）１ビットと指数部（Ｅ）１１ビットの合計１２ビットを指数部とし、浮動小数点乗算単精度ならば、符号（Ｓ）１ビットと指数部（Ｅ）８ビットとを合わせた合計９ビットを指数部として指数部加算器９へ出力する。
【００４２】
また、浮動小数点乗算倍精度ならば、図８（ｄ）に示されるように、ＩＥＥＥ浮動小数点データ形式の表現における仮数部の先頭の隠しビット“１”に、第１及び第２オペランドの仮数部（Ｍ）５２ビットと１１ビット分の“０”を付加し、これを仮数部として乗算回路４へ出力する。浮動小数点乗算単精度ならば、ＩＥＥＥ浮動小数点データ形式の表現における仮数部の先頭の隠しビット“１”に、第１及び第２オペランドの仮数部２３ビットと４０ビット分の“０”を付加し、これを仮数部として乗算回路４へ出力する。前処理回路３で生成された第１及び第２オペランドの指数部は、指数部加算器９で符号の判定、及び指数部の加算を行い、得られた符号と指数部加算結果を指数部補正回路１２に出力する。
【００４３】
乗算回路４は、入力された６４ビットの第１オペランド仮数部を乗数、第２オペランド仮数部を被乗数として、乗数の各ビットに被乗数を乗じた部分積を、図５及び図６に示すように、２進数の筆算の形にｎ段並べ、これを加算することによって積を求める。図５に、浮動小数点倍精度の部分積が示されている。各部分積のうち、上位５３ビットの領域が浮動小数点乗算５３ビットの乗算結果となり、５４ビット目と５５ビット目がＩＥＥＥ浮動小数点乗算の丸め処理に用いられるラウンドビットとガードビットになる。波線部で示される下位５１ビットがＩＥＥＥ浮動小数点乗算の丸め処理に用いられるスティッキービットの検出に用いられる。
【００４４】
本実施の形態によるベクトル乗算処理装置２０の構成では、スティッキービット先見回路６で第１及び第２オペランドを入力としてスイッキービットの先見を行い、その結果を正規化丸め回路１１に出力するため、図５の波線部で示される領域は、以降の回路の何れにも参照されることがない。したがって、乗算アレイ全体の約３４％にあたる領域が未参照領域となる。
【００４５】
図６に浮動小数点単精度の部分積が示されている。ここでは、２４ビット×２４ビット乗算アレイの領域のうち、上位２４ビットの領域が浮動小数点乗算２４ビットの乗算結果となり、２５ビット目と２６ビット目がＩＥＥＥ浮動小数点乗算の丸め処理に用いられるラウンドビットとガードビットになる。また、波線部で示される下位２２ビットがＩＥＥＥ浮動小数点の丸め処理に用いられるスティッキービットの検出に用いられる。浮動小数点乗算５３ビットの場合と同様、スティッキービット先見回路６でスティッキービットの先見を行うため、図６の波線部で示される領域は以降の回路の何れにも参照されることがない。したがって、乗算アレイ全体の約６％にあたる領域が未参照領域になる。なお、スティッキービットを先見する方法としては上述した特許文献１に詳細に開示されている。
【００４６】
説明を図２に戻す。図２は乗算回路４の内部構成の詳細を示すブロック図であり、上述したように、デコーダ４３は、第１オペランド仮数部を入力として再コード化の処理を行い、デコード信号を部分積生成回路４１に出力する。部分積生成回路４１は、第２オペランド仮数部を入力したデコーダ４３から送出されるデコード信号に第２オペランド仮数部を乗じた部分積を生成し、筆算の形にｎ段並べる。このとき、部分積生成回路４１の１ビット分は、図７に示されるように、論理ゲート中にｏｆｆ信号を入力とするＡＮＤゲートを有する。部分積制御回路４２は、乗算命令とデータ形式を入力としてｏｆｆ信号を生成し、部分積生成回路４１へ分配する。ｏｆｆ信号は、例えば、図１０（ａ）に表１として示したように、乗算命令とデータ形式によってｏｆｆ１、ｏｆｆ２、ｏｆｆ３、ｏｆｆ４の４個に分類される。
【００４７】
浮動小数点乗算倍精度の場合は、ｏｆｆ３信号を生成する。浮動小数点乗算単精度の場合はｏｆｆ４信号を生成する。それぞれのｏｆｆ信号は、有効時に“０”になるものとする。図７の１ビット分の部分積生成回路４１において、部分積生成回路４１に有効なｏｆｆ信号（値は０）が入力されると、出力は“０”に保たれる。これにより浮動小数点乗算倍精度の場合は、図６のｏｆｆ３信号を入力とする領域が、浮動小数点乗算単精度の場合はｏｆｆ４信号を入力とする領域が全て“０”出力となる。
【００４８】
図７において、部分積生成回路４１の出力である各部分積は、部分積加算器４４によってｎ個の部分積が２個になるまで加算され、最終的に得られた２つの部分積を浮動小数点加算器７及び固定小数点加算器８に出力する。この加算処理の際に、部分積生成回路４１で出力が“０”に保たれる領域は動作しない。図１において、浮動小数点加算器７は、部分積加算器４４の２出力を加算し、結果を正規化丸め回路１１と０カウンタ１０へ送信する。０カウンタ１０で加算結果のＭＳＢから“０”の数をカウントして正規化のためのシフト数が求められる。このシフト数は、正規化丸め回路１１へ送出され、スティッキービット先見回路６から送出されたスティッキービットとともに、正規化丸め回路１１で仮数部の正規化及び丸めが行われる。正規化丸め回路１１の出力が浮動小数点乗算結果の仮数部になる。
【００４９】
このとき、０カウンタ１０の出力であるシフト数は指数部補正回路１２にも出力され、指数部補正回路１２で指数部の補正を行い、浮動小数点乗算結果の符号と指数部を得る。選択回路１３は、指数部補正回路１２の出力と正規化丸め回路１１の出力を合せて浮動小数点乗算の演算結果として出力する。
【００５０】
（第１の実施の形態による効果）
本発明の第１の効果は、複数のデータ形式を１個の乗算回路でサポートするベクトル乗算処理装置の消費電力を低減できる、ということである。
【００５１】
その理由は、乗算命令とデータ形式毎に乗算回路内にある部分積生成回路の動作の制御を行うことで、部分積生成回路の出力に関して結果として参照しない領域の動作を抑止するからである。
【００５２】
（第２の実施の形態の構成）
次に、本発明の第２の実施の形態によるベクトル乗算処理装置２０について、図９に示すベクトル演算処理装置２０の構成図を用いて説明する。
【００５３】
図９に示す本実施の形態によるベクトル乗算処理装置２０において、図１に示す第１の実施の形態との差異は、ベクトルレジスタ１、およびベクトルレジスタ２と、乗算回路４との間に、非数検出回路１４が付加されていることにある。非数検出回路１４は、例えば、図１０（ｂ）に表２にとして示されている、ＩＥＥＥ浮動小数点データ形式の非数ＮａＮ（Not a Number）を検出し、その検出結果を、乗算回路４内の部分積制御回路４２と、選択回路１３とに送信する。ここでは、シグナル型のｓＮａＮと、クワイエット型のｑＮａＮが例示されている。他の構成は、図１に示す構成と同じである。
【００５４】
（第２の実施の形態の動作）
ＩＥＥＥ浮動小数点演算では、浮動小数点の演算の結果として、不正なオペランドが与えられたために生じた結果を非数ＮａＮとして出力するため、乗算回路４の結果は参照されない。したがって、浮動小数点乗算命令時に非数検出回路１４の出力が非数である場合、部分積制御回路４２より部分積生成回路４１の全ての領域にｏｆｆ信号を供給すれば、部分積生成回路４１以降の回路全体の動作を停止させることが出来、このことにより、一層の消費電力を低減できる。
【００５５】
（第２の実施の形態による効果）
本実施の形態によるベクトル乗算処理装置２０によれれば、ＩＥＥＥ浮動小数点データ形式の非数を検出し、非数が検出された場合、部分積制御回路４２より部分積生成回路４１の全ての領域にｏｆｆ信号を供給することで部分積生成回路４１以降の回路全体の動作を停止させることができ、この場合、一層の消費電力の削減が可能になる。
【００５６】
なお、図１、図９のベクトル乗算処理装置２０の乗算回路４が有する機能は、全てをソフトウェアによって実現しても、あるいはその少なくとも一部をハードウェアで実現してもよい。例えば、乗算回路４が、オーバーフロー先見回路５とスティッキービット先見回路６とを使用し、入力される第１オペランドと第２オペランドとの部分積を生成し、乗算命令とデータ形式とに応じて、部分積の生成に関し、結果的に参照されない特定範囲の回路動作を抑止する制御信号を生成し、部分積の生成を制御するデータ処理は、１または複数のプログラムによりコンピュータ上で実現してもよく、また、その少なくとも一部をハードウェアで実現してもよい。
【００５７】
以上好ましい実施の形態と実施例をあげて本発明を説明したが、本発明は必ずしも、上述実施の形態及び実施例に限定されるものでなく、その技術的思想の範囲内において様々に変形して実施することができる。
【符号の説明】
【００５８】
１、２：ベクトルレジスタ
３：前処理回路
４：乗算回路
５：固定小数点オーバーフロー先見回路
６：スティッキービット先見回路
７：浮動小数点加算器
８：固定小数点加算器
９：指数部加算器
１０：０カウンタ
１１：正規化丸め回路
１２：指数部補正回路
１３：選択回路
１４：非数検出回路
２０：ベクトル乗算処理装置
４１：部分積生成回路
４２：部分積制御回路
４３：デコーダ
４４：部分積加算器
【図１】
2010238011.tif 000003
【図２】
2010238011.tif 000004
【図３】
2010238011.tif 000005
【図４】
2010238011.tif 000006
【図５】
2010238011.tif 000007
【図６】
2010238011.tif 000008
【図７】
2010238011.tif 000009
【図８】
2010238011.tif 000010
【図９】
2010238011.tif 000011
【図１０】
2010238011.tif 000012