(57)【要約】確率的丸めのための技術及び回路を提供する。一実施形態では、回路は、３つ以上の桁上げ保存加算器（ＣＳＡ）入力と、ＣＳＡ加算結果出力と、ＣＳＡ桁上げ出力と、を有するＣＳＡロジックを含む。３つ以上のＣＳＡ入力のうち１つのＣＳＡ入力に乱数値が与えられ、他のＣＳＡ入力には、合計される入力値が与えられる。さらに、回路は、加算器入力と加算結果出力とを有する加算器ロジックを含む。ＣＳＡロジックのＣＳＡ桁上げ出力は、加算器ロジックの加算器入力のうち１つの加算器入力に接続されており、ＣＳＡロジックのＣＳＡ加算結果出力は、加算器ロジックの加算器入力のうち別の加算器入力に結合されている。加算器ロジックの加算結果出力の特定の数の最上位ビットは、入力値を確率的に丸めた加算結果を表す。【選択図】図１
2021517301.tif 000002
【特許請求の範囲】
【請求項１】
３つ以上の桁上げ保存加算器（ＣＳＡ）入力と、ＣＳＡ加算結果出力と、ＣＳＡ桁上げ出力と、を含むＣＳＡロジックであって、乱数値が、前記３つ以上のＣＳＡ入力のうち特定のＣＳＡ入力に与えられる、ＣＳＡロジックと、
少なくとも複数の加算器入力と、加算結果出力と、を有する加算器ロジックと、を備え、
前記ＣＳＡロジックの前記ＣＳＡ桁上げ出力は、前記加算器ロジックの前記複数の加算器入力のうち１番目の入力に接続されており、前記ＣＳＡロジックの前記ＣＳＡ加算結果出力は、前記加算器ロジックの前記複数の加算器入力のうち２番目の入力に接続されており、
前記加算器ロジックの前記加算結果出力の特定の数の最上位ビットは、前記ＣＳＡロジックの前記３つ以上のＣＳＡ入力のうち、前記特定のＣＳＡ入力以外の少なくとも２つのＣＳＡ入力を確率的に丸めた加算結果を表す、
確率的丸め回路。
【請求項２】
前記３つ以上のＣＳＡ入力は、累積入力及び非累積入力を含み、前記累積入力は、前記非累積入力よりも広いビット幅を有する、
請求項１の回路。
【請求項３】
前記ＣＳＡ加算結果出力の少なくとも１つのビット出力は、前記累積入力の少なくとも１つのビット入力に接続されている、
請求項２の回路。
【請求項４】
前記加算器ロジックの前記加算器入力のうち前記１番目の入力の少なくとも１つのビット入力は、ゼロに設定されている、
請求項２の回路。
【請求項５】
前記３つ以上のＣＳＡ入力は、累積入力及び非累積入力を含み、前記非累積入力及び前記累積入力は、前記特定のＣＳＡ入力よりも広いビット幅を有する、
請求項１の回路。
【請求項６】
前記ＣＳＡ桁上げ出力の桁上げビット出力を決定し、前記ＣＳＡ加算結果出力の加算結果ビット出力を決定する、前記ＣＳＡロジックのＣＳＡコンポーネントロジックをさらに備え、
前記ＣＳＡロジックは、前記特定のＣＳＡ入力の乱数ビット入力を除外する、
請求項２の回路。
【請求項７】
ＣＳＡ桁上げレジスタと、
ＣＳＡ加算結果レジスタと、をさらに備え、
前記ＣＳＡ桁上げ出力は、前記ＣＳＡ桁上げ出力が前記ＣＳＡ桁上げレジスタに接続されることと、前記ＣＳＡ桁上げレジスタが前記１番目の入力に接続されることとによって、前記加算器ロジックの前記１番目の入力に接続されており、
前記ＣＳＡ加算結果出力は、前記ＣＳＡ加算結果出力が前記ＣＳＡ加算結果レジスタに接続されることと、前記ＣＳＡ加算結果レジスタが前記２番目の入力に接続されることとによって、前記加算器ロジックの前記２番目の入力に接続されており、
前記ＣＳＡ桁上げレジスタは、前記３つ以上のＣＳＡ入力の１番目のＣＳＡ入力に接続されており、前記ＣＳＡ加算結果レジスタは、前記３つ以上のＣＳＡ入力の２番目のＣＳＡ入力に接続されている、
請求項１の回路。
【請求項８】
前記３つ以上のＣＳＡ入力の３番目のＣＳＡ入力は、前記特定のＣＳＡ入力である、
請求項７の回路。
【請求項９】
ウォレスツリー加算器ロジックをさらに備える、
請求項１の回路。
【請求項１０】
前記ウォレスツリー加算器ロジックの特定のＣＳＡ加算器ロジックの前記特定のＣＳＡ入力に接続されたマルチプレクサ出力を含むマルチプレクサであって、マルチプレクサの少なくとも１つの入力が乱数であり、マルチプレクサの少なくとも別の入力がゼロである、マルチプレクサをさらに備え、
前記特定のＣＳＡ加算器ロジックの特定のＣＳＡ桁上げ出力は、前記ＣＳＡロジックの前記ＣＳＡ桁上げ出力であり、前記加算器ロジックの前記複数の加算器入力の前記１番目の入力に接続されており、
前記特定のＣＳＡ加算器ロジックの特定のＣＳＡ加算結果出力は、前記ＣＳＡロジックの前記ＣＳＡ加算結果出力であり、前記加算器ロジックの前記複数の加算器入力の前記２番目の入力に接続されている、
請求項９の回路。
【請求項１１】
前記特定のＣＳＡ入力に接続された乱数ロジック出力を有する乱数ロジックをさらに備える、
請求項１の回路。
【請求項１２】
前記乱数ロジックは、線形帰還シフトレジスタ又は乱数を記憶するレジスタのうち少なくとも１つを含む、
請求項１１の回路。
【請求項１３】
桁上げ保存加算器ロジックにおいて、複数の入力値を受信することであって、前記複数の入力値のうち少なくとも１つの入力値はランダムに生成された数である、ことと、
前記ランダムに生成された数に少なくとも部分的に基づいて、桁上げ出力値及び桁上げなし加算結果出力値を生成することと、
加算器ロジックにおいて、前記桁上げ出力値及び前記桁上げなし加算結果出力値を受信することと、
前記桁上げ出力値及び前記桁上げなし加算結果出力値に少なくとも部分的に基づいて、前記複数の入力値の加算結果を生成することと、
特定の数の最上位ビットを、前記複数の入力値を確率的に丸めた加算結果として選択することと、を含む、
確率的丸め方法。
【請求項１４】
複数の反復のうち１つの反復において、
前記桁上げ保存加算器ロジックにおいて、前記複数の入力値のうち特定の入力値を受信することと、
前記特定の入力値と、前の桁上げなし加算結果出力値と、前記複数の反復のうち前の反復からの前の桁上げ出力値と、に基づいて、中間桁上げなし加算結果出力と、中間桁上げ出力と、を生成することと、
前記複数の反復のうち次の反復のために、前記中間桁上げなし加算結果出力と、前記中間桁上げ出力と、を記憶することと、をさらに含む、
請求項１３の方法。
【請求項１５】
前記桁上げ保存加算器ロジックにおいて、前記複数の入力値を受信することは、
前記複数の入力値の各々を、複数の反復の各々の反復において受信することを含み、
前記複数の反復の最後の反復において受信した前記複数の入力値の最後の入力値は、前記ランダムに生成された数である、
請求項１３の方法。
【請求項１６】
前記ランダムに生成された数は、線形帰還レジスタから受信される、
請求項１３の方法。
【請求項１７】
前記ランダムに生成された数を除く前記複数の入力値は、別の桁上げ保存加算器ロジックの出力値である、
請求項１３の方法。
【請求項１８】
前記桁上げ保存加算器ロジックにおいて、前記ランダムに生成された数を受信することは、制御入力値に基づいている、
請求項１７の方法。
【請求項１９】
第１加算器ロジックにおいて、複数の入力値の中間加算結果を生成することと、
前記中間加算結果の最上位ビットに基づいて、前記中間加算結果が負であることを決定することと、
ランダムに生成された値を、負のランダムに生成された値に変換することと、
前記中間加算結果及び前記負のランダムに生成された値に基づいて、第２加算器ロジックにおいて、前記複数の入力値の加算結果を生成することと、
前記複数の入力値の加算結果の特定の数の最上位ビットを、前記複数の入力値を確率的に丸めた加算結果として選択することと、を含む、
確率的丸め方法。
【請求項２０】
前記ランダムに生成された値を、負のランダムに生成された値に変換することは、少なくとも、前記ランダムに生成された値の最上位ビットを設定することによって実行される、
請求項１９の方法。
【請求項２１】
前記ランダムに生成された値を、負のランダムに生成された値に変換することは、少なくとも、前記ランダムに生成された値のビットをネゲートすることによって実行される、
請求項１９の方法。
【請求項２２】
請求項１３〜２１の何れかに記載の方法を実行する、
ロジック回路。
【発明の詳細な説明】
【背景技術】
【０００１】
このセクションで説明するアプローチは、追求することができるアプローチであるが、必ずしも以前に着想又は追求されたアプローチではない。したがって、別段に示されない限り、このセクションで説明するアプローチの何れも、このセクションに含まれているという理由だけで従来技術とみなされるべきではない。
【０００２】
人工知能の成長に伴い、機械学習テクノロジーは、様々なアプリケーションに採用されている。機械学習モデルのトレーニングは、一般的に非常にリソースを消費するため、実行するには、通常、専用のコンピュータシステムが必要である。しかしながら、機械学習のアプリケーションの発展に伴い、精度を犠牲にすることなく、共有されたコンピューティングリソース環境で実行される機械学習モデルのトレーニングの必要性が増している。
【０００３】
パフォーマンスを向上させるために、機械学習モデルのトレーニングにおいて精度の低い数値表現を使用する場合がある。例えば、ニューラルネットワークの重み付けは、精度の低いフォーマットを有する可能性があるため、処理のために必要なコンピューティングリソースを少なくすることができる。しかしながら、演算によっては、より精度の高い数値表現が依然として（一時的ではあるが）生成される場合がある。
【０００４】
精度の高い数値表現を精度の低い数値表現に戻す１つの方法は、精度の高い数値表現を単に切り捨てることである。余分なビットの切り捨ての実装は簡単（通常ではデフォルト）であるが、値（重み付け等）を一方向にシステマティックにバイアスすることによって、トレーニングエラー／精度の低下につながる可能性がある。
【０００５】
精度を犠牲にすることなく精度の低い数値表現を利用するために、自明な切り捨ての代わりに、確率的（stochastic）丸めを実行する。精度の高い数値表現の確率的丸めは、バイアスの導入を避け、結果として得られる機械学習モデルの精度を向上させる。例えば、精度の高い小数での確率的丸めは、精度の高い小数から切り捨てられる最下位の小数に比例する確率で値を上下に丸める。その結果、３７．２５という値は、２５％の確率で３８に切り上げられ、７５％の確率で３７に切り下げられる。
【０００６】
確率的丸めを実装するための１つのアプローチは、丸めの結果を生じる複数の命令を実行することである。ソフトウェアプログラムは、確率的丸めのために適切なコマンド（複数可）を含むことができ、このようなプログラムのコンパイル中に、ハードウェアプロセッサによって実行される複数の命令を生じる。複数の命令を処理すると、複数のプロセッササイクル、潜在的な複数のメモリルックアップ、及び、パイプラインストールを処理する等の大きなオーバーヘッドが発生する。
【図面の簡単な説明】
【０００７】
【図１】一実施形態における、確率的丸めを用いた加算のための例示的な回路を示すブロック図である。
【図２】一実施形態における、桁上げ保存加算器（ＣＳＡ）ロジックコンポーネントの例示的な回路を示すブロック図である。
【図３】一実施形態における、入力数の１つのストリームを累積し、このような累積を確率的に丸める例示的な回路を示すブロック図である。
【図４】一実施形態における、入力数の複数のストリームを合計し、このような合計を確率的に丸める回路を示すブロック図である。
【図５】一実施形態における、加算結果を、その符号に基づいて確率的に丸める回路を示すブロック図である。
【図６】一実施形態における、符号付き合計を確率的に丸める例示的な回路を示すブロック図である。
【図７】一実施形態における、２つ以上の数の加算結果を確率的に丸めるプロセスを示すフローチャートである。
【図８】一実施形態における、２つ以上の数の符号付き合計を確率的に丸めるプロセスを示すフローチャートである。
【発明を実施するための形態】
【０００８】
以下の説明では、説明の目的のために、本発明の完全な理解を提供するために、多くの具体的な詳細が述べられている。しかしながら、本発明は、これらの具体的な詳細を用いずに実施し得ることは明らかであろう。他の例では、本発明を不必要に不明瞭にすることを回避するために、周知の構造及びデバイスがブロック図の形式で示されている。
【０００９】
（概要）
より高いコード密度、より高いパフォーマンス、より高いプロセッサ使用率、及び、より低い電力を達成するために、本明細書では、確率的丸めを実行する様々な回路及び技術を説明する。一実施形態では、乱数を生成して２つ以上の数の合計に加算し、２つ以上の数の確率的丸めを用いた加算結果を生成する。
【００１０】
例えば、２つ以上の数のサンプル加算結果が３７．２５であると仮定する。このような加算結果に対して確率的丸めを用いると、結果は、７５％の確率で３７であり、２５％の確率で３８である。０から１（１を含まない）の範囲の乱数が生成される場合に、乱数は、７５％の確率で０から０．７５（０．７５を含まない）の範囲にあり、２５％の確率で０．７５から１（１を含まない）の範囲にある。したがって、このような乱数を３７．２５の加算結果に加えると、７５％の確率で３７から開始する結果（この結果は３７．２５から３８．０（３８．０を含まない）の範囲にある）と、２５％の確率で３８から開始する結果（この結果は３８．０から３８．２５（３８．２５を含まない）の範囲にある）とを生じる。
【００１１】
したがって、一実施形態では、確率的に丸められた高精度の加算結果の低精度の加算結果を計算するために、高精度の加算結果をもたらす可能性がある加数を合計することに加えて、乱数が生成及び加算される。乱数は、他の加数と同時に加算される。ランダムに生成された数は、所望の低精度の幅と高精度の幅との間の差と同じ幅を有する。確率的に丸められた加算結果は、最上位桁の低精度の幅を取得し、残りの結果を破棄することによって生成される。例えば、幅の広い加算結果が３２ビットであり、確率的に丸められた幅の狭い加算結果が８ビットである場合、３２−８＝２４ビットの乱数を、合計への追加の加数として生成する。合計の後に、３２ビットの加算結果の上位８ビットを、確率的に丸められた８ビット幅の加算結果として読み出す。
【００１２】
一実施形態では、桁上げ保存加算器（ＣＳＡ）ロジックを使用して、提示された入力値に乱数値を加算して、入力値の確率的に丸められた加算結果を生成する。「桁上げ保存加算器（ＣＳＡ）ロジック」という用語は、３つ以上の入力を有し、桁上げ出力（carry output）及び桁上げなし部分加算結果出力（carry-less partial sum output）を生成する回路を指す。桁上げなし部分加算結果出力は、対応する桁を加える間に生成された桁上げ値を考慮しない、全ての入力の加算結果である。対応する桁の不明の桁上げ値をＣＳＡロジックの桁上げ出力として集約する。桁上げ保存加算器は、ＣＳＡロジックの一例である。本明細書で説明する回路及び技術は、説明の目的のために、２進数桁上げ保存加算器を指す場合があるが、任意の他のＣＳＡロジックを効果的に置き換えることができる。したがって、このような回路及び技術は、桁上げ保存加算器に限定されると解釈されるべきではなく、任意のＣＳＡロジックによって実装され得る。
【００１３】
ＣＳＡロジックを加算器ロジックに結合して、入力値の全ての加算結果を生成する。「加算器ロジック」という用語は、複数の入力を有し、複数の入力に提示された値の全ての加算結果（任意の生成された桁上げを含む）を生成する回路を指す。本明細書で説明する回路及び技術は、説明の目的のために、桁上げ完了加算器を加算器ロジックと呼ぶことができ、このような回路及び技術は、全加算器に限定されると解釈されるべきではなく、任意の加算器ロジックに限定されるものと解釈されたい。全加算器の非限定的な例は、桁上げ伝播加算器（ripple-carry adder）及び桁上げ先見加算器（carry-lookahead adder）である。
【００１４】
桁上げ出力及び部分加算結果出力は、加算器ロジックの入力として与えられる。加算器ロジックのいくつかの最上位ビットは、ＣＳＡロジックの２つ以上の入力の確率的に丸められた加算結果を表す。
【００１５】
図１は、一実施形態における、確率的丸めを用いた加算のための例示的な回路を示すブロック図である。この例示的な回路は、アキュムレータレジスタ１０５と、ＣＳＡ１１０と、全加算器１２０と、を含む。ＣＳＡ１１０は、３つの入力Ｘ３１−Ｘ０，Ｙ１５−Ｙ０，Ｚ１５−Ｚ０を含む。
【００１６】
これらの入力の各々に与えられた２進数は、ＣＳＡ１１０及び全加算器１２０によって加算される。ＣＳＡ１１０の桁上げ出力Ｃ３１−０は、全加算器１２０の入力Ｕ３１−Ｕ０に結合され、ＣＳＡ１１０の部分加算結果出力Ｓ３１−Ｓ０は、全加算器１２０の入力Ｖ３１−Ｖ０に結合される。
【００１７】
ＣＳＡ１１０は、入力Ｘ３１−Ｘ０，Ｙ１５−Ｙ０，Ｚ１５−Ｚ０の対応するビットの部分和（桁上げなし加算）を実行するように構成されている。部分加算結果は、出力Ｓ３１−Ｓ０で提供される。対応する入力ビットの加算毎の桁上げの集約は、出力Ｃ３１−Ｃ０で提供される。全加算器１２０は、入力Ｕ３１−Ｕ０，Ｖ３１−Ｖ０に与えられた２進数値の桁上げ完了加算を実行する。加算器１２０によって生成された全ての加算結果は、出力３１−０で提供される。
【００１８】
この例では、ＣＳＡ入力Ｘ３１−Ｘ０をアキュムレータレジスタ１０５に接続する。したがって、アキュムレータレジスタ１０５に記憶された数は、ＣＳＡ１１０への入力として入力Ｘ３１−Ｘ０に与えられる。累積された数値は、ＣＳＡ１１０の入力Ｙ１５−Ｙ０に与えられる１６ビットの入力数値に加算される。ＣＳＡ１１０への他の入力は、ＣＳＡ１１０の入力Ｚ１５−Ｚ０に与えられる１６ビットの乱数である。
【００１９】
この例では、乱数入力が１６ビット入力であることから、全加算器１２０の下位１６ビットである出力１５−０は破棄される。残りのビットの出力である出力３１−１６は、入力数値と、レジスタ１０５に記憶された数値との確率的丸めを用いた加算結果である。
【００２０】
（乱数レジスタ）
一実施形態では、乱数は、線形帰還シフトレジスタによって生成される。このような実施形態では、線形帰還シフトレジスタは、ＣＳＡロジックの乱数入力に接続されている。線形帰還シフトレジスタは、任意のビット長であり、このようなビット長の疑似乱数を生成することができる。
【００２１】
別の実施形態では、レジスタは、ＣＳＡロジックの乱数入力に接続されている。乱数は、加算結果の確率的丸めを計算する前に生成され、レジスタに記憶される。
【００２２】
（確率的丸め回路への最適化）
一実施形態では、ＣＳＡロジックは、乱数入力が与えられていない１つ以上の入力ビットに対して最適化される。このような実施形態では、ＣＳＡロジックの入力に与えられる乱数は、ＣＳＡロジックへの少なくとも１つの他の入力よりも狭いビット幅を有する。乱数入力を含まない（又は、他の方法により乱数入力に対して常にゼロ値に設定されている）ＣＳＡロジックの回路コンポーネントを、除外又は最適化することができる。そうすることによって、回路の密度、消費電力及びパフォーマンスを向上させる。
【００２３】
一実施形態では、ＣＳＡロジックの入力は、累積入力である。累積入力では、前の演算の中間結果が与えられることから、累積入力は、ＣＳＡロジックの他の入力よりも幅が広い。前の演算により、より広い幅の累積入力によって収容される追加のビット（複数可）が生成された可能性がある。例えば、累積入力は、幅が広く、前の演算の中間結果が記憶されるアキュムレータレジスタに接続されてもよい。
【００２４】
したがって、ＣＳＡロジックの非累積入力は、少なくともＣＳＡロジックの累積ロジックよりもビット幅が狭い。一実施形態では、非累積数入力を含まない（又は、他の方法により非累積入力に対して常にゼロ値に設定されている）ＣＳＡロジックの回路コンポーネントを、乱数入力を含まないコンポーネントと同様に、除外又は最適化する。
【００２５】
図２は、一実施形態における、ＣＳＡロジックコンポーネントの例示的な回路を示すブロック図である。この例では、ＣＳＡロジックの累積入力は３２ビット入力であり、非累積入力は１６ビット入力であり、乱数入力は８ビット入力である。回路２００は、桁上げ出力の最下位ビットＣ０と、部分加算結果出力の最下位ビットＳ０と、を生成するサンプルロジック回路である。この出力は、入力Ａ０に累積入力の最下位ビットを与え、入力Ｂ０に非累積入力の最下位ビットを与え、入力Ｃ０に乱数入力の最下位ビットを与えることによって生成される。
【００２６】
回路２２０は、桁上げ出力の８番目のビットＣ８と、部分加算結果出力の８番目のビットＳ８と、を生成するサンプルロジックである。最下位ビットについて示されるような回路ロジックを使用するのではなく、回路２００、回路２２０が最適化される。この最適化は、乱数入力Ｃがないために行われる。これは、乱数入力が８ビットの狭い幅の入力であり、ビット０から７までの意味のある入力しかないためである。乱数入力がないため、回路２００の等価論理ゲート２０４，２０８，２１０が回路２２０では除外されている。回路２００内の論理ゲート２０２に相当する論理ゲート２２２と、回路２００内の論理ゲート２０８に相当する論理ゲート２２８と、を使用して、８番目のビットの部分加算結果Ｓ８と、８番目のビットの桁上げ出力Ｃ８と、を生成する。
【００２７】
回路２３０は、サンプルＣＳＡロジックの１６番目のビット入力で開始する乱数入力及び非累積数入力の両方の欠如に基づく回路２２０のさらなる最適化である。さらなる最適化によって、論理ゲートを使用せずに、ビット１６から３１の桁上げ出力及び部分加算結果出力を生成する。
【００２８】
（入力数値のストリーム（複数可）の累積）
一実施形態では、ＣＳＡロジックの部分加算結果出力、及び、ＣＳＡロジックの桁上げ出力は、各々の中間レジスタに接続されている。これらの中間レジスタ自体は、全加算器の入力に接続され、ＣＳＡロジックの少なくとも２つの入力への帰還経路内にある。ＣＳＡロジックの残りの入力（複数可）には、合計される数値の各々の入力ストリーム（複数可）が与えられる。各サイクルでは、入力数値を前のサイクル部分加算結果と部分的に合計し、桁上げ出力を中間レジスタに記憶し、新規の部分加算結果、及び、新規の桁上げ出力を中間レジスタに記憶する。
【００２９】
一実施形態では、入力ストリームの最後の入力数値が与えられた後に、次のサイクルで、乱数がＣＳＡロジックの入力ストリームの入力に与えられる。乱数は、乱数を含むレジスタ又は線形帰還シフトレジスタからの出力を多重化することに基づいて与えられる。乱数が入力ストリームの入力に与えられることによって、最終的な累積桁上げ及び部分加算結果が乱数と共に累積される。結果として得られる累積のいくつかの最上位ビットは、与えられた入力ストリームの確率的に丸められた加算結果である。
【００３０】
別の実施形態では、１つの中間レジスタが乱数に初期化される。したがって、最初の累積サイクルでは、乱数は、入力ストリームの１番目の数で累積される。したがって、入力ストリームを処理する全てのサイクルの後に、出力の最上位ビットは、入力ストリームの確率的に丸められた加算結果を表す。
【００３１】
図３は、一実施形態における、入力数値ストリームを累積し、このような累積を確率的に丸める回路を示すブロック図である。この例示的な回路は、アキュムレータレジスタ３１５，３２５と、ＣＳＡ３１０と、全加算器３２０と、を含む。ＣＳＡ３１０は、２つの３２ビット入力Ｘ３１−Ｘ０及びＹ３１−Ｙ０と、１つの１６ビット入力Ｚ１５−Ｚ０と、を含む。
【００３２】
これらの入力の各々に与えられる２進数は、ＣＳＡ３１０及び全加算器３２０によって合計される。ＣＳＡ３１０の桁上げ出力Ｃ３１−Ｃ０は、レジスタ３１５に接続されており、このレジスタ自体は、全加算器３２０の入力Ｕ３１−Ｕ０に接続されている。ＣＳＡ１１０の部分加算結果出力Ｓ３１−Ｓ０は、レジスタ３２５に接続されており、レジスタ自体は、全加算器３２０の入力Ｖ３１−Ｖ０に接続されている。
【００３３】
この例の帰還ループにおいて、レジスタ３１５は入力Ｘ３１−Ｘ０に接続されており、レジスタ３２５はＹ入力３１−Ｙ０に接続されている。レジスタ３１５，３２５はゼロに初期化される。
【００３４】
各サイクルでは、１６ビットの入力数値は、マルチプレクサ３３０によって多重化され、入力Ｚ１５−Ｚ０に与えられる。ＣＳＡ３１０は、レジスタ３１５，３２５から与えられ、前に評価された桁上げ出力及び部分加算結果を用いて、入力数値を評価及び合計する。例えば、最初のサイクルでは、レジスタ３１５，３２５はゼロを含むため、ＣＳＡ３１０による評価は、ゼロ値を含む部分加算結果出力として入力数値をレジスタ３２５に記憶することになる。レジスタ３１５は、ゼロを入力数値に加算することにより桁上げ出力が生じないため、ゼロを記憶し続ける。次のサイクルでは、レジスタ３２５のＣＳＡ３１０との帰還結合により、前の入力が入力Ｙ３１−０に再度与えられる。このサイクルでは、新規に与えられた入力数値が前の入力数値と累積され、レジスタ３２５に記憶される新規の部分加算結果、及び、レジスタ３１５に記憶されるこの加算結果の桁上げ出力が生じる。入力ストリーム内の全ての入力数値がＣＳＡ３１０のＺ１５−０入力に与えられるまで、このサイクルが繰り返される。
【００３５】
ストリームにおける最後の入力数値が与えられる最後のサイクルの後のサイクルにおいて、１６ビットマルチプレクサ３３０の制御信号は、ＣＳＡ３１０のＺ１５−０入力に与えられる乱数入力を選択する。乱数は、ＣＳＡ３１０において、レジスタ３１５，３２５から入力Ｘ３１−０，Ｙ３１−０に与えられる累積された桁上げ値及び累積された部分加算結果値と部分的に合計される。各レジスタ３１５，３２５において結果として得られる部分加算結果及び結果として得られる桁上げ出力は、乱数を含み、全加算器３２０において加算される。全加算器３２０の出力の最上位ビット３１−１６は、入力ストリームの確率的に丸められた加算結果を表し、残りの出力ビットは破棄される。
【００３６】
一実施形態では、回路は、３つ以上の入力数値の加算結果を同時に合計し、確率的に丸める。この回路は、ウォレスツリー加算器ロジックを含むＣＳＡロジックを使用する。「ウォレスツリー加算器ロジック」という用語は、本明細書では、４つ以上の入力を有し、これらの入力に与えられる入力数値の桁上げ出力及び桁上げなし部分加算結果出力を生成する回路を指す。ウォレスツリー加算器は、ウォレスツリー加算器ロジックの一例である。本明細書に記載される回路及び技術は、説明の目的のためにウォレスツリー加算器を指す場合があるが、他のウォレスツリー加算器ロジックに効果的に置き換えることができる。したがって、このような回路及び技術は、ウォレスツリー加算器に限定されるものとして解釈されるべきではなく、任意のウォレスツリー加算器ロジックに適用可能である。
【００３７】
図４は、一実施形態における、入力数値の複数のストリームを合計し、このような合計を確率的に丸める回路を示すブロック図である。この例では、回路は、ウォレスツリー加算器を使用する。ウォレスツリー加算器は、結合されたＣＳＡ加算器のネットワークを含み、これらの結合されたＣＳＡ加算器は、ウォレスツリー加算器の入力に与えられた複数の入力数値を同時に累積し、累積された桁上げ出力、及び、累積された部分加算結果出力を生成する、接続されたＣＳＡロジックのネットワークを含む。
【００３８】
ウォレスツリー加算器４１０は、１０個の入力を含み、図３と同様に、これらの入力のうちの２つ（Ｃ及びＳ）は、桁上げ出力アキュムレータレジスタ４１５及び部分加算結果出力アキュムレータレジスタ４２５に接続される。ウォレスツリー加算器の各ＣＳＡは、入力数を１つ少ない出力数に減少させる。次いで、このようなＣＳＡの出力が別のＣＳＡの入力に接続され、２つの出力（桁上げ出力Ｐ及び部分加算結果出力Ｑ）だけしかなくなるまで、出力数がさらに減少する。
【００３９】
ウォレスツリー加算器４１０の出力Ｐ及びＱは、ＣＳＡ４１３の入力に接続される。ＣＳＡ４１３の３番目の入力は、マルチプレクサ４３０に接続される。マルチプレクサ４３０の制御入力Ｃ１に基づいて、乱数入力又はゼロ値の何れかが選択され、ＣＳＡ４１３の入力に与えられる。ゼロ値が与えられることにより、Ｘ１−Ｘ８の入力における数値のストリームを、ＣＳＡ４１３の出力レジスタ４１５，４２５に累積することが可能になる。ストリームの最後のエントリにおいて、マルチプレクサ（Ｍｕｘ）４３０は、一実施形態では、最後の累積に加算される乱数についての乱数入力を選択する。他の実施形態では、Ｍｕｘ４３０は、任意の他の累積サイクルにおいて乱数入力を選択する。
【００４０】
ＣＳＡ４１３の出力は、桁上げ出力レジスタ４１５及び部分加算結果出力レジスタ４２５に接続され、これらのレジスタ自体は、全加算器４２０に接続される。全加算器４２０は、出力レジスタ４１５，４２５に累積されるときにＣＳＡ４１３の桁上げ出力及び部分加算結果の全加算を評価する。したがって、全加算器４２０は、数値の複数のストリームの合計の桁上げ完了結果を生じる。最後のサイクルでは、全加算器４２０の出力のいくつかの最上位ビットは、ウォレスツリー加算器４１０の入力に与えられる数値の入力ストリームの確率的に丸められた加算結果である。
【００４１】
（負の加算結果丸め）
負の加算結果を確率的に丸めるために、乱数が減算される（そうでない場合、負の乱数が加算される）。例えば、２つ以上の数値のサンプル加算結果は、−３７．２５である。このような負の加算結果を確率的に丸めると、結果は、７５％の確率で−３７であり、２５％の確率で−３８である。乱数が−１から０（−１を含まない）の範囲に生成される場合、乱数は、−０．７５から０（−０．７５を含まない）の範囲にある７５％の確率と、−１から−０．７５（−１を含まない）の範囲にある２５％の確率とを有する。したがって、このような負の乱数を−３７．２５の加算結果に加えることにより、７５％の確率で−３７から開始する結果（この結果は−３８から−３７．２５（−３８．０を含まない）の範囲にある）と、２５％の確率で−３８から開始する結果（この結果は−３８．２５から−３８．０の範囲にある）とを生じる。
【００４２】
一実施形態では、負の乱数を生成するために、正の乱数が生成された（例えば、本明細書で説明する技術を使用した）後に、負の数に変換される。一実施形態では、正の数の各ビットをネゲートして１の補数の負の数を生じることによって、正の乱数が同じ幅の負の数に変換される。別の実施形態では、正の乱数の各ビットをネゲートした後に、１の値を加算して、正の乱数が乱数の２の補数に変換される。さらに別の実施形態では、ランダムに生成された正の数の最上位ビットをネゲートし、正の乱数と絶対値が等しくなくても負の乱数が生成される。
【００４３】
一実施形態では、入力数値の加算結果を確率的に丸めるために、確率的に丸めることなく加算結果を生成した後に、この加算結果の符号（正又は負）に基づいて、負の乱数への変換の有無にかかわらず乱数を加算する。
【００４４】
図５は、一実施形態における、加算結果を、その符号に基づいて確率的に丸める回路を示すブロック図である。図５のサンプル回路は、全加算器５４０と、１６ビットＸＯＲゲート５５０と、を含む。３２ビット加算結果は、入力加算結果の確率的丸めを生成するために、全加算器５４０への入力Ｕ３１−０である。また、全加算器５４０は、下位の桁からの桁上げ入力についての入力ＣＩＮを全加算器に公開する。入力加算結果の最上位ビットＵ３１も、ＸＯＲゲート５５０の１６ビット入力の各ビットに結合される。ＸＯＲゲートの他の１６ビット入力は、正の乱数入力に接続される。ＸＯＲゲート５５０の出力は、全加算器５４０の入力Ｖ１５−Ｖ０に接続される。
【００４５】
したがって、入力加算結果の最上位ビットＵ３１が高く、この加算結果が負の数であることを示す場合、各乱数ビットが値１とＸＯＲされる。このようなＸＯＲ演算は、正の乱数の１の補数を生成する。次いで、１の補数の乱数が全加算器５４０への入力として入力Ｖ１５−Ｖ０に与えられ、入力Ｕ３１−Ｕ０において加算結果に加えられる。さらに、加算結果の最上位ビットＵ３１が全加算器５４０の入力ＣＩＮに結合されることにより、１の値が加算結果及び負の乱数の合計に加えられる。このような加算は、事実上、負の乱数を、与えられた正の乱数の２の補数にする。全加算器５４０の出力からの結果のいくつかの最上位ビット（例えば、出力３１−１６）は、確率的に丸められた負の加算結果として選択される。
【００４６】
入力加算結果が正の数である場合に、ＸＯＲゲート５５０の１６ビット入力はゼロの値を有する。したがって、ＸＯＲゲート５５０でのＸＯＲ演算は、乱数入力に与えられるものと同じ値をもたらす。同様に、入力ＣＩＮはゼロの値を有するため、追加の値が全加算器５４０に加えられない。したがって、全加算器５４０の出力は、入力加算結果と不変の正の乱数との合計である。
【００４７】
一実施形態では、加算結果を確率的に丸める回路は、加算結果を確率的に丸めるための２つのサブ回路を含み、２つのサブ回路は、乱数入力の符号が異なる。一方のサブ回路は、乱数入力において正の乱数を含み、他方のサブ回路は、乱数入力において負の乱数を含む。両方のサブ回路を使用して確率的に丸めた加算結果を計算した後に、各々の結果の一方又は両方の最上位ビットを使用して、２つの確率的丸め加算結果の何れかを回路の出力結果として選択する。例えば、正の乱数のサブ回路の結果の最上位ビットが正である場合、この結果が回路の出力として選択される。正の乱数のサブ回路の結果が負である場合、負の乱数のサブ回路の結果が使用される。
【００４８】
図６は、一実施形態における、符号付き合計を確率的に丸める例示的な回路を示すブロック図である。この例示的な回路は、サブ回路６１０Ａ，６１０Ｂを含む。サブ回路６１０Ａ，６１０Ｂは、入力数値を合計し、確率的に丸めた数を与える同じ回路を含む。サブ回路６１０Ａ，６１０Ｂは、本明細書で説明する何れかの回路を含むことができる。回路６１０Ａ，６１０Ｂへの入力として与えられる入力数値は同じである。ただし、サブ回路Ｂについての乱数入力は、インバータ６４０によって反転される。インバータ６４０は、乱数入力の最上位ビットのみに接続される。このような反転（完全又は最上位ビット（ＭＳＢ）のみ）は、乱数入力に与えられた正の乱数を、別の負であるが乱数に変換する。
【００４９】
サブ回路６１０Ａ，６１０Ｂの出力の符号（各々の出力の最上位ビット（ＭＳＢ）によって表される）は、何れのサブ回路の出力が正しい確率的丸めを反映しているかを決定する。例えば、マルチプレクサ６３０は、サブ回路６１０Ｂの最上位ビットに接続されている。マルチプレクサ６３０は、サブ回路６１０Ｂの符号が負である場合にサブ回路６１０Ａの出力を選択し、サブ回路６１０Ｂの符号が正である場合にサブ回路６１０Ｂの出力を選択する。
【００５０】
（機能の概要）
図７は、一実施形態における、２つ以上の数の加算結果を確率的に丸めるプロセスを示すフローチャートである。ステップ７０５では、加算のために２つ以上の入力数値を受信する。ステップ７１０では、確率的に丸めるために乱数を受信する。図７に示すプロセスを繰り返し実行することができるが、ステップ７１０では、プロセスの各反復ではなく、単一の反復において乱数を受信する。これにより、繰り返しの累積において乱数を１回だけ加算する。ステップ７００では、線形帰還シフトレジスタ又は任意の他の方法によって乱数を生成することができる。
【００５１】
ステップ７１５では、入力数値及び乱数の半加算を実行する。桁上げを伝播することなく、これらの桁を合計して部分加算結果出力を生成し、生成された桁上げを別個の桁上げ出力として集約する。一実施形態では、１つ以上の桁上げ保存加算器によってステップ７０５〜７１５を実行する。
【００５２】
ステップ７２０では、部分加算結果及び桁上げ出力を記憶し、ステップ７０５で入力数値としてフィードバックされるときに与えることができる。このようなフィードバックは、数値の１つ以上の入力ストリームの累積部分和を生成する。
【００５３】
ステップ７２５では、桁上げ出力及び部分加算結果を受信し、ステップ７３０では、部分加算結果出力及び桁上げ出力の全加算（桁上げ伝播を含む）を実行して、入力数値（複数可）及び乱数の全加算を出力として生成する。一実施形態では、加算器ロジックによってステップ７２５〜７３０を実行する。
【００５４】
ステップ７３５では、全加算結果出力のいくつかの最上位ビットを、２つ以上の数値の合計を確率的に丸めた結果として選択する。選択された有効ビット数は、乱数に使用されるビット数に依存する。
【００５５】
図８は、一実施形態における、２つ以上の数の符号付き加算結果を確率的に丸めるプロセスを示すフローチャートである。ステップ８０５では、加算のために２つ以上の入力数値を受信する。ステップ８１０では、２つ以上の数値の全加算（桁上げ伝播を含む）を実行して、中間符号付き加算結果を生成する。ステップ８１５では、最上位ビットに基づいて、中間加算結果の符号を決定する。
【００５６】
設定される最上位ビットによって示されるように、中間加算結果が負である場合、ステップ８２０では、乱数を負の乱数に変換する。乱数は、その全てのビットをネゲートすることに基づいて、又は、乱数の最上位ビットのみをネゲートすることによって、変換され得る。最上位ビットがクリアであることによって示されるように、中間加算結果が正である場合、如何なる変換もなく乱数を使用する。
【００５７】
ステップ８２５では、乱数を受信し、ステップ８３０では、ステップ８１０において生成された中間加算結果と乱数の加算を実行する。ステップ８３０では、全加算結果を生成する。
【００５８】
ステップ８３５では、全加算結果出力のいくつかの最上位ビットを、２つ以上の数値の合計を確率的に丸めた結果として選択する。有効ビット数は、乱数入力に使用されるビット数に依存する。
【図１】
2021517301.tif 000003
【図２】
2021517301.tif 000004
【図３】
2021517301.tif 000005
【図４】
2021517301.tif 000006
【図５】
2021517301.tif 000007
【図６】
2021517301.tif 000008
【図７】
2021517301.tif 000009
【図８】
2021517301.tif 000010
【手続補正書】
【提出日】令和2年11月12日(2020.11.12)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
３つ以上の桁上げ保存加算器（ＣＳＡ）入力と、ＣＳＡ加算結果出力と、ＣＳＡ桁上げ出力と、を含むＣＳＡロジックであって、乱数値が、前記３つ以上のＣＳＡ入力のうち特定のＣＳＡ入力に与えられる、ＣＳＡロジックと、
少なくとも複数の加算器入力と、加算結果出力と、を有する加算器ロジックと、を備え、
前記ＣＳＡロジックの前記ＣＳＡ桁上げ出力は、前記加算器ロジックの前記複数の加算器入力のうち１番目の入力に接続されており、前記ＣＳＡロジックの前記ＣＳＡ加算結果出力は、前記加算器ロジックの前記複数の加算器入力のうち２番目の入力に接続されており、
前記加算器ロジックの前記加算結果出力の特定の数の最上位ビットは、前記ＣＳＡロジックの前記３つ以上のＣＳＡ入力のうち、前記特定のＣＳＡ入力以外の少なくとも２つのＣＳＡ入力を確率的に丸めた加算結果を表す、
確率的丸め回路。
【請求項２】
前記３つ以上のＣＳＡ入力は、累積入力及び非累積入力を含み、前記累積入力は、前記非累積入力よりも広いビット幅を有する、
請求項１の回路。
【請求項３】
前記３つ以上のＣＳＡ入力は、累積入力及び非累積入力を含み、前記非累積入力及び前記累積入力は、前記特定のＣＳＡ入力よりも広いビット幅を有する、
請求項１の回路。
【請求項４】
ＣＳＡ桁上げレジスタと、
ＣＳＡ加算結果レジスタと、をさらに備え、
前記ＣＳＡ桁上げ出力は、前記ＣＳＡ桁上げ出力が前記ＣＳＡ桁上げレジスタに接続されることと、前記ＣＳＡ桁上げレジスタが前記１番目の入力に接続されることとによって、前記加算器ロジックの前記１番目の入力に接続されており、
前記ＣＳＡ加算結果出力は、前記ＣＳＡ加算結果出力が前記ＣＳＡ加算結果レジスタに接続されることと、前記ＣＳＡ加算結果レジスタが前記２番目の入力に接続されることとによって、前記加算器ロジックの前記２番目の入力に接続されており、
前記ＣＳＡ桁上げレジスタは、前記３つ以上のＣＳＡ入力の１番目のＣＳＡ入力に接続されており、前記ＣＳＡ加算結果レジスタは、前記３つ以上のＣＳＡ入力の２番目のＣＳＡ入力に接続されている、
請求項１の回路。
【請求項５】
ウォレスツリー加算器ロジックと、
前記ウォレスツリー加算器ロジックの特定のＣＳＡ加算器ロジックの前記特定のＣＳＡ入力に接続されたマルチプレクサ出力を含むマルチプレクサであって、マルチプレクサの少なくとも１つの入力が乱数であり、マルチプレクサの少なくとも別の入力がゼロである、マルチプレクサと、をさらに備え、
前記特定のＣＳＡ加算器ロジックの特定のＣＳＡ桁上げ出力は、前記ＣＳＡロジックの前記ＣＳＡ桁上げ出力であり、前記加算器ロジックの前記複数の加算器入力の前記１番目の入力に接続されており、
前記特定のＣＳＡ加算器ロジックの特定のＣＳＡ加算結果出力は、前記ＣＳＡロジックの前記ＣＳＡ加算結果出力であり、前記加算器ロジックの前記複数の加算器入力の前記２番目の入力に接続されている、
請求項１の回路。
【請求項６】
前記特定のＣＳＡ入力に接続された乱数ロジック出力を有する乱数ロジックをさらに備える、
請求項１の回路。
【請求項７】
桁上げ保存加算器ロジックにおいて、複数の入力値を受信することであって、前記複数の入力値のうち少なくとも１つの入力値はランダムに生成された数である、ことと、
前記ランダムに生成された数に少なくとも部分的に基づいて、桁上げ出力値及び桁上げなし加算結果出力値を生成することと、
加算器ロジックにおいて、前記桁上げ出力値及び前記桁上げなし加算結果出力値を受信することと、
前記桁上げ出力値及び前記桁上げなし加算結果出力値に少なくとも部分的に基づいて、前記複数の入力値の加算結果を生成することと、
特定の数の最上位ビットを、前記複数の入力値を確率的に丸めた加算結果として選択することと、を含む、
確率的丸め方法。
【請求項８】
複数の反復のうち１つの反復において、
前記桁上げ保存加算器ロジックにおいて、前記複数の入力値のうち特定の入力値を受信することと、
前記特定の入力値と、前の桁上げなし加算結果出力値と、前記複数の反復のうち前の反復からの前の桁上げ出力値と、に基づいて、中間桁上げなし加算結果出力と、中間桁上げ出力と、を生成することと、
前記複数の反復のうち次の反復のために、前記中間桁上げなし加算結果出力と、前記中間桁上げ出力と、を記憶することと、をさらに含む、
請求項７の方法。
【請求項９】
前記桁上げ保存加算器ロジックにおいて、前記複数の入力値を受信することは、
前記複数の入力値の各々を、複数の反復の各々の反復において受信することを含み、
前記複数の反復の最後の反復において受信した前記複数の入力値の最後の入力値は、前記ランダムに生成された数である、
請求項７の方法。
【請求項１０】
前記ランダムに生成された数は、線形帰還レジスタから受信される、
請求項７の方法。
【請求項１１】
前記ランダムに生成された数を除く前記複数の入力値は、別の桁上げ保存加算器ロジックの出力値である、
請求項７の方法。
【請求項１２】
第１加算器ロジックにおいて、複数の入力値の中間加算結果を生成することと、
前記中間加算結果の最上位ビットに基づいて、前記中間加算結果が負であることを決定することと、
ランダムに生成された値を、負のランダムに生成された値に変換することと、
前記中間加算結果及び前記負のランダムに生成された値に基づいて、第２加算器ロジックにおいて、前記複数の入力値の加算結果を生成することと、
前記複数の入力値の加算結果の特定の数の最上位ビットを、前記複数の入力値を確率的に丸めた加算結果として選択することと、を含む、
確率的丸め方法。
【請求項１３】
前記ランダムに生成された値を、負のランダムに生成された値に変換することは、少なくとも、前記ランダムに生成された値の最上位ビットを設定することによって実行される、
請求項１２の方法。
【請求項１４】
前記ランダムに生成された値を、負のランダムに生成された値に変換することは、少なくとも、前記ランダムに生成された値のビットをネゲートすることによって実行される、
請求項１２の方法。
【請求項１５】
請求項７〜１４の何れかに記載の方法を実行する、
ロジック回路。
【国際調査報告】
2021517301.tif 000011
2021517301.tif 000012
2021517301.tif 000013