(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-23
(54)【発明の名称】機械学習のための浮動小数点対数数値表現システムのスケーリングシステム
(51)【国際特許分類】
G06N 3/063 20230101AFI20241016BHJP
【FI】
G06N3/063
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024546045
(86)(22)【出願日】2022-10-11
(85)【翻訳文提出日】2024-05-09
(86)【国際出願番号】 US2022077931
(87)【国際公開番号】W WO2023060287
(87)【国際公開日】2023-04-13
(32)【優先日】2021-10-08
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
(71)【出願人】
【識別番号】524134797
【氏名又は名称】カシア・エイアイ・インコーポレーテッド
(74)【代理人】
【識別番号】100098394
【氏名又は名称】山川 茂樹
(72)【発明者】
【氏名】タンドン,ジェームズ
(57)【要約】
集積回路は、ハードウェアの不正確浮動小数点対数数値表現システム(floating‐point logarithmic number system:FPLNS)乗算器を含む。上記集積回路は、それぞれFPLNSデータフォーマットである、第1の浮動小数点バイナリ値及びその第1の対数バイナリ値、並びに第2の浮動小数点バイナリ値及びその第2の対数バイナリを内包した、レジスタにアクセスする。上記FPLNS乗算器は、上記第1の対数バイナリ値を上記第2の対数バイナリ値に加算して、第1の対数和を形成し、上記第1の浮動小数点バイナリ値の仮数のビット数だけバイアス定数をシフトして、第1のシフト済みバイアス値を形成し、上記第1のシフト済みバイアス値から補正係数を減算して、第1の補正済みバイアス値を形成し、上記第1の対数和から上記第1の補正済みバイアス値を減算して、第1の結果を形成する上記第1の浮動小数点バイナリ値と上記第2の浮動小数点バイナリ値とを乗算するように構成される。
【選択図】
図4
【特許請求の範囲】
【請求項1】
FPLNS関数を実行するように構成されたハードウェアの不正確浮動小数点対数数値表現システム(floating‐point logarithmic number system:FPLNS)乗算器を含む集積回路を備える、システムであって、
前記集積回路は:
第1の浮動小数点バイナリ値と、前記第1の浮動小数点バイナリ値の第1の対数バイナリ値とを内包したレジスタにアクセスするように構成され、前記第1の浮動小数点バイナリ値及び前記第1の対数バイナリ値はそれぞれFPLNSデータフォーマットであり、前記FPLNSフォーマットの前記第1の浮動小数点バイナリ値は符号ビットと前記符号ビットに続く指数ビットとを含み、前記指数ビットの後には仮数ビットが続き;
第2の浮動小数点バイナリ値と、前記第2の浮動小数点バイナリ値の第2の対数バイナリ値とを内包したレジスタにアクセスするように構成され、前記第2の浮動小数点バイナリ値及び前記第2の対数バイナリ値はそれぞれFPLNSデータフォーマットであり、前記第2の浮動小数点バイナリ値は前記FPLNSフォーマットであり;
前記FPLNS乗算器によって前記第1の浮動小数点バイナリ値と前記第2の浮動小数点バイナリ値とを乗算するように構成され、前記FPLNS乗算器は:
前記FPLNS乗算器によって前記第1の対数バイナリ値を前記第2の対数バイナリ値に加算して、第1の対数和を形成し、
前記第1の浮動小数点バイナリ値の仮数のビット数だけバイアス定数をシフトして、第1のシフト済みバイアス値を形成し、
前記第1のシフト済みバイアス値から補正係数を減算して、第1の補正済みバイアス値を形成し、
前記第1の対数和から前記第1の補正済みバイアス値を減算して、第1の結果を形成する
ように、構成され;
前記集積回路は更に、前記第1の結果の真数を取り、前記第1の浮動小数点バイナリ値と前記第2の浮動小数点バイナリ値との乗算の乗算結果を生成するように構成される、システム。
【請求項2】
前記システムはプロセッサを含み、前記プロセッサは:
前記第1の浮動小数点バイナリ値を前記第1の対数バイナリ値に変換するように構成され、ここで前記第1の浮動小数点バイナリ値は前記FPLNSフォーマットであり、前記第1の浮動小数点バイナリ値を前記第1の対数バイナリ値に変換するよう構成された前記プロセッサは:
1と前記第1の浮動小数点バイナリ値の仮数とを足した量の、2を底とする対数を決定して、第1の対数量を決定し、
前記第1の対数量を前記第1の浮動小数点バイナリ値の前記指数に加算して、第1の合計を形成し、
前記第1の合計から前記バイアス定数を減算して、前記第1の対数バイナリ値を形成する
ように構成された、前記プロセッサを含み;
前記第2の浮動小数点バイナリ値を前記第2の対数バイナリ値に変換するように構成され、前記第1の浮動小数点バイナリ値は前記FPLNSフォーマットであり、前記第2の浮動小数点バイナリ値を前記第2の対数バイナリ値に変換するよう構成された前記プロセッサは:
1と前記第2の浮動小数点バイナリ値の仮数とを足した量の、2を底とする対数を決定して、第2の対数量を決定し、
前記第2の対数量を前記第2の浮動小数点バイナリ値の前記指数に加算して、第2の合計を形成し、
前記第2の合計から前記バイアス定数を減算して前記第1の対数バイナリ値を形成する
ように構成された、前記プロセッサを含む、請求項1に記載のシステム。
【請求項3】
前記乗算結果は前記FPLNSフォーマットである、請求項1に記載のシステム。
【請求項4】
前記バイアス定数は2
(E-1)-1であり、ここでEは、前記FPLNSフォーマットの前記第1の浮動小数点バイナリ値の前記指数のビット数である、請求項1に記載のシステム。
【請求項5】
前記FPLNS乗算器は、前記第1の浮動小数点バイナリ値、前記第1の対数バイナリ値、前記第2の浮動小数点バイナリ値、及び前記第2の対数バイナリ値を内包しない1つ以上のレジスタから、前記補正係数を取得する、請求項1に記載のシステム。
【請求項6】
前記補正係数は0.04~0.06の範囲内である、請求項1に記載のシステム。
【請求項7】
前記FPLNSフォーマットの前記第1の浮動小数点バイナリ値の前記指数ビットは、前記指数ビットのうち最高位の指数ビットが前記符号ビットに最も近く、最下位の指数ビットが前記仮数ビットに最も近くなるように位置決めされ、前記FPLNSフォーマットの前記第1の浮動小数点バイナリ値の前記仮数ビットは、前記仮数ビットのうち最高位の仮数ビットが前記指数ビットに最も近く、最下位の仮数ビットが前記指数ビットから最も遠くなるように位置決めされる、請求項1に記載のシステム。
【請求項8】
前記FPLNSフォーマットの前記第1の対数バイナリ値の前記指数ビットは、前記指数ビットのうち最高位の指数ビットが前記符号ビットに最も近く、最下位の指数ビットが前記仮数ビットに最も近くなるように位置決めされ、前記FPLNSフォーマットの前記第1の対数バイナリ値の前記仮数ビットは、前記仮数ビットのうち最高位の仮数ビットが前記指数ビットに最も近く、最下位の仮数ビットが前記指数ビットから最も遠くなるように位置決めされる、請求項7に記載のシステム。
【請求項9】
前記FPLNS乗算器は更に、第3の浮動小数点バイナリ値及び第4の浮動小数点バイナリ値を除算するように構成され、前記第3の浮動小数点バイナリ値及び前記第4の浮動小数点バイナリ値は、前記FPLNSデータフォーマットであり、前記FPLNS乗算器は、前記第3の浮動小数点バイナリ値及び前記第4の浮動小数点バイナリ値を:
前記FPLNS乗算器によって、前記第3の浮動小数点バイナリ値の第3の対数バイナリ値を、前記第4の浮動小数点バイナリ値の前記第4の対数バイナリ値から減算して、第1の対数差を形成し、
前記バイアス定数を、前記第3の浮動小数点バイナリ値の仮数のビット数だけシフトさせて、第2のシフト済みバイアス値を形成し、
前記補正係数を前記第2のシフト済みバイアス値から減算して、第2の補正済みバイアス値を形成し、
前記第2の補正済みバイアス値を前記第1の対数和に加算して、第2の結果を形成する
ことによって、除算するように構成され;
前記集積回路は更に、前記第2の結果の真数を取得して、前記第3の浮動小数点バイナリ値及び前記第4の浮動小数点バイナリ値の除算の除算結果を生成するように構成される、請求項1に記載のシステム。
【請求項10】
集積回路によってレジスタにアクセスするステップであって、前記レジスタは、第1の浮動小数点バイナリ値と、前記第1の浮動小数点バイナリ値の第1の対数バイナリ値とを内包し、ここで前記第1の浮動小数点バイナリ値及び前記第1の対数バイナリ値はそれぞれFPLNSデータフォーマットであり、前記FPLNSフォーマットの前記第1の浮動小数点バイナリ値は符号ビットと前記符号ビットに続く指数ビットを含み、前記指数ビットの後には仮数ビットが続き、前記集積回路は、FPLNS関数を実行するように構成されたハードウェアの不正確浮動小数点対数数値表現システム(FPLNS)乗算器を含む、ステップ;
前記集積回路によって、第2の浮動小数点バイナリ値と、前記第2の浮動小数点バイナリ値の第2の対数バイナリ値とを内包したレジスタにアクセスするステップであって、ここで前記第2の浮動小数点バイナリ値及び前記第2の対数バイナリ値はそれぞれFPLNSデータフォーマットであり、前記第2の浮動小数点バイナリ値は前記FPLNSフォーマットである、ステップ;
前記FPLNS乗算器によって前記第1の浮動小数点バイナリ値と前記第2の浮動小数点バイナリ値とを乗算するステップであって、前記乗算は:
前記FPLNS乗算器によって前記第1の対数バイナリ値を前記第2の対数バイナリ値に加算して、第1の対数和を形成するステップ、
前記第1の浮動小数点バイナリ値の仮数のビット数だけバイアス定数をシフトして、第1のシフト済みバイアス値を形成するステップ、
前記第1のシフト済みバイアス値から補正係数を減算して、第1の補正済みバイアス値を形成するステップ、及び
前記第1の対数和から前記第1の補正済みバイアス値を減算して、第1の結果を形成するステップ
を含む、ステップ;並びに
前記第1の結果の真数を取り、前記第1の浮動小数点バイナリ値と前記第2の浮動小数点バイナリ値との乗算の乗算結果を生成するステップ
を含む、方法。
【請求項11】
前記第1の浮動小数点バイナリ値を前記第1の対数バイナリ値に変換するステップであって、ここで前記第1の浮動小数点バイナリ値は前記FPLNSフォーマットであり、前記第1の浮動小数点バイナリ値を前記第1の対数バイナリ値に変換する前記ステップは:
1と前記第1の浮動小数点バイナリ値の仮数とを足した量の、2を底とする対数を決定して、第1の対数量を決定するステップ、
前記第1の対数量を前記第1の浮動小数点バイナリ値の前記指数に加算して、第1の合計を形成するステップ、及び
前記第1の合計から前記バイアス定数を減算して、前記第1の対数バイナリ値を形成するステップ
を含む、ステップ、並びに
前記第2の浮動小数点バイナリ値を前記第2の対数バイナリ値に変換するステップであって、前記第1の浮動小数点バイナリ値は前記FPLNSフォーマットであり、前記第2の浮動小数点バイナリ値を前記第2の対数バイナリ値に変換する前記ステップは:
1と前記第2の浮動小数点バイナリ値の仮数とを足した量の、2を底とする対数を決定して、第2の対数量を決定するステップ、
前記第2の対数量を前記第2の浮動小数点バイナリ値の前記指数に加算して、第2の合計を形成するステップ、及び
前記第2の合計から前記バイアス定数を減算して前記第1の対数バイナリ値を形成するステップ
を含む、ステップ
を更に含む、請求項10に記載の方法。
【請求項12】
前記乗算結果は前記FPLNSフォーマットである、請求項10に記載の方法。
【請求項13】
前記バイアス定数は2
(E-1)-1であり、ここでEは、前記FPLNSフォーマットの前記第1の浮動小数点バイナリ値の前記指数のビット数である、請求項10に記載の方法。
【請求項14】
前記FPLNS乗算器は、前記第1の浮動小数点バイナリ値、前記第1の対数バイナリ値、前記第2の浮動小数点バイナリ値、及び前記第2の対数バイナリ値を内包しない1つ以上のレジスタから、前記補正係数を取得する、請求項10に記載の方法。
【請求項15】
前記補正係数は0.04~0.06の範囲内である、請求項10に記載の方法。
【請求項16】
前記FPLNSフォーマットの前記第1の浮動小数点バイナリ値の前記指数ビットは、前記指数ビットのうち最高位の指数ビットが前記符号ビットに最も近く、最下位の指数ビットが前記仮数ビットに最も近くなるように位置決めされ、前記FPLNSフォーマットの前記第1の浮動小数点バイナリ値の前記仮数ビットは、前記仮数ビットのうち最高位の仮数ビットが前記指数ビットに最も近く、最下位の仮数ビットが前記指数ビットから最も遠くなるように位置決めされる、請求項10に記載の方法。
【請求項17】
前記FPLNSフォーマットの前記第1の対数バイナリ値の前記指数ビットは、前記指数ビットのうち最高位の指数ビットが前記符号ビットに最も近く、最下位の指数ビットが前記仮数ビットに最も近くなるように位置決めされ、前記FPLNSフォーマットの前記第1の対数バイナリ値の前記仮数ビットは、前記仮数ビットのうち最高位の仮数ビットが前記指数ビットに最も近く、最下位の仮数ビットが前記指数ビットから最も遠くなるように位置決めされる、請求項16に記載の方法。
【請求項18】
前記FPLNS乗算器は更に、第3の浮動小数点バイナリ値及び第4の浮動小数点バイナリ値を除算するように構成され、前記第3の浮動小数点バイナリ値及び前記第4の浮動小数点バイナリ値は、前記FPLNSデータフォーマットであり、前記FPLNS乗算器は、前記第3の浮動小数点バイナリ値及び前記第4の浮動小数点バイナリ値を:
前記FPLNS乗算器によって、前記第3の浮動小数点バイナリ値の第3の対数バイナリ値を、前記第4の浮動小数点バイナリ値の前記第4の対数バイナリ値から減算して、第1の対数差を形成し、
前記バイアス定数を、前記第3の浮動小数点バイナリ値の仮数のビット数だけシフトさせて、第2のシフト済みバイアス値を形成し、
前記補正係数を前記第2のシフト済みバイアス値から減算して、第2の補正済みバイアス値を形成し、
前記第2の補正済みバイアス値を前記第1の対数和に加算して、第2の結果を形成し;
前記第2の結果の真数を取得して、前記第3の浮動小数点バイナリ値及び前記第4の浮動小数点バイナリ値の除算の除算結果を生成する
ことによって、除算するように構成される、請求項10に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書に記載の実施形態は全体として加速処理に関し、より詳細には、効率的な計算のためにバイアス対数数値表現システムを用いた浮動小数点数値表現フォーマット(FPLNS)の実装に関する。
【背景技術】
【0002】
現行の機械学習(machine learning:ML)アクセラレータチップは、積和(multiply‐accumulate:MAC)演算を毎秒数兆回実行し、また活性化関数を毎秒数十億回実行する。このような速度を達成するためには、個々のチップが数百ワットの電力を消費する場合がある。機械学習モデルが複雑になるに従って、機械学習モデルが消費する電力も多くなっている。しかしながら、MLアクセラレータをエッジに移す取り組みが行われており、従って電力消費が制限要因となっている。
【0003】
2019年まで、大手企業は自社内のプロセスを最適化する機械学習ソリューションを開発して、1か月あたりのコストを削減していた。それ以来、配信のために機械学習を使用する製品を開発する企業が増えている。深層学習アルゴリズムを活用するために、これらのカスタム製品には、独自の組込み機械学習アクセラレータが必要である。現在このようなアクセラレータとしては、NVidia及びAMD製のGPU、並びにXilinx及びIntel製のフィールドプログラマブルゲートアレイ(field programmable gate array:FPGA)が挙げられる。Google、NVidia、ARM等による新たなMLプロセッサも開発されている。
【発明の概要】
【発明が解決しようとする課題】
【0004】
これらのMLアクセラレータデバイスは、高い性能を実現できるものの、驚くべき電力量を消費するため、扱いにくいものとなっている。適例として、3000mA‐hrバッテリを備えた携帯電話で4W TPUをフルスピードで動作させると、バッテリは1時間未満で枯渇する。消費電力は性能の低下と引き換えに低減できることが知られているが、より高い計算要求を伴う機械学習アプリケーションは徐々にエッジへと追いやられている。
【課題を解決するための手段】
【0005】
例示的なシステムは、FPLNS関数を実行するように構成されたハードウェアの不正確浮動小数点対数数値表現システム(floating‐point logarithmic number system:FPLNS)乗算器を含む、集積回路を備える。上記集積回路は:第1の浮動小数点バイナリ値と、上記第1の浮動小数点バイナリ値の第1の対数バイナリ値とを内包したレジスタにアクセスするように構成されていてよく、ここで上記第1の浮動小数点バイナリ値及び上記第1の対数バイナリ値はそれぞれFPLNSデータフォーマットであり、上記FPLNSフォーマットの上記第1の浮動小数点バイナリ値は符号ビットとそれに続く指数ビットとを含み、上記指数ビットの後には仮数ビットが続き;第2の浮動小数点バイナリ値と、上記第2の浮動小数点バイナリ値の第2の対数バイナリ値とを内包したレジスタにアクセスするように構成されていてよく、ここで上記第2の浮動小数点バイナリ値及び上記第2の対数バイナリ値はそれぞれFPLNSデータフォーマットであり、上記第2の浮動小数点バイナリ値は上記FPLNSフォーマットであり;上記FPLNS乗算器によって上記第1の浮動小数点バイナリ値と上記第2の浮動小数点バイナリ値とを乗算するように構成されていてよく、上記FPLNS乗算器は:上記FPLNS乗算器によって上記第1の対数バイナリ値を上記第2の対数バイナリ値に加算して、第1の対数和を形成し;上記第1の浮動小数点バイナリ値の仮数のビット数だけバイアス定数をシフトして、第1のシフト済みバイアス値を形成し;上記第1のシフト済みバイアス値から補正係数を減算して、第1の補正済みバイアス値を形成し;上記第1の対数和から上記第1の補正済みバイアス値を減算して、第1の結果を形成するように、構成される。上記集積回路は更に、上記第1の結果の真数を取り、上記第1の浮動小数点バイナリ値と上記第2の浮動小数点バイナリ値との乗算の乗算結果を生成するように構成される。
【0006】
いくつかの実施形態では、上記システムはプロセッサを含み、上記プロセッサは:上記第1の浮動小数点バイナリ値を上記第1の対数バイナリ値に変換するように構成され、ここで上記第1の浮動小数点バイナリ値は上記FPLNSフォーマットであり、上記第1の浮動小数点バイナリ値を上記第1の対数バイナリ値に変換するよう構成された上記プロセッサは、1と上記第1の浮動小数点バイナリ値の仮数とを足した量の、2を底とする対数を決定して、第1の対数量を決定し、上記第1の対数量を上記第1の浮動小数点バイナリ値の上記指数に加算して第1の合計を形成し、上記第1の合計から上記バイアス定数を減算して上記第1の対数バイナリ値を形成するように構成された、上記プロセッサを含み;また、上記第2の浮動小数点バイナリ値を上記第2の対数バイナリ値に変換するように構成され、ここで上記第1の浮動小数点バイナリ値は上記FPLNSフォーマットであり、上記第2の浮動小数点バイナリ値を上記第2の対数バイナリ値に変換するよう構成された上記プロセッサは、1と上記第2の浮動小数点バイナリ値の仮数とを足した量の、2を底とする対数を決定して、第2の対数量を決定し、上記第2の対数量を上記第2の浮動小数点バイナリ値の上記指数に加算して第2の合計を形成し、上記第2の合計から上記バイアス定数を減算して上記第1の対数バイナリ値を形成するように構成された、上記プロセッサを含む。
【0007】
様々な実施形態において、上記乗算結果は上記FPLNSフォーマットである。上記バイアス定数は2(E-1)-1であってよく、ここでEは、上記FPLNSフォーマットの上記第1の浮動小数点バイナリ値の上記指数のビット数である。いくつかの実施形態では、上記FPLNS乗算器は、上記第1の浮動小数点バイナリ値、上記第1の対数バイナリ値、上記第2の浮動小数点バイナリ値、及び上記第2の対数バイナリ値を内包しない1つ以上のレジスタから、上記補正係数を取得する。上記補正係数は0.04~0.06の範囲内であってよい。
【0008】
いくつかの実施形態では、上記FPLNSフォーマットの上記第1の浮動小数点バイナリ値の上記指数ビットは、上記指数ビットのうち最高位の指数ビットが上記符号ビットに最も近く、最下位の指数ビットが上記仮数ビットに最も近くなるように位置決めされ、上記FPLNSフォーマットの上記第1の浮動小数点バイナリ値の上記仮数ビットは、上記仮数ビットのうち最高位の仮数ビットが上記指数ビットに最も近く、最下位の仮数ビットが上記指数ビットから最も遠くなるように位置決めされる。同様に、様々な実施形態において、上記FPLNSフォーマットの上記第1の対数バイナリ値の上記指数ビットは、上記指数ビットのうち最高位の指数ビットが上記符号ビットに最も近く、最下位の指数ビットが上記仮数ビットに最も近くなるように位置決めされ、上記FPLNSフォーマットの上記第1の対数バイナリ値の上記仮数ビットは、上記仮数ビットのうち最高位の仮数ビットが上記指数ビットに最も近く、最下位の仮数ビットが上記指数ビットから最も遠くなるように位置決めされる。
【0009】
様々な実施形態において、上記FPLNS乗算器は更に、第3の浮動小数点バイナリ値及び第4の浮動小数点バイナリ値を除算するように構成され、上記第3の浮動小数点バイナリ値及び上記第4の浮動小数点バイナリ値は、上記FPLNSデータフォーマットであり、上記FPLNS乗算器は、上記第3の浮動小数点バイナリ値及び上記第4の浮動小数点バイナリ値を:
上記FPLNS乗算器によって、上記第3の浮動小数点バイナリ値の第3の対数バイナリ値を、上記第4の浮動小数点バイナリ値の上記第4の対数バイナリ値から減算して、第1の対数差を形成し、上記バイアス定数を、上記第3の浮動小数点バイナリ値の仮数のビット数だけシフトさせて、第2のシフト済みバイアス値を形成し、上記補正係数を上記第2のシフト済みバイアス値から減算して、第2の補正済みバイアス値を形成し、上記第2の補正済みバイアス値を上記第1の対数和に加算して、第2の結果を形成することによって、除算するように構成され、上記集積回路は更に、上記第2の結果の真数を取って、上記第3の浮動小数点バイナリ値及び上記第4の浮動小数点バイナリ値の除算の除算結果を生成するように構成される。
【0010】
ある例示的な方法は:集積回路によってレジスタにアクセスするステップであって、上記レジスタは、第1の浮動小数点バイナリ値と、上記第1の浮動小数点バイナリ値の第1の対数バイナリ値とを内包し、ここで上記第1の浮動小数点バイナリ値及び上記第1の対数バイナリ値はそれぞれFPLNSデータフォーマットであり、上記FPLNSフォーマットの上記第1の浮動小数点バイナリ値は符号ビットとそれに続く指数ビットを含み、上記指数ビットの後には仮数ビットが続き、上記集積回路は、FPLNS関数を実行するように構成されたハードウェアの不正確浮動小数点対数数値表現システム(FPLNS)乗算器を含む、ステップ;上記集積回路によって、第2の浮動小数点バイナリ値と、上記第2の浮動小数点バイナリ値の第2の対数バイナリ値とを内包したレジスタにアクセスするステップであって、ここで上記第2の浮動小数点バイナリ値及び上記第2の対数バイナリ値はそれぞれFPLNSデータフォーマットであり、上記第2の浮動小数点バイナリ値は上記FPLNSフォーマットである、ステップ;上記FPLNS乗算器によって上記第1の浮動小数点バイナリ値と上記第2の浮動小数点バイナリ値とを乗算するステップを含み、上記乗算するステップは:上記FPLNS乗算器によって上記第1の対数バイナリ値を上記第2の対数バイナリ値に加算して、第1の対数和を形成するステップ;上記第1の浮動小数点バイナリ値の仮数のビット数だけバイアス定数をシフトして、第1のシフト済みバイアス値を形成するステップ;上記第1のシフト済みバイアス値から補正係数を減算して、第1の補正済みバイアス値を形成するステップ;及び上記第1の対数和から上記第1の補正済みバイアス値を減算して、第1の結果を形成するステップを含み、上記方法は更に、上記第1の結果の真数を取り、上記第1の浮動小数点バイナリ値と上記第2の浮動小数点バイナリ値との乗算の乗算結果を生成する。
【図面の簡単な説明】
【0011】
【
図1】
図1は、FPLNS乗算器を含む例示的な半導体チップ104を示す。
【
図2】
図2は、いくつかの実施形態におけるFPLNSシステムを示す。
【
図3】
図3は、浮動小数点値に関するFPLNSフォーマットの例を示す。
【
図4】
図4は、対数値に関するFPLNSフォーマットの例を示す。
【
図5A】
図5Aは、ある例における、C=0の場合のlog
2(1+x)及びX+Cのプロットである。
【
図5B】
図5Bは、ある例における、C=0.0473の場合のlog
2(1+x)及びX+Cのプロットである。
【
図6】
図6は、固定小数点の2を底とする対数に関する、矢印の位置で基数点が定義されたFPLNSフォーマットの例である。
【
図7A】
図7Aは、補正係数MUが定数である場合の、FPLNSプロセスを用いた2つの対数バイナリ値の乗算のフローチャートを示す。
【
図7B】
図7Bは、補正係数MUが変数である場合の、FPLNSプロセスを用いた2つの対数バイナリ値の乗算のフローチャートを示す。
【
図8A】
図8Aは、補正係数MUが定数である場合の、FPLNSプロセスを用いた2つの対数バイナリ値の除算のフローチャートを示す。
【
図8B】
図8Bは、補正係数MUが変数である場合の、FPLNSプロセスを用いた2つの対数バイナリ値の除算のフローチャートを示す。
【
図9A】
図9Aは、いくつかの実施形態における、Cを底とするFPLNS対数の例示的なプロセスを示す。
【
図9B】
図9Bは、いくつかの実施形態における、Cを底とするFPLNS対数の別の例示的なプロセスを示す。
【
図10】
図10は、いくつかの実施形態におけるべき乗プロセス1000を示す。
【
図11】
図11は、いくつかの実施形態における、fplns関数を利用した分類の例示的なプロセス1100を示す。
【
図12】
図12は、本明細書に記載のタスクを実行するための命令を実行できるデジタルデバイスを示すブロック図である。
【発明を実施するための形態】
【0012】
様々な実施形態において、ML計算のための近似計算算術関数のライブラリは、モデル(例えばResNet及びMobileNetV1)全体にわたって1%未満の精度損失で、回路の複雑度を大幅に軽減する。いくつかの実施形態は、45nmにおいて:90%小さな回路サイズ、68%少ない電力、及び55%低いレイテンシーを可能にする。
【0013】
本明細書に記載の近似計算算術アルゴリズムは、例えば乗算、除算、べき乗、対数を実行できる。これらの演算は多くの活性化関数の基礎となり得る。これらの近似計算技法は、プルーニング及び重み圧縮といった、現在導入されている他の多くの一般的に使用されている近似技法と、相乗効果を発揮することもできる。
【0014】
本明細書に記載の様々な実施形態は、浮動小数点数値表現フォーマットとバイアス対数数値表現システムとを組み合わせた数値表現フォーマット(FPLNS数値表現システム)を利用する。これにより、元の数とその対数との両方を同じビットの組で格納できる。特別なバイアス係数によって平均誤差を最小限に抑えることができ、これによりモデルの精度を最大化できる。ある例では、これによって、従来のように訓練されたモデルを、又はサードパーティによって提供されたモデルさえ、1%未満のモデル精度損失で、FPLNS計算推論エンジンと共に使用できるようになる。一方、従来のLNSモデルでは、推論中のモデル精度損失は5%以上となる可能性もある。
【0015】
様々な実施形態において、加算/減算の計算における浮動小数点の精度は、従来技術に比べて改善又は最適化される。更に、過去の実装例(例えば相対誤差の大きさが最悪の場合8%となる)に比べて、近似FPLNS乗算/除算計算の精度が改善される。更に、本明細書に記載のシステム及び方法は、ビット置換、及びsoftmax等の高次活性化関数を可能にする固定小数点加算のみを用いて、不正確対数及びべき乗関数をハードウェアで実行できる。
【0016】
本明細書に記載のFPLNSシステムを用いれば、ルックアップテーブル又は区分線形テーブルが不要となることが理解されるだろう。
【0017】
本発明者らがターゲットとする顧客は、エッジ製品での実装のためのMLアクセラレータの知的財産(intellectual property:IP)を開発又は展開するシステム・オン・チップ(system‐on‐chip:SoC)の設計者及びフィールドプログラマブルゲートアレイ(FPGA)のインテグレータである。IPコアは多くの場合、高速計算のために数百から数千個のMACコアを含む。
【0018】
また、softmax活性化関数の高速計算も必要とされている。数千のファブレス半導体SoC企業と、インテグレーションのためにFPGAを使用する更に数万の企業とにより、MLアクセラレータは、MLの加速のみに焦点を当てるために繰り返し再実装されてきた。今後数年間で業界が統合されれば、最もパワー及び効率が高いMLアクセラレータ企業のみがエッジデバイスで成功することになる。
【0019】
過去の研究により、いくつかの機械学習アルゴリズムが、低い精度を用いた浮動小数点フォーマットに耐えられることが示されている。あらゆる機械学習モデルの中核が多数の積和演算に依存しているため、電力を最適化できる可能性がある。
【0020】
様々な実施形態が、フィールドプログラマブルゲートアレイ(FPGA)又は特定用途向け集積回路(application‐specific integrated circuit:ASIC)において、ハードウェアレベルで実装されている。いくつかの実施形態では、ソフトウェアで実装された場合にクロックサイクルが減少する。本明細書に記載の機能のうちのいくつかの実施形態は、FPGA及びASICハードウェアの製造者/開発者にライセンス供与されるIPコア(例えばVerilogコア)として実装できる。
【0021】
図1は、FPLNS乗算器を含む例示的な半導体チップ104を示す。本明細書に記載の様々な実施形態は、ハイブリッドな浮動小数点/対数数値表現システム(FPLNS)乗算器を用いることにより、乗算及びべき乗のハードウェア全体の複雑度を大幅に低減する。このようなデジタルの複雑度の低減は潜在的に、MLモデルの精度の損失を最小限に抑えて性能を向上させながらの、電力消費の大幅な削減につながる可能性がある。
【0022】
この例のチップ102及びチップ104はいずれも、45nmで配線された32ビット乗算器を含む。オリジナルの乗算器はチップ102にある。(例えば本明細書に記載の、
図3、4に示されているようなFPLNSデータ格納フォーマットを利用する)本明細書に記載の実装を伴うFPLNS乗算器は、チップ104上にある。FPLNS乗算器システムがハードウェアに実装されていることにより、チップ104はチップ102よりも大幅に小さい。
【0023】
図1の例では、チップ104はチップ102に比べて、45nmの32ビット浮動小数点乗算器に関してサイズが90%削減される。更に、
図1のチップ104はチップ102に比べて、45nmの32ビット浮動小数点乗算器に関して電力が68%削減される。更にチップ104はチップ102に比べて、45nmの32ビット浮動小数点乗算器に関してレイテンシーが55%低減される。更に
図1の例では、チップ104上のFPLNS乗算器により、チップ104はチップ102に比べて、電力に対する性能が6.85倍向上している。
図1の例のチップ104のFPLNSシステムを利用すれば、チップ104はチップ102と比較した場合に、面積あたりの性能が18.6倍となる。
【0024】
更に
図1の例では、45nmのノードの場合にこれらの乗算器を以下のように比較できる:
【0025】
【0026】
7nmのノードの場合、FPLNSチップ(例えばチップ104)はBF16標準乗算器に比べて大幅な改善を得ることもできる。これらの乗算器は以下のように比較できる:
【0027】
【0028】
いくつかの実施形態は、ハイブリッドな浮動小数点/対数数値表現システム(FPLNS)を用いることにより、乗算及びべき乗のハードウェア全体の複雑度を大幅に低減する。このようなデジタルの複雑度の低減は、モデルの精度の無視できる程度の損失で性能を向上させながらの、電力消費の大幅な削減につながる可能性がある。あらゆる機械学習モデルの中核が多数の積和演算に依存しているため、効率が改善される。更にチップ104は、MLモデルの精度への影響なしに(例えばResNetモデル及びMobileNetV1モデルの両方で証明される1%未満の精度損失で)、チップ102に比べて電力、性能、及び面積について利益をもたらす。
【0029】
過去の研究により、いくつかの機械学習アルゴリズムが、低い精度を用いた浮動小数点フォーマットに耐えられることが示されている。あらゆる機械学習モデルの中核が多数の積和演算に依存しているため、電力を最適化できる可能性がある。
【0030】
図2は、いくつかの実施形態における例示的なFPLNSシステム200を示す。FPLNSシステム200は、集積回路(例えばFPGA及び/又はASIC)内に統合されていても、ソフトウェア(例えばIPコア)であってもよい。FPLNSシステム200は、集積回路内に(例えばFPLNS乗算器として)実装されていても、IPコアとして実装されていてもよい。FPLNSシステム200は、これらの計算を実行する既存のシステムに比べて、電力消費を削減できる。ある例では、集積回路の電力消費は、毎秒4兆回の演算(Tera Operations Per Second:TOPS)を超える演算回数で3W未満とすることができる。いくつかの実施形態では、FPLNSスケーリングシステム200は、MLアクセラレータ及びコンパイラ(例えばOONXコンパイラ)であってよく、又はこれらを含んでよい。
【0031】
様々な実施形態において、上記FPLNSシステムは、論理の複雑度及び/又は回路のサイズの削減と引き換えに、乗算及びべき乗の精度を犠牲にする。論理の複雑度の低減は、高い性能での低い電力消費につながる。演算精度が犠牲になるものの、MLモデルの精度損失は1%未満とすることができる。面積、速度、及び電力という指標は、半導体分野におけるコストの重要な決定要因である。浮動小数点数の仮数のビット数が削減されることで乗算の複雑度が二次的に低下するため、精度がより低い浮動小数点フォーマットが使用される傾向がある。ある例では、本明細書に記載のFPLNSシステムは、乗算を、平均精度E+5ビットの線形複雑度にまで低減できる。
【0032】
図3は、浮動小数点値に関するFPLNSフォーマットの例である。同じフォーマットを、浮動小数点値及び対数値に利用してもよい。
図4は、固定小数点の2を底とする対数に関する、矢印の位置で基数点が定義されたFPLNSフォーマットの例である。
【0033】
図3、4では、「s」は符号ビットを表し、「e」は指数値を表し、「m」は仮数値を表す。FPLNSデータフォーマットは、実数と2を底とする対数とを同じビットに同時に保持する。
【0034】
図3では、このフォーマットの浮動小数点値は、(-1)^s*(1+m/(2^M))*2^(e-B)に等しく、従ってb=2^(E-1)-1である。符号ビット410は1ビットの符号なし整数である。eはEビットの符号なし整数であってよく、mはMビットの符号なし整数であってよい。
【0035】
この例では、このフォーマットはバイアス適用済み符号‐絶対値フォーマットを使用する。このフォーマットで表される固定小数点数について、符号ビット、整数部分(eビット、又は
図4の指数ビット420)、及び小数部分(mビット又は仮数ビット430)が存在する。これらは互いに重なり合っている。この例では、バイアスの適用(バイアスB)は2
(E-1)-1に等しい。
【0036】
図4は、対数値に関するFPLNSフォーマットの例である。本明細書に記載されているように、対数値及び浮動小数点値のフォーマットは同じフォーマットである。
図4では、このフォーマットの対数値はe-B+(m+MU)/(2^M)に対応する。基数点はLSB(e)とMSB(m)との間である。この例では、このフォーマットはバイアス適用済み符号‐絶対値フォーマットを使用する。このフォーマットで表される固定小数点数について、符号ビット、整数部分(eビット、又は
図4の指数ビット450)、及び小数部分(mビット又は仮数ビット460)が存在し、基数点がeビットとmビットとの間にある。これらは互いに重なり合っている。この例では、バイアスの適用(バイアスB)は2
(E-1)-1に等しい。Eに8ビットがある場合(E=8)、これはB=127であることを意味する。この例のMは、固定点フォーマットの小数部分である。これには係数Mu(即ち補正係数C)によってバイアスが適用される。この例の補正係数(Mu)は、(0.0~.99)の間であってよい。ある例では、Muは0.043等の値である。様々な実施形態において、0<=Mu<2^Mである(例えばMは仮数のビット数である)。Muは変数であっても定数であってもよい。
【0037】
FPLNSシステムはまた、データに対する演算のための算術関数の集合も指定した。
【0038】
様々な実施形態において、ハイブリッド浮動小数点/対数数値表現システム(FPLNS)は、元のkビットの浮動小数点数Nと、2を底とするその対数Lとの両方を、一切の余分な情報を用いずに、同じkビットのセットで表す。デジタル設計者がある演算においてLを使用したい場合、設計者はデータに依存しないビット置換演算と、定数バイアス係数Bの追加とを考慮できる。一般に使用される浮動小数点フォーマットは片対数フォーマットであるため、浮動小数点数は、ビット置換と、Lへの変換のための定数Bによる単一の固定小数点加算とを用いることによって、近似対数に変換できる。元の数Nの使用は、従来の浮動小数点(FP)演算を修正することなく使用することによって、達成される。
【0039】
数Nと2を底とするその対数Lとの両方のハイブリッド表現が確立されると、2つの固定小数点加算演算、及びビット置換:L1及びL2値の1回での加算、及びバイアスBの第2の加算を使用して、バイアスが適用された対数から乗算及び除算を直接実装できる。べき乗及び対数も、ビット置換演算によって直接計算できる。MLの超越関数は、ニュートン法又はテイラー級数を用いて実装できる。FPLNSを用いることにより、乗算及びべき乗関数の複雑度を1桁低減できる。この近似表現による精度の損失は、MLモデルの精度に最小限しか影響しないため、電力効率が大幅に向上する。
【0040】
対数数値表現システム(LNS)を用いた乗算及び除算の複雑度の低減を実証する、多数の公開済みの研究が存在する。LNSでの乗算は改良されているが、ほとんどの数値アルゴリズムでは、乗算と加算の両方を実行する必要がある。残念なことに、LNSにおける正確な加算は容易ではない。対数領域と線形領域との間の変換のため、又はより複雑な超越関数の計算のためには、区分線形近似、ルックアップテーブル、又は他のハイブリッドな方法が必要である。本明細書に記載の様々なシステムは、ルックアップテーブル又は区分線形近似を利用しないものとすることができる。
【0041】
本明細書に記載のハイブリッド浮動小数点/対数数値表現システム(FPLNS)の様々な実施形態は、元のkビットの浮動小数点数Nと、2を底とするその対数Lとの両方を、一切の余分な情報を用いずに、同じkビットのセットで表す。いくつかの実施形態におけるある例示的実装形態では、デジタル設計者がある演算においてLを使用したい場合、設計者はデータに依存しないビット置換演算と、定数バイアス係数Bの追加とを考慮できる。本記載は32ビットのIEEE754に基づくものであるが、この表現はいかなるビット長にも拡張できる。一般に使用される浮動小数点フォーマットは片対数フォーマットであるため、これは、ビット置換と、Lへの順変換のための定数Bによる単一の固定小数点加算とを用いることによって、近似対数に変換できる。元の数Nの使用は、従来の半精度又は全精度浮動小数点(FP)演算を修正することなく使用することによって、達成される。
【0042】
【0043】
IEEE754の32ビットフォーマットでは、Eは負ではない8ビットの整数であり、Bは定数127であり、Mは23ビットの仮数である。2を底とする対数を取ると、Lは以下のように表すことができる:
【0044】
【0045】
Mは0と1との間の値である。以下の近似:
【0046】
【0047】
のため、これに注意することが重要である。ここで係数Cは補正係数(本明細書ではMuとも呼ばれる)である。
【0048】
これは
図5A、5Bに、可能性のある2つのCの値に関してグラフで示されている。
図5A、5Bは、上述の例に関する、可能性のある2つのCの値を用いたグラフを示す。
【0049】
様々な実施形態において、誤差を最小限に抑える方法は:最大誤差を最小限に抑えるもの、又は平均誤差を最小限に抑えるものの2つが存在する。最大誤差を最小限に抑えると、Lに依存する計算に境界が設定されるが、可能性のある全ての小数値にわたる平均誤差を最小限に抑えると、より良好なMLモデル精度結果が提供される。その結果、Lは:
【0050】
【0051】
として表すことができる。
【0052】
対数値(符号は無視)の別の例は、
【0053】
【0054】
に対応し得る(E+M+1)ビットフォーマットで与えられる。E=ビット数であり、e=バイナリの値である。M=ビット数であり、m=バイナリの値である。Bはe部分に対するバイアスであり、Muは下部部分に対するバイアスである。E-B+(M+Mu)/(2^M)はMビットだけ右にシフトされている。Eビットは第1のレジスタ内にあり、Mビットは第2のレジスタ内にある。Mを2で除算すると、これはmビットだけ右にシフトされる。
【0055】
値E+Mは、Nの対数にバイアスを加えて補正係数を引いたものを表すことができる。これは上述の式:
【0056】
【0057】
に従っている。
【0058】
ここでもまた、補正係数「C」はMuである。この近似に基づき、LのFPLNSバイナリ表現を、
図6に示されているような、同じ32ビットを用いたIEEE754フォーマットの上に重ねられた固定小数点フォーマットとして定義できる。
図6は、固定小数点の2を底とする対数に関する、矢印の位置で基数点が定義されたFPLNSフォーマットの例である。バイアス/補正は暗黙の定数である。従って別の観点から見ると、浮動小数点フォーマットは対数に対する演算の方法を提供する。バイアス係数B及び補正係数C(いずれも定数)を考慮できることが理解されるだろう。
【0059】
以下のように、近似対数に関する乗算及び除算を定義できるようになる:
【0060】
【0061】
【0062】
このアルゴリズムは、ビット数に関して効果的な線形複雑度を有し得る。必然的に、除算アルゴリズムは以下の等式に関してと同一の方法で定義できる:
【0063】
【0064】
最近の多数の機械学習モデルにとって除算は必須ではないが、softmax及びReLUといった活性化関数を定義する際に有用となり得る。
【0065】
FPLNSアーキテクチャモデルは32ビット浮動小数点に限定されず、浮動小数点フォーマット及び整数フォーマットの両方において任意のレベルの精度へと一般化できる。ここではFP32浮動小数点に関してB、Cの値を指定しているが、FP16及びBF16に関して新たな値を導出することもできる。int‐float変換を使用すれば、INT8乗算のFPLNS計算が可能である。
【0066】
FPLNSシステム200は、入力モジュール202、加算モジュール204、乗算モジュール206、除算モジュール208、対数モジュール210、べき乗モジュール212、高次モジュール214、及びデータストア216を備える。FPLNSシステム200は、FPLNS乗算器(例えば
図1に示されているような、集積回路に統合されたハードウェアFPLNS乗算器)によって実装できる。いくつかの実施形態ではFPLNSシステム200は、プロセッサ及び/又は乗算器(例えばFPLNS乗算器)等を制御して、本明細書に記載のFPLNS関数のうちのいずれかを実行できる。いくつかの実施形態では、プロセッサは、FPLNS乗算器がFPLNS関数を実行している又はFPLNS関数の実行を支援している間に、レジスタにアクセスできる。
【0067】
図2に戻ると、FPLNSシステム200は入力モジュール202を含み、これは
図3、4に示されているFPLNSデータフォーマットを用いてデータを任意に編成又は格納できる。入力モジュール202は、(
図3に示されているように)指数ビット320のうち最高位の指数ビット322が符号ビット310に最も近く、最下位の指数ビット324が仮数ビット330に最も近くなるように、指数ビットをサイズ順にソートできる。同様に入力モジュール202は、仮数ビットのうち最高位の仮数ビット332が指数ビットに最も近く、最下位の仮数ビット334が上記指数ビットから最も遠くなるように、仮数ビット330をサイズ順にソートできる。
【0068】
同様に、
図4を参照すると、入力モジュール202は、(
図4に示されているように)指数ビット450のうち最高位の指数ビット452が符号ビット440に最も近く、最下位の指数ビット454が仮数ビットに最も近くなるように、指数ビットをサイズ順にソートできる。同様に入力モジュール202は、仮数ビットのうち最高位の仮数ビット462が上記指数ビットに最も近く、最下位の仮数ビット464が指数ビットから最も遠くなるように、仮数ビット460をサイズ順にソートできる。
【0069】
入力モジュールは、いかなる量のデータを受信してよく、及び/又はいかなる量のデータをFPLNSフォーマットに変換してよい。
【0070】
様々な実施形態において、入力モジュール202は任意に、(例えばFPLNSフォーマットの)浮動小数点バイナリ値を対数バイナリ値に変換できる。例えば入力モジュール202は:(1)1と第1の浮動小数点バイナリ値の仮数とを足した量の、2を底とする対数を取って、第1の対数量を決定し、(2)上記第1の対数量を第1の浮動小数点バイナリ値の指数に加算して第1の合計を形成し、(3)上記第1の合計から定数バイアスを減算して対数バイナリ値を形成してよい。ある例では、浮動小数点バイナリ値の対数バイナリ値は
【0071】
【0072】
である。別の例では、入力モジュール202は以下:
【0073】
【0074】
によって対数バイナリ値を生成でき、ここでe=バイナリの指数値であり、M=仮数のビット数であり、m=バイナリの仮数値であり、Bは定数のバイアス(例えばB=2(E-1)-1ただしE=指数のビット数)であり、MUは補正係数Cである。補正係数MUは、用途又は(例えばユーザによって提供される及び/若しくはレジスタから得られる)変数に応じた定数であってよい。ある例では、MUは0.043等の値である。MUは0.0~9.9である。いくつかの実施形態では、MUは0.04~0.06である。
【0075】
機械学習の場合、精度の程度が必要ない(例えば分類について、FPLNS softmaxの平均二乗誤差は0.0003程度である)ため、大まかな近似を使用できる(例えばニュートン法を使用しない)。いくつかの実施形態では、resnet18について、(mu=0.0)は4~6%の損失をもたらす。
【0076】
加算モジュール204は、いずれの2つのバイナリ値、又は2つの対数値の加算を実行できる。いくつかの実施形態では、FPLNSシステムは、IEEE754の同じ浮動小数点加算演算を共有する。加算及び減算は標準的な浮動小数点加算演算を用いて計算できるため、精度の損失はない。MLモデルに対する影響において加算の精度が乗算の精度よりも重要であることが示されているため、これは利点である。
【0077】
IEEE754浮動小数点(FP)とFPLNSとは、同様の加算演算を共有している。また、同一の例外フラグ:nan(非数値)、inf(無限大)、ov(オーバーフロー)、uf(アンダーフロー)、ze(ゼロ)も使用される。
【0078】
乗算モジュール206は、2つのバイナリ値又は2つの対数値の乗算を実行できる(乗算関数は、本明細書ではfplns mult(第1の値、第2の値)と呼ばれる)。乗算モジュール206は乗算関数(本明細書ではfplns mult(値1、値2)と呼ばれる)を管理する。ある例では、浮動小数点の数値a、b、及び対応するFPLNSフォーマットの対数L(x)及びL(y)を考えると:
p=x*y [実際の乗算]
L(p)=L(x)+L(y)-(B<<M)+MU [fplns mul(x,y)]
となる。
【0079】
この例では符号ビットが脱落し、これらは固定小数点加算/減算演算である。(B<<M)は定数であり、MUは変数であっても定数であってもよい。なお、L(x)及びL(y)のバイアスが適用された形態は、計算を必要としない。
【0080】
定数のMU及び変数のMUを用いた、最適化された実装形態が存在し得る。いくつかの実施形態では、乗算モジュール206は、加算/減算の可換性及び結合性を用いて、等価回路を見つけることができる。
【0081】
いくつかの実施形態では、符号ビットp.s=XOR(x.s,y.s)(即ちx及びyからの符号ビットの排他的論理和)である。
【0082】
本明細書に記載されているように、いくつかの実施形態では符号ビットが脱落し、乗算モジュール206は固定小数点加算/減算演算を利用する。
図7Aは、補正係数MUが定数である場合の、FPLNSプロセスを用いた2つの対数バイナリ値の乗算のフローチャートを示す。
図7Bは、補正係数MUが変数である場合の、FPLNSプロセスを用いた2つの対数バイナリ値の乗算のフローチャートを示す。いくつかの実施形態では、L(x)及びL(y)のバイアスが適用された形態は、計算を全く又はほとんど必要としない。
【0083】
MUが定数である場合、MUの定数は符号化されているか、又は実行されるプロセスに基づいていてよい(例えばsoftmax関数のための特定のMUと、異なる関数のための別のMU)ことが理解されるだろう。MUが変数である場合、乗算モジュール206はレジスタからMUを取得してよい(例えば、第1のレジスタは乗算される第1の対数バイナリ値を保持してよく、第2のレジスタは乗算される第2の対数バイナリ値を保持してよく、第3のレジスタはMUを表す値を保持してよい)。いくつかの実施形態では、使用されるMUをユーザが(例えばコードによって又はインタフェース内で)提供してもよい。
【0084】
図7Aでは、第1の対数バイナリ値L(x)を第2の対数バイナリ値L(y)に加算する。上で定義されているような定数のバイアスであるBは、仮数(例えば乗算される第1及び/又は第2の浮動小数点バイナリ値の仮数)のビット数だけシフトされる。シフトの後、定数のMUを定数のバイアスBから減算して、補正済みバイアス値を生成する。補正済みバイアス値を、第1の対数バイナリ値L(x)と第2の対数バイナリ値L(y)との和から減算することにより、L(Z)が生成される(即ちL(Z)の真数が上記2つのバイナリ値の積を生成することになる)。
【0085】
図7Bでは、第1の対数バイナリ値L(x)を第2の対数バイナリ値L(y)に加算する。上で定義されているような定数のバイアスであるBは、仮数(例えば乗算される第1及び/又は第2の浮動小数点バイナリ値の仮数)のビット数だけシフトされる。シフトの後、変数のMUを定数のバイアスBから減算して、補正済みバイアス値を生成する。この例では、変数のMUはメモリレジスタから取得できる。補正済みバイアス値を、第1の対数バイナリ値L(x)と第2の対数バイナリ値L(y)との和から減算することにより、L(Z)が生成される(即ちL(Z)の真数が上記2つのバイナリ値の積を生成することになる)。
【0086】
いくつかの実施形態では、乗算モジュール206は、加算/減算の可換性及び/又は結合性を用いて、等価回路を見つけることができる。
【0087】
いくつかの実施形態では、除算モジュール208は除算を実行できる(除算関数は本明細書ではfplns div(値1、値2)と呼ばれる)。ここでもまた、除算モジュール208は対数表現を用いる。浮動小数点の数値a、b、及び対応するFPLNSフォーマットの対数L(x)及びL(y)を考えると、q=x/y(実際の除算)及びL(q)=L(x)-L(y)+(B<<M)-MUとなる。
【0088】
様々な実施形態において、符号ビットが脱落し、これらは固定小数点加算/減算演算である。バイアス係数Bは定数である(即ち、浮動小数点バイナリ値の仮数のビット数に基づいてシフトされたB<<M又はBは常に定数である)。MUは、乗算モジュール206に関して説明したように、変数であっても定数であってもよい。本明細書に記載されているように、L(x)及びL(y)のバイアスが適用された形態は、計算を全く又はほとんど必要としない。
【0089】
図8Aは、補正係数MUが定数である場合の、FPLNSプロセスを用いた2つの対数バイナリ値の除算のフローチャートを示す。
図8Aでは、第1の対数バイナリ値L(x)を第2の対数バイナリ値L(y)から減算する。上で定義されているような定数のバイアスであるBは、仮数(例えば除算される第1及び/又は第2の浮動小数点バイナリ値の仮数)のビット数だけシフトされる。シフトの後、定数のMUを定数のバイアスBから減算して、補正済みバイアス値を生成する。補正済みバイアス値を、第1の対数バイナリ値L(x)と第2の対数バイナリ値L(y)との差に加算することにより、L(Z)が生成される(即ちL(Z)の真数が上記2つのバイナリ値の商となる)。
【0090】
図8Bは、補正係数MUが変数である場合の、FPLNSプロセスを用いた2つの対数バイナリ値の除算のフローチャートを示す。
図8Bでは、第1の対数バイナリ値L(x)を第2の対数バイナリ値L(y)から減算する。上で定義されているような定数のバイアスであるBは、仮数(例えば除算される第1及び/又は第2の浮動小数点バイナリ値の仮数)のビット数だけシフトされる。シフトの後、変数のMUを定数のバイアスBから減算して、補正済みバイアス値を生成する。この例では、変数のMUはメモリレジスタから取得できる。補正済みバイアス値を、第1の対数バイナリ値L(x)と第2の対数バイナリ値L(y)との差に加算することにより、L(Z)が生成される(即ちL(Z)の真数が上記2つのバイナリ値の商となる)。
【0091】
いくつかの実施形態では、除算モジュール208は、加算/減算の可換性及び/又は結合性を用いて、等価回路を見つけることができる。
【0092】
対数モジュール210は、バイアスが適用された固定小数点数を浮動小数点数に変換する。ある例(本明細書でfplns log2(変数)と呼ばれる関数)では、FPLNSフォーマットの値x及びL(x)を考えると、この例のL(x)は、符号ビットを伴う、バイアスが適用された31ビットの固定小数点数である(符号ビットはこの31ビット値の一部ではない)。次のステップでは、対数モジュール210は符号ビットを脱落させ、従って|L(v)|(即ちL(v)の絶対値)は31ビットの数である。変数uは、u=|L(v)|-((B<<M)-MU)として定義される。第2のステップでは、uが浮動小数点フォーマットに変換され、ここではuは符号ビットsと|u|とに変換され、その後、(例えば従来技術で見ることができるプライオリティエンコーダ及び加算器を用いて)符号ビットsを有する浮動小数点フォーマットへと正規化される。
【0093】
いくつかの実施形態では、対数モジュール210は、加算/減算の可換性及び/又は結合性を用いて、等価回路を見つけることができる。
【0094】
いくつかの実施形態では、対数モジュール210は、Cを底とする対数への変換を実行できる。変数Cを考えると、Kは以下のように定義される:
K=fpnls log2(C)(バイアスが適用された固定小数点数の、対数モジュール210での変換に関して、上で使用された方法)
定数Cについて、浮動小数点でK=Log(2)である。
【0095】
入力値vとu=fplns log2(v)を考え、fplns logC(x)=fplns div(u,K)であると仮定する。ここでfplns div(u,K)は、
図8A、8Bのフローチャートに示されているプロセスに続く、u及びKの除算のプロセスを指す。
【0096】
図9Aは、いくつかの実施形態における、Cを底とするFPLNS対数の例示的なプロセスを示す。
図9Bは、いくつかの実施形態における、Cを底とするFPLNS対数の別の例示的なプロセスを示す。これらのフローチャートは、fplns logC(x)=fplns div(u,K)であることを考慮すれば等価であることが理解されるだろう。
【0097】
図9Aでは、対数モジュール210は(x)のfplns log2を取る(fplns log2(数値)に関しては上を参照)。続いて、fplns log2をKで除算して、zを出力する。本明細書に記載されているように、FPLNSフォーマットの値x及びL(x)を考えると、この例のL(x)は、符号ビットを伴う、バイアスが適用された31ビットの固定小数点数である(符号ビットはこの31ビット値の一部ではない)。次のステップでは、対数モジュール210は符号ビットを脱落させ、従って|L(v)|(即ちL(v)の絶対値)は31ビットの数である。変数uは、u=|L(v)|-((B<<M)-MU)として定義される。第2のステップでは、uが浮動小数点フォーマットに変換され、ここではuは符号ビットsと|u|とに変換され、その後、(例えば従来技術で見ることができるプライオリティエンコーダ及び加算器を用いて)符号ビットsを有する浮動小数点フォーマットへと正規化される。除算モジュール208はfplns log2(x)の出力をKで除算する(例えばKは、レジスタから取得できる)。
【0098】
図8Aに示されているように、第1の対数バイナリ値L(x)を第2の対数バイナリ値L(K)から減算する。上で定義されているような定数のバイアスであるBは、仮数(例えば除算される第1及び/又は第2の浮動小数点バイナリ値の仮数)のビット数だけシフトされる。シフトの後、定数のMUを定数のバイアスBから減算して、補正済みバイアス値を生成する。補正済みバイアス値を、第1の対数バイナリ値L(x)と第2の対数バイナリ値L(y)との差に加算することにより、L(Z)(即ち上記2つのバイナリ値の商)が生成される。Cが変数である場合は、
図8Bに示されているフローチャートに従うことができる。
【0099】
図9Bは
図9Aと等価のプロセスであり、ここでfplns logC(x)=fplns div(u,K)である。
図9Bでは、対数モジュール210は
図9Aに関して説明されている方法と同様にして、(x)のfplns log2を取る。続いて、fplns log2をfplns log2(C)で除算して、zを出力する。本明細書に記載されているように、FPLNSフォーマットの値C及びL(C)を考えると、この例のL(C)は、符号ビットを伴う、バイアスが適用された31ビットの固定小数点数である(符号ビットはこの31ビット値の一部ではない)。次のステップでは、対数モジュール210は符号ビットを脱落させ、従って|L(C)|(即ちL(C)の絶対値)は31ビットの数である。変数uは、u=|L(C)|-((B<<M)-MU)として定義される。第2のステップでは、uが浮動小数点フォーマットに変換され、ここではUは符号ビットと|u|とに変換され、その後、(例えば従来技術で見ることができるプライオリティエンコーダ及び加算器を用いて)符号ビットを有する浮動小数点フォーマットへと正規化される。除算モジュール208はfplns log2(x)の出力をfplns log2(C)で除算する(例えばCは、レジスタから取得できる)。
【0100】
2を底とする対数及び2を底とする指数は、固定小数点から浮動小数点への、又はその逆の変換によって計算できる。いくつかの実施形態では、変換は、バイアス/補正を考慮し、バレルシフタを伴うプライオリティエンコーダを用いて達成できる。
【0101】
べき乗モジュール212はべき乗を実行する。ある例では、べき乗モジュール212は2を底とするべき乗(fplns exp2(数値))を実行する。2を底とするべき乗の関数は、浮動小数点数の、バイアスが適用された固定小数点数への変換である。補正係数MUは変数であっても定数であってもよい。
【0102】
FPLNSフォーマットのv及びL(v)を考えると、べき乗モジュール212はxを、符号s、指数e、及び仮数mに分割する。仮数は、mは小数0.m+(M‐1)…m_0であり、従ってm_iはビットiとなる。仮数m’=1+mであり、SHAMT=e-Bである。s==0の場合(sビット==0の場合)、最終的な値はm’<<SHAMT)-MU)であり、s==1の場合、最終的な値はfplns div(1,((m’<<SHAMT)-MU))である。SHAMT<0の場合、左へのシフト(<<)は右へのシフト(>>)となる。
【0103】
図10は、いくつかの実施形態におけるべき乗プロセス1000を示す。xを考えると、べき乗モジュール212は任意に、符号ビット、m’、及びeをxのfpLNSフォーマットから分割できる。べき乗モジュール212はfplns格納フォーマットに格納された情報に基づいてこの情報を取得できる(そしてm’を計算できる)ため、このプロセスは任意である。べき乗モジュール212は指数eとバイアスBとの差を取ることができる(例えばここでBは定数である)。指数eとバイアスBとの差に基づいて、値m’がシフトされる。
【0104】
べき乗モジュール212は、仮数のビットに基づいてBをシフトし、補正係数Muの差を取った後、結果をシフトされた値m’に加算することにより、第1のべき乗値を形成できる。
【0105】
sビットが0以上である場合、上記べき乗値がzとして出力される。
【0106】
sビットが0以上ではない場合、除算モジュール208は(1、第1のべき乗値)の除算を実行し、zとして出力できる。
【0107】
平方根モジュール214は平方根関数を実行できる。ある例では、(x)のfplns平方根関数=fplns exp2(fplns mult(0.5,fplns log2(x)))である。同様に、(x)のfplns平方根関数=fplns exp2(float(L(x)>>1))である。0.5は定数であってよい。L(x)は、バイアスが適用されていない2を底とする固定小数点対数である。1だけ右にシフトすることは、整数を2で除算することと同じである。いくつかの実施形態では、fplns演算を、標準的な浮動小数点演算に部分的に置き換えることができる。float(y)は、固定小数点値yを浮動小数点に変換する。
【0108】
平方根モジュール214はまた、N乗根関数を実行してもよい。例えばfplns root(x)=fplns exp2(fplns mul(1/n,fplns log2(x)))であるか、又はfplns root(x)=fplns exp2(fplns div(fplns log2(x),n)である。1/nは定数であってよい。いくつかの実施形態では、変数n乗根について、1/nをfplns div(1,n)に置き換えることができる。
【0109】
いくつかの実施形態では、MUに関してF(x,MU)を最小化することによるlog2(1+x)近似により、平均誤差を最小化できる。例えば:
【0110】
【0111】
である。
【0112】
更に、log2(1+x)近似による最大誤差は、MUを計算することにより最小化することができる。例えば:
【0113】
【0114】
である。
【0115】
FPLNSシステムは多くの場合に使用できる。高次モジュール214は他のモジュールと連携して、高次関数を実行できる。例えば高次モジュール214は、以下のような深層学習の原始関数に利用できる:
FPLNS 2D畳み込み
FPLNSバッチ正規化
FPLNS行列乗算
FPLNSシグモイド
FPLNS平均プーリング
FPLNS Softmax
【0116】
本明細書に記載の関数(例えばfplns mult、fplns div等)を用いて高次モジュール214が実行できる他の関数としては、限定するものではないが、softplus、ガウス、ガウス誤差線形ユニット(Guassian error linear unit:GELU)、スケーリングされた指数関数的線形ユニット(scaled exponential linear unit:SELU)、漏洩正規化線形ユニット(leaky rectified linear unit:Leaky ReLU)、パラメトリック正規化線形ユニット(Parametric rectified linear unit:PreLU)、シグモイド線形ユニット(sigmoid linear unit:SiLU、シグモイド収縮、SiL、又はSwish‐1)、Mish、erf(x)、双曲線余弦、双曲線正弦、双曲線正接、連続微分可能な指数関数的線形ユニット(continuously differentiable exponential linear unit:CELU)、指数関数的線形ユニット(Exponential Linear Unit:ELU)、ハードシグモイド、Hard Swish、対数softmax、及びsoftsignが挙げられる。
【0117】
高次モジュール214は、ステートマシンとして高次関数を実装してよく、又はプロセスをパイプライン化してもよい。いくつかの実施形態では、高次モジュール214は、1つ以上の関数の実行において、テイラー展開又はニュートン法を利用できる。
【0118】
本明細書に記載のfplns関数のうちの1つ以上を、いずれの個数の異なる関数又はプロセスにおいて利用してよい。いくつかの実施形態では、fplns関数を、(例えば必要に応じてアンサンブルアプローチで)正確な関数と共に利用してよい。しかしながらfplns関数は、正確な関数、又はfplns関数と正確な関数との組み合わせに比べて、電力を削減しながら多くのタスクを高速で実行できる。
【0119】
例えば画像処理は、従来技術に比べて速度、スケーリング、及び電力効率を改善するためにfplns関数を利用でき、これにより既存の技術的ソリューションの技術的欠点が改善される。
【0120】
データストア216は、関数を保持できるいずれの個数のデータ構造を含んでよい。様々な実施形態において、本明細書に記載の関数は、集積回路内のハードウェアで(例えばfplns乗算器を用いて)、及び/又はIPコアを用いて実装される。
【0121】
図11は、いくつかの実施形態における、fplns関数を利用した分類の例示的なプロセス1100を示す。
図11では、画像1102のセットを受信できる。ある例では、画像1102は、再構成済み米国標準技術研究所(Modified National Institute of Standards and Technology:MNIST)データベースからの、MNISTデータベース画像セットである。MNISTは、0から9までの手書きの数字の大規模なデータベースであり、様々な画像処理システムの訓練に一般的に使用されている。
【0122】
速度、スケーリング、及び電力の相当な改善のために(特に乗算関数を実行しなければならない回数を考慮する際に)、本明細書に記載されているようなfplns mult関数(即ちfplns乗算)を用いて、行列乗算を実行できる。
【0123】
この例では、28×28の画像を取り込み、784個の1次元配列に変換する。
【0124】
この単純な例では、ステップ1110において、784個の1次元配列に784×16の重み付け行列1108を乗算することにより、16個の値のベクトル1112を生成する。
【0125】
ステップ1116では、16個の値のベクトル1112に16×16の重み付け行列1114を乗算することにより、16個の値のベクトル1118を生成する。
【0126】
ステップ1122では同様に、16個の値のベクトル1118に16×10の重み付け行列1120を乗算することにより、10個の値のベクトル1124を生成する。
【0127】
本明細書に記載されているように、(例えばステップ1110、1116、1122における)行列乗算関数はそれぞれ、fplns乗算関数を利用してよい。
【0128】
活性化関数1126を10個の値のベクトル1124に対して実行することにより、画像1104の分類に使用できるパーセンテージのベクトルが作成される。乗算関数の例としては、シグモイド関数又はsoftmax関数が挙げられる。
【0129】
シグモイド関数は、以下のようなものであってよい:
【0130】
【0131】
様々な実施形態において、fplnsべき乗関数を分母に利用してよい。更に、fplns除算関数を利用してもよい。あるいは、fplns関数と正確な関数とを任意に組み合わせてよい。例えばfplnsべき乗関数を、正確な除算関数と共に使用してよい。別の例では、fplns除算関数を、正確なべき乗及び/又は加算関数と共に利用してよい。
【0132】
softmax関数は、以下のようなものであってよい:
【0133】
【0134】
様々な実施形態において、fplnsべき乗関数を分母及び分子に利用してよい。更に、fplns除算関数を利用してもよい。あるいは、fplns関数と正確な関数とを任意に組み合わせてよい。例えばfplnsべき乗関数を、正確なべき乗関数と共に使用してよい。別の例では、fplnsべき乗関数を、正確な除算及び/又は加算関数と共に利用してよい。あるいはfplns除算関数を正確なべき乗関数と共に利用してよい。
【0135】
fplns関数により、速度、スケーリング、電力、及び効率を大幅に改善できる。fplns関数は、多様な高レベルの関数もサポートする。
【0136】
基本的なFPLNS算術プリミティブの精度はかなりの不正確さを示す場合があるものの、いくつかのモデルに対する正味の影響は以下のように最小限である:
【0137】
【0138】
この例では、乗算、除算、逆平方根、及びべき乗のための近似FPLNSプリミティブを用いて、4つのモデルが実装されている。初期テストモデルとして使用される全結合モデルは、シグモイド活性化関数を使用する3レベルのネットワークである。これらのモデルは、最大200エポックにわたって、正確な演算を使用して従来の方法で訓練された。続いてこれらのモデルを、標準的な深層学習プリミティブ層及びFPLNS深層学習プリミティブ層の両方を用いて、推論に関して試験した。計算アルゴリズムのみを変更した。重みの量子化及びモデルのアーキテクチャは修正されなかった。結果は、FPLNS演算の精度損失が試験された全てのモデルにわたって1%未満であり、明らかに競争力を有することを実証している。これは、ResNet50で精度損失が1.5%である8ビット量子化よりも優れている。
【0139】
整数量子化:最初にある整数を浮動小数点に変換する場合、FPLNS技法を用いて、INT8乗算又は活性化関数を加速できる。いくつかの実施形態では、本明細書に記載のFPLNSシステム及び方法は、複数の層にわたる精度の組み合わせを使用するMLモデルに利用できる。
【0140】
重みプルーニング/クラスタリング:ゼロの重みを計算からプルーニングできる。また、同一の値に近い複数の重みのクラスタを組み合わせ、これをハフマンテーブルに格納することもできる。重みプルーニング技法及びクラスタリング技法はいずれも、マクロレベルの近似モデル計算のための方法であり、いずれの方法も、FPLNS計算と併用することにより、プルーニング/クラスタリング単独で達成される消費電力より更に低い消費電力を達成できる。FPLNSは、プルーニング/クラスタリングと相互に排他的ではない。
【0141】
図12は、本明細書に記載のタスクを実行するための命令を実行できるデジタルデバイスを示すブロック図である。デジタルデバイスは、メモリ及びプロセッサを備えるいずれのデバイスである。具体的には、
図12は、例示的なコンピュータシステム1200の形態のマシンの模式図を示し、本明細書に記載の方法論のうちのいずれの1つ以上を上記マシンに実行させるための命令1224(例えばソフトウェア)を、その中で実行できる。代替実施形態では、上記マシンはスタンドアロン型デバイスとして動作するか、又は例えばインターネットを介して他のマシンに接続(例えば他のマシンとネットワーク化)できる。ネットワーク化された展開では、上記マシンは、サーバ‐クライアントネットワーク環境内のサーバマシン若しくはクライアントマシンの能力内で、又はピア・ツー・ピア(若しくは分散型)ネットワーク環境内のピアマシンとして、動作できる。
【0142】
上記マシンは、サーバコンピュータ、クライアントコンピュータ、パーソナルコンピュータ(personal computer:PC)、タブレットPC、セットトップボックス(set‐top box:STB)、パーソナルデジタルアシスタント(personal digital assistant:PDA)、携帯電話、スマートフォン、ウェブアプライアンス、ネットワークルータ、スイッチ若しくはブリッジ、又はいずれのマシンであって、該マシンが取るべきアクションを指定する命令1224を(逐次若しくはその他の様式で)実行できる、いずれのマシンであってよい。更に、マシンは1つだけ図示されているが、用語「マシン(machine)」は、本明細書に記載の方法論のうちのいずれの1つ以上を実行するために命令1224を個別に又は共同で実行する、マシンの任意の集合を含むものとも解釈されるものとする。
【0143】
例示的なコンピュータシステム1200は、プロセッサ1202(例えば中央演算処理装置(central processing unit:CPU)、グラフィックス処理装置(graphics processing unit:GPU)、デジタルシグナルプロセッサ(digital signal processor:DSP)、1つ以上の特定用途向け集積回路(ASIC)、1つ以上の無線周波数集積回路(radio‐frequency integrated circuit:RFIC)、又はこれらの任意の組み合わせ)、メインメモリ1204、及びスタティックメモリ1206を含み、これらはバス1208を介して互いに通信するように構成される。コンピュータシステム1200は更に、グラフィックス表示ユニット1210(例えばプラズマディスプレイパネル(plasma display panel:PDP)、液晶ディスプレイ(liquid crystal display:LCD)、プロジェクタ、又は陰極線管(cathode ray tube:CRT))を含んでよい。コンピュータシステム1200はまた、図示されていない英数字入力デバイス1212(例えばキーボード)、カーソル制御デバイス1214(例えばマウス、トラックボール、ジョイスティック、モーションセンサ、又は他のポインティング器具)、データストア1216、信号生成デバイス1218(例えばスピーカー)、音声入力デバイス(例えばマイクロフォン)と、ネットワークインタフェースデバイス1220とを含んでよく、これらもまた、バス1208を介してネットワーク1226と通信するように構成される。
【0144】
データストア1216は機械可読媒体1222を含んでよく、これには、本明細書に記載の方法論又は関数のうちのいずれの1つ以上を具体化する命令1224(例えばソフトウェア)が記憶されている。命令1224(例えばソフトウェア)は、コンピュータシステム1200によって実行される間、その全体又は少なくとも一部がメインメモリ1204内、又はプロセッサ1202内(例えばプロセッサのキャッシュメモリ内)にあってもよく、メインメモリ1204及びプロセッサ1202もまた、機械可読媒体を構成する。命令1224(例えばソフトウェア)は、ネットワークインタフェース1220を介して、ネットワーク(図示せず)上で送受信できる。
【0145】
機械可読媒体1222は、ある例示的実施形態では単一の媒体として示されているが、用語「機械可読媒体(machine‐readable medium)」は、命令(例えば命令1224)を記憶できる単一の媒体又は複数の媒体(例えば集中型若しくは分散型データベース、若しくは関連するキャッシュ及びサーバ)を含むものと解釈されるものとする。用語「機械可読媒体」はまた、マシンによる実行のために命令(例えば命令1224)を記憶でき、かつ本明細書で開示される方法論のうちのいずれの1つ以上をマシンに実行させる、いずれの媒体を含むものと解釈されるものとする。用語「機械可読媒体」は、ソリッドステートメモリ、光メディア、及び磁気メディアの形態のデータリポジトリを含むが、これらに限定されないものとする。
【0146】
本説明では、用語「エンジン(engine)」は、指定された機能を提供するための計算論理を指す。エンジンは、ハードウェア、ファームウェア、及び/又はソフトウェアで実装できる。本明細書に記載のエンジンをソフトウェアとして実装する場合、上記エンジンはスタンドアロン型プログラムとして実装できるが、他の手段によって、例えばより大きなプログラムの一部として、いずれの個数の別個のプログラムとして、又は1つ以上の静的若しくは動的にリンクされたライブラリとして、実装することもできる。本明細書に記載の名称付きのエンジンは1つの実施形態を表しており、他の実施形態は他のエンジンを含むことができることが、理解されるだろう。更に、他の実施形態は、本明細書に記載のエンジンを含まなくてもよく、及び/又は本明細書に記載の機能を複数のエンジン間に異なる方法で分散させてもよい。更に、2つ以上のエンジンに属する機能を単一のエンジンに組み込むこともできる。エンジンがソフトウェアによって実装される実施形態では、エンジンはコンピュータ可読永続記憶デバイス(例えばハードディスク)上に記憶され、メモリにロードされて、
図12に関連して上で説明されている1つ以上のプロセッサによって実行される。あるいは、ハードウェア又はソフトウェアエンジンを、コンピュータシステム内の他の場所に記憶することもできる。
【0147】
本明細書で参照されているように、コンピュータ又はコンピューティングシステムは、本明細書に記載の動作のために使用されるハードウェア要素を含み、これは
図12におけるこのような要素の具体的な参照には関係なく、例えば1つ以上のプロセッサ、高速メモリ、ハードディスクストレージ及びバックアップ、ネットワークインタフェース及びプロトコル、データ入力用の入力デバイス、並びに表示、印刷、又はその他のデータ提示のための出力デバイスを含む。本明細書中で指定されているシステムアーキテクチャからの、多数の変更が可能である。このようなシステムのエンティティ、及びそのそれぞれの機能は、組み合わせることも、再分散させることもできる。
【国際調査報告】