IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ セントレオン コーポレーションの特許一覧

<>
  • 特開-混合精度乗算回路 図1
  • 特開-混合精度乗算回路 図2
  • 特開-混合精度乗算回路 図3
  • 特開-混合精度乗算回路 図4
  • 特開-混合精度乗算回路 図5
  • 特開-混合精度乗算回路 図6
  • 特開-混合精度乗算回路 図7
  • 特開-混合精度乗算回路 図8
  • 特開-混合精度乗算回路 図9
  • 特開-混合精度乗算回路 図10
  • 特開-混合精度乗算回路 図11
  • 特開-混合精度乗算回路 図12
  • 特開-混合精度乗算回路 図13
  • 特開-混合精度乗算回路 図14
  • 特開-混合精度乗算回路 図15
  • 特開-混合精度乗算回路 図16
  • 特開-混合精度乗算回路 図17
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024105191
(43)【公開日】2024-08-06
(54)【発明の名称】混合精度乗算回路
(51)【国際特許分類】
   G06F 7/523 20060101AFI20240730BHJP
   G06F 7/533 20060101ALI20240730BHJP
   G06F 7/483 20060101ALI20240730BHJP
【FI】
G06F7/523
G06F7/533 620
G06F7/483
【審査請求】未請求
【請求項の数】12
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2024003323
(22)【出願日】2024-01-12
(31)【優先権主張番号】18/101,038
(32)【優先日】2023-01-24
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】524017238
【氏名又は名称】セントレオン コーポレーション
(74)【代理人】
【識別番号】110000408
【氏名又は名称】弁理士法人高橋・林アンドパートナーズ
(72)【発明者】
【氏名】ゾン クオゾン
(72)【発明者】
【氏名】ウォン パクソン
(72)【発明者】
【氏名】オウ ベンジャミン
(57)【要約】      (修正有)
【課題】ワイド可変シフタの使用を回避し、あるいは可変シフタの幅を縮小した混合精度乗算回路を提供する。
【解決手段】第1オペランドは指数と仮数を含み、混合精度乗算回路はサブセットセレクタ1300と仮数乗算器を含む。サブセットセレクタ1300は、第2オペランド20を格納し、指数12を受け取るように構成される。サブセットセレクタ1300は、指数12に従って複数のサブセット241,242,243,244からサブセットを選択し、複数のサブセットは第2オペランド20を表す。仮数乗算器は、選択されたサブセットに関連付けられた被乗数を受け取るためにサブセットセレクタ1300に結合され、仮数24を受け取るように構成される。仮数乗算器は、被乗数および仮数に従って乗算を実行することによって積を生成し、混合精度乗算回路は、積に従って結果を出力する。
【選択図】図2
【特許請求の範囲】
【請求項1】
第1オペランドと第2オペランドに従って演算する混合精度乗算回路であって、前記第1オペランドは、指数および仮数を含み、前記混合精度乗算回路は、
前記第2オペランドを記憶し、前記指数を受け取るように構成されたサブセットセレクタであって、前記指数に従って複数のサブセットから選択されたサブセットを出力し、前記複数のサブセットは前記第2オペランドを表す、サブセットセレクタと、
前記選択されたサブセットに関連付けられた被乗数を受け取るために前記サブセットセレクタに結合され、前記仮数を受け取るように構成された仮数乗算器であって、前記被乗数および前記仮数に従って乗算を実行することによって積を生成し、前記混合精度乗算回路は前記積に従って結果を出力する、仮数乗算器と、を含む、
混合精度乗算回路。
【請求項2】
前記複数のサブセットは、第1サブセットおよび第2サブセットを含み、前記第1サブセットは、前記第2サブセットの第2部分として機能する第1部分を含む、
請求項1に記載の混合精度乗算回路。
【請求項3】
前記複数のサブセットは第1サブセットおよび第2サブセットを含み、前記第1サブセットは第1部分を含み、前記第2サブセットは第2部分を含み、前記第1部分のビットパターンは前記第2部分のビットパターンと同一である、
請求項1に記載の混合精度乗算回路。
【請求項4】
前記複数のサブセットの各々のビット幅は、ベース幅およびオーバーラップ幅を含み、前記ベース幅は、前記第1オペランドの指数と前記複数のサブセットの量とに関連付けられ、前記オーバーラップ幅は、前記第1部分のビット幅または前記第2部分のビット幅である、
請求項2に記載の混合精度乗算回路。
【請求項5】
前記オーバーラップ幅は、仮数幅と結果幅との和からなる、
請求項4に記載の混合精度乗算回路。
【請求項6】
前記オーバーラップ幅は、前記積における潜在的な先行ゼロの量に関連する予約幅をさらに含む、
請求項5に記載の混合精度乗算回路。
【請求項7】
前記オーバーラップ幅は、ガードビットの幅をさらに含む、
請求項5に記載の混合精度乗算回路。
【請求項8】
前記第2オペランドは、1/πの整数倍の2進表現からなり、
前記オーバーラップ幅は、複数の連続するゼロの最大数をさらに含み、前記複数の連続するゼロは、整数倍に関連付けられ、
前記結果は、前記積の小数部分の複数の有効ビットの2進表現からなる、
請求項5に記載の混合精度乗算回路。
【請求項9】
前記選択されたサブセットを受け取るために、前記サブセットセレクタと前記仮数乗算器との間に結合された抽出ロジックをさらに含み、前記抽出ロジックは、前記選択されたサブセットから前記被乗数として一部を抽出する、
請求項1に記載の混合精度乗算回路。
【請求項10】
前記積を受け取るために前記仮数乗算器に結合された抽出ロジックをさらに含み、前記積は、左部分、右部分、および前記左部分と前記右部分との間の結果部分を含み、
前記抽出ロジックは、前記左部分および前記右部分をシフトして前記結果部分を前記結果として抽出する、
請求項1に記載の混合精度乗算回路。
【請求項11】
第1オペランドおよび第2オペランドに応じた結果を出力する混合精度乗算回路であって、前記第1オペランドは、指数と仮数を含み、
前記混合精度乗算回路は、
前記第2オペランドを格納し、前記仮数を受け取るように構成された仮数乗算器であって、前記第2オペランドおよび前記仮数に従って乗算を実行することにより積を生成する仮数乗算器と、
前記積を受け取るために、前記仮数乗算器に結合されたサブセットセレクタであって、前記指数に従って複数のサブセットから選択されたサブセットを出力し、前記複数のサブセットの各々は積の一部を表す、サブセットセレクタと、
前記選択されたサブセットを受け取るために、前記サブセットセレクタに結合された抽出ロジックであって、前記選択されたサブセットから結果として一部を抽出する、抽出ロジックと、を含む、
混合精度乗算回路。
【請求項12】
第1オペランドとおよび第2オペランドに従って演算する混合精度乗算回路であって、前記第1オペランドは、指数と仮数を含み、
前記混合精度乗算回路は、
前記第2オペランドと仮数倍数とを格納するように構成された部分積セレクタであって、
前記第2オペランドは複数のサブセットに分割され、前記仮数倍数は複数の参照サブセットに分割され、
前記複数のサブセットの各々は複数のグループを含み、前記複数の参照サブセットの各々は複数の参照グループを含み、
前記複数のグループの各々は、オフセットでシフトされた前記第2オペランドの一部であり、前記複数の参照グループの各々は、参照オフセットでシフトされた前記仮数倍数の一部であり、
前記複数のグループの各々で採用されるオフセットが異なる場合、前記複数の参照グループの各々で採用される参照オフセットは異なり、
前記部分積セレクタは、前記複数のサブセットから所望のサブセットを選択し、前記指数に従って前記複数の参照サブセットから所望の参照サブセットを選択し、
前記部分積セレクタは、複数の候補グループを出力し、前記複数の候補グループの各々は、前記所望のサブセット内の複数のグループのうちの1つ、または前記所望の参照サブセットのうちの前記複数の参照グループのうちの1つである、部分積セレクタと、
前記複数の候補グループを受け取るために前記部分積セレクタに結合された部分積加算器であって、前記複数の候補グループを加算して結果を出力する部分積加算器と、を含む、
混合精度乗算回路。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、レンジ縮小に関し、より詳細には、混合精度乗算回路に関する。
【背景技術】
【0002】
科学的アプリケーションは、超越数(transcendental numbers)を引数として計算を行うことが多い。しかし、このような計算を浮動小数点フォーマットでハードウェア実装することは困難である。例えば、三角関数sin(x)を持つ計算の場合、「y=x-2kπ」という式が採用されることがある(ここで、2kπはxより小さい2πの最大倍数)。引数「x」が非常に大きいとき、「y」において十分な精度を取得することは難しい。三角関数を正確に評価しようとすれば、xの指数(べき指数,exponent)範囲までの精度を持つ固定小数点演算で式を計算しなければならない。前述の例では、xが10200に等しい場合、kは約200桁の幅(2進数で約664ビット)の整数となり、計算には10進数以降の200桁以上のπが必要となる。
【0003】
二つの入力(Aが指数eと仮数mで表され、Bが指数eと仮数mで表される)が与えられる場合、浮動小数点乗算は、仮数(m×m)を乗算し、指数(e+e)を加算することによって実行され、乗算結果を丸め、必要に応じて指数和を調整し、この後、結果は指数和と仮数和で表される。ほとんどのハードウェアは、A、B、及び結果が同じ精度を有する場合にのみ動作する。典型的に、上記の例では“k”や“π”のような幅の広い定数を用いての乗算では、結果を正規化するために大きな仮数乗算器と大きな変数シフタ(例えばバレル・シフタ)が必要であり、このような実装は面積が大きくレイテンシが高い。
【発明の概要】
【発明が解決しようとする課題】
【0004】
以上のことから、本開示は、ワイド可変シフタの使用を回避し、あるいは可変シフタの幅を縮小した混合精度乗算回路を提案する。
【課題を解決するための手段】
【0005】
本開示の1つまたは複数の実施形態によれば、混合精度乗算回路は、第2オペランドおよび第1オペランド(演算数)に従って計算する。第1オペランドは、指数および仮数を含み、混合精度乗算回路は、サブセットセレクタおよび仮数乗算器を含む。サブセットセレクタは、第2オペランドを格納し、指数を受け取るように構成される。サブセットセレクタは、指数(exponent)に従って複数のサブセットから選択されたサブセットを出力し、複数のサブセットは第2オペランドを表す。仮数乗算器は、選択されたサブセットに関連付けられた被乗数(multiplicand)を受け取るためにサブセットセレクタに結合され、仮数を受け取るように構成される。仮数乗算器は、被乗数および仮数に従って乗算を実行することによって積を生成し、混合精度乗算回路は、積に従って結果を出力する。
【0006】
本開示の1つまたは複数の実施形態によれば、混合精度乗算回路は、第1オペランドおよび第2オペランドに従って結果を出力する。第1オペランドは、指数および仮数を含み、混合精度乗算回路は、仮数乗算器およびサブセットセレクタを含む。仮数乗算器は、第2オペランドを記憶し、仮数を受け取る。仮数乗算器は、第2オペランドと仮数に従って乗算を実行することにより積を生成する。サブセットセレクタは、積を受け取るために仮数乗算器に結合される。サブセットセレクタは、指数に従って複数のサブセットから選択されたサブセットを出力し、複数のサブセットの各々は積の一部を表す。抽出ロジックは、選択されたサブセットを受け取るためにサブセットセレクタに結合される。抽出ロジックは、選択されたサブセットから結果として部分を抽出する。
【0007】
本開示の1つまたは複数の実施形態によれば、混合精度乗算回路は、第1オペランドおよび第2オペランドに従って計算する。第1オペランドは、指数および仮数を含み、混合精度乗算回路は、部分積セレクタおよび部分積加算器を含む。部分積セレクタは、第2オペランドと仮数倍数を格納する。第2オペランドは複数のサブセットに分割され、仮数倍数は複数の参照サブセットに分割される。複数のサブセットの各々は複数のグループを含み、複数の参照サブセットの各々は複数の参照グループを含む。複数のグループの各々は、オフセットでシフトされた第2オペランドの一部であり、複数の参照グループの各々は、参照オフセットでシフトされた仮数倍数の一部である。複数のグループの各々で採用されるオフセットは異なり、複数の参照グループの各々で採用される参照オフセットは異なる。部分積セレクタは、指数に従って、複数のサブセットから所望のサブセットを選択し、複数の参照サブセットから所望の参照サブセットを選択する。部分積セレクタは、複数の候補グループを出力し、複数の候補グループの各々は、所望のサブセット内の複数のグループのうちの1つ、または所望の参照サブセット内の複数の参照グループのうちの1つである。部分積加算器は、複数の候補グループを受け取るために部分積セレクタに結合される。部分積加算器は、複数の候補グループを加算した結果を出力する。
【図面の簡単な説明】
【0008】
本開示は、本明細書で以下に示す詳細な説明、および例示のためにのみ与えられる添付図面からより完全に理解されるものであり、本開示を限定するものではなく、以下の通りである。
図1】本発明に係る混合精度乗算回路の第1実施形態を示すブロック図である。
図2】サブセットセレクタの第1実施形態の内部構造を示す図である。
図3】メモリパーティションの例を示している。
図4】仮数乗算器の第1実施形態の内部構造を示す図である。
図5】混合精度乗算回路の第2実施形態のブロック図である。
図6】サブセットセレクタの第2実施形態の内部構造を示す図である。
図7】仮数乗算器の第2実施形態の内部構造を示す図である。
図8】混合精度乗算回路の第3実施形態のブロック図である。
図9】混合精度乗算回路の第3実施形態による計算フローを示す模式図である。
図10】混合精度乗算回路の第4実施形態のブロック図である。
図11】本発明の混合精度乗算回路の第4実施形態による演算フローを示す模式図である。
図12】混合精度乗算回路の第5実施形態のブロック図である。
図13】混合精度乗算回路の第6実施形態のブロック図である。
図14】サブセット/参照サブセット分割の概略図の一例である。
図15】グループ/参照グループの一例を示す。
図16】グループ選択を示す例である。
図17】混合精度乗算回路を用いた浮動小数点乗算器を示すブロック図である。
【発明を実施するための形態】
【0009】
以下の詳細な説明では、説明のために、開示された実施形態の完全な理解を提供するために、多数の具体的な詳細を記載する。明細書に開示された説明、特許請求の範囲および図面によれば、当業者は本開示の概念および特徴を容易に理解することができる。以下の実施形態は、本発明の様々な態様をさらに説明するものであるが、本発明の範囲を限定するものではない。
【0010】
本開示は、レンジ縮小のような高精度が要求される用途に適した混合精度乗算回路を提案する。
【0011】
混合精度乗算回路は、可変の第1オペランドと固定の第2オペランドに従って特殊な乗算を実行する。第1オペランドは2進数であり、一例では、この2進数はIEEE754などの一般的な浮動小数点フォーマットに準拠する。別の例では、この2進数は整数を表す。第2オペランドは、高精度計算をサポートするために、数百ビットや数千ビットといった非常に広い分数部分を持つ2進数である。混合精度乗算回路の出力は、第1オペランドと第2オペランドの積内のセグメントである。
【0012】
図1は、混合精度乗算回路1000の第1実施形態のブロック図を示す。図1に示すように、混合精度乗算回路1000は、第1指数12および第1仮数14を含む第1オペランド10を受け取る。混合精度乗算回路1000は、サブセットセレクタ1300および仮数乗算器1500を含む。サブセットセレクタ1300は、第1指数12を受け取り、第2オペランド20を格納する。サブセットセレクタ1300は、第1指数12に従って複数のサブセットから選択されたサブセット30を出力するように構成される。複数のサブセットの各々は、第2オペランド20の一部を表す。仮数乗算器1500は、選択されたサブセット30を被乗数52として受け取るためにサブセットセレクタ1300に結合され、第1仮数14を乗数54として受け取る。仮数乗算器1500は、乗数54と被乗数52とを乗算して積56を生成する。混合精度乗算回路1000は、積56に従って結果90を出力する。
【0013】
図2は、サブセットセレクタ1300の第1実施形態の内部構造を示す図である。図2に示すように、サブセットセレクタ1300は、メモリ1310と、指数加算器1320と、第1セレクタ1330と、第2セレクタ1340とを含む。
【0014】
メモリ1310は、第2指数22および第2仮数24を含む第2オペランド(演算数)20を記憶する。一実施例では、メモリ1310は、埋め込み論理ゲートまたは他の記憶素子によって実装されてもよい。第2指数22は定数である。範囲縮小の適用において、定数2/πは、結果がどの象限にあるかを決定するためにしばしば使用される。第2オペランド20が2/πに設定されると、第2指数22は1に設定される(2/π=2×1/π)。双曲線関数の計算などの他の用途では、第2指数22は1より大きくてもよい。本開示は、第2指数22の値を制限しない。第2仮数24は、図2に示すように、複数のサブセットの形態で記憶される。サブセットの数は、本開示では限定されないが、2のk乗、すなわち、2、kは非負整数であることが好ましい。図2は、4つのサブセット241~244を例示的に示しており、これらは、容易に区別できるように別々に示されているが、実際には、これらのサブセット241~244は、互いに重なってメモリ1310に記憶されている。一例では、これらのサブセット241~244は、隣接する2つのサブセットが重複部分を共有するメモリ1310に格納される。より良く理解するために、メモリパーティションの例を示す図3を参照されたい。メモリ1310において、第2仮数24の記憶空間は、8つの特定の位置L1~L4およびR1~R4に従って7つの部分に分割される。図3に示すように、サブセット241は、位置L1から位置R1までの複数のビットを含み、サブセット242は、位置L2から位置R2までの複数のビットを含み、サブセット243は、位置L3から位置R3までの複数のビットを含み、サブセット244は、位置L4から位置R4までの複数のビットを含む。これらの特定の位置L1~L4およびR1~R4は、サブセットのビット幅(略してサブセット幅)によって決定される。
【0015】
【0016】
オーバーラップ幅は以下の式1に従って計算される、
【数1】

ここでWoverlapはオーバーラップ幅を示し、Wmantissaは第1仮数14のビット幅を示し、Wresult混合精度乗算回路1000が出力する結果のビット幅を示しWguardは丸め用ガードビットのビット幅を示し、Wappは特定用途の追加ビットのビット幅を示す。
【0017】
一例ではWappは、第1仮数14と選択されたサブセット30との積における先行ゼロの最大数を表す。先行ゼロは、積の小数部分の左端ビットから始まる複数の連続するゼロである。本開示は、Wappを以下の方法によって決定する:最初のステップは、所与の精度で可能なすべての積を計算することである。例えば、単精度浮動小数点フォーマットによって表現可能なすべての値に関して、ハードウェア設計者は、各値とサブセット241~244のそれぞれを乗算するためにソフトウェアを使用することができ、その結果、非常に多くの積が生成される。第2ステップは、すべての積の分数に含まれる先頭のゼロの数を数えることであり、第3のステップは、Wappとして最も大きい数を求めることである。例えば、サブセットおよび2倍精度浮動小数点形式として、2/πが選択されると、Wapp=61である。
【0018】
次の例は、Wappの重要性を示している。2つの数を掛け合わせ、その積が“10.00000000011010”であったとする。正規化された結果は、“10.00000000011010”の有効小数部分を保持するため、“1.1010*2-10”となるはずである。しかし、バイナリポイントの後の先行するゼロの数は、小数部分を表現するために設定されたビット幅を超える可能性があるため、乗数によっては、“0.0000*2”のような誤った答えを出力する可能性がある。上記の例は、どの入力が先行ゼロを生成し、先行ゼロの数を予測することが困難であることを示している。そこで、本開示では、積の先頭ゼロの最大数を事前に計算する。
【0019】
【0020】
第1セレクタ1330は、すべてのサブセット241~244を受信するようにメモリ1310に結合され、選択フラグを受信するように指数加算器1320に結合される。第1セレクタ1330は、選択フラグに従ってサブセット241~244のうちの1つを出力する。指数加算器1320の上記の例から、第1セレクタ1330は、第1指数12が大きい場合、第2仮数24の低位ビットを選択し、第1指数12が小さい場合、第2仮数24の高位ビットを選択することが分かる。高レベルのビューでは、サブセットセレクタ1300は、第1指数12に従って、複数のサブセット241~244から出力するサブセットを選択する。
【0021】
第2セレクタ1340は、指数加算器1320に結合され、選択フラグを受け取る。第2セレクタ1340は、選択フラグに従って、複数のオフセットe1~e4のうちの1つを選択して出力する。言い換えれば、第1セレクタ1330はサブセットの1つを選択し、第2セレクタ1340は選択されたサブセットで使用されるオフセットの1つを選択する。オフセットは、選択されたサブセット30の左端のビットと特定のビットとの間の距離である。具体的には、第1指数12によって表現可能な範囲において、本開示が関係する部分はほとんどが正である。例えば、単精度浮動小数点フォーマットにおいて、7ビットの指数で表現可能な範囲は[-126,+127]であるが、本開示が実際に関係する部分は[-1,127]である。言い換えれば、第1指数12と第2指数22の和は、第2仮数24の左端のビットから特定のビットまでの右への距離を移動するために使用される。特定のビットはいずれかのサブセットに含まれる可能性があるため、第2セレクタ1340によって選択される変位は、選択されたサブセット30の左端のビットから特定のビットへ移動した距離である。
【0022】
ハードウェアコストを節約するために、混合精度乗算回路1000は、「必要なビット」、すなわち、選択されたサブセット30のみを乗算する。例えば、Xビットの第1仮数14とYビットの第2仮数24とを乗算する場合、YがXよりもはるかに大きく(Y>>X)、結果がZビットに制限される場合、乗算は、結果を生成するために第2仮数24の(X+Z-1)ビットと、丸め用のいくつかのガードビット(通常は10以下)と、いくつかのアプリケーション固有のビットとを取るだけでよい。第2仮数24をシフトするために可変シフタ(例えば、バレルシフタ)を使用する代わりに、これは、法外に高価な面積コストと高いレイテンシをもたらすが、本開示は、「必要なビット」の1つのサブセットを選択するように、第2仮数24を複数のサブセットに分割する設計を提案する。
【0023】
さらに、図3に示す重複するサブセット241~244は、「必要なビット」の抽出に役立つ。以下の表1を参照されたい。第2仮数24がビット0からビット9までの10ビットを含み、「必要なビット」がビット3からビット6までの中間部分であるとする。直感的な方法は、第2仮数24を2つの重複しないサブセットに分割し、そのため、「必要なビット」はサブセットの境界付近で除外される。対照的に、本開示の提案方法は、サブセット1またはサブセット2に関係なく、「必要なビット」を完全に含むことができる。
【0024】
【表1】
【0025】
上記の説明では、どのサブセットも同じビット幅を持つ。しかしながら、本開示はこれに限定されない。例えば、本開示の実施形態は、10個のサブセットを含むことができ、10個のサブセットのうちの4個は第1幅の同じビット幅を有し、他の6個のサブセットは第2幅の同じビット幅を有し、第1幅は第2幅と異なる。現実的なアプリケーションでは、非常に幅の広い定数には、計算で頻繁に使用される「一般的な部分」があるかもしれない。一般的な部分のビット幅は、一般的でない部分のビット幅よりも大きい場合がある。
【0026】
図4は、仮数乗算器の第1実施形態の内部構造を示す。仮数乗算器1500は、選択されたサブセット30を被乗数として受け取り、第1仮数14を乗数として受け取る。図4に示すように、仮数乗算器1500は、複数のマルチプレクサ1510、複数のシフタ1520、および加算器ツリー1530を含む。
【0027】
第1仮数14は、仮数乗算器1500が採用する基数に従って複数のグループに分割される。基数が2の場合、各グループはkビットを格納する。図4に示す第1実施形態では、基数は2であり、仮数は6ビット幅である。したがって、6つのグループが存在し、各グループは第1仮数14の1ビットを格納する。
【0028】
グループの数はマルチプレクサ1510の数に等しい。マルチプレクサの数は、シフタの数よりも1つ多い。図4に示すように、右端のマルチプレクサを除いて、残りのマルチプレクサ1510の各々は、部分積演算ロジックを形成するためにシフタに結合される。
【0029】
図4に示す第1実施形態では、各マルチプレクサ1510は、被乗数(マルチプリカンド)として機能する選択されたサブセット30を受信する。マルチプレクサ1510は、グループに格納された値に従って、ゼロ値または被乗数のいずれかを選択して出力する。
【0030】
各シフタ1520は、一定のシフト長に従って左シフト動作を行う。例えば、図4における5つのシフタの予め決められたシフト長は、左から右へ、それぞれ5、4、3、2、1である。各マルチプレクサは、第1仮数の1ビットを一度に取り込み、部分積としてゼロを出力するか、選択されたサブセットを出力するかを決定するので、シフト長は1である。つまり、右から2番目のマルチプレクサによって生成される部分積は、右端のマルチプレクサによって生成される部分積よりも左に1ビット多くシフトされなければならず、右から3番目のマルチプレクサによって生成される部分積は、右から2番目のマルチプレクサによって生成される部分積よりも左に1ビット多くシフトされなければならない。マルチプレクサ1510によって出力される選択結果のほとんどは、対応するシフタによって左シフトすることができる。右端のマルチプレクサ1510には対応するシフタがないことに注意されたい。なぜなら、その選択結果のシフト長はゼロであるべきであり、シフトシフト演算が不要であることを意味するからである。
【0031】
加算器ツリー1530は、全てのシフタ1520に結合され、それらのシフト結果を受け取る。加算器ツリー1530は、全てのシフト結果を加算するための複数の加算器を含む。加算器ツリーによって出力される和は、被乗数と仮数との積である。
【0032】
図5は、混合精度乗算回路2000の第2実施形態のブロック図である。図5に示すように、混合精度乗算回路2000は、サブセットセレクタ2300と仮数乗算器2500とを含む。サブセットセレクタ2300は、第1指数12を受け取り、第2オペランド20と仮数倍数34とを格納する。サブセットセレクタ2300は、複数の選択されたサブセット30’を出力するように構成される。
【0033】
第1実施形態と比較して、第2実施形態は、サブセットセレクタ2300に格納される定数の量を1から多数に拡張し、サブセットセレクタ2300によって出力される選択されたサブセットの量を1から多数に拡張する。
【0034】
図6は、サブセットセレクタ2300の第2実施形態の内部構造を示す図である。図6に示すように、サブセットセレクタ2300は、メモリ2310と、指数加算器2320と、第1セレクタ2330と、第2セレクタ2340とを含む。
【0035】
メモリ2310は、第2仮数24だけでなく、仮数倍数34も記憶し、仮数倍数34の各々は、第2仮数24の整数倍である。図6に示すように、第2仮数24を(1/T)と表記し、仮数倍数34を2/T(第2仮数24の2倍)、3/T(第2仮数24の3倍)と表記する。これらの仮数倍数34は基数(radix)の乗算に用いられる。第2仮数24およびその倍数の数は、基数の値より1小さい。例えば、基数が4の場合、メモリ2310は、(1/T)、(2/T)、(3/T)を記憶する必要がある。基数が8の場合、メモリ2310は、(1/T)、(2/T)、・・・、(7/T)を記憶する必要がある。
【0036】
仮数倍数34の各々は、第1実施形態において第2仮数24が分割されるのと同様に、複数のサブセットに分割される。したがって、第1セレクタ2330は、図6に示すように、第2仮数24の複数のサブセットのうちの1つを選択して出力することに加えて、第2仮数24の倍数の複数のサブセットのうちの1つを選択して出力する。
【0037】
指数加算器2320および第2セレクタ2340の実装については、第1実施形態を参照されたい。
【0038】
図7は、仮数乗算器2500の第2実施形態の内部構造を示す。仮数乗算器2500は、複数のサブセットを受信するためのサブセットセレクタ2300に結合される。複数のサブセットは、図7に示す(1/T)のような第2仮数24の選択されたサブセットと、図7に示す(2/T)および(3/T)のような第2仮数24の倍数の選択されたサブセットとを含む。
【0039】
図7に示すように、仮数乗算器2500は、複数のマルチプレクサ2510、複数のシフタ2520、および加算器ツリー2530を含む。本実施形態において、仮数乗算器2500は、基数4の乗算を実行するので、各グループは、第1仮数14の2ビットを格納する。各グループによって表される値は、選択フラグとしてグループに対応するマルチプレクサ2510に入力される。例えば、マルチプレクサ2510は、グループ内の2ビットが“00”のとき“0”を出力し、グループ内の2ビットが“01”のとき、マルチプレクサ2510は、“1/T”を出力し、グループ内の2ビットが“10”のとき、マルチプレクサ2510は、“2/T”を出力し、グループ内の2ビットが“11”のとき、マルチプレクサ2510は、“3/T”を出力する。さらに、基数が4であるため、隣接する2つのシフタ2520間のシフト長の差は2である。
【0040】
図4に示した基数2の乗算ロジックおよび図7に示した基数4の乗算ロジックは一例であることに留意されたい。本開示は、基数の値を限定するものではない。
【0041】
図8は、混合精度乗算回路3000の第3実施形態のブロック図である。第1実施形態とは対照的に、混合精度乗算回路3000の第3実施形態は、サブセットセレクタ3300および仮数乗算器3500に結合された抽出ロジック3400をさらに含む。抽出ロジック3400は、サブセットセレクタ3300から選択されたサブセットを受け取り、選択されたサブセットから被乗数として一部を抽出し、被乗数を仮数乗算器3500に入力する。つまり、仮数乗算器3500が乗算を実行する前に、抽出ロジック3400は、選択されたサブセットから抽出することにより、必要なビットを取得する。サブセットセレクタ3300および仮数乗算器3500の実装は、混合精度乗算回路1000の第1実施形態を参照することができる。
【0042】
一例では、抽出ロジック3400はバレルシフタによって実装され、シフト演算は左シフトであり、シフト長は第2セレクタの出力から2を引いた値に等しい。例えば、選択されたサブセットが(Wbase+Woverlap)ビット幅であり、Wbaseはベース幅を示し、Woverlapはオーバーラップ幅を示し、第2セレクタによって出力されるオフセットはWoffsetである場合、抽出された部分は(Wbase+Woverlap-Woffset+2)ビット幅である。追加の2ビットは、三角関数演算で象限を決定するために、選択されたサブセットの整数部分を保持するように構成される。
【0043】
図9は、混合精度乗算回路3000の第3実施形態による計算フローを示す概略図である。
【0044】
ステップS1において、混合精度乗算回路3000は、第2オペランド20をサブセットセレクタ3300に格納する。第2オペランド20はnビットの定数であり、複数のサブセットに分割される。
【0045】
ステップS2において、混合精度乗算回路3000は、変数入力である第1オペランド10を受け取る。第1オペランド10は、第1指数12および第1仮数14を含む。
【0046】
ステップS3において、サブセットセレクタ3300は、第1指数12に従って複数のサブセットからサブセットを選択し、選択されたサブセットをmビット幅で出力する。
【0047】
ステップS4では、抽出ロジックが選択されたサブセットからpビットを抽出する。一例では、抽出ロジックは、不要なビットをシフトアウトする可変シフタを含む。nはm以上であり、mはp以上、すなわち、n≧m≧pであることに留意されたい。
【0048】
ステップS5において、仮数乗算器3500は、第2仮数24と第1仮数14から抽出されたpビット部分に応じた結果を生成する演算を行う。
【0049】
図10は、混合精度乗算回路4000の第4実施形態のブロック図を示す。第1実施形態とは対照的に、混合精度乗算回路4000の第4実施形態は、積56を受け取るために仮数乗算器4500に結合された抽出ロジック4700をさらに含む。積56は、左部分、右部分、および左部分と右部分との間の結果部分を含む。抽出ロジック4700は、左部分と右部分とをシフトして、結果部分を出力(結果90)として抽出する。すなわち、抽出ロジック4700は、乗算結果(積)をシフトして端数部分を得る。なお、端数部分は抽出可能な一例に過ぎず、本開示はこれに限定されない。他の例では、アプリケーションはビットの異なる部分を抽出する必要があってもよい。
【0050】
図11は、混合精度乗算回路3000の第4実施形態による計算フローを示す模式図である。
【0051】
図11に示すステップT1、T2、T3のフローは、図9に示すステップS1、S2、S3のフローと同一である。フローの詳細については、図9の説明を参照されたい。
【0052】
ステップT4において、仮数乗算器4500は、第2仮数24および第1仮数14から選択されたmビットのサブセットに従って、一時的な結果を生成するために乗算を実行する。
【0053】
ステップT5およびT6において、抽出ロジック4700は、一時的な結果からqビットを最終結果として抽出する。なお、nはm以上であり、mはq以上、すなわち、n≧m≧qである。
【0054】
図8図11を要約すると、第3実施形態の混合精度乗算回路3000は乗算前に抽出を行い、一方、第4実施形態の混合精度乗算回路4000は乗算後に抽出を行う。
【0055】
上記実施形態で説明した混合精度乗算回路は、単精度、倍精度、4倍精度、あるいは任意の精度のフォーマットで結果を出力するのに適している。これに対して、半精度浮動小数点(fp16)、8ビット浮動小数点(fp8)、4ビット浮動小数点(fp4)、あるいはブレーン浮動小数点(bfloat16)のように、計算の精度が比較的低い場合には、提案する混合精度乗算回路は、サブセットセレクタを省略してもよい。
【0056】
図12は、本発明に係る混合精度乗算回路5000の第5実施形態を示すブロック図である。図12に示すように、混合精度乗算回路5000は、仮数乗算器5300と、サブセットセレクタ5500と、抽出ロジック5700とを含む。
【0057】
仮数乗算器5300は、第2オペランド20を格納し、第1仮数14を受け取る。仮数乗算器5300は、第2オペランド24と仮数14に従って乗算を実行することにより、積56を生成する。
【0058】
サブセットセレクタ5500は、積56を受け取るために仮数乗算器5300に結合される。サブセットセレクタ5500は、第1指数12に従って、複数のサブセットから選択されたサブセットを出力する。複数のサブセットの各々は、積56の一部を表す。
【0059】
抽出ロジック5700は、選択されたサブセット30を受信するために、サブセットセレクタ5500に結合される。抽出ロジック5700は、選択されたサブセット30から結果90として一部を抽出する。
【0060】
以上をまとめると、第1~第4実施形態では、乗算を行う前に、混合精度乗算回路1000、2000、3000、または4000は、複数のサブセットから1つのサブセットを選択し、選択したサブセット30を被乗数52として乗数54の乗算を行う。第5実施形態では、上記で紹介したサブセットの分割の概念を参照して、まず、仮数乗算器5300によって被乗数52と乗数54との乗算を行い、次に、積56を複数のサブセットに分割し、最後に、混合精度乗算回路5000が1つのサブセットを抽出して選択し、結果90を出力する。
【0061】
図13は、本発明の混合精度乗算回路の第6実施形態のブロック図である。第6実施形態において、混合精度乗算回路6000は、部分積セレクタ6300と部分積加算器6500とを含む。
【0062】
部分積セレクタ6300は、第2オペランド20と、1つまたは複数の仮数倍数34のセットとを記憶するように構成される。1つまたは複数の仮数倍数34のセット(以降、「倍数34」と呼ぶ)は、第2仮数24の整数倍である。例えば、第2仮数24が1/π(2進数形式)である場合、仮数倍数は、2/π、3/πを含んでもよい。
【0063】
仮数倍数の数は、乗算で採用される基数によって決定される。基数がRの場合、乗算の各部分積は、第1仮数14と第2仮数24のlog(R)ビットを一度に乗算することによって生成される。ビット数がlog(R)である場合、可能な値はR個となる。例えば、第2仮数24が1/π、R=4の場合、乗算は0/π、1/π、2/π、3/πが用意されるはずである。
【0064】
第2仮数24は複数のサブセットに分割され、仮数倍数34の各々は複数の参照サブセットに分割される。図14は、サブセット/参照サブセットの分割(4つの分割)の例示的な概略図である。この例では、第2仮数24は、4つのサブセットに分割され、L1~L4は、サブセット/参照サブセットの左端ビットの位置を示し、R1~R4は、サブセット/参照サブセットの右端ビットの位置を示す。さらに、仮数倍数34の各々は、図14に示されるのと同様に、4つのサブセットに分割することができる。
【0065】
複数のサブセットの各々は、複数のグループを含み、複数の参照サブセットの各々は、複数の参照グループを含む。複数のグループの各々は、オフセットでシフトされた第2オペランドの一部であり、複数の参照グループの各々は、参照オフセットでシフトされた仮数倍数の一部である。複数のグループの各々で採用されるオフセットは異なり、複数の参照グループの各々で採用される参照オフセットは異なる。オフセットの幅は、乗算で採用される基数によって決定される。例えば、基数がRの場合、オフセットの幅はlog(R)ビットとなる。グループの数は、最初の仮数14のビット幅を乗算で採用された基数で割ることで得られた商である。グループと参照グループは同じ方針で決定されることに注意されたい。
【0066】
図15は、グループ/参照グループの一例を示す図である。第2仮数24の左端8ビットが「aabbccdd」であり、第2仮数24の右端8ビットが「eeffgghh」であり、各サブセットが4つのグループG1~G4を含むと仮定する。第1サブセット241を参照されたい。第1グループG1は、第2仮数24で直接満たされる。第2グループG2は、オフセットとして2ビットのゼロから始まり、その後、第2仮数24が埋められる。第3のグループG3は、オフセットとして4ビットのゼロから始まり、その後、第2仮数24が埋められる。第4のグループG4は、オフセットとして6ビットのゼロから始まり、次に第2仮数24が埋められる。別の観点から見ると、第1グループG1を除き、各グループ(G2、G3、またはG4)の値は、前のグループ(G1、G2、またはG3)の値を2ビットだけ右にシフトした結果である。第4のサブセット244を参照すると、第1グループG1は“eeffgghh”で終わり、第2グループG2は“xxeeffgg”で終わり、第3のグループG3は“xxxxeeff”で終わり、第4のグループG4は“xxxxxxee”で終わり、ここで、“x”は第2仮数24の中間ビットを表す。すなわち、第2~第4のグループG2~G4では、第2仮数24の右端のビットが部分的に切り捨てられるが、部分積の精度は主に左辺の有効ビットに依存するため、部分積の精度には影響しない。さらに、第2サブセット242または第3のサブセット243の複数のグループも、前述のオフセット特性を有する。異なる点は、第1サブセット241の第2~第4グループG2~G4のみが、右シフト演算によりゼロで埋められることである。
【0067】
部分積セレクタ6300は、複数のサブセットから所望のサブセットを選択し、指数に応じた仮数倍数34のそれぞれについて、複数の参照サブセットから所望の参照サブセットを選択する。選択機構については、第1及び第2実施形態を参照されたい。部分積セレクタは、複数の候補グループを出力し、複数の候補グループの各々は、所望のサブセットにおける複数のグループのうちの1つ、または所望の参照サブセットにおける複数の参照グループのうちの1つである。
【0068】
図16を参照されたい。この例では、乗算で採用される基数は4であり、第1仮数14は“11 01 00 10”であり、第2仮数24は1/Tとして表され、4つのサブセットに分割され、仮数倍数は(2/T)、(3/T)を含み、所望のサブセット243は、4つのサブセットの(左から)3番目のものである。したがって、仮数倍数(2/T、3/T)のそれぞれについて、所望の参照サブセット(343または443)も、4つの参照サブセットのうちの3番目のものである。見やすさのため、図16では、重複するサブセットの特性を省略する。
【0069】
前提条件に基づき、第1仮数14の左端2ビットが“11”であるため、部分積セレクタは、(3/T)の第1グループG31を第1候補グループとして選択してもよい。第1仮数14の次の2ビットが“01”であるため、部分積セレクタは、(1/T)の第2グループG12を第2候補グループとして選択してもよい。第1仮数14の次の2ビットが“00”であるため、部分積セレクタは、すべてのゼロで満たされた第3候補グループを出力してもよい。第1仮数14の右端の2ビットが“10”であるため、部分積セレクタは、第4候補グループとして、(2/T)の第4グループG24を選択してもよい。なお、候補グループ40は同時に出力されてもよく、0/Tのビットは全て0である。まとめると、サブセットでどのグループを出力すべきかの判断は、第1仮数14のビットの位置に依存し、0/T~3/Tのいずれを選択するかの判断は、第1仮数14のビットの値に依存する。
【0070】
部分積加算器6500は、複数の候補グループ40を受信するために部分積セレクタ6300に結合され、部分積加算器6500は、複数の候補グループを加算して結果を出力する。一実施形態では、部分積加算器6500は加算器ツリー構造で実装される。
【0071】
図17は、混合精度乗算回路を用いた浮動小数点乗算器を示すブロック図である。浮動小数点乗算器は、バイアス減算器、サブセットセレクタ、仮数乗算器、指数加算器、指数調整加算器、および正規化器を含む。
【0072】
入力オペランドは、符号部分、指数部分、仮数分を含む。入力オペランドの符号は、出力値の符号部分に直接ハードワイヤされている。
【0073】
入力オペランドの指数部はバイアス減算器に入力され、サブセットセレクタはバイアスのかかっていない指数を受け取ることができる。IEEE754浮動小数点数では、指数は工学的な意味でバイアスがかかっており、格納される値は指数バイアス(またはバイアスされた指数)によって実際の値からオフセットされる。例えば、バイアスは単精度では127、倍精度では1023である。
【0074】
サブセットセレクタは、選択されたサブセットと、選択されたサブセットに対応する固定指数とを出力するように構成されている。指数加算器は、固定指数を受け取るためにサブセットセレクタに結合され、入力オペランドのバイアスがかかっていない指数(不偏指数)を受け取るように構成される。指数加算器は、固定指数と不偏指数を加算して指数の和を生成する。指数調整加算器は、指数の和を受け取るために指数加算器に結合され、指数調整値を受け取るために正規化器に結合される。指数調整加算器は指数和と指数調整値を加算する。指数調整加算器の出力は、出力値の指数部分にハードワイヤされる。
【0075】
仮数乗算器は、選択されたサブセットを受け取るためにサブセットセレクタに結合される。また、仮数乗算器は、入力オペランドの仮数を受け取り、選択されたサブセットと仮数に応じて乗算を実行し、積を生成する。この積は正規化器に入力される。正規化器は、指数加算器に結合され、指数和を正規化基準として受け取る。正規化器は、積と正規化基準に従って正規化手順を実行するように構成される。正規化手順は、出力値の仮数部分として提供される正規化仮数と、指数調整値を出力する。基本的に、指数調整値は、正規化のプロセス中に仮数をシフトしなければならなかったビット数である。一例として、正規化には丸め処理が含まれる。
【0076】
以上のことから、本開示では、例えば巨大な引数の範囲縮小などに適用可能な混合精度乗算回路を提案する。本混合精度乗算回路は、高精度オペランドを格納し、乗算において「必要なビット」を選択するためのサブセットセレクタを有する。提案するサブセットセレクタは、面積の大きい可変シフタを使用する代わりに、ハードウェア実装において面積を節約することができる。さらに、提案する高精度混合乗算回路の出力遅延は、従来の乗算器と比較して大幅に短縮される。これは、提案する乗算回路がより高速な演算速度を持つことを意味する。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
【外国語明細書】