(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-08-10
(45)【発行日】2023-08-21
(54)【発明の名称】演算装置
(51)【国際特許分類】
G06F 7/499 20060101AFI20230814BHJP
【FI】
G06F7/499 101
(21)【出願番号】P 2020158834
(22)【出願日】2020-09-23
【審査請求日】2022-06-23
(73)【特許権者】
【識別番号】000003078
【氏名又は名称】株式会社東芝
(73)【特許権者】
【識別番号】317011920
【氏名又は名称】東芝デバイス&ストレージ株式会社
(74)【代理人】
【識別番号】110002907
【氏名又は名称】弁理士法人イトーシン国際特許事務所
(72)【発明者】
【氏名】竹本 卓
【審査官】白石 圭吾
(56)【参考文献】
【文献】特開昭61-141033(JP,A)
【文献】特開平03-263219(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 5/01;7/38-7/537;7/57-7/575;7/74-7/78
(57)【特許請求の範囲】
【請求項1】
浮動小数点数の指数の一部または全部を可変長符号化した第1の部分符号と、
前記浮動小数点数の仮数を含む第2の部分符号と、
を備え、
前記第1の部分符号と前記第2の部分符号とを合わせた符号の長さは固定であり、
前記第1の部分符号の終端ビットと、前記第2の部分符号の最小有意ビットと、が隣接している、
データ構造の浮動小数点数から、前記指数および前記仮数を求めるデコーダと、
前記デコーダにより求められた前記指数および前記仮数で表現される数値を演算処理する演算処理回路と、
を有する演算装置。
【請求項2】
浮動小数点数の指数の一部または全部を可変長符号化した第1の部分符号と、
前記浮動小数点数の仮数を含む第2の部分符号と、
を備え、
前記第1の部分符号と前記第2の部分符号とを合わせた符号の長さは固定であり、
前記第1の部分符号の終端ビットと、
前記第2の部分符号の最大有意ビットと、が隣接している、
データ構造の浮動小数点数から、前記指数および前記仮数を求めるデコーダと、
前記デコーダにより求められた前記指数および前記仮数で表現される数値を演算処理する演算処理回路と、
を有する演算装置。
【請求項3】
前記第1の部分符号の終端ビットは1であり、
前記第1の部分符号は、連続する0と前記終端ビットの1とで構成された下位側のビットパターンを備え、
前記指数は、前記下位側のビットパターンの連続する0の個数に基づき求まる、
請求項1または2に記載の
演算装置。
【請求項4】
前記第1の部分符号の終端ビットは0であり、
前記第1の部分符号は、連続する1と前記終端ビットの0とで構成された下位側のビットパターンを備え、
前記指数は、前記下位側のビットパターンの連続する1の個数に基づき求まる、
請求項1または2に記載の
演算装置。
【請求項5】
浮動小数点数の指数の一部または全部を含む、符号長が固定である指数部と、
前記浮動小数点数の仮数を含む、符号長が固定である仮数部と、
を備え、
前記仮数部は、
上位側のビットに格納された仮数の有効桁と、
前記仮数の有効桁との境界を表す境界ビットの1と、前記仮数部の最下位ビットまで連続する0と、で構成された、前記仮数の有効桁より下位側のビットパターンと、
を有し、
前記指数は、前記指数部に含まれる指数の一部または全部と、前記ビットパターンの連続する0の個数と、に基づき求まる、
データ構造の浮動小数点数から、前記指数および前記仮数を求めるデコーダと、
前記デコーダにより求められた前記指数および前記仮数で表現される数値を演算処理する演算処理回路と、
を有する演算装置。
【請求項6】
指数および仮数で表現される数値を演算処理する演算処理回路と、
前記演算処理回路の演算結果である数値から、
浮動小数点数の指数の一部または全部を可変長符号化した第1の部分符号と、
前記浮動小数点数の仮数を含む第2の部分符号と、
を備え、
前記第1の部分符号と前記第2の部分符号とを合わせた符号の長さは固定であり、
前記第1の部分符号の終端ビットと、前記第2の部分符号の最小有意ビットと、が隣接している、データ構造の浮動小数点数を求めるエンコーダと、
を有する演算装置。
【請求項7】
指数および仮数で表現される数値を演算処理する演算処理回路と、
前記演算処理回路の演算結果である数値から、
浮動小数点数の指数の一部または全部を可変長符号化した第1の部分符号と、
前記浮動小数点数の仮数を含む第2の部分符号と、
を備え、
前記第1の部分符号と前記第2の部分符号とを合わせた符号の長さは固定であり、
前記第1の部分符号の終端ビットと、前記第2の部分符号の最大有意ビットと、が隣接している、データ構造の浮動小数点数を求めるエンコーダと、
を有する演算装置。
【請求項8】
前記第1の部分符号の終端ビットは1であり、
前記第1の部分符号は、連続する0と前記終端ビットの1とで構成された下位側のビットパターンを備え、
前記指数は、前記下位側のビットパターンの連続する0の個数に基づき求まる、
請求項6または7に記載の演算装置。
【請求項9】
前記第1の部分符号の終端ビットは0であり、
前記第1の部分符号は、連続する1と前記終端ビットの0とで構成された下位側のビットパターンを備え、
前記指数は、前記下位側のビットパターンの連続する1の個数に基づき求まる、
請求項6または7に記載の演算装置。
【請求項10】
指数および仮数で表現される数値を演算処理する演算処理回路と、
前記演算処理回路の演算結果である数値から、
浮動小数点数の指数の一部または全部を含む、符号長が固定である指数部と、
前記浮動小数点数の仮数を含む、符号長が固定である仮数部と、
を備え、
前記仮数部は、
上位側のビットに格納された仮数の有効桁と、
前記仮数の有効桁との境界を表す境界ビットの1と、前記仮数部の最下位ビットまで連続する0と、で構成された、前記仮数の有効桁より下位側のビットパターンと、
を有し、
前記指数は、前記指数部に含まれる指数の一部または全部と、前記ビットパターンの連続する0の個数と、に基づき求まる、データ構造の浮動小数点数を求めるエンコーダと、
を有する演算装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明の実施形態は、演算装置に関する。
【背景技術】
【0002】
IEEE754等の一般的な形式の浮動小数点数は、符号部、指数部、仮数部の3つから構成され、各部の符号長は固定である。これに対して、近年、POSITと呼ばれる、可変長符号化された拡張指数部をもつ浮動小数点数の形式が提案されている。
【0003】
POSITでは、数値表現全体の符号長は固定のまま、指数の表現に必要なビット数を可変にし、それに伴って仮数部のビット数も可変としている。POSITの浮動小数点数は、一般的な形式の浮動小数点数と比べて、絶対値が1.0付近の数値により高い精度を与えながら、広いダイナミックレンジを確保することが可能になっている。POSITの浮動小数点数を、例えばディープニューラルネットワーク等の処理に適用すると、少ないデータ量で高い精度の処理結果が得られることが確認されている。
【0004】
しかし、POSITに対応する演算装置は、一般的な浮動小数点形式に対応する演算装置に比べて、回路規模および消費電力が大幅に増大する。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
そこで、実施形態は、主に可変長符号化された拡張指数部をもつ浮動小数点形式に対応する演算装置の回路規模および消費電力を低減することができる演算装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
実施形態の演算装置は、浮動小数点数の指数の一部または全部を可変長符号化した第1の部分符号と、前記浮動小数点数の仮数を含む第2の部分符号と、を備え、前記第1の部分符号と前記第2の部分符号とを合わせた符号の長さは固定であり、前記第1の部分符号の終端ビットと、前記第2の部分符号の最小有意ビットと、が隣接している、データ構造の浮動小数点数から、前記指数および前記仮数を求めるデコーダと、前記デコーダにより求められた前記指数および前記仮数で表現される数値を演算処理する演算処理回路と、を有する。
【図面の簡単な説明】
【0008】
【
図1】第1の実施形態に係わる浮動小数点数のデータ構造を示す図である。
【
図2】第1の実施形態に係わる拡張指数部の可変長符号化ルールの例を示す図表である。
【
図3】第1の実施形態に係わる演算装置の基本的な構成例を示すブロック図である。
【
図4】第1の実施形態に係わる演算装置の具体的な構成例を示すブロック図である。
【
図5】第1の実施形態の変形例に係わる浮動小数点数のデータ構造を示す図である。
【
図6】第2の実施形態に係わる拡張指数部の可変長符号化ルールの例を示す図表である。
【
図7】第2の実施形態に係わる浮動小数点数のデータ構造を示す図である。
【
図8】第2の実施形態に係わる演算装置の具体的な構成例を示すブロック図である。
【
図9】第3の実施形態に係わる浮動小数点数のデータ構造を示す図である。
【
図10】第3の実施形態に係わる浮動小数点数の下位(n-m-2)ビットの値が示す指数へのオフセットを、通常の非正規化数の場合と比較して示す図表である。
【
図11】32ビットの数値が、第3の実施形態に係わるデータ構造の浮動小数点数であるときと、IEEE754形式の正規化数の浮動小数点数であるときとを比較して示す図である。
【
図12】32ビットの数値が、第3の実施形態に係わるデータ構造の浮動小数点数であるときと、IEEE754形式の非正規化数の浮動小数点数であるときとを比較して示す図である。
【
図13】第3の実施形態に係わる演算装置の具体的な構成例を示すブロック図である。
【
図14】第4の実施形態に係わる浮動小数点数のデータ構造を示す図である。
【
図15】第4の実施形態に係わる非正規化数の仮数部のデータ構造を、通常の非正規化数の仮数部のデータ構造と比較して示す図表である。
【
図16】第4の実施形態に係わる演算装置の具体的な構成例を示すブロック図である。
【
図17】比較例であるPOSIT形式の一般的な浮動小数点数のデータ構造を示す図である。
【発明を実施するための形態】
【0009】
以下、図面を参照して実施形態を説明する。
(第1の実施形態)
図1は、第1の実施形態に係わる、浮動小数点数のデータ構造を示す図である。第1の実施形態の浮動小数点数は、n(nは正の整数)ビットの固定長である。第1の実施形態の浮動小数点数は、符号部(sign)、
指数部、拡張指数部(regime)(第1の部分符号)
、仮数部(第2の部分符号)の順序で構成されている。
【0010】
符号部は、1ビットの固定長であり、浮動小数点数の符号を示すビット値sを格納する。ビット値sは、0が符号+を表し、1が符号-を表す。
指数部は、mビット(mは1以上の整数)の固定長である。
図1では指数部のビット値を、e
1,e
2,e
3,…,e
mで示す。
拡張指数部は、2ビット以上の可変長であり、レジームを格納する。拡張指数部に格納されているビット値は、レジームと呼ばれる指数のオフセット係数である。レジームは、可変長符号化ルールでエンコードされている。
図1ではレジームのビット値を、r,r,r,…,/rで示す。
【0011】
図1の浮動小数点のデータ構造には、次のような特長がある。1)レジームの符号長Lが変化しても、仮数部の桁とビット位置の対応が変化しない。2)レジームの符号長Lが変化しても、指数部のビット位置が変化しない。3)浮動小数点数の下位(n-m-3)ビットは、拡張指数部に対応するビット範囲(無効桁)をマスクすれば、固定長の仮数部とみなすことができる。
【0012】
拡張指数部の符号長をL(Lは2以上の整数)とする。
図2は、第1の実施形態に係わる拡張指数部の可変長符号化ルールの例を示す図表であり、POSIT形式と同一となっている。可変長符号化ルールは、正の整数を表す可変長符号の1つであるアルファ符号をベースに、負の数まで表せるよう拡張している。可変長符号は、一般的な性質として、符号の先頭からはデコード可能であるが、終端からは符号長Lを特定することができずデコード不可能である。
【0013】
拡張指数部の先頭1ビットはレジーム値Kの正負を表すフラグrである。レジーム値Kは、
図2の可変長符号化ルールでレジームをデコードした値である。レジーム値Kは、r=1のとき正であり、r=0のとき負であることを示す。フラグrが、r=1の場合にはレジーム値Kの絶対値の個数のrが続き、r=0の場合にはレジーム値Kの絶対値の個数よりも1個少ないrが続く。さらに末尾のビットに、終端を表す/rが付加される。/rはrと異なるビット値であり、r=1のときは/r=0、r=0のときは/r=1である。
【0014】
仮数部は、可変長である。浮動小数点数の全体がnビットの固定長であることから、仮数部の符号長は、拡張指数部の符号長Lに応じて変化し、(n-m-L-1)となる。本実施形態の浮動小数点形式で表現される数値は、レジーム値Kを用いると、式(1)となる。
(-1)s×2(M×K+e)×1.f1f2f3…fv (1)
Mは、式(1a)により与えられる。
M=2m (1a)
【0015】
(構成)
図3は、第1の実施形態に係わる演算装置の基本的な構成例を示すブロック図である。演算装置1は、入力データ1および入力データ2を入力して所定の演算を行い、出力データとして演算結果を出力する。入力データ1、入力データ2、および出力データは、
図1に示すnビットの浮動小数点数である。演算装置1は、第1デコーダ11、第2デコーダ12、演算処理回路13、およびエンコーダ14を備える。入力データ1、2は、本実施形態の浮動小数点形式で符号化された浮動小数点数である。
【0016】
第1デコーダ11は、入力データ1をデコードして、例えばIEEE754形式などの通常の浮動小数点数形式の数値に変換し、出力する。通常の浮動小数点形式(以下、通常形式と省略)は、非正規化数を除いて、浮動小数点数における指数および仮数の、桁位置とビット位置の対応関係が固定であるものを指す。
第2デコーダ12は、入力データ2をデコードして、通常形式の浮動小数点数に変換し、出力する。
【0017】
演算処理回路13は、第1デコーダ11から入力された浮動小数点数と、第2デコーダ12から入力された浮動小数点数とに所定の演算を行い、通常形式の浮動小数点数を演算結果として出力する。
エンコーダ14は、演算処理回路13から入力された演算結果をエンコードして、入力データ1および入力データ2と同一形式の浮動小数点数に変換し、出力する。
【0018】
図4は、本実施形態に係わる演算装置の具体的な構成例を示すブロック図である。
図4の演算装置は、第1デコーダ11A、第2デコーダ12A、演算処理回路13A、およびエンコーダ14Aを備える。
【0019】
第1デコーダ11Aおよび第2デコーダ12Aの構成は同一であり、内部の回路に同一の符号を付す。第1デコーダ11Aについてのみ説明し、第2デコーダ12Aの説明は省略する。
第1デコーダ11Aは、LK生成回路21と、指数算出回路22と、無効桁マスク回路23(以下、マスク回路23と略称)とを備える。なお、第2デコーダ12Aで扱うレジームの符号長L′および値K′にはプライムを付し、エンコーダ14Aで扱うレジームの符号長L″にはダブルプライムを付す。
【0020】
入力データ1の符号部である先頭1ビットは、第1デコーダ11Aを経由して演算処理回路13Aへ出力される。
LK生成回路21は、符号部および指数部を除く入力データ1の下位(n-m-1)ビットを受信して、
図2の可変長符号化ルールに従い、レジームの符号長Lおよび値Kを生成する。
指数算出回路22は、入力データ1中のmビットの指数部の値eと、LK生成回路21から受信した値Kとに基づき、通常形式の浮動小数点数の指数(M×K+e)を算出し、演算処理回路13Aへ出力する。
マスク回路23は、入力データ1の下位(n-m-3)ビットを受信して、LK生成回路21から受信した符号長Lに基づき無効桁(拡張指数部に対応する上位の(L-2)ビット範囲)のマスクを行い、ビット並びが逆順となっている仮数を演算処理回路13Aへ出力する。
【0021】
演算処理回路13Aは、第1および第2デコーダ11A,12Aから入力された浮動小数点数を乗算して、乗算結果をエンコーダ14Aへ出力する。なお、演算処理回路13Aに入出力される浮動小数点数は、通常形式であるが、仮数のビット並びが逆順となっている点がIEEE754形式などとは異なる。
エンコーダ14Aは、レジームと指数部を算出する回路31(以下、算出回路31と略称)と、丸め処理およびレジームの符号を合成する回路32(以下、合成回路32と略称)と、を備える。エンコーダ14Aは、演算処理回路13Aから受信したデータの先頭1ビットを、出力データの先頭1ビットとする。
【0022】
算出回路31は、演算処理回路13Aから演算結果の指数を受信して、下位mビットのデータを指数部として出力する。算出回路31は、残りの上位ビットのデータを、可変長符号化ルールに従い符号化する。算出回路31は、符号化したデータの上位2ビットを、出力データにおけるレジームの符号の上位2ビットとして出力する。算出回路31は、レジームの上位2ビットのデータと、レジームの符号長L″と、を合成回路32へ出力する。
【0023】
合成回路32は、演算処理回路13Aから演算結果の仮数(n-m-3)ビットを受信し、算出回路31からレジームの上位2ビットのデータおよび符号長L″を受信する。合成回路32は、受信した仮数のうちの、レジームの符号のビットパターンにより上書きされてしまう桁を丸める処理(四捨五入等)を、必要に応じて(例えば、L″が3以上であるときに)行う。合成回路32は、受信したレジームの上位2ビットのデータおよび符号長L″に基づき、レジームの符号の下位(L″-2)ビットのデータを生成する。合成回路32は、生成した下位(L″-2)ビットのデータを、丸め処理した仮数部のデータと合成して、出力データの下位(n-m-3)ビットとして出力する。
【0024】
演算処理回路13Aから受信した符号部の1ビットと、算出回路31から出力された指数部のmビットおよびレジームの上位2ビットと、合成回路32から出力された下位(n-m-3)ビットと、を合わせた
図1に示すnビットの出力データが、エンコーダ14Aから出力される。
【0025】
(本実施形態と比較例の対比)
図17は、比較例であるPOSIT形式の一般的な浮動小数点数のデータ構造を示す図である。POSIT形式の浮動小数点数は、nビットの固定長である。POSIT形式の浮動小数点数は、符号部、拡張指数部、指数部、仮数部の順序で構成されている。
図1と
図17の違いは、次の通りである。1)仮数部のビット配列が逆順となっている。2)指数部と拡張指数部の配置を入れ替えている。
【0026】
POSIT形式のデコーダでは、レジームの符号長Lを求めて、指数部と仮数部のビット位置に応じてデータを(L-2)ビット左シフトする必要がある。左シフト量は符号長Lに応じて異なるために、回路の配線が複雑となる。また、POSIT形式のエンコーダでは、レジームの符号長L″を求めて、符号長L″に応じてデータを(L″-2)ビット算術右シフトする必要がある。算術右シフト量は符号長L″に応じて異なるために、回路の配線が複雑となる。
【0027】
正規化数に対応する通常の浮動小数点乗算処理では、仮数と指数を別々に処理できるため、タイミング上のクリティカルパス(最長経路)になり易いのは仮数の乗算処理となる。一方、POSITでは、仮数の乗算処理の前に「レジームの符号長Lの生成」および「(L-2)ビット左シフト」の処理が、仮数の乗算処理の後に「(L″-2)ビット算術右シフト」の処理がシーケンシャルに繋がることになり、クリティカルパスが延長される。
【0028】
従って、POSITに対応する演算装置の場合、ストールを発生させることなく演算性能を維持するには、パイプラインの段数を増やす必要がある。また、入力側の2つのデコーダ、および出力側のエンコーダを合わせると、配線が複雑となる幅の広いビット単位のシフト回路が3か所に必要となる。これらの要因から、POSITに対応した浮動小数点演算装置は、通常の浮動小数点演算装置に比べて回路規模および消費電力が増大し、一般的に高い(例えば2倍以上の)回路コストになる。
【0029】
これに対し、
図1に示すデータ構造を用いることで、仮数部の桁位置とビット位置の対応が固定となる。そのため、第1の実施形態によれば、入力データの下位(n-m-3)ビットを切り出して、拡張指数部に対応するビットをマスク(無効桁マスク)すれば仮数を生成できる。つまり、POSITでは、レジームの符号長に応じたシフト処理が仮数を生成するまでの過程で必要であったが、本実施形態では不要となる。
【0030】
また本実施形態では、出力データの仮数部の生成でもシフト処理が不要になり、レジームの符号長L″から符号のビットパターンを仮数に合成するだけでよい。従って、
図4の演算処理回路は、POSITの演算処理回路に比べて、回路規模および消費電力を低減できる。
さらに、レジームの符号長Lが変化しても指数部のビット位置が変化しないために、
図1のデータ構造の浮動小数点数から、指数部を容易に切り出せる。
【0031】
(第1の実施形態の変形例)
図5は、本実施形態の変形例に係わる浮動小数点数のデータ構造を示す図である。
図1と
図5のデータ構造の違いは、次の通りである。1)仮数部と拡張指数部の配置を入れ替えている。2)仮数部のビット配列を正順とし、拡張指数部のビット配列を逆順にしている。
【0032】
本実施形態の浮動小数点形数のデータ構造に必要な条件は、仮数部の最小有意ビットf
vと、拡張指数部の可変長符号の終端ビット/rと、が隣接していることである。この条件を満たせば、隣接する拡張指数部および仮数部のセット内で、拡張指数部と仮数部の何れが上位側であっても構わない。さらに、符号部と、指数部と、拡張指数部および仮数部のセットと、の3つがどのような順序で並んでいても構わない。従って例えば、
図1および
図5の何れのデータ構造においても、符号部と指数部を、仮数部と
拡張指数部の下位側(右側)に配置してもよい。
【0033】
また、拡張指数部の可変長符号化ルールは、
図2に限定されるものではなく、任意で構わない。さらに、指数は、(M×K+e)となる例を式(1)に示しているが、これに限定されるものではなく、eとKとを用いた任意の関数により表現されてもよい。また、指数の情報は、一部を可変長符号化した例を説明したが、全部を可変長符号化しても構わない。
【0034】
(第2の実施形態)
第2の実施形態では、第1の実施形態と異なる部分について主に説明する。第1の実施形態では仮数部および指数部のシフト処理を不要としたが、無効桁のマスク処理は必要であった。これに対して、第2の実施形態は、さらに無効桁のマスク処理も不要にしている。
図6は、第2の実施形態に係わる浮動小数点数の拡張指数部の可変長符号化ルールの例を示す図表である。
図7は、第2の実施形態に係わる浮動小数点数のデータ構造を示す図である。
【0035】
図6に示すルールは、レジームの正負を表すフラグrの後には、レジームの絶対値に関連する個数の0が連続する。まず、
図6のルールでは、レジームの値Kが、正であることをr=0により示し、負であることをr=1により示している。ただし、フラグrの値を、
図2の例と同じにしても構わない。フラグrの後に連続する0の個数は、r=0の場合にはレジームの値Kの絶対値の個数となり、r=1の場合にはレジームの値Kの絶対値よりも1個少ない個数となる。さらに、連続する0の後に、値が1の終端ビットが付加される。
【0036】
そして、本実施形態で表現される数値は式(2)で示される。ただし、式(2)中のMは、式(1a)により与えられる。
(-1)s×2(M×K+e)×1.f1f2f3…fv1 (2)
表現したい数値を最も値の近い浮動小数点形式に変換するときに、通常は仮数部の最小有意ビットであるfvの桁未満を四捨五入して丸める。これに対して、式(2)は、単純にfvの桁未満のビットを切り捨てればよいことを意味する。
【0037】
図8は、第2の実施形態に係わる演算装置の具体的な構成例を示すブロック図である。
図8の演算装置は、第1デコーダ11B、第2デコーダ12B、演算処理回路13B、およびエンコーダ14Bを備える。入力データ1、入力データ2、および出力データは、何れもnビットの、
図7に示したデータ構造をもつ浮動小数点数である。
【0038】
第1デコーダ11Bおよび第2デコーダ12Bの構成は同一であり、内部の回路に同一の符号を付す。第1デコーダ11Bについてのみ説明し、第2デコーダ12Bの説明を省略する。第1デコーダ11Bは、K生成回路21Bと、指数算出回路22Bと、を備える。なお、第2デコーダ12Bで扱うレジームの値K′にはプライムを付し、エンコーダ14Bで扱うレジームの符号長L″にはダブルプライムを付す。
【0039】
入力データ1の符号部である先頭1ビットは、第1デコーダ11Bを経由して演算処理回路13Bへ出力される。
K生成回路21Bは、符号部、指数部、および拡張指数部の先頭1ビットを除く、入力データ1の下位(n-m-2)ビットを受信して、
図6の可変長符号化ルールに従い、レジームの値Kを生成する。
指数算出回路22Bは、入力データ1中の指数部のmビットおよび拡張指数部の先頭1ビットと、K生成回路21Bから受信した値Kとに基づき通常形式の浮動小数点数の指数を算出し、演算処理回路13Bへ出力する。
第1デコーダ11Bは、さらに、入力データ1の下位(n-m-3)ビットを演算処理回路13Bへ出力する。
演算処理回路13Bは、第1および第2デコーダ11B,12Bから入力された浮動小数点数を乗算して、乗算結果をエンコーダ14Bへ出力する。なお、演算処理回路13Bに入出力される浮動小数点数は、通常形式であるが、仮数のビット並びが逆順となっている点がIEEE754形式などとは異なる。
【0040】
エンコーダ14Bは、レジームと指数部を算出する回路31B(以下、算出回路31Bと略称)と、レジームの符号を合成する回路32B(以下、合成回路32Bと略称)と、を備える。エンコーダ14Bは、演算処理回路13Bから受信したデータの先頭1ビットを、出力データの先頭1ビットとする。
【0041】
算出回路31Bは、演算処理回路13Bから演算結果の指数を受信して、下位mビットのデータを指数部として出力する。算出回路31Bは、残りの上位ビットのデータを、可変長符号化ルールに従い符号化する。算出回路31Bは、符号化したデータの上位2ビットを、出力データにおけるレジームの符号の上位2ビットとして出力する。算出回路31Bは、レジームの符号長L″を合成回路32Bへ出力する。
【0042】
合成回路32Bは、演算処理回路13Bから演算結果の仮数(n-m-3)ビットを受信する。合成回路32Bは、算出回路31Bから受信した符号長L″に基づきレジームの符号の下位(L″-2)ビットのデータを生成し、受信した仮数(n-m-3)ビットと合成して、出力する。なお、
図4の合成回路32では必要であった仮数部の丸め処理(四捨五入等)が不要になったのは、式(2)の解釈では単純切り捨てで足りるためである。
【0043】
第2の実施形態によれば、第1の実施形態とほぼ同様の効果を奏する。第2の実施形態では、マスク回路23が不要となったために、演算装置の回路規模および消費電力をより低減できる。また、第2の実施形態では、合成回路32Bが不要となったために、処理回路をより簡単にできる。
なお、
図7に示したデータ構造について、仮数部の最小有意ビットf
vと、拡張指数部の可変長符号の終端ビット1と、が隣接しているという条件の下で、第1の実施形態と同様の様々な変形例を適用することが可能である。また、指数部の値eとレジームの値Kとにより指数を表現する関数も、任意で構わない
。
【0044】
(第3の実施形態)
図9は、第3の実施形態に係わる浮動小数点数のデータ構造を示す図である。第3の実施形態では、第1,2の実施形態と異なる部分について主に説明する。第3の実施形態の演算装置は、異なる複数の浮動小数点形式に対応できるように構成されている。
【0045】
演算装置が、複数の浮動小数点形式に対応する必要があり、かつ、IEEE754の非正規化数のように仮数のヒドンビットを省略せずに仮数部に含める形式にも対応する必要がある場合、仮数部の桁位置とビット位置は1対1に対応するとは限らない。このために、第1の実施形態や第2の実施形態のような仮数部の桁位置とビット位置の対応を固定する構成は有効でなくなる。本実施形態は、
図9に示す符号小数点数のデータ構造を採用することで、複数の浮動小数点形式に対応し、かつ、ヒドンビットを省略せずに仮数部に含める形式にも対応するようにしている。
【0046】
仮数部のビット配列が、
図9のデータ構造では正順になっている。それ以外のデータ構造は、
図7と同じである。また、本実施形態で用いるレジームの可変長符号化ルールは、
図6に示すルールである。本実施形態の浮動小数点形数のデータ構造に必要な条件は、仮数部の最大有意ビットf
1と、拡張指数部の可変長符号の終端ビット1と、が隣接していることである。
【0047】
図9のデータ構造を採用すると、拡張指数部の終端を表す1が仮数のヒドンビットの役目も果たすようになる。つまり、浮動小数点数の下位(n-m-2)ビットを切り出すと、そのままヒドンビットありの仮数(非正規化数)とみなせる。
ただし、
図9の非正規化数は、ヒドンビットのビット位置と指数へのオフセットの関係が、通常の非正規化数と相違する。
【0048】
図10は、第3の実施形態に係わる浮動小数点数の下位(n-m-2)ビットの値が示す指数へのオフセットを、通常の非正規化数の場合と比較して示す図表である。
通常の非正規化数の場合には、拡張指数部の終端(およびヒドンビット)を表す1が左端から1桁ずつ右へ移動するにつれて、指数へのオフセットが-1から1ずつ減少していく。
一方、
図9に示す構成の場合には、拡張指数部の終端を表す1が左端から1桁ずつ右へ移動するにつれて、フラグrを1つずつ増加させた値[r,(r+1),(r+2),…]に、Mとレジームの正負を示す符号(-1)
rとを掛けた値が、指数へのオフセットとなる。
【0049】
図11は、一例として32ビットの数値が、第3の実施形態に係わる浮動小数点数であるときと、IEEE754形式の正規化数の浮動小数点数であるときとを比較して示す図である。
図11に示す数値例の場合、IEEE754形式の浮動小数点数では、符号が正、指数が3、仮数が1.01101(2進数)となり、値は+1.01101×2
3となる。
一方、
図9に示す形式では、n=32となり、m=6とした場合、符号が正、指数eが32、レジームの値Kが-3、仮数が1.10100(2進数)となる。従って、値は、+1.10100×2
-160となる。つまり、
図11に示す例では、2つの浮動小数点数において、仮数部を取り出す位置が異なり、仮数の値が異なっている。
【0050】
図12は、一例として32ビットの数値が、第3の実施形態に係わる浮動小数点数であるときと、IEEE754形式の非正規化数の浮動小数点数であるときとを比較して示す図である。
図12に示す数値例の場合、IEEE754形式では、符号が正、指数が-126、仮数が1.101×2
-2(2進数)となり、値は+1.101×2
-128となる。
一方、
図9に示す形式では、n=32、m=6において、符号が正、指数部の値eが0、レジームの値Kが2、仮数が1.101(2進数)となる。m、e、およびKから算出される指数は128となるので、値は、+1.101×2
128となる。
【0051】
なお、e=0に対するバイアス128は、
図10における下位(n-m-2)ビット「001xxxx…」に対応する第3の実施形態欄の数式(-1)
r×M×(r+2)を用いても算出される。つまり、非正規化数の場合にはIEEE754形式でもヒドンビットが省略されていないので、
図9に示す形式と、仮数部の扱いが同じになることが分かる。
【0052】
図13は、本実施形態に係わる演算装置の具体的な構成例を示すブロック図である。
図13の演算装置は、IEEE754形式と
図9の形式の両方に対応している。
【0053】
図13の演算装置は、第1デコーダ11C、第2デコーダ12C、演算処理回路13C、およびエンコーダ14Cを備える。
入力データ1、入力データ2、および出力データは、何れもnビットの浮動小数点数である。
図13の演算装置には、第3の実施形態の形式のモードとIEEE754形式のモードがあり、、演算装置内の各セレクタへの選択信号S1,S2により切り替えるようになっている。
【0054】
選択信号S1,S1′は、入力データが第3の実施形態の形式のモードの場合またはIEEE754形式の非正規化数の場合に、入力端子25C1を選択するようにセレクタを制御する。また、選択信号S1は、入力データがIEEE754形式の正規化数の場合に、入力端子25C2を選択するようにセレクタを制御する。
選択信号S2は、入力データがIEEE754形式のモードの場合に入力端子27C1,35C1,36C1を選択し、第3の実施形態の形式のモードの場合に入力端子27C2,35C2,36C2を選択するように、セレクタを制御する。
【0055】
第1デコーダ11Cおよび第2デコーダ12Cの構成は同一であり、内部の回路に同一の符号を付す。第1デコーダ11Cについてのみ説明し、第2デコーダ12Cの説明は省略する。
第1デコーダ11Cは、LK生成回路21Cと、指数算出回路22Cと、指数算出回路24Cと、セレクタ25Cと、左シフト回路26Cと、セレクタ27Cと、を備える。なお、第2デコーダ12Cで扱うレジームの符号長L′および値K′にはプライムを付し、エンコーダ14Cで扱うレジームの符号長L″にはダブルプライムを付す。
【0056】
入力データ1の符号部である先頭1ビットは、第1デコーダ11Cを経由して演算処理回路13Cへ出力される。
LK生成回路21Cは、入力データ1の下位(n-m-2)ビットを受信して、レジームの符号長Lおよび値Kを生成する。
【0057】
指数算出回路22Cは、入力データ1中の指数部のmビットおよび拡張指数部の先頭1ビットと、LK生成回路21Cから受信した値Kとに基づき通常形式の浮動小数点数の指数を算出し、セレクタ27Cへ出力する。
指数算出回路24Cは、入力データ1中の符号部の1ビットに続く(m+2)ビットと、LK生成回路21Cから受信したレジームの符号長Lとに基づき指数を算出し、セレクタ27Cへ出力する。
【0058】
セレクタ27Cは、選択信号S2に応じて、指数算出回路24Cに接続される入力端子27C1、または指数算出回路22Cに接続される入力端子27C2を選択して、指数として演算処理回路13Cへ出力する。
セレクタ25Cは、選択信号S1に応じて、LK生成回路21Cからの入力(符号長L)が接続される入力端子25C1、または入力(0)が接続される入力端子25C2を選択して出力する。
【0059】
左シフト回路26Cは、入力データ1の下位(n-m-3)ビットを受信して、セレクタ25Cから符号長Lを受信した場合には(L-2)ビット左シフトを行い、セレクタ25Cから0を受信した場合には左シフトを行わない。左シフト回路26Cは、処理後の(n-m-3)ビットを仮数として演算処理回路13Cへ出力する。
演算処理回路13Cは、第1および第2デコーダ11C,12Cから入力された浮動小数点数を乗算して、乗算結果をエンコーダ14Cへ出力する。
【0060】
エンコーダ14Cは、第3の実施形態の形式の指数部とシフト量を生成する回路33C(以下、生成回路33Cと略称)と、IEEE754形式の指数部とシフト量を生成する回路34C(以下、生成回路34Cと略称)と、セレクタ35Cと、セレクタ36Cと、右シフトおよび丸め処理を行う回路(以下、右シフト回路37Cと略称)と、を備える。
エンコーダ14Cは、演算処理回路13Cから受信したデータの先頭1ビットを、出力データの先頭1ビットとする。
【0061】
生成回路33Cは、演算処理回路13Cから演算結果の指数を受信して、下位mビットのデータを指数部とする。生成回路33Cは、残りの上位ビットのデータを、可変長符号化ルールに従い符号化する。生成回路33Cは、符号化したデータの上位2ビットを、出力データにおけるレジームの符号の上位2ビットとする。生成回路33Cは、指数部とレジームの上位2ビットとをセレクタ35Cへ出力する。生成回路33Cは、レジームの符号長L″に基づきシフト量(L″-2)を算出し、セレクタ36Cへ出力する。
【0062】
生成回路34Cは、演算処理回路13Cから演算結果の指数を受信する。生成回路34Cは、演算結果が正規化数となる場合には、受信した指数からIEEE754形式の指数部を生成し、シフト量を0とする。また、生成回路34Cは、演算結果が非正規化数となる場合には、IEEE754形式の指数部の全ビットを0とし、受信した指数に応じて仮数を右シフトするためのシフト量を算出する。生成回路34Cは、指数部をセレクタ35Cへ出力し、シフト量をセレクタ36Cへ出力する。
【0063】
セレクタ35Cは、選択信号S2に応じて、生成回路34Cに接続される入力端子35C1、または生成回路33Cに接続される入力端子35C2を選択して、出力データの先頭1ビットに続く(m+2)ビットのデータとして出力する。
セレクタ36Cは、選択信号S2に応じて、生成回路34Cからの入力(シフト量)が接続される入力端子36C1、または生成回路33Cからの入力(シフト量)が接続される入力端子36C2を選択して、右シフト回路37Cへ出力する。
右シフト回路37Cは、演算処理回路13Cから演算結果の仮数(n-m-3)ビットを受信して丸め処理を行う。さらに右シフト回路37Cは、セレクタ36Cから受信したシフト量に応じた右シフトを行い、出力データの下位(n-m-3)ビットのデータとして出力する。
【0064】
なお、
図10は、第3の実施形態に適用可能な指数へのオフセットの一例を示しただけであり、これに限定されるものではない。通常の非正規化数と、第3の実施形態の形式との、指数へのオフセットに対する基本的な違いは、以下の何れかである。
1)ヒドンビットが1ビット下位に移動したとき、指数の変化が、通常の非正規化数は-1であるのに対して、第3の実施形態の形式ではrの正負によって異なる。r=0である場合はM、r=1である場合は-Mである。ただし、
図10ではM変化する例を示したが、より一般に自然数で変化して構わない。
2)ヒドンビットが1ビット移動したとき、指数の変化量の絶対値が、通常の非正規化数は1であるのに対して、第3の実施形態の形式では2以上である。
図10に示す例Mは、式(1a)に示すように、2のべき乗で与えられる。ただし、2以上であれば、2のべき乗には限定されない。
上記の何れかの条件の下で、表現される指数と、指数部の値eおよびヒドンビットの位置の関係は、任意の関数で与えられてもよい。
【0065】
第3の実施形態によれば、第3の実施形態の形式と、IEEE754形式と、の何れの浮動小数点数が入力データとなっても処理を行える演算装置が得られる。さらに、入力データがIEEE754形式の非正規化数である場合にも、演算処理が可能となる。
そして、IEEE754形式の非正規化数と、第3の実施形態の形式の浮動小数点数とで、シフト回路を共用できる。これにより、それぞれの処理に対応するシフト回路を個別に設ける場合よりも、演算装置の回路規模および消費電力を低減できる。
【0066】
(第4の実施形態)
図14は、第4の実施形態に係わる浮動小数点数のデータ構造を示す図である。第4の実施形態では、第1~3の実施形態と異なる部分について主に説明する。本実施形態の浮動小数点数は、n(nは正の整数)ビットの固定長であり、先頭1ビットが符号部、次のmビットが指数部、続く(n-m-1)ビットが仮数部で構成されている。
【0067】
図15は、第4の実施形態に係わる非正規化数の仮数部を、通常の非正規化数の仮数部と比較して示す図表である。
例えばIEEE754のような固定長の符号部、指数部、仮数部からなる浮動小数点形式でも、非正規化数に対応するためには、仮数部のシフト処理が必要となる。そこで本実施形態では、このような浮動小数点形式において、非正規化数となる条件(指数部=最小値)のときでも、仮数の桁位置とビット位置の関係を固定にして、シフト処理を不要にする。
【0068】
図15に示すように、通常の非正規化数では、指数の減少に対応する個数の0と、それに続く1(ヒドンビットを表す)とが、仮数部の上位桁側から挿入される。
一方、第4の実施形態では、指数の減少に対応する個数の0とそれに続く1(仮数の有効桁との境界を表す)とが、仮数部の下位桁側から挿入される。以下では、仮数の有効桁との境界を表す値1のビットを、境界ビットと呼ぶことにする。
なお、「xxx…x」で示す並び順は、通常の非正規仮数欄と第4実施形態欄は同じである。
【0069】
図16は、第4の実施形態に係わる演算装置の具体的な構成例を示すブロック図である。
図16の演算装置は、第1デコーダ11D、第2デコーダ12D、演算処理回路13D、およびエンコーダ14Dを備える。入力データ1、入力データ2、および出力データは、何れもnビットの、
図14に示したデータ構造をもつ浮動小数点数である。
【0070】
第1および第2デコーダ11D、12Dは、
図14のデータ構造の浮動小数点数をデコードして、通常形式の浮動小数点数に変換し、出力する。
演算処理回路13Dは、通常形式にデコードされた入力データ1、2を乗算して、通常形式の乗算結果を出力する。
エンコーダ14Dは、通常形式の浮動小数点数をエンコードして、
図14のデータ構造の浮動小数点数に変換し、出力する。
【0071】
第1デコーダ11Dおよび第2デコーダ12Dの構成は同一であり、内部の回路に同一の符号を付す。第1デコーダ11Dについてのみ説明し、第2デコーダ12Dの説明は省略する。
第1デコーダ11Dは、境界検出回路28Dと、指数算出回路22Dと、無効桁マスク回路23D(以下、マスク回路23Dと略称)と、を備える。
【0072】
入力データ1の符号部である先頭1ビットは、第1デコーダ11Dを経由して演算処理回路13Dへ出力される。
境界検出回路28Dは、符号部および指数部を除く入力データ1の下位(n-m-1)ビットを受信して、境界ビットの位置を検出する。
指数算出回路22Dは、入力データ1中のmビットの指数部の値eと、境界検出回路28Dから受信した境界ビットの位置とに基づき通常形式の浮動小数点数の指数を算出し、演算処理回路13Dへ出力する。
【0073】
マスク回路23Dは、入力データ1の下位(n-m-1)ビットを受信して、無効桁のマスクを行い、仮数を演算処理回路13Dへ出力する。無効桁は、仮数部の下位桁側から挿入された連続する0、およびそれに続く境界ビット1の桁である。
演算処理回路13Dは、第1デコーダ11Dから入力された浮動小数点数と、第2デコーダ12Dから入力された浮動小数点数と、を乗算して、乗算結果の浮動小数点数を、エンコーダ14Dへ出力する。
【0074】
エンコーダ14Dは、指数部を算出する回路38D(以下、算出回路38Dと略称)と、丸め処理および境界ビットとそれに続く0を合成する回路39D(以下、合成回路39Dと略称)と、を備える。
エンコーダ14Dは、演算処理回路13Dから受信したデータの先頭1ビットを、出力データの先頭1ビットとする。
【0075】
算出回路38Dは、演算処理回路13Dから演算結果の指数を受信して、mビットの指数部と境界ビットの位置とを生成する。ここに、非正規化数の場合には指数部の全ビットを0とし、指数のバイアスに応じた桁位置を境界ビットの位置とする。また、正規化数の場合には、演算結果の指数を指数部の値とし、境界ビットの位置を例えば0とする。算出回路38Dは、算出したmビットの指数部を出力データの一部として出力し、境界ビットの位置を合成回路39Dへ出力する。
【0076】
合成回路39Dは、演算処理回路13Dから演算結果の仮数(n-m-1)ビットを受信し、算出回路38Dから受信した境界ビットの位置に基づき、仮数の桁を丸める処理(四捨五入等)を行う。合成回路39Dは、境界ビットの位置が0でない場合には、境界ビット「1」とそれに続く0を合成して、
図15の第4の実施形態欄に示すような仮数部を生成する。合成回路39Dは、処理後の(n-m-1)ビットを、出力データの仮数部として出力する。
なお、
図16では、第1デコーダ11Dおよび第2デコーダ12Dに無効桁のマスク回路23Dが設けられ、エンコーダ14Dの合成回路39Dが丸め処理を行っているが、仮数部の値について第2の実施形態の式(2)と同じ解釈を行うと、無効桁のマスク回路23Dと、合成回路39Dによる丸め処理と、を省略できる。
【0077】
第4の実施形態によれば、第1~3の実施形態とほぼ同様の効果を奏するとともに、仮数の桁位置とビット位置の関係を固定にしたために、シフト処理を不要にして非正規化数の演算処理を行える。従って、演算装置の回路規模および消費電力を低減できる。
また、仮数部の値に対して式(2)の解釈を適用することで、無効桁のマスク回路23Dおよび合成回路39Dによる丸め処理を省略できる。これにより、演算装置の回路規模および消費電力をさらに低減できる。
【0078】
なお、各実施形態において、演算処理回路13が正規化数に対する浮動小数点乗算処理回路である例を示したが、本実施形態の演算装置は、特定の演算処理に限定されるものではなく、加算、除算、積和演算等の他の数値演算処理にも適用可能である。
【0079】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれると共に、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0080】
1…演算装置、11,11A,11B,11C,11D…第1デコーダ、12,12A,12B,12C,12D…第2デコーダ、13,13A,13B,13C,13D…演算処理回路、14,14A,14B,14C,14D…エンコーダ