(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2025-05-27
(45)【発行日】2025-06-04
(54)【発明の名称】ハイブリッドフォーマットのための浮動小数点計算
(51)【国際特許分類】
G06F 7/499 20060101AFI20250528BHJP
G06N 20/00 20190101ALI20250528BHJP
G06F 17/16 20060101ALI20250528BHJP
【FI】
G06F7/499 101
G06N20/00
G06F17/16 Z
(21)【出願番号】P 2023515366
(86)(22)【出願日】2021-08-24
(86)【国際出願番号】 EP2021073384
(87)【国際公開番号】W WO2022053305
(87)【国際公開日】2022-03-17
【審査請求日】2024-01-23
(32)【優先日】2020-09-08
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】アグラワル、アンクル
(72)【発明者】
【氏名】フライシャー、ブルース
【審査官】佐賀野 秀一
(56)【参考文献】
【文献】米国特許出願公開第2020/0249910(US,A1)
【文献】国際公開第2020/059074(WO,A1)
【文献】特開平02-091724(JP,A)
【文献】特開2020-077298(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 5/01
G06F 7/38- 7/537
G06F 7/57- 7/575
G06F 7/74- 7/78
G06F 17/16
G06N 20/00
(57)【特許請求の範囲】
【請求項1】
簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を1つまたは複数のプロセッサによって実行するための方法であって、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換することと、
前記1つまたは複数のssFPUを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行することとを含み、
前記複数の
浮動小数点フォーマットを、符号ビット、指数ビット、および仮数ビットを含む超低精度「VLP」フォーマットとして特定することであって、前記VLPは8ビット浮動小数点フォーマットである、特定することと、
前記スーパーセット浮動小数点フォーマットを単一浮動小数点フォーマットとして特定することであって、前記スーパーセット浮動小数点フォーマットは符号ビット、指数ビットおよび仮数ビットを含む9ビット浮動小数点フォーマットであり、前記1つまたは複数のssFPUは9ビット浮動小数点ユニットである、特定することと、をさらに含む
、方法。
【請求項2】
簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を1つまたは複数のプロセッサによって実行するための方法であって、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換することと、
前記1つまたは複数のssFPUを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行することとを含み、
複数の8ビット浮動小数点フォーマットとして表される前記1つまたは複数の入力を、前記1つまたは複数のssFPUによる計算の前に前記スーパーセット浮動小数点フォーマットに変換することであって、前記スーパーセット浮動小数点フォーマットは9ビット浮動小数点フォーマットであり、前記1つまたは複数のssFPUは9ビット浮動小数点ユニットである、変換することをさらに含む
、方法。
【請求項3】
簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を1つまたは複数のプロセッサによって実行するための方法であって、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換することと、
前記1つまたは複数のssFPUを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行することとを含み、
前記1つまたは複数のssFPUのアレイのエッジにおいて、複数の8ビット浮動小数点フォーマットとして表される前記1つまたは複数の入力の前記スーパーセット浮動小数点フォーマットへの前記変換を実行することと、
前記1つまたは複数のssFPUの前記アレイを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して同時に前記計算操作を実行することと、をさらに含む
、方法。
【請求項4】
簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を1つまたは複数のプロセッサによって実行するための方法であって、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換することと、
前記1つまたは複数のssFPUを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行することとを含み、
前記複数の
浮動小数点フォーマットを置き換えるために前記スーパーセット浮動小数点フォーマットを選択することにより、前記計算操作の前に丸め誤差を防止することをさらに含む
、方法。
【請求項5】
コンピューティング環境において、簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するためのシステムであって、
実行可能な命令を有する1つまたは複数のコンピュータを含み、前記実行可能な命令は実行されたときに前記システムに、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換することと、
前記1つまたは複数のssFPUを使用して、スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行することと、を行わせ、
前記実行可能な命令は実行されたときに、前記システムに、
前記複数の
浮動小数点フォーマットを、符号ビット、指数ビット、および仮数ビットを含む超低精度「VLP」フォーマットとして特定することであって、前記VLPは8ビット浮動小数点フォーマットである、特定することと、
前記スーパーセット浮動小数点フォーマットを単一浮動小数点フォーマットとして特定することであって、前記スーパーセット浮動小数点フォーマットは符号ビット、指数ビットおよび仮数ビットを含む9ビット浮動小数点フォーマットであり、前記1つまたは複数のssFPUは9ビット浮動小数点ユニットである、特定することと、を行わせる
、システム。
【請求項6】
コンピューティング環境において、簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するためのシステムであって、
実行可能な命令を有する1つまたは複数のコンピュータを含み、前記実行可能な命令は実行されたときに前記システムに、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換することと、
前記1つまたは複数のssFPUを使用して、スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行することと、を行わせ、
前記実行可能な命令は実行されたときに、前記システムに、複数の8ビット浮動小数点フォーマットとして表される前記1つまたは複数の入力を、前記1つまたは複数のssFPUによる計算の前に前記スーパーセット浮動小数点フォーマットに変換することであって、前記スーパーセット浮動小数点フォーマットは9ビット浮動小数点フォーマットであり、前記1つまたは複数のssFPUは9ビット浮動小数点ユニットである、変換することを行わせる
、システム。
【請求項7】
コンピューティング環境において、簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するためのシステムであって、
実行可能な命令を有する1つまたは複数のコンピュータを含み、前記実行可能な命令は実行されたときに前記システムに、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換することと、
前記1つまたは複数のssFPUを使用して、スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行することと、を行わせ、
前記実行可能な命令は実行されたときに、前記システムに、
前記1つまたは複数のssFPUのアレイのエッジにおいて、複数の8ビット浮動小数点フォーマットとして表される前記1つまたは複数の入力の前記スーパーセット浮動小数点フォーマットへの前記変換を実行することと、
前記1つまたは複数のssFPUの前記アレイを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して同時に前記計算操作を実行することと、を行わせる
、システム。
【請求項8】
コンピューティング環境において、簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するためのシステムであって、
実行可能な命令を有する1つまたは複数のコンピュータを含み、前記実行可能な命令は実行されたときに前記システムに、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換することと、
前記1つまたは複数のssFPUを使用して、スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行することと、を行わせ、
前記実行可能な命令は実行されたときに、前記システムに、前記複数の
浮動小数点フォーマットを置き換えるために前記スーパーセット浮動小数点フォーマットを選択することにより、前記計算操作の前に丸め誤差を防止することを行わせる
、システム。
【請求項9】
簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するためのコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
1つまたは複数のコンピュータ可読記憶媒体と、前記1つまたは複数のコンピュータ可読記憶媒体に一括して記憶されたプログラム命令と、を含み、前記プログラム命令は、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数のスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換するためのプログラム命令と、
前記1つまたは複数のssFPUを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行するためのプログラム命令とを含み、
前記複数の
浮動小数点フォーマットを、符号ビット、指数ビット、および仮数ビットを含む超低精度「VLP」フォーマットとして特定することであって、前記VLPは8ビット浮動小数点フォーマットである、特定することと、
前記スーパーセット浮動小数点フォーマットを単一浮動小数点フォーマットとして特定することであって、前記スーパーセット浮動小数点フォーマットは符号ビット、指数ビットおよび仮数ビットを含む9ビット浮動小数点フォーマットであり、前記1つまたは複数のssFPUは9ビット浮動小数点ユニットである、特定することと、を行うためのプログラム命令をさらに含む
、コンピュータプログラム製品。
【請求項10】
簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するためのコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
1つまたは複数のコンピュータ可読記憶媒体と、前記1つまたは複数のコンピュータ可読記憶媒体に一括して記憶されたプログラム命令と、を含み、前記プログラム命令は、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数のスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換するためのプログラム命令と、
前記1つまたは複数のssFPUを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行するためのプログラム命令とを含み、
複数の8ビット浮動小数点フォーマットとして表される前記1つまたは複数の入力を、前記1つまたは複数のssFPUによる計算の前に前記スーパーセット浮動小数点フォーマットに変換することであって、前記スーパーセット浮動小数点フォーマットは9ビット浮動小数点フォーマットであり、前記1つまたは複数のssFPUは9ビット浮動小数点ユニットである、変換することを行うための、プログラム命令をさらに含む
、コンピュータプログラム製品。
【請求項11】
簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するためのコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
1つまたは複数のコンピュータ可読記憶媒体と、前記1つまたは複数のコンピュータ可読記憶媒体に一括して記憶されたプログラム命令と、を含み、前記プログラム命令は、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数のスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換するためのプログラム命令と、
前記1つまたは複数のssFPUを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行するためのプログラム命令とを含み、
前記1つまたは複数のssFPUのアレイのエッジにおいて、複数の8ビット浮動小数点フォーマットとして表される前記1つまたは複数の入力の前記スーパーセット浮動小数点フォーマットへの前記変換を実行することと、
前記1つまたは複数のssFPUの前記アレイを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して同時に前記計算操作を実行することと、を行うためのプログラム命令をさらに含む
、コンピュータプログラム製品。
【請求項12】
簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するためのコンピュータプログラム製品であって、前記コンピュータプログラム製品は、
1つまたは複数のコンピュータ可読記憶媒体と、前記1つまたは複数のコンピュータ可読記憶媒体に一括して記憶されたプログラム命令と、を含み、前記プログラム命令は、
複数の浮動小数点フォーマットとして表される1つまたは複数の入力を、1つまたは複数のスーパーセット浮動小数点ユニット「ssFPU」による計算の前に、スーパーセット浮動小数点フォーマットに変換するためのプログラム命令と、
前記1つまたは複数のssFPUを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記1つまたは複数の入力に対して計算操作を実行するためのプログラム命令とを含み、
前記複数の
浮動小数点フォーマットを置き換えるために前記スーパーセット浮動小数点フォーマットを選択することにより、前記計算操作の前に丸め誤差を防止するためのプログラム命令をさらに含む
、コンピュータプログラム製品。
【請求項13】
1つまたは複数のプロセッサによって簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するための方法であって、
超低精度「VLP」浮動小数点フォーマットとして表される複数の入力を、スーパーセット浮動小数点フォーマットに変換することと、
複数の簡略化されたスーパーセット浮動小数点ユニット「ssFPU」のアレイを使用して、前記スーパーセット浮動小数点フォーマットとして表される前記複数の入力に対して計算操作を実行することとを含み、
前記VLP浮動小数点フォーマットを8ビット浮動小数点フォーマット「FP8」として特定することであって、前記FP8フォーマットは符号ビット、指数ビット、および仮数ビットを含む、特定することと、
前記スーパーセット浮動小数点フォーマットを単一浮動小数点フォーマットとして特定することであって、前記スーパーセット浮動小数点フォーマットは符号ビット、指数ビットおよび仮数ビットを含む9ビット浮動小数点フォーマット「FP9」であり、
前記複数のssFPUは9ビット浮動小数点ユニットである、特定することと、をさらに含む
、方法。
【請求項14】
1つまたは複数のプロセッサによって簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するための方法であって、
超低精度「VLP」浮動小数点フォーマットとして表される入力オペランドを、簡略化されたスーパーセット浮動小数点ユニット「ssFPU」のアレイで計算操作を実行する前に丸め誤差を防ぐためにスーパーセット浮動小数点フォーマットに変換することと、前記ssFPUの前記アレイを使用して前記スーパーセット浮動小数点フォーマットとして表される前記入力オペランド上で前記計算操作を実行することと、とを含む、方法。
【請求項15】
前記VLP浮動小数点フォーマットはメモリフォーマットであり、前記スーパーセット浮動小数点フォーマットは計算フォーマットであり、前記ssFPUの前記アレイの各々は9ビット浮動小数点ユニットである、
請求項14に記載の方法。
【請求項16】
1つまたは複数のプロセッサによって簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するための方法であって、
浮動小数点ユニット(FPU)のアレイを提供することと、
メモリバンクに、符号ビットと少なくとも1つの指数ビットと少なくとも1つの仮数ビットとを含む第1のビット数を有する第1の浮動小数点フォーマットの浮動小数点オペランドを格納することと、
変換ユニットによって、前記メモリバンクからオペランドを受信することであって、前記変換ユニットは、FPUの前記アレイの外部にある回路を含む、受信することと、
前記変換ユニットによって、前記第1の浮動小数点フォーマットの前記オペランドを、符号ビットと少なくとも1つの指数ビットと少なくとも1つの仮数ビットとを含む第2のビット数を有する第2の浮動小数点フォーマットに変換することであって、前記第2のビット数は前記第1のビット数よりも大きい、変換することと、
前記変換ユニットによって、前記第2の浮動小数点フォーマットの前記オペランドに対して計算を実行するために、前記第2の浮動小数点フォーマットの前記オペランドをFPUの前記アレイに入力することであって、前記オペランドの前記第2の浮動小数点フォーマットへの前記変換は、FPUの前記アレイの外部にある前記変換ユニットで実行される、入力することとを含む、方法。
【請求項17】
浮動小数点ユニット(FPU)のアレイと、
符号ビットと少なくとも1つの指数ビットと少なくとも1つの仮数ビットとを含む第1のビット数を有する第1の浮動小数点フォーマットの浮動小数点オペランドを含むメモリバンクと、
FPUの前記アレイの外部にあり、回路を含む変換ユニットとを含み、前記変換ユニットは、
前記メモリバンクからオペランドを受信することと、
前記第1の浮動小数点フォーマットの前記オペランドを、符号ビットと少なくとも1つの指数ビットと少なくとも1つの仮数ビットとを含む第2のビット数を有する第2の浮動小数点フォーマットに変換することであって、前記第2のビット数は前記第1のビット数よりも大きい、変換することと、
前記第2の浮動小数点フォーマットの前記オペランドに対して計算を実行するために、前記第2の浮動小数点フォーマットの前記オペランドをFPUの前記アレイに入力することであって、前記オペランドの前記第2の浮動小数点フォーマットへの前記変換は、FPUの前記アレイの外部にある前記変換ユニットで実行される、入力することとを行う、システム。
【請求項18】
アクセラレータであって、
浮動小数点ユニット(FPU)のアレイと、
符号ビットと少なくとも1つの指数ビットと少なくとも1つの仮数ビットとを含む第1のビット数を有する第1の浮動小数点フォーマットの浮動小数点オペランドを含むメモリバンクと、
FPUの前記アレイの外部にあり、回路を含む変換ユニットとを含み、前記変換ユニットは、
前記メモリバンクからオペランドを受信することと、
前記第1の浮動小数点フォーマットの前記オペランドを、符号ビットと少なくとも1つの指数ビットと少なくとも1つの仮数ビットとを含む第2のビット数を有する第2の浮動小数点フォーマットに変換することであって、前記第2のビット数は前記第1のビット数よりも大きい、変換することと、
前記第2の浮動小数点フォーマットの前記オペランドに対して計算を実行するために、前記第2の浮動小数点フォーマットの前記オペランドをFPUの前記アレイに入力することであって、前記オペランドの前記第2の浮動小数点フォーマットへの前記変換は、FPUの前記アレイの外部にある前記変換ユニットで実行される、入力することとを行う、アクセラレータと、
訓練および浮動小数点計算の少なくとも1つを実行するために、FPUの前記アレイへのプログラム命令を構成して提供するようにプログラムするアプリケーションとを含む、サーバ。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、コンピューティングシステムに関し、より詳細には、コンピューティングシステムにおけるハイブリッドフォーマットのための浮動小数点計算のための様々な実施形態に関連する。
【発明の概要】
【0002】
本発明の一実施形態によれば、コンピューティングシステムにおけるハイブリッドフォーマットの浮動小数点計算方法(例えば、簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行する)が提供される。複数の浮動小数点数フォーマットとして表される1つまたは複数の入力が、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット(ssFPU)による計算の前に、スーパーセット浮動小数点フォーマットに変換されてもよい。1つまたは複数のssFPUを使用して、スーパーセット浮動小数点フォーマットとして表される1つまたは複数の入力に対して計算操作が実行されてもよい。一態様では、スーパーセット浮動小数点フォーマットは、符号ビット、指数ビット(e)、および仮数ビット(m)を含む9ビット浮動小数点フォーマット(「FP9」)であってもよい。ssFPUのものは、スーパーセット浮動小数点フォーマット(例えば、9ビット浮動小数点フォーマット(「FP9」))のみで動作する9ビット浮動小数点ユニットであってもよい。
【0003】
追加の実施形態では、超低精度(「VLP」)浮動小数点フォーマットとして表される複数の入力は、スーパーセット浮動小数点フォーマットに変換されてもよい。ssFPUのアレイを使用して、スーパーセット浮動小数点フォーマットとして表される複数の入力に対して計算操作が実行されてもよい。
【0004】
追加の実施形態では、超低精度(「VLP」)浮動小数点フォーマットとして表される入力オペランドは、簡略化されたスーパーセット浮動小数点ユニット(ssFPU)のアレイで計算操作を実行する前に、丸め誤差を防ぐためにスーパーセット浮動小数点フォーマットに変換されてもよい。ssFPUのアレイを使用して、スーパーセット浮動小数点フォーマットとして表される複数の入力に対して計算操作が実行されてもよい。
【0005】
実施形態は、コンピュータ使用可能なプログラム製品を含む。コンピュータ使用可能なプログラム製品は、コンピュータ可読記憶装置と、記憶装置に格納されたプログラム命令とを含む。
【0006】
実施形態は、コンピュータシステムを含む。コンピュータシステムは、プロセッサと、コンピュータ可読メモリと、コンピュータ可読記憶装置と、メモリを介したプロセッサによる実行のために記憶装置に格納されたプログラム命令とを含む。したがって、前述の例示的な方法の実施形態に加えて、ハイブリッドフォーマットのための浮動小数点計算のための他の例示的なシステム及びコンピュータ製品の実施形態が提供される。
【図面の簡単な説明】
【0007】
【
図1】本発明の実施形態による、データ処理システムのネットワークを示すブロック図である。
【
図2】本発明の実施形態による、データ処理システムのブロック図である。
【
図3】例示的な実施形態による、浮動小数点ユニットの構成例を示すブロック図である。
【
図4A】ハイブリッドフォーマットを用いない浮動小数点計算のシステムにおける例示的な機能関係を示す追加のブロック図である。
【
図4B】簡略化されたスーパーセット浮動小数点計算ユニット(「ssFPU」)を使用するハイブリッドフォーマットの浮動小数点計算のシステムにおける例示的な機能関係を示す追加のブロック図である。
【
図5】本発明の態様が実現され得る、プロセッサによるコンピューティング環境において、機械学習を加速するための例示的なシステムおよび機能を示すブロックフロー図である。
【
図6】本発明の態様が実現され得る、プロセッサによるコンピューティング環境において、簡略化されたスーパーセット浮動小数点ユニット(「ssFPU」)を介してハイブリッド精度浮動小数点フォーマット計算を実行するための例示的な方法を示すフローチャート図である。
【
図7】本発明の態様が実現され得る、プロセッサによるコンピューティング環境において、簡略化されたスーパーセット浮動小数点ユニット(「ssFPU」)を介してハイブリッド精度浮動小数点フォーマット計算を実行するための例示的な方法を示すフローチャート図である。
【
図8】さらに、本発明の態様が実現され得る、プロセッサによるコンピューティング環境において、簡略化されたスーパーセット浮動小数点ユニット(「ssFPU」)を介してハイブリッド精度浮動小数点フォーマット計算を実行するための例示的な方法を示すフローチャート図である。
【発明を実施するための形態】
【0008】
コンピュータのメモリには限りがあるので、2進数の分数でも10進数の分数でも、無限の精度で数値を記憶させることはできない。コンピュータのメモリに表現するためには、ある時点で数値を切り捨てたり、四捨五入したりしなければならない。
【0009】
メモリ上でどのように数字を表現するかは、その表現にどれだけの精度を求めるかによって決まる。一般に、2進数のビットで数値を表現する単一の方法(固定小数点表現など)は、数値を使用するさまざまな用途に適していない。例えば、物理学者は、光速(約300000000)とニュートンの重力定数(約0.0000000000667)を表す数値を、場合によっては一緒に使う必要がある。
【0010】
異なるタイプのアプリケーションとその精度に対するニーズを満たすために、汎用的な数値フォーマットを設計し、非常に異なる大きさの数値に対する精度を提供する必要がある。しかし、必要なのは相対的な精度だけである。そのため、固定小数点表現ではあまり意味がない。この問題を解決するのが浮動小数点表現である。
【0011】
浮動小数点表現は、与えられた数値を3つの主要な部分に分解する-(i)数値の桁を含む仮数、(ii)仮数の始まりに対して小数点(または2進数)を配置する位置を設定する指数。負の指数は非常に小さい(つまりゼロに近い)数を表し、(iii)数に関連する符号(正または負)である。
【0012】
浮動小数点ユニット(FPU)とは、
図3に示すように、浮動小数点計算を実行するプロセッサまたはその一部で、ハードウェア回路として実装されたものである。初期のFPUはスタンドアロン型プロセッサだったが、現在ではほとんどがコンピュータのCPUに内蔵されている。最近のCPUに内蔵されたFPUは、IEEE浮動小数点規格(IEEE754)に定められた計算ルールを遵守しながら高精度な浮動小数点計算を実行するため、非常に複雑なものとなっている。
【0013】
FPUはビット幅を持つ。ビット幅とは、浮動小数点フォーマット(以下、「フォーマット」または「浮動小数点フォーマット」と呼ぶ)で数値を表現するために使用される2進ビットの数で表されるサイズである。浮動小数点フォーマットについては、米国電気電子学会(IEEE)などの団体が規格を策定している。現在使用されているフォーマットは、16ビット、32ビット、64ビット、128ビットのフォーマットを使用して数値を表現する標準的な方法を提供する。
【0014】
例えば、浮動小数点フォーマットは、符号、符号なしバイアス指数、および仮数を含むことができる。符号ビットはシングルビットで、「S」で表される。符号なしバイアス指数は「e」で表され、(例えばIEEE754で定義されたフォーマットでは)単精度で8ビット長、倍精度で11ビット長、4倍精度で15ビット長である。仮数の長さは、やはりIEEE754規格では、単精度で24ビット、倍精度で53ビット、4倍精度で113ビットである。IEEE754-2008で定義されているように、仮数の最上位ビット、すなわちいわゆる暗黙ビットは、指数ビットの値によって暗示される。
【0015】
(1/5/2)(符号-指数-仮数)浮動小数点8ビットフォーマット(「FP8」)を使用すると、精度をあまり落とさずに機械学習モデルをうまく訓練できる可能性がある。8ビット学習技術は急速に進歩しているが、その適用範囲は一般的に深層学習モデルの小さなサブセットにのみ適用される。FP8フォーマットの他の非効率性の中でこれに対処するために、これらの課題のすべてに対処するために、計算(例えば、訓練と推論)と通信の両方に適用可能なハイブリッドFP8フォーマットおよび技術が使用されてもよい。
【0016】
ハイブリッドFP8フォーマットでは、順伝搬に4指数ビット、3仮数ビット(指数バイアスを含む1/4/3)を、逆伝搬に5指数ビット、2仮数ビット(1/5/2)を使用し、従来問題があったモデルで無視できる精度劣化を達成することができる。つまり、ハイブリッドFP8フォーマットでは、順伝搬で、1符号ビット、4指数ビット、3仮数ビットの8ビット浮動小数点フォーマットが使用される。バックワードパスでは、ハイブリッドFP8フォーマットのために、1符号ビット、5指数ビット、2仮数ビットの8ビット浮動小数点フォーマットが使用される。8ビットは、メモリ階層の全レベルと互換性があるように使用される。
【0017】
また、例えば、基本的な浮動小数点関数である融合積和演算(「FMMA」)などのハイブリッドFP8フォーマットの計算は、以下の式で観測することができる。
【0018】
R、CがFP16で、積項A1、A2、B1、B2がFP8における場合(例えば、Bの16ビット入力は、要素あたり8ビットの2要素ペアとしてである)、AおよびBの16ビット入力は要素あたり8ビットの2要素ペアで、Rは式2Aに等しいかもしれない。
【0019】
A1、A2、B1、B2がハイブリッド-FP8数の場合、A1、A2はあるフォーマット(例えば1/5/2フォーマット)と、B1、B2は別のフォーマット(例えば1/4/3フォーマット)であってもよい。
【0020】
しかし、ハイブリッドFP8フォーマット(一部のオペランドを1/5/2フォーマット、一部のオペランドを1/4/3フォーマットで使用可能)の使用は便利であるが、現在のFPUは各オペランドがFP8フォーマット(1/5/2フォーマット)もしくはFP8(1/4/3フォーマット)またはその両方を使用しているかを判断し、それぞれのフォーマットに合わせて適切にオペランドのデコードを行う必要がある。現在のFPUは、異なるFP8フォーマットをデコードするために追加のロジックと機能を含める必要があり、特に、同じFP8オペランドが複数のFPUに送信され、各FPUが結局同一のデコードを行い、デコード制御信号も各FPUに送信しなければならないため、処理能力が高まる一方で計算効率が低下してしまうという問題がある。さらに、1/4/3数フォーマットでは、指数ビットが4つしかないために生じる小さなダイナミックレンジを補償するために、プログラム可能な指数バイアスを持つことが望ましく、
図5にて後述する。各FPUにおいてプログラム可能な指数バイアスをデコードすると、より多くの重複するロジックが追加されることになる。したがって、図示された実施形態の機構は、両方の数値フォーマット(例えば、FP8フォーマット(1/5/2フォーマット)もしくはFP8(1/4/3フォーマット))またはその両方を使用して計算を実施し、異なるFP8フォーマットおよびデコード制御信号を受け取る各FPUをデコードする必要性をなくすための効率的なプロセスを提供する。
【0021】
したがって、本発明の様々な実施形態は、計算エンジンのシストリックアレイにおいてハイブリッドFP8計算を効率的に実行することを提供する。一態様では、図示された実施形態の機構は、シストリックアレイへのエントリポイントに変換エンジンを含み、ハイブリッドFP8数をFP8フォーマットのスーパーセットである統一フォーマット(この場合、FP9)に変換し、計算エンジンを電力、面積および遅延においてより効率的にすることができるようにする。この新しいFPU(例えば、簡略化されたスーパーセットFPUまたは「ssFPU」)は、高スループットアクセラレータ(例えば、深層学習アクセラレータなど)における計算密度を向上させる。
【0022】
一態様では、本発明は、コンピューティングシステムにおけるハイブリッドフォーマットの浮動小数点計算(例えば、簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行すること)を提供する。複数の浮動小数点数フォーマットとして表される1つまたは複数の入力は、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット(ssFPU)によって計算の前にスーパーセット浮動小数点フォーマットに変換されてもよい。また、本明細書では、ssFPUは、単に「簡略化されたスーパーセット浮動小数点ユニット」(「ssFPU」)またはより一般的に「スーパーセット浮動小数点ユニット」(「sFPU」)として言及される場合がある。したがって、「スーパーセット浮動小数点ユニット」(「sFPU」)に対するいかなる言及も、簡略化されたスーパーセット浮動小数点ユニット(ssFPU)を指し、再構成可能FPUと混同されないようにすることである。
【0023】
1つの態様では、スーパーセットフォーマットは、例えば、スーパーセットフォーマットが1/5/3フォーマットとなるように、指数および仮数ビット幅として「max(exponent1,exponent2)」および「max(mantissa1,mantissa2)」を使用する。あるいは、1/6/1と1/4/3が望ましいメモリフォーマットであれば、スーパーセットフォーマットは1/6/3または10ビット浮動小数点となる。ssFPUは、スーパーセットフォーマットの数値に対してのみ動作するFPUである。1つまたは複数のssFPUを使用して、スーパーセット浮動小数点フォーマットとして表される1つまたは複数の入力に対して計算操作を実行することができる。一態様では、スーパーセット浮動小数点フォーマットは、符号ビット、指数ビット(e)、および仮数ビット(m)を含む9ビット浮動小数点フォーマット(「FP9」)であってもよい。ssFPUのものは、9ビット浮動小数点フォーマット(「FP9」)のみで動作する9ビット浮動小数点ユニットであってもよい。すなわち、ssFPUは、スーパーセット浮動小数点フォーマット(例えば、9ビット浮動小数点フォーマット(「FP9」))のみで動作または計算を行う。
【0024】
本明細書で使用されるように、例示の便宜のために、図示された実施形態の機構は、ハイブリッドFP8を使用しているが、他の任意の浮動小数点フォーマットに等しく適用可能であることに留意されたい。また、浮動小数点計算のために1つまたは複数の計算が実行されてもよく、1つまたは複数の数学的演算を伴う可能性のある様々な数学的演算または関数(例えば、変化率/微積分演算の実行、解析的または計算的に微分方程式または偏微分方程式を解く、加算、減算、除算、乗算、標準偏差、平均、平均値、パーセント、統計分布を用いた統計モデル、組み合わせた変数の最小、最大または同様の閾値を求めることなどによって)が使用され得ることに留意されたい。
【0025】
次に、
図1および
図2に目を向けると、例示的な実施形態が実装され得るデータ処理環境の図である。
図1および
図2は、例示に過ぎず、異なる実施形態が実装され得る環境に関して、いかなる限定も主張または示唆することを意図していない。特定の実施形態は、以下の説明に基づいて、描かれた環境に対して多くの修正を加えることができる。
【0026】
図1は、例示的な実施形態が実装され得るデータ処理システムのネットワークのブロック図である。データ処理環境100は、例示的な実施形態が実装され得るコンピュータのネットワークである。データ処理環境100は、ネットワーク102を含む。ネットワーク102は、データ処理環境100内で一緒に接続された様々な装置とコンピュータとの間の通信リンクを提供するために使用される媒体である。ネットワーク102は、有線、無線通信リンク、または光ファイバケーブルなどの接続を含んでもよい。
【0027】
クライアントまたはサーバは、ネットワーク102に接続された特定のデータ処理システムの例示的な役割に過ぎず、これらのデータ処理システムの他の構成または役割を除外することを意図するものではない。サーバ104およびサーバ106は、記憶装置108とともにネットワーク102に結合する。ソフトウェアアプリケーションは、データ処理環境100内の任意のコンピュータ上で実行することができる。クライアント110、112、および114も、ネットワーク102に結合される。サーバ104または106、あるいはクライアント110、112、または114などのデータ処理システムは、データを含むことができ、その上で実行されるソフトウェアアプリケーションまたはソフトウェアツールを有することができる。
【0028】
例としてのみ、また、そのようなアーキテクチャへの限定を意味することなく、
図1は、実施形態の例示的な実装において使用可能な特定の構成要素を描いている。例えば、サーバ104及び106、並びにクライアント110、112、114は、例としてのみであり、クライアントサーバアーキテクチャへの限定を意味するものではない、サーバ及びクライアントとして描かれている。別の例として、実施形態は、図示のように、複数のデータ処理システムおよびデータネットワークにわたって分散することができ、一方、別の実施形態は、例示の実施形態の範囲内で単一のデータ処理システム上で実施することができる。データ処理システム104、106、110、112、および114はまた、クラスタ、パーティション、および実施形態を実装するのに適した他の構成における例示的なノードを表す。
【0029】
装置132は、本明細書に記載される装置の一例である。例えば、装置132は、スマートフォン、タブレットコンピュータ、ラップトップコンピュータ、据え置き型または携帯型のクライアント110、ウェアラブルコンピューティング装置、または任意の他の適切な装置の形態を取ることができる。
図1において別のデータ処理システムで実行されるものとして説明された任意のソフトウェアアプリケーションは、同様の方法で装置132において実行するように構成され得る。
図1における別のデータ処理システムにおいて記憶または生成される任意のデータまたは情報は、同様の方法で装置132において記憶または生成されるように構成することができる。
【0030】
FPU103が実施形態による修正FPUであり、サーバ104において動作するように構成されていると仮定する。例えば、サーバ104は、ニューラルネットワーク107の訓練または構成に参加している可能性がある。アプリケーション105は、FPU103を構成する、FPU103にプログラム命令を提供し、またはそうでなければニューラルネットワーク107を訓練するため、または他の浮動小数点計算のためにFPU103を動作させるための動作コンポーネントを実装する。アプリケーション105は、ハードウェア、ソフトウェア、またはファームウェアで実装することができる。アプリケーション105は、FPU103内、FPU103外であるがサーバ104内、あるいはサーバ104外であってもデータネットワーク102を横切る別のデータ処理システム、例えばサーバ106内に実装することができる。
【0031】
サーバ104及び106、記憶装置108、並びにクライアント110、112、及び114、及び装置132は、有線接続、無線通信プロトコル、又は他の適切なデータ接続を用いてネットワーク102に結合してもよい。クライアント110、112、および114は、例えば、パーソナルコンピュータまたはネットワークコンピュータであってよい。
【0032】
描かれた例では、サーバ104は、ブートファイル、オペレーティングシステムイメージ、及びアプリケーションなどのデータを、クライアント110、112、及び114に提供してもよい。クライアント110、112、および114は、この例では、サーバ104に対するクライアントであってもよい。クライアント110、112、114、またはそれらのいくつかの組み合わせは、自身のデータ、ブートファイル、オペレーティングシステムイメージ、およびアプリケーションを含んでもよい。データ処理環境100は、図示しない追加のサーバ、クライアント、および他の装置を含んでもよい。
【0033】
描かれた例では、データ処理環境100は、インターネットであってもよい。ネットワーク102は、トランスミッションコントロールプロトコル/インターネットプロトコル(TCP/IP)および他のプロトコルを使用して互いに通信するネットワークおよびゲートウェイの集合体を表すことができる。インターネットの中心には、データおよびメッセージをルーティングする何千もの商業、政府、教育、および他のコンピュータシステムを含む、主要なノードまたはホストコンピュータ間のデータ通信リンクのバックボーンがある。もちろん、データ処理環境100も、例えば、イントラネット、ローカルエリアネットワーク(LAN)、またはワイドエリアネットワーク(WAN)など、多数の異なるタイプのネットワークとして実装することができる。
図1は、例として意図されており、異なる例示的な実施形態に対するアーキテクチャ上の制限として意図されているのではない。
【0034】
他の用途の中で、データ処理環境100は、例示的な実施形態が実装され得るクライアントサーバ環境を実装するために使用され得る。クライアントサーバ環境は、クライアントデータ処理システムとサーバデータ処理システムとの間の相互作用を用いてアプリケーションが機能するように、ソフトウェアアプリケーションおよびデータをネットワーク全体に分散させることを可能にする。データ処理環境100はまた、ネットワーク上に分散された相互運用可能なソフトウェアコンポーネントが首尾一貫したビジネスアプリケーションとしてパッケージ化され得る、サービス指向アーキテクチャを採用してもよい。データ処理環境100は、クラウドの形態をとることもでき、サービスのプロバイダとの最小限の管理労力または最小限のサービスプロバイダとのやり取りによって速やかに準備(provision)およびリリースできるように設定可能なコンピューティングリソースの共有プール(例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシンおよびサービス)へ、簡便かつオンデマンドのネットワークアクセスを可能にするためのサービス提供のクラウドコンピューティングモデルを採用することができる。
【0035】
図2を参照すると、
図2は、例示的な実施形態が実装され得るデータ処理システムのブロック図である。データ処理システム200は、
図1におけるサーバ104及び106、又はクライアント110、112、及び114などのコンピュータ、又は例示的な実施形態についてプロセスを実装するコンピュータ使用可能なプログラムコード又は命令が配置され得る別のタイプの装置の一例である。
【0036】
また、データ処理システム200は、
図1のデータ処理システム132のように、例示の実施形態の処理を実装するコンピュータが使用可能なプログラムコードまたは命令が配置され得るデータ処理システムまたはその構成を代表するものである。データ処理システム200は、これに限定されることなく、一例としてコンピュータとしてのみ説明される。
図1の装置132のような他の装置の形態での実装は、タッチインターフェースを追加することなどによってデータ処理システム200を変更してもよく、本明細書で説明するデータ処理システム200の動作および機能の一般的な説明から逸脱することなくデータ処理システム200から特定の描かれた構成要素を排除することさえ可能である。
【0037】
描かれた例では、データ処理システム200は、ノースブリッジおよびメモリコントローラハブ(NB/MCH)202とサウスブリッジおよび入力/出力(I/O)コントローラハブ(SB/ICH)204を含むハブアーキテクチャを採用している。処理ユニット206、メインメモリ208、およびグラフィックスプロセッサ210は、ノースブリッジおよびメモリコントローラハブ(NB/MCH)202に結合される。処理ユニット206は、1つまたは複数のプロセッサを含んでもよく、1つまたは複数のヘテロジニアスプロセッサシステムを使用して実装されてもよい。処理ユニット206は、マルチコアプロセッサであってもよい。グラフィックスプロセッサ210は、特定の実装において、加速グラフィックスポート(AGP)を介してNB/MCH202に結合されてもよい。
【0038】
描かれた例では、ローカルエリアネットワーク(LAN)アダプタ212は、サウスブリッジおよびI/Oコントローラハブ(SB/ICH)204に結合されている。オーディオアダプタ216、キーボードおよびマウスアダプタ220、モデム222、読み取り専用メモリ(ROM)224、ユニバーサルシリアルバス(USB)および他のポート232、およびPCI/PCIe装置234は、バス240を介してサウスブリッジおよびI/Oコントローラハブ204に結合される。ハードディスクドライブ(HDD)またはソリッドステートドライブ(SSD)226およびCD-ROM230は、バス240を通してサウスブリッジおよびI/Oコントローラハブ204に結合される。PCI/PCIe装置234は、例えば、イーサネットアダプタ、アドインカード、およびノートブックコンピュータ用のPCカードなどを含むことができる。PCIはカードバスコントローラを使用するが、PCIeは使用しない。ROM224は、例えば、フラッシュバイナリ入出力システム(BIOS)であってもよい。ハードディスクドライブ226およびCD-ROM230は、例えば、統合ドライブエレクトロニクス(IDE)、シリアルアドバンストテクノロジーアタッチメント(SATA)インタフェース、または外部SATA(eSATA)およびマイクロSATA(mSATA)などの変種を使用してもよい。スーパーI/O(SIO)装置236は、バス240を介してサウスブリッジおよびI/Oコントローラハブ(SB/ICH)204に結合されてもよい。
【0039】
メインメモリ208、ROM224、またはフラッシュメモリ(図示せず)などのメモリは、コンピュータ使用可能なストレージデバイスのいくつかの例である。ハードディスクドライブまたはソリッドステートドライブ226、CD-ROM230、および他の同様に使用可能な装置は、コンピュータ使用可能な記憶媒体を含むコンピュータ使用可能なストレージデバイスのいくつかの例である。
【0040】
オペレーティングシステムは、処理ユニット206上で動作する。オペレーティングシステムは、
図2のデータ処理システム200内の様々なコンポーネントを調整し、制御を提供する。オペレーティングシステムは、サーバシステム、パーソナルコンピュータ、及びモバイルデバイスを含むがこれらに限定されない、任意のタイプのコンピューティングプラットフォームのための市販のオペレーティングシステムであってよい。オブジェクト指向または他のタイプのプログラミングシステムは、オペレーティングシステムと連動して動作し、データ処理システム200上で実行されるプログラムまたはアプリケーションからオペレーティングシステムへの呼び出しを提供することができる。
【0041】
オペレーティングシステム、オブジェクト指向プログラミングシステム、および
図1のアプリケーション105などのアプリケーションまたはプログラムのための命令は、ハードディスクドライブ226上のコード226Aの形態などの記憶装置上に位置し、処理ユニット206による実行のために、メインメモリ208などの1つまたは複数のメモリの少なくとも1つにロードされてもよい。例示的な実施形態のプロセスは、コンピュータ実装命令を用いて処理ユニット206によって実行されてもよく、これは、例えばメインメモリ208、読み取り専用メモリ224などのメモリに、または1つまたは複数の周辺装置に配置されてもよい。
【0042】
さらに、ある場合には、コード226Aは、同様のコード201Cが記憶装置201Dに記憶されているリモートシステム201Bからネットワーク201Aを介してダウンロードされてもよい。別の場合には、コード226Aは、ネットワーク201Aを介してリモートシステム201Bにダウンロードされ、ダウンロードされたコード201Cは記憶装置201Dに記憶される。
【0043】
図1~2のハードウェアは、実装によって異なる場合がある。
図1~2に描かれたハードウェアに加えて、またはそれに代えて、フラッシュメモリ、同等の不揮発性メモリ、または光ディスクドライブなどの他の内部ハードウェアまたは周辺装置が使用されてもよい。さらに、例示した実施形態の処理は、マルチプロセッサのデータ処理システムに適用してもよい。
【0044】
いくつかの例示的な例では、データ処理システム200は、一般に、オペレーティングシステムファイルもしくはユーザ生成データまたはその両方を格納するための不揮発性メモリを提供するためにフラッシュメモリで構成されるパーソナルデジタルアシスタント(PDA)であってよい。バスシステムは、システムバス、I/Oバス、PCIバスなどの1つまたは複数のバスから構成されてもよい。もちろん、バスシステムは、ファブリックまたはアーキテクチャに接続された異なるコンポーネントまたは装置間のデータ転送を提供する任意のタイプの通信ファブリックまたはアーキテクチャを使用して実装されてもよい。
【0045】
通信ユニットは、モデムやネットワークアダプタなど、データを送受信するために使用される1つまたは複数の装置を含んでもよい。メモリは、例えば、メインメモリ208、またはノースブリッジおよびメモリコントローラハブ202に見られるキャッシュのようなキャッシュであってもよい。処理ユニットは、1つまたは複数のプロセッサまたはCPUを含んでもよい。
【0046】
図1~2の描かれた例および上述した例は、アーキテクチャ上の制限を意味するものではない。例えば、データ処理システム200はまた、モバイルデバイスまたはウェアラブルデバイスの形態をとることに加えて、タブレットコンピュータ、ラップトップコンピュータ、または電話デバイスであってもよい。
【0047】
コンピュータまたはデータ処理システムが、仮想マシン、仮想装置、または仮想コンポーネントとして記述される場合、仮想マシン、仮想装置、または仮想コンポーネントは、データ処理システム200に描かれた一部またはすべてのコンポーネントの仮想化マニフェストを使用して、データ処理システム200の態様で動作する。例えば、仮想マシン、仮想装置、または仮想コンポーネントにおいて、処理ユニット206は、ホストデータ処理システムにおいて利用可能なハードウェア処理ユニット206のすべてまたはいくつかの数の仮想化インスタンスとして明示され、メインメモリ208は、ホストデータ処理システムにおいて利用可能なメインメモリ208のすべてまたはいくつかの部分の仮想化インスタンスとして明示され、ディスク226は、ホストデータ処理システムにおいて利用可能であるディスク226のすべてまたはいくつかの部分の仮想化インスタンスとして明示される。このような場合のホストデータ処理システムは、データ処理システム200によって表される。
【0048】
本開示は、クラウドコンピューティングに関する詳細な説明を含むが、本明細書に記載された教示の実装は、クラウドコンピューティング環境に限定されないことを理解されたい。むしろ、本発明の実施形態は、現在知られている又は後に開発される任意の他のタイプのコンピューティング環境と組み合わせて実施することが可能である。
【0049】
クラウドコンピューティングは、設定可能なコンピューティングリソースの共有プール(例えばネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、記憶装置、アプリケーション、仮想マシンおよびサービス)へ、簡便かつオンデマンドのネットワークアクセスを可能にするためのサービス提供のモデルであり、リソースは、最小限の管理労力または最小限のサービスプロバイダとのやり取りによって速やかに準備(provision)およびリリースできるものである。このクラウドモデルは、少なくとも5つの特性、少なくとも3つのサービスモデル、および少なくとも4つの展開モデルを含むことがある。
【0050】
特性は以下の通りである。
【0051】
オンデマンド・セルフサービス:クラウドの消費者は、サービスプロバイダとの人的な対話を必要することなく、必要に応じて自動的に、サーバ時間やネットワークストレージなどのコンピューティング能力を一方的に準備することができる。
【0052】
ブロード・ネットワークアクセス:コンピューティング能力はネットワーク経由で利用可能であり、また、標準的なメカニズムを介してアクセスできる。それにより、異種のシンまたはシッククライアントプラットフォーム(例えば、携帯電話、ラップトップ、PDA)による利用が促進される。
【0053】
リソースプーリング:プロバイダのコンピューティングリソースはプールされ、マルチテナントモデルを利用して複数の消費者に提供される。様々な物理リソースおよび仮想リソースが、需要に応じて動的に割り当ておよび再割り当てされる。一般に消費者は、提供されたリソースの正確な位置を管理または把握していないため、位置非依存(location independence)の感覚がある。ただし消費者は、より高い抽象レベル(例えば、国、州、データセンタ)では場所を特定可能な場合がある。
【0054】
迅速な柔軟性(elasticity):コンピューティング能力は、迅速かつ柔軟に準備することができるため、場合によっては自動的に、直ちにスケールアウトし、また、速やかにリリースされて直ちにスケールインすることができる。消費者にとって、準備に利用可能なコンピューティング能力は無制限に見える場合が多く、任意の時間に任意の数量で購入することができる。
【0055】
測定されるサービス:クラウドシステムは、サービスの種類(例えば、ストレージ、処理、帯域幅、アクティブユーザアカウント)に適したある程度の抽象化レベルでの測定機能を活用して、リソースの使用を自動的に制御し最適化する。リソース使用量を監視、制御、および報告して、利用されるサービスのプロバイダおよび消費者の両方に透明性を提供することができる。
【0056】
サービスモデルは以下の通りである。
【0057】
サービスとしてのソフトウェア(SaaS):消費者に提供される機能は、クラウドインフラストラクチャ上で動作するプロバイダのアプリケーションを利用できることである。当該そのアプリケーションは、ウェブブラウザ(例えばウェブメール)などのシンクライアントインタフェースを介して、各種のクライアント装置からアクセスできる。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージや、個別のアプリケーション機能さえも含めて、基礎となるクラウドインフラストラクチャの管理や制御は行わない。ただし、ユーザ固有の限られたアプリケーション構成の設定はその限りではない。
【0058】
サービスとしてのプラットフォーム(PaaS):消費者に提供される機能は、プロバイダによってサポートされるプログラム言語およびツールを用いて、消費者が作成または取得したアプリケーションを、クラウドインフラストラクチャに展開(deploy)することである。消費者は、ネットワーク、サーバ、オペレーティングシステム、ストレージを含む、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、展開されたアプリケーションを制御でき、かつ場合によってはそのホスティング環境の構成も制御できる。
【0059】
サービスとしてのインフラストラクチャ(IaaS):消費者に提供される機能は、オペレーティングシステムやアプリケーションを含む任意のソフトウェアを消費者が展開および実行可能な、プロセッサ、ストレージ、ネットワーク、および他の基本的なコンピューティングリソースを準備することである。消費者は、基礎となるクラウドインフラストラクチャの管理や制御は行わないが、オペレーティングシステム、ストレージ、および展開されたアプリケーションを制御でき、かつ場合によっては一部のネットワークコンポーネント(例えばホストファイアウォール)を部分的に制御できる。
【0060】
展開モデルは以下の通りである。
【0061】
プライベートクラウド:このクラウドインフラストラクチャは、特定の組織専用で運用される。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
【0062】
コミュニティクラウド:このクラウドインフラストラクチャは、複数の組織によって共有され、共通の関心事(例えば、ミッション、セキュリティ要件、ポリシー、およびコンプライアンス)を持つ特定のコミュニティをサポートする。このクラウドインフラストラクチャは、当該組織または第三者によって管理することができ、オンプレミスまたはオフプレミスで存在することができる。
【0063】
パブリッククラウド:このクラウドインフラストラクチャは、不特定多数の人々や大規模な業界団体に提供され、クラウドサービスを販売する組織によって所有される。
【0064】
ハイブリッドクラウド:このクラウドインフラストラクチャは、2つ以上のクラウドモデル(プライベート、コミュニティまたはパブリック)を組み合わせたものとなる。それぞれのモデル固有の実体は保持するが、標準または個別の技術によってバインドされ、データとアプリケーションの可搬性(例えば、クラウド間の負荷分散のためのクラウドバースティング)を実現する。
【0065】
クラウドコンピューティング環境は、ステートレス性(statelessness)、低結合性(low coupling)、モジュール性(modularity)および意味論的相互運用性(semantic interoperability)に重点を置いたサービス指向型環境である。クラウドコンピューティングの中核にあるのは、相互接続されたノードのネットワークを含むインフラストラクチャである。
【0066】
次に、
図3を参照して、本図は、例示的な実施形態による浮動小数点表現のための構成例を示すブロック図である。FPU300は、
図1におけるFPU103の一例である。アプリケーション302は、
図1におけるアプリケーション105の一例である。
【0067】
アプリケーション302は、FPU300のメモリビットを浮動小数点フォーマット304として構成する。フォーマット304は、本明細書で説明する非限定的な例として、8ビットを使用して構成される。実施形態において、最上位1ビットは符号ビット306として予約され、次の下位5ビットは指数ビット308として予約され、下位2ビットは仮数ビット310として予約される。実施形態(図示せず)において、最上位1ビットは符号ビット306として予約され、次の下位4ビットは指数ビット308として予約され、最下位ビットは3つの仮数ビット310として予約される。
【0068】
次に
図4A~4Bに目を向けると、例示された実施形態の様々な機構によるコンピューティング環境において、ハイブリッドフォーマットなしのシステム400(例えば、アクセラレータ)浮動小数点計算(例えば、
図4A)および簡略化されたスーパーセット浮動小数点ユニット(「ssFPU」)を用いたハイブリッドフォーマット(例えば、
図4B)のための例示的機能コンポーネントを示すブロック図が示されている。一態様では、
図1~3で説明したコンポーネント、モジュール、サービス、アプリケーション、もしくは機能またはこれらの組み合わせのうちの1つまたは複数が、
図4A~4Bで使用され得る。これから分かるように、機能ブロックの多くは、
図1~3で先に説明したのと同じ記述的な意味で、機能の「モジュール」または「コンポーネント」とも見なされることがある。
【0069】
描かれているように、
図4Aにおいて、システム400は、オフチップメモリバンク402、メモリ階層404、例えばローカルメモリバンク404A及び404Bなどの1つまたは複数のメモリバンク、並びに1つまたは複数のFPUの410A~I(例えばFPUのアレイ)を含んでもよい。一態様では、システム400は、アクセラレータであってもよい。
【0070】
動作において、例えば、いくつかのFP8オペランド(例えば、式1からFP8フォーマットのA1もしくはA2またはその両方)が生成され、オフチップメモリバンク402から(及びメモリ階層404から垂直に)ローカルメモリバンク404Aへ流れると仮定する。また、FP8演算(例えば、式1からFP8フォーマットのB1もしくはB2またはその両方)が生成され、オフチップメモリバンク402から(及びメモリ階層404から水平方向に)ローカルメモリバンク404Bに流れてFPU410A~Iのアレイに流れ込むと仮定する。この時点では、FP8オペランドの各々は、メモリ記憶フォーマットであり、計算フォーマットではない。
【0071】
FP8オペランドの各々は、ローカルメモリバンク404A及び404BからFPU410A~Iのアレイへの入力オペランドとして提供され、FP8オペランドのいくつかは、FP8データパスである。FP16オペランドが存在し、入力オペランドとして提供されてもよいが、説明の便宜のためにここでは図示していないことに留意されたい。
【0072】
「I-デコード」ブロックによって生じるおよび生成される制御信号は、FP8オペランドが1/5/2フォーマット(例えば、符号+5指数ビット+2仮数ビット)または1/4/3フォーマット(例えば、符号+4指数ビット+3仮数ビット)であるかをFPU410A~Iに示すために、各FP8オペランド(例えば、AのまたはBの)と共に送信されてもよい。
【0073】
FPU410A~Iのシストリックアレイは、オペランドと結果を互いに受け渡し、行列乗算/計算を実行する。例えば、FPU410A~Iは、データパスにおいて、FP8オペランド(及びFP16オペランド)を受け取る。制御パスにおけるビットは、FP8数のフォーマットを信号化してもよく、FPU計算は、制御パスの信号によって決定される。したがって、FPU410A~Iの各々は、FP8オペランドの同じビットを分析し、データビットの同じデコードを実行して、フォーマット(例えば、1/5/2または1/4/3フォーマット)に基づく演算を決定することができる。
【0074】
したがって、
図4Aに描かれた現在の配置の課題は、FPU410A~Iの各々が、2つの異なるFP8フォーマット(例えば、1/5/2または1/4/3フォーマット)をデコードするために追加の機能(例えば、計算ロジック)を必要とし、これにより電力要件および全体的な計算遅延が増加し、計算効率が低下することである。両フォーマットのバイアスは固定されており、1/5/2フォーマットでは十分でも、1/4/3フォーマットではそうでない場合がある。つまり、オペランドが送信されるたびに、すべてのFPUにそれ以外の可変バイアス(制御信号の一部として)を送信することが困難であるため、両方のフォーマットのバイアスが固定されている。一般的なワークロードでは、同じFP8オペランド(例えば、同じ入力オペランド)が複数のFPU410A~Iに送られ、これは、複数のFPU410A~Iが同一のデコード動作を行うよう要求されることを意味する。
【0075】
これらの非効率性を解消し、ハイブリッドフォーマットの浮動小数点計算を実行するために、
図4Bは、例えば、簡略化されたスーパーセット浮動小数点ユニット(「ssFPU」)などの異なるFPUと、例えば、変換ユニット40
6A及び40
6Bなどの1つ又は複数の変換ユニットとを使用する。
【0076】
まず、FP8オペランドを簡略化されたスーパーセットFPU(「ssFPU」)412A~Iのシストリックアレイに送る前に、FP8オペランドはローカルメモリバンク404A及び404Bから、例えば変換ユニット406A及び406Bなどの変換ユニット(例えば、FP8-FP9変換)へ渡されている。
【0077】
ここで、変換ユニット406A及び406Bは、計算ユニットのアレイ(例えば、ssFPU412A~Iのアレイ)の入力インタフェースにおいて、両方のFP8フォーマット(例えば、1/5/2と1/4/3)をスーパーセットフォーマット(例えば、FP9フォーマットなど)に変換してもよい。例えばローカルメモリバンク404A、404B及びオフチップメモリバンク402などのメモリは、メモリ階層404に含まれるすべてのアーキテクチャもFP8フォーマットであるため、FP8フォーマットでデータを保存し続ける。
【0078】
変換ユニット406A及び406Bは、入力オペランドの浮動小数点数フォーマット(例えば、FP8フォーマット)を、符号ビット、指数ビット(e)及び仮数ビット(m)からなる超低精度(「VLP」)フォーマットとして特定及び区別してもよい。VLPは、8ビット浮動小数点フォーマット(「FP8」)であってもよく、スーパーセット浮動小数点フォーマットを単一浮動小数点フォーマットとして特定する。
【0079】
スーパーセット浮動小数点フォーマットは、符号ビット、指数ビット(e)、および仮数ビット(m)を含む9ビット浮動小数点フォーマット(「FP9」)であってもよい。ssFPU412A~Iは、9ビット浮動小数点ユニットであってもよい。
【0080】
変換ユニット406A、406Bの各々(例えば、FP8-FP9変換/計算ユニット)は、入力フォーマットが1/5/2または1/4/3といった制御情報を示すIデコードユニット408からの制御信号で変換を実行してもよい。また、ssFPU412A~Iの各々には制御信号が不要になり(あるいは、送られなくなり)、変換ユニット406A、406Bに送られる。そして、変換ユニット406A及び406Bは、スーパーセットフォーマット(例えば、FP9フォーマット)をssFPU412A~Iの各々に送る。このようにして、例えば、ssFPU412A~IなどのスーパーセットFPUは、ssFPU412A~Iが今やスーパーセットフォーマット(例えば、FP9フォーマット)のみを受信するので、スーパーセットフォーマットFP9と比較してFP8のフォーマットを特定し区別し得るために同じデータビットに対して同じデコード動作を実行する必要がもはやない。
【0081】
ここでも、生成されてオフチップメモリバンク402からローカルメモリバンク404Aに垂直に流れるFP8オペランド(例えば、式1からのFP8フォーマットのA1もしくはA2またはその両方)及び生成されてオフチップメモリバンク402からローカルメモリバンク404Bに水平に流れるFP8演算(例えば、式1からのFP8フォーマットのB1もしくはB2またはその両方)がFP8フォーマットのままである。FP8オペランドは、変換ユニット406A及び406Bに送られた後にのみ、スーパーセットフォーマットに変換される。
【0082】
したがって、命令オペコードはFP8融合積和積算を指定し、命令中のビットは、入力FP8オペランドが1/5/2または1/4/3フォーマットであるかどうかを指定する。これらのビットに基づき、変換ユニット406A及び406B(例えば、FP8-FP9変換/計算ユニット)は、ssFPU412A~Iが使用するためのスーパーセットフォーマット(例えば、FP9フォーマット)への所望の変換を実行する。
【0083】
複数のssFPU412A~Iのアレイを用いて、スーパーセット浮動小数点フォーマットとして表現されるようになった入力オペランドに対して、計算操作が実行されてもよいことに留意されたい。
【0084】
FP8フォーマットの1/5/2フォーマットでは、
図5に示すように、範囲が2
31である指数ビットが5つあり、1/5/2の範囲は2
-15から2
16にわたっていることに注意されたい。しかし、FP8フォーマットが1/4/3の場合、2
15の範囲しかなく(例えば、2
-7から2
8にわたる範囲)、制限された範囲となる。このように、指数ビットの範囲が2
-7から2
8である1/4/3フォーマットによる制約を克服するために、スライディングウィンドウは指数バイアスを介して1/4/3のプログラミングを適応してもよく、この場合2
-7から2
8の範囲から4を引くと(例えば-4)、2
-11から2
4の範囲が得られるようになってもよい。
【0085】
このように、スーパーセットフォーマットは、FP8をFP9フォーマットに変換することで作成される。例えば、1/5/2フォーマットは、1符号ビット、5指数ビット、3仮数ビットの1/5/3フォーマットに変換される。1/5/2フォーマットは、1/5/2入力が無限大の場合を除き、末尾に「0」を付けて変換してもよい。また、1/4/3フォーマットは1/5/3フォーマットに変換してもよい。1/4/3のためのプログラム可能バイアスは、1/4/3のためのバイアスを制御し、我々の1/5/3ダイナミックレンジの範囲内に収まるように許容バイアス範囲(例えば、指数バイアスのスライディング範囲)が使用されても良い。基本的な1/4/3フォーマットの指数範囲は2
-7から2
8であるため、-8から+8(含む)の範囲の任意のバイアスは、2
-15から2
16までの指数をもたらし、1/5/3フォーマットで表現可能であることに注意されたい。1/4/3フォーマット(2
-11から2
4)の数値に-4のバイアスの例を適用した後の指数範囲を
図5に示す。
【0086】
したがって、図示された実施形態の機構は、ssFPUまたはssFPUのアレイを介して計算する前に、多数の浮動小数点数フォーマットを介して表される数値を単一の浮動小数点数フォーマットに変換することを提供する。計算フォーマット(例えば、スーパーセットフォーマットまたは「FP9」フォーマット)は、通信/記憶フォーマット(例えば、メモリ記憶フォーマットまたはFP8フォーマット)と区別することができ、これは、通信/記憶フォーマットは通常2のべき乗になるように制約されるが、計算フォーマットには同様の制約がない。
【0087】
ssFPUのアレイは、同じ入力オペランドに対して演算を実行することができ、変換はアレイのエッジで実行できるため、ssFPUの論理深度を減らすことができる(FPUでの変換がなく、オンザフライ再構成を回避する)。つまり、ssFPUはFP9 FPUであり、再構成可能FPUと区別される。つまり、ssFPUは再構成可能FPUではない。
【0088】
スーパーセットフォーマット(例えば、FP9)を使用すると、計算のために2つの異なるフォーマットを必要とする深層学習ネットワークのFP8フォーマットベースの訓練が、それらを1つの内部計算フォーマット(例えば、スーパーセットフォーマット)にマージすることによって可能になり、それによってハードウェアコストを減少させエネルギー効率を向上させることができる。計算フォーマット(例えば、スーパーセットフォーマット)は、計算前の丸め誤差を防ぐために、置き換えられるフォーマット(例えば、1/5/2または1/4/3)のスーパーセットであるように選択され得る。
【0089】
次に
図6に目を向けると、コンピューティングシステムにおいて簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するための方法600が描かれており、この方法では、図示された実施形態の様々な態様が実施され得る。機能性600は、機械上で命令として実行される方法(例えば、コンピュータ実装方法)として実装されてもよく、ここで、命令は、少なくとも1つのコンピュータ可読媒体または1つの非一過性の機械可読記憶媒体上に含まれる。機能性600は、ブロック602で開始されてもよい。
【0090】
複数の浮動小数点数フォーマットとして表される1つまたは複数の入力は、1つまたは複数の簡略化されたスーパーセット浮動小数点ユニット(ssFPU)による計算の前にスーパーセット浮動小数点フォーマット(例えば、FP9フォーマット)に変換されてもよい。ブロック606のように、1つまたは複数のssFPUを使用して、スーパーセット浮動小数点フォーマットとして表される1つまたは複数の入力に対して計算操作が実行されてもよい。機能性600は、ブロック608のように、終了してもよい。
【0091】
次に
図7に目を向けると、コンピューティングシステムにおいて簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するための追加の方法700が描かれている。機能性700は、機械上で命令として実行される方法(例えば、コンピュータ実装方法)として実装されてもよく、ここで、命令は、少なくとも1つのコンピュータ可読媒体または1つの非一過性の機械可読記憶媒体上に含まれる。機能性700は、ブロック702で開始されてもよい。
【0092】
超低精度(「VLP」)浮動小数点フォーマットとして表される複数の入力は、ブロック704のように、スーパーセット浮動小数点フォーマットに変換されてもよい。ブロック706のように、複数のssFPUのアレイを使用して、スーパーセット浮動小数点フォーマットとして表される複数の入力に対して計算操作が実行されてもよい。機能性700は、ブロック708のように、終了してもよい。
【0093】
ここで
図8に目を向けると、コンピューティングシステムにおいて簡略化されたスーパーセット浮動小数点ユニットを介してハイブリッド精度浮動小数点フォーマット計算を実行するための追加の方法800が描かれている。機能性800は、機械上で命令として実行される方法(例えば、コンピュータ実装方法)として実装されてもよく、ここで、命令は、少なくとも1つのコンピュータ可読媒体または1つの非一過性の機械可読記憶媒体上に含まれる。機能性800は、ブロック802で開始されてもよい。
【0094】
ブロック804のように、超低精度(「VLP」)浮動小数点フォーマット(例えば、メモリ記憶フォーマット)として表される入力オペランドが、特定されてもよい。VLP浮動小数点フォーマットとして表される入力オペランドは、ブロック806のように、ssFPUのアレイにおいて計算操作を実行する前に、丸め誤差を防止するためにスーパーセット浮動小数点フォーマット(例えば、計算フォーマット)に変換されてもよい。計算操作は、ブロック808のように、複数のssFPUのアレイを使用して、スーパーセット浮動小数点フォーマットとして表される入力オペランドに対して実行されてもよい。機能性800は、ブロック810のように、終了してもよい。
【0095】
一態様において、
図6~8の少なくとも1つのブロックと関連して、もしくはその一部またはその両方として、600、700、もしくは800またはこれらの組み合わせの動作は、以下の各項目を含んでもよい。
【0096】
600、700、もしくは800またはこれらの組み合わせの動作は、FP8フォーマットオペランドと制御信号の両方を受信してもよい。600、700、もしくは800またはこれらの組み合わせの動作は、制御信号を分析し、(変換ユニットを使用して)FP8フォーマットオペランドをデコードしてスーパーセットフォーマットオペランドに変換してもよい。600、700、もしくは800またはこれらの組み合わせの動作は、制御信号を送信せずに、スーパーセットフォーマットのオペランド(たとえば、FP9オペランド)を1つまたは複数のssFPUに送信してもよい(たとえば、ssFPUがスーパーセットフォーマットを区別および特定することができるので、制御信号は、ssFPUのためにもはや必要でない)。
【0097】
600、700、もしくは800またはこれらの組み合わせの動作は、複数の浮動小数点数フォーマットを、符号ビット、指数ビット(e)、および仮数ビット(m)からなる超低精度(「VLP」)フォーマットとして特定し、VLPは8ビット浮動小数点フォーマット(「FP8」)であり、スーパーセット浮動小数点フォーマットを単一浮動小数点フォーマットとして特定することができる。スーパーセット浮動小数点フォーマットは、符号ビット、指数ビット(e)、および仮数ビット(m)を含む9ビット浮動小数点フォーマット(「FP9」)であり、1つまたは複数のssFPUは9ビット浮動小数点ユニットである。
【0098】
600、700、もしくは800またはこれらの組み合わせの動作は、1つまたは複数のssFPUによる計算の前に、複数の8ビット浮動小数点フォーマット(「FP8」)として表される1つまたは複数の入力をスーパーセット浮動小数点フォーマットに変換することができる。スーパーセット浮動小数点フォーマットは、9ビット浮動小数点フォーマット(「FP9」)であってもよく、1つまたは複数のssFPUは、9ビット浮動小数点ユニットであってもよい。
【0099】
600、700、もしくは800またはこれらの組み合わせの動作は、複数の浮動小数点数フォーマットをメモリ記憶フォーマットであると判断し、スーパーセット浮動小数点フォーマットを計算フォーマットであると判断することができる。
【0100】
600、700、もしくは800またはこれらの組み合わせの動作は、1つまたは複数のssFPUのアレイのエッジにおいて、複数の8ビット浮動小数点フォーマット(「FP8」)として表される1つまたは複数の入力をスーパーセット浮動小数点フォーマットに変換し、同時に1つまたは複数のssFPUのアレイを使用してスーパーセット浮動小数点フォーマットとして表される1つまたは複数の入力に計算操作を実行してもよい。
【0101】
600、700、もしくは800またはこれらの組み合わせの動作は、機械学習動作において超低精度(「VLP」)機械学習訓練を可能にするために計算操作を実行するために、変換のための複数の浮動小数点数フォーマットをスーパーセット浮動小数点フォーマットへマージしてもよい。
【0102】
600、700、もしくは800またはこれらの組み合わせの動作は、複数の浮動小数点数フォーマットを置き換えるためにスーパーセット浮動小数点フォーマットを選択することによって、計算操作の前に丸め誤差を防止することができる。
【0103】
本発明は、システム、方法もしくはコンピュータプログラム製品またはそれらの組み合せとすることができる。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を記憶したコンピュータ可読記憶媒体を含んでよい。
【0104】
コンピュータ可読記憶媒体は、命令実行装置によって使用される命令を保持し、記憶することができる有形の装置とすることができる。コンピュータ可読記憶媒体は、一例として、電子記憶装置、磁気記憶装置、光学記憶装置、電磁記憶装置、半導体記憶装置またはこれらの適切な組み合わせであってよい。コンピュータ可読記憶媒体のより具体的な一例としては、ポータブルコンピュータディスケット、ハードディスク、RAM、ROM、EPROM(またはフラッシュメモリ)、SRAM、CD-ROM、DVD、メモリスティック、フロッピーディスク、パンチカードまたは溝内の隆起構造などに命令を記録した機械的に符号化された装置、およびこれらの適切な組み合せが挙げられる。本明細書で使用されるコンピュータ可読記憶装置は、電波もしくは他の自由に伝播する電磁波、導波管もしくは他の伝送媒体を介して伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、またはワイヤを介して送信される電気信号のような、一過性の信号それ自体として解釈されるべきではない。
【0105】
本明細書に記載のコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピュータ装置/処理装置へダウンロード可能である。あるいは、ネットワーク(例えばインターネット、LAN、WANもしくはワイヤレスネットワークまたはこれらの組み合わせ)を介して、外部コンピュータまたは外部記憶装置へダウンロード可能である。ネットワークは、銅製伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータもしくはエッジサーバまたはこれらの組み合わせを備えることができる。各コンピュータ装置/処理装置内のネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、当該コンピュータ可読プログラム命令を、各々のコンピュータ装置/処理装置におけるコンピュータ可読記憶媒体に記憶するために転送する。
【0106】
本発明の動作を実施するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路用構成データ、または、スモールトークやC++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語や類似のプログラミング言語などの手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述されたソースコードもしくはオブジェクトコードのいずれかとすることができる。コンピュータ可読プログラム命令は、スタンドアロン型ソフトウェアパッケージとして完全にユーザのコンピュータ上で、または部分的にユーザのコンピュータ上で実行可能である。あるいは、部分的にユーザのコンピュータ上でかつ部分的にリモートコンピュータ上で、または、完全にリモートコンピュータもしくはサーバ上で実行可能である。後者の場合、リモートコンピュータは、LANやWANを含む任意の種類のネットワークを介してユーザのコンピュータに接続してもよいし、外部コンピュータに(例えば、インターネットサービスプロバイダを使用してインターネットを介して)接続してもよい。いくつかの実施形態において、例えばプログラマブル論理回路、フィールドプログラマブルゲートアレイ(FPGA)、プログラマブル論理アレイ(PLA)を含む電子回路は、本発明の態様を実行する目的で当該電子回路をカスタマイズするために、コンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
【0107】
本発明の実施形態は、本明細書において、本発明の実施形態に係る方法、装置(システム)、およびコンピュータプログラム製品のフローチャートもしくはブロック図またはその両方を参照して説明されている。フローチャートもしくはブロック図またはその両方における各ブロック、および、フローチャートもしくはブロック図またはその両方における複数のブロックの組み合わせは、コンピュータ可読プログラム命令によって実行可能である。
【0108】
上記のコンピュータ可読プログラム命令は、機械を生産するために、コンピュータ、または他のプログラマブルデータ処理装置のプロセッサに提供してよい。これにより、かかるコンピュータまたは他のプログラマブルデータ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作を実行するための手段を創出する。上記のコンピュータ可読プログラム命令はさらに、コンピュータ、プログラマブルデータ処理装置もしくは他の装置またはこれらの組み合わせに対して特定の態様で機能するよう命令可能なコンピュータ可読記憶媒体に記憶してよい。これにより、命令が記憶された当該コンピュータ可読記憶媒体は、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作の態様を実行するための命令を含む製品を構成する。
【0109】
また、コンピュータ可読プログラム命令を、コンピュータ、他のプログラマブル装置、または他の装置にロードし、一連の動作ステップを当該コンピュータ、他のプログラマブル装置、または他の装置上で実行させることにより、コンピュータ実行プロセスを生成してもよい。これにより、当該コンピュータ、他のプログラマブル装置、または他の装置上で実行される命令が、フローチャートもしくはブロック図またはその両方における1つ以上のブロックにて特定される機能/動作を実行する。
【0110】
本開示の図面におけるフローチャートおよびブロック図は、本発明の種々の実施形態に係るシステム、方法およびコンピュータプログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示している。この点に関して、フローチャートまたはブロック図における各ブロックは、特定の論理機能を実行するための1つ以上の実行可能な命令を含む、命令のモジュール、セグメント、または部分を表すことができる。他の一部の実装形態において、ブロック内に示した機能は、各図に示す順序とは異なる順序で実行してもよい。例えば、連続して示される2つのブロックは、実際には、関係する機能に応じて、同時もしくは略同時に実行してもよいし、または場合により逆順で実行してもよい。なお、ブロック図もしくはフローチャートまたはその両方における各ブロック、および、ブロック図もしくはフローチャートまたはその両方における複数のブロックの組み合わせは、特定の機能または動作を行う、または専用ハードウェアとコンピュータ命令との組み合わせを実行する専用ハードウェアベースのシステムによって、実行可能である。
【0111】
本発明の様々な実施形態の説明は、説明のために提示されたが、網羅的であること、または開示された実施形態に限定されることを意図するものではない。説明した実施形態の範囲から逸脱することなく、多くの修正および変形が当業者には明らかであろう。本明細書で使用される用語は、実施形態の原理、市場で見出される技術に対する実用化または技術改善、または当業者が本明細書に開示された実施形態を理解することを可能にするために、最もよく説明するために選択されたものである。