(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-11-02
(54)【発明の名称】高精度アンカー暗黙処理
(51)【国際特許分類】
G06F 7/499 20060101AFI20231026BHJP
【FI】
G06F7/499 101
【審査請求】有
【予備審査請求】未請求
(21)【出願番号】P 2023524302
(86)(22)【出願日】2021-10-21
(85)【翻訳文提出日】2023-04-20
(86)【国際出願番号】 GB2021052729
(87)【国際公開番号】W WO2022090690
(87)【国際公開日】2022-05-05
(32)【優先日】2020-10-27
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】500395107
【氏名又は名称】アーム・リミテッド
(74)【代理人】
【識別番号】110000855
【氏名又は名称】弁理士法人浅村特許事務所
(72)【発明者】
【氏名】バーゲス、ニール
(72)【発明者】
【氏名】ハインズ、クリストファー ニール
(72)【発明者】
【氏名】ルッツ、デイヴィッド レイモンド
(72)【発明者】
【氏名】フェレイラ、ペドロ オルセン
(57)【要約】
装置は、処理回路と記憶デバイスとを含む。処理回路は、1つ以上の命令に応じて1つ以上の処理動作を実行してアンカーデータ要素を生成するように構成されている。記憶デバイスは、アンカーデータ要素を記憶するように構成される。アンカーデータ要素のフォーマットは、識別項目と、重複項目と、データ項目とを含む。データ項目は、アンカーデータ要素のデータ値を保持するように構成される。識別項目は、データ値に対するアンカー値、又は1つ以上の特殊値を示す。
【選択図】
図3
【特許請求の範囲】
【請求項1】
装置であって、
1つ以上の命令に応じて1つ以上の処理動作を実行してアンカーデータ要素を生成するように構成された処理回路と、
前記アンカーデータ要素を記憶するように構成された記憶デバイスであって、
前記アンカーデータ要素のフォーマットが、識別項目と、重複項目と、データ項目とを含み、
前記データ項目が、前記アンカーデータ要素のデータ値を保持するように構成されており、
前記識別項目が、前記データ値に対するアンカー値、又は1つ以上の特殊値を示す、記憶デバイスと、
を備える、装置。
【請求項2】
前記処理回路が、
複数の前記アンカーデータ要素内の複数の前記データ値を累算することによって結果値を生成し、かつ
前記累算中に前記結果値と関連付けられた前記アンカー値を自動的に変更する、
ように更に構成されている、請求項1に記載の装置。
【請求項3】
前記処理回路が、
複数の初期値を乗算することによって複数の第1の中間値を生成し、
前記複数の第1の中間値を複数の第2の中間値に変換し、前記複数の第2の中間値の各々が前記アンカーデータ要素の前記フォーマットを有し、かつ
前記複数の前記第2の中間値を累算することによって結果値を生成し、前記結果値が前記アンカーデータ要素の前記フォーマットを有する、
ように更に構成されている、請求項1に記載の装置。
【請求項4】
前記複数の初期値が、複数の浮動小数点値である、請求項3に記載の装置。
【請求項5】
前記処理回路が、
複数の初期値の第1のセットを乗算することによって複数の第1の中間値を生成し、
前記複数の初期値の第2のセットを乗算することによって複数の第2の中間値を生成し、
前記複数の第1の中間値を複数の第3の中間値に変換し、前記複数の第3の中間値の各々が前記アンカーデータ要素の前記フォーマットを有し、
前記複数の第2の中間値を複数の第4の中間値に変換し、前記複数の第4の中間値の各々が前記アンカーデータ要素の前記フォーマットを有し、
前記複数の第3の中間値及び前記複数の第4の中間値の上位部分を累算することによって複数の第5の中間値を生成し、前記複数の第5の中間値の各々が前記アンカーデータ要素の前記フォーマットを有し、
前記複数の第3の中間値及び前記複数の第4の中間値の下位部分を累算することによって複数の第6の中間値を生成し、前記複数の第6の中間値の各々が前記アンカーデータ要素の前記フォーマットを有し、
前記複数の第5の中間値を累算することによって第1の結果値を生成し、前記第1の結果値が前記アンカーデータ要素の前記フォーマットであり、かつ
前記複数の第6の中間値を累算することによって第2の結果値を生成し、前記第2の結果値が前記アンカーデータ要素の前記フォーマットである、
ように更に構成されている、請求項1に記載の装置。
【請求項6】
前記複数の初期値の前記第1のセット及び前記複数の初期値の前記第2のセットが、複数の浮動小数点値である、請求項5に記載の装置。
【請求項7】
前記アンカーデータ要素の前記フォーマットが、複数のセットに配置された、単一の前記識別項目と、複数の前記重複項目と、複数の前記データ項目とを含み、前記複数のセットの各々が、前記複数の重複項目のうちの1つ及び前記複数のデータ項目のうちの1つを含む、請求項1に記載の装置。
【請求項8】
前記アンカーデータ要素の前記フォーマットが、互いに連結された、単一の前記識別項目と、単一の前記重複項目と、複数の前記データ項目とを含む、請求項1に記載の装置。
【請求項9】
前記処理回路が、前記識別項目、前記重複項目、及び前記データ項目を、単一のアドレス指定可能な位置に一緒に記憶するように更に構成されている、請求項1に記載の装置。
【請求項10】
前記1つ以上の特殊値が、正の無限大、負の無限大、非数、又はオーバーフローを含む、請求項1に記載の装置。
【請求項11】
データ処理を制御する方法であって、
1つ以上の命令に応じて1つ以上の処理動作を実行してアンカーデータ要素を生成するように処理回路を制御することと、
前記アンカーデータ要素を記憶することであって、
前記アンカーデータ要素のフォーマットが、識別項目と、重複項目と、データ項目とを含み、
前記データ項目が、前記アンカーデータ要素のデータ値を保持するように構成されており、
前記識別項目が、前記データ値に対するアンカー値、又は1つ以上の特殊値を示す、ことと、
を含む、方法。
【請求項12】
複数の前記アンカーデータ要素内の複数の前記データ値を累算することによって結果値を生成することと、
前記累算中に前記結果値と関連付けられた前記アンカー値を自動的に変更することと、
を更に含む、請求項11に記載の方法。
【請求項13】
複数の初期値を乗算することによって複数の第1の中間値を生成することと、
前記複数の第1の中間値を複数の第2の中間値に変換することであって、前記複数の第2の中間値の各々が前記アンカーデータ要素の前記フォーマットを有する、ことと、
前記複数の前記第2の中間値を累算することによって結果値を生成することであって、前記結果値が前記アンカーデータ要素の前記フォーマットを有する、ことと、
を更に含む、請求項11に記載の方法。
【請求項14】
複数の初期値の第1のセットを乗算することによって複数の第1の中間値を生成することと、
前記複数の初期値の第2のセットを乗算することによって複数の第2の中間値を生成することと、
前記複数の第1の中間値を複数の第3の中間値に変換することであって、前記複数の第3の中間値の各々が前記アンカーデータ要素の前記フォーマットを有する、ことと、
前記複数の第2の中間値を複数の第4の中間値に変換することであって、前記複数の第4の中間値の各々が前記アンカーデータ要素の前記フォーマットを有する、ことと、
前記複数の第3の中間値及び前記複数の第4の中間値の上位部分を累算することによって複数の第5の中間値を生成することであって、前記複数の第5の中間値の各々が前記アンカーデータ要素の前記フォーマットを有する、ことと、
前記複数の第3の中間値及び前記複数の第4の中間値の下位部分を累算することによって複数の第6の中間値を生成することであって、前記複数の第6の中間値の各々が前記アンカーデータ要素の前記フォーマットを有する、ことと、
前記複数の第5の中間値を累算することによって第1の結果値を生成することであって、前記第1の結果値が前記アンカーデータ要素の前記フォーマットである、ことと、
前記複数の第6の中間値を累算することによって第2の結果値を生成することであって、前記第2の結果値が前記アンカーデータ要素の前記フォーマットである、ことと、
を更に含む、請求項11に記載の方法。
【請求項15】
前記アンカーデータ要素の前記フォーマットが、複数のセットに配置された、単一の前記識別項目と、複数の前記重複項目と、複数の前記データ項目とを含み、前記複数のセットの各々が、前記複数の重複項目のうちの1つ及び前記複数のデータ項目のうちの1つを含む、請求項11に記載の方法。
【請求項16】
前記アンカーデータ要素の前記フォーマットが、互いに連結された、単一の前記識別項目と、単一の前記重複項目と、複数の前記データ項目とを含む、請求項11に記載の方法。
【請求項17】
前記識別項目、前記重複項目、及び前記データ項目を、単一のアドレス指定可能な位置に一緒に記憶すること、
を更に含む、請求項11に記載の方法。
【請求項18】
データ処理を制御する命令を記憶する非一時的コンピュータ可読記憶媒体であって、前記命令が、プロセッサによって実行されると、前記プロセッサに、
前記命令に応じて1つ以上の処理動作を実行してアンカーデータ要素を生成するように処理回路を制御することと、
前記アンカーデータ要素を記憶することであって、
前記アンカーデータ要素のフォーマットが、識別項目と、重複項目と、データ項目とを含み、
前記データ項目が、前記アンカーデータ要素のデータ値を保持するように構成されており、
前記識別項目が、前記データ値に対するアンカー値、又は1つ以上の特殊値を示す、ことと、
を含む、複数の動作を実行させる、非一時的コンピュータ可読記憶媒体。
【請求項19】
前記複数の動作が、
複数の前記アンカーデータ要素内の複数の前記データ値を累算することによって結果値を生成することと、
前記累算中に前記結果値と関連付けられた前記アンカー値を自動的に変更することと、
を更に含む、請求項18に記載の非一時的コンピュータ可読記憶媒体。
【請求項20】
前記複数の動作が、
複数の初期値を乗算することによって複数の第1の中間値を生成することと、
前記複数の第1の中間値を複数の第2の中間値に変換することであって、前記複数の第2の中間値の各々が前記アンカーデータ要素の前記フォーマットを有する、ことと、
前記複数の前記第2の中間値を累算することによって結果値を生成することであって、前記結果値が前記アンカーデータ要素の前記フォーマットを有する、ことと、
を更に含む、請求項18に記載の非一時的コンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、データ処理に関し、特に、埋め込まれたアンカー値を有する高精度アンカー暗黙(High-Precision Anchored-Implicit:HPAI)数を用いたデータ処理に関する。
【0002】
ニューラルネットワーク及び機械学習などのデータ処理システムにおいて、浮動小数点表現を使用することは一般的である。浮動小数点数は、仮数と、その仮数のビットの有意性を示す指数とを含む。浮動小数点フォーマットにより、有限数のビットを使用して広範囲にわたる数値を表現することが可能になる。しかしながら、浮動小数点数を処理する専用ハードウェアは、しばしば複雑であり、一般的に、整数ベースの数を処理する同等のハードウェアよりも遅い。ハードウェア問題を低減するために、単精度IEEE-754標準浮動小数点フォーマットよりも少ないビットを使用する「16ビットのブレイン浮動小数点(Brain floating-point format with 16 bits)」(bfloat16)フォーマットが作成された。しかしながら、浮動小数点数の総和は非連想的であり、これは、浮動小数点数が異なる順序で加算されるときに異なる結果がもたらされることを意味する。例えば、bfloat16値を伴う計算では、(24+220-220=(220)-220=0である。それに対して、24+(220-220)=24+(0)=24=16である。
【発明の概要】
【0003】
装置が、本明細書で提供される。装置は、処理回路と記憶デバイスとを含む。処理回路は、1つ以上の命令に応じて1つ以上の処理動作を実行してアンカーデータ要素を生成するように構成されている。記憶デバイスは、アンカーデータ要素を記憶するように構成される。アンカーデータ要素のフォーマットは、識別項目と、重複項目と、データ項目とを含む。データ項目は、アンカーデータ要素のデータ値を保持するように構成されている。識別項目は、データ値に対するアンカー値、又は1つ以上の特殊値を示す。
【0004】
データ処理を制御する方法が、本明細書で提供される。方法は、1つ以上の命令に応じて1つ以上の処理動作を実行してアンカーデータ要素を生成するように処理回路を制御することと、アンカーデータ要素を記憶することとを含む。アンカーデータ要素のフォーマットは、識別項目と、重複項目と、データ項目とを含む。データ項目は、アンカーデータ要素のデータ値を保持するように構成されている。識別項目は、データ値に対するアンカー値、又は1つ以上の特殊値を示す。
【0005】
データ処理を制御する命令を記憶する非一時的コンピュータ可読記憶媒体が、本明細書で提供される。命令は、プロセッサによって実行されると、プロセッサに、複数の動作を実行させる。動作には、命令に応じて1つ以上の処理動作を実行してアンカーデータ要素を生成するように処理回路を制御することと、アンカーデータ要素を記憶することとを含む。アンカーデータ要素のフォーマットは、識別項目と、重複項目と、データ項目とを含む。データ項目は、アンカーデータ要素のデータ値を保持するように構成されている。識別項目は、データ値に対するアンカー値、又は1つ以上の特殊値を示す。
【0006】
本開示の上記の特徴及び利点、並びに他の特徴及び利点は、添付の図面に関連において考慮すると、本開示を実施するための最良の形態の以下の詳細な説明から容易に明らかになる。
【図面の簡単な説明】
【0007】
【
図1】1つ以上の例示的な実施形態による、プログラム命令の制御下でデータ処理動作を実行するためのデータ処理デバイスを示す概略図である。
【
図2】1つ以上の例示的な実施形態による、数値の様々な表現を示す概略図である。
【
図3】1つ以上の例示的な実施形態による、アンカーデータ要素の概略図である。
【
図4】1つ以上の例示的な実施形態による、単精度浮動小数点値で表現可能な値の範囲と、アンカーデータ要素の有意性範囲との間の関係を示す概略図である。
【
図5】1つ以上の例示的な実施形態による累算器の概略図である。
【
図6】1つ以上の例示的な実施形態による、HPAI累算器へのbfloat16数の第1の変換の概略図である。
【
図7】1つ以上の例示的な実施形態による、HPAI累算器へのbfloat16数の第2の変換の概略図である。
【
図8】1つ以上の例示的な実施形態による、bfloat16値からアンカーデータ要素への変換データパスの概略図である。
【
図9】1つ以上の例示的な実施形態による、単一レーンHPAI累算データパスの概略図である。
【
図10】1つ以上の例示的な実施形態による、複数レーンHPAI累算シーケンスの概略図である。
【
図11】1つ以上の例示的な実施形態による、別の累算器の概略図である。
【
図12】1つ以上の例示的な実施形態による、2レーンドット4積回路の概略図である。
【
図13】1つ以上の例示的な実施形態による、第1の代替アンカーデータ要素の概略図である。
【
図14】1つ以上の例示的な実施形態による、第2の代替アンカーデータ要素の概略図である。
【
図15】1つ以上の例示的な実施形態による、浮動小数点ドット積回路及びHPAIドット積回路の回路レイアウト合成結果の概略図である。
【発明を実施するための形態】
【0008】
本開示の実施形態は、概して、メタデータがデータと同じオペランドレジスタに記憶されることを可能にする高精度アンカー(High-Precision Anchored:HPA)数のための改善された表現を提供する。メタデータ及びデータを単一のオペランドレジスタに記憶することにより、HPAタイプの乗算-累算命令が可能になる。改善では、対応するデータに対するアンカー値の指示を含むように各オペランドを修正する。改善された表現は、高精度アンカー暗黙(HPAI)数及び/又はアンカーデータ要素と呼ばれ得る。
【0009】
オペランドの識別部分は、累算器回路に対して処理を改善するいくつかの特徴を可能にする「レーン識別」として機能する。識別部分により、追加の入力値が累算されるときにオペランドのデータが動的スケーリングされることを可能にする。動的スケーリング機能は、外部からの関与なしに累算を継続させることを可能にし、プログラマがアンカー値を事前に指定するタスク、及び累算が必要とするようなアンカー値を調整する要件を除去する。オペランドは、入力値が累算されるときに調整される暗黙アンカー値を有する。
【0010】
改善されたフォーマットは、キャリー伝播なしにマルチレーン累算を可能にする重複ビットを保持する。重複ビットは、レーン識別に対する変更がない場合及びレーン識別に対する変更がある場合に、累算スループットを増加させる。オペランド内のデータ項目に対するアンカー値の指示を埋め込むことにより、累算ハードウェアを簡略化する。簡略化されたハードウェアは、累算を実行し、累算がより高い数値範囲に更新されるときにレーン識別値を修正することができる。
【0011】
データ項目の様々な実施形態は、しばしば機械学習アプリケーションにおいて使用される、ドット積を計算するための高速かつシンプルなハードウェアを可能にする。内部計算論理は、物理的サイズに依存せず、かつ結果データサイズに制限されない。これにより、最終結果よりも高い精度の内部計算を提供し、アプリケーションの精度要求を満たすために結果の正確性を増加させ、更に、計算結果が16ビット、32ビット、64ビット、又はそれ以上を含む任意のサイズであることを可能にする。
【0012】
図1を参照すると、1つ以上の例示的な実施形態による、プログラム命令の制御下でデータ処理動作を実行するためのデータ処理デバイス90を示す概略図が示されている。データ処理デバイス90は、記憶要素92とプロセッサコア(又は装置)100とを含む。記憶要素92は、データ94及びプログラム命令96を記憶するように構成されている。プロセッサコア100は、記憶デバイス102と、処理回路104と、命令フェッチユニット106と、命令パイプライン108と、デコーダ110とを含む。実際には、データ処理デバイス90は多くの追加の要素を含んでもよく、
図1の表現は理解を助けるために簡略化されていることが理解されるであろう。
【0013】
データ信号(例えば、D)は、記憶要素92とプロセッサコア100との間で交換される。データ信号Dは、プログラム命令96ごとにプロセッサコア100によって処理されるデータ94と、処理によって生成される結果値とを搬送する。命令信号(例えば、I)は、記憶要素92からプロセッサコア100に転送される。命令信号Iは、プロセッサコア100によって実行されるプログラム命令96を搬送する。
【0014】
記憶要素92は、1つ以上の大容量記憶装置として実装される。記憶要素92は、プロセッサコア100に結合される。記憶要素92は、データ94及びプログラム命令96を記憶するように動作可能である。様々な実施形態では、記憶要素92は、データ信号D及び命令信号Iを介してプロセッサコア100と通信するように構成された、1つ以上のメモリカード、1つ以上のソリッドステートドライブ、及び/又は1つ以上のハードディスクドライブを含む。特定のアプリケーションの設計基準を満たすために、他の形態の記憶装置が記憶要素92内に実装されてもよい。
【0015】
プロセッサコア100は、プログラム命令96を実行してデータ94を操作するように動作可能である。処理回路104は、プログラム命令96のうちの1つ以上に応じて1つ以上の処理動作を実行して、アンカーデータ要素を生成し、かつアンカーデータ要素を記憶するように構成されている。アンカーデータ要素のフォーマットは、識別項目と、重複項目と、データ項目とを含む。データ項目は、アンカーデータ要素のデータ値を保持するように構成されている。識別項目は、データ値に対するアンカー値、又は1つ以上の特殊値を示す。
【0016】
動作において、プログラム命令96は、命令フェッチユニット106によって記憶要素92からフェッチされ、命令パイプライン108に供給される。プログラム命令96が命令パイプライン108内の適切なステージに到達すると、プログラム命令96はデコーダ110によってデコードされ、デコードされたプログラム命令によって指定された処理動作(単数又は複数)を実行するために、記憶デバイス102及び処理回路104の動作を制御するように機能する制御信号を生成する。複数の入力オペランドは、記憶デバイス102から読み出され、処理回路104に供給されて、入力オペランドが操作され、1つ以上のその後の結果値が記憶デバイス102内に書き戻され得る。
【0017】
記憶デバイス102は、様々な異なる形態で実装され得る。様々な実施形態では、記憶デバイス102は、レジスタバンクとして実装される。オペランドは、例えば、浮動小数点オペランド、固定小数点オペランド、整数オペランド、HPAオペランド、及び/又はHPAIオペランドを含み得る。記憶デバイス102は、記憶デバイス102の構成に応じて、これらのタイプのオペランドの混合物を記憶するように機能し得る。オペランドは、そのフォーマットによって事前定義され得るように、又はレジスタと関連付けられたメタデータを使用してプログラム可能に指定され得るように、異なるレベルの精度を有し得る。高精度アンカー暗黙オペランドの更なる詳細は、米国特許第10,579,338号に見出すことができ、その全体が参照により本明細書に組み込まれる。
【0018】
図2を参照すると、1つ以上の例示的な実施形態による、数値の様々な例示的な表現を示す概略図が示されている。単精度浮動小数点オペランド120は、符号、指数、及び、仮数で形成される。単精度浮動小数点オペランド120は、所定のサイズ(例えば、[31:0])を有し、それらの指数値によって示される多種多様な大きさを有する値を表すことができる。数を表現できる精度は、仮数の大きさによって制限される。浮動小数点動作は、一般的に整数演算よりも複雑で、遅い。
【0019】
32ビット整数オペランド122も示されている。整数オペランド122は、所定のサイズ(例えば、[31:0])として、符号なし整数に対して0~232-1の範囲内の数を表し、符号付き整数に対して-231~231-1の範囲内の数を表すことができる。整数演算は、一般的に、(浮動小数点動作と比べて)迅速で、実行するための消費エネルギーも比較的少ないが、浮動小数点値によって表現され得る数の範囲と比べて、指定され得る数が比較的制限された範囲になるというデメリットを被る。
【0020】
更に、高精度アンカー暗黙(HPAI)オペランドが示されている。この例におけるHPAIオペランドは、複数の(この例では3つの)アンカーデータ要素124a~124cのベクトルを含み、各々が、この例では32ビット整数(例えば、[31:0])を含む。HPAIオペランドは、関連付けられたメタデータを有する。メタデータは、アンカーデータ要素124a~124cのうちの1つ以上の中に埋め込まれ、HPAI数の一部を形成する成分のビットの有意性を示すアンカー値を含む。アンカー値(単数又は複数)は、ビット有意性の下限とビット有意性の上限とを、直接的又は間接的に指定するものである。本明細書で使用されるメタデータという用語は、データ値(単数又は複数)に対応すると考えられてもよく、HPAI数のビット有意性を指定するために使用され得る。異なる成分を一緒に使用して、ビット有意性の範囲を連続してスパンするビット値を指定してもよい。ビット有意性の下限とビット有意性の上限との位置に応じて、ビット有意性の範囲は、2進小数点の位置を含むことができる。また、2進小数点の位置が、特定の高精度アンカー暗黙値に対して指定されたビット有意性の範囲の外側にある可能性もある。
【0021】
アンカー値(単数又は複数)は、浮動小数点値(例えば、単精度FP値)によって表現され得る最小有意性から、その浮動小数点値によって表現され得る最大ビット有意性まで及ぶビット有意性の範囲を表現することができるように提供されてもよい。
【0022】
高精度アンカー暗黙数を形成する成分の数は、異なる実装形態間で変化してもよい。成分のサイズは、いくつかの実施形態では固定されているが、他の実施形態では変化してもよい。いくつかの実施形態では、ビット有意性の範囲の全体的な幅は、固定成分サイズの単位で変化するように制約されてもよい(例えば、16ビット成分では、ビット有意性の範囲は、例えば、16、32、64、128、192、256・・・の幅を有し得る)。また、ビット有意性の範囲の幅は、1ビット幅のステップで連続的に変化させることも可能である。
【0023】
アンカーデータ要素内にアンカー値(単数又は複数)を埋め込むことにより、一般に、プログラマが対応するHPAI値の有意性(例えば、アンカー値)を設定及び更新するための手動タスクを排除する。アンカー値は、様々な異なる方法でビット有意性を指定することができる。一例は、各ベクトル成分の下限のビット有意性を指定することである。したがって、各ベクトルの成分は、ビット有意性の全体的な範囲内で値の有効ビットの部分を表す整数値と、その成分内の最下位ビットの有意性を表す(アンカーする)メタデータを含んでもよい。また別のオプションは、アンカー値(単数又は複数)が、高精度アンカー暗黙数全体のビット有意性の下限を、ビット有意性の範囲の全幅とともに指定することである。更なるオプションは、アンカー値(単数又は複数)が、ビット有意性を表す範囲の下限と上限を指定するデータを含むことある。更に、アンカー値(単数又は複数)が、固定幅の成分であることがわかっている成分の数と一緒にビット有意性の範囲の下限を含むなどのバリエーションも可能である。
【0024】
図3を参照すると、1つ以上の例示的な実施形態による、アンカーデータ要素124の例示的な実装形態の概略図が示されている。アンカーデータ要素124は、データ項目130と、重複項目132と、識別項目134とを含む。識別項目134は、レーン項目136と特別項目138とを含む。様々な実施形態では、アンカーデータ要素124は、Nビット(例えば、32ビット)2値ストリングとして表され得る。
【0025】
データ項目130は、アンカーデータ要素124のデータ値を記憶するように構成されている。データ項目130は、アンカーデータ要素124内のDビット(例えば、16ビット)フィールドであり、D<Nである。様々な実施形態では、データ項目130は、アンカーデータ要素124の下位のDビットを占有する。
【0026】
重複項目132は、データ項目130単独で保持され得るよりも高精度のデータを記憶するために、アンカーデータ要素124内にエキストラビットを提供するように構成されている。いくつかの実施形態では、重複項目132は、アンカーデータ要素124内のOビット(例えば、11ビット)フィールドであり、O<Nである。重複項目132は、データ項目130内のデータがそうでなければデータ項目130の境界をオーバーフローしてしまうような加算/累算動作中に使用される。
【0027】
レーン項目136は、レーン識別値を記憶するように構成されている。様々な実施形態では、レーン項目136は、識別項目134を有するLビット(例えば、4ビット)フィールドであり、L<Nである。レーン項目136内のレーン識別値は、データ項目130及び重複項目132内に保持されるデータ値に対するアンカー値である。レーン識別値は、データ値のビット有意性ウィンドウを確立するメタデータを提供する。
【0028】
特別項目138は、識別項目134内の残りのビットが識別値、又はいくつかの可能な特殊値のうちの1つであるときを判定するビット(又はフラグ)を記憶するように構成されている。特別項目138は、識別項目134を有するSビット(例えば、1ビット)フィールドであり、S<Nである。様々な実施形態では、特別項目138が通常値(例えば、論理0値)を保持する一方で、識別項目134内の残りのビットは、レーン識別値として解釈される。特別項目138が所定の値(例えば、論理1値)を保持している間、識別項目134内の残りのビットは、アンカーデータ要素124が正の無限大、負の無限大、非数、及びオーバーフロー指示のうちの1つであることを指定する。識別項目134内のLビットの他の組み合わせを使用して、特定のアプリケーションの設計基準を満たす他の特殊値を表すことができる。
【0029】
項目130~134を単一のNビット要素に組み合わせることにより、Nビット要素は、単一のNビット記憶要素(又はレジスタ)にロードされて記憶され得る。したがって、
図1の処理回路104は、単一のアドレス指定可能な位置に一緒にある、識別項目134、重複項目132、及びデータ項目130にアクセスするように構成されている。
【0030】
図4を参照すると、1つ以上の例示的な実施形態による、単精度浮動小数点値で表現可能な値の範囲と、
図3のアンカーデータ要素124の例示的な有意性範囲との間の関係を示す概略図が示されている。単精度浮動小数点数の場合、指定され得るビット値の範囲140は、一般に、約2
+127~約2
-149に及ぶ。アンカーデータ要素124のビット有意性ウィンドウ142は、範囲140内のどこにあってもよいが、範囲140の一部のみをカバーする。ビット有意性ウィンドウ142は、初期範囲を確立するためにプログラマによってプログラム可能であり得る。ビット有意性ウィンドウ142はまた、内部に保持されたデータ値がウィンドウ142の上限を超えると、アンカーデータ要素124を操作するハードウェアによって自動的に調整されてもよい。
【0031】
図5を参照すると、1つ以上の例示的な実施形態による、例示的な288ビットHPAI累算器150の概略図が示されている。HPAI累算器150は、[+128:-142]の範囲にわたる17レーン累算器(例えば、15、14、...、0、-1)と見なされ得る。各レーンは、累算の16ビットをカバーする。レーン15は、一般に、累算[128:113]をカバーし、レーン14は累算[112:97]をカバーし、以下同様である。レーン1は、任意選択的に、非常に小さい指数(例えば、≦-113)を有する積の最下位ビットのために使用される。隣接するレーン(図示せず)の暗黙11ビット重複は、1つのレーンの重複項目132が隣接するレーン内に延びる場合に存在する。
【0032】
bfloat16数をHPAI累算器150にマッピングすることは、対応するアンカーデータ要素124に対するレーン識別値の判定を伴う。16レーンの場合、レーン識別値は、bfloat指数(例えば、指数[7:4])の4つの最上位ビットとして取得され得る。したがって、bfloat16積は、HPAI累算器150の正しいレーンに配置されるように、~exp[3:0]だけ右にシフトされ得る(例えば、~exp[3:0]==15(10進数)~exp[3:0])。図示の例では、レーン識別値は0(10進数)である。
【0033】
図6を参照すると、1つ以上の例示的な実施形態による、HPAI累算器へのbfloat16数の第1の例示的な変換160の概略図が示されている。+2
-4×1.e01eの例示的な値は、0x7B(16進数)の8ビットbfloat16指数をもたらす。指数の4つの最上位ビット(例えば、0x7)は、レーン識別値を判定する。0xf00f(16進数)の仮数が指数と組み合わされて、0x38000f00(16進数)の32ビット値に対応するHPAI数を戻す。アンカーデータ要素124(HPAI)のデータ項目130は、16ビットのフラクション(例えば、0x0f00)を保持することができる。したがって、元の仮数0xf00fからの12ビット(例えば、0xf00)は、16ビット(例えば、0x0f00)にパディングされたままにされ、レーン7に割り当てられて、元の仮数(例えば、0xf)の最後の4ビットがレーン6に割り当てられる。1レーン変換の場合、レーン6の値は破棄される(例えば、切り捨てられる)。負の積は、宛先重複領域を全て1に設定することになる(図示せず)。
【0034】
図7を参照すると、1つ以上の例示的な実施形態による、HPAI累算器へのbfloat16数の第2の例示的な変換170の概略図が示されている。+2
+4x1.e01e、0x83(16進数)の8ビットbfloat16指数の例示的な値を仮定する。指数の4つの最上位ビット(例えば、0x8)は、レーン識別値を判定する。0xf00f(16進数)の仮数が指数と組み合わされて、0x4000000f(16進数)の32ビット値に対応するHPAI数を戻す。アンカーデータ要素124(HPAI)のデータ項目130は、16ビットのフラクション(例えば、0x000f)を保持することができる。したがって、元の仮数0xf00fからの4ビット(例えば、0xf)は、16ビット(例えば、0x000f)にパディングされたままにされ、レーン8に割り当てられて、元の仮数(例えば、0x00f)の最後の12ビットがレーン7に割り当てられる。1レーン変換の場合、レーン7の値は破棄される(例えば、切り捨てられる)。
【0035】
図8を参照すると、1つ以上の例示的な実施形態による、bfloat16値からアンカーデータ要素124への例示的な変換データパス180の概略図が示されている。データパス180は、プロセッサコア100内に実装され得る。入力bfloat16(BF)積182は、データパス180によって受信され得る。データパス180は、ブロック184と、ブロック186と、ブロック188と、ブロック190と、ブロック192と、ブロック194とを含む。
【0036】
bfloat16積は、ブロック184において、指数、仮数、及び「SIZD」フィールドに解析される。SIZDフィールドは、符号、無限大、0、及び非数インジケータのうちの1つ以上を示す。指数フィールドは、ブロック186において、4つの最上位ビット(例えば、[7:4])及び4つの最下位ビット(例えば、[3:0])に解析される。
【0037】
ブロック188において、SIZDフィールド及び4つの最上位指数ビットを使用して、アンカーデータ要素124の、特別項目138に記憶される特殊値及びレーン項目136に記憶されるレーン識別値の両方が判定される。ブロック190において、16ビットのbfloat16積の仮数及びSIZDフィールドの+符号ビットが、17ビットの2の補数に変換される。2の補数のインクリメントは、後の加算/累算まで延期され得る。HPAI数のビット[16]は、累算される前に、データ項目130内の重複領域全体に符号拡張される。変換された積のビット[16]は、インクリメントすべきか否かを指定する。ブロック192において、bfloat16指数フィールドの下位の4ビットを使用して、2の補数をデータ項目130の16ビットサイズにシフトする。様々な実施形態では、2の補数ブロック190及びシフタブロック192の順序は逆にされてもよい。
【0038】
ブロック194において、識別項目134及びデータ項目130は、ブロック188、190及び192によって判定された値によって、ポピュレートされる。重複項目132は、変換されたbfloat積の符号に応じて、全て0ビット又は全て1でポピュレートされ得る。データパス180の終わりに、bfloat16積182は、処理回路104、及び/又はプロセッサコア100内の他の場所で使用するのに適したアンカーデータ要素124に変換される。
【0039】
図9を参照すると、1つ以上の例示的な実施形態による、例示的な単一レーンHPAI累算データパス200の概略図が示されている。データパス200は、プロセッサコア100内に実装され得る。データパス200は、ブロック202と、ブロック204と、ブロック206と、ブロック208と、ブロック210と、ブロック212と、ブロック214とを含む。図示されたデータパス200の例では、一般に、5+17ビットHPAI bfloat積を5+27ビットHPAI累算器積に加算する。
【0040】
ブロック202において、アンカーデータ要素124に最近変換されたbfloat16積は、17ビットの新しいデータ(例えば、HPAI bfloat)及び5ビットの識別値(例えば、ID1)に解析される。ブロック204において、累算器内に現在ある累算データは、27ビットの累算データ(例えば、HPAI Acc)及び5ビットの識別値(例えば、ID0)に解析され得る。識別値ID0が識別値ID1と比較されるブロック206において、単一の5ビット比較が実行される。比較の結果は、特殊値を考慮して、識別値(ID result)=max(ID1,ID0)である。ID結果は、ブロック208、210、及び214に提示され得る。
【0041】
ブロック208において、新しいデータが非0値を有するか又は0値を有するかを判定するために、選択(例えば、2×27ビットANDゲート)が実行される。選択は、ID結果及び新しいデータに基づく。全重複領域を考慮するために、ブロック208の選択論理は、新しいデータを17ビットから27ビットに符号拡張する。ブロック210において、累算データが非0値を有するか又は0値を有するかを判定するために、選択(例えば、2×27ビットANDゲート)が実行される。選択は、ID結果及び累算データに基づく。ブロック212において、2つの選択ブロック208及び210の結果が加算される。加算は、27ビット整数加算器であり得る。加算器は、HPAI bfloatの2の補数値の完了のためのキャリーイン能力を含んでもよい。
【0042】
27ビット累算データのオーバーフロー検出に応じて、オーバーフロー信号(例えば、ovf)が、ブロック212によってブロック214にアサートされ得る。ブロック214は、ID結果を特殊オーバーフロー値に強制することによって、オーバーフロー信号アサーションに応答する。
【0043】
図10を参照すると、1つ以上の例示的な実施形態による、例示的な複数レーンHPAI累算シーケンス220の概略図が示されている。シーケンス220は、プロセッサコア100内に実装され得る。シーケンス220は、宛先HPAI要素224に新しいデータを累算する複数のレーン222a~222gを含む。シーケンス220は、ステップ226と、ステップ228と、ステップ230と、ステップ232と、ステップ234と、ステップ236と、ステップ238と、ステップ240とを含む。
【0044】
累算加算中、ID(op0)==ID(op1)である場合(例えば、
図9のブロック206)、HPAI要素が加算され、そうでない場合、より大きいID値を有するHPAI要素が利用される。結果値のレーンID(アンカー値)は、累算中に宛先HPAI要素224において更新され得る。再現可能な総和のために、レーンIDは、累算中の増加に対して制限される。新しいbfloat16データ内の特殊値を処理するための規則は、IEEE標準に従うことができる。
【0045】
最初の新しいデータ(例えば、BF#1)は、ステップ226において累算器によって受信され得る。BF#1は、レーン222d及び222e(例えば、レーン4及び5)内に存在する。したがって、累算器は、ステップ228において、最も高いレーン数(例えば、5)を示す識別値とともに、BF#1を宛先HPAI要素224に加算する。BF#1の値は、宛先HPAI要素224のデータ項目130に記憶され得る。
【0046】
その後の新しいデータ(例えば、BF#2)は、ステップ230において累算器によって受信され得る。BF#2は、レーン222c及び222d(例えば、レーン3及び4)内に存在する。識別値の比較中、累算器は、BF#1がBF#2よりも有意に大きいことを判定するため、ステップ232において、宛先HPAI要素224内の結果値を不変のままにする。
【0047】
別の新しいデータ(例えば、BF#3)は、ステップ234において累算器によって受信される。BF#3は、レーン222d及び222e(例えば、レーン4及び5)内に存在する。識別値の比較中、累算器は、BF#1及びBF#3が同じ大きさを有することを判定する。したがって、累算器は、ステップ236において、結果値に既に記憶されているBF#1にBF#3を加算する。この例では、BF#3のBF#1への加算によるオーバーフローは発生しないため、宛先HPAI要素224内の識別値はレーン5のままである。
【0048】
別の新しいデータ(例えば、BF#4)は、ステップ238において累算器で受信される。BF#4は、レーン222f(例えば、レーン6)内に存在する。レーン識別値の比較中、累算器は、BF#4が、累算されたデータのレーン識別値(例えば、5)よりも高いレーン識別値(例えば、6)を有することを判定する。BF#4はBF#1+BF#3よりも有意に大きいため、累算器は、ステップ240において、宛先HPAI要素224内の結果値をBF#4に置換し、識別値を6に自動的に更新する。シーケンス220は、データの全てが合計されるか又はオーバーフローが発生するまで、更なる新しいデータの加算を継続することができる。オーバーフローが発生した場合、累算動作は継続することができるが、その結果は、「オーバーフロー」を表す特殊値として保持される。
【0049】
図11を参照すると、1つ以上の例示的な実施形態による、累算器260の例示的な実装形態の概略図が示されている。累算器260は、プロセッサコア100内に実装され得る。累算器260は、第1のベクトル記憶要素262と、第2のベクトル記憶要素264と、積値266と、複数の浮動小数点乗算器268と、複数のbfloat16-HPAI変換ユニット270と、複数のHPAI加算器272と、結果ベクトル記憶要素274とを含む。累算されている初期値は、複数の浮動小数点値(例えば、複数のbfloat16値)であり得る。
【0050】
複数(例えば、8個)の初期値が、第1のベクトル記憶要素262に記憶され、複数(例えば、8個)の追加の初期値が、第2のベクトル記憶要素264に記憶される。第1のベクトル記憶要素262及び第2のベクトル記憶要素264からの初期値の対は、積値266として整列される。
【0051】
浮動小数点乗算器268は、初期積値266を乗算することによって、複数の第1の中間値を生成する。bfloat16-HPAI変換ユニット270は、第1の中間値を複数の第2の中間値に変換する。第2の中間値の各々は、アンカーデータ要素124(例えば、
図3)のフォーマットを有する。HPAI加算器272は、2つの第2の中間値と1つの局所的に累算された値との3:1累算によって、対応する結果値を生成する。各結果値は、アンカーデータ要素124のフォーマットを有する。累算が完了すると、結果値は、結果ベクトル記憶要素274内にロードされ得る。
【0052】
図12を参照すると、1つ以上の例示的な実施形態による、例示的な2レーンドット4積回路280の概略図が示されている。ドット4積回路280は、プロセッサコア100内に実装され得る。ドット4積回路280は、第1のベクトル記憶要素282と、第2のベクトル記憶要素284と、第3のベクトル記憶要素286と、複数対の浮動小数点乗算器288a~288bと、bfloat16-HPAI変換器289a~289bの複数の対と、HPAI加算器290a~290bの複数の対と、HPAI累算器292a~292bの複数の対と、結果ベクトル記憶要素294とを含む。第1のベクトル記憶要素282及び第2のベクトル記憶要素284に保持された初期値は、複数の浮動小数点値(例えば、複数のbfloat16値)であり得る。
【0053】
ドット4積回路280は、一般に、ドット4積を以下のように計算する。
【0054】
D[0]+=(Zn[0]*Zm[0])+(Zn[1]*Zm[1])+(Zn[2]*Zm[2])+(Zn[3]*Zm[3])
【0055】
D[1]+=(Zn[4]*Zm[4])+(Zn[5]*Zm[5])+(Zn[6]*Zm[6])+(Zn[7]*Zm[7])
【0056】
第1のベクトル記憶要素282及び第2のベクトル記憶要素284に保持された初期値の対は、第3のベクトル記憶要素286に解析される。浮動小数点乗算器288a~288bは、複数の初期値の第1のセットを乗算することによって複数の第1の中間値を生成し、初期値の第2のセットを乗算することによって複数の第2の中間値を生成する。続いて、HPAI変換回路289a~289bは、第1中間値を複数の第3の中間値に変換し、第2の中間値を複数の第4の中間値に変換する。第3の中間値及び第4の中間値は、アンカーデータ要素124のフォーマットを有する。
【0057】
アンカーデータ要素フォーマットのデータを用いて、HPAI加算器290aは、第3の中間値及び第4の中間値の上位部分を累算することによって複数の第5の中間値を生成する。HPAI加算器290bは、第3中間値及び第4中間値の下位部分を累算することによって複数の第6中間値を生成する。第5の中間値及び第6の中間値は、アンカーデータ要素124のフォーマットを有する。
【0058】
HPAI累算器292aは、第5の中間値を累算することによって複数の第1の結果値を生成する。HPAI累算器292bは、第6の中間値を累算することによって複数の第2の結果値を生成する。第1の結果値及び第2の結果値は、アンカーデータ要素124のフォーマットを有する。第1の結果値は、結果ベクトル記憶要素294の高位部分にロードされる。第2の結果値は、結果ベクトル記憶要素294の低位部分にロードされる。
【0059】
ドット4積回路280は、一般に、有意性の低いビットのみを含む32ビットの動的スケーリングされたHPAI結果値を扱う問題を解決する。64ビット結果値の2つの部分は、2つの32ビットHPAIレーンを含む。更に、結果値は、共有された共通HPAIレーン識別値を使用することができる。ドット4積回路280は、1サイクルあたり128ビットごとに約8回の乗算を実行するため、同等のbfloat16のドット4積回路と同様の性能を有するが、ニューラルネットワークアプリケーションではより高い精度及びより良好な正確性を有する。
【0060】
図13を参照すると、1つ以上の例示的な実施形態による、例示的な第1の代替アンカーデータ要素124dの概略図が示されている。第1の代替アンカーデータ要素124dは、単一の識別項目134と、重複/データ項目の複数の(例えば、図示された2つの)セット300及び302とを含む。各セット300及び302は、重複項目のうちの1つ及びデータ項目のうちの1つを含む。各セット300及び302は、データ(16ビット)及び対応する重複(13ビット)に対して39ビットを提供する。第1の代替アンカーデータ要素124dは、64ビットの2レーンHPAI要素を提供する。識別値のインクリメントに応じて、下位の重複ビット/データビットは、上位の重複ビット/データビットによって置換されてもよく、元の下位も重複ビット/データビットはドロップされる。
【0061】
図14を参照すると、1つ以上の例示的な実施形態による、例示的な第2の代替アンカーデータ要素124eの概略図が示されている。第2の代替アンカーデータ要素124eは、単一の識別項目134と、単一の重複項目132と、複数の(例えば、図示された3つの)データ項目130a~130cとを含む。各データ項目130a~130cは、16ビットのデータを提供する。第2の代替アンカーデータ要素124eは、一般に、64ビットの3レーンHPAI要素を提供する。識別値のインクリメントに応じて、重複ビット及びデータビットは、16ビットだけ右にシフトされてもよく、最下位の16ビットはドロップされる。この方式により、より多数の結果ビットを保持する見返りに、累算の再現性特性を除去する。
【0062】
図15を参照すると、1つ以上の例示的な実施形態による、浮動小数点ドット積回路320及びHPAIドット積回路340の例示的な回路レイアウト合成結果の概略図が示されている。回路320及び340の両方の入力は、bfloat16値を受信するように設計される。浮動小数点ドット積回路320は、16ビット浮動小数点乗算器322のセットと、25ビット浮動小数点残余丸めゼロクリア加算器324と、32ビット浮動小数点残余丸めゼロクリア加算器326と、追加のフロップ328とを含む。HPAIドット積回路340は、16ビット浮動小数点乗算器342と、浮動小数点からHPAIへの変換、加算器及び累算回路344とのセットを含む。
【0063】
合成結果は、HPAIドット積回路340が浮動小数点ドット積回路320よりも約2.3倍小さいことを示している。HPAIドット積回路340は、bfloat16からHPAIへの変換、積の合計、及び累算の単一サイクル実行を実装する。bfloat16乗算器322及び342は、回路320及び340の両方において本質的に同じである。HPAIドット積回路340は、積指数比較器を排除する。
【0064】
HPAI累算回路344は、25ビット浮動小数点/32ビット浮動小数点加算器対324及び326よりも約3倍小さい。特に、HPAI累算回路344は、単一の完全IEEE準拠32ビット浮動小数点加算器の約54%のサイズを占有する(例えば、228フロップで808マイクロメートル平方)。HPAI変換、加算器及び累算回路344は、変換、積の合計、及び累算の単一サイクル実行を提供する。累算回路344は、2つのbfloat16積のキャリーセーブ加算器を有し、加算器にはパイプラインフロップを欠く。
【0065】
bfloat処理は、アンカーデータ要素内の「暗黙」メタデータの使用をサポートする。例えば、25ビット浮動小数点積(例えば、1ビット符号、8ビット指数、16ビットフラクション)は、2-126~2+127の範囲を有する。したがって、bfloat処理は、全幅「Kulisch」累算器内の全ての可能な積に対応することができる(acc[127:-141]=269ビット)。bfloat指数の4つの最上位ビットは、アンカーデータ要素124内に埋め込まれたレーン識別値(又はアンカー値)として使用されてもよい。埋め込まれたレーン識別(アンカー)値により、プログラマがメタデータを指定するための手動タスクを除去し、3レジスタ乗算(浮動小数点)-累算(HPAI)命令を可能にする。
【0066】
アンカーデータ要素フォーマットは、32ビット浮動小数点加算器よりも有意に小さく、かつより低いレイテンシ(例えば、より少ないパイプラインフロップ)を有するHPAI加算器を提供する。アンカーデータ要素表現は、ドット積命令(乗算-累算)をサポートすることができる。更に、bfloat命令のHPAIバージョンが、成功裏にコードアップされ、TensorFlow(Google Brainチームによって開発されたオープンソースソフトウェアライブラリ)に統合されている。
【0067】
装置の1つ以上の実施形態では、処理回路は、複数のアンカーデータ要素内の複数のデータ値を累算することによって結果値を生成し、かつ累算中に結果値と関連付けられたアンカー値を自動的に変更する、ように更に構成されている。
【0068】
装置の1つ以上の実施形態では、処理回路は、複数の初期値を乗算することによって複数の第1の中間値を生成し、複数の第1の中間値を複数の第2の中間値に変換し、複数の第2の中間値の各々はアンカーデータ要素のフォーマットを有し、かつ複数の第2の中間値を累算することによって結果値を生成する、ように更に構成される。結果値は、アンカーデータ要素のフォーマットを有する。
【0069】
装置の1つ以上の実施形態では、複数の初期値は、複数の浮動小数点値である。
【0070】
装置の1つ以上の実施形態では、処理回路は、複数の初期値の第1のセットを乗算することによって複数の第1の中間値を生成し、複数の初期値の第2のセットを乗算することによって複数の第2の中間値を生成し、複数の第1の中間値を複数の第3の中間値に変換し、複数の第3の中間値の各々がアンカーデータ要素のフォーマットを有し、複数の第2の中間値を複数の第4の中間値に変換し、複数の第4の中間値の各々がアンカーデータ要素のフォーマットを有し、複数の第3の中間値及び複数の第4の中間値の上位部分を累算することによって複数の第5の中間値を生成し、複数の第5の中間値の各々がアンカーデータ要素のフォーマットを有し、複数の第3の中間値及び複数の第4の中間値の下位部分を累算することによって複数の第6の中間値を生成し、複数の第6の中間値の各々がアンカーデータ要素のフォーマットを有し、複数の第5の中間値を累算することによって第1の結果値を生成し、第1の結果値がアンカーデータ要素のフォーマットであり、かつ複数の第6の中間値を累算することによって第2の結果値を生成し、第2の結果値がアンカーデータ要素のフォーマットである、ように更に構成されている。
【0071】
装置の1つ以上の実施形態では、複数の初期値の第1のセット及び複数の初期値の第2のセットは、複数の浮動小数点値である。
【0072】
装置の1つ以上の実施形態では、アンカーデータ要素のフォーマットは、複数のセットに配置された、単一の識別項目と、複数の重複項目と、複数のデータ項目とを含み、複数のセットの各々は、複数の重複項目のうちの1つ及び複数のデータ項目のうちの1つを含む。
【0073】
装置の1つ以上の実施形態では、アンカーデータ要素のフォーマットは、互いに連結された、単一の識別項目と、単一の重複項目と、複数のデータ項目とを含む。
【0074】
装置の1つ以上の実施形態では、処理回路は、識別項目、重複項目、及びデータ項目を単一のアドレス指定可能な位置に一緒に記憶するように更に構成されている。
【0075】
装置の1つ以上の実施形態では、1つ以上の特殊値は、正の無限大、負の無限大、非数、又はオーバーフローを含む。
【0076】
1つ以上の実施形態では、方法は、複数のアンカーデータ要素内の複数のデータ値を累算することによって結果値を生成することと、累算中に結果値と関連付けられたアンカー値を自動的に変更することとを更に含む。
【0077】
1つ以上の実施形態では、方法は、複数の初期値を乗算することによって複数の第1の中間値を生成することと、複数の第1の中間値を複数の第2の中間値に変換することであって、複数の第2の中間値の各々がアンカーデータ要素のフォーマットを有する、ことと、複数の第2の中間値を累算することによって結果値を生成することであって、結果値がアンカーデータ要素のフォーマットを有する、ことと、を更に含む。
【0078】
1つ以上の実施形態では、方法は、複数の初期値の第1のセットを乗算することによって複数の第1の中間値を生成することと、複数の初期値の第2のセットを乗算することによって複数の第2の中間値を生成することと、複数の第1の中間値を複数の第3の中間値に変換することであって、複数の第3の中間値の各々がアンカーデータ要素のフォーマットを有する、ことと、複数の第2の中間値を複数の第4の中間値に変換することであって、複数の第4の中間値の各々がアンカーデータ要素のフォーマットを有する、ことと、複数の第3の中間値及び複数の第4の中間値の上位部分を累算することによって複数の第5の中間値を生成することであって、複数の第5の中間値の各々がアンカーデータ要素のフォーマットを有する、ことと、複数の第3の中間値及び複数の第4の中間値の下位部分を累算することによって複数の第6の中間値を生成することであって、複数の第6の中間値の各々がアンカーデータ要素のフォーマットを有する、ことと、複数の第5の中間値を累算することによって第1の結果値を生成することであって、第1の結果値がアンカーデータ要素のフォーマットである、ことと、複数の第6の中間値を累算することによって第2の結果値を生成することであって、第2の結果値がアンカーデータ要素のフォーマットである、ことと、を更に含む。
【0079】
方法の1つ以上の実施形態では、アンカーデータ要素のフォーマットは、複数のセットに配置された、単一の識別項目と、複数の重複項目と、複数のデータ項目とを含み、複数のセットの各々は、複数の重複項目のうちの1つ及び複数のデータ項目のうちの1つを含む。
【0080】
方法の1つ以上の実施形態では、アンカーデータ要素のフォーマットは、互いに連結された、単一の識別項目と、単一の重複項目と、複数のデータ項目とを含む。
【0081】
1つ以上の実施形態では、方法は、識別項目、重複項目、及びデータ項目を単一のアドレス指定可能な位置に一緒に記憶することを更に含む。
【0082】
非一時的コンピュータ可読記憶媒体の1つ以上の実施形態では、複数の動作は、複数のアンカーデータ要素内の複数のデータ値を累算することによって結果値を生成することと、累算中に結果値と関連付けられたアンカー値を自動的に変更することと、を更に含む。
【0083】
非一時的コンピュータ可読記憶媒体の1つ以上の実施形態では、複数の動作は、複数の初期値を乗算することによって複数の第1の中間値を生成することと、複数の第1の中間値を複数の第2の中間値に変換することであって、複数の第2の中間値の各々がアンカーデータ要素のフォーマットを有する、ことと、複数の第2の中間値を累算することによって結果値を生成することであって、結果値がアンカーデータ要素のフォーマットを有する、ことと、を更に含む。
【0084】
本開示を実施するための最良の形態を詳細に説明してきたが、本開示が関連する技術に精通している者であれば、添付の特許請求の範囲内で本開示を実施するための様々な代替設計及び実施形態を認識するであろう。
【国際調査報告】