(57)【要約】  浮動小数点オペランドを乗算するための回路および方法。指数加算器回路は、第１の指数と第２の指数とを合計し、出力指数を生成する。仮数乗算器回路は、第１の仮数と第２の仮数とを乗算し、出力仮数を生成する。第１の変換回路は、出力指数と出力仮数とを固定小数点数に変換する。アキュムレータ回路は、累積レジスタの内容と固定小数点数の内容とを合計して累積値にし、累積値を累積レジスタに記憶する。【選択図】図１
2021536076.tif 000002
【特許請求の範囲】
【請求項１】
第１の指数と第２の指数とを合計し、出力指数を生成するように構成された指数加算器回路と、
第１の仮数と第２の仮数とを乗算し、出力仮数を生成するように構成された仮数乗算器回路と、
前記指数加算器回路の出力と前記仮数乗算器回路の出力とに結合された第１の変換回路であって、前記出力指数と前記出力仮数とを固定小数点数に変換するように構成された第１の変換回路と、
累積レジスタと、
前記変換回路と前記累積レジスタとに結合されたアキュムレータ回路であって、前記累積レジスタの内容と前記固定小数点数の内容とを合計して累積値にし、前記累積値を前記累積レジスタに記憶するように構成されたアキュムレータ回路と
を備える、回路構成。
【請求項２】
前記累積レジスタからの固定小数点出力を浮動小数点出力に変換するように構成された第２の変換回路と、
第１の共有指数と第２の共有指数との記憶のために構成された共有指数レジスタと、
前記第１の共有指数と前記第２の共有指数と前記浮動小数点出力の指数とに基づいて、前記浮動小数点出力の前記指数を拡張された指数に更新するように構成された指数復元回路と
をさらに備える、請求項１に記載の回路構成。
【請求項３】
前記累積レジスタの出力に結合された第２の変換回路であって、前記累積レジスタからの固定小数点値を浮動小数点値に変換するように構成された第２の変換回路をさらに備える、請求項１または２に記載の回路構成。
【請求項４】
前記指数加算器回路の複数のインスタンスと、
前記仮数乗算器回路の複数のインスタンスと、
前記第１の変換回路の複数のインスタンスと
をさらに備え、
前記アキュムレータ回路が、前記第１の変換回路の前記複数のインスタンスに結合され、前記複数の第１の変換回路の第１のペアからのオペランドの第１のペアを、前記複数の変換回路の第２のペアからのオペランドの第２のペアを合計することと並行して、合計するように構成された単一命令複数データ加算器回路を含む、請求項１から３のいずれか一項に記載の回路構成。
【請求項５】
乗算累積（ＭＡＣ）回路のアレイを含むニューラルネットワークをさらに備え、各ＭＡＣ回路が、前記指数加算器回路と、前記仮数乗算器回路と、前記第１の変換回路と、前記累積レジスタと、前記アキュムレータ回路とのそれぞれのインスタンスを含む、請求項１から４のいずれか一項に記載の回路構成。
【請求項６】
第１の共有指数および第２の共有指数をそれぞれ第１の共有指数レジスタおよび第２の共有指数レジスタに記憶することと、
第１の指数と第２の指数とを合計し、出力指数を生成することと、
第１の仮数と第２の仮数とを乗算し、出力仮数を生成することと、
累積レジスタの内容と、前記出力指数および前記出力仮数に基づく値の内容とを合計して累積値にすることと、
前記累積値を前記累積レジスタに記憶することと、
前記第１の共有指数と前記第２の共有指数と前記累積値の指数とに基づいて、前記累積値の前記指数を拡張された指数に更新することと
を含む、方法。
【請求項７】
オペランドフォーマッティング回路によって、２つ以上の浮動小数点被乗数を組み合わせてマルチ被乗数オペランドにすることと、
前記オペランドフォーマッティング回路によって、２つ以上の浮動小数点乗数を組み合わせてマルチ乗数オペランドにすることであって、
前記乗算することが、前記マルチ被乗数オペランドに前記マルチ乗数オペランドを乗算すること、および４つ以上の仮数積を有する値を出力することを含む、２つ以上の浮動小数点乗数を組み合わせてマルチ乗数オペランドにすることと、
指数加算器回路の４つ以上のインスタンスの各インスタンスによって、前記２つ以上の浮動小数点被乗数のうちの１つの指数と前記２つ以上の浮動小数点乗数のうちの１つの指数とを合計し、出力指数を生成することと、
第１の変換回路の４つ以上のインスタンスの各インスタンスによって、前記出力指数と前記仮数積のうちの１つとを固定小数点数に変換することと、
アキュムレータ回路の４つ以上のインスタンスによって、アキュムレータレジスタの４つ以上のインスタンスのうちの１つの内容と前記固定小数点数の内容とを合計して累積値にし、前記累積値を前記累積レジスタの前記インスタンスのうちの１つに記憶することと、
第２の変換回路の４つ以上のインスタンスによって、前記累積レジスタの前記インスタンスのうちの１つからの固定小数点出力を浮動小数点出力に変換することと、
指数復元回路の４つ以上のインスタンスによって、前記第１の共有指数と前記第２の共有指数と前記浮動小数点出力の指数とに基づいて、前記第２の変換回路の前記インスタンスのうちの１つからの前記浮動小数点出力の前記指数を拡張された指数に更新することと
をさらに含む、請求項６に記載の方法。
【請求項８】
前記第１の共有指数が、前記２つ以上の浮動小数点被乗数の共有指数である、請求項７に記載の方法。
【請求項９】
前記第２の共有指数が、前記２つ以上の浮動小数点乗数の共有指数である、請求項８に記載の方法。
【請求項１０】
共有指数加算器回路によって、前記第１の共有指数と前記第２の共有指数とを合計することをさらに含む、請求項６から９のいずれか一項に記載の方法。
【請求項１１】
前記指数復元回路の各インスタンスによって、前記浮動小数点出力の前記指数と前記共有指数加算器回路の出力とを合計することをさらに含む、請求項６から１０のいずれか一項に記載の方法。
【請求項１２】
第１の変換回路によって、前記出力指数と前記出力仮数とを固定小数点値に変換することであって、前記固定小数点値が、前記出力指数と前記出力仮数とに基づく値である、固定小数点値に変換することと、
第２の変換回路によって、前記累積レジスタからの固定小数点値を浮動小数点値に変換することと
をさらに含む、請求項６から１１のいずれか一項に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、一般に、乗算累積（ＭＡＣ：ｍｕｌｔｉｐｌｙ  ａｎｄ  ａｃｃｕｍｕｌａｔｅ）回路に関する。
【背景技術】
【０００２】
ニューラルネットワークは、計算集約的アプリケーションである。ＶＧＧ−１６畳み込みニューラルネットワーク（ＣＮＮ：ｃｏｎｖｏｌｕｔｉｏｎａｌ  ｎｅｕｒａｌ  ｎｅｔｗｏｒｋ）など、いくつかの大規模ニューラルネットワークは、単一の画像の画像分類を実行するために３０Ｇｆｌｏｐｓを必要とする。計算の大部分は乗算および累積演算に向けられる。乗算および累積演算は、たとえばドット積およびスカラー積を計算する際に使用される。
【０００３】
計算時間を短縮するためにハードウェアアクセラレータが使用されている。例示的なハードウェアアクセラレータは、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、およびグラフィックス処理ユニット（ＧＰＵ）など専用プロセッサを含む。ハードウェアアクセラレータによって与えられたパフォーマンス改善は大きいが、電力消費およびデータ帯域幅要件の増加も大きい。重みおよび入力アクティブ化は、しばしば、３２ビット単精度浮動小数点（ｓｉｎｇｌｅ  ｐｒｅｃｉｓｉｏｎ  ｆｌｏａｔｉｎｇ  ｐｏｉｎｔ）値として記憶され、ハードウェアアクセラレータは、３２ビットのオペランドに対してＭＡＣ演算を実行する。
【０００４】
ニューラルネットワークの計算要件を低減するためのいくつかの手法が提案されている。いくつかの手法では、重みと入力アクティブ化とを表すために使用されるビットの数が低減され、それにより計算要件と帯域幅要件の両方が低減される。しかしながら、これらの手法はレイヤ固有のアーキテクチャおよび／または特定のトレーニングプロシージャを必要とし得る。いくつかの以前の手法はまた、複雑な分類タスクでは十分に機能しないことがある。
【発明の概要】
【０００５】
開示される回路構成は、第１の指数と第２の指数とを合計し、出力指数を生成するように構成された指数（ｅｘｐｏｎｅｎｔ）加算器回路を含む。仮数（ｍａｎｔｉｓｓａ）乗算器回路は、第１の仮数と第２の仮数とを乗算し、出力仮数を生成するように構成される。第１の変換回路は、指数加算器回路の出力と仮数乗算器回路の出力とに結合される。変換回路は、出力指数と出力仮数とを固定小数点数（ｆｉｘｅｄ  ｐｏｉｎｔ  ｎｕｍｂｅｒ）に変換するように構成される。回路構成は、累積レジスタと、アキュムレータ回路とをさらに含む。アキュムレータ回路は、変換回路と累積レジスタとに結合される。アキュムレータ回路は、累積レジスタの内容と固定小数点数の内容とを合計して累積値にし、累積値を累積レジスタに記憶するように構成される。
【０００６】
開示する方法は、第１の共有指数および第２の共有指数をそれぞれ第１の共有指数レジスタおよび第２の共有指数レジスタに記憶することを含む。本方法は、第１の指数と第２の指数とを合計し、出力指数を生成する。本方法はさらに、第１の仮数と第２の仮数とを乗算し、出力仮数を生成する。累積レジスタの内容と、出力指数および出力仮数に基づく値の内容とは合計されて累積値になる。累積値は、累積レジスタに記憶され、累積値の指数は、第１の共有指数と第２の共有指数と累積値の指数とに基づいて、拡張された指数に更新される。
【０００７】
他の特徴は、以下の発明を実施するための形態および特許請求の範囲の検討から認識されよう。
【０００８】
回路および方法の様々な態様および特徴は、以下の詳細な説明を検討し、図面を参照すると明らかになろう。
【図面の簡単な説明】
【０００９】
【図１】乗算器が浮動小数点値に対して演算を行い、アキュムレータが固定小数点値に対して演算を行う、ＭＡＣ回路を示す図である。
【図２】浮動小数点重み値と入力アクティブ化値とから共有指数をくくり出す（ｆａｃｔｏｒ  ｏｕｔ）ことによってビット幅が縮小された、入力オペランドに対して演算を行うＭＡＣ回路を示す図である。
【図３】浮動小数点乗算器と変換回路とを実装するプログラマブル論理回路と、部分累積を実装する単一命令複数データ（ＳＩＭＤ：ｓｉｎｇｌｅ  ｉｎｓｔｒｕｃｔｉｏｎ  ｍｕｌｔｉｐｌｅ  ｄａｔａ）デジタル信号プロセッサ（ＤＳＰ）回路と、加算器回路を実装するさらなるプログラマブル論理回路とを有する、ターゲットプログラマブル集積回路上のＭＡＣ回路のアレイまたはアレイの一部分の例示的な実装形態を示す図である。
【図４】浮動小数点乗算器と変換回路とを実装するプログラマブル論理回路と、単一命令複数データ（ＳＩＭＤ）デジタル信号プロセッサ（ＤＳＰ）回路と、加算器回路を実装するさらなるプログラマブル論理回路とを有する、ターゲットプログラマブル集積回路上のＭＡＣ回路のアレイまたはアレイの一部分の例示的な実装形態を示す図である。
【図５】浮動小数点重み値と入力アクティブ化値とから共有指数をくくり出すことによってビット幅が縮小された、入力オペランドに対して演算を行うＭＡＣ回路を示す図である。
【図６】指数の一部分がＭＡＣ回路中の浮動小数点オペランドからくくり出されており、仮数を乗算する回路が、いくつかの低ビット幅乗算を実行する大ビット乗算器として実装される、回路構成を示す図である。
【図７】オペランドを量子化することによってオペランドのビット幅を縮小し、ＭＡＣ回路によって乗算および累積演算を実行するプロセスのフローチャートを示す図である。
【図８】開示される回路およびプロセスが実装され得る、プログラマブル集積回路（ＩＣ）を示す図である。
【発明を実施するための形態】
【００１０】
以下の説明では、本明細書で提示される具体的な例について説明するために、多数の具体的な詳細が記載される。しかしながら、１つまたは複数の他の例および／またはこれらの例の変形例が、以下で与えられるすべての具体的な詳細なしに実施され得ることは、当業者には明らかであるべきである。他のインスタンスでは、本明細書での例の説明を不明瞭にしないように、よく知られている特徴については詳細に説明していない。説明しやすいように、同じ要素または同じ要素の追加のインスタンスを指すために、同じ参照番号が異なる図において使用され得る。
【００１１】
開示される手法は、特殊なトレーニングまたはネットワークアーキテクチャへの修正を必要とすることなしに低精度の演算を実行する。小ビット幅計算は、浮動小数点乗算と固定小数点加算とを実行するＭＡＣ回路、および／またはＭＡＣ回路への浮動小数点入力値の量子化などの特徴の組合せによって達成され得る。ＭＡＣ回路中のオペランドのビット幅を縮小するための１つの手法では、乗算演算が、浮動小数点乗算を使用して実行され、加算が、固定小数点加算を使用して実行される。オペランドの浮動小数点表現では、指数は、指数を常に正にする量によってバイアスされる。たとえば、浮動小数点表現では、１ビットは、符号、ＮＥ＝指数を表すビットの数と、ＮＭ＝仮数を表すビットの数とを表し、指数は２ＮＥ−１−１によってバイアスされる。このフォーマットは、各浮動小数点数が（−１）Ｓ＊（１．Ｍ＊２Ｅ−ｂｉａｓ）に等しい値を有するような隠れビットを暗示し、ここで、Ｓは符号の値であり、Ｅは指数の値であり、Ｍは仮数の値である。
【００１２】
別の特徴では、浮動小数点オペランドのビット幅は、オペランドを量子化することによって縮小される。共有指数は、たとえば、重みと入力アクティブ化とのセットを含むことができるオペランドからくくり出される。重みと入力アクティブ化とのための共有指数を生成することは、オペランドを表すために使用されるビットの数を、たとえば、１符号ビット、３指数ビット、および３仮数ビットに低減することができる。ＭＡＣ回路中の乗算器は、それによって小ビット幅乗算器に縮小され得る。代替的に、大ビット幅乗算器は、いくつかの小ビット幅乗算を同時に実行するために使用され得る。乗算器は、たとえば、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）中にルックアップテーブルによって安価に実装され得る。ＭＡＣ回路内の累積は、浮動小数点値または固定小数点演算のいずれかを使用して実行され得る。
【００１３】
図１は、乗算器が浮動小数点値に対して演算を行い、アキュムレータが固定小数点値に対して演算を行う、ＭＡＣ回路１００を示す。パイプライン化に関連する制限と、浮動小数点加算器実装における多数の論理レベルとを克服するために、１つの手法では、乗算が、浮動小数点乗算器を使用して実行され、乗算器の出力は固定小数点値に変換され、累積が、最終結果を変換して所望のフォーマットに戻すオプションとともに、固定小数点加算を使用して実行される。
【００１４】
例示的なアプリケーションでは、ＭＡＣ回路１００は、ニューラルネットワーク中で使用されるＭＡＣ回路のアレイ（図示せず）中のＭＡＣ回路の１つのインスタンスであり得る。入力浮動小数点重み値はレジスタ１０２中に与えられ、入力浮動小数点入力アクティブ化値はレジスタ１０４中に与えられる。重み値および入力アクティブ化値は、ＸＯＲ回路１０８と加算器回路１１０と乗算器回路１１２とを含む、浮動小数点乗算器回路１０６に入力される。
【００１５】
各浮動小数点値の１つのビットは符号（「符号ビット」）を示し、ビットの１つのセットは指数（「指数ビット」）を表し、ビットの別のセットは仮数（「仮数ビット」）を表す。重みオペランドの符号ビットおよび入力アクティブ化オペランドの符号ビットはＸＯＲ回路１０８に入力され、指数ビットは加算器回路１１０に入力され、仮数ビットは乗算器回路１１２に入力される。
【００１６】
浮動小数点固定小数点変換回路１１４は、ＸＯＲ回路１０８からの出力符号ビットと、加算器回路１１０からの得られた指数と、乗算器回路１１２からの積とを入力する。変換回路は、浮動小数点乗算器によって出力された符号ビットと指数ビットと仮数ビットとによって表される浮動小数点値を固定小数点値に変換する。アキュムレータ回路１１６は、変換回路１１４からの固定小数点値を、レジスタ１１８に記憶された累積値に加算し、次いで累積レジスタを新しい値で更新する。
【００１７】
例示的なアプリケーションでは、重み値と入力アクティブ化値とのセットが乗算され、累積されると、固定小数点浮動小数点変換回路１２０は、累積レジスタ１１８からの結果を読み取り、固定小数点値を浮動小数点値に変換することを可能にされ得る。出力値は、たとえば、ニューラルネットワーク中の次のレイヤへの入力値であり得る。
【００１８】
図２は、浮動小数点重み値と入力アクティブ化値とから共有指数をくくり出すことによってビット幅が縮小された、入力オペランドに対して演算を行うＭＡＣ回路２００を示す。共有指数は、最後に累積された値に復元され得る。
【００１９】
例示的なアプリケーションでは、ＭＡＣ回路２００は、ニューラルネットワーク中で使用されるＭＡＣ回路のアレイ（図示せず）中のＭＡＣ回路の１つのインスタンスであり得る。入力浮動小数点重み値はレジスタ１０２中に与えられ、入力浮動小数点入力アクティブ化値はレジスタ１０４中に与えられる。各入力重み値および入力アクティブ化値は、共有指数がそれに対してくくり出された、元の重み値および元の入力アクティブ化値の量子化されたバージョンである。重み値のための共有指数はレジスタ２０２に記憶され得、入力アクティブ化値のための共有指数はレジスタ２０４に記憶され得る。重みオペランドの符号ビットおよび入力アクティブ化オペランドの符号ビットはＸＯＲ回路１０８に入力され、指数ビットは加算器回路１１０に入力され、仮数ビットは乗算器回路１１２に入力される。
【００２０】
浮動小数点累積または固定小数点累積のいずれかは、ＸＯＲ回路１０８と加算器回路１１０と乗算器回路１１２とからの浮動小数点結果を累積するために使用され得る。例示的なＭＡＣ回路２００は、固定小数点累積を実行し、浮動小数点値を固定小数点値に変換するための浮動小数点固定小数点変換回路１１４を含む。浮動小数点累積を伴う実装形態が図５に示されていることに留意されたい。
【００２１】
アキュムレータ回路１１６は、変換回路１１４からの固定小数点値をレジスタ１１８に記憶された累積値に加算し、次いで累積レジスタを新しい値で更新する。
【００２２】
重み値と入力アクティブ化値とのセットが乗算され、累積されると、固定小数点浮動小数点変換回路１２０は、累積レジスタ１１８からの結果を読み取り、固定小数点値を浮動小数点値に変換することを可能にされ得る。指数復元（ｒｅｓｔｏｒａｔｉｏｎ）回路２０６は、変換回路１２０からの浮動小数点結果値を入力し、共有指数レジスタ２０２および２０４からの共有指数を含むように結果値の指数を復元する。指数復元回路２０６からの出力値は、たとえば、ニューラルネットワーク中の次のレイヤへの入力値であり得る。
【００２３】
図３は、浮動小数点乗算器および変換回路を実装するプログラマブル論理回路と、単一命令複数データ（ＳＩＭＤ）デジタル信号プロセッサ（ＤＳＰ）回路と、加算器回路および累積を実装するさらなるプログラマブル論理回路とを有する、ターゲットプログラマブル集積回路上のＭＡＣ回路３００のアレイまたはアレイの一部分の例示的な実装形態を示す。
【００２４】
浮動小数点乗算回路１０６、変換回路３０６、３０８、３１０、３１２、３１４、３１６、３１８、および３２０、ＳＩＭＤ  ＤＳＰ回路３０２および３０４、ならびに加算器回路３２４、３２６、および３２８は、ＭＡＣ回路のアレイまたはアレイの一部分を実装することができる。ＳＩＭＤ  ＤＳＰ回路３０２は、異なるサイズのオペランドに対して様々な算術関数を実行するように構成可能である。ＳＩＭＤ  ＤＳＰ回路の例示的な実装形態は、ＸＩＬＩＮＸ（登録商標），Ｉｎｃ．製のフィールドプログラマブルゲートアレイ（ＦＰＧＡ）において見られるＤＳＰ４８Ｅ１スライスである。
【００２５】
図３の例示的な実装形態では、各ＳＩＭＤ  ＤＳＰ回路３０２および３０４はクワッド１２ビット加算器として構成される。ＳＩＭＤ  ＤＳＰ回路３０２は浮動小数点固定小数点変換回路３０６、３０８、３１０、および３１２からの固定小数点オペランドを累積する。ＳＩＭＤ  ＤＳＰ回路３０４は浮動小数点固定小数点変換回路３１４、３１６、３１８、および３２０からの固定小数点オペランドを累積する。ＳＩＭＤ  ＤＳＰ回路は、それによって、複数のＭＡＣの累積機能を並列に実行する。例示的なＸＩＬＩＮＸ  ＳＩＭＤ回路はまた、デュアル２４ビットモードにおいて加算器を実装することができる。
【００２６】
例示的な構成では、ＳＩＭＤ  ＤＳＰ回路３０２は、変換器３０６および３０８によって与えられた値を合計し、並行して、変換器３１０および３１２によって与えられた値を合計し、２つの出力値を並列に生成する。同様に、ＳＩＭＤ  ＤＳＰ回路３０４は、変換器３１４および３１６によって与えられた値を合計し、並行して、変換器３１８および３２０によって与えられた値を合計し、２つの出力値を並列に生成する。ＳＩＭＤ  ＤＳＰ回路３０２からの２つの出力値は、１つの値を生成する加算器回路３２４に入力され、ＳＩＭＤ  ＤＳＰ回路３０４からの２つの出力値は、１つの値を生成する加算器回路３２６に入力される。加算器回路によって出力された値は、変換器３０６、３０８、３１０、３１２、３１４、３１６、３１８、および３２０によって出力された値の最後の和を生成する加算器回路３２８に入力される。
【００２７】
図４は、浮動小数点乗算器および変換回路を実装するプログラマブル論理回路と、部分累積を実装する単一命令複数データ（ＳＩＭＤ）デジタル信号プロセッサ（ＤＳＰ）回路と、加算器回路を実装するさらなるプログラマブル論理回路とを有する、ターゲットプログラマブル集積回路上のＭＡＣ回路４００のアレイまたはアレイの一部分の例示的な実装形態を示す。図３の加算器回路３２４および３２６は、デュアル２４ビット加算器として構成されるＳＩＭＤ  ＤＳＰ回路４０２によって交換される。
【００２８】
例示的な構成では、ＳＩＭＤ  ＤＳＰ回路３０２は、変換器３０６および３０８によって与えられた値を合計し、並行して、変換器３１０および３１２によって与えられた値を合計し、２つの出力値を並列に生成する。同様に、ＳＩＭＤ  ＤＳＰ回路３０４は、変換器３１４および３１６によって与えられた値を合計し、並行して、変換器３１８および３２０によって与えられた値を合計し、２つの出力値を並列に生成する。ＳＩＭＤ  ＤＳＰ回路３０２からの２つの出力値およびＳＩＭＤ  ＤＳＰ回路３０４からの２つの出力値はＳＩＭＤ  ＤＳＰ回路４０２に入力される。ＳＩＭＤ  ＤＳＰ回路４０２は、ＳＩＭＤ  ＤＳＰ回路３０２によって与えられた２つの値を合計し、並行して、ＳＩＭＤ  ＤＳＰ回路３０４によって与えられた値を合計し、２つの出力値を並列に生成する。ＳＩＭＤ  ＤＳＰ回路４０２によって出力された値は、変換器３０６、３０８、３１０、３１２、３１４、３１６、３１８、および３２０によって出力された値の最後の和を生成する加算器回路３２８に入力される。
【００２９】
図５は、浮動小数点重み値と入力アクティブ化値とから共有指数をくくり出すことによってビット幅が縮小された、入力オペランドに対して演算を行うＭＡＣ回路５００を示す。共有指数は、最後に累積された値に復元され得る。
【００３０】
例示的なアプリケーションでは、ＭＡＣ回路５００は、ニューラルネットワーク中で使用されるＭＡＣ回路のアレイ（図示せず）中のＭＡＣ回路の１つのインスタンスであり得る。入力浮動小数点重み値はレジスタ１０２中に与えられ、入力浮動小数点入力アクティブ化値はレジスタ１０４中に与えられる。各入力重み値および入力アクティブ化値は、共有指数がそれに対してくくり出された、元の重み値および元の入力アクティブ化値の量子化されたバージョンである。重み値のための共有指数はレジスタ２０２に記憶され得、入力アクティブ化値のための共有指数はレジスタ２０４に記憶され得る。重みオペランドの符号ビットおよび入力アクティブ化オペランドの符号ビットはＸＯＲ回路１０８に入力され、指数ビットは加算器回路１１０に入力され、仮数ビットは乗算器回路１１２に入力される。
【００３１】
アキュムレータ回路５０２は、ＸＯＲ回路１０８、加算器回路１１０、および乗算器回路１１２からの浮動小数点値と、レジスタ５０４に記憶された累積値との浮動小数点累積を実行し、次いで累積レジスタを新しい値で更新する。
【００３２】
重み値と入力アクティブ化値とのセットが乗算され、累積されると、指数復元回路２０６は、累積レジスタ５０４からの浮動小数点結果値を入力し、共有指数レジスタ２０２および２０４からの共有指数を含むように結果値の指数を復元することを可能にされ得る。指数復元回路２０６からの出力値は、たとえば、ニューラルネットワーク中の次のレイヤへの入力値であり得る。
【００３３】
図６は、指数の一部分がＭＡＣ回路中の浮動小数点オペランドからくくり出され、仮数を乗算する回路が、いくつかの低ビット幅乗算を実行する大ビット乗算器として実装される、回路構成６００を示す。記憶回路６０２は、重みなど、複数の浮動小数点被乗数（ｍｕｌｔｉｐｌｉｃａｎｄ）（オペランド）を記憶し、記憶回路６０４は、入力アクティブ化など、複数の浮動小数点乗数（オペランド）を記憶する。記憶回路は、たとえば、レジスタバンクまたはランダムアクセスメモリ（ＲＡＭ）であり得る。
【００３４】
オペランドフォーマッティング回路６０６は、複数の被乗数の仮数を入力し、仮数を組み合わせて、マルチ被乗数オペランドと呼ばれることがある、単一の被乗数にするように構成される。マルチ被乗数オペランドはレジスタ６０８に記憶される。オペランドフォーマッティング回路はまた、複数の乗数の仮数を入力し、乗数を組み合わせて、マルチ乗数オペランドと呼ばれることがある、単一の乗数にするように構成される。マルチ乗数オペランドはレジスタ６１０に記憶される。
【００３５】
例示的なマルチ被乗数オペランドおよびマルチ乗数オペランドが、それぞれレジスタ６０８および６１０中に示されている。マルチ被乗数オペランドおよびマルチ乗数オペランドは、それぞれ２つの仮数を含み、各仮数は「１．ｚｚｚ」と示されている。表記法は、リーディングビット値１が挿入され、ｚｚｚが、２進小数点の後に位置し、オペランドフォーマッタ回路６０６によって抽出される、仮数のビット値を表す、４ビット値を示す。レジスタ６０８中の仮数はブロック６１２および６１４によって示され、レジスタ６１０中の仮数は破線ブロック６１６および６１８によって示されている。０のビット値は、乗算器回路６２０の出力からの積の抽出を許可するように、仮数間でのパディングのために挿入される。
【００３６】
乗算器回路６２０は、レジスタ６０８中のマルチ被乗数オペランドにレジスタ６１０中のマルチ乗数オペランドを乗算し、得られた値をレジスタ６２２に記憶するように構成される。マルチ被乗数オペランドは２つの仮数を有し、マルチ乗数オペランドは２つの仮数を有するので、乗算器回路６２０からの出力は、「仮数積（ｍａｎｔｉｓｓａ  ｐｒｏｄｕｃｔ）」と呼ばれることがある、４つの積を含む。重みはｗｉと示され得、入力アクティブ化はｘｉと示され得る。重みの仮数はｗｉ（ｍ）と示され得、入力アクティブ化の仮数はｘｉ（ｍ）と示され得る。ブロック６１８および６１６によって示された重み仮数は、それぞれｗ１（ｍ）およびｗ２（ｍ）であり得る。ブロック６１４および６１２によって示された入力アクティブ化仮数は、それぞれｘ１（ｍ）およびｘ２（ｍ）であり得る。
乗算器回路は、レジスタ６２２中に示される以下の仮数積を生成する。
ｗ１（ｍ）＊ｘ１（ｍ）＝ｍｍ．ｍｍｍｍｍｍ
ｘ１（ｍ）＊ｗ２（ｍ）＝ｎｎ．ｎｎｎｎｎｎ
ｘ２（ｍ）＊ｗ１（ｍ）＝ｐｐ．ｐｐｐｐｐｐ
ｗ２（ｍ）＊ｘ２（ｍ）＝ｑｑ．ｑｑｑｑｑｑ
各仮数積の２進小数点は、２つの最上位ビットに続き、例示の目的で含まれている。
【００３７】
４つの仮数積が示されているが、有用である積はアプリケーションに依存することが認識されよう。たとえば、いくつかのアプリケーションにおいて有用であり得る積は、すべての４つの積よりも少ない。
【００３８】
各有用な仮数積について、回路６２４のインスタンスは、浮動小数点オペランドの指数を処理し、累積を実行し、共有指数の値を累積値に復元するために与えられる。したがって、４つの仮数積が乗算器回路６２０によって生成され、すべての４つの仮数積がアプリケーションにおいて有用である場合、回路６２４の４つのインスタンスが与えられる。
【００３９】
回路６２４の各インスタンスは、仮数積がそこから生成された、仮数に関連する浮動小数点オペランドの指数を入力する、加算器回路６２６を含む。浮動小数点オペランドの指数はｗｉ（ｅ）およびｘｊ（ｅ）と示されている。したがって、ｗｉ（ｍ）＊ｘｊ（ｍ）から生じる仮数積について、オペランドフォーマッティング回路６０６によって抽出され、加算器回路のインスタンスに入力される指数はｗｉ（ｅ）およびｘｊ（ｅ）である。加算器回路６２６の（合計された指数）出力は左シフタ回路６２８に入力され、左シフタ回路６２８は、レジスタ６２２によって与えられた仮数積のうちの１つを、合計された指数によって示されたビットの数だけ左シフトする。ビット値０は、連結（ｃｏｎｃａｔｅｎａｔｉｏｎ）回路６３０によって示されているように左シフタ回路の出力にプリペンドされる。追加のビットは、連結回路６３０から出力された値中の最上位ビットである。
【００４０】
オペランドフォーマッタ回路６０６はまた、仮数積がそこから生成された、仮数に関連する浮動小数点オペランドの符号ビットをルーティングする。浮動小数点オペランドの符号ビットはｗｉ（ｓ）およびｘｊ（ｓ）と示されている。したがって、ｗｉ（ｍ）＊ｘｊ（ｍ）から生じる仮数積について、オペランドフォーマッティング回路６０６によって抽出され、加算器回路のインスタンスに入力される符号ビットはｗｉ（ｓ）およびｘｊ（ｓ）である。符号ビットはＸＯＲ回路６３２に入力される。複製回路６３４は、ＸＯＲ回路６３２によって出力された１ビットの値を複製し、ｎビット値を出力し、ここで、ｎは連結回路６３０の出力のビット幅である。複製回路６３４からのｎビット値および連結回路からのｎビット値はＸＯＲ回路６３６に入力され、ＸＯＲ回路６３６はｗｉ＊ｘｊの浮動小数点積の固定小数点表現を出力する。
【００４１】
アキュムレータ回路６３８は、ＸＯＲ回路６３６からの出力を、累積レジスタ６４０中に保持された値と合計し、ＸＯＲ回路６３２からのビット出力はキャリーイン（ｃａｒｒｙ−ｉｎ）ビットとしてアキュムレータ６３８に入力される。符号ビットの積が０（ＸＯＲ回路６３２の出力）であるとき、キャリービットは０であり、ＸＯＲ回路６３６は０のベクトルを出力し、効果的に、アキュムレータへの入力は連結回路６３０の出力と同じであり、アキュムレータ回路は加算を実行する。符号ビットの積が１（ＸＯＲ回路６３２の出力）であるとき、アキュムレータ回路は減算を実行する。ＸＯＲ回路６３６、およびＸＯＲ回路６３２からのキャリービットは、連結回路６３０の出力を反転し、キャリービット（＋１）をアキュムレータ回路への入力として与えることによって、２の補数（ｃｏｍｐｌｅｍｅｎｔ）減算を可能にする。アキュムレータ回路は、結果を累積レジスタ中に戻して記憶する。すべての所望の乗算および累積が完了すると、固定小数点浮動小数点変換回路６４２は、累積された固定小数点値結果を浮動小数点値に変換し、浮動小数点値はレジスタ６４４に記憶される。
【００４２】
加算器回路６４６は、量子化された重みの共有指数を量子化された入力アクティブ化の共有指数に加算し、得られた値は加算器回路６４８によってレジスタ６４４中の指数に加算される。復元された指数は、符号ビットおよびレジスタ６４４からの仮数とともに、レジスタ６５０に記憶される。
【００４３】
図７は、オペランドを量子化し、ＭＡＣ回路によって乗算および累積演算を実行することによって、オペランドのビット幅を縮小するプロセスのフローチャートを示す。重みおよび入力アクティブ化は、以下の説明において縮小されるビット幅をもつオペランドである。
【００４４】
ブロック７０２において、プロセスは、ニューラルネットワークのレイヤ中で使用される重みのセットなど、重みのセットの最大絶対値ｗｍａｘを決定する。絶対値ｗｍａｘは、数値表現において使用される（基数２における）最も大きい指数を決定する。ブロック７０４において、プロセスは、ニューラルネットワークのレイヤ中で使用される入力アクティブ化のセットなど、入力アクティブ化のセットの最大絶対値ｘｍａｘを決定する。入力アクティブ化の最大絶対値は、たとえば、入力としてトレーニングデータセットのごく一部分または合成画像を使用して、所与のレイヤのアクティブ化を登録した後に見つけられ得る。絶対値ｘｍａｘは、数値表現において使用される（基数２における）最も大きい指数を決定する。
【００４５】
ブロック７０６において、プロセスは、各重みおよび入力アクティブ化の指数のために割り振られるビットの数である、αのための値を選択する。αの値は、重みおよび入力アクティブ化の範囲を決定し、ｗｍａｘとｘｍａｘとによって定義された最も大きい指数に固定される。たとえば、ｗｍａｘ＝−０．６である場合、最大指数は−１である。したがって、表され得る最も大きい２のべき乗は２−１＝０．５である。α＝２である場合、２２＝４であり、２のべき乗の異なる絶対値は、量子化された値、２−４、２−３、２−２および２−１によって表され得る。最も小さい指数が知られると、値はレイヤのための共有指数として使用され得る。各重みについて、全指数と共有指数との差のみが符号化される必要があり、各入力アクティブ化について、全指数と共有指数との差のみが符号化される必要がある。
【００４６】
ブロック７０８において、プロセスは、重みの仮数と入力アクティブ化の仮数とを表すために使用されるビットの数である、βを選択する。ビットの数は、各表現可能な２のべき乗のためのスケーリングファクタを決定する。言い換えれば、βは、量子化された重みの精度と入力アクティブ化の精度とを決定する。たとえば、２ビットの仮数はスケーリングファクタ１、１．２５、１．５、および１．７５を表すことが可能になる。標準的な浮動小数点表現におけるように、スケーリングファクタは、暗黙的なリーディング１の値＋（全分数符号なし固定小数点数に対応する）仮数で表される数値を有する。
【００４７】
α、β、および共有指数のための値は、重みのためと入力アクティブ化のためとで異なり得ることに留意されたい。
【００４８】
量子化されていない重みおよび入力アクティブ化はブロック７１０および７１２において量子化された値に変換される。重みおよび入力アクティブ化は、量子化された値として表現可能である最も近い値にマッピングされる。絶対値が表現可能な最も小さい非ゼロ絶対値をわずかに下回る場合、値は０の値にマッピングされ得る（このルールの詳細は、以下で与えられるアルゴリズムを研究することから分かり得る）。重みまたは入力アクティブ化が表現可能な最大絶対値を超える場合、値はその最大値にマッピングされ得る。標準的な浮動小数点表現とは対照的に、開示される量子化手法は、非数（ｎｏｔ−ａ−ｎｕｍｂｅｒ）、無限大、および非正規数（ｓｕｂ−ｎｏｒｍａｌ  ｎｕｍｂｅｒ）など、多くの特殊なケースの表現を回避することに留意されたい。サポートされる唯一の例外は値０であり、値０は、１）符号ビットにかかわらず、すべての指数および仮数ビットが０であるときに表される特殊なケースとして、または２）可変長符号化とともに、まばらなレイヤを圧縮するために有用であり得る、追加の０ビットを使用して、の２つの方法のうちの１つで表され得る。
【００４９】
所与のレイヤの重みを変換するためのプロシージャは、以下の例１に示されたアルゴリズムによってさらに説明される。
入力：α、β、およびｗｍａｘ
初期化：
2021536076.tif 000003
および
2021536076.tif 000004
2021536076.tif 000005
ｔｌｏｗよりも小さい絶対値をもつすべての重みに０の値を割り当てる。
ｉ＝０，１，…，ｎ１−ｎ２の場合、
2021536076.tif 000006
を行う
ｊ＝０，１，…，２β−１の場合、
ｔｕｐ＝ｔｌｏｗ＋γ２−βを行う。
ｊ＝＝０の場合，ｔｕｐ＝ｔｕｐ−γ２−β−２である。
ｔｌｏｗ（両端値を含む）とｔｕｐとの間の絶対値をもつすべての重みにρ＝（１＋ｊ＊２−ｂｅｔａ）＊γの絶対値を割り当てる。修正された重みの符号を保存する。
ｔｌｏｗ＝ｔｕｐ
ｔｕｐ以上の絶対値をもつすべての重みにρの絶対値を割り当てる。修正された重みの符号を保存する。
例１
【００５０】
例１のアルゴリズムは、ｗｍａｘの代わりにｘｍａｘを使用することによって入力アクティブ化を変換するように修正され得る。
【００５１】
ブロック７１４において、量子化された重みの共有指数、および量子化された入力アクティブ化の共有指数は、乗算および累積から生成された最終値が適切な大きさに復元され得るように記憶される。ブロック７１６において、ＭＡＣ回路は、量子化されたオペランドを使用して乗算および累積演算を実行し、ブロック７１８において、たとえば、図２、図５、および図６の回路によって図示され、説明されるように、結果の指数が更新される。
【００５２】
図８は、開示される回路およびプロセスが実装され得るプログラマブル集積回路（ＩＣ）８００を示す。プログラマブルＩＣは、他のプログラマブルリソースとともにフィールドプログラマブルゲートアレイ論理（ＦＰＧＡ）を含む、システムオンチップ（ＳＯＣ）と呼ばれることもある。ＦＰＧＡ論理はアレイ中にいくつかの異なるタイプのプログラマブル論理ブロックを含み得る。たとえば、図８は、たとえば、マルチギガビットトランシーバ（ＭＧＴ）８０１、構成可能な論理ブロック（ＣＬＢ）８０２、ランダムアクセスメモリブロック（ＢＲＡＭ）８０３、入出力ブロック（ＩＯＢ）８０４、構成およびクロッキング論理（ＣＯＮＦＩＧ／ＣＬＯＣＫ）８０５、デジタル信号処理ブロック（ＤＳＰ）８０６、専用入出力ブロック（Ｉ／Ｏ）８０７、クロックポート、およびデジタルクロックマネージャ、アナログデジタル変換器、システム監視論理など他のプログラマブル論理８０８などを含む、多数の異なるプログラマブルタイルを含むプログラマブルＩＣ８００を示す。ＦＰＧＡ論理を有するいくつかのプログラマブルＩＣはまた、専用プロセッサブロック（ＰＲＯＣ）８１０と、内部および外部再構成ポート（図示せず）とを含む。
【００５３】
あるＦＰＧＡ論理では、各プログラマブルタイルは、各隣接するタイル中の対応する相互接続要素との間の標準化された接続を有するプログラマブル相互接続要素（ＩＮＴ）８１１を含む。したがって、まとめられたプログラマブル相互接続要素は、示されているＦＰＧＡ論理のためのプログラマブル相互接続構造を実装する。プログラマブル相互接続要素ＩＮＴ８１１はまた、図８の上部に含まれた例によって示されるように、同じタイル内でプログラマブル論理要素との間の接続を含む。
【００５４】
たとえば、ＣＬＢ８０２は、ユーザ論理を実装するようにプログラムされ得る構成可能論理要素ＣＬＥ８１２＋単一のプログラマブル相互接続要素ＩＮＴ８１１を含むことができる。ＢＲＡＭ８０３は、１つまたは複数のプログラマブル相互接続要素に加えて、ＢＲＡＭ論理要素（ＢＲＬ）８１３を含むことができる。一般に、タイル中に含まれる相互接続要素の数はタイルの高さに依存する。示されているＢＲＡＭタイルは５つのＣＬＢと同じ高さを有するが、他の数（たとえば、４つ）も使用され得る。ＤＳＰタイル８０６は、適切な数のプログラマブル相互接続要素に加えて、ＤＳＰ論理要素（ＤＳＰＬ）８１４を含むことができる。ＩＯＢ８０４は、たとえば、プログラマブル相互接続要素ＩＮＴ８１１の１つのインスタンスに加えて、入出力論理要素（ＩＯＬ）８１５の２つのインスタンスを含むことができる。当業者に明らかになるように、たとえば、Ｉ／Ｏ論理要素８１５に接続された実際のＩ／Ｏボンドパッドは、様々な示されている論理ブロックの上方に積層された金属を使用して製造され、一般に、入出力論理要素８１５のエリアに限定されない。
【００５５】
（図８において影付きで示されている）ダイの中心に近い柱状のエリアは、構成、クロック、および他の制御論理のために使用される。この列から延びる水平エリア８０９は、プログラマブルＩＣの幅にわたってクロックと構成信号とを分散させるために使用される。「柱状」エリアおよび「水平」エリアへの言及は、図面を縦向きに見ることに関係することに留意されたい。
【００５６】
図８に示されたアーキテクチャを利用するいくつかのプログラマブルＩＣは、プログラマブルＩＣの大部分を構成する一定の柱状構造を分断する追加の論理ブロックを含む。追加の論理ブロックはプログラマブルブロックおよび／または専用論理であり得る。たとえば、図８に示されたプロセッサブロックＰＲＯＣ８１０はＣＬＢおよびＢＲＡＭのいくつかの列にわたる。
【００５７】
図８は例示的なプログラマブルＩＣアーキテクチャのみを示すものであることに留意されたい。図８の上部に含まれる、列中の論理ブロックの数、列の相対幅、列の数および順序、列中に含まれる論理ブロックのタイプ、論理ブロックの相対サイズ、および相互接続／論理実装は例にすぎない。たとえば、実際のプログラマブルＩＣでは、ユーザ論理の効率的な実装を促進するために、一般に、ＣＬＢの２つ以上の隣接する列が、ＣＬＢが現れる所はどこでも含まれる。
【００５８】
開示される回路構成は、累積レジスタからの固定小数点出力を浮動小数点出力に変換するように構成された第２の変換回路と、第１の共有指数と第２の共有指数との記憶のために構成された共有指数レジスタと、第１の共有指数と第２の共有指数と浮動小数点出力の指数とに基づいて、浮動小数点出力の指数を拡張された指数に更新するように構成された指数復元回路とをさらに含むことができる。
【００５９】
開示される回路構成は、累積レジスタの出力に結合された第２の変換回路をさらに含むことができる。第２の変換回路は、累積レジスタからの固定小数点値を浮動小数点値に変換するように構成され得る。
【００６０】
開示される回路構成は、指数加算器回路の複数のインスタンスと、仮数乗算器回路の複数のインスタンスと、第１の変換回路の複数のインスタンスとをさらに含むことができる。アキュムレータ回路は、第１の変換回路の複数のインスタンスに結合され得、複数の第１の変換回路の第１のペアからのオペランドの第１のペアを、複数の変換回路の第２のペアからのオペランドの第２のペアを合計することと並行して、合計するように構成された単一命令複数データ加算器回路を含むことができる。
【００６１】
開示される回路構成は、ニューラルネットワークをさらに含むことができる。ニューラルネットワークは乗算累積（ＭＡＣ）回路のアレイを含むことができ、各ＭＡＣ回路は、指数加算器回路と、仮数乗算器回路と、第１の変換回路と、累積レジスタと、アキュムレータ回路とのそれぞれのインスタンスを含むことができる。
【００６２】
開示される回路構成は、２つ以上の浮動小数点被乗数を組み合わせてマルチ被乗数オペランドにし、２つ以上の浮動小数点乗数を組み合わせてマルチ乗数オペランドにするように構成された、オペランドフォーマッティング回路をさらに含むことができる。仮数乗算器回路は、マルチ被乗数オペランドにマルチ乗数オペランドを乗算し、４つ以上の仮数積を有する値を出力するように構成され得る。開示される回路構成は、指数加算器回路の４つ以上のインスタンスをさらに含むことができ、各インスタンスは、２つ以上の浮動小数点被乗数のうちの１つの指数と２つ以上の浮動小数点乗数のうちの１つの指数とを合計し、出力指数を生成するように構成され得る。開示される回路構成は、それぞれ指数加算器回路のインスタンスの出力と、それぞれ仮数乗算器回路のインスタンスとに結合された第１の変換回路の４つ以上のインスタンスをさらに含むことができる。第１の変換回路の各インスタンスは、出力指数と仮数積のうちの１つとを固定小数点数に変換するように構成され得る。開示される回路構成は、累積レジスタの４つ以上のインスタンスと、アキュムレータ回路の４つ以上のインスタンスとをさらに含むことができる。アキュムレータ回路の各インスタンスは、アキュムレータレジスタのインスタンスのうちの１つの内容と固定小数点数の内容とを合計して累積値にし、累積値を累積レジスタのインスタンスのうちの１つに記憶するように構成され得る。開示される回路構成は、第２の変換回路の４つ以上のインスタンスをさらに含むことができる。第２の変換回路の各インスタンスは、累積レジスタのインスタンスのうちの１つからの固定小数点出力を浮動小数点出力に変換するように構成され得る。開示される回路構成は、指数復元回路の４つ以上のインスタンスをさらに含むことができる。指数復元回路の各インスタンスは、第１の共有指数と第２の共有指数と浮動小数点出力の指数とに基づいて、第１の変換回路のインスタンスのうちの１つからの浮動小数点出力の指数を拡張された指数に更新するように構成され得る。
【００６３】
開示される回路構成は、第１の共有指数が２つ以上の浮動小数点被乗数の共有指数である回路をさらに含むことができる。
【００６４】
開示される回路構成は、第２の共有指数が２つ以上の浮動小数点乗数の共有指数である回路をさらに含むことができる。
【００６５】
開示される回路構成は、第１の共有指数と第２の共有指数とを合計するように構成された共有指数加算器回路をさらに含むことができる。
【００６６】
開示される回路構成は、第１の共有指数と第２の共有指数とを合計するように構成された共有指数加算器回路をさらに含むことができる。
【００６７】
開示される回路構成は、ニューラルネットワークが乗算累積（ＭＡＣ）回路のアレイを含み、各ＭＡＣ回路が、指数加算器回路と、仮数乗算器回路と、累積レジスタと、アキュムレータ回路と、第１および第２の共有指数レジスタと、指数復元回路とのそれぞれのインスタンスを含む、回路をさらに含むことができる。
【００６８】
開示される方法は、オペランドフォーマッティング回路によって、２つ以上の浮動小数点被乗数を組み合わせてマルチ被乗数オペランドにすることと、オペランドフォーマッティング回路によって、２つ以上の浮動小数点乗数を組み合わせてマルチ乗数オペランドにすることとをさらに含むことができる。乗算することは、マルチ被乗数オペランドにマルチ乗数オペランドを乗算することと、４つ以上の仮数積を有する値を出力することを含むことができる。開示される方法は、指数加算器回路の４つ以上のインスタンスの各インスタンスによって２つ以上の浮動小数点被乗数のうちの１つ指数と２つ以上の浮動小数点乗数のうちの１つの指数とを合計し、出力指数を生成することをさらに含むことができる。開示される方法は、第１の変換回路の４つ以上のインスタンスの各インスタンスによって出力指数と仮数積のうちの１つとを固定小数点数に変換することと、アキュムレータ回路の４つ以上のインスタンスによってアキュムレータレジスタの４つ以上のインスタンスのうちの１つの内容と固定小数点数の内容とを合計して累積値にし、累積値を累積レジスタのインスタンスのうちの１つに記憶することとをさらに含むことができる。開示される方法は、第２の変換回路の４つ以上のインスタンスによって累積レジスタのインスタンスのうちの１つからの固定小数点出力を浮動小数点出力に変換することと、指数復元回路の４つ以上のインスタンスによって、第１の共有指数と第２の共有指数と浮動小数点出力の指数とに基づいて、第２の変換回路のインスタンスのうちの１つからの浮動小数点出力の指数を拡張された指数に更新することとをさらに含むことができる。
【００６９】
開示される方法は、２つ以上の浮動小数点被乗数の共有指数である第１の共有指数をさらに含むことができる。
【００７０】
開示される方法は、２つ以上の浮動小数点乗数の共有指数である第２の共有指数をさらに含むことができる。
【００７１】
開示される方法は、共有指数加算器回路によって第１の共有指数と第２の共有指数とを合計することをさらに含むことができる。
【００７２】
開示される方法は、共有指数加算器回路によって第１の共有指数と第２の共有指数とを合計することをさらに含むことができる。
【００７３】
開示される方法は、指数復元回路の各インスタンスによって、浮動小数点出力の指数と共有指数加算器回路の出力とを合計することをさらに含むことができる。
【００７４】
開示される方法は、第１の変換回路によって、出力指数と出力仮数とを固定小数点値に変換することであって、固定小数点値が、出力指数と出力仮数とに基づく値である、固定小数点値に変換することと、第２の変換回路によって、累積レジスタからの固定小数点値を浮動小数点値に変換することとをさらに含むことができる。
【００７５】
態様および特徴は、場合によっては、個々の図において説明され得るが、組合せが明示的に示されていないか、または組合せとして明示的に説明されないとしても、１つの図からの特徴は別の図の特徴と組み合わせられ得ることが諒解されよう。
【００７６】
回路および方法は、乗算および累積演算を実行するための様々なシステムに適用可能であると考えられる。他の態様および特徴は本明細書の考察から当業者に明らかになろう。回路および方法は、特定用途向け集積回路（ＡＳＩＣ）としてまたはプログラマブル論理デバイス上の論理として実装され得る。本明細書および図面は例にすぎないと考えられ、本発明の真の範囲は以下の特許請求の範囲によって示されることが意図される。
【図１】
2021536076.tif 000007
【図２】
2021536076.tif 000008
【図３】
2021536076.tif 000009
【図４】
2021536076.tif 000010
【図５】
2021536076.tif 000011
【図６】
2021536076.tif 000012
【図７】
2021536076.tif 000013
【図８】
2021536076.tif 000014
【国際調査報告】
2021536076.tif 000015
2021536076.tif 000016