(57)【要約】【課題】演算処理装置の回路規模の増大を抑制する。【解決手段】演算処理装置が有する浮動小数点積和演算器において、指数設定部は、積和演算命令に含まれる第１オペランドと第２オペランドのいずれかまたは両方がゼロである場合、第１オペランドの指数を第１設定値に設定し、第２オペランドの指数を第２設定値に設定する。指数算出部は、指数設定部が出力する第１および第２オペランドの指数と、積和演算命令に含まれる第３オペランドの指数とに基づいて、積和演算により得られる指数を算出する。第１設定値と第２設定値の和は、第３オペランドのビット位置が、第１オペランドと第２オペランドの積の最上位ビットより上位ビット側に位置するように設定される。これにより、第３オペランドをバイパスさせる配線および回路を不要にでき、演算処理装置の回路規模の増大を抑制することができる。【選択図】図１
2020064504.tif 000002
【特許請求の範囲】
【請求項１】
浮動小数点積和演算器を有する演算処理装置において、
前記浮動小数点積和演算器は、
積和演算命令に含まれる第１オペランドと第２オペランドのいずれか、または前記第１オペランドと前記第２オペランドの両方がゼロであることを検出するゼロ検出部と、
前記ゼロ検出部がゼロを検出した場合、前記第１オペランドの指数を第１設定値に設定し、前記第２オペランドの指数を第２設定値に設定する指数設定部と、
前記指数設定部が出力する前記第１オペランドの指数と前記第２オペランドの指数と、前記積和演算命令に含まれる第３オペランドの指数とに基づいて、積和演算により得られる指数を算出する指数算出部と、
前記第１オペランドの仮数と前記第２オペランドの仮数との積を算出する乗算部と、
前記乗算部が算出した積に、桁合わせした前記第３オペランドの仮数を加算する加算部と、を有し、
前記第１設定値と前記第２設定値の和は、前記第３オペランドのビット位置が、前記第１オペランドと前記第２オペランドの積の最上位ビットより上位ビット側に位置するように設定されることを特徴とする演算処理装置。
【請求項２】
前記加算部が、仮数の最下位ビットより下位に位置する所定数の付加ビットを使用して演算を実行する場合、さらに前記第１設定値と前記第２設定値の和は、前記第３オペランドの仮数に付加される前記付加ビットの最下位ビットが、前記第１オペランドと前記第２オペランドの積の最上位ビットと同じ位置か、あるいは前記最上位ビットより上位ビット側に位置するように設定されることを特徴とする請求項１に記載の演算処理装置。
【請求項３】
指数のバイアスをｂｉａｓ、仮数のビット幅をｎとする場合、前記第１設定値と前記第２設定値の和は、”ｂｉａｓ＋１−（ｎ＋３）”以下に設定されることを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項４】
指数のバイアスをｂｉａｓ、前記加算部が演算に使用するビット幅をＷ１、前記第１オペランドと前記第２オペランドとの積のビット幅Ｗ２とする場合、前記第１設定値と前記第２設定値の和は、”ｂｉａｓ−（Ｗ１−Ｗ２）”以下に設定されることを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項５】
前記第１設定値と前記第２設定値とは、”１”に設定されることを特徴とする請求項１または請求項２に記載の演算処理装置。
【請求項６】
前記指数設定部は、
前記ゼロ検出部が非ゼロを検出した場合、前記第１オペランドの指数を選択し、前記ゼロ検出部がゼロを検出した場合、前記第１設定値を前記第１オペランドの指数として選択する第１選択部と、
前記ゼロ検出部が非ゼロを検出した場合、前記第２オペランドの指数を選択し、前記ゼロ検出部がゼロを検出した場合、前記第２設定値を前記第２オペランドの指数として選択する第２選択部と、を有し、
前記指数算出部は、
前記第１選択部が出力する前記第１オペランドの指数と、前記第２選択部が出力する前記第２オペランドの指数とを加算する加算器と、
前記加算器が出力する加算結果と前記第３オペランドの指数とに基づいて、加算結果または前記第３オペランドの指数のいずれかを積和演算により得られる指数として選択する第３選択部と、を有することを特徴とする請求項１ないし請求項５のいずれか１項に記載の演算処理装置。
【請求項７】
前記第１オペランド、前記第２オペランドおよび前記第３オペランドは、ＩＥＥＥ７５４の２進浮動小数点形式で表現されることを特徴とする請求項１ないし請求項６のいずれか１項に記載の演算処理装置。
【請求項８】
浮動小数点積和演算器を有する演算処理装置の制御方法において、
前記浮動小数点積和演算器が有するゼロ検出部が、積和演算命令に含まれる第１オペランドと第２オペランドのいずれか、または前記第１オペランドと前記第２オペランドの両方がゼロであることを検出し、
前記浮動小数点積和演算器が有する指数設定部が、前記ゼロ検出部がゼロを検出した場合、前記第１オペランドの指数を第１設定値に設定し、前記第２オペランドの指数を第２設定値に設定し、
前記浮動小数点積和演算器が有する指数算出部が、前記指数設定部が出力する前記第１オペランドの指数と前記第２オペランドの指数と、積和演算命令に含まれる第３オペランドの指数とに基づいて、積和演算により得られる指数を算出し、
前記浮動小数点積和演算器が有する乗算部が、前記第１オペランドの仮数と前記第２オペランドの仮数との積を算出し、
前記浮動小数点積和演算器が有する加算部が、前記乗算部が算出した積に、桁合わせした前記第３オペランドの仮数を加算し、
前記第１設定値と前記第２設定値の和は、前記第３オペランドのビット位置が、前記第１オペランドと前記第２オペランドの積の最上位ビットより上位ビット側に位置するように設定されることを特徴とする演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、演算処理装置および演算処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置に含まれる積和演算器において、乗算するオペランドの一方がゼロの場合、乗算結果に加算されるオペランドを積和演算の結果としてバイパスさせる手法が提案されている（例えば、特許文献１参照）。また、積和演算器において、入力されるオペランドが非正規化数、非数、無限大、ゼロ等の特殊数を示す場合、バイパス経路を使用して、オペランドを様々な回路ブロックに伝搬させる手法が提案されている（例えば、特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１４−９３０８５号公報
【特許文献２】特開２００９−１４０４９１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
乗算結果に加算されるオペランドをバイパスさせる経路を積和演算器に設ける場合、積和演算器の回路規模が増大するという問題がある。例えば、浮動小数点積和演算器の場合、乗算結果に加算されるオペランドの指数と仮数との両方に対してバイパス経路が設けられる。また、通常の積和演算の演算結果が伝達される経路とバイパス経路とのいずれかを選択するセレクタが、指数と仮数とのそれぞれに設けられる。
【０００５】
１つの側面では、本発明は、演算処理装置の回路規模の増大を抑制することを目的とする。
【課題を解決するための手段】
【０００６】
一つの観点によれば、浮動小数点積和演算器を有する演算処理装置において、前記浮動小数点積和演算器は、積和演算命令に含まれる第１オペランドと第２オペランドのいずれか、または前記第１オペランドと前記第２オペランドの両方がゼロであることを検出するゼロ検出部と、前記ゼロ検出部がゼロを検出した場合、前記第１オペランドの指数を第１設定値に設定し、前記第２オペランドの指数を第２設定値に設定する指数設定部と、前記指数設定部が出力する前記第１オペランドの指数と前記第２オペランドの指数と、前記積和演算命令に含まれる第３オペランドの指数とに基づいて、積和演算により得られる指数を算出する指数算出部と、前記第１オペランドの仮数と前記第２オペランドの仮数との積を算出する乗算部と、前記乗算部が算出した積に、桁合わせした前記第３オペランドの仮数を加算する加算部と、を有し、前記第１設定値と前記第２設定値の和は、前記第３オペランドのビット位置が、前記第１オペランドと前記第２オペランドの積の最上位ビットより上位ビット側に位置するように設定される。
【発明の効果】
【０００７】
１つの側面では、本発明は、演算処理装置の回路規模の増大を抑制することができる。
【図面の簡単な説明】
【０００８】
【図１】一実施形態における演算処理装置の一例を示す図である。
【図２】図１の演算処理装置の動作の一例を示す図である。
【図３】別の実施形態における演算処理装置を含む情報処理装置の一例を示す図である。
【図４】図３の積和演算器の一例を示す図である。
【図５】図４の積和演算器による積和演算の一例を示す図である。
【図６】図４の積和演算器による積和演算の別の例を示す図である。
【図７】図４の積和演算器による積和演算の別の例を示す図である。
【図８】図４の積和演算器による積和演算の別の例を示す図である。
【図９】図４の積和演算器の動作フローの一例を示す図である。
【図１０】図４の積和演算器が半精度である場合の積和演算の一例を示す図である。
【図１１】図４の積和演算器が倍精度である場合の積和演算の一例を示す図である。
【図１２】他の浮動小数点積和演算器の一例を示す図である。
【発明を実施するための形態】
【０００９】
以下、図面を用いて実施形態が説明される。
【００１０】
図１は、一実施形態における演算処理装置の一例を示す。図１に示す演算処理装置１は、浮動小数点積和演算器１０を有する。演算処理装置１は、スカラ方式またはスーパ−スカラ方式のＣＰＵ（Central  Processing  Unit）でもよく、ＧＰＵ（Graphics  Processing  Unit）、あるいは深層学習に使用されるプロセッサでもよい。
【００１１】
なお、図示は省略するが、演算処理装置１は、浮動小数点積和演算器１０が実行する命令を格納する命令バッファ、命令の実行に使用するデータを保持するレジスタ等を有してもよい。また、演算処理装置１は、複数の積和演算を並列に実行する複数の浮動小数点積和演算器１０を有してもよい。以下では、浮動小数点積和演算器１０は、単に積和演算器１０とも称される。
【００１２】
積和演算器１０は、積和演算命令のオペランドで指定される浮動小数点数ＯＰ１、ＯＰ２、ＯＰ３を受ける。積和演算器１０は、式（１）に示すように、浮動小数点数ＯＰ１、ＯＰ２の積を算出し、算出した積に浮動小数点数ＯＰ３を加えて、浮動小数点数ＯＰ４として出力する。
ＯＰ４＝ＯＰ１＊ＯＰ２＋ＯＰ３  ‥（１）
【００１３】
例えば、浮動小数点数ＯＰ１、ＯＰ２、ＯＰ３は入力オペランドであり、浮動小数点数ＯＰ４は出力オペランドである。式（１）において、符号”＊”は、乗算を示す。
【００１４】
浮動小数点数ＯＰ１は、指数ＯＰ１Ｅと仮数ＯＰ１Ｆとを含み、浮動小数点数ＯＰ２は、指数ＯＰ２Ｅと仮数ＯＰ２Ｆとを含む。浮動小数点数ＯＰ３は、指数ＯＰ３Ｅと仮数ＯＰ３Ｆとを含み、浮動小数点数ＯＰ４は、指数ＯＰ４Ｅと仮数ＯＰ４Ｆとを含む。なお、浮動小数点数ＯＰ１、ＯＰ２、ＯＰ３、ＯＰ４は、符号を含むが、以下の説明では、浮動小数点数ＯＰ１、ＯＰ２、ＯＰ３、ＯＰ４は、ゼロ以上であるとし、符号の説明および符号に関係する回路の動作は省略される。以下では、浮動小数点数ＯＰ１、ＯＰ２、ＯＰ３、ＯＰ４は、それぞれオペランドＯＰ１、ＯＰ２、ＯＰ３、ＯＰ４とも称される。
【００１５】
積和演算器１０は、ゼロ検出部１１、指数設定部１２、指数算出部１３、乗算部１４、桁合わせ部１５および加算部１６を有する。
【００１６】
ゼロ検出部１１は、オペランドＯＰ１がゼロか否を検出するゼロ検出器１１ａと、オペランドＯＰ２がゼロか否かを検出するゼロ検出器１１ｂとを有する。ゼロ検出部１１は、ゼロ検出器１１ａ、１１ｂの一方または両方がゼロを検出した場合、ゼロ検出信号ＺＤＥＴを指数設定部１２に出力する。例えば、ゼロ検出部１１は、ゼロ検出器１１ａ、１１ｂの検出結果のオア論理をゼロ検出信号ＺＤＥＴとして出力する。オア論理は、正論理であっても負論理であってもよい。
【００１７】
指数設定部１２は、セレクタ１２ａ、１２ｂを有する。セレクタ１２ａは、ゼロ検出信号ＺＤＥＴがゼロの検出を示す場合、予め設定された設定値ＰＶ１Ｅを選択し、選択した設定値ＰＶ１Ｅを指数ＯＰ１ＥＳとして指数算出部１３および桁合わせ部１５に出力する。セレクタ１２ａは、ゼロ検出信号ＺＤＥＴがゼロの検出を示さない場合（ゼロ以外の検出を示す場合）、オペランドＯＰ１の指数ＯＰ１Ｅを選択し、選択した指数ＯＰ１Ｅを指数ＯＰ１ＥＳとして指数算出部１３および桁合わせ部１５に出力する。
【００１８】
セレクタ１２ｂは、ゼロ検出信号ＺＤＥＴがゼロの検出を示す場合、予め設定された設定値ＰＶ２Ｅを選択し、選択した設定値ＰＶ２Ｅを指数ＯＰ２ＥＳとして指数算出部１３および桁合わせ部１５に出力する。セレクタ１２ｂは、ゼロ検出信号ＺＤＥＴがゼロの検出を示さない場合（ゼロ以外の検出を示す場合）、オペランドＯＰ２の指数ＯＰ２Ｅを選択し、選択した指数ＯＰ２Ｅを指数ＯＰ２ＥＳとして指数算出部１３および桁合わせ部１５に出力する。すなわち、指数設定部１２は、ゼロ検出部１１がゼロを検出した場合、指数ＯＰ１ＥＳを設定値ＰＶ１Ｅに設定し、指数ＯＰ２ＥＳを設定値ＰＶ２Ｅに設定する。
【００１９】
ここで、設定値ＰＶ１Ｅ、ＰＶ２Ｅの和は、オペランドＯＰ３のビット位置が、オペランドＯＰ１、ＯＰ２の積の最上位ビットより上位ビット側に位置するように設定される。設定値ＰＶ１Ｅ、ＰＶ２Ｅの和は、オペランドＯＰ１、ＯＰ２の積の指数に相当する。例えば、設定値ＰＶ１Ｅ、ＰＶ２Ｅは、指数ＯＰ１Ｅ、ＯＰ２Ｅが取り得る最小の値に設定される。これにより、オペランドＯＰ１、ＯＰ２の一方または両方がゼロの場合、積和演算により得られるオペランドＯＰ４の値を、オペランドＯＰ３の値にすることができる。
【００２０】
換言すれば、オペランドＯＰ３をオペランドＯＰ４として出力するためのバイパス経路を設けることなく、オペランドＯＰ４の値を、オペランドＯＰ３の値にすることができる。また、図１に示す積和演算器１０は、指数ＯＰ１Ｅ、ＯＰ２Ｅに対応するセレクタ１２ａ、１２ｂを含むが、仮数ＯＰ１Ｆ、ＯＰ２Ｆに対応するセレクタを含まない。通常、仮数のビット数は指数のビット数より多い。この結果、バイパス経路を設ける場合に比べて、積和演算器１０の回路規模の増大を抑止することができる。
【００２１】
指数算出部１３は、指数ＯＰ１ＥＳ（ＯＰ１ＥまたはＰＶ１Ｅ）と、指数ＯＰ２ＥＳ（ＯＰ２ＥまたはＰＶ２Ｅ）と、オペランドＯＰ３の指数ＯＰ３Ｅとに基づいて、積和演算により得られるオペランドＯＰ４の指数ＯＰ４Ｅを算出する。なお、指数算出部１３が算出した指数ＯＰ４Ｅは、加算部１６による仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆの加算結果に基づいて、補正されてもよい。
【００２２】
乗算部１４は、オペランドＯＰ１の仮数ＯＰ１ＦとオペランドＯＰ２の仮数ＯＰ２Ｆとの積ＯＰ１Ｆ＊ＯＰ２Ｆを算出する。なお、符号”＊”は積を示す。桁合わせ部１５は、指数ＯＰ１ＥＳ、ＯＰ２ＥＳの和から指数ＯＰ３Ｅを減じることで、仮数ＯＰ３Ｆの桁を積ＯＰ１Ｆ＊ＯＰ２Ｆの桁に合わせるためのシフト量を算出する。
【００２３】
加算部１６は、乗算部１４が算出した積ＯＰ１Ｆ＊ＯＰ２Ｆに、桁合わせしたオペランドＯＰ３の仮数ＯＰ３Ｆを加算し、積和演算により得られるオペランドＯＰ４の仮数ＯＰ４Ｆを算出する。そして、積和演算器１０は、積和演算の結果ＯＰ１＊ＯＰ２＋ＯＰ３をオペランドＯＰ４として出力する。例えば、オペランドＯＰ４は、レジスタに格納される。
【００２４】
図２は、図１の演算処理装置１の動作の一例を示す。すなわち、図２は、演算処理装置１の制御方法の一例を示す。図２に示す動作は、積和演算器１０に浮動小数点数の積和演算命令が発行されたことに基づいて開始される。
【００２５】
まず、ステップＳ１において、ゼロ検出部１１は、オペランドＯＰ１がゼロか否かを検出し、オペランドＯＰ２がゼロか否かを検出する。積和演算器１０は、オペランドＯＰ１、ＯＰ１の一方または両方がゼロの場合、動作をステップＳ２に移行し、オペランドＯＰ１、ＯＰ１の両方ともゼロでない場合、動作をステップＳ３に移行する。
【００２６】
ステップＳ２において、指数設定部１２は、指数ＯＰ１Ｅの代わりに設定値ＰＶ１Ｅを選択し、指数ＯＰ１ＥＳとして指数算出部１３に出力する。また、積和演算器１０は、指数ＯＰ２Ｅの代わりに設定値ＰＶ２Ｅを選択し、指数ＯＰ２ＥＳとして指数算出部１３に出力する。ステップＳ２の後、動作はステップＳ４に移行される。ステップＳ３において、指数設定部１２は、指数ＯＰ１Ｅ、ＯＰ２Ｅを選択し、指数ＯＰ１ＥＳ、ＯＰ２ＥＳとして指数算出部１３に出力し、動作をステップＳ４に移行する。
【００２７】
ステップＳ４において、指数算出部１３は、指数設定部１２から受信する指数ＯＰ１ＥＳ、ＯＰ２ＥＳとオペランドＯＰ３の指数ＯＰ３Ｅとに基づいて、指数ＯＰ４Ｅを算出し、動作をステップＳ５に移行する。なお、指数ＯＰ４Ｅは、ステップＳ７において、補正されてもよい。
【００２８】
ステップＳ５において、乗算部１４は、仮数ＯＰ１Ｆ、ＯＰ２Ｆの積ＯＰ１Ｆ＊ＯＰ２Ｆを算出し、動作をステップＳ６に移行する。なお、ステップＳ５は、ステップＳ４より前に開始されてもよい。ステップＳ６において、加算部１６は、乗算部１４が算出した積ＯＰ１Ｆ＊ＯＰ２Ｆに、桁合わせしたオペランドＯＰ３の仮数ＯＰ３Ｆを加算することで、仮数の積和演算の結果である仮数ＯＰ４Ｆを算出し、動作をステップＳ７に移行する。なお、加算部１６が使用する仮数ＯＰ３Ｆの桁合わせは、桁合わせ部１５により実行される。
【００２９】
ステップＳ７において、積和演算器１０は、例えば、加算部１６により算出された仮数ＯＰ４Ｆの正規化処理および丸め処理等を実行し、仮数の積和演算の結果である仮数ＯＰ４Ｆを補正する。また、積和演算器１０は、正規化処理の結果および丸め処理の結果に基づいて、指数算出部１３により算出された指数ＯＰ４Ｅを補正する。そして、積和演算の結果が、オペランドＯＰ４（ＯＰ４Ｅ、ＯＰ４Ｆ）として出力される。
【００３０】
図２のかぎ括弧内は、オペランドＯＰ１、ＯＰ２の積ＯＰ１＊ＯＰ２と、オペランドＯＰ３との大きさの位置関係の一例を示す。横軸は桁を示しており、図２の左側が上位側を示す。例えば、オペランドＯＰ３は、仮数ＯＰ３Ｆを示し、積ＯＰ１＊ＯＰ２は、仮数の積ＯＰ１Ｆ＊ＯＰ２Ｆを示す。
【００３１】
図２のかぎ括弧内は２進数での表記を示し、各値の左下の黒丸は小数点の位置を示す。例えば、仮数ＯＰ３Ｆおよび図示しない仮数ＯＰ１Ｆ、ＯＰ２Ｆの整数部が１桁で表される場合、積ＯＰ１＊ＯＰ２の整数部は最大で２桁（整数第１位と第２位）になる。特に限定されないが、仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆは、２４ビットであり、仮数の積ＯＰ１Ｆ＊ＯＰ２Ｆは、４８ビットである。
【００３２】
積ＯＰ１＊ＯＰ２の最上位ビットが、オペランドＯＰ３の最下位ビットより下位ビット側に位置し、オペランドＯＰ１、ＯＰ２の一方または両方がゼロの場合、仮数の積ＯＰ１Ｆ＊ＯＰ２Ｆはゼロになるため、積和演算の結果の仮数ＯＰ４Ｆは仮数ＯＰ３Ｆと等しくなる。一方、積ＯＰ１＊ＯＰ２の最上位ビットが、オペランドＯＰ３の最下位ビットより下位ビット側に位置し、オペランドＯＰ１、ＯＰ２がゼロでない場合、積ＯＰ１＊ＯＰ２の丸め方によっては、仮数ＯＰ３Ｆへの桁上がりが生じる。このため、仮数ＯＰ４Ｆは仮数ＯＰ３Ｆと等しくなるとは限らない。
【００３３】
この実施形態では、積ＯＰ１＊ＯＰ２の最上位ビットが、オペランドＯＰ３の最下位ビットより下位ビット側に位置するように、設定値ＰＶ１Ｅ、ＰＶ２Ｅの和が設定される。これにより、指数ＯＰ３Ｅおよび仮数ＯＰ３Ｆのバイパス経路とセレクタとを積和演算器１０に設けることなく、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合、オペランドＯＰ３をオペランドＯＰ４として出力することができる。すなわち、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロであることを検出してオペランドＯＰ３をオペランドＯＰ４として出力する場合に、積和演算器１０の回路規模の増大を抑制することができる。
【００３４】
なお、加算部１６は、積ＯＰ１Ｆ＊ＯＰ２Ｆまたは仮数ＯＰ３Ｆの最下位ビットより下位に付加される所定数の付加ビットを演算結果に含めてもよい。この場合、設定値ＰＶ１Ｅ、ＰＶ２Ｅの和は、仮数ＯＰ３Ｆに付加される付加ビットの最下位ビットが、仮数ＯＰ１Ｆ、ＯＰ２Ｆの積の最上位ビットと同じ位置か、あるいは最上位ビットより上位ビット側に位置するように設定されてもよい。
【００３５】
以上、図１および図２に示す実施形態では、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロであることを検出してオペランドＯＰ３をオペランドＯＰ４として出力する場合に、積和演算器１０の回路規模の増大を抑制することができる。
【００３６】
図３は、別の実施形態における演算処理装置を含む情報処理装置の一例を示す。図１および図２で説明した要素および機能と同様の要素および機能については、詳細な説明は省略される。図３において、実線の矢印は、演算命令またはデータが転送される信号線を示し、破線の矢印は、制御信号等の各種の指示が転送される信号線を示す。
【００３７】
図３に示す情報処理装置３００は、例えば、サーバであり、ホストコンピュータ２００と、通信インタフェース２０１を介してホストコンピュータ２００に接続された制御装置２０２とを有する。例えば、通信インタフェース２０１は、ＰＣＩ（Peripheral  Component  Interconnect）バスであり、制御装置２０２は、ホストコンピュータ２００のＰＣＩスロットに装着されるＰＣＩカードである。なお、制御装置２０２は、ホストコンピュータ２００内に含まれてもよい。ホストコンピュータ２００は通信インタフェース２０１を通して制御装置２０２上のプロセッサ２０３の制御を行う。
【００３８】
制御装置２０２は、プロセッサ２０３およびメモリ２０４を有する。メモリ２０４は、例えば、複数のメモリチップが積層されたメモリモジュールであり、プロセッサ２０３に実行させる演算命令列、演算データおよびプロセッサ２０３の動作を制御する制御命令列を保持し、演算結果が格納される。
【００３９】
プロセッサ２０３は、通信制御部２０５、メモリコントローラ２０６、全体命令制御部２０７および複数の処理ユニット２０８を有する。例えば、プロセッサ２０３は、深層学習に使用されるプロセッサであり、演算処理装置の一例である。なお、図３では、プロセッサ２０３は、１６個の処理ユニット２０８を有するが、処理ユニット２０８の数は、１６個に限定されない。また、制御装置２０２は、複数のプロセッサ２０３を有してもよい。
【００４０】
通信制御部２０５は、ホストコンピュータ２００とプロセッサ２０３との間での命令列、データ、制御情報の転送を制御する。メモリコントローラ２０６は、全体命令制御部２０７および通信制御部２０５からの指示に基づいて動作する。メモリコントローラ２０６は、ホストコンピュータ２００とメモリ２０４との間、全体命令制御部２０７とメモリ２０４との間、各処理ユニット２０８とメモリ２０４との間での命令列およびデータの転送を制御する。
【００４１】
全体命令制御部２０７は、通信制御部２０５を介してホストコンピュータ２００から受信した指示に基づいて、プロセッサ２０３全体の動作を制御し、プロセッサ２０３による演算処理の終了等の応答をホストコンピュータ２００に出力する。
【００４２】
各処理ユニット２０８は、演算命令バッファ２０９、演算命令制御部２１０、複数のベクタレジスタ２１１、複数の積和演算器１００を有する。例えば、積和演算器１００は、単精度（３２ビット）の浮動小数点積和演算器である。なお、積和演算器１００は、半精度（１６ビット）または倍精度（６４ビット）の浮動小数点積和演算器でもよい。特に限定されないが、各処理ユニット２０８は、数百個から数千個の積和演算器１００を含んでもよい。また、各処理ユニット２０８は、積和演算器１００に加えて加算器、論理演算器、乗算器、除算器等を含んでもよい。
【００４３】
演算命令バッファ２０９は、メモリコントローラ２０６を介してメモリ２０４から読み出された演算命令を保持し、演算命令制御部２１０からの指示に基づいて、保持している演算命令を演算命令制御部２１０へ出力する。演算命令制御部２１０は、演算命令バッファ２０９から受信する演算命令に基づき、ベクタレジスタ２１１および積和演算器１００を制御する。
【００４４】
ベクタレジスタ２１１は、メモリコントローラ２０６を介してメモリ２０４から読み出された演算用のデータを保持し、積和演算器１００によって実行された積和演算の演算結果を保持する。積和演算器１００は、ベクタレジスタ２１１から取り出したデータを使用して積和演算を行い、演算結果をベクタレジスタ２１１へ格納する。
【００４５】
以下、情報処理装置３００による積和演算処理の動作の概要が説明される。積和演算処理を実行する場合、ホストコンピュータ２００は、通信制御部２０５とメモリコントローラ２０６とを介してメモリ２０４に制御命令列、演算命令列、演算データを格納する。次に、ホストコンピュータ２００は、通信制御部２０５を経由して全体命令制御部２０７に、メモリ２０４に保持された制御命令列を読み出して実行することを指示する。
【００４６】
全体命令制御部２０７は、ホストコンピュータ２００からの指示に基づいて、メモリコントローラ２０６を制御し、メモリ２０４から制御命令列を取り出す。そして、取り出した制御命令列の各命令にしたがって、メモリ２０４から演算命令列および演算データを読み出す指示をメモリコントローラ２０６に発行する。
【００４７】
メモリコントローラ２０６は、全体命令制御部２０７からの指示に基づいて、メモリ２０４から演算命令と演算データとを読み出し、読み出した演算命令を、演算を実行させる処理ユニット２０８の演算命令バッファ２０９に格納する。また、メモリコントローラ２０６は、読み出した演算データを、演算を実行させる処理ユニット２０８の各ベクタレジスタ２１１に格納する。
【００４８】
この後、全体命令制御部２０７は、演算を実行させる処理ユニット２０８の演算命令制御部２１０に演算の開始を指示する。指示を受けた演算命令制御部２１０は、演算命令バッファ２０９から演算命令を取り出し、ベクタレジスタ２１１と積和演算器１００とを制御して、積和演算を実行させる。例えば、演算命令制御部２１０は、データの読み出しの指示と、積和演算器１００から転送される演算結果の書き込みの指示をベクタレジスタ２１１に発行する。また、演算命令制御部２１０は、ベクタレジスタ２１１から読み出されるデータを使用して演算を実行する指示と、演算結果をベクタレジスタ２１１に出力する指示とを積和演算器１００に発行する。
【００４９】
全体命令制御部２０７からの指示に基づいて、ベクタレジスタ２１１は、演算に使用するデータを積和演算器１００に出力し、積和演算器１００は、演算を実行し、演算結果をベクタレジスタ２１１に出力する。各演算命令制御部２１０は、演算の終了に基づいて、全体命令制御部２０７に演算の終了を通知する。全体命令制御部２０７は、各演算命令制御部２１０およびメモリコントローラ２０６に、演算結果のメモリ２０４への書き込みを指示する。演算命令制御部２１０は、ベクタレジスタ２１１に、演算結果の読み出しと、読み出した演算結果のメモリコントローラ２０６への転送を指示する。メモリコントローラ２０６は、各処理ユニット２０８から送られてくる演算結果をメモリ２０４に書き込む。
【００５０】
全体命令制御部２０７は、演算結果のメモリ２０４への書き込みの完了に基づいて、ホストコンピュータ２００に演算処理の完了を報告する。ホストコンピュータ２００は、演算処理の完了の報告に基づいて、通信制御部２０５およびメモリコントローラ２０６を介して、メモリ２０４が保持する演算結果のホストコンピュータ２００への転送を指示し、演算結果を回収する。
【００５１】
図４は、図３の積和演算器１００の一例を示す。積和演算器１００は、ゼロ検出器１０２、１０４、オアゲート１０６、セレクタ１０８、１１０、加算器１１２、減算器１１４、セレクタ１１６および指数補正回路１１８を有する。また、積和演算器１００は、シフタ１２０、ブースエンコーダ１２２、部分積加算回路１２４、加算器１２６、左シフタ１２８および丸め回路１３０を有する。
【００５２】
例えば、積和演算器１００は、ＩＥＥＥ（The  Institute  of  Electrical  and  Electronics  Engineers）７５４（浮動小数点数演算標準）を採用する。ＩＥＥＥ７５４の２進浮動小数点形式では、単精度（３２ビット）の浮動小数点数は、１ビットの符号と８ビットの指数と２３ビットの仮数とを含む。なお、図４では、説明を簡単にするために、入力オペランドＯＰ１、ＯＰ２、ＯＰ３は、ゼロ以上であるとし、符号の算出に使用される回路の記載を省略する。
【００５３】
ゼロ検出器１０２は、指数ＯＰ１Ｅおよび仮数ＯＰ１Ｆに基づいてオペランドＯＰ１がゼロか否かを検出し、オペランドＯＰ１がゼロの場合、論理１を出力し、オペランドＯＰ１がゼロ以外の場合、論理０を出力する。ゼロ検出器１０４は、指数ＯＰ２Ｅおよび仮数ＯＰ２Ｆに基づいてオペランドＯＰ２がゼロか否かを検出し、オペランドＯＰ２がゼロの場合、論理１を出力し、オペランドＯＰ２がゼロ以外の場合、論理０を出力する。
【００５４】
例えば、ゼロ検出器１０２は、指数ＯＰ１Ｅ、ＯＰ１Ｆの両方がゼロの場合、オペランドＯＰ１のゼロを検出する。ゼロ検出器１０４は、オペランドＯＰ２Ｅ、ＯＰ２Ｆの両方がゼロの場合、オペランドＯＰ２のゼロを検出する。ゼロ検出器１０２、１０４は、ゼロ検出部の一例である。
【００５５】
オアゲート１０６は、ゼロ検出器１０２、１０４の出力をオア演算し、演算結果をゼロ検出信号ＺＤＥＴとしてセレクタ１０８、１１０に出力する。すなわち、オアゲート１０６は、オペランドＯＰ１、ＯＰ２の一方または両方がゼロの場合、論理１のゼロ検出信号ＺＤＥＴを出力し、オペランドＯＰ１、ＯＰ２の両方がゼロでない場合、論理０のゼロ検出信号ＺＤＥＴを出力する。なお、ゼロ検出器１０２、１０４がゼロの検出時に出力する論理は”０”でもよく、この場合、負論理のオアゲート１０６（例えば、ＮＡＮＤゲート）が使用される。
【００５６】
セレクタ１０８は、論理０のゼロ検出信号ＺＤＥＴを受けた場合、指数ＯＰ１Ｅを選択して指数ＯＰ１ＥＳとして出力し、論理１のゼロ検出信号ＺＤＥＴを受けた場合、”１”を選択して指数ＯＰ１ＥＳとして出力する。セレクタ１１０は、論理０のゼロ検出信号ＺＤＥＴを受けた場合、指数ＯＰ２Ｅを選択して指数ＯＰ２ＥＳとして出力し、論理１のゼロ検出信号ＺＤＥＴを受けた場合、”１”を選択して指数ＯＰ２ＥＳとして出力する。オアゲート１０６およびセレクタ１０８、１１０は、指数設定部の一例である。また、セレクタ１０８は、第１選択部の一例であり、セレクタ１１０は、第２選択部の一例である。セレクタ１０８が選択する”１”は、第１設定値の一例であり、セレクタ１１０が選択する”１”は、第２設定値の一例である。
【００５７】
加算器１１２は、セレクタ１０８、１１０から出力される指数ＯＰ１ＥＳ、ＯＰ２ＥＳを加算し、加算した値からバイアス”１２７”を引き、オペランドＯＰ１、ＯＰ２を乗算した場合の指数を算出する。加算器１１２は、算出した指数を減算器１１４およびセレクタ１１６に出力する。なお、積和演算器１００が半精度（１６ビット）の場合、加算値からバイアス”１５”が引かれ、積和演算器１００が倍精度（６４ビット）の場合、加算値からバイアス”１０２３”が引かれる。
【００５８】
減算器１１４は、加算器１１２から出力される指数からオペランドＯＰ３の指数ＯＰ３Ｅを減じて、オペランドＯＰ１、ＯＰ２を乗算した場合の指数と指数ＯＰ３Ｅとの差ＤＩＦＥを算出し、算出した差ＤＩＦＥをセレクタ１１６およびシフタ１２０に出力する。
【００５９】
セレクタ１１６は、差ＤＩＦＥが０以上の場合、加算値から出力される指数を選択し、差ＤＩＦＥが負の場合、オペランドＯＰ３の指数ＯＰ３Ｅを選択し、選択した指数を指数補正回路１１８に出力する。すなわち、セレクタ１１６は、加算器１１２から出力される指数と指数ＯＰ３Ｅのうち、大きい方の指数を選択する。加算器１１２、減算器１１４およびセレクタ１１６は、指数算出部の一例である。また、セレクタ１１６は、第３選択部の一例である。
【００６０】
シフタ１２０は、減算器１１４から出力される差ＤＩＦＥに基づいて、仮数ＯＰ３Ｆのビットをシフトする。減算器１１４から出力される差ＤＩＦＥが正値の場合、指数ＯＰ３ＥはオペランドＯＰ１、ＯＰ２の乗算結果の指数または”２”よりも小さいため、シフタ１２０は、仮数ＯＰ３Ｆのビットを差ＤＩＦＥに基づいて右シフトする。
【００６１】
減算器１１４から出力される差ＤＩＦＥが負値の場合、指数ＯＰ３ＥがオペランドＯＰ１、ＯＰ２の乗算結果の指数または”２”よりも大きいため、シフタ１２０は、仮数ＯＰ３Ｆのビットを差ＤＩＦＥに基づいて左シフトする。これにより、オペランドＯＰ３の小数点の位置が、仮数ＯＰ１Ｆ、ＯＰ２Ｆの乗算結果の小数点の位置に合わせられる。なお、シフタ１２０のシフト量は、オペランドＯＰ３の仮数ＯＰ３Ｆの小数点の位置が、加算器１２６のビット幅からはみ出ないように制限される。
【００６２】
ブースエンコーダ１２２および部分積加算回路１２４は、乗数である仮数ＯＰ１Ｆと被乗数である仮数ＯＰ２Ｆとの積を算出する乗算部として動作する。ブースエンコーダ１２２は、仮数ＯＰ１Ｆの所定数のビット毎に、ビット値にしたがって、仮数ＯＰ１Ｆ、ＯＰ２Ｆの部分積を算出するための制御値を生成し、生成した制御値を部分積加算回路１２４に出力する。
【００６３】
部分積加算回路１２４は、制御値に基づいて、仮数ＯＰ２Ｆの所定数のビット毎（部分ビット）に、部分ビットのＭ倍（例えば、Ｍは、０、１、２、−１、−２）を部分積として算出し、算出した部分積を足し込むことで仮数ＯＰ１Ｆ、ＯＰ２Ｆの積を算出する。部分積加算回路１２４は、算出した積をサムＳＵとキャリーＣＡとして出力する。
【００６４】
加算器１２６は、部分積加算回路１２４から出力される積（サムＳＵとキャリーＣＡ）と、シフタ１２０により桁合わせされた仮数ＯＰ３Ｆとを加算し、加算結果を左シフタ１２８に出力する。加算器１２６は加算部の一例である。
【００６５】
左シフタ１２８は、仮数の演算結果のビット列中の上位側に最初に現れる”１”を上位側にシフトすることで、加算器から出力される仮数の加算結果を正規化する。左シフタ１２８は、正規化した加算結果（仮数）と、シフトした数を示すシフト値とを丸め回路に出力する。例えば、仮数を正規化するための左シフタ１２８のシフト値は、図示しないリーディングゼロカウンタにより算出される。
【００６６】
丸め回路１３０は、左シフタ１２８から出力される正規化された仮数の丸め処理を実行し、丸め処理を実行した仮数の値をオペランドＯＰ４の仮数ＯＰ４Ｆとして出力し、左シフタ１２８から出力されるシフト値を指数補正回路１１８に出力する。また、丸め回路１３０は、桁上げが発生する場合、桁上げを示す桁上げ情報を指数補正回路１１８に出力する。
【００６７】
指数補正回路１１８は、丸め回路１３０から出力されるシフト値をセレクタ１１６から出力される指数の演算結果から引いて指数を補正（正規化処理）し、補正結果をオペランドＯＰ４の指数ＯＰ４Ｅとして出力する。
【００６８】
図５は、図４の積和演算器１００による積和演算の一例を示す。積和演算器１００が単精度の場合、加算器１２６は７４ビットの幅を有する。単精度の場合、ヒドンビット”１”を含めた仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆは２４ビットであり、積ＯＰ１Ｆ＊ＯＰ２Ｆは４８ビットである。このため、積ＯＰ１Ｆ＊ＯＰ２Ｆが加算器１２６のビット幅に収まるように、小数点の位置（黒丸）は、４６ビット目と４５ビット目の間に設定される。
【００６９】
図５では、オペランドＯＰ３の小数点の位置は、仮数ＯＰ１Ｆ、ＯＰ２Ｆの積ＯＰ１Ｆ＊ＯＰ２Ｆの小数点の位置と同じである。このため、加算器１２６は、仮数ＯＰ１Ｆ、ＯＰ２Ｆの積ＯＰ１Ｆ＊ＯＰ２Ｆと仮数ＯＰ３Ｆとを加算し、仮数の積和演算の結果ＯＰ１Ｆ＊ＯＰ２Ｆ＋ＯＰ３Ｆを算出する。また、加算器１２６は、積和演算結果（ＯＰ１Ｆ＊ＯＰ２Ｆ＋ＯＰ３Ｆ）から仮数ＯＰ４Ｆ（２４ビット）を生成する場合、仮数ＯＰ４Ｆの最下位ビットの下にガードビットＧ、ラウンドビットＲおよびスティッキービットＳを付加する。ガードビットＧ、ラウンドビットＲおよびスティッキービットＳは、仮数の最下位ビットより下位に位置する付加ビットの一例である。なお、オペランドＯＰ３の小数点の位置が積ＯＰ１Ｆ＊ＯＰ２Ｆの小数点の位置と同じ場合、シフタ１２０による仮数ＯＰ３Ｆのビットシフトは実行されない。
【００７０】
図６は、図４の積和演算器１００による積和演算の別の例を示す。図５の説明と同じ内容については、詳細な説明は省略される。図６では、オペランドＯＰ３の小数点の位置は、積ＯＰ１Ｆ＊ＯＰ２Ｆの小数点の位置より３９ビット下位側である。この場合、シフタ１２０は、差ＤＩＦＥに基づいて、仮数ＯＰ３Ｆを３９ビット右シフトし、積ＯＰ１Ｆ＊ＯＰ２Ｆとの桁合わせを実行する。すなわち、仮数ＯＰ３Ｆのシフト量ＳＡは、３９ビットに設定される。
【００７１】
仮数ＯＰ３Ｆを３９ビット右シフトした場合、仮数ＯＰ３Ｆの下位側の１６ビットは、加算器１２６のビット幅から外れる。加算器１２６は、積ＯＰ１Ｆ＊ＯＰ２Ｆと仮数ＯＰ３Ｆの上位８ビットとを加算する。仮数ＯＰ３Ｆの下位側の１６ビットは、積和演算結果（ＯＰ１Ｆ＊ＯＰ２Ｆ＋ＯＰ３Ｆ）から仮数ＯＰ４Ｆ（２４ビット）を生成する際にスティッキービットＳとしてまとめられる。
【００７２】
図７は、図４の積和演算器１００による積和演算の別の例を示す。図５から図６の説明と同じ内容については、詳細な説明は省略される。この例では、オペランドＯＰ３の小数点の位置は、積ＯＰ１Ｆ＊ＯＰ２Ｆの小数点の位置より２７ビット上位側に設定される。この場合、シフタ１２０は、差ＤＩＦＥに基づいて、仮数ＯＰ３Ｆを２７ビット左シフトし、積ＯＰ１Ｆ＊ＯＰ２Ｆとの桁合わせを実行する。すなわち、仮数ＯＰ３Ｆのシフト量ＳＡは、−２７ビットに設定される。
【００７３】
図７では、積ＯＰ１Ｆ＊ＯＰ２Ｆの最上位ビットは、積和演算後の仮数ＯＰ３Ｆのスティッキービットと同じ位置になるため、仮数の積ＯＰ１Ｆ＊ＯＰ２Ｆは、スティッキービットとしてまとめられる。なお、仮数ＯＰ３Ｆの最下位ビット（例えば、スティッキービット）が、積ＯＰ１Ｆ＊ＯＰ２Ｆの最上位ビットより上位側にある場合にも、仮数ＯＰ３Ｆのシフト量ＳＡを、−２７ビットに制限する飽和処理が実行される。このため、仮数ＯＰ３Ｆの加算器１２６内でのビット位置は、図７と同じになる。シフト量ＳＡを制限し、仮数ＯＰ３Ｆを加算器１２６のビット幅に収める飽和処理は、減算器１１４またはシフタ１２０により実行される。
【００７４】
図８は、図４の積和演算器１００による積和演算の別の例を示す。図５から図７の説明と同じ内容については、詳細な説明は省略される。この例では、オペランドＯＰ１がゼロに設定される。
【００７５】
オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合、図４のゼロ検出器１０２またはゼロ検出器１０４の検出結果に基づき、セレクタ１０８、１１０は、オペランドＯＰ１Ｅ、ＯＰ２Ｅの代わりに”１”を選択する。このため、加算器１１２は、”−１２５”を出力し、減算器１１４は、オペランドＯＰ３Ｅが最小値（＝”１”）の場合にも、”−１２６”の差ＤＩＦＥを出力する。シフタ１２０は、差ＤＩＦＥを飽和処理し、仮数ＯＰ３Ｆを２７ビット左シフトする。
【００７６】
積ＯＰ１Ｆ＊ＯＰ２Ｆはゼロになるため、仮数ＯＰ３Ｆと積ＯＰ１Ｆ＊ＯＰ２Ｆとの和は、仮数ＯＰ３Ｆになる。そして、仮数ＯＰ３Ｆが仮数ＯＰ４Ｆとして出力される。このため、仮数ＯＰ３Ｆと積ＯＰ１Ｆ＊ＯＰ２Ｆとの関係が図８の状態になるように指数ＯＰ１Ｅ、ＯＰ２Ｅを変更することで、仮数ＯＰ１Ｆ、ＯＰ２Ｆがゼロか否かに応じてそれぞれ動作する回路を設けずに、仮数ＯＰ３ＦをオペランドＯＰ４の仮数ＯＰ４Ｆとして出力することができる。換言すれば、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合にも、ゼロでない場合と同じ回路動作をさせることができる。
【００７７】
この実施形態では、指数ＯＰ１Ｅ、ＯＰ２Ｅは”１”に設定される。指数ＯＰ１Ｅ、ＯＰ２Ｅが”１”に設定される場合の飽和処理前のシフト量ｐｒｅＳＡは、指数ＯＰ３Ｅを最小値”１”とする場合、式（２）で示される。式中のかぎ括弧内値は、各パラメータの値を示す。
ｐｒｅＳＡ＝（ＯＰ１Ｅ［１］）＋ＯＰ２Ｅ［１］）−ｂｉａｓ［１２７］−ＯＰ３Ｅ［１］＝−１２６  ‥（２）
【００７８】
なお、ＩＥＥＥ７５４では、指数ＯＰ１Ｅ、ＯＰ２Ｅ、ＯＰ３Ｅの”１”は、”−１２６”乗を示す。
【００７９】
シフト量ｐｒｅＳＡ（＝−１２６）は、”−２７”より小さいため、実際のシフト量ＳＡは、飽和処理により”−２７”に設定される。これにより、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合に、指数ＯＰ１Ｅ、ＯＰ２Ｅを”１”に設定することで、図８の状態にすることができ、仮数ＯＰ３ＦをオペランドＯＰ４の仮数ＯＰ４Ｆとして出力することができる。
【００８０】
なお、シフト量ＳＡ＝−２７は、２３ビットの仮数と、ヒドンビットと、ガードビットＧと、ラウンドビットＲと、積ＯＰ１Ｆ＊ＯＦ２Ｆの整数部の第２位の１ビットとの和（２３＋１＋１＋１＋１）から求められる。
【００８１】
ところで、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合に設定する指数ＯＰ１Ｅ、ＯＰ２Ｅは、シフト量ＳＡを”−２７”以下にできれば”１”以外でもよい。式（３）、（４）は、式（２）に基づいて、シフト量ｐｒｅＳＡを”−２７”以下とする指数の和ＯＰ１Ｅ＋ＯＰ２Ｅを求める例を示す。指数ＯＰ３Ｅは、式（２）と同様に最小値（＝”１”）に設定される。
ｐｒｅＳＡ［−２７］≧（ＯＰ１Ｅ＋ＯＰ２Ｅ）−ｂｉａｓ［１２７］−ＯＰ３Ｅ［１］  ‥（３）
ＯＰ１Ｅ＋ＯＰ２Ｅ≦−２７＋１２７＋１＝１０１  ‥（４）
【００８２】
式（４）より、単精度の積和演算器１００では、指数の和ＯＰ１Ｅ＋ＯＰ２Ｅを１０１以下に設定することで、指数ＯＰ３Ｅの値にかかわらず、仮数の積ＯＰ１Ｆ＊ＯＰ２Ｆと仮数ＯＰ３Ｆとの関係を図８と同じ状態にすることができる。
【００８３】
式（４）を単精度に限らず、半精度および倍精度に対しても適用可能にする例が式（５）および式（６）に示される。
ＯＰ１Ｅ＋ＯＰ２Ｅ≦ｂｉａｓ＋１−（ｎ＋３）‥（５）
ＯＰ１Ｅ＋ＯＰ２Ｅ≦ｂｉａｓ−（Ｗ１−Ｗ２）‥（６）
【００８４】
式（５）において、”ｎ”は、ヒドンビットを含む仮数のビット幅である。式（６）において、”Ｗ１”は、加算器１２６が演算に使用するビット幅であり、”Ｗ２”は、積ＯＰ１Ｆ＊ＯＰ２Ｆのヒドンビットを含むビット幅である。
【００８５】
これにより、指数ＯＰ３Ｅおよび仮数ＯＰ３Ｆのバイパス経路とセレクタとを積和演算器１００に設けることなく、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合、オペランドＯＰ３をオペランドＯＰ４として出力することができる。すなわち、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロであることを検出してオペランドＯＰ３をオペランドＯＰ４として出力する場合に、積和演算器１００の回路規模の増大を抑制することができる。
【００８６】
図９は、図４の積和演算器１００の動作フローの一例を示す。すなわち、図９は、プロセッサ２０３（演算処理装置）の制御方法の一例を示す。図９に示す動作は、積和演算器１００に浮動小数点数の積和演算命令が発行されたことに基づいて開始される。図９に示す動作の処理の一部は並列に実行されてもよい。なお、オペランドＯＰ１、ＯＰ２、ＯＰ３のいずれかが無限大または非数の場合、特殊処理が必要になるが、特殊処理についての動作の説明は省略される。
【００８７】
まず、ステップＳ１０において、積和演算器１００は、オペランドＯＰ１がゼロか否かを検出し、オペランドＯＰ２がゼロか否かを検出する。積和演算器１００は、オペランドＯＰ１、ＯＰ１の一方または両方がゼロか否かを判定する。積和演算器１００は、オペランドＯＰ１、ＯＰ１の一方または両方がゼロの場合、動作をステップＳ１２に移行し、オペランドＯＰ１、ＯＰ１の両方が非ゼロの場合、動作をステップＳ１４に移行する。オペランドＯＰ１、ＯＰ２のゼロの検出は、例えば、ゼロ検出器１０２、１０４により実行される。
【００８８】
次に、ステップＳ１２において、積和演算器１００は、外部から受信する指数ＯＰ１Ｅの代わりに”１”を指数ＯＰ１Ｅとして選択して加算器１１２に出力する。また、積和演算器１００は、外部から受信する指数ＯＰ２Ｅの代わりに”１”を指数ＯＰ２Ｅとして選択して加算器１１２に出力する。ステップＳ１２の後、動作はステップＳ１６に移行される。
【００８９】
ステップＳ１４において、積和演算器１００は、外部から受信する指数ＯＰ１Ｅを選択して加算器１１２に出力し、外部から受信する指数ＯＰ２Ｅを選択して加算器１１２に出力し、動作をステップＳ１６に移行する。ステップＳ１２、Ｓ１４の動作は、例えば、オアゲート１０６およびセレクタ１０８、１１０により実行される。
【００９０】
ステップＳ１６において、積和演算器１００は、オペランドＯＰ１、ＯＰ２の積演算における仮数積ＭＵＬＦと指数積ＭＵＬＥとを算出し、動作をステップＳ１８に移行する。仮数積ＭＵＬＦは、仮数ＯＰ１Ｆ、ＯＰ２Ｆを乗じることで求められ、指数積ＭＵＬＥは、指数ＯＰ１Ｅ、ＯＰ２Ｅを加算してバイアスｂｉａｓを減じることで求められる。バイアスｂｉａｓは、単精度では”１２７”、倍精度では”１０２３”、半精度では”１５”である。例えば、仮数積ＭＵＬＦは、ブースエンコーダ１２２および部分積加算回路１２４により算出され、指数積ＭＵＬＥは、加算器１１２により算出される。
【００９１】
ステップＳ１８において、積和演算器１００は、仮数の桁合わせをするために、仮数ＯＰ３Ｆのシフト量ｐｒｅＳＡを算出し、動作をステップＳ２０に移行する。シフト量ｐｒｅＳＡは、飽和処理前の計算上のシフト量である。例えば、シフト量ｐｒｅＳＡは、減算器１１４により指数積ＭＵＬＥから指数ＯＰ３Ｅを減じることで算出される。
【００９２】
ステップＳ２０において、積和演算器１００は、シフト量ｐｒｅＳＡを加算器１２６のビット範囲に合わせる補正（飽和処理）を実行し、シフト量ＳＡを求め、動作をステップＳ２２に移行する。これにより、例えば、単精度では、”−２７”より小さいシフト量ｐｒｅＳＡは、シフト量ＳＡ＝”−２７”に設定される。また、”４６”より大きいシフト量ｐｒｅＳＡは、シフト量ＳＡ＝”４６”に設定される。例えば、飽和処理は、減算器１１４における減算後またはシフタ１２０におけるシフト動作前に実行される。
【００９３】
ステップＳ２２において、積和演算器１００は、ステップＳ２０で算出したシフト量ＳＡを使用して、仮数ＯＰ３Ｆのビットをシフトすることで、仮数ＯＰ１Ｆ、ＯＰ２Ｆとの桁合わせを行い、動作をステップＳ２４に移行する。例えば、ステップＳ２２の動作は、シフタ１２０により実行される。
【００９４】
ステップＳ２４において、積和演算器１００は、桁合わせした仮数ＯＰ３Ｆと、仮数ＯＰ１Ｆ、ＯＰ２Ｆの乗算結果とを加算し、動作をステップＳ２６に移行する。例えば、ステップＳ２４の動作は、加算器１２６により実行される。
【００９５】
ステップＳ２６において、積和演算器１００は、ステップＳ２４での仮数の加算結果をＩＥＥＥ７５４にしたがって正規化するために左シフトし、動作をステップＳ２８に移行する。例えば、ステップＳ２６の動作は、左シフタ１２８と図４には示していないリーディングゼロ回路等を使用して実行される。
【００９６】
ステップＳ２８において、積和演算器１００は、ステップＳ２６で正規化した仮数の加算結果の丸め処理を実行することで、積和演算後の仮数を求め、動作をステップＳ３０に移行する。例えば、ステップＳ２８の動作は、丸め回路１３０により実行される。
【００９７】
ステップＳ３０において、積和演算器１００は、指数ＯＰ３Ｅと指数積ＭＵＬＥのうち、大きい方を積和演算後の仮の指数ｒｅｓｕｌｔＥとして選択する。また、積和演算器１００は、仮の指数ｒｅｓｕｌｔＥを、ステップＳ２６での正規化によるシフト量と、ステップＳ２８での丸め処理の結果に基づいて補正し、動作をステップＳ３２に移行する。例えば、ステップＳ３０の動作は、セレクタ１１６および指数補正回路１１８により実行される。
【００９８】
そして、ステップＳ３２において、積和演算器１００は、ステップＳ２８での丸め処理により得た仮数を仮数ＯＰ４Ｆとして出力し、ステップＳ３０での補正処理により得た指数を指数ＯＰ４Ｅとして出力し、動作を終了する。
【００９９】
図１０は、図４の積和演算器１００が半精度である場合の積和演算の一例を示す。図５から図８の説明と同じ内容については、詳細な説明は省略される。
【０１００】
積和演算器１００が半精度の場合、加算器１２６は３５ビットの幅を有する。半精度の場合、ヒドンビット”１”を含めた仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆは１１ビットであり、積ＯＰ１Ｆ＊ＯＰ２Ｆは２２ビットである。このため、積ＯＰ１Ｆ＊ＯＰ２Ｆが加算器１２６のビット幅に収まるように、小数点の位置（黒丸）は、２０ビット目と１９ビットの目の間に設定される。
【０１０１】
図１０に示す例では、オペランドＯＰ３の小数点の位置は、積ＯＰ１Ｆ＊ＯＰ２Ｆの小数点の位置より１４ビット上位側に設定される。この場合、シフタ１２０は、差ＤＩＦＥに基づいて、仮数ＯＰ３Ｆを１４ビット左シフトし、積ＯＰ１Ｆ＊ＯＰ２Ｆとの桁合わせを実行する。すなわち、仮数ＯＰ３Ｆのシフト量ＳＡは、−１４ビットに設定される。なお、シフト量ＳＡ＝−１４は、１０ビットの仮数と、ヒドンビットと、ガードビットＧと、ラウンドビットＲと、積ＯＰ１Ｆ＊ＯＦ２Ｆの整数部の第２位の１ビットとの和（１０＋１＋１＋１＋１）から求められる。
【０１０２】
図１０に示すように、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合に設定する指数ＯＰ１Ｅ、ＯＰ２Ｅは、シフト量ＳＡを”−１４”以下にできればよい。式（７）、（８）は、式（２）に基づいて、シフト量ｐｒｅＳＡを”−１４”以下とする指数の和ＯＰ１Ｅ＋ＯＰ２Ｅを求める例を示す。指数ＯＰ３Ｅは、式（２）と同様に最小値の”１”に設定される。なお、半精度でのバイアスｂｉａｓは”１５”である。
ｐｒｅＳＡ［−１４］≧（ＯＰ１Ｅ＋ＯＰ２Ｅ）−ｂｉａｓ［１５］−ＯＰ３Ｅ［１］  ‥（７）
ＯＰ１Ｅ＋ＯＰ２Ｅ≦−１４＋１５＋１＝２  ‥（８）
【０１０３】
式（８）より、指数の和ＯＰ１Ｅ＋ＯＰ２Ｅが”２”以下の場合、指数ＯＰ３Ｅの値にかかわらず、仮数の積ＯＰ１Ｆ＊ＯＰ２Ｆと仮数ＯＰ３Ｆとの関係を図１０と同じ状態にすることができる。図４に示すように、セレクタ１０８、１１０が選択する設定値を”１”にすることで、設定値を半精度、単精度、倍精度の積和演算器１００で共通にすることができ、設計資産を流用することができる。
【０１０４】
図１１は、図４の積和演算器１００が倍精度である場合の積和演算の一例を示す。図５から図８の説明と同じ内容については、詳細な説明は省略される。
【０１０５】
積和演算器１００が倍精度の場合、加算器１２６は１６１ビットの幅を有する。倍精度の場合、ヒドンビット”１”を含めた仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆは５３ビットであり、積ＯＰ１Ｆ＊ＯＰ２Ｆは１０６ビットである。このため、積ＯＰ１Ｆ＊ＯＰ２Ｆが加算器１２６のビット幅に収まるように、小数点の位置（黒丸）は、１０４ビット目と１０３ビットの目の間に設定される。
【０１０６】
図１１に示す例では、オペランドＯＰ３の小数点の位置は、積ＯＰ１Ｆ＊ＯＰ２Ｆの小数点の位置より５６ビット上位側に設定される。この場合、シフタ１２０は、差ＤＩＦＥに基づいて、仮数ＯＰ３Ｆを５６ビット左シフトし、積ＯＰ１Ｆ＊ＯＰ２Ｆとの桁合わせを実行する。すなわち、仮数ＯＰ３Ｆのシフト量ＳＡは、−５６ビットに設定される。なお、シフト量ＳＡ＝−５６は、５２ビットの仮数と、ヒドンビットと、ガードビットＧと、ラウンドビットＲと、積ＯＰ１Ｆ＊ＯＦ２Ｆの整数部の第２位の１ビットとの和（５２＋１＋１＋１＋１）から求められる。
【０１０７】
図１１に示すように、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合に設定する指数ＯＰ１Ｅ、ＯＰ２Ｅは、シフト量ＳＡを”−５６”以下にできればよい。式（９）、（１０）は、式（２）に基づいて、シフト量ｐｒｅＳＡを”−５６”以下とする指数の和ＯＰ１Ｅ＋ＯＰ２Ｅを求める例を示す。指数ＯＰ３Ｅは、式（２）と同様に最小値の”１”に設定される。なお、半精度でのバイアスｂｉａｓは”１０２３”である。
ｐｒｅＳＡ［−５６］≧（ＯＰ１Ｅ＋ＯＰ２Ｅ）−ｂｉａｓ［１０２３］−ＯＰ３Ｅ［１］  ‥（９）
ＯＰ１Ｅ＋ＯＰ２Ｅ≦−５６＋１０２３＋１＝９６８  ‥（１０）
【０１０８】
式（１０）より、指数の和ＯＰ１Ｅ＋ＯＰ２Ｅが”９６８”以下の場合、指数ＯＰ３Ｅの値にかかわらず、仮数の積ＯＰ１Ｆ＊ＯＰ２Ｆと仮数ＯＰ３Ｆとの関係を図１１と同じ状態にすることができる。
【０１０９】
図１２は、他の浮動小数点積和演算器の一例を示す。図４と同じ要素については、同じ符号を付し、詳細な説明は省略する。
【０１１０】
図１２に示す積和演算器１０１は、ゼロ検出器１０２、１０４、オアゲート１０６、加算器１１２、減算器１１４、セレクタ１１６および指数補正回路１１８を有する。また、積和演算器１００は、シフタ１２０、ブースエンコーダ１２２、部分積加算回路１２４、加算器１２６、左シフタ１２８、丸め回路１３０、セレクタ１３２、１３４およびバイパス経路１３６、１３８を有する。
【０１１１】
積和演算器１０１では、加算器１１２は、指数ＯＰ１Ｅ、ＯＰ２Ｅを直接受け、オアゲート１０６の出力は、セレクタ１３２、１３４の制御入力に接続される。バイパス経路１３６は、仮数ＯＰ３Ｆをセレクタ１３２に伝達し、バイパス経路１３８は、指数ＯＰ３Ｅをセレクタ１３４に伝達する。
【０１１２】
セレクタ１３２は、論理０のゼロ検出信号ＺＤＥＴをオアゲート１０６から受けた場合、丸め回路１３０の出力を選択して仮数ＯＰ４Ｆとして出力する。セレクタ１３２は、論理１のゼロ検出信号ＺＤＥＴを受けた場合、バイパス経路１３６に伝達される仮数ＯＰ３Ｆを選択して仮数ＯＰ４Ｆとして出力する。セレクタ１３４は、論理０のゼロ検出信号ＺＤＥＴをオアゲート１０６から受けた場合、指数補正回路１１８の出力を選択して指数ＯＰ４Ｅとして出力する。セレクタ１３４は、論理１のゼロ検出信号ＺＤＥＴを受けた場合、バイパス経路１３８に伝達される指数ＯＰ３Ｅを選択して指数ＯＰ４Ｅとして出力する。
【０１１３】
これにより、積和演算器１０１は、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロの場合、バイパス経路１３６、１３６を使用して、オペランドＯＰ３（指数ＯＰ３Ｅと仮数ＯＰ３Ｆ）をオペランドＯＰ４（指数ＯＰ４Ｅと仮数ＯＰ４Ｆ）として出力する。但し、図１２に示す積和演算器１０１では、単精度の場合、指数ＯＰ３Ｅ用の８ビットのバイパス経路１３８と仮数ＯＰ３Ｆ用の２３ビットのバイパス経路１３６が設けられる。実際には、符号ビットのバイパス経路も設けられるため、オペランドＯＰ３の入力側からオペランドＯＰ４の出力側にかけて３２ビットのバイパス経路が配線される。
【０１１４】
また、セレクタ１３２は、２３ビットの２入力のうちのいずれかの入力を選択し、セレクタ１３４は、８ビットの２入力のうちのいずれかの入力を選択する。実際には、符号ビットのセレクタも設けられる。これに対して、図４に示すセレクタ１０８、１１０の各々は、８ビットの２入力のうちのいずれかの入力を選択すればよい。このため、積和演算器１０１は、図４に示す積和演算器１００に対して、バイパス経路１３６、１３８および１６ビット分のセレクタのレイアウト領域が必要になる。
【０１１５】
以上より、図４に示す積和演算器１００は、積和演算器１０１に比べて、回路規模を削減することができ、プロセッサ２０３の回路規模の増大を抑制することができる。例えば、図３に示すように、プロセッサ２０３が多数の積和演算器１００を有する場合、回路規模の削減効果は大きく、プロセッサ２０３のチップサイズの低減効果は大きい。これにより、図１２に示す積和演算器１０１を採用する場合に比べて、情報処理装置３００の製造コストを削減することができる。
【０１１６】
また、積和演算器１００、１１０では、仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆの演算経路は、直列に配置されたブースエンコーダ１２２、部分積加算回路１２４、加算器１２６、左シフタ１２８および丸め回路１３０を含む。仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆの演算回路は、指数ＯＰ１Ｅ、ＯＰ２Ｅ、ＯＰ３Ｅの演算回路に比べて規模が大きく、仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆの演算時間は、指数ＯＰ１Ｅ、ＯＰ２Ｅ、ＯＰ３Ｅの演算時間に比べて増加する。すなわち、仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆの演算回路が、積和演算器１００、１１０の演算時間のボトルネックになる。
【０１１７】
ボトルネックとなる演算経路にセレクタ１３２を追加した場合、積和演算の演算時間は長くなり、積和演算器１０１の性能は低下する。図４に示す積和演算器１００では、ボトルネックとなる仮数ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆの演算経路にセレクタ等の回路が追加されないため、演算時間の増加を抑止することができ、積和演算器１００の性能の低下を抑止することができる。
【０１１８】
以上、図４から図１１に示す実施形態においても、図１および図２に示す実施形態と同様の効果を得ることができる。すなわち、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロであることを検出してオペランドＯＰ３をオペランドＯＰ４として出力する場合に、積和演算器１００の回路規模の増大を抑制することができる。
【０１１９】
回路規模の増大の抑制効果は、プロセッサ２０３に含まれる積和演算器１００の数が多いほど大きくなる。プロセッサ２０３のチップサイズの増加を抑制できる場合、情報処理装置３００の製造コストを削減することができる。
【０１２０】
さらに、図４から図１１に示す実施形態では、演算時間のボトルネックとなる演算経路にセレクタ等の回路を追加することなく、オペランドＯＰ１、ＯＰ２のいずれかまたは両方がゼロである場合にオペランドＯＰ３をオペランドＯＰ４として出力することができる。これにより、積和演算の演算時間の増加を抑止することができ、積和演算器１００の性能の低下を抑止することができる。
【０１２１】
セレクタ１０８、１１０が選択する設定値を”１”にすることで、設定値を半精度、単精度、倍精度の積和演算器１００で共通にすることができ、設計資産を流用することができる。
【０１２２】
以上の詳細な説明により、実施形態の特徴点および利点は明らかになるであろう。これは、特許請求の範囲がその精神および権利範囲を逸脱しない範囲で前述のような実施形態の特徴点および利点にまで及ぶことを意図するものである。また、当該技術分野において通常の知識を有する者であれば、あらゆる改良および変更に容易に想到できるはずである。したがって、発明性を有する実施形態の範囲を前述したものに限定する意図はなく、実施形態に開示された範囲に含まれる適当な改良物および均等物に拠ることも可能である。
【符号の説明】
【０１２３】
１              演算処理装置
１０            積和演算器
１１            ゼロ検出部
１１ａ、１１ｂ  ゼロ検出器
１２            指数設定部
１２ａ、１２ｂ  セレクタ
１３            指数算出部
１４            乗算部
１５            桁合わせ部
１６            加算部
１００、１０１  積和演算器
１０２、１０４  ゼロ検出器
１０６          オアゲート
１０８、１１０  セレクタ
１１２          加算器
１１４          減算器
１１６          セレクタ
１１８          指数補正回路
１２０          シフタ
１２２          ブースエンコーダ
１２４          部分積加算回路
１２６          加算器
１２８          左シフタ
１３０          丸め回路
２００          ホストコンピュータ
２０１          通信インタフェース
２０２          制御装置
２０３          プロセッサ
２０４          メモリ
２０５          通信制御部
２０６          メモリコントローラ
２０７          全体命令制御部
２０８          処理ユニット
２０９          演算命令バッファ
２１０          演算命令制御部
２１１          複数のベクタレジスタ
３００          情報処理装置
ＯＰ１、ＯＰ２、ＯＰ３、ＯＰ４          オペランド
ＯＰ１Ｅ、ＯＰ２Ｅ、ＯＰ３Ｅ、ＯＰ４Ｅ  指数
ＯＰ１Ｆ、ＯＰ２Ｆ、ＯＰ３Ｆ、ＯＰ４Ｆ  仮数
【図１】
2020064504.tif 000003
【図２】
2020064504.tif 000004
【図３】
2020064504.tif 000005
【図４】
2020064504.tif 000006
【図５】
2020064504.tif 000007
【図６】
2020064504.tif 000008
【図７】
2020064504.tif 000009
【図８】
2020064504.tif 000010
【図９】
2020064504.tif 000011
【図１０】
2020064504.tif 000012
【図１１】
2020064504.tif 000013
【図１２】
2020064504.tif 000014