(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2022-02-07
(54)【発明の名称】数を変換するためのハードウェア・モジュール
(51)【国際特許分類】
G06F 7/58 20060101AFI20220131BHJP
G06F 7/499 20060101ALI20220131BHJP
G06F 9/38 20060101ALI20220131BHJP
【FI】
G06F7/58 640
G06F7/499 101
G06F7/499 605
G06F9/38 370C
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2021534940
(86)(22)【出願日】2019-06-21
(85)【翻訳文提出日】2021-06-17
(86)【国際出願番号】 EP2019066477
(87)【国際公開番号】W WO2020126124
(87)【国際公開日】2020-06-25
(32)【優先日】2018-12-21
(33)【優先権主張国・地域又は機関】GB
(81)【指定国・地域】
(71)【出願人】
【識別番号】518371892
【氏名又は名称】グラフコアー リミテッド
【氏名又は名称原語表記】Graphcore Limited
【住所又は居所原語表記】11-19 Wine Street,Bristol,BS1 2PH,United Kingdom
(74)【代理人】
【識別番号】100169904
【氏名又は名称】村井 康司
(74)【代理人】
【識別番号】100221372
【氏名又は名称】岡崎 信治
(72)【発明者】
【氏名】スティーブン フィリックス
(72)【発明者】
【氏名】ムルデュラ ゴア
【テーマコード(参考)】
5B013
【Fターム(参考)】
5B013DD03
(57)【要約】
nビットのシーケンスをハードウェア・モジュールのレジスタに記憶し、nビットのシーケンスの最上位ビットが1に等しい場合は、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、nビットのシーケンスのn-1個の最下位ビットの対応するビットに等しくなるように設定し、符号ビットをゼロに設定し、nビットのシーケンスの最上位ビットがゼロに等しい場合は、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、nビットのシーケンスのn-1個の最下位ビットの対応するビットの逆数に設定し、符号ビットを1に設定して、大きさ成分及び符号ビットを含む符号付き整数を生成するように構成された回路を備える、ハードウェア・モジュール。
【特許請求の範囲】
【請求項1】
nビットのシーケンスをハードウェア・モジュールのレジスタに記憶し、
前記nビットのシーケンスの最上位ビットが1に等しい場合は、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、前記nビットのシーケンスのn-1個の最下位ビットの対応するビットと等しくなるように設定し、
符号ビットをゼロに設定し、
前記nビットのシーケンスの前記最上位ビットがゼロに等しい場合は、
前記大きさ成分の前記最上位ビットの前記n-1個のビットのそれぞれを、前記nビットのシーケンスの前記n-1個の最下位ビットの前記対応するビットの逆数と等しくなるように設定し、
前記符号ビットを1に設定して、
前記大きさ成分及び前記符号ビットを含む符号付き整数を生成するように構成された回路を備える、
ハードウェア・モジュール。
【請求項2】
前記大きさ成分の最下位ビットを1に設定するように構成される、請求項1に記載のハードウェア・モジュール。
【請求項3】
前記nビットのシーケンスの前記最上位ビットを入力し、前記符号ビットを出力するように構成されたNOTゲートを備える、請求項1又は2に記載のハードウェア・モジュール。
【請求項4】
複数のXNORゲートを備え、各XNORゲートが、
前記nビットのシーケンスの前記最上位ビットを入力とし、
前記nビットのシーケンスの前記n-1個の最下位ビットのうちの1つを入力とし、
前記大きさ成分の前記n-1個の最上位ビットの前記対応するビットを出力として提供するように構成される、請求項1~3のいずれか一項に記載のハードウェア・モジュール。
【請求項5】
ランダムに生成されたビットのシーケンスとして、前記nビットのシーケンスを提供するように構成された乱数生成器を備える、請求項1~4のいずれか一項に記載のハードウェア・モジュール。
【請求項6】
前記符号付き整数から浮動小数点数を生成するように構成される、請求項1~5のいずれか一項に記載のハードウェア・モジュール。
【請求項7】
前記符号付き整数の前記符号ビットをゼロに設定して、符号なしビット・シーケンスを生成することと、
前記符号なしビット・シーケンスの先頭のゼロの数に等しい量だけ、前記符号なしビット・シーケンスに左シフトを実行することと、
前記シフトされた符号なしビット・シーケンスを仮数に指定されたビットの数にまで切り捨てることと、
によって、前記浮動小数点数の仮数を生成するように構成される、請求項6に記載のハードウェア・モジュール。
【請求項8】
先頭のゼロの数に基づいて、前記浮動小数点数の指数を設定するように構成される、請求項7に記載のハードウェア・モジュール。
【請求項9】
前記浮動小数点数の指数を-1に設定するように構成される、請求項6又は7に記載のハードウェア・モジュール。
【請求項10】
それぞれのビット・シーケンスから、ゼロを中心とする分布での複数の符号付き整数を生成するように構成される、請求項1~9のいずれか一項に記載のハードウェア・モジュール。
【請求項11】
前記それぞれのビット・シーケンスから、ゼロを中心とする分布での複数の浮動小数点数を生成するように構成される、請求項10に記載のハードウェア・モジュール。
【請求項12】
前記回路が、少なくとも1つの特定用途向け集積回路、及び少なくとも1つのフィールド・プログラマブル・ゲート・アレイのうちの1つ又は複数を備える、請求項1~11のいずれか一項に記載のハードウェア・モジュール。
【請求項13】
ビットのシーケンスに2を乗算して第1の中間結果を生成することと、
前記第1の中間結果に1を加算して第2の中間結果を生成することと、
前記第2の中間結果から2のn乗を減算することと、
によって、前記大きさ成分を計算するように構成される、請求項1~12のいずれか一項に記載のハードウェア・モジュール。
【請求項14】
大きさ成分及び符号ビットを含む符号付き整数を生成する方法であって、
nビットのシーケンスをハードウェア・モジュールのレジスタに記憶することと、
前記nビットのシーケンスの最上位ビットが1に等しい場合は、
前記大きさ成分の最上位ビットのn-1個のビットのそれぞれを、前記nビットのシーケンスのn-1個の最下位ビットの対応するビットと等しくなるように設定することと、
前記符号ビットをゼロに設定することと、
前記nビットのシーケンスの前記最上位ビットがゼロに等しい場合には、
前記大きさ成分の前記最上位ビットの前記n-1個のビットのそれぞれを、前記nビットのシーケンスの前記n-1個の最下位ビットの前記対応するビットの逆数と等しくなるように設定することと、
前記符号ビットを1に設定することと、
を含む、方法。
【請求項15】
命令に応答して、前記大きさ成分の前記最下位ビットを1に設定することを含む、請求項14に記載の方法。
【請求項16】
ランダムに生成されたビットのシーケンスとして、前記nビットのシーケンスを提供することを含む、請求項14又は15に記載の方法。
【請求項17】
前記符号付き整数から浮動小数点数を生成することを含む、請求項14~16のいずれか一項に記載の方法。
【請求項18】
前記符号付き整数の前記符号ビットをゼロに設定して、符号なしビット・シーケンスを生成することと、
前記符号なしビット・シーケンスの先頭のゼロの数に等しい量だけ、前記符号なしビット・シーケンスに左シフトを実行することと、
前記シフトされた符号なしビット・シーケンスを仮数に指定されたビットの数にまで切り捨てることと、
によって、前記浮動小数点数の仮数を生成することを含む、請求項17に記載の方法。
【請求項19】
先頭のゼロの数に基づいて、前記浮動小数点数の指数を設定することを含む、請求項18に記載の方法。
【請求項20】
前記それぞれのビット・シーケンスから、ゼロを中心とする分布での複数の浮動小数点数を生成することを含む、請求項19に記載の方法。
【請求項21】
ビットのシーケンスに2を乗算して第1の中間結果を生成することと、
前記第1の中間結果に1を加算して第2の中間結果を生成することと、
前記第2の中間結果から2のn乗を減算することと、
によって、前記大きさ成分を計算することを含む、請求項14~20のいずれか一項に記載の方法。
【請求項22】
実行されると、請求項14~21のいずれか一項に記載の方法をハードウェア・モジュールが実行できるようにする、持続的な媒体に記録されるコンピュータ・プログラム命令を有するコンピュータ・プログラムを含む、コンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、数を変換するためのハードウェア・モジュールに関し、より詳細には、数の中心分布を生成するためのハードウェア・モジュールに関する。
【背景技術】
【0002】
コンピューティングでは、既定のサイズのビット・シーケンスを使用して数を表現する。ビット・シーケンスの特定の表現が、ビット・シーケンスがどのように解釈されるかを決定する。
【0003】
表現の一形式は整数表現であり、これは符号付きでも符号なしでもよい。符号なし整数は、正の整数の大きさを表すビット列にて構成される。符号付き整数も、大きさを表すビット列を含み、さらに符号ビットを含む。この符号ビットの値は、整数が正であるか負であるかを示す。
【0004】
或いは、実数を近似的に表現するのには、浮動小数点表示を使用することが多い。この浮動小数点表示は、別々の3つの成分、すなわち、符号成分、仮数成分、及び指数成分を含む。単精度(すなわち32ビット)の浮動小数点表示では、符号成分は単一ビット、指数成分は8ビット、仮数成分は23ビットから構成される。半精度(すなわち16ビット)の浮動小数点表示では、符号成分は単一ビット、仮数成分は10ビット、指数成分は5ビットから構成される。たいていの場合、こうした3つの成分から、以下の数式によって数が与えられる。
【数1】
【0005】
指数に対して表示される「オフセット(offset)」は、指数を表すのに使用されるビットの数に依存しており、これは精度レベルに依存する。単精度表示では、オフセットは127に等しい。半精度の形式では、オフセットは15に等しい。
【0006】
ここで、「I」は暗黙ビットであり、これは指数から導出される。指数のビット・シーケンスが、すべてゼロ、又はすべて1以外の数から構成されている場合、この暗黙ビットは1に等しく、その数は「ノルム(Norm)」として知られている。この場合、浮動小数点数は以下で与えられる。
【数2】
【0007】
指数のビット・シーケンスが、すべてゼロから構成されている場合、この暗黙ビットは0に等しく、その数は「Dノルム(DNorm)」として知られている。この場合、浮動小数点数は以下で与えられる。
【数3】
【0008】
Dノルムは、普通なら限られた指数ビット数によって表示可能になるはずのものよりも、小さい数を表すことができるので有用である。
【0009】
一方、指数ビット・シーケンスが、すべて1から構成されているその他の状況を使用して、無限大を表現してもよい。
【0010】
浮動小数点表示は、ニューラル・ネットワーク処理の実装において数を表現するために用いられる。ニューラル・ネットワークの実装には、このような浮動小数点数の記憶と操作が含まれる。ニューラル・ネットワークは、機械学習及び人工知能の分野で使用されている。ニューラル・ネットワークは、リンクによって相互接続されたノードのセットの構成を含み、互いに相互作用する。コンピューティングにおけるニューラル・ネットワークの原理は、人間の脳内において電気刺激がどのように情報を伝達するかについての情報に基づいている。こうした理由で、各ノードは、ニューロンと呼ばれることが多い。各ノードは、頂点と呼ばれることもある。各リンクは、エッジと呼ばれる場合がある。ネットワークは、入力データを取得することができ、ある特定のノードが、このデータに演算を実行する。こうした演算の結果が、他のノードに渡される。各ノードの出力は、活性化値又はノード値と呼ばれる。各リンクは、重みに関連している。重みは、ニューラル・ネットワークの各ノード間の接続性を規定する。ニューラル・ネットワークが学習できるようになるための様々な技法が数多く知られており、この学習は重みの値を変更することによって実行される。
【0011】
図1には、ニューラル・ネットワークでの各ノードの一構成の極めて簡略化されたバージョンが示してある。このタイプの構成は、学習又はトレーニングに使用されることが多く、入力ノード層、隠れノード層、及び出力ノード層を含む。実際は、各層には数多くのノードが存在することになり、今日では、セクション当たり2層以上の層が存在することがある。入力層Niの各ノードは、そのノードに与えられるデータに、ある関数を実行することによって生成される活性化値又はノード値を、その出力において生成することができる。入力層からのノード値のベクトルは、隠れ層での各ノードの入力において、それぞれの重みのベクトルによって基準化され、それぞれの重みは、その特定のノードと、隠れ層でのその接続ノードとの接続性を規定する。実際には、ネットワークは、数百万ものノードを有し、多次元的に接続されるので、ベクトルはテンソルになることの方が多い。ノードNhの入力において適用される重みは、w0・・・w2とラベル付けされる。入力層での各ノードは、少なくとも初めは、隠れ層での各ノードに接続される。隠れ層での各ノードは、そこに提供されるデータに活性化関数を実行することができ、出力層N
0での各ノードN
0のそれぞれに提供される出力ベクトルを同様に生成することができる。たとえば、各ノードの入力活性化と、それぞれの入力リンクにおけるその固有の重みとのドット積を実行することによって、各ノードは、その入力データを重み付けする。次いで、各ノードは、重み付けされたデータに活性化関数を実行する。この活性化関数は、たとえばシグモイド関数とできる。
図1Aを参照されたい。入力層において入力されるデータに演算を実行し、各ノードからの活性化に重みを割り当て、隠れ層での各ノードに入力されたデータに作用することによって(重み付けし、活性化関数を実行することによって)、ネットワークは学習する。したがって、隠れ層での各ノードは、重み付けされたデータに演算を実行し、出力層での各ノードに出力を提供する。また、出力層のノードが重みを割り当ててもよい。それぞれの重みは、それぞれの誤差値によって特徴付けられる。さらに、各ノードは、誤り状態に関連付けられてもよい。各ノードでの誤り状態は、そのノードの重みの誤差が、容認性のある特定のレベル又は度合いを下回るかどうかの評価基準をもたらす。様々な学習手法が存在するが、それぞれの場合において、
図1での左から右へのネットワークを介した順方向伝搬、総合誤差の計算、及び
図1での右から左へのネットワークを介した誤差の逆方向伝搬が存在する。次のサイクルでは、各ノードは、逆伝播した誤差を考慮に入れ、重みの修正済みセットを生成する。このようにして、ネットワークをトレーニングして、その所望の動作を実行することができる。
【0012】
ニューラル・ネットワークでは、0~1の範囲のランダムな浮動小数点数を必要とする計算が数多く存在する。その代わりに、ゼロを中心とする数の分布で、このような計算を実行することには利点が存在し得る。
【発明の概要】
【課題を解決するための手段】
【0013】
したがって、nビットのシーケンスにより表される場合、このビットがゼロを中心とする数の分布を表すようにこうしたビットを何らかの形で処理することが有益となる場合がある。このような分布は、ニューラル・ネットワークに適用される。
【0014】
数の分布をセンタリングするこのようなプロセスは、たとえば、ソフトウェアにより、その数から最大値の半分の数を差し引くことによって実現することもできる。しかし、その代わりに、このプロセスを実行することのできるハードウェア・モジュールを実現することが望ましい。ソフトウェア実装は比較的簡単そうに見えることもあるが、数を変換するたびに、各命令をプロセッサにロードして実行する必要がある。したがって、ハードウェアの代わりにソフトウェアでプロセスを実現すると、このプロセスの効率が低下することになる場合がある。しかし、このプロセスをハードウェアで実現するには、必要となるハードウェア資源の観点からは要求の厳しい、ハードウェアでの減算の使用を回避することが望ましい。したがって、センタリング・プロセスをハードウェアで実装することは、ソフトウェア機能をハードウェアで直接的に実装することではなく、必要な回路構成への要求を最小限に抑えるために、ハードウェアが実行する動作を慎重に検討する必要がある。
【0015】
本出願の各実施形態は、こうした問題のうちの1つ又は複数に対処することができる。
【0016】
本発明の第1の態様によれば、nビットのシーケンスをハードウェア・モジュールのレジスタに記憶し、このnビットのシーケンスの最上位ビットが1に等しい場合は、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、nビットのシーケンスのn-1個の最下位ビットの対応するビットに等しくなるように設定し、符号ビットをゼロに等しくなるように設定し、nビットのシーケンスの最上位ビットがゼロに等しい場合には、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、nビットのシーケンスのn-1個の最下位ビットの対応するビットの逆数に等しくなるように設定し、符号ビットを1に等しくなるように設定することによって、大きさ成分及び符号ビットを含む符号付き整数を生成するように構成された回路を備えるハードウェア・モジュールが設けられる。
【0017】
ハードウェア・モジュールによって、大きさ成分を計算してもよい。ビットのシーケンスに2を乗算して第1の中間結果を生成することと、この第1の中間結果に1を加算して第2の中間結果を生成することと、この第2の中間結果から2のn乗を減算することとによって、これを実現してもよい。大きさ成分の最下位ビットを1に設定してもよい。
【0018】
ハードウェア・モジュールは、シーケンスの最上位ビットを入力し、符号ビットを出力するNOTゲートを備えてもよい。ハードウェア・モジュールは、複数のXNORゲートを備えてもよい。各XNORゲートは、シーケンスの最上位ビット、及びシーケンスのn-1個の最下位ビットのうちの1つを入力する。次いで、このXNORゲートは、大きさ成分のn-1個の最上位ビットの対応するビットを出力する。
【0019】
ランダムに生成されたビットのシーケンスとして、nビットのシーケンスを提供する乱数生成器が存在してもよい。
【0020】
符号付き整数から、浮動小数点数を生成してもよい。この浮動小数点数から、仮数を生成してもよい。符号付き整数の符号をゼロに等しく設定して、符号なしのビット・シーケンスを生成することによって、これを実現してもよい。次いで、符号なしビット・シーケンスの先頭のゼロの数に等しい量だけ、この符号なしビット・シーケンスを左シフトし、次いで、シフトされた符号なしビット・シーケンスを、仮数に指定されたビットの数にまで切り捨ててもよい。先頭のゼロの数に応じて、浮動小数点数の指数を設定してもよい。この指数を、-1に設定してもよい。
【0021】
それぞれのビット・シーケンスから、ゼロを中心とする分布での複数の符号付き整数を生成することができる。前記それぞれのビット・シーケンスから、ゼロを中心とする分布での複数の浮動小数点数を生成することができる。
【0022】
ハードウェア・モジュールの回路構成は、少なくとも1つの特定用途向け集積回路、及び/又は少なくとも1つのフィールド・プログラマブル・ゲート・アレイを備えてもよい。
【0023】
本発明の第2の態様によれば、大きさ成分及び符号ビットを含む符号付き整数を生成する方法が提供され、この方法は、nビットのシーケンスをハードウェア・モジュールのレジスタに記憶することと、このnビットのシーケンスの最上位ビットが1に等しい場合は、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、nビットのシーケンスのn-1個の最下位ビットの対応するビットに等しくなるように設定することと、符号ビットをゼロに等しくなるように設定することと、nビットのシーケンスの最上位ビットがゼロに等しい場合には、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、nビットのシーケンスのn-1個の最下位ビットの対応するビットの逆数に等しくなるように設定することと、符号ビットを1に等しくなるように設定することとを含む。
【0024】
実施形態によっては、符号付き整数を生成する方法は、大きさ成分及び符号ビットを含み、この方法は、nビットのシーケンスをハードウェア・モジュールのレジスタに記憶することと、このnビットのシーケンスの最上位ビットが1に等しい場合は、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、nビットのシーケンスのn-1個の最下位ビットの対応するビットに等しくなるように設定することと、符号ビットをゼロに等しくなるように設定することと、nビットのシーケンスの最上位ビットがゼロに等しい場合は、大きさ成分の最上位ビットのn-1個のビットのそれぞれを、nビットのシーケンスのn-1個の最下位ビットの対応するビットの逆数に等しくなるように設定することと、符号ビットを1に等しくなるように設定することとを含む。
【0025】
実施形態によっては、この方法は、命令に応答して、大きさ成分の最下位ビットを1に等しく設定することを含む。
【0026】
実施形態によっては、この方法は、ランダムに生成されたビットのシーケンスとしてnビットのシーケンスを提供することを含む。
【0027】
実施形態によっては、この方法は、符号付き整数から浮動小数点数を生成することを含む。
【0028】
実施形態によっては、この方法は、符号付き整数の符号ビットをゼロに設定して、符号なしビット・シーケンスを生成することと、符号なしビット・シーケンスの先頭のゼロの数に等しい量だけ、この符号なしビット・シーケンスを左シフトすることと、シフトされた符号なしビット・シーケンスを仮数に指定されたビットの数にまで切り捨てることとによって、浮動小数点数の仮数を生成することを含む。
【0029】
実施形態によっては、この方法は、先頭のゼロの数に基づいて、浮動小数点数の指数を設定することを含む。
【0030】
実施形態によっては、この方法は、前記それぞれのビット・シーケンスから、ゼロを中心とする分布での複数の浮動小数点数を生成することを含む。
【0031】
実施形態によっては、この方法は、ビットのシーケンスに2を乗算して第1の中間結果を生成することと、この第1の中間結果に1を加算して第2の中間結果を生成することと、この第2の中間結果から2のn乗を減算することとによって、大きさ成分を計算することを含む。
【0032】
本発明の第3の態様によれば、ハードウェア・モジュールによって実行されると、前述の各ステップを実行するコンピュータ・プログラム命令を有するコンピュータ・プログラムを含む、コンピュータ・プログラム製品が提供される。
【図面の簡単な説明】
【0033】
【
図1】ニューラル・ネットの非常に簡略化した概略図である。
【
図1A】ニューロンの非常に簡略化した概略図である。
【
図4】値を浮動小数点形式に変換する回路の一例を示す。
【
図5】値を浮動小数点形式に変換するための回路の一例を示す。
【
図7】本発明の一実施形態による処理ユニットの概略図である。
【
図8】ランダムなビット・シーケンスから浮動小数点数に変換するプロセスを示す概略図である。
【発明を実施するための形態】
【0034】
擬似乱数生成器(PRNG)が、分散ランダム・ビットを均一に生成する。計算するには、確率を表すための0~1の範囲でのランダムな浮動小数点数が必要になる場合が多い。本明細書に記載のsu-from-ui回路は、ランダムな符号なし整数から符号付き整数に変換する。次いで、符号付き整数は、この回路によって-0.5~0.5の範囲での浮動小数点数に変換するのに適している。
【0035】
総じて、nビットの浮動小数点数は、次式を使用して符号なし整数から変換することができる。
float=((2*uint)+1-2n)/2(n+1)
ここで、nは浮動小数点数の仮数を表すビット数である。この方式での表示可能な最大の大きさは、0.5-(2-(n+1))である。本出願の各実施形態は、対称的で均一なランダム浮動小数点数のハードウェア実装を実現する。
【0036】
(符号なし整数を表すと考えられる)ビット・シーケンスを、ゼロを中心とする符号付き整数の分布に変換することが課題である。次いで、このような符号付き整数は、浮動小数点形式に変換するのに適しており、ゼロを中心とする浮動小数点数の分布を生成する。符号付き整数を生成するための1つの提案は、減算(又は加算)機能を使用することである。しかし、これらは高価である。したがって、いくつかの実施形態は、また、そのような減算を新規のビット操作により実現する。
【0037】
本出願の各実施形態は、ビットのシーケンスを符号付き整数に変換するためのハードウェア・モジュールに関する。このハードウェア・モジュールはさらに、符号付き整数を浮動小数点数に変換するように構成される。各ビット・シーケンスは、ランダムに生成された値を表してもよい。この変換プロセスは、それぞれ変換プロセスを受ける数の分布が、ゼロを中心とする数の新規の分布を形成することになるものである。
【0038】
浮動小数点数を生成するために、ハードウェア・モジュールは、まずランダムに生成されたビットのシーケンス(符号なし整数を表す)を符号付き整数に変換するように構成される。符号付き整数は、このようにして計算される符号付き整数の分布が、ゼロを中心とするように計算される。次いで、符号付き整数は、浮動小数点数に変換される。
【0039】
ハードウェア・モジュールは、少なくとも1つの特定用途向け集積回路(ASIC)、及び少なくとも1つのフィールド・プログラマブル・ゲート・アレイ(FPGA)、又は回路/ゲートのうち、1つ又は複数を備える。ハードウェア・モジュールは、「符号なし整数からの対称で均一な回路(symmetric uniform from unsigned integer circuit)」と呼ばれる回路を備え、本出願の各実施形態によって、符号なし整数から浮動小数点数を計算するように構成される。この「符号なし整数からの対称で均一な回路」は、符号なし整数を表すビット・シーケンスを符号付き整数に変換するための回路構成を備える。「符号なし整数からの対称で均一な回路」はまた、符号付き整数を表すビット・シーケンスを浮動小数点数に変換するための回路構成を備える。
【0040】
こうしたハードウェア要素(すなわち、FPGA及び/若しくはASIC、又は回路/ゲート)は、nビットのシーケンスを入力し、そのビットを新規の分布での適切な位置にシフトするよう各ビットを操作するように構成される。このビットのシーケンスは、浮動小数点形式に変換される符号なし整数を表してもよい。浮動小数点形式での数は、符号ビット、仮数、及び指数を含む。「浮動小数点形式」という用語を用いることにより、数を表すのに使用されるビット数については制限がないものとする。実施形態によっては、数は、単精度の浮動小数点形式で表されてもよく、したがって32ビットから構成される。他の実施形態では、数は、半精度の浮動小数点形式で表されてもよく、したがって16ビットから構成される。
【0041】
ハードウェア要素(すなわち、FPGA及び/若しくはASIC、又は回路/ゲート)は、ハードウェア・モジュールに提供されるnビットのシーケンスのn-1個の最下位ビット(LSB)に基づいて、符号付き整数の大きさ成分のn-1個の最上位ビット(MSB)を決定するように構成される。
【0042】
nビットのシーケンスのMSBが1に等しい場合、ハードウェア要素は、符号付き整数の大きさ成分のn-1個のMSBのそれぞれを、nビットのシーケンスのn-1個のLSBのそれに対応するビットに等しくなるよう設定するように構成される。この場合、符号付き整数の符号ビットは1に等しくなるように設定される。
【0043】
nビットのシーケンスのMSBがゼロに等しい場合、ハードウェア要素は、符号付き整数の大きさ成分のn-1個のMSBのそれぞれを、nビットのシーケンスのn-1個のLSBのそれに対応するビットの逆数に等しくなるよう設定するように構成される。この場合、符号付き整数の符号ビットはゼロに等しくなるように設定される。
【0044】
いずれの場合でも、符号付き整数のLSBは1に等しくなるように設定される。
【0045】
ハードウェア・モジュールにおいて入力されるnビットのシーケンスは、乱数生成器によってランダムに生成されてもよい。ハードウェア・モジュールにおいて入力される、ランダムに生成された数は、乱数の一様分布を形成してもよく、又は近似ガウス分布を形成してもよい。ランダムに生成された数を前述のように変更することによって、ゼロを中心とする一様分布、ガウス分布、又は他の何らかの形式の分布を形成できる。ゼロを中心とする数の分布を必要とする技法は、ニューラル・ネットワークでの用途を有する。重み又は活性化にランダム・ノイズを加えることによって、ニューラル・ネットワークの性能を改善するための技法が、最近になって考案されてきた。この点において、実行可能な手段としてガウスノイズが探究されてきた。乱数を生成するための本明細書に記載の技法を使用して、我々の以前の米国出願第15/886505号に記載されているようなガウスノイズを生成することができ、その内容を、参考として本明細書に援用する。必要とされるノイズを提供するために、この例では、ガウス分布を正規化し、ゼロを中心とする。
【0046】
記述されているような浮動小数点数を生成するための、このようなハードウェア・モジュール24の使用例を示す
図7を参照する。
図7には、符号なし整数から浮動小数点数を生成するための単一の命令を実行するように構成された、実行ユニット2の概略ブロック図が示してある。
【0047】
この実行ユニット2は、処理ユニット内のパイプライン4の一部分を形成する。この処理ユニットは、命令メモリ10から命令をフェッチする命令フェッチ・ユニット6を備える。この処理ユニットはまた、メモリからデータをロードし、又はメモリにデータを記憶するためのデータ・メモリ12にアクセスする役割を担うメモリ・アクセス段8を備える。任意の場合にパイプライン4によって各命令が実行されるように、源オペランド及び宛先オペランドを保持するために、1組のレジスタ14が設けられる。パイプライン4は、様々な異なる命令を実行するための、たとえば数学演算を実行するための数多くの様々なタイプの実行ユニットを含んでもよいことが容易に理解されよう。本発明で有用となり得る処理ユニットの一タイプは、バレルスレッド・タイム・スロットを使用する処理ユニットであり、スーパーバイザ・スレッドは、様々な作業者スレッドをその実行用の様々なタイム・スロットに割り当ててもよい。
【0048】
実行ユニット2は、命令実行モジュール23、及び命令の実行結果を保持するための出力バッファ27を備える。命令実行モジュール23は、ハードウェア・モジュール24が浮動小数点数を生成できるようにする命令を実行するように構成される。ハードウェア・モジュール24は、このような命令に応答して、擬似乱数生成器22から入力したnビットのシーケンスを変換して、浮動小数点数を出力バッファ27に提供するように構成される。
【0049】
複数の命令を実行することによって、ゼロを中心とする分布で複数の浮動小数点数が生成されてもよい。
【0050】
ハードウェア・モジュールにおいて入力されるnビットのシーケンスは、符号なし整数を表すと理解することができる。こうした符号なし整数は、初期分布を形成する。ハードウェア・モジュールにおいて入力されることがある、符号なし整数の初期分布210を示す
図2を参照する。初期分布210は一様分布であり、乱数生成器が出力する数の一様分布を反映する。
【0051】
この例では、nは4である(すなわち、それぞれの符号なし整数が4ビットで表される)。したがって、表すことのできる最大値は15であり、これはビット・シーケンス1111で与えられる。表すことのできる最小値は0であり、これはビット・シーケンス0000で与えられる。これは、0から15の間に広がる分布210内に反映される。
【0052】
ゼロを中心とする浮動小数点数の分布310を示す
図3を参照する。この分布310は、記述されているように、ハードウェア・モジュールにおいて入力されるnビットのシーケンスの結果を表す。この分布の範囲は、初期の分布と同様に15である。しかし、ここで、この分布は-7.5から7.5の間に広がる。
【0053】
符号なし整数から符号付き整数を生成するのに使用されるハードウェア・モジュールの回路を示す
図4を参照する。符号付き整数は、結果として得られる分布がゼロを中心とするように、この回路によって生成される。
【0054】
図に示した例では、nビットのシーケンス405は、ビット・シーケンス0101を含む。
図4には、410において、これが値5の符号なし整数を表すことが示してある。符号付き整数の大きさ415も、4ビットを含む。符号付き整数は、さらに符号ビット420を含む。
【0055】
符号ビット420の値を決定するために、nビットのシーケンス405のMSBが、NOTゲート425への入力として使用される。この出力は、符号ビット420である。これには、符号なし整数がnビットのシーケンスによって表現可能な最大値の半分未満である場合に、符号付き整数を負にする効果がある。この例では、符号なし整数が、4ビットで表現可能な最大値(15)の半分(7.5)未満の値(5)を有するので、符号ビット420は、1(負数を表す)に等しく設定される。
【0056】
図4にはまた、符号付き整数の大きさのn-1個のMSB430を構成するのに使用される回路構成が示してある。これらは、nビットのシーケンスのn-1個のLSB435に基づいて計算される。
【0057】
各ハードウェア要素は、複数のXNOR(排他的否定論理和)ゲート440を含む。n-1個のXNORゲート440が設けられてもよい。各XNORゲート440はまた、nビットのシーケンスのn-1個のLSBのうちの1つを入力とし、符号付き整数の大きさのn-1個のMSB430の対応するビットに、その出力を提供するように構成される。したがって、第1のXNORゲート440aは、nビットのシーケンスのn-1個のLSB435のMSBを入力し、符号付き整数の大きさのMSBを出力するように構成される。第2のXNORゲート440bは、n個のビットのシーケンスのn-1個のLSB435の2番目のMSBを受信し、符号付き整数の大きさの2番目のMSBを出力するように構成される。第3のXNORゲート440cは、nビットのシーケンスのn-1個のLSB435の3番目のMSBを受信し、符号付き整数の大きさの3番目のMSBを出力するように構成される。
【0058】
XNORゲート440のそれぞれはまた、nビットのシーケンスのMSB450を入力とするように構成される。そうすることによって、XNORゲート440は、n-1個のLSB435の入力を反転すべきかどうか判定する。
図4での例では、MSB450がゼロに等しいので、n-1個のLSB435のそれぞれが反転されて、符号付き整数の大きさのn-1個のMSBを形成する。すなわち、nビットのシーケンスによって表される符号なし整数の値が、実現可能な最大値の半分未満なので、この反転が生じる。
【0059】
図4にはまた、符号付き整数の大きさのLSB445が1に設定されることが示してある。nビットのシーケンスの値に関係なく、これが当てはまる。
【0060】
符号付き整数を生成するための回路が、nビットの異なるシーケンスにどのように適用されるのかを示す
図5を参照する。
【0061】
図に示した例では、nビットのシーケンス505は、ビット・シーケンス1100を含む。この図には、510において、これは値12の符号なし整数を表すことが示してある。浮動小数点数の符号付き整数515の大きさも4ビットを含む。符号付き整数は、さらに符号ビット520を含む。
【0062】
符号ビット520の値を決定するために、nビットのシーケンスのMSBが、NOTゲート525への入力として使用される。この例では、符号なし整数が、4ビットで表現可能な最大値(15)の半分(7.5)未満の値(12)を有するので、符号ビット520は、0(正数を表す)に等しく設定される。
【0063】
図5にはまた、回路構成がどのように使用されて、符号付き整数の大きさのn-1個のMSB530を構成するのかが示してある。前述の通り、XNORゲート540のそれぞれは、nビットのシーケンスのMSB550を入力とする。
図4での例では、MSB550が1に等しいので、符号付き整数の大きさのn-1個のMSB530のそれぞれが、n個のビットのシーケンスのn-1個のLSB535での対応するビットに等しく設定される。すなわち、nビットのシーケンスによって表される符号なし整数の値が、実現可能な最大値の半分よりも大きいので、いかなる反転も生じない。
【0064】
やはり、
図5にはまた、符号付き整数の大きさのLSB545が1に設定されることが示してある。nビットのシーケンスの値に関係なく、これが当てはまる。
【0065】
したがって、説明されているように各ビットを操作して、適切な符号付き整数を生成することによって、ハードウェア・モジュールは、ゼロを中心とする分布を生成することができる。
【0066】
次いで、符号付き整数は、浮動小数点数に変換するのに適しており、ゼロを中心とする浮動小数点数の分布を形成する。ハードウェア・モジュールは、符号付き整数を浮動小数点数に変換するための浮動小数点処理ユニットを備える。
【0067】
符号なし整数を浮動小数点数に変換するように、ハードウェア・モジュールが実行する総合プロセスを示す
図8を参照する。
【0068】
初めに、ランダムに生成されたビット・シーケンス810が、PRNGによってハードウェア・モジュールに提供される。ビット・シーケンス810は、
図5及び
図6について前述した各技法によって、符号付き整数を表すビット・シーケンス820に変換される。
【0069】
符号付き整数820の符号ビットをゼロに設定して、ビット・シーケンス830を生成する。次いで、ハードウェア・モジュールは、先頭のゼロの数を数え、この先頭のゼロのすべてが破棄され、MSBが1に等しくなるまで、ビット・シーケンス830に左シフトを実行するように構成される。これによって、ビット・シーケンス840を生成する。
【0070】
浮動小数点数の仮数は、通常、入力される整数と比較してビット数が少ない。たとえば、32ビットの整数を単精度の浮動小数点に変換するとき、仮数は24ビットを有する。したがって、32ビットの整数から8ビットが切り捨てられて、24ビットの仮数を形成することになる。
【0071】
ビット・シーケンス830から削除された各ビットを使用して、仮数840のLSBを丸める。これを実現するために、任意の適切な丸め方式を適用してもよい。たとえば、最近接偶数への丸め(RTNE)方式という丸め方式が適用されもよい。この方式を用いる場合、取り除かれるビットがLSBの最大値の半分よりも大きい場合は、仮数のLSBが切り上げられ、取り除かれるビットがLSBの最大値の半分未満である場合には切り捨てられる。取り除かれるビットが、LSBの最大値の半分に等しい場合、このLSBは最近接の偶数に丸められ、すなわち、LSBが1に等しい場合は切り上げられ、0に等しい場合には切り下げられる。
【0072】
浮動小数点数860の指数及び符号ビットも、ハードウェア・モジュールによって計算される。指数は、ビット・シーケンス830の先頭のゼロの数(したがって、実行された左シフトの量)に基づいて決定される。この指数はまた、仮数850の丸めプロセスの結果として生じることのある、任意の丸め桁上げに基づいて決定されてもよい。このような丸め桁上げは、丸め前の仮数がすべて1で構成される場合に生じることになり、したがって、この丸めは、仮数に沿って仮数のMSBにまで伝搬される。
【0073】
指数は、以下の式を使用して計算される。
指数=expBias+expMax-leadingZeroCount+roundingCarry
expBiasは、指数バイアスに等しく(すなわち、単精度形式では127であり、半精度形式では15である)。expMaxは、ビット・シーケンス810の長さに基づいて取得できる実現可能な最大指数をもたらすためのオフセットである。ビット・シーケンス810が32ビットから構成される場合、expMaxは31に等しく、leadingZeroCountは、ビット・シーケンス830の先頭のゼロの数であり、roundingCarryは、仮数850がすべて1から構成される場合に生じることのある丸め桁上げである。
【0074】
他の例では、指数を-1に等しく設定して、範囲が1に等しい一様分布を得る。指数を-1に等しく設定する場合、これにより、分布の範囲は-0.5~0.5になるはずである。
図6には、このような分布が示してある。
【0075】
浮動小数点数860の符号ビットは、符号付き整数の符号ビットに等しく設定される。
【0076】
したがって、本出願の各実施形態は、ゼロを中心とする分布での符号付き整数を生成するための装置及び方法を提供する。符号付き整数は、浮動小数点数に変換するのに適しており、ゼロを中心とする浮動小数点数の分布を得る。
【国際調査報告】