(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-06-08
(45)【発行日】2023-06-16
(54)【発明の名称】確率的丸めロジック
(51)【国際特許分類】
G06F 17/10 20060101AFI20230609BHJP
【FI】
G06F17/10 Z
(21)【出願番号】P 2020546908
(86)(22)【出願日】2019-03-18
(86)【国際出願番号】 US2019022685
(87)【国際公開番号】W WO2019182943
(87)【国際公開日】2019-09-26
【審査請求日】2022-03-14
(32)【優先日】2018-03-22
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】591016172
【氏名又は名称】アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド
【氏名又は名称原語表記】ADVANCED MICRO DEVICES INCORPORATED
(74)【代理人】
【識別番号】100108833
【氏名又は名称】早川 裕司
(74)【代理人】
【識別番号】100111615
【氏名又は名称】佐野 良太
(74)【代理人】
【識別番号】100162156
【氏名又は名称】村雨 圭介
(72)【発明者】
【氏名】ガブリエル エイチ. ロー
【審査官】坂東 博司
(56)【参考文献】
【文献】米国特許出願公開第2004/078401(US,A1)
【文献】米国特許第8019805(US,B1)
【文献】米国特許出願公開第2017/220342(US,A1)
【文献】米国特許出願公開第2017/0060532(US,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/10
(57)【特許請求の範囲】
【請求項1】
3つ以上の桁上げ保存加算器(CSA)入力と、CSA加算結果出力と、CSA桁上げ出力と、を含むCSAロジックであって、乱数値が、前記3つ以上のCSA入力のうち特定のCSA入力に与えられる、CSAロジックと、
少なくとも複数の加算器入力と、加算結果出力と、を有する加算器ロジックと、を備え、
前記CSAロジックの前記CSA桁上げ出力は、前記加算器ロジックの前記複数の加算器入力のうち1番目の入力に接続されており、前記CSAロジックの前記CSA加算結果出力は、前記加算器ロジックの前記複数の加算器入力のうち2番目の入力に接続されており、
前記加算器ロジックの前記加算結果出力の特定の数の最上位ビットは、前記CSAロジックの前記3つ以上のCSA入力のうち、前記特定のCSA入力以外の少なくとも2つのCSA入力を確率的に丸めた加算結果を表す、
確率的丸め回路。
【請求項2】
前記3つ以上のCSA入力は、累積入力及び非累積入力を含み、前記累積入力は、前記非累積入力よりも広いビット幅を有する、
請求項1の回路。
【請求項3】
前記3つ以上のCSA入力は、累積入力及び非累積入力を含み、前記非累積入力及び前記累積入力は、前記特定のCSA入力よりも広いビット幅を有する、
請求項1の回路。
【請求項4】
CSA桁上げレジスタと、
CSA加算結果レジスタと、をさらに備え、
前記CSA桁上げ出力は、前記CSA桁上げ出力が前記CSA桁上げレジスタに接続されることと、前記CSA桁上げレジスタが前記1番目の入力に接続されることとによって、前記加算器ロジックの前記1番目の入力に接続されており、
前記CSA加算結果出力は、前記CSA加算結果出力が前記CSA加算結果レジスタに接続されることと、前記CSA加算結果レジスタが前記2番目の入力に接続されることとによって、前記加算器ロジックの前記2番目の入力に接続されており、
前記CSA桁上げレジスタは、前記3つ以上のCSA入力の1番目のCSA入力に接続されており、前記CSA加算結果レジスタは、前記3つ以上のCSA入力の2番目のCSA入力に接続されて
おり、
前記3つ以上のCSA入力の3番目のCSA入力は、前記特定のCSA入力である、
請求項1の回路。
【請求項5】
ウォレスツリー加算器ロジックと、
前記ウォレスツリー加算器ロジックの特定のCSA加算器ロジックの前記特定のCSA入力に接続されたマルチプレクサ出力を含むマルチプレクサであって、マルチプレクサの少なくとも1つの入力が乱数であり、マルチプレクサの少なくとも別の入力がゼロである、マルチプレクサと、をさらに備え、
前記特定のCSA加算器ロジックの特定のCSA桁上げ出力は、前記CSAロジックの前記CSA桁上げ出力であり、前記加算器ロジックの前記複数の加算器入力の前記1番目の入力に接続されており、
前記特定のCSA加算器ロジックの特定のCSA加算結果出力は、前記CSAロジックの前記CSA加算結果出力であり、前記加算器ロジックの前記複数の加算器入力の前記2番目の入力に接続されている、
請求項1の回路。
【請求項6】
桁上げ保存加算器ロジックにおいて、複数の入力値を受信することであって、前記複数の入力値のうち少なくとも1つの入力値はランダムに生成された数である、ことと、
前記ランダムに生成された数に少なくとも部分的に基づいて、桁上げ出力値及び桁上げなし加算結果出力値を生成することと、
加算器ロジックにおいて、前記桁上げ出力値及び前記桁上げなし加算結果出力値を受信することと、
前記桁上げ出力値及び前記桁上げなし加算結果出力値に少なくとも部分的に基づいて、前記複数の入力値の加算結果を生成することと、
特定の数の最上位ビットを、前記複数の入力値を確率的に丸めた加算結果として選択することと、を含む、
確率的丸め方法。
【請求項7】
複数の反復のうち1つの反復において、
前記桁上げ保存加算器ロジックにおいて、前記複数の入力値のうち特定の入力値を受信することと、
前記特定の入力値と、前の桁上げなし加算結果出力値と、前記複数の反復のうち前の反復からの前の桁上げ出力値と、に基づいて、中間桁上げなし加算結果出力と、中間桁上げ出力と、を生成することと、
前記複数の反復のうち次の反復のために、前記中間桁上げなし加算結果出力と、前記中間桁上げ出力と、を記憶することと、をさらに含む、
請求項
6の方法。
【請求項8】
前記桁上げ保存加算器ロジックにおいて、前記複数の入力値を受信することは、
前記複数の入力値の各々を、複数の反復の各々の反復において受信することを含み、
前記複数の反復の最後の反復において受信した前記複数の入力値の最後の入力値は、前記ランダムに生成された数である、
請求項
6の方法。
【請求項9】
前記ランダムに生成された数を除く前記複数の入力値は、別の桁上げ保存加算器ロジックの出力値である、
請求項
6の方法。
【請求項10】
第1加算器ロジックにおいて、複数の入力値の中間加算結果を生成することと、
前記中間加算結果の最上位ビットに基づいて、前記中間加算結果が負であることを決定することと、
ランダムに生成された値を、負のランダムに生成された値に変換することと、
前記中間加算結果及び前記負のランダムに生成された値に基づいて、第2加算器ロジックにおいて、前記複数の入力値の加算結果を生成することと、
前記複数の入力値の加算結果の特定の数の最上位ビットを、前記複数の入力値を確率的に丸めた加算結果として選択することと、を含む、
確率的丸め方法。
【請求項11】
前記ランダムに生成された値を、負のランダムに生成された値に変換することは、少なくとも、前記ランダムに生成された値の最上位ビットを設定することによって実行される、
請求項
10の方法。
【請求項12】
前記ランダムに生成された値を、負のランダムに生成された値に変換することは、少なくとも、前記ランダムに生成された値のビットをネゲートすることによって実行される、
請求項
10の方法。
【請求項13】
請求項
6~12の何れかに記載の方法を実行する、
ロジック回路。
【発明の詳細な説明】
【背景技術】
【0001】
このセクションで説明するアプローチは、追求することができるアプローチであるが、必ずしも以前に着想又は追求されたアプローチではない。したがって、別段に示されない限り、このセクションで説明するアプローチの何れも、このセクションに含まれているという理由だけで従来技術とみなされるべきではない。
【0002】
人工知能の成長に伴い、機械学習テクノロジーは、様々なアプリケーションに採用されている。機械学習モデルのトレーニングは、一般的に非常にリソースを消費するため、実行するには、通常、専用のコンピュータシステムが必要である。しかしながら、機械学習のアプリケーションの発展に伴い、精度を犠牲にすることなく、共有されたコンピューティングリソース環境で実行される機械学習モデルのトレーニングの必要性が増している。
【0003】
パフォーマンスを向上させるために、機械学習モデルのトレーニングにおいて精度の低い数値表現を使用する場合がある。例えば、ニューラルネットワークの重み付けは、精度の低いフォーマットを有する可能性があるため、処理のために必要なコンピューティングリソースを少なくすることができる。しかしながら、演算によっては、より精度の高い数値表現が依然として(一時的ではあるが)生成される場合がある。
【0004】
精度の高い数値表現を精度の低い数値表現に戻す1つの方法は、精度の高い数値表現を単に切り捨てることである。余分なビットの切り捨ての実装は簡単(通常ではデフォルト)であるが、値(重み付け等)を一方向にシステマティックにバイアスすることによって、トレーニングエラー/精度の低下につながる可能性がある。
【0005】
精度を犠牲にすることなく精度の低い数値表現を利用するために、自明な切り捨ての代わりに、確率的(stochastic)丸めを実行する。精度の高い数値表現の確率的丸めは、バイアスの導入を避け、結果として得られる機械学習モデルの精度を向上させる。例えば、精度の高い小数での確率的丸めは、精度の高い小数から切り捨てられる最下位の小数に比例する確率で値を上下に丸める。その結果、37.25という値は、25%の確率で38に切り上げられ、75%の確率で37に切り下げられる。
【0006】
確率的丸めを実装するための1つのアプローチは、丸めの結果を生じる複数の命令を実行することである。ソフトウェアプログラムは、確率的丸めのために適切なコマンド(複数可)を含むことができ、このようなプログラムのコンパイル中に、ハードウェアプロセッサによって実行される複数の命令を生じる。複数の命令を処理すると、複数のプロセッササイクル、潜在的な複数のメモリルックアップ、及び、パイプラインストールを処理する等の大きなオーバーヘッドが発生する。
【図面の簡単な説明】
【0007】
【
図1】一実施形態における、確率的丸めを用いた加算のための例示的な回路を示すブロック図である。
【
図2】一実施形態における、桁上げ保存加算器(CSA)ロジックコンポーネントの例示的な回路を示すブロック図である。
【
図3】一実施形態における、入力数の1つのストリームを累積し、このような累積を確率的に丸める例示的な回路を示すブロック図である。
【
図4】一実施形態における、入力数の複数のストリームを合計し、このような合計を確率的に丸める回路を示すブロック図である。
【
図5】一実施形態における、加算結果を、その符号に基づいて確率的に丸める回路を示すブロック図である。
【
図6】一実施形態における、符号付き合計を確率的に丸める例示的な回路を示すブロック図である。
【
図7】一実施形態における、2つ以上の数の加算結果を確率的に丸めるプロセスを示すフローチャートである。
【
図8】一実施形態における、2つ以上の数の符号付き合計を確率的に丸めるプロセスを示すフローチャートである。
【発明を実施するための形態】
【0008】
以下の説明では、説明の目的のために、本発明の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、本発明は、これらの具体的な詳細を用いずに実施し得ることは明らかであろう。他の例では、本発明を不必要に不明瞭にすることを回避するために、周知の構造及びデバイスがブロック図の形式で示されている。
【0009】
(概要)
より高いコード密度、より高いパフォーマンス、より高いプロセッサ使用率、及び、より低い電力を達成するために、本明細書では、確率的丸めを実行する様々な回路及び技術を説明する。一実施形態では、乱数を生成して2つ以上の数の合計に加算し、2つ以上の数の確率的丸めを用いた加算結果を生成する。
【0010】
例えば、2つ以上の数のサンプル加算結果が37.25であると仮定する。このような加算結果に対して確率的丸めを用いると、結果は、75%の確率で37であり、25%の確率で38である。0から1(1を含まない)の範囲の乱数が生成される場合に、乱数は、75%の確率で0から0.75(0.75を含まない)の範囲にあり、25%の確率で0.75から1(1を含まない)の範囲にある。したがって、このような乱数を37.25の加算結果に加えると、75%の確率で37から開始する結果(この結果は37.25から38.0(38.0を含まない)の範囲にある)と、25%の確率で38から開始する結果(この結果は38.0から38.25(38.25を含まない)の範囲にある)とを生じる。
【0011】
したがって、一実施形態では、確率的に丸められた高精度の加算結果の低精度の加算結果を計算するために、高精度の加算結果をもたらす可能性がある加数を合計することに加えて、乱数が生成及び加算される。乱数は、他の加数と同時に加算される。ランダムに生成された数は、所望の低精度の幅と高精度の幅との間の差と同じ幅を有する。確率的に丸められた加算結果は、最上位桁の低精度の幅を取得し、残りの結果を破棄することによって生成される。例えば、幅の広い加算結果が32ビットであり、確率的に丸められた幅の狭い加算結果が8ビットである場合、32-8=24ビットの乱数を、合計への追加の加数として生成する。合計の後に、32ビットの加算結果の上位8ビットを、確率的に丸められた8ビット幅の加算結果として読み出す。
【0012】
一実施形態では、桁上げ保存加算器(CSA)ロジックを使用して、提示された入力値に乱数値を加算して、入力値の確率的に丸められた加算結果を生成する。「桁上げ保存加算器(CSA)ロジック」という用語は、3つ以上の入力を有し、桁上げ出力(carry output)及び桁上げなし部分加算結果出力(carry-less partial sum output)を生成する回路を指す。桁上げなし部分加算結果出力は、対応する桁を加える間に生成された桁上げ値を考慮しない、全ての入力の加算結果である。対応する桁の不明の桁上げ値をCSAロジックの桁上げ出力として集約する。桁上げ保存加算器は、CSAロジックの一例である。本明細書で説明する回路及び技術は、説明の目的のために、2進数桁上げ保存加算器を指す場合があるが、任意の他のCSAロジックを効果的に置き換えることができる。したがって、このような回路及び技術は、桁上げ保存加算器に限定されると解釈されるべきではなく、任意のCSAロジックによって実装され得る。
【0013】
CSAロジックを加算器ロジックに結合して、入力値の全ての加算結果を生成する。「加算器ロジック」という用語は、複数の入力を有し、複数の入力に提示された値の全ての加算結果(任意の生成された桁上げを含む)を生成する回路を指す。本明細書で説明する回路及び技術は、説明の目的のために、桁上げ完了加算器を加算器ロジックと呼ぶことができ、このような回路及び技術は、全加算器に限定されると解釈されるべきではなく、任意の加算器ロジックに限定されるものと解釈されたい。全加算器の非限定的な例は、桁上げ伝播加算器(ripple-carry adder)及び桁上げ先見加算器(carry-lookahead adder)である。
【0014】
桁上げ出力及び部分加算結果出力は、加算器ロジックの入力として与えられる。加算器ロジックのいくつかの最上位ビットは、CSAロジックの2つ以上の入力の確率的に丸められた加算結果を表す。
【0015】
図1は、一実施形態における、確率的丸めを用いた加算のための例示的な回路を示すブロック図である。この例示的な回路は、アキュムレータレジスタ105と、CSA110と、全加算器120と、を含む。CSA110は、3つの入力X31-X0,Y15-Y0,Z15-Z0を含む。
【0016】
これらの入力の各々に与えられた2進数は、CSA110及び全加算器120によって加算される。CSA110の桁上げ出力C31-0は、全加算器120の入力U31-U0に結合され、CSA110の部分加算結果出力S31-S0は、全加算器120の入力V31-V0に結合される。
【0017】
CSA110は、入力X31-X0,Y15-Y0,Z15-Z0の対応するビットの部分和(桁上げなし加算)を実行するように構成されている。部分加算結果は、出力S31-S0で提供される。対応する入力ビットの加算毎の桁上げの集約は、出力C31-C0で提供される。全加算器120は、入力U31-U0,V31-V0に与えられた2進数値の桁上げ完了加算を実行する。加算器120によって生成された全ての加算結果は、出力31-0で提供される。
【0018】
この例では、CSA入力X31-X0をアキュムレータレジスタ105に接続する。したがって、アキュムレータレジスタ105に記憶された数は、CSA110への入力として入力X31-X0に与えられる。累積された数値は、CSA110の入力Y15-Y0に与えられる16ビットの入力数値に加算される。CSA110への他の入力は、CSA110の入力Z15-Z0に与えられる16ビットの乱数である。
【0019】
この例では、乱数入力が16ビット入力であることから、全加算器120の下位16ビットである出力15-0は破棄される。残りのビットの出力である出力31-16は、入力数値と、レジスタ105に記憶された数値との確率的丸めを用いた加算結果である。
【0020】
(乱数レジスタ)
一実施形態では、乱数は、線形帰還シフトレジスタによって生成される。このような実施形態では、線形帰還シフトレジスタは、CSAロジックの乱数入力に接続されている。線形帰還シフトレジスタは、任意のビット長であり、このようなビット長の疑似乱数を生成することができる。
【0021】
別の実施形態では、レジスタは、CSAロジックの乱数入力に接続されている。乱数は、加算結果の確率的丸めを計算する前に生成され、レジスタに記憶される。
【0022】
(確率的丸め回路への最適化)
一実施形態では、CSAロジックは、乱数入力が与えられていない1つ以上の入力ビットに対して最適化される。このような実施形態では、CSAロジックの入力に与えられる乱数は、CSAロジックへの少なくとも1つの他の入力よりも狭いビット幅を有する。乱数入力を含まない(又は、他の方法により乱数入力に対して常にゼロ値に設定されている)CSAロジックの回路コンポーネントを、除外又は最適化することができる。そうすることによって、回路の密度、消費電力及びパフォーマンスを向上させる。
【0023】
一実施形態では、CSAロジックの入力は、累積入力である。累積入力では、前の演算の中間結果が与えられることから、累積入力は、CSAロジックの他の入力よりも幅が広い。前の演算により、より広い幅の累積入力によって収容される追加のビット(複数可)が生成された可能性がある。例えば、累積入力は、幅が広く、前の演算の中間結果が記憶されるアキュムレータレジスタに接続されてもよい。
【0024】
したがって、CSAロジックの非累積入力は、少なくともCSAロジックの累積ロジックよりもビット幅が狭い。一実施形態では、非累積数入力を含まない(又は、他の方法により非累積入力に対して常にゼロ値に設定されている)CSAロジックの回路コンポーネントを、乱数入力を含まないコンポーネントと同様に、除外又は最適化する。
【0025】
図2は、一実施形態における、CSAロジックコンポーネントの例示的な回路を示すブロック図である。この例では、CSAロジックの累積入力は32ビット入力であり、非累積入力は16ビット入力であり、乱数入力は8ビット入力である。回路200は、桁上げ出力の最下位ビットC0と、部分加算結果出力の最下位ビットS0と、を生成するサンプルロジック回路である。この出力は、入力A0に累積入力の最下位ビットを与え、入力B0に非累積入力の最下位ビットを与え、入力C0に乱数入力の最下位ビットを与えることによって生成される。
【0026】
回路220は、桁上げ出力の8番目のビットC8と、部分加算結果出力の8番目のビットS8と、を生成するサンプルロジックである。最下位ビットについて示されるような回路ロジックを使用するのではなく、回路200、回路220が最適化される。この最適化は、乱数入力Cがないために行われる。これは、乱数入力が8ビットの狭い幅の入力であり、ビット0から7までの意味のある入力しかないためである。乱数入力がないため、回路200の等価論理ゲート204,208,210が回路220では除外されている。回路200内の論理ゲート202に相当する論理ゲート222と、回路200内の論理ゲート208に相当する論理ゲート228と、を使用して、8番目のビットの部分加算結果S8と、8番目のビットの桁上げ出力C8と、を生成する。
【0027】
回路230は、サンプルCSAロジックの16番目のビット入力で開始する乱数入力及び非累積数入力の両方の欠如に基づく回路220のさらなる最適化である。さらなる最適化によって、論理ゲートを使用せずに、ビット16から31の桁上げ出力及び部分加算結果出力を生成する。
【0028】
(入力数値のストリーム(複数可)の累積)
一実施形態では、CSAロジックの部分加算結果出力、及び、CSAロジックの桁上げ出力は、各々の中間レジスタに接続されている。これらの中間レジスタ自体は、全加算器の入力に接続され、CSAロジックの少なくとも2つの入力への帰還経路内にある。CSAロジックの残りの入力(複数可)には、合計される数値の各々の入力ストリーム(複数可)が与えられる。各サイクルでは、入力数値を前のサイクル部分加算結果と部分的に合計し、桁上げ出力を中間レジスタに記憶し、新規の部分加算結果、及び、新規の桁上げ出力を中間レジスタに記憶する。
【0029】
一実施形態では、入力ストリームの最後の入力数値が与えられた後に、次のサイクルで、乱数がCSAロジックの入力ストリームの入力に与えられる。乱数は、乱数を含むレジスタ又は線形帰還シフトレジスタからの出力を多重化することに基づいて与えられる。乱数が入力ストリームの入力に与えられることによって、最終的な累積桁上げ及び部分加算結果が乱数と共に累積される。結果として得られる累積のいくつかの最上位ビットは、与えられた入力ストリームの確率的に丸められた加算結果である。
【0030】
別の実施形態では、1つの中間レジスタが乱数に初期化される。したがって、最初の累積サイクルでは、乱数は、入力ストリームの1番目の数で累積される。したがって、入力ストリームを処理する全てのサイクルの後に、出力の最上位ビットは、入力ストリームの確率的に丸められた加算結果を表す。
【0031】
図3は、一実施形態における、入力数値ストリームを累積し、このような累積を確率的に丸める回路を示すブロック図である。この例示的な回路は、アキュムレータレジスタ315,325と、CSA310と、全加算器320と、を含む。CSA310は、2つの32ビット入力X31-X0及びY31-Y0と、1つの16ビット入力Z15-Z0と、を含む。
【0032】
これらの入力の各々に与えられる2進数は、CSA310及び全加算器320によって合計される。CSA310の桁上げ出力C31-C0は、レジスタ315に接続されており、このレジスタ自体は、全加算器320の入力U31-U0に接続されている。CSA110の部分加算結果出力S31-S0は、レジスタ325に接続されており、レジスタ自体は、全加算器320の入力V31-V0に接続されている。
【0033】
この例の帰還ループにおいて、レジスタ315は入力X31-X0に接続されており、レジスタ325はY入力31-Y0に接続されている。レジスタ315,325はゼロに初期化される。
【0034】
各サイクルでは、16ビットの入力数値は、マルチプレクサ330によって多重化され、入力Z15-Z0に与えられる。CSA310は、レジスタ315,325から与えられ、前に評価された桁上げ出力及び部分加算結果を用いて、入力数値を評価及び合計する。例えば、最初のサイクルでは、レジスタ315,325はゼロを含むため、CSA310による評価は、ゼロ値を含む部分加算結果出力として入力数値をレジスタ325に記憶することになる。レジスタ315は、ゼロを入力数値に加算することにより桁上げ出力が生じないため、ゼロを記憶し続ける。次のサイクルでは、レジスタ325のCSA310との帰還結合により、前の入力が入力Y31-0に再度与えられる。このサイクルでは、新規に与えられた入力数値が前の入力数値と累積され、レジスタ325に記憶される新規の部分加算結果、及び、レジスタ315に記憶されるこの加算結果の桁上げ出力が生じる。入力ストリーム内の全ての入力数値がCSA310のZ15-0入力に与えられるまで、このサイクルが繰り返される。
【0035】
ストリームにおける最後の入力数値が与えられる最後のサイクルの後のサイクルにおいて、16ビットマルチプレクサ330の制御信号は、CSA310のZ15-0入力に与えられる乱数入力を選択する。乱数は、CSA310において、レジスタ315,325から入力X31-0,Y31-0に与えられる累積された桁上げ値及び累積された部分加算結果値と部分的に合計される。各レジスタ315,325において結果として得られる部分加算結果及び結果として得られる桁上げ出力は、乱数を含み、全加算器320において加算される。全加算器320の出力の最上位ビット31-16は、入力ストリームの確率的に丸められた加算結果を表し、残りの出力ビットは破棄される。
【0036】
一実施形態では、回路は、3つ以上の入力数値の加算結果を同時に合計し、確率的に丸める。この回路は、ウォレスツリー加算器ロジックを含むCSAロジックを使用する。「ウォレスツリー加算器ロジック」という用語は、本明細書では、4つ以上の入力を有し、これらの入力に与えられる入力数値の桁上げ出力及び桁上げなし部分加算結果出力を生成する回路を指す。ウォレスツリー加算器は、ウォレスツリー加算器ロジックの一例である。本明細書に記載される回路及び技術は、説明の目的のためにウォレスツリー加算器を指す場合があるが、他のウォレスツリー加算器ロジックに効果的に置き換えることができる。したがって、このような回路及び技術は、ウォレスツリー加算器に限定されるものとして解釈されるべきではなく、任意のウォレスツリー加算器ロジックに適用可能である。
【0037】
図4は、一実施形態における、入力数値の複数のストリームを合計し、このような合計を確率的に丸める回路を示すブロック図である。この例では、回路は、ウォレスツリー加算器を使用する。ウォレスツリー加算器は、結合されたCSA加算器のネットワークを含み、これらの結合されたCSA加算器は、ウォレスツリー加算器の入力に与えられた複数の入力数値を同時に累積し、累積された桁上げ出力、及び、累積された部分加算結果出力を生成する、接続されたCSAロジックのネットワークを含む。
【0038】
ウォレスツリー加算器410は、10個の入力を含み、
図3と同様に、これらの入力のうちの2つ(C及びS)は、桁上げ出力アキュムレータレジスタ415及び部分加算結果出力アキュムレータレジスタ425に接続される。ウォレスツリー加算器の各CSAは、入力数を1つ少ない出力数に減少させる。次いで、このようなCSAの出力が別のCSAの入力に接続され、2つの出力(桁上げ出力P及び部分加算結果出力Q)だけしかなくなるまで、出力数がさらに減少する。
【0039】
ウォレスツリー加算器410の出力P及びQは、CSA413の入力に接続される。CSA413の3番目の入力は、マルチプレクサ430に接続される。マルチプレクサ430の制御入力C1に基づいて、乱数入力又はゼロ値の何れかが選択され、CSA413の入力に与えられる。ゼロ値が与えられることにより、X1-X8の入力における数値のストリームを、CSA413の出力レジスタ415,425に累積することが可能になる。ストリームの最後のエントリにおいて、マルチプレクサ(Mux)430は、一実施形態では、最後の累積に加算される乱数についての乱数入力を選択する。他の実施形態では、Mux430は、任意の他の累積サイクルにおいて乱数入力を選択する。
【0040】
CSA413の出力は、桁上げ出力レジスタ415及び部分加算結果出力レジスタ425に接続され、これらのレジスタ自体は、全加算器420に接続される。全加算器420は、出力レジスタ415,425に累積されるときにCSA413の桁上げ出力及び部分加算結果の全加算を評価する。したがって、全加算器420は、数値の複数のストリームの合計の桁上げ完了結果を生じる。最後のサイクルでは、全加算器420の出力のいくつかの最上位ビットは、ウォレスツリー加算器410の入力に与えられる数値の入力ストリームの確率的に丸められた加算結果である。
【0041】
(負の加算結果丸め)
負の加算結果を確率的に丸めるために、乱数が減算される(そうでない場合、負の乱数が加算される)。例えば、2つ以上の数値のサンプル加算結果は、-37.25である。このような負の加算結果を確率的に丸めると、結果は、75%の確率で-37であり、25%の確率で-38である。乱数が-1から0(-1を含まない)の範囲に生成される場合、乱数は、-0.75から0(-0.75を含まない)の範囲にある75%の確率と、-1から-0.75(-1を含まない)の範囲にある25%の確率とを有する。したがって、このような負の乱数を-37.25の加算結果に加えることにより、75%の確率で-37から開始する結果(この結果は-38から-37.25(-38.0を含まない)の範囲にある)と、25%の確率で-38から開始する結果(この結果は-38.25から-38.0の範囲にある)とを生じる。
【0042】
一実施形態では、負の乱数を生成するために、正の乱数が生成された(例えば、本明細書で説明する技術を使用した)後に、負の数に変換される。一実施形態では、正の数の各ビットをネゲートして1の補数の負の数を生じることによって、正の乱数が同じ幅の負の数に変換される。別の実施形態では、正の乱数の各ビットをネゲートした後に、1の値を加算して、正の乱数が乱数の2の補数に変換される。さらに別の実施形態では、ランダムに生成された正の数の最上位ビットをネゲートし、正の乱数と絶対値が等しくなくても負の乱数が生成される。
【0043】
一実施形態では、入力数値の加算結果を確率的に丸めるために、確率的に丸めることなく加算結果を生成した後に、この加算結果の符号(正又は負)に基づいて、負の乱数への変換の有無にかかわらず乱数を加算する。
【0044】
図5は、一実施形態における、加算結果を、その符号に基づいて確率的に丸める回路を示すブロック図である。
図5のサンプル回路は、全加算器540と、16ビットXORゲート550と、を含む。32ビット加算結果は、入力加算結果の確率的丸めを生成するために、全加算器540への入力U31-0である。また、全加算器540は、下位の桁からの桁上げ入力についての入力CINを全加算器に公開する。入力加算結果の最上位ビットU31も、XORゲート550の16ビット入力の各ビットに結合される。XORゲートの他の16ビット入力は、正の乱数入力に接続される。XORゲート550の出力は、全加算器540の入力V15-V0に接続される。
【0045】
したがって、入力加算結果の最上位ビットU31が高く、この加算結果が負の数であることを示す場合、各乱数ビットが値1とXORされる。このようなXOR演算は、正の乱数の1の補数を生成する。次いで、1の補数の乱数が全加算器540への入力として入力V15-V0に与えられ、入力U31-U0において加算結果に加えられる。さらに、加算結果の最上位ビットU31が全加算器540の入力CINに結合されることにより、1の値が加算結果及び負の乱数の合計に加えられる。このような加算は、事実上、負の乱数を、与えられた正の乱数の2の補数にする。全加算器540の出力からの結果のいくつかの最上位ビット(例えば、出力31-16)は、確率的に丸められた負の加算結果として選択される。
【0046】
入力加算結果が正の数である場合に、XORゲート550の16ビット入力はゼロの値を有する。したがって、XORゲート550でのXOR演算は、乱数入力に与えられるものと同じ値をもたらす。同様に、入力CINはゼロの値を有するため、追加の値が全加算器540に加えられない。したがって、全加算器540の出力は、入力加算結果と不変の正の乱数との合計である。
【0047】
一実施形態では、加算結果を確率的に丸める回路は、加算結果を確率的に丸めるための2つのサブ回路を含み、2つのサブ回路は、乱数入力の符号が異なる。一方のサブ回路は、乱数入力において正の乱数を含み、他方のサブ回路は、乱数入力において負の乱数を含む。両方のサブ回路を使用して確率的に丸めた加算結果を計算した後に、各々の結果の一方又は両方の最上位ビットを使用して、2つの確率的丸め加算結果の何れかを回路の出力結果として選択する。例えば、正の乱数のサブ回路の結果の最上位ビットが正である場合、この結果が回路の出力として選択される。正の乱数のサブ回路の結果が負である場合、負の乱数のサブ回路の結果が使用される。
【0048】
図6は、一実施形態における、符号付き合計を確率的に丸める例示的な回路を示すブロック図である。この例示的な回路は、サブ回路610A,610Bを含む。サブ回路610A,610Bは、入力数値を合計し、確率的に丸めた数を与える同じ回路を含む。サブ回路610A,610Bは、本明細書で説明する何れかの回路を含むことができる。回路610A,610Bへの入力として与えられる入力数値は同じである。ただし、サブ回路Bについての乱数入力は、インバータ640によって反転される。インバータ640は、乱数入力の最上位ビットのみに接続される。このような反転(完全又は最上位ビット(MSB)のみ)は、乱数入力に与えられた正の乱数を、別の負であるが乱数に変換する。
【0049】
サブ回路610A,610Bの出力の符号(各々の出力の最上位ビット(MSB)によって表される)は、何れのサブ回路の出力が正しい確率的丸めを反映しているかを決定する。例えば、マルチプレクサ630は、サブ回路610Bの最上位ビットに接続されている。マルチプレクサ630は、サブ回路610Bの符号が負である場合にサブ回路610Aの出力を選択し、サブ回路610Bの符号が正である場合にサブ回路610Bの出力を選択する。
【0050】
(機能の概要)
図7は、一実施形態における、2つ以上の数の加算結果を確率的に丸めるプロセスを示すフローチャートである。ステップ705では、加算のために2つ以上の入力数値を受信する。ステップ710では、確率的に丸めるために乱数を受信する。
図7に示すプロセスを繰り返し実行することができるが、ステップ710では、プロセスの各反復ではなく、単一の反復において乱数を受信する。これにより、繰り返しの累積において乱数を1回だけ加算する。ステップ700では、線形帰還シフトレジスタ又は任意の他の方法によって乱数を生成することができる。
【0051】
ステップ715では、入力数値及び乱数の半加算を実行する。桁上げを伝播することなく、これらの桁を合計して部分加算結果出力を生成し、生成された桁上げを別個の桁上げ出力として集約する。一実施形態では、1つ以上の桁上げ保存加算器によってステップ705~715を実行する。
【0052】
ステップ720では、部分加算結果及び桁上げ出力を記憶し、ステップ705で入力数値としてフィードバックされるときに与えることができる。このようなフィードバックは、数値の1つ以上の入力ストリームの累積部分和を生成する。
【0053】
ステップ725では、桁上げ出力及び部分加算結果を受信し、ステップ730では、部分加算結果出力及び桁上げ出力の全加算(桁上げ伝播を含む)を実行して、入力数値(複数可)及び乱数の全加算を出力として生成する。一実施形態では、加算器ロジックによってステップ725~730を実行する。
【0054】
ステップ735では、全加算結果出力のいくつかの最上位ビットを、2つ以上の数値の合計を確率的に丸めた結果として選択する。選択された有効ビット数は、乱数に使用されるビット数に依存する。
【0055】
図8は、一実施形態における、2つ以上の数の符号付き加算結果を確率的に丸めるプロセスを示すフローチャートである。ステップ805では、加算のために2つ以上の入力数値を受信する。ステップ810では、2つ以上の数値の全加算(桁上げ伝播を含む)を実行して、中間符号付き加算結果を生成する。ステップ815では、最上位ビットに基づいて、中間加算結果の符号を決定する。
【0056】
設定される最上位ビットによって示されるように、中間加算結果が負である場合、ステップ820では、乱数を負の乱数に変換する。乱数は、その全てのビットをネゲートすることに基づいて、又は、乱数の最上位ビットのみをネゲートすることによって、変換され得る。最上位ビットがクリアであることによって示されるように、中間加算結果が正である場合、如何なる変換もなく乱数を使用する。
【0057】
ステップ825では、乱数を受信し、ステップ830では、ステップ810において生成された中間加算結果と乱数の加算を実行する。ステップ830では、全加算結果を生成する。
【0058】
ステップ835では、全加算結果出力のいくつかの最上位ビットを、2つ以上の数値の合計を確率的に丸めた結果として選択する。有効ビット数は、乱数入力に使用されるビット数に依存する。