以下の詳細な説明は、例にすぎず、実施形態、または実施形態の適用もしくは使用、あるいはその両方を制限するよう意図されていない。さらに、先行する「背景技術」または「発明の概要」のセクション、あるいは「発明を実施するための形態」のセクションで提示された、いずれかの明示されたか、または暗示された情報によって制約されるという意図はない。
ここで、図面を参照して1つまたは複数の実施形態が説明され、図面全体を通じて、類似する参照番号が、類似する要素を参照するために使用されている。以下の説明では、説明の目的で、1つまたは複数の実施形態を十分に理解できるように、多数の特定の詳細が示されている。しかし、これらの特定の詳細がなくても、さまざまな事例において、1つまたは複数の実施形態が実践され得るということは明らかである。
例えば、深層学習アプリケーションなどの特定の種類のアプリケーションは、リソースに関して要求が厳しい(例えば、計算的に要求が厳しい)ワークロードを有していることがある。例えば、複数のグラフィックス・プロセッシング・ユニット(GPU:graphics processing units)を備えるシステムを使用する場合でも、深層ネットワークのトレーニングには、かなりの時間(例えば、数日または数週間)がかかることがある。複数のGPUから成るシステム上で、一部の深層学習ベンチマーク用のアルゴリズムのトレーニングが収束するのに、かなりの時間(例えば、数週間)がかかることがある。
このような種類のアプリケーションを大幅に高速化するために、特殊なアクセラレータが役立つことがある。面積(例えば、スループット/ミリメートル2(mm2))および電力(スループット/ワット)の両方に関して浮動小数点計算の相対的に大きいスループット密度を提供できるそのような特殊なアクセラレータは、将来の深層学習システム非常に役立つ可能性がある。
認知計算のワークロードの場合、倍(例えば、64ビット)精度表現および単(例えば、32ビット)精度表現の使用は不必要であり、非効率的であることがある。認知計算ワークロードなどの重い計算ワークロードに関して、面積および電力消費量の両方の指標を改善するための1つの方法は、計算の大部分を実行するために、より小さいビット幅の浮動小数点表現を使用することである場合がある。例えば、丸め誤差の影響を比較的受けやすい計算などの、計算の相対的に小さい部分を、単精度形式を使用して実行することができ、一方、計算の大部分(例えば、丸め誤差の影響を実質的に受けない計算)を、より低い精度(例えば、16ビット)の形式を使用して実行できる。そのような単精度形式とより低い精度の形式の間の計算の分割は、(例えば、より低い精度の形式を使用する)望ましい数の(例えば、多くの)より低い精度のエンジン、および(例えば、より高い(例えば、単)精度の形式を使用する)比較的少数のより高い精度のエンジンの使用を可能にすることができる。
より低い精度(例えば、16ビット)の形式を構造化できる1つの方法は、データ交換形式として使用できる、単一の符号ビット、5ビットの指数、および10ビットの仮数を含むことができる1/5/10形式(例えば、IEEE 754半精度(1/5/10)形式)を有することである。しかし、1/5/10形式は、比較的制限されたダイナミック・レンジを有する可能性があるため、大量の計算を伴うアプリケーション、特に、深層ニューラル・ネットワークのトレーニングには適していないことがある。単精度形式を使用してより重要な計算(例えば、丸め誤差の影響を受けやすい計算)が実行され、1/5/10形式を使用して計算の大部分が実行される場合、トレーニングされたネットワークの品質が、複数のベンチマーク・アプリケーションの基準値と比較して大幅に低下する。例えば、トレーニング中の計算の大部分に1/5/10形式を使用する場合、Watson Natural Languageトレーニングでは、精度が、適合性に関する60%のベンチマークを下回り(例えば、精度が適切でなかったことを示し)、AlexNet Image Classificationトレーニングでは、計算が全く収束しなかった。
しかし、改善されたスループット密度のために、より低い精度(例えば、16ビット)の浮動小数点演算を使用することが望ましい場合がある。ただし、より低い精度の浮動小数点数形式の使用が(例えば、深層ニューラル・ネットワークおよびその他の深層学習トレーニングなどの、大量の計算を伴うアプリケーションにおいて)実現可能になるにためには、より低い精度の浮動小数点数形式が、計算負荷の高いアプリケーション(例えば、機械トレーニングおよび深層学習トレーニングのタスクなど)に関連するプログラムおよびアルゴリズムの十分速い収束ならびに計算負荷の高いアプリケーションの十分小さいエラー率を可能にすることが望ましい場合がある。
本明細書に記載されたさまざまな実施形態は、改良された浮動小数点数形式(例えば、改良されたより低い精度の浮動小数点数形式)を使用して浮動小数点数(例えば、2進浮動小数点数)を処理すること、生成すること、および計算することに関連している。改良された浮動小数点数形式は、広範囲の機械トレーニングおよび深層学習トレーニングのタスクにとって十分であることができ、融合型乗加算演算16ビット浮動小数点ユニット(融合型乗加算演算16ビットFPU)の面積効率および電力効率の高い実装を可能にすることができる。改良された浮動小数点数形式(例えば、改良されたより低い精度(例えば、16ビット)の浮動小数点数形式)は、算術計算形式およびデータ交換形式として使用できる、単一の符号ビット、6ビットの指数、および9ビットの仮数を含むことができる1/6/9形式を有することができる。1/5/10形式と比較して、改良された浮動小数点数形式は、1つ多い指数ビットを含むことができ、小数が1ビット少なくなることができる。改良された浮動小数点数形式の、追加の(例えば、第6の)指数ビットを含む指数用の6ビットは、機械トレーニングおよび深層学習トレーニングのアルゴリズムを十分速く収束させるために望ましい追加の指数範囲を提供することができ、改良された浮動小数点数形式は、機械トレーニングおよび深層学習アプリケーションならびに関連するタスクなどの、計算負荷の高いアプリケーションにとって望ましい低いエラー率を有することもできる。
改良された浮動小数点数形式は、最低のバイネード(例えば、すべてゼロである指数フィールドを含むデータ点)に対して指定された定義を採用することもできる。1/5/10形式などの、他の浮動小数点数形式(例えば、より低い精度の浮動小数点数形式)は、最低のバイネードを非正規数およびゼロに使用することができる。これに対して、改良された浮動小数点数形式では、最低のバイネードの指定された定義に従って、最低のバイネードをゼロおよび正規数に使用することができる。改良された浮動小数点数形式の指数フィールドは1/5/10形式より1ビット広いため、改良された浮動小数点数形式(例えば、1/6/9形式)は、最後のバイネードにおける正規数でも、1/5/10形式が非正規数で0の値に近づくことができる近さよりも近く、0の値に近づくことができる。非正規数のハードウェア支援は、比較的費用がかかることがあり、通常の融合型乗加算演算浮動小数点ユニットの深さ(例えば、合計ゲート遅延)を増大させる可能性がある。開示される対象は、最低のバイネードに対して指定された定義を採用することによって、非正規数を使用することを避けることができ、その結果、ハードウェアの使用および支援に関して、開示される対象をより効率的にすることができ、1/5/10形式などの他の形式と比較して、融合型乗加算演算16ビットFPUの深さ(例えば、合計ゲート遅延)を増大させるのを防ぐことができる。
改良された浮動小数点数形式は、最高のバイネード(例えば、すべて1である指数フィールドを含むデータ点)に対して指定された定義を利用することもできる。特定の他の浮動小数点形式は、最高のバイネードを、非数(NaN:not-a-number)および無限大などの特殊な値のみに使用する。これに対して、一部の実施形態では、改良された浮動小数点数形式での最高のバイネードの指定された定義に従って、最高のバイネードの望ましい部分(例えば、ほとんど)を有限の数に使用することができ、最高のバイネードの1つのデータ点を、NaNおよび無限大(例えば、マージされたNaN/無限大)などの特殊な値に使用することができる。改良された浮動小数点数形式は、そのような指定された定義を最高のバイネードに利用することによって、1/5/10形式などの他の浮動小数点数形式(例えば、より低い精度の浮動小数点数形式)と比較して、相対的により大きいデータ範囲を可能にすることができ、特に、改良された浮動小数点数形式に採用される論理が、NaNと無限大の値を区別する必要がないため、相対的により単純なハードウェアを利用することができる。
一部の実施形態では、改良された浮動小数点数形式は、ゼロの符号を「ドントケア」項として定義することができ、これによって、1/5/10形式などの他の浮動小数点数形式と比較して、ゼロの符号の処理を単純にすることができる。例えば、1/5/10形式のような他の形式は、ゼロの符号の取得方法に関して、比較的複雑なルールを有することがある。しかし、例えば深層学習アプリケーションなどの多くのアプリケーションの場合、ゼロの符号は重要でない。改良された浮動小数点数形式は、そのようなアプリケーションにおいてゼロの符号が重要でないということを考慮することができ、改良された浮動小数点数形式では、ゼロの符号を「ドントケア」項にすることができる。例えば、浮動小数点数がゼロである場合、ゼロの値の符号の項またはシンボルを表すために、(例えば、プロセッサ・コンポーネントまたは計算コンポーネントによって)符号フィールドに対して任意の値が生成され得る。システム(例えば、プロセッサ・コンポーネントまたは計算コンポーネント)が生成するために便利または効率的な(例えば、最も便利または最も効率的な)任意の値またはシンボルを生成し、符号フィールドに挿入することができる。これによって、改良された浮動小数点数形式に関連して利用されるハードウェアおよび論理を相対的に単純にすることができ、他の浮動小数点数形式(例えば、1/5/10形式)に使用されるハードウェアよりも、利用されるハードウェアおよびハードウェア・リソース(および論理リソース)を少なくすることができる。
特定の実施形態では、改良された浮動小数点数形式は、マージされたNaN/無限大シンボルの符号を「ドントケア」項として定義することができ、これによって、NaNおよび無限大の符号が他の形式(例えば、1/5/10形式)で処理される方法と比較して、マージされたNaN/無限大シンボルの符号の処理を相対的に単純にすることができる。例えば、特定の他の形式は、NaNおよび無限大の符号の取得方法に関して、特に、加算/減算演算および乗加算演算に関して、比較的複雑なルールを有することがある。しかし、深層学習アプリケーションを含む多くのアプリケーションの場合、NaNおよび無限大の符号は重要でない。その場合、改良された浮動小数点数形式では、マージされたNaN/無限大シンボルの符号を「ドントケア」項にすることができる。例えば、浮動小数点数がNaNまたは無限大である場合、マージされたNaN/無限大シンボルの符号の項またはシンボルを表すために、(例えば、プロセッサ・コンポーネントまたは計算コンポーネントによって)符号フィールドに対して任意の値が生成され得る。システム(例えば、プロセッサ・コンポーネントまたは計算コンポーネント)が生成するために便利または効率的な(例えば、最も便利または最も効率的な)任意の値またはシンボルを生成し、マージされたNaN/無限大シンボルに関連付けられた符号フィールドに挿入することができる。これによって、改良された浮動小数点数形式に関連して利用されるハードウェアおよび論理を相対的に単純にすることができ、他の形式(例えば、1/5/10形式)に使用されるハードウェアよりも、利用されるハードウェアおよびハードウェア・リソース(および論理リソース)を少なくすることができる。
改良された浮動小数点数形式は、1/5/10形式のような他の種類の形式によって利用される丸めモードよりも実装を単純にすることができる、丸めモードを採用することもできる。例えば、改良された浮動小数点数形式は、最も近い値に切り上げるためであることができる、単一の丸めモードを採用することができる。一部の他の種類の形式(例えば、1/5/10形式)は、最も近い値に切り上げること、最も近い値に切り下げること、または偶数に丸めること、0に丸めること、+無限大に丸めること、および−無限大に丸めることなどの、さらに複雑な丸めモードを採用することができる。改良された浮動小数点数形式による、最も近い値に切り上げる丸めモードなどの単一の比較的単純な丸めモードの使用は、浮動小数点数を丸めるために使用されるハードウェアおよび論理の量を大幅に減らしながら、システムのトレーニング(例えば、機械トレーニングまたは深層学習トレーニング)の実行速度および品質を含めて、ワークロードの実行に対して影響を与えないか、または少なくとも実質的に影響を与えないことができる。
ここで、開示される対象のこれらおよびその他の態様および実施形態が、図面に関して説明される。
図1は、開示される対象のさまざまな態様および実施形態に従って、改良された浮動小数点数形式を使用して浮動小数点数(例えば、2進浮動小数点数)を処理すること、生成すること、または計算すること、あるいはその組み合わせを実行するために採用され得る、例示的な非限定的システム100のブロック図を示している。システム100の改良された浮動小数点数形式は、広範囲の機械学習および深層学習トレーニングのタスクにとって十分であることができ、融合型乗加算演算16ビット浮動小数点ユニット(融合型乗加算演算16ビット(FPU))の面積効率および電力効率の高い実装を可能にすることができる。さまざまな実施形態に従って、システム100は、1つまたは複数の融合型乗加算演算16ビットFPUを備えるか、そのようなFPUの一部になるか、またはそのようなFPUに関連付けられることができる。
改良された浮動小数点数形式(例えば、改良されたより低い精度(例えば、16ビット)の浮動小数点数形式)は、算術計算形式およびデータ交換形式として使用できる、単一の符号ビット、6ビットの指数、および9ビットの仮数を含むことができる1/6/9浮動小数点数形式を備えることができる。一部分において、6ビットを指数に使用することによって(例えば、5ビットを指数に使用するのとは対照的に)、改良された浮動小数点数形式は、機械学習アルゴリズム、深層学習トレーニング・アルゴリズム、またはその他の計算負荷の高いトレーニング・アルゴリズム、あるいはその組み合わせを十分速く収束させるために望ましい追加の指数範囲を提供することができ、改良された浮動小数点数形式は、計算負荷の高いアプリケーション(例えば、機械トレーニングまたは深層学習アプリケーション)にとって望ましい低いエラー率を有することもできる。本明細書では、改良された浮動小数点数形式のその他の態様および実施形態が、さらに詳細に説明される。
システム100は、データ・ストア104および計算コンポーネント106に関連付けられ得るプロセッサ・コンポーネント102を備えることができる。プロセッサ・コンポーネント102は、システム100のさまざまな機能の実行を容易にするために、他のコンポーネント(例えば、データ・ストア104、計算コンポーネント106など)と連動して動作することができる。プロセッサ・コンポーネント102は、改良された浮動小数点数形式、浮動小数点数を処理すること、生成すること、もしくは計算すること、またはその組み合わせ、アプリケーション(例えば、機械学習、深層学習、または認知計算アプリケーション)、機械もしくはシステムのトレーニング、数値の形式設定もしくは計算に関連するパラメータ、データ・トラフィック・フロー(例えば、コンポーネントもしくはデバイス間、またはネットワーク全体、あるいはその組み合わせ)、アルゴリズム(例えば、アプリケーションに関連するアルゴリズム、改良された浮動小数点数形式設定アルゴリズム、浮動小数点数計算アルゴリズム、数値丸めアルゴリズムなど)、プロトコル、ポリシー、インターフェイス、ツールに関連する情報、または本明細書で詳細に開示されるシステム100の動作を容易にするためのその他の情報、あるいはその組み合わせなどのデータを処理し、システム100のコンポーネント間のデータ・フローを制御し、システム100と、システム100に関連付けられたその他のコンポーネントまたはデバイス(例えば、コンピュータ、コンピュータ・ネットワーク・デバイス、データ・ソース、アプリケーションなど)との間のデータ・フローを制御することができる、1つまたは複数のプロセッサ、マイクロプロセッサ、またはコントローラを採用することができる。一部の実施形態では、プロセッサ・コンポーネント102は、1つまたは複数の融合型乗加算演算16ビットFPUなどの、1つまたは複数のFPUを備えることができる。
データ・ストア104は、データ構造(例えば、ユーザ・データ、メタデータ)、コード構造(例えば、モジュール、オブジェクト、ハッシュ、クラス、手順)もしくは命令、改良された浮動小数点数形式、浮動小数点数を処理すること、生成すること、もしくは計算すること、またはその組み合わせ、アプリケーション(例えば、機械学習、深層学習、または認知計算アプリケーション)、機械もしくはシステムのトレーニング、数値の形式設定もしくは計算に関連するパラメータ、データ・トラフィック・フロー、アルゴリズム(例えば、アプリケーションに関連するアルゴリズム、改良された浮動小数点数形式設定アルゴリズム、浮動小数点数計算アルゴリズム、数値丸めアルゴリズムなど)、プロトコル、ポリシー、インターフェイス、ツールに関連する情報、またはシステム100に関連付けられた動作の制御を容易にするためのその他の情報、あるいはその組み合わせを格納することができる。1つの態様では、プロセッサ・コンポーネント102は、処理することが望まれる情報を格納して取り出すため、または少なくとも部分的に機能を計算コンポーネント106、もしくはシステム100のその他のコンポーネント、もしくはシステム100の実質的に任意のその他の動作可能な態様、またはその組み合わせに提供するため、あるいはその両方のために、(例えば、メモリ・バスまたはその他のバスを介して)データ・ストア104に機能的に結合され得る。
プロセッサ・コンポーネント102は、(例えば、バスを介して)プログラム格納コンポーネント108に関連付ける(例えば、通信によって、または機能的に、あるいはその両方によって接続する)こともでき、プログラム格納コンポーネント108は、計算コンポーネント106を備える(例えば、格納する)ことができる。プログラム格納コンポーネント108は、プロセッサ・コンポーネント102によって実行するために、プロセッサ・コンポーネント102によってアクセス可能な、機械実行可能(例えば、コンピュータ実行可能)コンポーネントまたは命令を格納することができる。例えば、プロセッサ・コンポーネント102は、プログラム格納コンポーネント108内の計算コンポーネント106にアクセスすることができ、本明細書において詳細に説明されるように、改良された浮動小数点数形式に従って、データ(例えば、2進浮動小数点数)に対して動作を実行するプロセッサ・コンポーネント102に接続された計算コンポーネント106を利用することができる。
例えば、プロセッサ・コンポーネント102および計算コンポーネント106は、改良された形式コンポーネント110の改良された浮動小数点数形式(例えば、1/6/9浮動小数点数形式)に従って(例えば、使用して)、浮動小数点数(例えば、2進浮動小数点数)を処理する(例えば、数学的計算を実行する)こと、生成すること、または計算すること、あるいはその組み合わせを含む動作をデータに対して実行するように、動作する(例えば、互いに連動して動作する)ことができる。一部の実施形態では、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、改良された形式コンポーネント110の改良された浮動小数点数形式を使用して、浮動小数点数を処理すること、生成すること、または計算すること、あるいはその組み合わせを実行し、機械トレーニング、深層学習トレーニング、認知計算、またはその他の計算負荷の高いタスク、動作、もしくはアプリケーション、あるいはその組み合わせを容易にすることができる。例えば、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、改良された浮動小数点数形式を使用して、浮動小数点数を処理すること、生成すること、または計算すること、あるいはその組み合わせを実行し、機械トレーニングまたは深層学習トレーニングに関連して解決される問題(例えば、認知計算問題)の解に関連することができる結果の取得を容易にすることができる。例えば、解決される問題は、機械トレーニング、深層学習、認知計算、人工知能、ニューラル・ネットワーク、またはその他の計算負荷の高いタスク、問題、もしくはアプリケーション、あるいはその組み合わせに関連することができる。いくつかの非限定的な例として、この問題は、画像もしくはビデオ内の物体(例えば、人、場所、または物、あるいはその組み合わせ)を認識もしくは識別するための画像認識、音声コンテンツ(例えば、音声、音声付きの放送、歌、または音声付きの番組、あるいはその組み合わせ)内の音声の単語または識別情報あるいはその両方を認識もしくは識別するための音声認識、またはテキスト・コンテンツ(例えば、本、原稿、電子メール、または一連のドキュメントなど)内のテキスト・データ(例えば、単語、英数字)を認識もしくは識別するためのテキスト認識に関連することができる。
プロセッサ・コンポーネント102および計算コンポーネント106は、アプリケーション112に関連付けられたデータに対する動作を実行するために、アプリケーション112などの1つまたは複数のアプリケーション(例えば、機械トレーニングまたは深層学習アプリケーション)に関連付けられ得る。例えば、プロセッサ・コンポーネント102および計算コンポーネント106は、アプリケーション112からデータを受信することができ、改良された浮動小数点数形式に従って、このデータに少なくとも部分的に基づいて、数値結果(例えば、2進浮動小数点数)を生成または決定する(例えば、計算する)ことができ、それらの数値結果をアプリケーション112または別の望ましい送り先あるいはその両方に提供することができる。
図2を(図1と共に)簡単に参照すると、図2は、開示される対象のさまざまな態様および実施形態に従って、改良された浮動小数点数形式の例示的な改良されたビット構造200のブロック図を示している。改良されたビット構造200は、浮動小数点数(例えば、2進浮動小数点数)の符号を表すことができるデータの1ビットを含むことができる、符号フィールド202を含むことができる。
改良されたビット構造200は、符号フィールド202に隣接することができる指数フィールド204も含むことができる。指数フィールド204は、浮動小数点数の指数を表すことができるデータの6ビットを含むことができる。改良された浮動小数点数形式は、(例えば、1/5/10形式と比較して)追加の(例えば、第6の)指数ビットを採用することによって、機械トレーニングまたは深層学習トレーニング・アルゴリズム(例えば、半精度(例えば、16ビット)モードで動作している単精度(例えば、32ビット)の機械トレーニングまたは深層学習アルゴリズム)を十分速く収束させるための望ましい、改良された(例えば、改善された、または追加の)指数範囲を提供しながら、例えば機械トレーニングおよび深層学習トレーニング・アプリケーションならびに関連する機械トレーニングおよび深層学習のタスクなどの、計算負荷の高いアプリケーションの比較的小さいエラー率を実現することもできる。
改良されたビット構造200は、指数フィールド204に隣接することができる小数(f)フィールド206をさらに含むことができる。小数フィールド206は、浮動小数点数の小数(例えば、小数値)を表すことができるデータの9ビットを含むことができる。改良された浮動小数点数形式の小数の9ビットは、機械トレーニング・アルゴリズム、深層学習アルゴリズム、またはその他の計算負荷の高いアルゴリズム(例えば、半精度(例えば、16ビット)モードで動作している単精度(例えば、32ビット)の機械トレーニング、深層学習、またはその他の計算負荷の高いアルゴリズム)、あるいはその組み合わせに望ましい小数の精度を提供するために十分であるが、小数の9ビットは、1/5/10形式より1つ少ない。小数に8ビット(例えば、小数の8ビットおよび指数の7ビット)しか存在しなかった場合、小数の8ビットは、機械トレーニング・アルゴリズムまたは深層学習アルゴリズム(例えば、半精度モードで動作している単精度の機械トレーニングまたは深層学習アルゴリズム)で使用するためには、そのようなアルゴリズムの変更が可能である場合でも、そのようなアルゴリズムに対する少なくとも何らかの変更がなければ、十分な小数の精度を提供しないということにも注意する。
数x=(s,e,f)の値を次のように定義することができる。
value(x)=(−1)s*2[e]*(i.f) (方程式1)
ここで、[e]はバイアス指数の値であることができ、(i.f)は2進仮数であることができ、fは小数であり、iは暗黙のビットである。改良された浮動小数点数形式に従って、iの値は、すべての有限の非ゼロ数で、1であることができる(真のゼロの場合、0であることができる)。バイアス指数を使用する改良された浮動小数点数形式では、バイアスを使用して、指数を符号なし2進整数として表すことができる。
表1は、改良された浮動小数点数形式(本明細書では、改良された1/6/9形式とも呼ばれる)と1/5/10形式の間のさまざまな違いを示している。
表1からわかるように、改良された形式コンポーネント110の改良された浮動小数点数形式を使用して表せる最小の正数は2−31*(1+2−9)であり、この正数は、1/5/10形式を使用して取得できる最小の正の非正規数(例えば、2−24)より大幅に小さい数である。したがって、改良された浮動小数点数形式で非正規数を使用しなくても、プロセッサ・コンポーネント102および計算コンポーネント106は、改良された浮動小数点数形式を利用して、1/5/10形式が使用される場合よりも大幅に0の値に近づくことができる数を生成または計算することができる。これによって、機械学習(例えば、深層学習)トレーニングの実行の収束を改善することを促進できる。
浮動小数点数に関しては、一連のバイネードが存在することができ、バイネードは、2進浮動小数点値のセットであることができ、そのようなセットの2進浮動小数点値の各々は同じ指数を有することができる。改良された浮動小数点数形式は、64個のバイネードを含むことができる。改良された浮動小数点数形式のバイネードは、第1のバイネードおよび最後のバイネードを含むことができる。最初の(例えば、最低の)バイネードの場合、指数フィールド204はすべてゼロである(例えば、6ビットの各々が0である)ことができ、最後のバイネードの場合、指数フィールド204はすべて1である(例えば、6ビットの各々が1である)ことができる。改良された形式コンポーネント110の改良された浮動小数点数形式は、第1のバイネードおよび最後のバイネード内のデータ点に対して指定された各定義を採用することができ、第1のバイネードおよび最後のバイネード内のデータ点に対して指定されたそのような定義は、1/5/10形式などの他の形式の第1のバイネードおよび最後のバイネードのデータ点に関して使用される定義と異なることができる。
端でない指数(例えば、すべて1またはすべてゼロで構成されていない指数)を有することができる他のバイネードは、正規数を表すために利用され得る。暗黙のビットは、1.fの仮数を得ることができる1(i=1)であることができる。指数フィールド204の指数値は、[e]=e−バイアスとして導出され得る。開示されているように、改良された浮動小数点数形式は、一部分において、指数フィールド204内の指数が1/5/10形式より1ビット広いこと、小数フィールド206内の小数が1/5/10形式より1ビット短いことに起因して、1/5/10形式と異なることができ、改良された浮動小数点数形式のバイアスも、1/5/10形式と異なることができる。
浮動小数点数形式(特に、半精度(例えば、16ビット)の浮動小数点数形式)での非正規(例えば、デノーマル)数の使用は、本明細書において詳細に開示されるように、非効率的であるか、または比較的費用がかかるか、あるいはその両方であることがある。図3を(図1および2と共に)簡単に参照すると、図3は、開示される対象のさまざまな態様および実施形態に従って、デノーマル数が浮動小数点数形式で利用される場合に、数直線に沿ってデノーマル数および正規数の位置を示すことができる例示的な数直線300の図を示している。数直線300に示されているように、32ビット(例えば、1/8/23)浮動小数点数形式などの浮動小数点数形式に関して、デノーマル数(denorms)(本明細書では非正規数とも呼ばれる)であることができる数の第1のサブセット302は、0より大きい数から2−126に及ぶことができる。1/8/23形式では、符号フィールド用の単一のビット、指数フィールド用の8ビット、および小数フィールド用の23ビットが存在することができる。数の第1のサブセット302は、第1のバイネードであることができる。やはり数直線300に示されているように、正規数であることができる数の第2のサブセット304は、2−126より大きい数であることができる。
本明細書で開示されるように、改良された浮動小数点数形式では、表せる最小の正数は2−31*(1+2−9)(例えば、(2−31*(1+2−9))→0x0001)であることができ、この正数は、1/5/10形式を使用して取得できる最小の正の非正規数(例えば、2−24)より大幅に小さい数である。指数フィールドにおいて6ビットを採用することによって、改良された浮動小数点数形式は、非正規数モードを使用せずに、アプリケーション112(例えば、機械または深層学習アプリケーション)の実行中に出現することが期待されるか、または予想される数値の範囲を表すことができる。さまざまな実施形態に従って、それに応じて改良された浮動小数点数形式は、非正規(例えば、デノーマル)数の使用をなくすことができる。事実上、改良された浮動小数点数形式は、1/5/10形式と比較して、より広い範囲の数を表すことができると同時に、より論理的により単純であることもできる。
さらに、最低の(例えば、第1の)バイネードに関して、改良された浮動小数点数形式は、最低のバイネードのデータ点(例えば、指数フィールドがすべてゼロであるデータ点)に対して指定された定義を採用することができる。改良された浮動小数点数形式での最低のバイネードの指定された定義に従って、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、非正規数を除去しながら、最低のバイネードをゼロおよび正規数に利用することができる。ゼロの小数の場合、値はゼロになることができる。ゼロ以外の小数の場合、値はゼロ以外の正規数になることができる。改良された浮動小数点数形式に関して表される最小の正数が(2−31*(1+2−9))であるため、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、改良された浮動小数点数形式に従って、(2−31*(1+2−9))より小さい数を(2−31*(1+2−9))または0のいずれかに丸めることができる。
また、改良された浮動小数点数形式に従って、符号を無視することができ、これによって、他の浮動小数点数形式(例えば、1/5/10形式)を使用する他のシステムまたはデバイスよりも、ハードウェアの実装を単純かつ効率的にすることができる。例えば、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方がゼロの結果を生成または計算する場合、符号ビットの値は未定義であるか、または実装に固有であることができる。例えば、ゼロは0x0000または0x8000であることができ、その場合、符号ビットは「ドントケア」項として表され得る。プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方がゼロ以外の小数を処理、生成、または計算する場合、値は正規数であることができ、例えば、暗黙のビットが1(i=1)であることができ、その結果、1.fの仮数を得ることができ、指数値が[e]=e−バイアス=0−バイアスになることができる。
述べたように、改良された浮動小数点数形式は、ゼロの符号を「ドントケア」項として定義することができ、これによって、1/5/10形式などの他の形式と比較して、ゼロの符号の処理を単純にすることができる。例えば、1/5/10形式などの特定の他の浮動小数点数形式は、ゼロの符号の取得方法に関して、比較的複雑なルールを有することがある。しかし、深層学習アプリケーションを含む多くのアプリケーションの場合、ゼロの符号は重要でない。したがって、改良された浮動小数点数形式に従って、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、ゼロの符号を「ドントケア」項として表すことができる。例えば、改良された浮動小数点数形式に従って、「ドントケア」項は、ゼロの値に関してゼロの符号が重要でないということを示すことができる定義された値を表すことができる。浮動小数点数がゼロである場合、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、プロセッサ・コンポーネント102または計算コンポーネント106が生成して符号フィールドに挿入するために便利または効率的な(例えば、最も便利または最も効率的な)任意の値またはシンボルを、改良された浮動小数点数形式の符号フィールドに生成することができる。例えば、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、最小量のリソース(例えば、処理リソースまたは計算リソース)を利用することができるか、または少なくとも、符号フィールドの任意でない値を決定および生成してゼロの値の符号を表すためにその他の方法で使用されるよりも少ないリソースを利用することができる、任意の値を生成するか、または生成することを容易にすることができる。開示される対象は、ゼロの値に関連付けられた符号の処理を含めて、改良された浮動小数点数形式を採用することによって、改良された浮動小数点数形式に関連してシステム100によって利用されるハードウェアを相対的に単純にすることができ、他の浮動小数点数形式(例えば、1/5/10形式)に使用されるハードウェアよりも、利用されるハードウェアおよびハードウェア・リソース(および論理リソース)を少なくすることができる。
また、改良された浮動小数点数形式とは対照的に、1/5/10形式などの特定の他の浮動小数点形式は、最低のバイネードを非正規(例えば、デノーマル)数およびゼロに使用する。本明細書で開示されるように、改良された浮動小数点数形式の指数フィールドは1/5/10形式より1ビット広いため、改良された浮動小数点数形式は、最後のバイネードにおける正規数でも、1/5/10形式が非正規数で0の値に近づくことができる近さよりも近く、0の値に近づくことができる。
非正規数のハードウェア支援は、比較的費用がかかることがあり、通常の融合型乗加算演算FPUの深さ(例えば、合計ゲート遅延)を増大させることがあり、さらに非正規数のサポートが、論理の複雑さを不必要に増やす可能性がある。開示される対象は、最低のバイネードに対して指定されたそのような定義を採用することによって、非正規数を使用することを避けることができ、その結果、ハードウェアの使用および支援に関して、開示される対象をより効率的にすることができ(例えば、使用されるハードウェアおよびハードウェア・リソースの量を減らすことができ)、1/5/10形式などの他の浮動小数点数形式と比較して、融合型乗加算演算FPUの深さ(例えば、合計ゲート遅延)を増大させるのを防ぐことができる。
さらに、最高の(例えば、最後の)バイネードに関して、改良された浮動小数点数形式は、最低のバイネード(例えば、すべて1である指数フィールドに関するデータ点)に対して指定された定義を利用することができる。改良された浮動小数点数形式での最高のバイネードの指定された定義に従って、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、最高のバイネードの望ましい部分(例えば、ほとんど)を有限の数に使用することができ、最高のバイネードの1つのデータ点を、非数(NaN)および無限大(例えば、マージされたNaN/無限大)などの特殊な値に使用することができる。
表2は、開示される対象の一部の実施形態に従って、有限の数での最高のバイネードのほとんど(例えば、1つのデータ点を除くすべて)およびマージされたNaN/無限大の特殊な値での最高のバイネードの1つのデータ点の使用を次のように示している。
さまざまな他の実施形態に従って、さまざまな種類のNaNのさらに多くの仮数コードが予約され、それに応じて、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方によって利用され得るということが、理解されるべきである。例えば、必要に応じて、改良された浮動小数点数形式に従って、各(例えば、異なる)種類のNaNに対して、(例えば、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方によって)2つ以上の仮数コードが採用され得る。別の例示的な実施形態として、必要に応じて、指数が111111、仮数の範囲が000...000〜111...101である場合、データ点は、仮数1.fおよび[e]=32で正規数になることができ、111...110の仮数の場合、データ点は、符号フィールド202内の符号ビットの値に応じて、+無限大または−無限大を表すことができ、すべて1の値の仮数の場合、データ点はNaNを表すことができ、符号フィールド202内の符号ビットは「ドントケア」項になることができる。
改良された浮動小数点数形式は、マージされたNaN/無限大シンボルの符号を「ドントケア」項として定義することもでき、これによって、NaNおよび無限大の符号が他の浮動小数点数形式(例えば、1/5/10形式)で処理される方法と比較して、マージされたNaN/無限大シンボルの符号の処理を相対的に単純にすることができる。例えば、特定の他の浮動小数点数形式は、NaNおよび無限大の符号の取得方法に関して、特に、加算/減算演算および乗加算演算に関して、比較的複雑なルールを有することがある。しかし、深層学習アプリケーションを含む多くのアプリケーションの場合、NaNおよび無限大の符号は重要でない。
したがって、改良された浮動小数点数形式に従って、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、マージされたNaN/無限大シンボルの符号を「ドントケア」項として表すことができる。例えば、改良された浮動小数点数形式に従って、「ドントケア」項は、マージされたNaN/無限大シンボルの値に関してマージされたNaN/無限大シンボルの符号が重要でないということを示すことができる定義された値を表すことができる。無限大またはNaNが浮動小数点数の結果である場合、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、無限大またはNaNあるいはその両方の値うちの値の符号の項またはシンボルを表すために、無限大またはNaNあるいはその両方の値(例えば、マージされたNaN/無限大シンボル、個別のNaN値、または個別の無限大値)に関連付けられた符号フィールド内の任意の値を生成するか、または生成することを容易にすることができる。改良された浮動小数点数形式に従って、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、プロセッサ・コンポーネント102または計算コンポーネント106が生成して符号フィールドに挿入するために便利または効率的な(例えば、最も便利または最も効率的な)任意の値またはシンボルを、無限大またはNaNあるいはその両方の値に関連付けられた符号フィールドに生成するか、または生成することを容易にすることができる。例えば、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方は、最小量のリソース(例えば、処理リソースまたは計算リソース)を利用することができるか、または少なくとも、符号フィールドの任意でない値を決定および生成して無限大またはNaNあるいはその両方の値の符号を表すためにその他の方法で使用されるよりも少ないリソースを利用することができる、任意の値を生成するか、または生成することを容易にすることができる。開示される対象は、無限大、NaN、ならびに無限大およびNaNの値に関連付けられた符号の処理を含めて、改良された浮動小数点数形式を採用することによって、改良された浮動小数点数形式に関連してシステム100によって利用されるハードウェアを相対的に単純にすることができ、他の浮動小数点数形式(例えば、1/5/10形式)に使用されるハードウェアよりも、利用されるハードウェアおよびハードウェア・リソース(および論理リソース)を少なくすることができる。
さらに、改良された浮動小数点数形式に従って最高のバイネードに対して指定された定義とは対照的に、1/5/10形式などの特定の他の浮動小数点形式は、最高のバイネードをNaNおよび無限大の特殊な値のみに使用し、ゼロの小数の場合、符号ビットに応じて値は+/−無限大になることができ、ゼロ以外の小数の場合、データ点はNaNを表すことができる。それらの特殊な値は、コーナー条件を処理することに多少役立つことがある。無限大を使用して、計算が有効なデータ範囲をオーバーフローしなかったことを示すことができる。算術演算では、無限大は、例えば、任意の有限の数xに関して、無限大−x=無限大などの代数のルール従うことができる。そのような特定の他の浮動小数点形式では、NaNを使用して、例えば、負数の平方根または同じ符号を有する2つの無限大の間の差などの、数学的に未定義の状況を表すことができる。1/5/10形式などの浮動小数点形式では、NaNの複数の表現が存在することがあるということに注意する。算術演算が少なくとも1つのNaNのオペランドを含んでいる場合、結果はオペランドのNaNのうちの1つになる必要があり、例えば、NaNのペイロードが伝えられる必要がある。
例えばより高い精度の浮動小数点数形式(例えば、32ビットまたは64ビット浮動小数点数形式)などに関して、指数用に8ビット以上を含んでいる場合、1つのバイネードをNaNおよび無限大のこれらの特殊な値のみに使用することは、通常、大きな不利益にならないが、より低い精度の浮動小数点数形式(例えば、改良された1/6/9形式および1/5/10形式などの16ビット浮動小数点数形式)に関連付けられたより小さいビット幅などの、より小さいビット幅の場合、1つのバイネードをNaNおよび無限大のこれらの特殊な値のみに使用することは、許容できないほど高価になることがある。
改良された浮動小数点数形式は、そのような指定された定義を本明細書に記載された最高のバイネードに利用することによって、1/5/10形式などの他の浮動小数点数形式と比較して、相対的により大きいデータ範囲を可能にすることができ、システム100によって(例えば、プロセッサ・コンポーネント102または計算コンポーネント106あるいはその両方によって)改良された浮動小数点数形式に採用される論理が、NaNと無限大の値を区別する必要がないため、相対的により単純なハードウェアを利用することができる。
一部の実施形態では、改良された浮動小数点数形式は、他の種類の形式によって利用される丸めモードよりも実装を単純にすることができる、丸めモードを採用することができる。例えば、改良された浮動小数点数形式は、他の丸めモードを利用せずに最も近い値に切り上げるための丸めモードを採用することができる。一部の他の種類の形式(例えば、1/5/10形式)は、最も近い値に切り上げること、最も近い値に切り下げること、および偶数に丸めることに加え、0に丸めること、+無限大に丸めること、および−無限大に丸めることなどの、さらに複雑な丸めモードを採用する。改良された浮動小数点数形式による、他の丸めモードを利用しない、より単純な丸めモード(例えば、最も近い値に切り上げる)の使用は、浮動小数点数を丸めるために使用されるハードウェアおよび論理の量を大幅に減らしながら、システムのトレーニング(例えば、機械トレーニングまたは深層学習トレーニング)の実行速度および品質を含めて、ワークロードの実行に対して影響を与えないか、または少なくとも実質的に影響を与えないことができる。
開示される対象は、例えば本明細書において詳細に説明されるように、改良された浮動小数点数形式を採用することによって、ハードウェア、ハードウェア・リソース、論理リソース、および計算負荷の高いアプリケーション(例えば、機械トレーニング・アプリケーションまたは深層学習トレーニング・アプリケーション)に利用されるその他の計算に関連するリソースの量を大幅に減らすことを促進することができる。一部の実施形態では、開示される対象は、改良された浮動小数点数形式を採用することによって、特定の倍精度(例えば、64ビット)のFPUの約1/25の大きさになることができる16ビットFPUを採用することもできる。さらに、開示される対象は、改良された浮動小数点数形式を採用することによって、同等の半精度(例えば、16ビット)のFPU(例えば、1/5/10形式を使用する半精度のFPU)より約25%〜30%小さくなることができる16ビットFPUを採用することが期待される(例えば、推定されるか、または予想される)。
図4、5、および6は、半精度(例えば、16ビット)の浮動小数点数形式(例えば、1/5/10形式)の性能結果および32ビット(例えば、完全精度)の浮動小数点数形式の性能結果に関して、改良された浮動小数点数形式(例えば、改良された半精度(例えば、16ビット)の浮動小数点数形式)の性能を比較することができる例示的な性能結果を示すことができる。図4を簡単に参照すると、図4は、開示される対象のさまざまな態様および実施形態に従って、音声認識に関連する性能結果の例示的なグラフ400の図を示している。グラフ400は、50時間のニュース放送データセットに対する音声深層ニューラル・ネットワーク(音声DNN:speech-deep neural network)に関する、改良された浮動小数点数形式、半精度の浮動小数点数形式、および32ビットの浮動小数点数形式での各音声認識の性能結果を示すことができる。グラフ400は、x軸に沿ったトレーニング・エポックに対して、音素エラー率(%)をy軸にプロットしている。
性能結果のグラフ400において観察され得るように、改良された浮動小数点数形式(改良された形式)(および関連する16ビット・ハードウェアおよびソフトウェア)での音声認識の性能結果402は、非常に良好に収束することができ、32ビット浮動小数点数形式(完全精度形式)(および関連する32ビット・ハードウェアおよびソフトウェア)の音声認識の性能結果404に比較的近い同等の好ましい結果を提供することができる。さらに、グラフ400から観察され得るように、半精度の浮動小数点数形式(半精度形式)(および関連する16ビット・ハードウェアおよびソフトウェア)での音声認識の性能結果406は、全く収束することができず、したがって、意味のある音声認識結果を提供することができない。
図5は、開示される対象のさまざまな態様および実施形態に従って、画像認識に関連する性能結果の例示的なグラフ500の図を示している。グラフ500は、1Kの出力クラスを含む、2012−ImageNetデータセットに対するAlexNetに関する、改良された浮動小数点数形式、半精度の浮動小数点数形式、および32ビットの浮動小数点数形式での各画像認識の性能結果を示すことができる。グラフ500は、x軸に沿ったトレーニング・エポックに対して、テスト・エラー(%)をy軸にプロットしている。
性能結果のグラフ500からわかるように、改良された浮動小数点数形式(および関連する16ビット・ハードウェアおよびソフトウェア)での画像認識の性能結果502は、非常に良好に収束することができ、32ビット浮動小数点数形式(および関連する32ビット・ハードウェアおよびソフトウェア)の画像認識の性能結果504とかなり良好に比較できる結果(例えば、性能結果504に実質的に近くなることができる結果)を提供することができる。さらに、グラフ500から観察され得るように、半精度の浮動小数点数形式(および関連する16ビット・ハードウェアおよびソフトウェア)での画像認識の性能結果506は、全く収束することができず、したがって、意味のある画像認識結果を提供することができない。
図6に関しては、図6は、開示される対象のさまざまな態様および実施形態に従って、シェイクスピア・テキスト生成に関連する性能結果の例示的なグラフ600の図を示している。グラフ600は、2つの積み重ねられた長短期記憶(LSTM:long short-term memories)(それぞれ512個のユニット)を含む文字回帰型ニューラル・ネットワーク(char−RNN:character recurrent neural network)を採用する場合の、改良された浮動小数点数形式、半精度の浮動小数点数形式、および32ビット浮動小数点数形式での、シェイクスピア・テキストに関する各テキスト生成の性能結果を示すことができる。グラフ600は、x軸に沿ったトレーニング・エポックに対して、トレーニング・エラーをy軸にプロットしている。
性能結果のグラフ600において観察され得るように、改良された浮動小数点数形式(および関連する16ビット・ハードウェアおよびソフトウェア)でのテキスト生成の性能結果602は、非常に良好に収束することができ、32ビット浮動小数点数形式(および関連する32ビット・ハードウェアおよびソフトウェア)のテキスト生成の性能結果604と非常に良好に比較できる(例えば、実質的に近くなることができる)結果を提供することができる。さらに、グラフ600から観察され得るように、半精度の浮動小数点数形式(および関連する16ビット・ハードウェアおよびソフトウェア)でのテキスト生成の性能結果606は、収束することができているが、改良された浮動小数点数形式でのテキスト生成の性能結果602または32ビット浮動小数点数形式のテキスト生成の性能結果604と比べて全く良好でない。
図7を参照すると、図7は、開示される対象のさまざまな態様および実施形態に従って、改良された浮動小数点数形式を使用して浮動小数点数(例えば、2進浮動小数点数)を生成または計算するための計算の第1の部分に、より低い精度の計算エンジンを採用することができ、計算の第2の部分に、より高い精度の計算エンジンを採用することができる、例示的な非限定的システム700のブロック図を示している。本明細書に記載された他の実施形態で採用されている類似する要素の説明の繰り返しは、簡潔にするために省略されているか、または省略されてよい。
システム700は、プロセッサ・コンポーネント702、データ・ストア704、および計算コンポーネント706を備えることができる。プロセッサ・コンポーネント702は、(例えば、バスを介して)データ・ストア704およびプログラム格納コンポーネント708に関連付ける(例えば、通信によって接続する)ことができ、プログラム格納コンポーネント708は、計算コンポーネント706を備えることができる。計算コンポーネント706は、本明細書において詳細に説明されるように、プロセッサ・コンポーネント702および計算コンポーネント706が、改良された浮動小数点数形式で浮動小数点数(例えば、2進浮動小数点数)を処理する(例えば、数学的計算を実行する)こと、生成すること、または計算すること、あるいはその組み合わせを実行することを可能にすることができる、改良された形式コンポーネント710を備えることができる。
プロセッサ・コンポーネント702および計算コンポーネント706は、アプリケーション712に関連付けられたデータ(例えば、数値データ)に対する動作を実行するために、アプリケーション712などの1つまたは複数のアプリケーション(例えば、機械または深層学習アプリケーション)に関連付けられ得る。例えば、プロセッサ・コンポーネント702または計算コンポーネント706あるいはその両方は、アプリケーション712からデータを受信することができ、改良された浮動小数点数形式に従って、このデータに少なくとも部分的に基づいて、数値または結果(例えば、2進浮動小数点数)を処理すること、生成すること、または決定する(例えば、計算する)ことができ、それらの数値または結果をアプリケーション712または別の望ましい送り先(例えば、別のアプリケーション、コンポーネント、またはデバイス)あるいはその両方に提供することができる。
一部の実施形態では、プロセッサ・コンポーネント702は、より低い精度の計算エンジン1714(LPCE1714)、より低い精度の計算エンジン2716(LPCE2716)から、より低い精度の計算エンジンM718(LPCEM718)までなどの、より低い精度の計算エンジンのセットを備えることができ、Mは事実上任意の望ましい数であることができる。より低い精度の計算エンジンのセットのうちのより低い精度の計算エンジン(例えば、714、716、718)は、改良された浮動小数点数形式に従って(例えば、改良された浮動小数点数形式に従うか、改良された浮動小数点数形式を順守するか、改良された浮動小数点数形式で構造化されるか、または提示されるか、あるいはその組み合わせを実行することができる)、データ(例えば、数値データ)に対して計算またはその他の動作を実行して、浮動小数点数(例えば、2進浮動小数点数)を生成することができる、16ビット計算エンジン(例えば、16ビットFPU)であるか、または16ビット計算エンジンを備えることができる。
プロセッサ・コンポーネント702は、より高い精度の計算エンジン1720(HPCE1720)、より高い精度の計算エンジン2722(HPCE2722)から、より高い精度の計算エンジンN724(HPCEN724)までなどの、より高い精度の計算エンジンのセットを備えることもでき、Nは事実上任意の望ましい数であることができる。より高い精度の計算エンジンのセットのうちのより高い精度の計算エンジン(例えば、720、722、724)は、望ましい(例えば、適切な、許容できる、または最適な)より高い精度の浮動小数点数形式に従って(例えば、より高い精度の浮動小数点数形式に従うか、より高い精度の浮動小数点数形式を順守するか、より高い精度の浮動小数点数形式で構造化されるか、または提示されるか、あるいはその組み合わせを実行することができる)、データ(例えば、数値データ)に対して計算またはその他の動作を実行して、浮動小数点数(例えば、2進浮動小数点数)を生成することができる、32ビット(または64ビットあるいはその両方の)計算エンジン(例えば、FPU)であるか、または32ビット(または64ビットあるいはその両方の)計算エンジンを備えることができる。
アプリケーション712(例えば、機械または深層学習トレーニングに関連または関与するアプリケーション)の実行または使用に関連して、プロセッサ・コンポーネント702または計算コンポーネント706あるいはその両方によって実行され得るさまざまな種類の計算またはその他の動作が存在することができる。例えば、一部の種類の計算は、他の種類の計算よりも、丸め誤差などの誤差の影響を比較的受けやすいことがある。多くの事例またはほとんどの事例では、アプリケーション710に関連する計算の大部分が、誤差の影響を特に受けない種類の計算であることがあり、計算の相対的に小さい部分が、丸め誤差などの誤差の影響を比較的受けやすい種類の計算であることがある。
プロセッサ・コンポーネント702、計算コンポーネント706、およびシステム700のその他のコンポーネントによって、計算を含む動作の効率的実行を促進するために、システム700は、プロセッサ・コンポーネント702、データ・ストア704、およびプログラム格納コンポーネント708に関連付けられ得る(例えば、通信によって接続され得る)動作管理コンポーネント726を備えることができる。動作管理コンポーネント726は、プロセッサ・コンポーネント702、データ・ストア704、計算コンポーネント706、プログラム格納コンポーネント708、より低い精度の計算エンジンのセット(例えば、714、716、718)、およびより高い精度の計算エンジンのセット(例えば、720、722、724)を含む、システム700のコンポーネントの動作を制御することができる。
例えば、データ(例えば、数値データ)に対する計算の効率的実行を促進するために、動作管理コンポーネント726は、動作(例えば、計算動作)の第1の部分および関連するデータをより低い精度の計算エンジンのセット(例えば、714、716、718)に割り当てることができ、より低い精度の計算エンジンのセットは、そのようなデータに対してそのような動作を実行することができる。動作の第1の部分は、データに対して計算またはその他の動作を実行することを含むことができ、これらの計算またはその他の動作は、丸め誤差などの誤差の影響を特に受けない。動作管理コンポーネント726は、動作(例えば、計算動作)の第2の部分および関連するデータをより高い精度の計算エンジンのセット(例えば、720、722、724)に割り当てることもでき、より高い精度の計算エンジンのセットは、そのようなデータに対してそのような動作を実行することができる。動作の第2の部分は、データに対して計算またはその他の動作を実行することを含むことができ、これらの計算またはその他の動作は、丸め誤差などの誤差の影響を比較的受けやすい種類の計算であることがあり、したがって、より高い精度の計算エンジンを使用してこれらの影響を受けやすい計算またはその他の動作を実行することが、望ましいことがある。
一般的に(例えば、頻繁に)、誤差の影響を受けやすい計算(例えば、動作の第2の部分)の数よりも、誤差の影響を特に受けない計算(例えば、動作の第1の部分)が著しく多く存在することがあり、一部の実施形態では、より低い精度の計算エンジンのセット(例えば、714、716、718)内の計算エンジンの数(例えば、M)は、より高い精度の計算エンジンのセット(例えば、720、722、724)内の計算エンジンの数(例えば、N)より大きくなることができる。ただし、必要に応じて(例えば、実行されるアプリケーションまたはトレーニング・タスクの種類に応じて)、他の実施形態では、より低い精度の計算エンジンのセット(例えば、714、716、718)内およびより高い精度の計算エンジンのセット(例えば、720、722、724)内に、等しい数の計算エンジンが存在することができ、またはより高い精度の計算エンジンのセット(例えば、720、722、724)は、より低い精度の計算エンジンのセット(例えば、714、716、718)より多くの数の計算エンジンを含むことができる。
さまざまな実施形態に従って、システム700が、1つまたは複数のプロセッサ・コンポーネント、計算コンポーネント、より低い精度の計算エンジン、より高い精度の計算エンジン、グラフィックス・プロセッシング・ユニット(GPU)、アクセラレータ、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはデータ(例えば、数値データ)に対する計算を実行することを含む、データに対する動作を実行するか、または実行することを容易にするその他の処理ユニット、あるいはその組み合わせを備えることができるということが、理解されるべきである。
図8は、開示される対象のさまざまな態様および実施形態に従って、改良された浮動小数点数形式を使用して、データに対して計算を含む動作を実行するための例示的な非限定的方法800のフロー図を示している。方法800は、例えば、改良された形式コンポーネントを採用しているプロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方によって実行され得る。本明細書に記載された他の実施形態で採用されている類似する要素の説明の繰り返しは、簡潔にするために省略されているか、または省略されてよい。
802で、各数値フィールドを、定義された浮動小数点数形式(例えば、改良された浮動小数点数形式)で生成することができ、各数値フィールドは、符号フィールド、指数フィールド、および仮数フィールドを含むことができ、定義された浮動小数点数形式は、指数フィールド内の6ビットを利用することができる。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、定義された浮動小数点数形式で各数値フィールドを生成するか、または生成することを容易にすることができる。
804で、アプリケーションの実行に関連して、定義された浮動小数点数形式に従って、2進浮動小数点数が計算され得る。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、アプリケーションの実行に関連して、定義された浮動小数点数形式に従って2進浮動小数点数を計算するか、またはその他の方法で処理することができる。例えば、プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、アプリケーションの実行に関連して、プログラム、アルゴリズム(例えば、プログラムに関連付けられたアルゴリズム)、または(例えば、プログラムまたはアルゴリズムに関連付けられた)データ点、あるいはその組み合わせを収束させて、解決される問題に対する解に関連する結果を取得することを容易にするために、定義された浮動小数点数形式に従って2進浮動小数点数を計算するか、またはその他の方法で処理することができる。解決される問題は、機械トレーニング、深層学習、認知計算、人工知能、ニューラル・ネットワーク、またはその他の計算負荷の高いタスク、問題、もしくはアプリケーション、あるいはその組み合わせに関連することができる。例えば、この問題は、画像内の物体(例えば、人、場所、または物、あるいはその組み合わせ)を認識もしくは識別するための画像認識、音声コンテンツ内の音声の単語または識別情報あるいはその両方を認識もしくは識別するための音声認識、またはテキスト・コンテンツ(例えば、本、原稿、電子メールなど)内のテキスト・データ(例えば、単語、英数字)を認識もしくは識別するためのテキスト認識に関連することができる。
図9は、開示される対象のさまざまな態様および実施形態に従って、改良された浮動小数点数形式を使用して、データに対して計算を含む動作を実行するための別の例示的な非限定的方法900のフロー図を示している。方法900は、例えば、改良された形式コンポーネントを採用しているプロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方によって実行され得る。本明細書に記載された他の実施形態で採用されている類似する要素の説明の繰り返しは、簡潔にするために省略されているか、または省略されてよい。
902で、改良された浮動小数点数形式に従って、各フィールドを生成することができ、各フィールドは符号フィールド、指数フィールド、および仮数フィールドを含むことができる。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、改良された浮動小数点数形式で各フィールドを生成するか、または生成することを容易にすることができる。定義された浮動小数点数形式は、符号フィールドが符号ビットを含むことができ、指数フィールドが6ビットを含むことができ、仮数フィールドが9ビットを含むことができる、16ビット形式であることができる。
904で、改良された浮動小数点数形式に従って、2進浮動小数点数が処理され得る。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、改良された浮動小数点数形式に従って、2進浮動小数点数を処理すること、生成すること、または計算すること、あるいはその組み合わせを実行し、例えば、定義された収束基準に従って、アプリケーションに関連付けられたプログラムを収束させることを容易にすることができる。定義された収束基準は、例えば、アプリケーションの実行に関連して、プログラム(例えば、プログラムのアルゴリズムまたはデータ点あるいはその両方)が収束して、解決されるプログラムに対する結果を取得するのにかかる時間、収束して結果を取得することのプログラムの達成可能性、または結果に関連付けられたエラー率、あるいはその組み合わせに関連することができる。
906で、改良された浮動小数点数形式に従って、ゼロおよび正規数を表すために、第1のバイネードを利用することができ、第1のバイネードは、すべてゼロを含んでいる指数フィールドに関連付けられる。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、改良された浮動小数点数形式に従って、第1のバイネードを利用してゼロおよび正規数を表すことができる。第1のバイネードは、例えば、最低のバイネードであることができる。第1のバイネードは、すべてゼロの小数を含むセットのデータ点がゼロを表すことができる、データ点のセットを含むことができる。データ点のセットの他のデータ点は、正規数を表すことができる。
正規数は、改良された浮動小数点数形式に関連付けられた基数および最小指数の関数として決定され得る最小値以上の大きさを有する、有限のゼロ以外の浮動小数点数であることができる。例えば、正規数は、rmin(e)以上の大きさを有する、有限のゼロ以外の浮動小数点数であることができ、rは基数であることができ、min(e)は最小指数であることができる。改良された浮動小数点数形式は、非正規数を使用しないように、含まないように、または除去するように、構造化され得る。
908で、改良された浮動小数点数形式に従って、第2のバイネードの縮小されたサブセットを利用して、無限大の値およびNaN値を表すことができる。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、改良された浮動小数点数形式に従って、第2のバイネードの縮小されたサブセットを利用して無限大の値およびNaN値を表すことができる。第2のバイネードは、例えば最高のバイネードであることができ、第2のバイネードは、1の値を含んでいる指数フィールドのビットのすべてに関連付けられ得る。
改良された浮動小数点形式は、第2のバイネードのデータ点のセットのうちのデータ点の縮小された(例えば、より小さい)サブセットを利用して無限大の値およびNaN値を表すように、構造化され得る。データ点の縮小されたセットは、第2のバイネードの全体に関連付けられたデータ点のセットより少ないデータ点を含むことができる。一部の実施形態では、改良された浮動小数点形式は、第2のバイネードのデータ点のセットのうちの単一のデータ点を利用して、無限大の値およびNaN値の両方を単一のマージされたシンボルとして表すように、構造化され得る。すなわち、データ点の縮小されたサブセットは、無限大の値およびNaN値の単一のマージされたシンボルを表すことができる、単一のデータ点を含むことができる。他の実施形態では、データ点の縮小されたサブセットは、無限大の値を表すことができるデータ点、およびNaN値を表すことができる別のデータ点を含むことができる。データ点の縮小されたセットに含まれない第2のバイネードのデータ点のセットの他のデータ点を使用して、有限の数を表すことができ、それによって、改良された浮動小数点数形式を使用して表され得る浮動小数点数の範囲をさらに拡張または拡大することができる。
910で、浮動小数点数がゼロである場合、改良された浮動小数点数形式に従って、ゼロの符号が「ドントケア」項として表され得る。浮動小数点数がゼロである場合、プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、改良された浮動小数点数形式に従って、ゼロの符号を「ドントケア」項として表すことができる。「ドントケア」項は、ゼロの値に関して符号が重要でないことを示すことができる項またはシンボルであることができる。
912で、浮動小数点数がゼロである場合、ゼロの符号の項を表すために、ゼロの値の符号フィールドに、任意の値が生成され得る。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、例えばゼロが浮動小数点数である場合、ゼロの値の符号の項またはシンボルを表すために、符号フィールドに任意の値を生成することができる。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、プロセッサ・コンポーネントまたは計算コンポーネントが生成して符号フィールドに挿入するために便利または効率的な(例えば、最も便利または最も効率的な)任意の値またはシンボルを、改良された浮動小数点数形式の符号フィールドに生成することができる。例えば、プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、最小量のリソース(例えば、処理リソースまたは計算リソース)を利用することができるか、または少なくとも、符号フィールドの任意でない値を決定および生成してゼロの値の符号を表すためにその他の方法で使用されるよりも少ないリソースを利用することができる、任意の値を生成することができる。
914で、浮動小数点数が無限大またはNaNあるいはその両方である場合、改良された浮動小数点数形式に従って、無限大またはNaNあるいはその両方の符号が「ドントケア」項として表され得る。浮動小数点数が無限大またはNaNあるいはその両方である場合、プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、改良された浮動小数点数形式に従って、無限大またはNaNあるいはその両方の符号を「ドントケア」項として表すことができる。「ドントケア」項は、無限大の値またはNaN値あるいはその両方に関して符号が重要でないことを示すことができる項またはシンボルであることができる。一部の実施形態では、無限大の値およびNaN値が、マージされたシンボルとして表され得る。他の実施形態では、無限大の値およびNaN値が、個別に表され得る。
916で、浮動小数点数が無限大またはNaNあるいはその両方である場合、無限大またはNaNあるいはその両方の値の符号の項を表すために、任意の値が、無限大またはNaNあるいはその両方の値に関連付けられた符号フィールドに生成され得る。プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、例えば無限大またはNaNが浮動小数点数の結果である場合、無限大またはNaNあるいはその両方の値のうちの値の符号の項またはシンボルを表すために、無限大またはNaNあるいはその両方の値に関連付けられた符号フィールドに任意の値を生成することができる。本明細書において説明されているように、一部の実施形態では、無限大の値およびNaN値をマージされたシンボルとして表すことができ、他の実施形態では、無限大の値およびNaN値を個別に表すことができる。
改良された浮動小数点数形式に従って、プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、プロセッサ・コンポーネントまたは計算コンポーネントが生成して符号フィールドに挿入するために便利または効率的な(例えば、最も便利または最も効率的な)任意の値またはシンボルを、無限大またはNaNあるいはその両方の値に関連付けられた符号フィールドに生成することができる。例えば、プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、最小量のリソース(例えば、処理リソースまたは計算リソース)を利用することができるか、または少なくとも、符号フィールドの任意でない値を決定および生成して無限大またはNaNあるいはその両方の値の符号を表すためにその他の方法で使用されるよりも少ないリソースを利用することができる、任意の値を生成することができる。
918で、浮動小数点数が丸められる場合、改良された浮動小数点数形式に従って、単一の丸めモードが、2進浮動小数点数を丸めるために利用され得る。数の丸めが望ましい場合、プロセッサ・コンポーネントまたは計算コンポーネントあるいはその両方は、定義された浮動小数点数形式に従って、中間の2進浮動小数点数の丸めを実行して2進浮動小数点数の処理または計算を容易にするために、単一の丸めモードを使用して中間の2進浮動小数点数(例えば、予備的な計算された数値)の丸めを実行することができる。一部の実施形態では、単一の丸めモードは、最も近い値に切り上げるモードであることができる。開示される対象は、浮動小数点数に対して丸めを実行するために、最も近い値に切り上げるモードのみを利用することにより、アプリケーションを実行して、2進浮動小数点数を処理または計算するために利用されるハードウェア(例えば、ハードウェアまたはハードウェア・リソースの量または種類あるいはその両方)を削減することによって、効率を改善することができる。
説明を簡単にするために、一連の動作として方法またはコンピュータ実装方法あるいはその両方が示され、説明される。開示される対象が、示された動作によって、または動作の順序によって、あるいはその両方によって制限されず、例えば動作が、本明細書において提示されておらず、説明されていない他の動作と共に、さまざまな順序で、または同時に、あるいはその両方で発生できるということが、理解されるべきである。さらに、開示される対象に従ってコンピュータ実装方法を実装するために、示されているすべての動作が必要でなくてもよい。加えて、当業者は、コンピュータ実装方法が、代替として、状態図を介して相互に関連する一連の状態またはイベントとして表され得るということを理解するであろう。そのようなコンピュータ実装方法をコンピュータに輸送または転送するのを容易にするために、以下および本明細書全体を通じて開示されたコンピュータ実装方法を製品に格納できるということが、さらに理解されるべきである。製品という用語は、本明細書において使用されるとき、任意のコンピュータ可読デバイスまたはコンピュータ可読ストレージ媒体からアクセスできるコンピュータ・プログラムを包含するよう意図されている。
開示される対象のさまざまな態様の背景を提供するために、図10および以下の説明は、開示される対象のさまざまな態様が実装され得る適切な環境の概要を示すよう意図されている。図10は、本明細書に記載された1つまたは複数の実施形態を容易にすることができる例示的な非限定的動作環境のブロック図を示している。本明細書に記載された他の実施形態で採用されている類似する要素の説明の繰り返しは、簡潔にするために省略されているか、または省略されてよい。図10を参照すると、本開示のさまざまな態様を実装するための適切な動作環境1000は、コンピュータ1012を含むこともできる。コンピュータ1012は、処理ユニット1014、システム・メモリ1016、およびシステム・バス1018を含むこともできる。システム・バス1018は、システム・メモリ1016を含むが、これに限定されないシステム・コンポーネントを、処理ユニット1014に結合する。処理ユニット1014は、さまざまな使用可能なプロセッサのいずれかであることができる。デュアル・マイクロプロセッサおよびその他のマルチプロセッサ・アーキテクチャが、処理ユニット1014として採用されてもよい。システム・バス1018は、ISA(Industry Standard Architecture)、MCA(Micro Channel Architecture)、EISA(Enhanced ISA)、IDE(Intelligent Drive Electronics)、VESAローカル・バス(VLB:VESA Local Bus)、PCI(Peripheral Component Interconnects)、カードバス、ユニバーサル・シリアル・バス(USB:Universal Serial Bus)、AGP(Advanced Graphics Port)、FireWire(IEEE 1394)、および小型コンピュータ・システム・インターフェイス(SCSI:Small Computer Systems Interface)を含むが、これらに限定されない、任意のさまざまな使用可能なバス・アーキテクチャを使用する、メモリ・バスもしくはメモリ・コントローラ、ペリフェラル・バスもしくは外部バス、またはローカル・バス、あるいはその組み合わせを含む、複数の種類のバス構造のいずれかであることができる。システム・メモリ1016は、揮発性メモリ1020および不揮発性メモリ1022を含むこともできる。起動中などにコンピュータ1012内の要素間で情報を転送するための基本ルーチンを含んでいる基本入出力システム(BIOS:basic input/output system)が、不揮発性メモリ1022に格納される。不揮発性メモリ1022の例としては、読み取り専用メモリ(ROM:read only memory)、プログラマブルROM(PROM:programmableROM)、電気的プログラマブルROM(EPROM:electrically programmable ROM)、電気的消去可能プログラマブルROM(EEPROM:electrically erasable programmable ROM)、フラッシュ・メモリ、または不揮発性ランダム・アクセス・メモリ(RAM:random access memory)(例えば、強誘電体RAM(FeRAM:ferroelectric RAM))が挙げられるが、これらに限定されない。揮発性メモリ1020は、外部キャッシュ・メモリとして機能するランダム・アクセス・メモリ(RAM)を含むこともできる。例えばRAMは、スタティックRAM(SRAM:static RAM)、ダイナミックRAM(DRAM:dynamic RAM)、シンクロナスDRAM(SDRAM:synchronous DRAM)、ダブル・データ・レートSDRAM(DDR SDRAM:double data rate SDRAM)、拡張SDRAM(ESDRAM)、シンクリンクDRAM(SLDRAM:Synchlink DRAM)、ダイレクト・ラムバスRAM(DRRAM:direct Rambus RAM)、ダイレクト・ラムバス・ダイナミックRAM(DRDRAM:direct Rambus dynamic RAM)、およびラムバス・ダイナミックRAMなどの、ただしこれらに限定されない、多くの形態で利用可能である。
コンピュータ1012は、取り外し可能/取り外し不可能な揮発性/不揮発性のコンピュータ・ストレージ媒体を含むこともできる。例えば図10は、ディスク・ストレージ1024を示している。ディスク・ストレージ1024は、磁気ディスク・ドライブ、フロッピー(R)・ディスク・ドライブ、テープ・ドライブ、Jazドライブ、Zipドライブ、LS−100ドライブ、フラッシュ・メモリ・カード、またはメモリ・スティックなどの、ただしこれらに限定されない、デバイスを含むこともできる。ディスク・ストレージ1024は、コンパクト・ディスクROMデバイス(CD−ROM:compact disk ROM device)、記録可能CDドライブ(CD−Rドライブ:CD recordable drive)、再書き込み可能CDドライブ(CD−RWドライブ:CD rewritable drive)、またはデジタル多用途ディスクROMドライブ(DVD−ROM:digital versatile disk ROM drive)などの光ディスク・ドライブを含むが、これらに限定されないストレージ媒体を、別々に、または他のストレージ媒体と組み合わせて、含むこともできる。システム・バス1018へのディスク・ストレージ1024の接続を容易にするために、インターフェイス1026などの、取り外し可能または取り外し不可能なインターフェイスが通常は使用される。図10は、ユーザと、適切な動作環境1000において説明された基本的なコンピュータ・リソースとの間の仲介として機能するソフトウェアも示している。そのようなソフトウェアは、例えば、オペレーティング・システム1028を含むこともできる。ディスク・ストレージ1024に格納できるオペレーティング・システム1028は、コンピュータ1012のリソースを制御し、割り当てるように動作する。システムのアプリケーション1030は、プログラム・モジュール1032を介して、オペレーティング・システム1028によるリソースの管理を利用し、例えばシステム・メモリ1016またはディスク・ストレージ1024のいずれかに格納されたデータ1034をプログラムする。さまざまなオペレーティング・システムまたはオペレーティング・システムの組み合わせを使用して本開示が実装され得るということが、理解されるべきである。ユーザは、1つまたは複数の入力デバイス1036を介して、コマンドまたは情報をコンピュータ1012に入力する。入力デバイス1036は、マウス、トラックボール、スタイラス、タッチ・パッド、キーボード、マイクロホン、ジョイスティック、ゲーム・パッド、衛星放送受信アンテナ、スキャナ、TVチューナー・カード、デジタル・カメラ、デジタル・ビデオ・カメラ、Webカメラなどのポインティング・デバイスを含むが、これらに限定されない。これらおよびその他の入力デバイスは、インターフェイス・ポート1038を介してシステム・バス1018を通り、処理ユニット1014に接続する。インターフェイス・ポート1038は、例えば、シリアル・ポート、パラレル・ポート、ゲーム・ポート、およびユニバーサル・シリアル・バス(USB)を含む。出力デバイス1040は、入力デバイス1036と同じ種類のポートの一部を使用する。このようにして、例えば、USBポートを使用して、入力をコンピュータ1012に提供し、コンピュータ1012から出力デバイス1040に情報を出力できる。出力アダプタ1042は、特殊なアダプタを必要とする出力デバイス1040の中でも特に、モニタ、スピーカ、およびプリンタのような何らかの出力デバイス1040が存在することを示すために提供される。出力アダプタ1042の例としては、出力デバイス1040とシステム・バス1018の間の接続の方法を提供するビデオ・カードおよびサウンド・カードが挙げられるが、これらに限定されない。リモート・コンピュータ1044などの、その他のデバイスまたはデバイスのシステムあるいはその両方が、入力機能および出力機能の両方を提供するということに、注意するべきである。
コンピュータ1012は、リモート・コンピュータ1044などの1つまたは複数のリモート・コンピュータへの論理接続を使用して、ネットワーク環境内で動作できる。リモート・コンピュータ1044は、コンピュータ、サーバ、ルータ、ネットワークPC、ワークステーション、マイクロプロセッサベースの機器、ピア・デバイス、またはその他の一般的なネットワーク・ノードなどであることができ、通常は、コンピュータ1012に関連して説明された要素の多くまたはすべてを含むこともできる。簡潔にするために、メモリ・ストレージ・デバイス1046のみが、リモート・コンピュータ1044と共に示されている。リモート・コンピュータ1044は、ネットワーク・インターフェイス1048を介してコンピュータ1012に論理的に接続されてから、通信接続1050を介して物理的に接続される。ネットワーク・インターフェイス1048は、ローカル・エリア・ネットワーク(LAN:local-area networks)、広域ネットワーク(WAN:wide-area networks)、セルラー・ネットワークなどの、有線通信ネットワークまたは無線通信ネットワークあるいはその両方を包含する。LAN技術は、光ファイバ分散データ・インターフェイス(FDDI:Fiber Distributed Data Interface)、銅線分散データ・インターフェイス(CDDI:Copper Distributed Data Interface)、イーサネット(R)、トークン・リングなどを含む。WAN技術は、ポイントツーポイント・リンク、総合デジタル通信網(ISDN:Integrated Services Digital Networks)およびその変形などの回路交換網、パケット交換網、およびデジタル加入者回線(DSL:Digital Subscriber Lines)を含むが、これらに限定されない。通信接続1050は、ネットワーク・インターフェイス1048をシステム・バス1018に接続するために採用されたハードウェア/ソフトウェアのことを指す。通信接続1050は、説明を明確にするために、コンピュータ1012内に示されているが、コンピュータ1012の外部に存在することもできる。ネットワーク・インターフェイス1048に接続するためのハードウェア/ソフトウェアは、単に例示の目的で、通常の電話の等級のモデム、ケーブル・モデム、およびDSLモデムを含むモデム、ISDNアダプタ、およびイーサネット(R)・カードなどの、内部および外部の技術を含むこともできる。
1つまたは複数の実施形態は、任意の可能な統合の技術的詳細レベルで、システム、方法、装置、またはコンピュータ・プログラム製品、あるいはその組み合わせであってよい。コンピュータ・プログラム製品は、プロセッサに1つまたは複数の実施形態の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読ストレージ媒体を含むことができる。コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組み合わせであることができるが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM:random access memory)、読み取り専用メモリ(ROM:read-only memory)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM:compact disc read-only memory)、デジタル多用途ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、パンチカードまたは命令が記録されている溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組み合わせを含むこともできる。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、それ自体が、電波またはその他の自由に伝搬する電磁波、導波管またはその他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの一過性の信号であると解釈されるべきではない。
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワーク、あるいはその組み合わせ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、無線送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組み合わせを備えることができる。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。開示される対象の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組み合わせで記述されたソース・コードまたはオブジェクト・コードであることができる。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意の種類のネットワークを介してユーザのコンピュータに接続することができ、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われ得る。一部の実施形態では、開示される対象の態様を実行するために、例えばプログラマブル論理回路、フィールドプログラマブル・ゲート・アレイ(FPGA:field-programmable gate arrays)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行することができる。
開示される対象の態様は、本明細書において、開示される対象の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組み合わせが、コンピュータ可読プログラム命令によって実装され得るということが理解されるであろう。これらのコンピュータ可読プログラム命令は、コンピュータまたはその他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施する方法を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであることができる。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組み合わせに特定の方式で機能するように指示できるものであることもできる。コンピュータ可読プログラム命令は、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方のブロックに指定される機能/動作を実施するように、コンピュータ実装プロセスを生成するべく、コンピュータ、その他のプログラム可能なデータ処理装置、またはその他のデバイスに読み込むこともでき、それによって、コンピュータ上、その他のプログラム可能な装置上、またはその他のデバイス上で一連の操作可能な動作を実行させるものであることもできる。
図内のフローチャートおよびブロック図は、開示される対象のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を含んでいる、命令のモジュール、セグメント、または部分を表すことができる。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生することができる。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行され得る。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組み合わせは、規定された機能または動作を実行するか、または専用ハードウェアとコンピュータ命令の組み合わせを実行する専用ハードウェアベースのシステムによって実装され得るということにも注意する。
上記では、1つのコンピュータまたは複数のコンピュータあるいはその両方で実行されるコンピュータ・プログラム製品のコンピュータ実行可能命令との一般的な関連において、対象が説明されたが、当業者は、本開示を他のプログラム・モジュールと組み合わせて実装することもできるということを認識するであろう。通常、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するか、あるいはその両方を行うルーチン、プログラム、コンポーネント、データ構造などを含む。さらに、当業者は、本明細書で開示されたコンピュータ実装方法が、シングルプロセッサ・コンピュータ・システムまたはマルチプロセッサ・コンピュータ・システム、ミニコンピューティング・デバイス、メインフレーム・コンピュータ、コンピュータ、ハンドヘルド・コンピューティング・デバイス(例えば、PDA、電話)、マイクロプロセッサベースまたはプログラム可能な家庭用電化製品または産業用電子機器などを含む、その他のコンピュータ・システム構成を使用して実践され得るということを理解するであろう。示された態様は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散コンピューティング環境内で実践されてもよい。ただし、本開示の態様の全部ではないとしても一部は、スタンドアロン・コンピュータ上で実践され得る。分散コンピューティング環境において、プログラム・モジュールは、ローカルおよびリモートの両方のメモリ・ストレージ・デバイスに配置され得る。
本出願において使用されるとき、「コンポーネント」、「システム」、「プラットフォーム」、「インターフェイス」などの用語は、1つまたは複数の特定の機能を含むコンピュータ関連の実体または操作可能なマシンに関連する実体を指すことができるか、またはそれらの実体を含むことができるか、あるいはその両方が可能である。本明細書で開示された実体は、ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアのいずれかであることができる。例えば、コンポーネントは、プロセッサ上で実行されるプロセス、プロセッサ、オブジェクト、実行ファイル、実行のスレッド、プログラム、またはコンピュータ、あるいはその組み合わせであることができるが、これらに限定されない。例として、サーバ上で実行されるアプリケーションおよびサーバの両方が、コンポーネントであることができる。1つまたは複数のコンポーネントが、プロセス内または実行のスレッド内あるいはその両方に存在することができ、コンポーネントは、1つのコンピュータ上に局在するか、または2つ以上のコンピュータ間で分散されるか、あるいはその両方が可能である。別の例では、各コンポーネントは、さまざまなデータ構造が格納されているさまざまなコンピュータ可読媒体から実行できる。コンポーネントは、1つまたは複数のデータ・パケット(例えば、ローカル・システム内または分散システム内の別のコンポーネントと情報をやりとりするか、またはインターネットなどのネットワークを経由して、信号を介して他のシステムと情報をやりとりするか、あるいはその両方によって情報をやりとりする、1つのコンポーネントからのデータ)を含んでいる信号などに従って、ローカルまたはリモートあるいはその両方のプロセスを介して通信できる。別の例として、コンポーネントは、電気または電子回路によって操作される機械的部品によって提供される特定の機能を有する装置であることができ、プロセッサによって実行されるソフトウェア・アプリケーションまたはファームウェア・アプリケーションによって操作される。そのような場合、プロセッサは、装置の内部または外部に存在することができ、ソフトウェア・アプリケーションまたはファームウェア・アプリケーションの少なくとも一部を実行できる。さらに別の例として、コンポーネントは、機械的部品を含まない電子コンポーネントを介して特定の機能を提供する装置であることができ、それらの電子コンポーネントは、電子コンポーネントの機能の少なくとも一部を与えるソフトウェアまたはファームウェアを実行するためのプロセッサまたはその他の方法を含むことができる。1つの態様では、コンポーネントは、例えばクラウド・コンピューティング・システム内で、仮想マシンを介して電子コンポーネントをエミュレートすることができる。
加えて、「または」という用語は、排他的論理和ではなく、包含的論理和を意味するよう意図されている。すなわち、特に指定されない限り、または文脈から明らかでない限り、「XがAまたはBを採用する」は、自然な包含的順列のいずれかを意味するよう意図されている。すなわち、XがAを採用するか、XがBを採用するか、またはXがAおよびBの両方を採用する場合、「XがAまたはBを採用する」が、前述の事例のいずれかにおいて満たされる。さらに、本明細書および添付の図面において使用される冠詞「a」および「an」は、単数形を対象にすることが特に指定されない限り、または文脈から明らかでない限り、「1つまたは複数」を意味すると一般に解釈されるべきである。本明細書において使用されるとき、「例」または「例示的」あるいはその両方の用語は、例、事例、または実例となることを意味するために使用される。誤解を避けるために、本明細書で開示された対象は、そのような例によって制限されない。加えて、「例」または「例示的」あるいはその両方として本明細書に記載された任意の態様または設計は、他の態様または設計よりも好ましいか、または有利であると必ずしも解釈されず、当業者に知られている同等の例示的な構造および技術を除外するよう意図されていない。
本明細書において使用されるとき、「プロセッサ」という用語は、シングルコア・プロセッサと、ソフトウェアのマルチスレッド実行機能を備えるシングルプロセッサと、マルチコア・プロセッサと、ソフトウェアのマルチスレッド実行機能を備えるマルチコア・プロセッサと、ハードウェアのマルチスレッド技術を備えるマルチコア・プロセッサと、並列プラットフォームと、分散共有メモリを備える並列プラットフォームとを含むが、これらに限定されない、実質的に任意の計算処理ユニットまたはデバイスを指すことができる。さらに、プロセッサは、集積回路、特定用途向け集積回路(ASIC:application specific integrated circuit)、デジタル信号プロセッサ(DSP:digital signal processor)、フィールド・プログラマブル・ゲート・アレイ(FPGA:field programmable gate array)、プログラマブル・ロジック・コントローラ(PLC:programmable logic controller)、複合プログラム可能論理デバイス(CPLD:complex programmable logic device)、個別のゲートまたはトランジスタ論理、個別のハードウェア・コンポーネント、あるいは本明細書に記載された機能を実行するように設計されたこれらの任意の組み合わせを指すことができる。さらに、プロセッサは、空間利用を最適化し、ユーザ機器の性能を向上するために、分子および量子ドットベースのトランジスタ、スイッチ、およびゲートなどの、ただしこれらに限定されない、ナノスケール・アーキテクチャを利用することができる。プロセッサは、計算処理ユニットの組み合わせとして実装されてもよい。本開示では、コンポーネントの動作および機能に関連する「ストア」、「ストレージ」、「データ・ストア」、「データ・ストレージ」、「データベース」、および実質的に任意のその他の情報格納コンポーネントなどの用語は、「メモリ・コンポーネント」、「メモリ」内に具現化された実体、またはメモリを備えているコンポーネントを指すために使用される。本明細書に記載されたメモリまたはメモリ・コンポーネントあるいはその両方が、揮発性メモリまたは不揮発性メモリのいずれかであることができ、あるいは揮発性メモリおよび不揮発性メモリの両方を含むことができるということが、理解されるべきである。不揮発性メモリの例としては、読み取り専用メモリ(ROM)、プログラマブルROM(PROM)、電気的プログラマブルROM(EPROM)、電気的消去可能ROM(EEPROM)、フラッシュ・メモリ、または不揮発性ランダム・アクセス・メモリ(RAM)(例えば、強誘電体RAM(FeRAM))が挙げられるが、これらに限定されない。揮発性メモリは、例えば外部キャッシュ・メモリとして機能できる、RAMを含むことができる。例えばRAMは、シンクロナスRAM(SRAM)、ダイナミックRAM(DRAM)、シンクロナスDRAM(SDRAM)、ダブル・データ・レートSDRAM(DDR SDRAM)、拡張SDRAM(ESDRAM)、シンクリンクDRAM(SLDRAM)、ダイレクト・ラムバスRAM(DRRAM)、ダイレクト・ラムバス・ダイナミックRAM(DRDRAM)、およびラムバス・ダイナミックRAM(RDRAM:Rambus dynamic RAM)などの、ただしこれらに限定されない、多くの形態で利用可能である。さらに、本明細書において開示されたシステムまたはコンピュータ実装方法のメモリ・コンポーネントは、これらおよび任意のその他の適切な種類のメモリを含むが、これらに限定されない、メモリを含むよう意図されている。
前述した内容は、システムおよびコンピュータ実装方法の単なる例を含んでいる。当然ながら、本開示を説明する目的で、コンポーネントまたはコンピュータ実装方法の考えられるすべての組み合わせについて説明することは不可能であるが、当業者は、本開示の多くのその他の組み合わせおよび並べ替えが可能であるということを認識できる。さらに、「含む」、「有する」、「所有する」などの用語が、発明を実施するための形態、特許請求の範囲、付録、および図面において使用される範囲では、それらの用語は、「備えている」が特許請求における暫定的な用語として使用されるときに解釈されるような、用語「備えている」と同様の方法で、包含的であるよう意図されている。さまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に制限されない。記載された実施形態の範囲および思想を逸脱することなく多くの変更および変形が可能であることは、当業者にとって明らかであろう。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書で開示された実施形態を理解できるようにするために選択されている。