IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ マイクロソフト テクノロジー ライセンシング,エルエルシーの特許一覧

特表2024-508596階層的な共有指数浮動小数点データタイプ
<>
  • 特表-階層的な共有指数浮動小数点データタイプ 図1
  • 特表-階層的な共有指数浮動小数点データタイプ 図2
  • 特表-階層的な共有指数浮動小数点データタイプ 図3
  • 特表-階層的な共有指数浮動小数点データタイプ 図4
  • 特表-階層的な共有指数浮動小数点データタイプ 図5
  • 特表-階層的な共有指数浮動小数点データタイプ 図6
  • 特表-階層的な共有指数浮動小数点データタイプ 図7
  • 特表-階層的な共有指数浮動小数点データタイプ 図8
  • 特表-階層的な共有指数浮動小数点データタイプ 図9
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-02-28
(54)【発明の名称】階層的な共有指数浮動小数点データタイプ
(51)【国際特許分類】
   G06N 3/0495 20230101AFI20240220BHJP
   G06F 17/10 20060101ALI20240220BHJP
   G06F 7/483 20060101ALI20240220BHJP
【FI】
G06N3/0495
G06F17/10 Z
G06F7/483
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023541370
(86)(22)【出願日】2022-01-20
(85)【翻訳文提出日】2023-08-24
(86)【国際出願番号】 US2022013086
(87)【国際公開番号】W WO2022173572
(87)【国際公開日】2022-08-18
(31)【優先権主張番号】63/148,086
(32)【優先日】2021-02-10
(33)【優先権主張国・地域又は機関】US
(31)【優先権主張番号】17/361,263
(32)【優先日】2021-06-28
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.Blu-ray
(71)【出願人】
【識別番号】314015767
【氏名又は名称】マイクロソフト テクノロジー ライセンシング,エルエルシー
(74)【代理人】
【識別番号】100079108
【弁理士】
【氏名又は名称】稲葉 良幸
(74)【代理人】
【識別番号】100109346
【弁理士】
【氏名又は名称】大貫 敏史
(74)【代理人】
【識別番号】100117189
【弁理士】
【氏名又は名称】江口 昭彦
(74)【代理人】
【識別番号】100134120
【弁理士】
【氏名又は名称】内藤 和彦
(74)【代理人】
【識別番号】100108213
【弁理士】
【氏名又は名称】阿部 豊隆
(72)【発明者】
【氏名】ダルビッシュ ロウハーニー,ビタ
(72)【発明者】
【氏名】エランゴ,ヴェンムギル
(72)【発明者】
【氏名】シャフィプール,ラスール
(72)【発明者】
【氏名】フォワーズ,ジェレミー
(72)【発明者】
【氏名】リウ,ミン ガン
(72)【発明者】
【氏名】シー,ジンウェン
(72)【発明者】
【氏名】バーガー,ダグラス シー.
(72)【発明者】
【氏名】チュン,エリック エス.
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA01
5B056CC01
(57)【要約】
本開示の実施形態は、階層的な共有指数浮動小数点データタイプを提供するためのシステム及び方法を含む。第1及び第2の共有指数値は、複数の浮動小数点値の指数値に基づいて決定される。第3の共有指数値は、第1の共有指数値及び第2の共有指数値に基づいて決定される。第1及び第2の差の値は、第1の共有指数値、第2の共有指数値及び第3の共有指数値に基づいて決定される。符号値及び仮数値は、複数の浮動小数点値について決定される。複数の浮動小数点値の各浮動小数点値のための符号値及び仮数値、第3の共有指数値、第1の差の値並びに第2の差の値は、共有指数浮動小数点データタイプのためのデータ構造に格納される。
【特許請求の範囲】
【請求項1】
デバイスの少なくとも1つの処理ユニットによって実行可能なプログラムを格納する機械可読媒体であって、前記プログラムは、
複数の浮動小数点値の第1のサブセットの各浮動小数点値の指数値に基づいて、第1の共有指数値を決定することと、
前記複数の浮動小数点値の第2のサブセットの各浮動小数点値の指数値に基づいて、第2の共有指数値を決定することと、
前記第1の共有指数値及び前記第2の共有指数値に基づいて、第3の共有指数値を決定することと、
前記第1の共有指数値及び前記第3の共有指数値に基づいて、第1の差の値を決定することと、
前記第2の共有指数値及び前記第3の共有指数値に基づいて、第2の差の値を決定することと、
前記複数の浮動小数点値の各浮動小数点値のための符号値及び仮数値を決定することと、
前記複数の浮動小数点値の各浮動小数点値のための前記符号値及び前記仮数値、前記第3の共有指数値、前記第1の差の値並びに前記第2の差の値を、共有指数浮動小数点データタイプのためのデータ構造に格納することと
を行うための命令のセットを含み、ニューラルネットワークのために前記共有指数浮動小数点データを使用することは、前記ニューラルネットワークの効率を向上させる、機械可読媒体。
【請求項2】
前記第1の共有指数値、前記第2の共有指数値及び前記第3の共有指数値は、共有指数値の階層を形成する、請求項1に記載の機械可読媒体。
【請求項3】
前記第1の共有指数値及び前記第2の共有指数値は、前記共有指数値の階層の第1のレベルの指数値であり、前記第3の共有指数値は、前記共有指数値の階層の第2のレベルの指数値である、請求項2に記載の機械可読媒体。
【請求項4】
前記共有指数値の階層は、前記第3の共有指数値、前記第1の差の値及び前記第2の差の値によって表される、請求項2に記載の機械可読媒体。
【請求項5】
前記プログラムは、
前記第1の共有指数値及び前記複数の浮動小数点値の前記第1のサブセットの各浮動小数点数の前記指数値に基づいて、差の値の第1のセットを決定することと、
前記第2の共有指数値及び前記複数の浮動小数点値の前記第2のサブセットの各浮動小数点数の前記指数値に基づいて、差の値の第2のセットを決定することと、
前記異なる値の第1のセット及び前記差の値の第2のセットを、前記共有指数浮動小数点データタイプのための前記データ構造に格納することと
を行うための命令のセットをさらに含む、請求項1に記載の機械可読媒体。
【請求項6】
前記第1の共有指数値を決定することは、最高値を有する、複数の浮動小数点値の前記第1のサブセットの浮動小数点値の指数値を決定し、及び前記第1の共有指数値として前記指数値を使用することを含む、請求項1に記載の機械可読媒体。
【請求項7】
前記第2の共有指数値を決定することは、最高値を有する、複数の浮動小数点値の前記第2のサブセットの浮動小数点値の指数値を決定し、及び前記第2の共有指数値として前記指数値を使用することを含む、請求項1に記載の機械可読媒体。
【請求項8】
前記第3の共有指数値を決定することは、前記第1の共有指数値が前記第2の共有指数値以上であると決定すると、前記第3の指数値として前記第1の共有指数値を使用し、及び前記第1の共有指数値が前記第2の共有指数値未満であると決定すると、前記第3の指数値として前記第2の共有指数値を使用することを含む、請求項1に記載の機械可読媒体。
【請求項9】
前記共有指数浮動小数点データタイプのための前記データ構造に格納された前記仮数値を表すために使用されるビット数は、前記第3の指数値を表すために使用されるビット数より少ない、請求項1に記載の機械可読媒体。
【請求項10】
複数の浮動小数点値の第1のサブセットの各浮動小数点値の指数値に基づいて、第1の共有指数値を決定することと、
前記複数の浮動小数点値の第2のサブセットの各浮動小数点値の指数値に基づいて、第2の共有指数値を決定することと、
前記第1の共有指数値及び前記第2の共有指数値に基づいて、第3の共有指数値を決定することと、
前記第1の共有指数値及び前記第3の共有指数値に基づいて、第1の差の値を決定することと、
前記第2の共有指数値及び前記第3の共有指数値に基づいて、第2の差の値を決定することと、
前記複数の浮動小数点値の各浮動小数点値のための符号値及び仮数値を決定することと、
前記複数の浮動小数点値の各浮動小数点値のための前記符号値及び前記仮数値、前記第3の共有指数値、前記第1の差の値並びに前記第2の差の値を、共有指数浮動小数点データタイプのためのデータ構造に格納することと
を含む方法であって、ニューラルネットワークのために前記共有指数浮動小数点データを使用することは、前記ニューラルネットワークの効率を向上させる、方法。
【請求項11】
前記第1の共有指数値、前記第2の共有指数値及び前記第3の共有指数値は、共有指数値の階層を形成する、請求項10に記載の方法。
【請求項12】
前記第1の共有指数値及び前記第2の共有指数値は、前記共有指数値の階層の第1のレベルの指数値であり、前記第3の共有指数値は、前記共有指数値の階層の第2のレベルの指数値である、請求項11に記載の方法。
【請求項13】
前記共有指数値の階層は、前記第3の共有指数値、前記第1の差の値及び前記第2の差の値によって表される、請求項11に記載の方法。
【請求項14】
前記第1の共有指数値及び前記複数の浮動小数点値の前記第1のサブセットの各浮動小数点数の前記指数値に基づいて、差の値の第1のセットを決定することと、
前記第2の共有指数値及び前記複数の浮動小数点値の前記第2のサブセットの各浮動小数点数の前記指数値に基づいて、差の値の第2のセットを決定することと、
前記異なる値の第1のセット及び前記差の値の第2のセットを、前記共有指数浮動小数点データタイプのための前記データ構造に格納することと
をさらに含む、請求項10に記載の方法。
【請求項15】
処理ユニットのセットと、
命令を格納する機械可読媒体と
を含むシステムであって、前記命令は、前記処理ユニットのセットの少なくとも1つの処理ユニットによって実行されると、
複数の浮動小数点値の第1のサブセットの各浮動小数点値の指数値に基づいて、第1の共有指数値を決定することと、
前記複数の浮動小数点値の第2のサブセットの各浮動小数点値の指数値に基づいて、第2の共有指数値を決定することと、
前記第1の共有指数値及び前記第2の共有指数値に基づいて、第3の共有指数値を決定することと、
前記第1の共有指数値及び前記第3の共有指数値に基づいて、第1の差の値を決定することと、
前記第2の共有指数値及び前記第3の共有指数値に基づいて、第2の差の値を決定することと、
前記複数の浮動小数点値の各浮動小数点値のための符号値及び仮数値を決定することと、
前記複数の浮動小数点値の各浮動小数点値のための前記符号値及び前記仮数値、前記第3の共有指数値、前記第1の差の値並びに前記第2の差の値を、共有指数浮動小数点データタイプのためのデータ構造に格納することと
を前記少なくとも1つの処理ユニットに行わせ、ニューラルネットワークのために前記共有指数浮動小数点データを使用することは、前記ニューラルネットワークの効率を向上させる、システム。
【発明の詳細な説明】
【技術分野】
【0001】
背景
[0001] 本開示は、コンピューティングハードウェアに関する。より具体的には、本開示は、浮動小数点データタイプに関する。
【背景技術】
【0002】
[0002] ニューラルネットワークは、多様な異なる用途(例えば、画像分類、コンピュータビジョン、自然言語処理、音声認識、手書き文字認識など)のために使用される機械学習モデルである。ニューラルネットワークは、ニューラルネットワーク全体を通してデータセットを実行し、ニューラルネットワークからの結果を既知の結果と比較し、その差に基づいてネットワークを更新することにより、特定の目的のために訓練することができる。
【0003】
[0003] ニューラルネットワークの効率的な訓練及びニューラルネットワークを使用したローフィデリティデータタイプでの推論は、各ビットのフィデリティを最大化する一方、コンピューティングコストを最小化するデータタイプを開発することを必要とし得る。これは、最適化問題として公式化することができ、その目的は、量子化信号対雑音比(QSNR)計量を最大化する一方、ハードウェアドット積ユニットの面積オーバーヘッドを最小化することである。
【発明の概要】
【課題を解決するための手段】
【0004】
図面の簡単な説明
[0004] 本開示の様々な実施形態は、添付の図面の図において、限定ではなく例示として示される。
【図面の簡単な説明】
【0005】
図1】[0005]いくつかの実施形態によるコンピューティングシステムを示す。
図2】[0006]いくつかの実施形態による、浮動小数点値を階層的な共有指数浮動小数点データタイプに変換する例を示す。
図3】[0007]いくつかの実施形態による、図2に示される階層的な共有指数浮動小数点データタイプを格納するための例示的なデータ構造を示す。
図4】[0008]いくつかの実施形態による、浮動小数点値を階層的な共有指数浮動小数点データタイプに変換する別の例を示す。
図5】[0009]いくつかの実施形態による、図4に示される階層的な共有指数浮動小数点データタイプを格納するための例示的なデータ構造を示す。
図6】[0010]いくつかの実施形態による、階層的な共有指数浮動小数点データタイプ変数を乗算する例を示す。
図7】[0011]いくつかの実施形態による、階層的な共有指数浮動小数点データタイプ変数を作成するためのプロセスを示す。
図8】[0012]いくつかの実施形態による例示的なコンピュータシステムの簡略ブロック図を描写する。
図9】[0013]いくつかの実施形態によるニューラルネットワーク処理システムを示す。
【発明を実施するための形態】
【0006】
詳細な説明
[0014] 以下の記述では、説明を目的として、本開示の詳細な理解を提供するために多くの例及び特定の詳細を記載する。そのような例及び詳細は、請求項の要素又は特許請求される主題を全体として不当に限定するものとして解釈すべきではない。異なる請求項の言語に基づいて、特許請求される主題は、単独又は組合せでこれらの例の特徴のいくつか又はすべてを含み得、本明細書で説明される特徴及び技法の変更形態及び均等物をさらに含み得ることが当業者に明白であろう。
【0007】
[0015] ここで、階層的な共有指数浮動小数点データタイプを提供するための技法について説明する。いくつかの実施形態では、コンピューティングシステムは、階層的な共有指数浮動小数点データタイプのデータの作成及び管理を行うように構成することができる。例えば、コンピューティングシステムは、必要に応じて浮動小数点数(例えば、半精度浮動小数点数、単精度浮動小数点数、倍精度浮動小数点数など)に変換されたいくつかの数値から、階層的な共有指数浮動小数点データタイプのデータを作成することができる。その達成のため、コンピューティングシステムは、最初に、浮動小数点数の各々の指数値を決定する。次いで、コンピューティングシステムは、共有指数値の階層に基づいて、これらの指数値を量子化する。次に、コンピューティングシステムは、量子化された指数値に基づいて、浮動小数点数の各々の仮数を量子化する。最後に、コンピューティングシステムは、階層的な共有指数浮動小数点データタイプのためのデータ構造に共有指数値の階層及び量子化された仮数を格納する。
【0008】
[0016] いくつかの実施形態では、超狭ビット幅(例えば、1~4ビットの仮数)の効率的な訓練/推論は、各ビットのフィデリティを最大化する一方、コンピューティングコストを最小化するデータタイプを開発することを必要とし得る。これは、最適化問題として公式化することができ、その目的は、量子化信号対雑音比(QSNR)を最大化する一方、ハードウェアドット積ユニットの面積オーバーヘッドを最小化することである。論じられるように、本明細書で説明される階層的な共有指数浮動小数点データタイプは、他の浮動小数点データタイプと比べて、QSNR対乗累算(MAC)面積のパレートフロンティアをさらに押し上げ、さらなる効率を引き出すことができる。この超狭ビット幅レジームでは、効果的なQSNRのそのような増加は、ニューラルネットワークの訓練と、それらのニューラルネットワークを使用した推論との両方のためのより優れた達成可能な精度に直接つながり得る。
【0009】
[0017] いくつかの実施形態では、本明細書で説明されるデータタイプは、共有指数データタイプである。すなわち、指数は、少数の要素間で共有される。要素の数は、タイルサイズ又はブロックサイズと呼ぶことができる。小さいタイルサイズの使用は、ハードウェアの観点から最良の選択と言えない場合があり、なぜなら、仮数ビットの数の低減に伴い、整数乗算器のコストの大部分が排除され、累算器が乗累算器(MAC)ユニットの総面積を占めるようになり始めるためである。従って、比較的大きいタイルサイズの採用により、タイルのそれらのプライベート指数と共有指数との差が原因でタイル内の要素がゼロに過度にマッピングされることを回避しながら、累算器シリコンコストを償却することができる。
【0010】
[0018] いくつかの実施形態では、本明細書で説明されるデータタイプは、超狭ビット幅レジームでの許容タイルサイズと符号化効率との間の均衡を提供することを目的とする。符号化効率は、以下の式によって定義することができる。
【0011】
[0019]
【数1】
【0012】
[0020] 式中、
【数2】
は、n次元ベクトルxに対するプットフォース量子化法であり、||x||は、ユークリッドノルムである。nは、階層的な共有指数浮動小数点データタイプにおけるタイルサイズを表す。QSNRは、多くのベクトルxにわたって前述の比率を平均化することによって測定することができる。いくつかの実施形態では、定義は、MACユニットに対する信号対雑音比を測定するために修正することができ、xは、x=Q(y)Q(z)と置き換えることができ、式中、y及びzは、行列乗算ユニットへの入力を示す。
【0013】
[0021] いくつかの実施形態では、階層的な共有指数浮動小数点データタイプは、各タイルを入れ子サブタイルに分解し、各サブタイルの共有指数がその次のレベルのサブタイルとスケール値だけ異なり得るようにする。これらのスケールは、ドット積ユニットで展開される加算器木の右シフトとして実施することができる。
【0014】
[0022] いくつかの実施形態では、本明細書で説明されるデータタイプは、いくつかの調整可能なパラメータを有する。1つのパラメータは、タイルサイズであり、大域的指数を共有する要素の数である。別のパラメータは、仮数ビットの数である。いくつかの実施形態では、仮数値は、2の補数を使用して表され、他の実施形態では、仮数値は、符号/大きさフォーマットを使用して表される。仮数ビットの数は、1以上の任意の値を取ることができる。
【0015】
[0023] さらなる別のパラメータは、共有指数の表現である。いくつかの実施形態では、共有指数は、シングルレベルを使用して表すことができる。シングルレベル表現の場合、1つのパラメータは、サブタイルサイズであり、大域的指数を調整するために局所的スケールを共有する要素の数である。各タイルは、等しいサイズmの複数のサブタイルに分割することができ、各サブタイルは、共通のサブスケールを共有する。m=1の場合、ドット積ユニットにおいて、加算器木の葉に右シフタを加えることができる。mの値が大きいほど、右シフタは、加算器木の根の方に近付く。例えば、m=16の場合、右シフタは、Log(l6)=加算器木の第4のレベルに加えられる。シングルレベル表現の別のパラメータは、サブタイルスケールであり、1つの要素あたりの許容される右シフトの量を指定する。スケールは、大域的共有指数と、サブタイル内で選択された指数との間の許容される最大差を符号化する。例えば、加算器木の葉における1のスケールは、各入力要素を0又は1シフトできることを意味し、2ビットの組合せの多重化をもたらす。いくつかの事例では、1つのタイルあたりの最大指数は、大域的共有指数として使用することができる。従って、スケールは、常にゼロ以上の正の数である。いくつかの実施形態では、他の指数選択技法を使用することができる。大域的共有指数がタイルの最大指数でない例では、選択されるスケールは、正の値又は負の値であり得る。
【0016】
[0024] 他の実施形態では、共有指数は、階層的に表される。共有指数をスケーリングするために大きいシングルレベルのシフトを使用する代わりに、シフトは、加算器木の複数のレベルに分散され、代わりに1シフトあたりのスケールが制約される。階層表現の1つのパラメータは、階層レベルであり、共有指数を調整するために使用される加算器木の階層レベルの数である。インデックス作成は、木の葉から始まる。例えば、32のタイルサイズでは、加算器木に最大で5つのレベルが存在することになる。3の階層レベルは、加算器木の葉から始まる最初の3つのレベル内における右シフトの使用を含意する。階層表現の別のパラメータは、サブタイルスケールであり、各レベルで許容される1つの要素あたりの最大スケールである。スケールは、次のレベルの共有指数(必ずしも大域的指数とは限らない)との差を符号化する。共有指数は、最大指数であっても又はなくてもよい。例として、タイルの最大及び最小指数が演算される場合、最大と最小との差は、最大スケール差を与える。階層レベルが5に設定される場合、この指数差(最大-最小)の上限は、5であり得(5つのレベルのサブタイルがあるため)、大域的指数は、(max-min).clip(5)/2に設定され得る。これにより、タイルは、階層的にサブタイルに分かれ、各レベルでは、各サブタイルに対してサブタイルの指数に基づいて-1/0/1のスケールを設定しなければならないかどうかがチェックされる。
【0017】
[0025] 累算器ビット幅パラメータは、加算器木の最後に累算のために使用されるデータタイプを指定する。そのようなデータタイプの例は、半精度浮動小数点データタイプ、単精度浮動小数点データタイプ、倍精度浮動小数点データタイプなどを含む。いくつかの実施形態では、デフォルトデータタイプは、単精度浮動小数点値であり得る。切り捨てビット幅は、別のパラメータであり得る。このパラメータは、各整数加算後の切り捨ての量を指定し、それにより面積オーバーヘッドを効果的に低減することができる。効果的な切り捨てスキームの例は、加算器木の葉における整数乗算器の出力を8ビットの仮数で切り捨て、加算器木の各レベルにおける整数加算器の出力のビット幅が1ずつ大きくなるようにすることである。そのような手法は、例えば、達成可能なQSNR(すなわち精度)に最小限に影響を及ぼす一方、面積オーバーヘッドを低減することができる。
【0018】
[0026] 図1は、いくつかの実施形態によるコンピューティングシステム100を示す。示されるように、コンピューティングシステム100は、階層的な共有指数浮動小数点データタイプ(HASEFPDT)マネージャ105、指数マネージャ110、仮数マネージャ115、数値データストレージ120及び浮動小数点データストレージ125を含む。数値データストレージ120は、階層的な共有指数浮動小数点データタイプに変換することができる数値データを格納する。数値データの例は、浮動小数点数、整数などを含む。浮動小数点データストレージ125は、階層的な共有指数浮動小数点データタイプを格納するように構成される。そのようなデータタイプの例については、以下で詳細に説明する。加えて、浮動小数点データストレージ125は、階層的な共有指数浮動小数点データタイプのための定義を格納することができる。
【0019】
[0027] HASEFPDTマネージャ105は、階層的な共有指数浮動小数点データタイプ及びそのようなデータタイプに従って格納されたデータを管理する役割を担う。例えば、HASEFPDTマネージャ105は、浮動小数点データストレージ125から階層的な共有指数浮動小数点データタイプのための定義を回収することにより、階層的な共有指数浮動小数点データタイプとして格納されるデータを作成することができる。次に、HASEFPDTマネージャ105は、数値データストレージ120から数値データを回収し、数値データを浮動小数点数(例えば、半精度浮動小数点数、単精度浮動小数点数、倍精度浮動小数点数など)に変換することができる。HASEFPDTマネージャ105が回収する数値データの数は、階層的な共有指数浮動小数点データタイプのための定義で指定されているものに基づき得る。次いで、HASEFPDTマネージャ105は、変換済みの数値データ、階層的な共有指数浮動小数点データタイプのための定義及び数値データに対する共有指数値を決定する要求を指数マネージャ110に送信する。HASEFPDTマネージャ105が指数マネージャ110から共有指数値を受信すると、HASEFPDTマネージャ105は、数値データ、共有指数値、階層的な共有指数浮動小数点データタイプのための定義及び数値データに対する仮数値を決定する要求を仮数マネージャ115に送信する。HASFPDTマネージャ105が仮数マネージャ115から仮数値を受信した時点で、HASEFPDTマネージャ105は、階層的な共有指数浮動小数点データタイプのためのデータを格納するように構成されたデータ構造に仮数値及び共有指数値を格納する。
【0020】
[0028] HASEFPDTマネージャ105は、階層的な共有指数浮動小数点データタイプのデータから値を読み取ることもできる。例えば、HASEFPDTマネージャ105は、階層的な共有指数浮動小数点データタイプに従って格納されたデータ(例えば、階層的な共有指数浮動小数点データタイプに従ってデータを格納するためのデータ構造)から特定の値を読み取る要求を受信することができる(例えば、コンピューティングシステム100上で動作しているコンポーネントから、別のコンピューティングシステム上で動作しているコンポーネントからなど)。それに応答して、HASEFPDTマネージャ105は、階層的な共有指数浮動小数点データタイプのデータから、要求された値の仮数値を回収し、階層的な共有指数浮動小数点データタイプのデータに格納された共有指数値に基づいて、要求された値のための指数値を決定し、仮数値及び指数値に基づいて、要求された値を生成する。
【0021】
[0029] 指数マネージャ110は、階層的な共有指数浮動小数点データタイプのための指数値を決定するように構成される。例えば、指数マネージャ110は、数値データ、階層的な共有指数浮動小数点データタイプのための定義及び数値データに対する指数値を決定する要求をHASEFPDTマネージャ105から受信することができる。それに応答して、指数マネージャ110は、数値データ及び階層的な共有指数浮動小数点データタイプのための定義に基づいて、指数値の階層を決定する。次いで、指数マネージャ110は、HASEFPDTマネージャ105に指数値の階層を送信する。
【0022】
[0030] 仮数マネージャ115は、階層的な共有指数浮動小数点データタイプのための仮数値の決定を取り扱う。例えば、仮数マネージャ115は、数値データ、共有指数値、階層的な共有指数浮動小数点データタイプのための定義及び数値データに対する仮数値を決定する要求をHASEFPDTマネージャ105から受信することができる。共有指数値及び階層的な共有指数浮動小数点データタイプのための定義に基づいて、仮数マネージャ115は、数値データに対する仮数値を決定する。次いで、仮数マネージャ115は、HASEFPDTマネージャ105に仮数値を送信する。
【0023】
[0031] 図2は、いくつかの実施形態による、浮動小数点値を階層的な共有指数浮動小数点データタイプに変換する例を示す。具体的には、図2は、表200を示し、表200は、浮動小数点値を階層的な共有指数浮動小数点データタイプに変換するプロセス全体を通して様々な値を含む。この例は、図1を参照することによって説明される。この例の場合、行205の4つの値は、3つのレベルを有する共有指数値の階層を使用して共有指数値を格納する階層的な共有指数浮動小数点データタイプに変換される。示されるように、4つの値は、10進数値として提示される。HASEFPDTマネージャ105は、浮動小数点データストレージ125から、階層的な共有指数浮動小数点データタイプのための定義を回収することによって開始する。次に、HASEFPDTマネージャ105は、数値データストレージ120から行205の値を回収し、それらを浮動小数点値(例えば、半精度浮動小数点値、単精度浮動小数点値、倍精度浮動小数点値など)に変換する。次いで、HASEFPDTマネージャ105は、浮動小数点値、階層的な共有指数浮動小数点データタイプのための定義及び浮動小数点値のための指数値を決定する要求を指数マネージャ110に送信する。
【0024】
[0032] 浮動小数点値、階層的な共有指数浮動小数点データタイプのための定義及び要求を受信すると、指数マネージャ110は、表200の行210で描写されるように、浮動小数点値の各々の指数値を決定する。これらの指数値は、この例では、行215に示されるようにレベル0の指数値と見なされる。次いで、指数マネージャ110は、指数値の各対に対するレベル1の共有指数値を決定する。この例の場合、指数マネージャ110は、指数値の各対の最高値を有する指数値を決定し、レベル1の共有指数値としてそれを使用することにより、レベル1の共有指数値を決定する。行220に示されるように、値の第1の対に対する指数値間の最高指数値は、-3である。値の第2の対に対する指数値間の最高指数値は、-2である。次に、指数マネージャ110は、レベル0の指数値及び対応するレベル1の共有指数値の各対に対するレベル1のスケール値を決定する。ここで、指数マネージャ110は、レベル0の指数値と、対応するレベル1の共有指数値との差を決定することにより、レベル1のスケール値を決定する。差が1より大きい場合、指数マネージャ110は、レベル1のスケール値を1に近似させる。
【0025】
[0033] レベル0の指数値及び対応するレベル1の共有指数値の第1及び第2の対並びに第2の値に対して、指数マネージャ110は、レベル1のスケール値の各々が0である(すなわち-3と-3との差が0である)と決定する。レベル0の指数値及び対応するレベル1の共有指数値の第3の対に対して、指数マネージャ110は、レベル0の指数値とレベル1の共有指数値との差が2であると決定する。これは、1より大きいため、指数マネージャ110は、レベル1のスケール値を1に近似させる。レベル0の指数値及び対応するレベル1の共有指数値の第4の対に対して、指数マネージャ110は、レベル1のスケール値が0である(すなわち-2と-2との差が0である)と決定する。レベル1のスケール値は、表200の行225で描写されている。
【0026】
[0034] レベル1の共有指数値及びスケール値を決定した後、指数マネージャ110は、レベル2の共有指数値を決定する。この例では、指数マネージャ110は、レベル1の共有指数値に基づいてレベル2の共有指数値を決定する。具体的には、指数マネージャ110は、レベル1の共有指数値の最高値を有する指数値を決定し、レベル2の共有指数値としてそれを使用することにより、レベル2の共有指数値を決定する。ここで、指数マネージャ110は、行230に示されるように、レベル2の共有指数値が-2であると決定する。
【0027】
[0035] 次に、指数マネージャ110は、レベル1の共有指数値及び対応するレベル2の共有指数値の各対に対するレベル2のスケール値を決定する。この例の場合、指数マネージャ110は、レベル1の共有指数値と、対応するレベル2の共有指数値との差を決定することにより、レベル2のスケール値を決定する。差が1より大きい場合、指数マネージャ110は、レベル2のスケール値を1に近似させる。レベル1の共有指数値及び対応するレベル2の共有指数値の第1の対に対して、指数マネージャ110は、レベル2のスケール値が1である(すなわち-2と-3との差が1である)と決定する。レベル1の共有指数値及び対応するレベル2の共有指数値の第2の対に対して、指数マネージャ110は、レベル2のスケール値が0である(すなわち-2と-2との差が0である)と決定する。レベル2のスケール値は、行235に示されている。行240は、各浮動小数点値のための総スケール値を描写し、それは、レベル1のスケール値とレベル2のスケール値との総和である。行245は、各浮動小数点値のための総共有指数スケール値を示し、それは、レベル2の共有指数値からそれぞれの総スケール値を減じることにより、浮動小数点値について決定された指数値である。行250は、各浮動小数点値のための決定された指数値とオリジナルの指数値との差を描写する。行255は、浮動小数点値のための仮数の量子化された大きさを示す。この例では、2ビットの仮数が使用されており、第1のビットが符号に対して使用され(表200には示されていない)、第2のビットが大きさに対して使用されている。行260は、浮動小数点値の各々に対する量子化された指数値を示し、それは、行245の共有指数スケール値と同じである。最後に、行265は、オリジナルの浮動小数点値を階層的な共有指数浮動小数点データタイプに変換した後の量子化された浮動小数点値の10進数表記を示す。
【0028】
[0036] 指数マネージャ110がレベル2の共有指数、レベル2のスケール値及びレベル1のスケール値を決定した後、指数マネージャ110は、それらをHASEFPDTマネージャ105に送信する。次いで、HASEFPDTマネージャ105は、行205の浮動小数点値、レベル2の共有指数、レベル2のスケール値、レベル1のスケール値、階層的な共有指数浮動小数点データタイプのための定義及び浮動小数点値のための仮数値を決定する要求を仮数マネージャ115に送信する。仮数マネージャ115がデータ及び要求を受信すると、仮数マネージャ115は、各浮動小数点値のための仮数値を決定する。指数差(行250に示される)が0より大きい場合、仮数マネージャ115は、それぞれの浮動小数点値のための仮数の大きさを0に量子化する。そうでなければ、仮数マネージャ115は、利用可能なビット(この例では符号に対して1ビット及び大きさに対して1ビット)及びそれぞれの量子化された指数値(行260に示される)を使用して、オリジナルの浮動小数点値に最良近似させる。ここで、仮数マネージャ115は、浮動小数点値の各々に対する量子化された大きさの値を、行255で描写される値に決定する。次に、仮数マネージャ115は、決定した仮数値をHASEFPDTマネージャ105に送信する。
【0029】
[0037] HASEFPDTマネージャ105が仮数マネージャ115から仮数値を受信した時点で、HASEFPDTマネージャ105は、階層的な共有指数浮動小数点データタイプのためのデータを格納するように構成されたデータ構造に仮数値、レベル2の共有指数、レベル2のスケール値及びレベル1のスケール値を格納する。図3は、いくつかの実施形態による、図2に示される階層的な共有指数浮動小数点データタイプを格納するための例示的なデータ構造300を示す。データ構造300は、階層的な共有指数浮動小数点データタイプのための定義に基づいて生成することができる。ここで、データタイプのための定義は、4つの浮動小数点値のための4つの2ビット仮数値、4つの1ビットのレベル1のスケール値、2つの1ビットのレベル2のスケール値及び8ビットのレベル2の共有指数値を指定する。示されるように、データ構造300は、仮数属性、レベル1のスケール属性、レベル2のスケール属性及び共有指数属性の4つの属性を含む。仮数属性は、浮動小数点値の各々に対して決定された2ビットの仮数値を格納する。レベル1のスケール属性は、浮動小数点値の各々に対して決定された1ビットのレベル1のスケール値を格納する。レベル2のスケール値属性は、浮動小数点値の各対に対して決定された1ビットのレベル2のスケール値を格納する。共有指数属性値は、浮動小数点値に対して決定された8ビットのレベル2の共有指数値を格納する。この例では、レベル2の共有指数値の値は、127のバイアスを使用して表される。従って、この例の場合、125(すなわち127+(-2))の値が共有指数属性に格納される。
【0030】
[0038] 図4は、いくつかの実施形態による、浮動小数点値を階層的な共有指数浮動小数点データタイプに変換する別の例を示す。具体的には、図4は、表400を示し、表400は、浮動小数点値を異なる階層的な共有指数浮動小数点データタイプに変換するプロセス全体を通して様々な値を含む。この例も図1を参照することによって説明される。この例では、上記の例で使用されるものと同じ4つの値(行405で描写する)は、2つのレベルを有する共有指数値の階層を使用して共有指数値を格納する階層的な共有指数浮動小数点データタイプに変換される。その例は、HASEFPDTマネージャ105が浮動小数点データストレージ125から階層的な共有指数浮動小数点データタイプのための定義を回収することから始まる。次いで、HASEFPDTマネージャ105は、数値データストレージ120から行405の値を回収し、それらを浮動小数点値(例えば、半精度浮動小数点値、単精度浮動小数点値、倍精度浮動小数点値など)に変換する。次に、HASEFPDTマネージャ105は、浮動小数点値、階層的な共有指数浮動小数点データタイプのための定義及び浮動小数点値のための指数値を決定する要求を指数マネージャ110に送信する。
【0031】
[0039] 浮動小数点値、階層的な共有指数浮動小数点データタイプのための定義及び要求を受信した後、指数マネージャ110は、行410に示されるように、浮動小数点値の各々の指数値を決定する。この例の場合、指数マネージャ110は、レベル0の共有指数としてのオリジナルの指数値の各対に対する共有指数値である。この例では、指数マネージャ110は、オリジナルの指数値の各対の最高値を有する指数値を決定し、レベル0の共有指数値としてそれを使用することにより、レベル0の共有指数値を決定する。行415に示されるように、値の第1の対に対する指数値間の最高指数値は、-3であり、値の第2の対に対する指数値間の最高指数値は、-2である。次いで、指数マネージャ110は、レベル0の共有指数値に基づいてレベル1の共有指数を決定する。この例の場合、指数マネージャ110は、最高値を有するレベル0の共有指数値を決定し、レベル1の共有指数値としてそれを使用することにより、レベル1の共有指数を決定する。ここで、指数マネージャ110は、行420に示されるように、レベル1の共有指数値が-2であると決定する。次に、指数マネージャ110は、レベル0の共有指数値及び対応するレベル1の共有指数値の各対に対するレベル1のスケール値を決定する。この例では、指数マネージャ110は、レベル0の共有指数値と、対応するレベル1の共有指数値との差を決定することにより、レベル1のスケール値を決定する。差が1より大きい場合、指数マネージャ110は、レベル1のスケール値を1に近似させる。
【0032】
[0040] レベル0の共有指数値及び対応するレベル1の共有指数値の第1の対に対して、指数マネージャ110は、レベル1のスケール値が1である(すなわち-2と-3との差が1である)と決定する。レベル0の共有指数値及び対応するレベル1の共有指数値の第2の対に対して、指数マネージャ110は、レベル1のスケール値が0である(すなわち-2と-2との差が0である)と決定する。レベル1のスケール値は、行425に示されている。行430は、総スケール値を描写し、それは、レベル1のスケール値と同じである。行435は、各浮動小数点値のための総共有指数スケール値を示し、それは、レベル1の共有指数値からそれぞれの総スケール値を減じることにより、浮動小数点値について決定された指数値である。行440は、各浮動小数点値のための決定された指数値とオリジナルの指数値との差を描写する。行445は、浮動小数点値のための仮数の量子化された大きさを示す。この例では、3ビットの仮数が使用されており、第1のビットが符号に対して使用され(表400には示されていない)、第2のビットが大きさに対して使用されている。行450は、浮動小数点値の各々に対する量子化された指数値を示し、それは、行435の共有指数スケール値と同じである。次いで、行455は、オリジナルの浮動小数点値を階層的な共有指数浮動小数点データタイプに変換した後の量子化された浮動小数点値の10進数表記を描写する。
【0033】
[0041] レベル1の共有指数及びレベル1のスケール値を決定すると、指数マネージャ110は、それらをHASEFPDTマネージャ105に送信する。HASEFPDTマネージャ105は、行405の浮動小数点値、レベル1の共有指数、レベル1のスケール値、階層的な共有指数浮動小数点データタイプのための定義及び浮動小数点値のための仮数値を決定する要求を仮数マネージャ115に送信する。仮数マネージャ115がデータ及び要求を受信した時点で、仮数マネージャ115は、各浮動小数点値のための仮数値を決定する。指数差(行440に示される)が1より大きい場合、仮数マネージャ115は、それぞれの浮動小数点値のための仮数の大きさを0に量子化する。そうでなければ、仮数マネージャ115は、利用可能なビット(この例では符号に対して1ビット及び大きさに対して1ビット)及びそれぞれの量子化された指数値(行450に示される)を使用して、オリジナルの浮動小数点値に最良近似させる。仮数マネージャ115は、浮動小数点値の各々に対する量子化された大きさの値を、行445に示される値に決定する。次いで、仮数マネージャ115は、決定した仮数値をHASEFPDTマネージャ105に送信する。
【0034】
[0042] HASEFPDTマネージャ105が仮数マネージャ115から仮数値を受信すると、HASEFPDTマネージャ105は、階層的な共有指数浮動小数点データタイプのためのデータを格納するように構成されたデータ構造に仮数値、レベル1の共有指数及びレベル1のスケール値を格納する。図5は、いくつかの実施形態による、図4に示される階層的な共有指数浮動小数点データタイプを格納するための例示的なデータ構造500を示す。データ構造500は、階層的な共有指数浮動小数点データタイプのための定義に基づいて生成することができる。この例の場合、データタイプのための定義は、4つの浮動小数点値のための4つの2ビット仮数値、2つの2ビットのレベル1のスケール値及び8ビットのレベル1の共有指数値を指定する。描写されるように、データ構造500は、仮数属性、レベル1のスケール属性及び共有指数属性の3つの属性を含む。仮数属性は、浮動小数点値の各々に対して決定された2ビットの仮数値を格納する。レベル1のスケール属性は、浮動小数点値の各々に対して決定された2ビットのレベル1のスケール値を格納する。共有指数属性値は、浮動小数点値に対して決定された8ビットのレベル1の共有指数値を格納する。この例では、レベル1の共有指数値の値は、127のバイアスを使用して表される。従って、この例の場合、125(すなわち127+(-2))の値が共有指数属性に格納される。
【0035】
[0043] 図1~5を参照して上記で説明される例は、浮動小数点数を2つの異なる階層的な共有指数浮動小数点データタイプにどのように変換できるかを例証する。当業者であれば、いくつかの実施形態において追加の及び/又は異なる階層的な共有指数浮動小数点データタイプを使用できることを理解するであろう。例えば、階層的な共有指数浮動小数点データタイプは、指数を共有する異なる数の浮動小数点値を表すこと(上記の例の各々は、4つの浮動小数点値を表す)、仮数値、レベルスケール値及び共有指数値を表すために異なる数のビットを使用すること、指数値の階層において異なる数のレベル(例えば、スケール値の異なる数のレベル)を使用することなどができる。
【0036】
[0044] 加えて、図2~5を参照して上記で説明される例は、最高レベルの共有指数及びレベルスケール値によって共有指数値の階層をどのように表すことができるかを示す。例えば、図2に示される例は、レベル0の指数値、レベル1の共有指数値及びレベル2の共有指数値の3つの異なるレベルを有する共有指数の階層を使用する。図3によって描写されるように、共有指数値の階層は、レベル2の共有指数値、レベル2のスケール値及びレベル1のスケール値によって表される。浮動小数点値の量子化された指数値(行260の値)は、レベル2の共有指数値、レベル2のスケール値及びレベル1のスケール値から決定することができる。別の例として、図4に示される例は、レベル0の指数値及びレベル1の共有指数値の2つの異なるレベルを有する共有指数の階層を使用する。図5によって示されるように、共有指数値の階層は、レベル1の共有指数値及びレベル1のスケール値によって表される。浮動小数点値の量子化された指数値(行450の値)は、レベル1の共有指数値及びレベル1のスケール値から決定することができる。HASEFPDTマネージャ105は、階層的な共有指数浮動小数点データタイプに従って格納された浮動小数点値を読み取る(例えば、行265及び455に示されるもののような量子化された値を決定する)際、このように量子化された指数値を決定する。
【0037】
[0045] さらに、図2~5を参照して上記で説明される例は、より低いレベルの指数/共有指数の中の最高値を選択することによって共有指数値を決定する。当業者であれば、特定のレベルの共有指数値を決定するために追加の及び/又は異なる統計的計量を使用できることを理解するであろう。そのような計量の例は、加重平均、平均値+定義された数の標準偏差(例えば、1標準偏差、2標準偏差、3標準偏差など)を含む。
【0038】
階層的な共有指数浮動小数点データタイプの例示的な用途
[0046] 上記で説明される例は、階層的な共有指数浮動小数点データタイプを作成する方法について説明している。以下の例は、これらのデータタイプの多くの用途の1つを示す。図6は、いくつかの実施形態による、階層的な共有指数浮動小数点データタイプ変数を乗算する例を示す。具体的には、図6は、階層的な共有指数浮動小数点データタイプに従って格納された2つの変数間でドット積を実行するためのハードウェアアーキテクチャ600を示す。いくつかの実施形態では、ハードウェアアーキテクチャ600は、ニューラルネットワークの訓練及びニューラルネットワークを使用した推論のために使用される人工知能(AI)アクセラレータを実装するために使用することができる。示されるように、ハードウェアアーキテクチャ600は、乗算器605-1~605-nと、シフタ610-1~610-n及び620-1~620-mと、加算器615-1~615-m、625-1~625-k及び630と、切り捨て/四捨五入モジュール635とを含む。
【0039】
[0047] この例の場合、ハードウェアアーキテクチャ600は、2つの入力A及びBを受信するように構成される。入力A及びBの各々は、n個の浮動小数点値を格納する階層的な共有指数浮動小数点データタイプ変数(例えば、データ構造300、データ構造500など)である。各変数の浮動小数点値の仮数値は、対応する乗算器605に入力される。例えば、変数Aの第1の浮動小数点値の仮数値及び変数Bの第1の浮動小数点値の仮数値は、乗算器605-1に入力され、変数Aの第2の浮動小数点値の仮数値及び変数Bの第2の浮動小数点値の仮数値は、乗算器605-2に入力され、変数Aの第3の浮動小数点値の仮数値及び変数Bの第3の浮動小数点値の仮数値は、乗算器605-3に入力されるなどである。示されるように、乗算器605の各々への入力は、dwのビット幅を有する。各乗算器605は、2つの入力仮数値を乗算し、2dwのビット幅を有する積を出力する。乗算器605の出力は、対応するシフタ610に入力され、対応するシフタ610は、シフタ610の上部に描写される制御入力に基づいて右シフトを実行するように構成される。シフタ610に対する制御入力は、乗算器605への入力の各々のレベル1のスケール値の総和である。シフタ610は、制御入力の値に等しい数の右シフト演算を実行する。シフタ610の出力は、2dw+3のビット幅を有する。2つのシフタ610の出力は、対応する加算器615に入力され、対応する加算器615は、2つの入力を合計して、2dw+4のビット幅を有する総和を生成する。プロセスは、対応するレベルスケール値の使用を続け、シフタを制御する(例えば、レベル2のスケール値の総和は、シフタ620-1~620-mを制御するために使用される)。レベルの数は、log(n)によって決定される。上記で言及した通り、nは、変数に格納された浮動小数点値の数である。最後のレベルの出力は、2dw+4log(n)のビット幅を有する。
【0040】
[0048] 切り捨て/四捨五入モジュール635が最後のレベルから出力を受信すると、切り捨て/四捨五入モジュール635は、変数の各々の共有指数値の総和に基づいて、出力の値においてシフト演算を実行する。例えば、共有指数値の総和が正の値である場合、切り捨て/四捨五入モジュール635は、共有指数値の総和に等しい数の左シフト演算を値において実行する。共有指数値の総和が負の値である場合、切り捨て/四捨五入モジュール635は、共有指数値の総和の絶対値に等しい数の右シフト演算を値において実行する。次いで、切り捨て/四捨五入モジュール635は、定義されたビット数で値を切り捨て、出力値Cを生成する。
【0041】
[0049] 図7は、いくつかの実施形態による、階層的な共有指数浮動小数点データタイプ変数を作成するためのプロセス700を示す。いくつかの実施形態では、コンピューティングシステム100がプロセス700を実行する。プロセス700は、710において、複数の浮動小数点値の第1のサブセットの各浮動小数点値の指数値に基づいて第1の共有指数値を決定することによって開始する。例として、図1及び4を参照すると、指数マネージャ110は、浮動小数点値の第1の対のオリジナルの指数値に基づいて、レベル0の共有指数値を決定することができる。
【0042】
[0050] 次に、プロセス700は、720において、複数の浮動小数点値の第2のサブセットの各浮動小数点値の指数値に基づいて第2の共有指数値を決定する。例として、図1及び4を参照すると、指数マネージャ110は、浮動小数点値の第2の対のオリジナルの指数値に基づいて、レベル0の共有指数値を決定することができる。
【0043】
[0051] 次いで、プロセス700は、730において、第1の共有指数値及び第2の共有指数値に基づいて第3の共有指数値を決定する。例として、図1及び4を参照すると、指数マネージャ110は、レベル0の共有指数値に基づいて、レベル1の共有指数値を決定することができる。
【0044】
[0052] 740では、プロセス700は、第1の共有指数値及び第3の共有指数値に基づいて第1の差の値を決定する。例として、図1及び4を参照すると、指数マネージャ110は、レベル0の共有指数値及び対応するレベル1の共有指数値の第1の対に対するレベル1のスケール値を決定することができる。次いで、プロセス700は、750において、第2の共有指数値及び第3の共有指数値に基づいて第2の差の値を決定する。例として、図1及び4を参照すると、指数マネージャ110は、レベル0の共有指数値及び対応するレベル1の共有指数値の第2の対に対するレベル1のスケール値を決定することができる。
【0045】
[0053] 次に、プロセス700は、760において、複数の浮動小数点値の各浮動小数点値のための符号値及び仮数値を決定する。例として、図1及び4を参照すると、仮数マネージャ115は、表400の行445に示されるように、仮数に対する量子化された大きさの値を決定することができる。最後に、770では、プロセス700は、複数の浮動小数点値の各浮動小数点値のための符号値及び仮数値、第3の共有指数値、第1の差の値並びに第2の差の値を、共有指数浮動小数点データタイプのためのデータ構造に格納する。例として、図1及び5を参照すると、HASEFPDTマネージャ105は、仮数値、レベル1の共有指数及びレベル1のスケール値をデータ構造500に格納する。
【0046】
[0054] 上記の技法は、ニューラルネットワークを処理するように構成された広範囲にわたるコンピュータシステムで実施できることを説明する。図8は、前述の開示で説明される技法を実装するために使用することができる例示的なコンピュータシステム800(例えば、コンピューティングシステム100)の簡略ブロック図を描写する。図8に示されるように、コンピュータシステム800は、バスサブシステム804を介して多くの周辺デバイスと通信する1つ又は複数のプロセッサ802を含む。これらの周辺デバイスは、ストレージサブシステム806(例えば、メモリサブシステム808及びファイルストレージサブシステム810を含む)と、ネットワークインタフェースサブシステム816とを含み得る。いくつかのコンピュータシステムは、ユーザインタフェース入力デバイス812及び/又はユーザインタフェース出力デバイス814をさらに含み得る。
【0047】
[0055] バスサブシステム804は、コンピュータシステム800の様々なコンポーネント及びサブシステムを意図した通りに互いに通信させるためのメカニズムを提供することができる。バスサブシステム804は、単一のバスとして概略的に示されているが、バスサブシステムの代替の実施形態は、複数のバスを利用することができる。
【0048】
[0056] ネットワークインタフェースサブシステム816は、コンピュータシステム800と他のコンピュータシステム又はネットワークとの間でデータを通信するためのインタフェースとしての役割を果たすことができる。ネットワークインタフェースサブシステム816の実施形態は、例えば、イーサネット、Wi-Fi及び/又はセルラアダプタ、モデム(電話、衛星、ケーブル、ISDNなど)、デジタル加入者回線(DSL)ユニット及び/又は同様のものを含み得る。
【0049】
[0057] ストレージサブシステム806は、メモリサブシステム808と、ファイル/ディスクストレージサブシステム810とを含む。本明細書で説明されるサブシステム808、810及び他のメモリは、本開示の実施形態の機能性を提供する実行可能なプログラムコード及び/又はデータを格納することができる非一時的なコンピュータ可読記憶媒体の例である。
【0050】
[0058] メモリサブシステム808は、多くのメモリを含み、プログラム実行中に命令及びデータを格納するためのメインランダムアクセスメモリ(RAM)818並びに固定された命令が格納される読み取り専用メモリ(ROM)820を含む。ファイルストレージサブシステム810は、プログラム及びデータファイルのための永続(例えば、不揮発性)記憶装置を提供することができ、磁気若しくはソリッドステートハードディスクドライブ、関連する取り外し可能な媒体を伴う光学ドライブ(例えば、CD-ROM、DVD、Blu-Rayなど)、取り外し可能なフラッシュメモリベースのドライブ若しくはカード及び/又は当技術分野で知られている他のタイプの記憶媒体を含み得る。
【0051】
[0059] コンピュータシステム800は、例示であり、システム800より多い又は少ないコンポーネントを有する他の多くの構成が可能であることが理解されるべきである。
【0052】
[0060] 図9は、いくつかの実施形態によるニューラルネットワーク処理システムを示す。様々な実施形態では、本開示によるニューラルネットワークは、1つ又は複数のニューラルネットワークプロセッサを含むハードウェア環境において実装及び訓練することができる。ニューラルネットワークプロセッサは、例えば、様々なグラフィックス処理ユニット(GPU)(例えば、Nvidia Corp(登録商標)によって生産されたニューラルネットワークを処理するためのGPU)、フィールドプログラマブルゲートアレイ(FPGA)(例えば、Xilinx(登録商標)によって生産されたニューラルネットワークを処理するためのFPGA)又はニューラルネットワーク演算のために最適化されたハードウェアアーキテクチャを含む多様な特定用途向け集積回路(ASIC)若しくはニューラルネットワークプロセッサを指し得る。この例示的な環境では、上記の図8に示されるアーキテクチャを含み得る1つ又は複数のサーバ902は、通信ネットワーク901(例えば、スイッチ、ルータなど)上で複数のコントローラ910(1)~910(M)に結合することができる。コントローラ910(1)~910(M)も、上記の図8に示されるアーキテクチャを含み得る。各コントローラ910(1)~910(M)は、1つ又は複数のNNプロセッサ(例えば、プロセッサ911(1)~911(N)及び912(1)~912(N)など)に結合することができる。NNプロセッサ911(1)~911(N)及び912(1)~912(N)は、ニューラルネットワーク処理(訓練又は推論など)のために最適化された多様な構成の機能処理ブロック及びメモリを含み得る。NNプロセッサは、ニューラルネットワーク演算のために最適化される。サーバ902は、NNモデルを用い、及びデータをモデルに入力するようにコントローラ910を構成することができ、それらのモデルは、例えば、NNプロセッサ911(1)~911(N)及び912(1)~912(N)によってロードし、並列実行することができる。モデルは、例えば、上記で説明されるような層及び関連する重みを含み得る。NNプロセッサは、モデルをロードし、入力を適用して出力結果を生成することができる。NNプロセッサは、例えば、本明細書で説明される訓練アルゴリズムを実施することもできる。
【0053】
さらなる例示的な実施形態
[0061] 様々な実施形態では、本開示は、階層的な共有指数浮動小数点データタイプを提供するためのシステム、方法及び装置を含む。本明細書で説明される技法は、コンピュータシステムによって実行可能なプログラムを格納する非一時的な機械可読媒体において具体化することができ、プログラムは、本明細書で説明される技法を実行するための命令のセットを含む。いくつかの実施形態では、システムは、処理ユニットのセットと、命令を格納する非一時的な機械可読媒体とを含み、命令は、処理ユニットのセットの少なくとも1つの処理ユニットによって実行されると、本明細書で説明される技法を少なくとも1つの処理ユニットに実行させる。いくつかの実施形態では、非一時的な機械可読媒体は、例えば、メモリであり得、例えば、1つ若しくは複数のコントローラ又は1つ若しくは複数の人工知能プロセッサに結合することができる。
【0054】
[0062] 以下の技法は、単独で又は異なる組合せで具体化することができ、本明細書で説明される他の技法でさらに具体化することができる。
【0055】
[0063] 例えば、一実施形態では、本開示は、デバイスの少なくとも1つの処理ユニットによって実行可能なプログラムを格納する非一時的な機械可読媒体を含む。プログラムは、複数の浮動小数点値の第1のサブセットの各浮動小数点値の指数値に基づいて、第1の共有指数値を決定することと、複数の浮動小数点値の第2のサブセットの各浮動小数点値の指数値に基づいて、第2の共有指数値を決定することと、第1の共有指数値及び第2の共有指数値に基づいて、第3の共有指数値を決定することと、第1の共有指数値及び第3の共有指数値に基づいて、第1の差の値を決定することと、第2の共有指数値及び第3の共有指数値に基づいて、第2の差の値を決定することと、複数の浮動小数点値の各浮動小数点値のための符号値及び仮数値を決定することと、複数の浮動小数点値の各浮動小数点値のための符号値及び仮数値、第3の共有指数値、第1の差の値並びに第2の差の値を、共有指数浮動小数点データタイプのためのデータ構造に格納することとを行うための命令のセットを含む。
【0056】
[0064] 一実施形態では、第1の共有指数値、第2の共有指数値及び第3の共有指数値は、共有指数値の階層を形成する。
【0057】
[0065] 一実施形態では、第1の共有指数値及び第2の共有指数値は、共有指数値の階層の第1のレベルの指数値であり、第3の共有指数値は、共有指数値の階層の第2のレベルの指数値である。
【0058】
[0066] 一実施形態では、共有指数値の階層は、第3の共有指数値、第1の差の値及び第2の差の値によって表される。
【0059】
[0067] 一実施形態では、本開示は、第1の共有指数値及び複数の浮動小数点値の第1のサブセットの各浮動小数点数の指数値に基づいて、差の値の第1のセットを決定することと、第2の共有指数値及び複数の浮動小数点値の第2のサブセットの各浮動小数点数の指数値に基づいて、差の値の第2のセットを決定することと、異なる値の第1のセット及び差の値の第2のセットを、共有指数浮動小数点データタイプのためのデータ構造に格納することとをさらに行う。
【0060】
[0068] 一実施形態では、第1の共有指数値を決定することは、最高値を有する、複数の浮動小数点値の第1のサブセットの浮動小数点値の指数値を決定し、及び第1の共有指数値としてその指数値を使用することを含む。
【0061】
[0069] 一実施形態では、第2の共有指数値を決定することは、最高値を有する、複数の浮動小数点値の第2のサブセットの浮動小数点値の指数値を決定し、及び第2の共有指数値としてその指数値を使用することを含む。
【0062】
[0070] 一実施形態では、第3の共有指数値を決定することは、第1の共有指数値が第2の共有指数値以上であると決定すると、第3の指数値として第1の共有指数値を使用し、及び第1の共有指数値が第2の共有指数値未満であると決定すると、第3の指数値として第2の共有指数値を使用することを含む。
【0063】
[0071] 一実施形態では、共有指数浮動小数点データタイプのためのデータ構造に格納された仮数値を表すために使用されるビット数は、第3の指数値を表すために使用されるビット数より少ない。
【0064】
[0072] 上記の説明は、特定の実施形態の態様をどのように実装できるかを示す例と共に、本開示の様々な実施形態を示す。上記の例は、唯一の実施形態であると考えるべきではなく、以下の請求項によって定義されるように、特定の実施形態の柔軟性及び利点を示すために提示される。上記の本開示及び以下の請求項に基づいて、請求項によって定義されるような本開示の範囲を逸脱しない範囲で他の配列、実施形態、実装形態及び均等物を採用することができる。
図1
図2
図3
図4
図5
図6
図7
図8
図9
【国際調査報告】