(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-08-24
(45)【発行日】2022-09-01
(54)【発明の名称】16ビット浮動小数点乗算器を用いた行列と行列の乗算による複数精度整数乗算器
(51)【国際特許分類】
G06F 17/16 20060101AFI20220825BHJP
G06F 7/523 20060101ALI20220825BHJP
【FI】
G06F17/16 M
G06F7/523
(21)【出願番号】P 2020545788
(86)(22)【出願日】2019-03-04
(86)【国際出願番号】 IB2019051710
(87)【国際公開番号】W WO2019171238
(87)【国際公開日】2019-09-12
【審査請求日】2021-08-16
(32)【優先日】2018-03-05
(33)【優先権主張国・地域又は機関】US
(73)【特許権者】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【氏名又は名称】太佐 種一
(72)【発明者】
【氏名】土井 淳
【審査官】坂庭 剛史
(56)【参考文献】
【文献】特開平04-021026(JP,A)
【文献】特開平07-121354(JP,A)
【文献】欧州特許出願公開第3200068(EP,A1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 17/16
G06F 7/523
(57)【特許請求の範囲】
【請求項1】
コンピュータによって実施される方法であって、
第1の整数を表す第1の整数データを第1の桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、N個の行とN個の列とを有する第1の行列に代入することと、
第2の整数を表す第2の整数データを第2の桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列の少なくとも1つの行列要素に代入することと、
前記第1の行列と前記第2の行列との積である第3の行列を計算することと、
前記第3の行列の各行列要素を、前記第1の整数と前記第2の整数との積の計算における部分積として出力することと
を含む方法。
【請求項2】
前記第1の行列に前記代入するおよび前記第2の行列に前記代入する間、前記第1の行列および前記第2の行列の各行列要素は、前記第1の行列に含まれる各第1の整数要素と、前記第2の行列に含まれる各第2の整数要素との前記積の中の、前記第1の整数と前記第2の整数との前記積において同じ桁位置に対応する各積が、前記第3の行列の同じ行列要素に対応するように配置される、請求項1に記載のコンピュータによって実施される方法。
【請求項3】
前記N×N個の第1の整数要素は、前記第1の整数データにおいて前記第1の桁方向に連続している、請求項1に記載のコンピュータによって実施される方法。
【請求項4】
前記1つまたは複数の第2の整数要素は、前記第2の整数データにおいて前記第2の桁方向に連続している、請求項3に記載のコンピュータによって実施される方法。
【請求項5】
前記第1の行列に前記代入する間、前記N×N個の第1の整数要素の中の、N個の連続した第1の整数要素は、前記第1の行列の各行に、前記第1の整数データにおける前記第1の桁方向において昇順または降順で代入され、
前記第2の行列に前記代入する間、前記複数の第2の整数要素の中の、N個の連続した第2の整数要素は、前記第2の行列の各列に、前記第2の整数データの前記第2の桁方向において前記N個の第1の整数要素を前記第1の行列に前記代入する順序と反対の順序で、代入される、
請求項4に記載のコンピュータによって実施される方法。
【請求項6】
前記第1の行列に前記代入する間、前記N×N個の第1の整数要素は、前記第1の行列の各行列要素に、列優先および昇順または降順で代入され、
前記第2の行列に前記代入する間、
前記N個の連続した第2の整数要素は、前記第2の行列の第1の行に、前記N個の第1の整数要素を前記第1の行列に前記代入する順序と同じ順序で代入され、
前記N個の第2の整数要素は、前記第2の行列の第2および後続の行に、前記第2の整数データ内の前記N個の第2の整数要素を一時に1つの整数要素だけシフトしながら、代入される、
請求項5に記載のコンピュータによって実施される方法。
【請求項7】
前記第3の行列は、第4の行列に加算され、
前記部分積として前記出力することは、
前記第4の行列の第1の行または最後の行内の各行列要素を、前記第1の整数と前記第2の整数との前記積における対応するビット位置での、各第1の整数要素と各第2の整数要素との前記部分積の和として、抽出することと、
前記第4の行列内において、前記部分積の前記和として抽出された前記行以外の行を、前記部分積の前記和として抽出された前記行に向かって1行シフトし、空のスペースを有する行内の各行列要素を0に設定することと
を含む、請求項6に記載のコンピュータによって実施される方法。
【請求項8】
前記第2の行列に前記代入する間、前記複数の第2の整数要素から前記1つまたは複数の第2の整数要素を一時に1つ、前記第2の行列に順次に代入するプロセスは、前記第1の行列に前記代入する間、前記複数の第1の整数要素の中のN×N個の第1の整数要素の異なるセットが、前記第1の行列に代入されるたびに繰り返され、
前記第3の行列を前記計算すること、および前記部分積を前記出力することは、前記1つまたは複数の第2の整数要素が、前記第2の行列に代入されるたびに行われ、
前記第1の整数と前記第2の整数との前記積は、各出力された部分積に基づいて計算される、
請求項1に記載のコンピュータによって実施される方法。
【請求項9】
前記第1の整数と前記第2の整数との前記積を計算することは、
各部分積を、前記第1の整数と前記第2の整数との前記積における対応する桁位置に配置することと、
各部分積の桁あふれを、より高位の桁に加算することと
を含む、請求項8に記載のコンピュータによって実施される方法。
【請求項10】
第3の整数の上半分と第4の整数の上半分との第1の積は、前記第3の整数の前記上半分を前記第1の整数として設定し、前記第4の整数の前記上半分を前記第2の整数として設定し、前記第1の整数と前記第2の整数との前記積を計算することによって計算され、
前記第3の整数の下半分と前記第4の整数の下半分との第2の積は、前記第3の整数の前記下半分を前記第1の整数として設定し、前記第4の整数の前記下半分を前記第2の整数として設定し、前記第1の整数と前記第2の整数との前記積を計算することによって計算され、
前記第3の整数の前記上半分と前記下半分との和と、前記第4の整数の前記上半分と前記下半分との和との第3の積は、前記第3の整数の前記上半分と前記下半分との前記和を前記第1の整数として設定し、前記第4の整数の前記上半分と前記下半分との前記和を前記第2の整数として設定し、前記第1の整数と前記第2の整数との前記積を計算することによって計算され、
前記第3の整数と前記第4の整数との積は、前記第1の積、前記第2の積、および前記第3の積に基づいて計算される、
請求項1に記載のコンピュータによって実施される方法。
【請求項11】
前記第3の行列の計算は、1つのコマンドに従って、N個の行とN個の列とを有する行列の積を計算する第1のプロセッサによって行われる、請求項1に記載のコンピュータによって実施される方法。
【請求項12】
前記第1の整数および前記第2の整数のサイズに従って、前記第1の整数と前記第2の整数との前記積を、前記第1のプロセッサを用いて計算することと、前記第1の整数と前記第2の整数との前記積を、N個の行とN個の列とを有する行列の積を計算するためのコマンドを有しない第2のプロセッサを用いて計算することとの間で、切り換えが行われる、請求項11に記載のコンピュータによって実施される方法。
【請求項13】
前記複数の第1の整数要素および前記複数の第2の整数要素は、同じサイズを有する、請求項1に記載のコンピュータによって実施される方法。
【請求項14】
前記複数の第1の整数要素および前記複数の第2の整数要素は、それぞれ8ビットである、請求項13に記載のコンピュータによって実施される方法。
【請求項15】
装置であって、
プロセッサまたはプログラマブル回路と、
共同で命令を含む1つまたは複数のコンピュータ可読媒体とを備え、前記命令は、前記プロセッサまたは前記プログラマブル回路によって実行されるとき、前記プロセッサまたは前記プログラマブル回路に、
第1の整数を表す第1の整数データを第1の桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、N個の行とN個の列とを有する第1の行列に代入することと、
第2の整数を表す第2の整数データを第2の桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列の少なくとも1つの行列要素に代入することと、
前記第1の行列と前記第2の行列との積である第3の行列を計算することと、
前記第3の行列の各行列要素を、前記第1の整数と前記第2の整数との積の計算における部分積として出力することと
を行わせる、装置。
【請求項16】
前記第1の行列に前記代入するおよび前記第2の行列に前記代入する間、前記第1の行列および前記第2の行列の各行列要素は、前記第1の行列に含まれる各第1の整数要素と、前記第2の行列に含まれる各第2の整数要素との前記積の中の、前記第1の整数と前記第2の整数との前記積において同じ桁位置に対応する各積が、前記第3の行列の同じ行列要素に対応するように配置される、請求項15に記載の装置。
【請求項17】
前記命令は、前記プロセッサまたは前記プログラマブル回路によって実行されるとき、前記プロセッサまたは前記プログラマブル回路に、
前記第2の行列に前記代入する間、前記複数の第2の整数要素から前記1つまたは複数の第2の整数要素を一時に1つ、前記第2の行列に順次に代入するプロセスを、前記第1の行列に前記代入する間、前記複数の第1の整数要素の中のN×N個の第1の整数要素の異なるセットが、前記第1の行列に代入されるたびに繰り返すことと、
前記1つまたは複数の第2の整数要素が、前記第2の行列に代入されるたびに、前記第3の行列の計算を行い、前記部分積を出力することと、
各出力された部分積に基づいて、前記第1の整数と前記第2の整数との前記積を計算することと
を行わせる、請求項15に記載の装置。
【請求項18】
装置であって、
第1の整数を表す第1の整数データを第1の桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、N個の行とN個の列とを有する第1の行列に代入する、第1の行列代入部と、
第2の整数を表す第2の整数データを第2の桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列の少なくとも1つの行列要素に代入する、第2の行列代入部と、
前記第1の行列と前記第2の行列との積である第3の行列を計算する、第3の行列計算部と、
前記第3の行列の各行列要素を、前記第1の整数と前記第2の整数との積の計算における部分積として出力する、部分積出力部と
を備える装置。
【請求項19】
前記第1の行列に前記代入するおよび前記第2の行列に前記代入する間、前記第1の行列および前記第2の行列の各行列要素は、前記第1の行列に含まれる各第1の整数要素と、前記第2の行列に含まれる各第2の整数要素との前記積の中の、前記第1の整数と前記第2の整数との前記積において同じ桁位置に対応する各積が、前記第3の行列の同じ行列要素に対応するように配置される、請求項18に記載の装置。
【請求項20】
前記第2の行列代入部は、前記第2の行列に前記代入する間、前記複数の第2の整数要素から前記1つまたは複数の第2の整数要素を一時に1つ、前記第2の行列に順次に代入するプロセスを、前記第1の行列代入部が、前記複数の第1の整数要素の中のN×N個の第1の整数要素の異なるセットを、前記第1の行列に代入するたびに繰り返し、
前記第3の行列計算部および前記部分積出力部は、前記第3の行列の計算および前記部分積の出力を、前記第2の行列代入部によって、前記1つまたは複数の第2の整数要素が、前記第2の行列に代入されるたびに行い、
前記装置は、各出力された部分積に基づいて、前記第1の整数と前記第2の整数との前記積を計算する整数積計算部を備える、
請求項18に記載の装置。
【請求項21】
コンピュータ・プログラムであって、プロセッサまたはプログラマブル回路に
第1の整数を表す第1の整数データを第1の桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、N個の行とN個の列とを有する第1の行列に代入することと、
第2の整数を表す第2の整数データを第2の桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列の少なくとも1つの行列要素に代入することと、
前記第1の行列と前記第2の行列との積である第3の行列を計算することと、
前記第3の行列の各行列要素を、前記第1の整数と前記第2の整数との積の計算における部分積として出力することと
を実行させるためのコンピュータ・プログラム。
【請求項22】
前記第1の行列に前記代入するおよび前記第2の行列に前記代入する間、前記第1の行列および前記第2の行列の各行列要素は、前記第1の行列に含まれる各第1の整数要素と、前記第2の行列に含まれる各第2の整数要素との前記積の中の、前記第1の整数と前記第2の整数との前記積において同じ桁位置に対応する各積が、前記第3の行列の同じ行列要素に対応するように配置される、請求項21に記載の
コンピュータ・プログラム。
【請求項23】
前記
コンピュータ・プログラムは
、前記プロセッサまたは前記プログラマブル回路に、
前記第2の行列に前記代入する間、前記複数の第2の整数要素から前記1つまたは複数の第2の整数要素を一時に1つ、前記第2の行列に順次に代入するプロセスを、前記第1の行列に前記代入する間、前記複数の第1の整数要素の中のN×N個の第1の整数要素の異なるセットが、前記第1の行列に代入されるたびに繰り返すことと、
前記1つまたは複数の第2の整数要素が、前記第2の行列に代入されるたびに、前記第3の行列の計算を行い、前記部分積を出力することと、
各出力された部分積に基づいて、前記第1の整数と前記第2の整数との前記積を計算することと
を
さらに実行させる、請求項21に記載の
コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、乗算に関し、より詳細には、16ビット浮動小数点乗算器を用いた行列-行列の乗算による複数精度整数乗算器に関する。
【背景技術】
【0002】
行列演算を用いて整数を乗算するための従来の方法が提案されている。しかし、近年において、乗算がより速やかにおよびより高精度で行われることに対する要求が生じている。
【発明の概要】
【0003】
本発明の第1の態様によれば、コンピュータによって実施される方法であって、第1の整数を表す第1の整数データを桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、N個の行とN個の列とを有する第1の行列に代入することと、第2の整数を表す第2の整数データを桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列の少なくとも1つの行列要素に代入することと、第1の行列と第2の行列との積である第3の行列を計算することと、第3の行列の各行列要素を、第1の整数と第2の整数との積の計算における部分積として出力することとを含む、方法がもたらされる。このようにして、計算精度および計算速度を向上させることが可能である。
【0004】
第1の行列に代入するおよび第2の行列に代入する間、第1の行列および第2の行列の各行列要素は、第1の行列に含まれる各第1の整数要素と、第2の行列に含まれる各第2の整数要素との積の中の、第1の整数と第2の整数との積において同じ桁位置に対応する各積が、第3の行列の同じ行列要素に対応するように配置され得る。このようにして、計算された部分積を整列させることが可能であり、従って正しい乗算結果を計算することが可能である。
【0005】
本発明の他の態様によれば、装置であって、プロセッサまたはプログラマブル回路と、共同で命令を含む1つまたは複数のコンピュータ可読媒体とを備え、命令は、プロセッサまたはプログラマブル回路によって実行されるとき、プロセッサまたはプログラマブル回路に、第1の整数を表す第1の整数データを桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、N個の行とN個の列とを有する第1の行列に代入することと、第2の整数を表す第2の整数データを桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列の少なくとも1つの行列要素に代入することと、第1の行列と第2の行列との積である第3の行列を計算することと、第3の行列の各行列要素を、第1の整数と第2の整数との積の計算における部分積として出力することとを行わせる、装置がもたらされる。このようにして、計算精度および計算速度を向上させることが可能である。
【0006】
本発明のさらに他の態様によれば、装置であって、第1の整数を表す第1の整数データを桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、N個の行とN個の列とを有する第1の行列に代入する、第1の行列代入部と、第2の整数を表す第2の整数データを桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列の少なくとも1つの行列要素に代入する、第2の行列代入部と、第1の行列と第2の行列との積である第3の行列を計算する、第3の行列計算部と、第3の行列の各行列要素を、第1の整数と第2の整数との積の計算における部分積として出力する、部分積出力部とを備える装置がもたらされる。このようにして、計算精度および計算速度を向上させることが可能である。
【0007】
本発明のさらに他の態様によれば、プロセッサまたはプログラマブル回路に動作を行わせるように、プロセッサまたはプログラマブル回路によって実行可能なプログラム命令を共同で記憶する1つまたは複数のコンピュータ可読記憶媒体を含むコンピュータ・プログラム製品であって、動作は、第1の整数を表す第1の整数データを桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、N個の行とN個の列とを有する第1の行列に代入することと、第2の整数を表す第2の整数データを桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列の少なくとも1つの行列要素に代入することと、第1の行列と第2の行列との積である第3の行列を計算することと、第3の行列の各行列要素を、第1の整数と第2の整数との積の計算における部分積として出力することとを含むコンピュータ・プログラム製品がもたらされる。このようにして、計算精度および計算速度を向上させることが可能である。
【0008】
これらならびに他の特徴および利点は、添付の図面に関連して読まれる、それらの例示的実施形態の以下の詳細な説明から明らかになるであろう。
【0009】
以下の説明は、以下の図を参照して好ましい実施形態の詳細をもたらす。
【図面の簡単な説明】
【0010】
【
図3】行列要素を記憶するレジスタを示す図である。
【
図4】例示的実施形態による装置の動作を示す図である。
【
図5】第1の整数データ(B)および第2の整数データ(A)を示す図である。
【
図6】互いに乗算される第1の行列および第2の行列を示す図である。
【
図8】本発明の実施形態によるコンピュータの例示的ハードウェア構成を示す図である。
【発明を実施するための形態】
【0011】
本明細書の以下では、本発明のいくつかの実施形態が述べられる。実施形態は「特許請求の範囲」による本発明を限定するものではなく、実施形態において述べられる特徴のすべての組合せは、本発明の態様によってもたらされる手段に対して、必ずしも本質的ではない。
【0012】
図1は、本実施形態による装置1を示す。装置1は、行列演算を行うことによって2つの整数の積を出力し、例えば、コンピュータ支援設計(CAD)、コンピュータ支援エンジニアリング(CAE)、財務シミュレーション、または暗号化あるいはその組合せなどの、数値計算を行う。装置1は、メモリ2、行列代入部3、第1の行列記憶部4、第2の行列記憶部5、第3の行列計算部6、第4の行列記憶部7、部分積出力部8、および整数積計算部9を含む。装置1はプロセッサとすることができ、および例えば、グラフィック・プロセッサ・ユニット(GPU)でよい。
【0013】
メモリ2は、乗算演算の対象である整数を表す少なくとも1つの整数データを記憶する。例えば、メモリ2は、第1の整数を表す第1の整数データと、第2の整数を表す第2の整数データとを記憶することができる。
【0014】
メモリ2は、乗算結果を表す少なくとも1つの整数データを記憶することができる。例えば、メモリ2は、第1の整数と第2の整数との積である第12の整数を表す第12の整数データを記憶することができる。
【0015】
ここで、第1の整数および第2の整数は、互いに同じ値とすることができ、または異なる値でよい。第1の整数および第2の整数は、整数形式で表されることができ、または浮動小数点形式において仮数部によって表され、指数部に関連付けられ得る。本実施形態での例として、第1の整数データ、第2の整数データ、および第12の整数データは、2値データであり、8ビット、16ビット、32ビット、または64ビットなどの任意の長さを有する。
【0016】
行列代入部3は、メモリ2から読み出された整数データを桁方向に分割することによって、1つまたは複数の整数要素を生成し、これらの整数要素を行列に代入する。整数要素は、それぞれ1つまたは複数の桁を有することができる。整数データを桁方向に分割することは、整数データを桁方向に降順または昇順で、1つまたは複数の基本桁数に分割することを意味することができる。行列代入部3は、第1の行列代入部31と第2の行列代入部32とを含む。
【0017】
第1の行列代入部31は、第1の整数を表す第1の整数データを桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N個の第1の整数要素を、第1の行列記憶部4に代入する。本実施形態での例として、Nは2であるが、代わりに他の数、例えば、16とすることができる。第2の行列代入部32は、第2の整数を表す第2の整数データを桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、N個の行とN個の列とを有する第2の行列記憶部5の少なくとも1つの行列要素に代入する。例えば、第2の行列代入部32は、1つから4つの第2の整数要素を、2つの行と2つの列とを有する第2の行列記憶部5に代入することができる。各第2の整数要素は、各第1の整数要素と同じサイズとすることができ、例えば、8ビットとすることができる。
【0018】
第1の行列記憶部4および第2の行列記憶部5は、それぞれがN個の行とN個の列(例えば2つの行と2つの列)を有する第1の行列および第2の行列を記憶する。第1の行列記憶部4および第2の行列記憶部5は、行列配置を有するレジスタを含むことができる。第1の行列記憶部4および第2の行列記憶部5のレジスタは、同じサイズのデータを記憶することができる。
【0019】
第3の行列計算部6は、第1の行列と第2の行列とを掛け合わせることによって、第3の行列を計算する。装置1がプロセッサである場合、第3の行列の計算は1つのコマンドに従って行われ得る。第3の行列計算部6は、第3の行列を第4の行列記憶部7に供給することができる。
【0020】
第4の行列記憶部7は、第3の行列を積算することによって得られる第4の行列を記憶する。第4の行列は、第3の行列が計算されるたびに、第3の行列の各行列要素を、同じ桁位置に対応する計算された部分積の和に加算することによって得られる行列とすることができる。第4の行列記憶部7は、行列配置を有するレジスタを含むことができる。第4の行列記憶部7のレジスタは、第1の行列記憶部4および第2の行列記憶部5に記憶されるデータより大きなサイズを有するデータを記憶することができる。
【0021】
部分積出力部8は、第3の行列の各行列要素を、第1の整数と第2の整数との積の計算における部分積として出力する。本実施形態での例として、部分積出力部8は、第3の行列を積算することによって得られる第4の行列の各行列要素を、第1の整数と第2の整数との積の計算における対応する桁位置に対する、第1の整数要素と第2の整数要素との部分積の和として、抽出することができる。部分積出力部8は、各抽出された行列要素を整数積計算部9に供給することができる。
【0022】
整数積計算部9は、第1の整数と第2の整数との積を計算する。整数積計算部9は、部分積配置部91と加算部92とを含むことができる。
【0023】
部分積配置部91は、部分積の和から乗算結果を得るために、各部分積を対応する桁位置に配置する。例えば、部分積配置部91は、部分積出力部8から供給される各部分積(例えば本実施形態における部分積の和)を、第1の整数と第2の整数との積内のこの部分積に対応する桁位置に配置する。
【0024】
加算部92は、第12の整数を、各部分積の和を計算することによって得られる乗算結果として取得する。加算部92は、メモリ2に第12の整数を記憶することができる。
【0025】
上述の装置1を用いて、第1の行列と第2の行列との積である第3の行列が計算され、第3の行列の各行列要素は、第1の整数と第2の整数との積の計算における部分積として出力され、従って部分積を計算することによって乗算を行うことが可能である。それに応じて、計算を細分化しながら乗算を行うことが可能であるので、計算桁数に余裕をもたせながら、部分積を計算することによって、情報脱落などによって生じる計算誤差を低減し、計算精度を向上させることが可能である。さらに、乗算は行列計算に従って行われるので、計算速度を向上させることが可能である。
【0026】
図2は、第1の行列記憶部4、第2の行列記憶部5、第3の行列計算部6、および第4の行列記憶部7を示す。本実施形態での例として、第3の行列計算部6はテンソル計算ユニットであり、第1の行列記憶部4および第2の行列記憶部5に記憶された、それぞれN個の行とN個の列(例えば2つの行と2つの列)を有する第1の行列Pおよび第2の行列Qから、第3の行列PQを計算することができる。さらに、第3の行列計算部6は、演算S=P×Q+Rに従って、新たに計算された第3の行列PQと、第4の行列記憶部7の、第3の計算された行列PQの和である第4の行列Rとを、足し合わせることによって新たな第4の行列Sを計算し、第4の行列記憶部7の第4の行列Rを更新することができる。
【0027】
図3は、行列要素を記憶するレジスタを示す。本実施形態での例として、第1の行列Pおよび第2の行列Qの行列要素を記憶するレジスタは、1ビット符号部と、5ビット指数部と、10ビット仮数部とを有する半精度浮動小数点形式(FP16)で各行列要素を記憶することができる。第4の行列RおよびSの行列要素を記憶するレジスタは、1ビット符号部と、8ビット指数部と、23ビット仮数部とを有する単精度浮動小数点形式(FP32)で各行列要素を記憶することができる。例として、各整数要素は、レジスタの仮数部に記憶されることができ、またはレジスタの仮数部および符号部に記憶され得る。
【0028】
図4は、本実施形態による装置1の動作を示す。ステップS11からS25のプロセスを行うことによって、装置1は、第1の整数に第2の整数を乗算して、積として第12の整数を計算する。装置1は、第1の整数および第2の整数がオペレータによって指定され、乗算命令が入力されたとき、動作を開始する。動作が開始するとき、第4の行列記憶部7内の第4の行列は0にリセットされ得る。
【0029】
最初に、ステップS11で、第1の行列代入部31は、第1の整数データを桁方向に分割することによって得られる複数の第1の整数要素の中の、N×N(例えば4)個の第1の整数要素を、第1の行列記憶部4内の第1の行列に代入する。次に、ステップS13で、第2の行列代入部32は、第2の整数データを桁方向に分割することによって得られる複数の第2の整数要素の中の、1つまたは複数の第2の整数要素のそれぞれを、第2の行列記憶部5内の第2の行列の少なくとも1つの行列要素に代入する。
【0030】
第1の行列への代入を行うとき、第1の行列代入部31は、メモリ2から第1の整数データを読み出し、この第1の整数データを桁方向に分割することによって、複数の第1の整数要素を生成することができる。例として、第1の行列代入部31は、第1の整数データを8桁、すなわち8ビットの単位に分割することによって、複数の第1の整数要素を生成することができる。
【0031】
同様に、第2の行列への代入を行うとき、第2の行列代入部32は、メモリ2から第2の整数データを読み出し、桁方向にこの第2の整数データを分割することによって、複数の第2の整数要素を生成することができる。例として、第2の行列代入部32は、第2の整数データを8桁、すなわち8ビットの単位に分割することによって、複数の第2の整数要素を生成することができる。
【0032】
第1の行列代入部31および第2の行列代入部32は、第1の行列および第2の行列の各行列要素を第1の行列および第2の行列に、第1の行列に含まれる各第1の整数要素と、第2の行列に含まれる各第2の整数要素との複数の積の中の、第12の整数での同じ桁位置に対応する積が、第3の行列の同じ行列要素に対応して配置されるように、代入することができる。このようにして、計算された部分積の桁を整列させることが可能であり、従って正しい乗算結果を計算することが可能である。
【0033】
例えば、第1の行列代入部31は、第1の整数データにおいて桁方向に連続したN×N個の第1の整数要素を、第1の行列に代入することができる。この代わりにまたはこれに加えて、第2の行列代入部32は、第2の整数データにおいて桁方向に連続した1つまたは複数の第2の整数要素を、第2の行列に代入することができる。このようにして、第1の行列および第2の行列への整数要素の代入を簡略化することが可能である。
【0034】
さらに、第1の行列への代入を行うとき、第1の行列代入部31は、N×N(例えば4)個の第1の整数要素の中の、N(例えば2)個の連続した第1の整数要素を、第1の行列の各行に代入することができる。代入の順序は、第1の整数データにおける桁方向で昇順または降順とすることができる。第2の行列への代入を行うとき、第2の行列代入部32は、複数の第2の整数要素の中の、N(例えば2)個の連続した第2の整数要素を、第2の行列の各列に代入することができる。代入の順序は、第2の整数データの桁方向において、第1の行列に対するN個の第1の整数要素の代入順序と反対とすることができる。整数要素を記憶する時間的順序がそれらを読み出す時間的順序と同じである、すなわち、整数要素が低位側から読み出される場合、第1の行列代入部31は、第1の整数要素を、第1の行列の各行に対して、読み出しの時間的順序と逆の順序でそれらが配置されるように、代入することができ、第2の行列代入部32は、第2の整数要素を、第2の行列の各列に対して、読み出しの時間的順序でそれらが配置されるように、代入することができる。第1の整数データおよび第2の整数データがリトル・エンディアン形式で記憶される場合、すなわち、より下位のビットがより低く位置付けされる場合、第1の行列代入部31は、第1の行列の各行に対して桁方向に降順で、第1の整数要素を代入することができ、第2の行列代入部32は、第2の行列の各列に対して桁方向に昇順で、第2の整数要素を代入することができる。第1の整数データおよび第2の整数データがビッグ・エンディアン形式で記憶される場合、すなわち、より下位のビットがより高く位置付けされる場合、第1の行列代入部31および第2の行列代入部32はそれぞれ、反対の順序で整数要素を代入することができる。
【0035】
さらに、第1の行列への代入を行うとき、第1の行列代入部31は、N×N(例えば4)個の第1の整数要素を、第1の行列の各行列要素に列優先順で代入することができる。第2の行列への代入を行うとき、第2の行列代入部32は、N(例えば2)個の連続した第2の整数要素を、第2の行列の第1の行に、第1の行列内の第1の整数要素の代入順序と同じ順序で代入することができる(すなわち桁方向に昇順または降順)。さらに、第2の行列代入部32は、N個の第2の整数要素を、第2の行列の第2および後続の行に、第2の整数データ内のN個の第2の整数要素を一時に1つの整数要素だけシフトしながら、代入することができる。例えば、第2の行列代入部32は、第2の行列の各列内の第2の整数要素の代入順序が、第1の行列の各行への第1の整数要素の代入順序と反対になるように、第2の整数要素をシフトすることができる。例として、第1の整数データおよび第2の整数データがリトル・エンディアン形式で記憶される場合、第1の行列代入部31は、N×N個の第1の整数要素を第1の行列に、行優先および桁方向に降順で代入することができ、第2の行列代入部32は、N個の第2の整数要素(例えば要素(a1)、・・・、要素(aN)、下付き文字は整数要素の順序を示す)を第2の行列の第1の行に、桁方向に降順で代入することができる(例えば要素(aN)、・・・、要素(a1)の順に)。さらに、第2の行列代入部32は、N個の整数要素(例えば要素(a1)、・・・、要素(aN))を、第2の行において1つの整数要素だけより高位の桁側に向かって、シフトすることによって得られるN個の整数要素(例えば要素(aN+1)、・・・、要素(a2))を、代入することができる。この後、第2の行列の各列内の第2の整数要素は、行の数だけより高位の桁側に向かってシフトされたN個の整数要素を、各行に代入することによって、昇順に設定される。第2の行列代入部32は、シフトの結果として、代入されることになる整数要素が第2の整数データ内に存在しない場合、0を代入することができる。
【0036】
次に、ステップS15で、第3の行列計算部6は、第1の行列と第2の行列との積である、第3の行列を計算する。本実施形態での例として、第3の行列計算部6は、計算された第3の行列を、第4の行列記憶部7内の第4の行列に加算することができる。第4の行列は、N個の行とN個の列とを有することができる。
【0037】
次に、ステップS17で、部分積出力部8は、第3の行列の各行列要素を、第1の整数と第2の整数との積の計算における部分積として出力する。本実施形態での例として、第3の行列は、N個の行とN個の列とを有する第4の行列に加算され、従って部分積出力部8は、第4の行列の第1の行または最後の行内の各行列要素を、第1の整数と第2の整数との積における対応する桁位置での部分積の和として、抽出し、残りの行を1つの行だけ、抽出された行に向かってシフトすることができる。例えば、部分積出力部8は、第1の整数要素が、桁方向に降順で第1の行列に代入される場合、第4の行列から最後の行を抽出することができ、第1の整数要素が、桁方向に昇順で第1の行列に代入される場合、第4の行列から第1の行を抽出することができる。このようにして、それに対して第1の整数と第2の整数との積内に加算されることになるさらなる部分積が存在しない部分積が、第4の行列から抽出される。部分積出力部8は、第4の行列内のシフトの結果として空のスペースが生じる各行列要素に対して、0を設定することができる。
【0038】
次に、ステップS19で、第2の行列代入部32は、第2の整数内の整数要素のすべてが第2の行列に代入されたかどうかを判定する。判定結果が否定(S19:いいえ)である場合、第2の行列代入部32は処理をステップS13に移動させ、判定結果が肯定(S19:はい)である場合、第2の行列代入部32は処理をステップS21に移動させる。ステップS13の処理が繰り返されることになる場合、第2の行列代入部32は、第2の整数データを桁方向に分割することによって得られる複数の第2の整数要素の中の、未だ代入されていない1つまたは複数の第2の整数要素を、第2の行列に代入することができる。このようにして、第1の行列に代入されたN×N個の第1の整数要素と、各第2の整数要素との部分積が計算される。第2の行列代入部32は、第2の行列の一部分内の行列要素に代入されることになる整数要素が、第2の整数データ内に存在しない場合、0を代入することができる。
【0039】
ステップS21で、第1の行列代入部31は、第1の整数内の整数要素のすべてが第1の行列に代入されたかどうかを判定する。判定結果が否定(S21:いいえ)である場合、第1の行列代入部31は処理をステップS11に移動させ、判定結果が肯定(S21:はい)である場合、第1の行列代入部31は処理をステップS23に移動させる。ステップS11の処理が繰り返されることになる場合、第1の行列代入部31は、第1の整数データを桁方向に分割することによって得られる複数の第1の整数要素の中の、未だ代入されていないN×N個の第1の整数要素を、第1の行列に代入することができる。このようにして、各第1の整数要素と各第2の整数要素との部分積が計算される。第1の行列代入部31は、第1の行列の一部分内の行列要素に代入されることになる整数要素が、第1の整数データ内に存在しない場合、0を代入することができる。上述のステップS11からS21の処理を行うことによって、一時に複数の第2の整数要素の中の1つまたは複数の第2の整数要素を、第2の行列に順次に代入するプロセスは、複数の第1の整数要素の中のN×N個の第1の整数要素の異なるセットが、第1の行列に代入されるたびに繰り返される。さらに、第3の行列の計算、および部分積の出力は、第2の行列への代入が行われるたびに行われる。
【0040】
ステップS23で、部分積配置部91は、各部分積を、第1の整数と第2の整数との積における対応する桁位置に配置する。例えば、部分積配置部91は、第1の整数と第2の整数との積における各部分積が対応する桁位置において加算されるように、桁位置を調整し、各部分積を加算部92に供給することができる。例として、ステップS17で部分積配置部91は、あらゆる基準の数の桁(例えば本実施形態では8桁)ごとに対して、各行列要素出力に対する桁位置をシフトすることができる。
【0041】
次に、ステップS25で、加算部92は、第1の整数と第2の整数との積である、第12の整数を、各部分積の和を計算することによって計算する。このようにして、第12の整数は、各出力された部分積に基づいて計算される。部分積において桁あふれがある場合、加算部92はこの桁あふれをより高位の桁に加算することができる。
【0042】
上述のプロセスを用いて、N×N個の第1の整数要素の中の、N個の連続した第1の整数要素は、第1の行列の各行に、桁方向に昇順または降順で代入され、複数の第2の整数要素の中の、N個の連続した第2の整数要素は、第2の行列の各列に、第1の整数要素の代入順序と反対の順序で代入される。それに応じて、計算された部分積の桁を整列させることが可能であるので、正しい乗算結果を計算することが可能である。
【0043】
さらに、部分積の桁あふれはより高位の桁に加算されるので、計算精度を向上させることが可能である。
【0044】
以下は、乗算の詳細な例を述べる。
【0045】
図5は、第1の整数データ(B)および第2の整数データ(A)を示す。本実施形態での例として、第1の整数データ(B)および第2の整数データ(A)は、それぞれ64ビット2値データである。第1の整数データ(B)は、それぞれが8ビットを有する8個の第1の整数要素(b
0)~(b
7)に分割され得る。第2の整数データ(A)は、それぞれが8ビットを有する8個の第2の整数要素(a
0)~(a
7)に分割され得る。ここで下付き文字は、整数要素の順序を示し、より小さな値はより低位の桁位置を示す。
【0046】
図6は、互いに乗算される第1の行列および第2の行列を示す。本実施形態での例として、複数の第1の整数要素(b
0)~(b
7)は、一時に4つが、2つの列と2つの行とを有する第1の行列に、行優先降順で代入され得る。さらに、1つまたは複数の第2の整数要素は、2つの行と2つの列とを有する第2の行列に、各列において2つの第2の整数要素が昇順で、各行において2つの第2の整数要素が降順であるように、代入され得る。第1の行において第2の整数要素より1つの整数要素だけより高位の桁位置に向かってシフトされた第2の整数要素は、第2の行列の第2の行に代入され得る。整数要素が、上述のような順序で、行方向または列方向あるいはその両方に整列される限り、第1の行列および第2の行列は、より低位の桁位置の整数要素を含む行列が最初に生成されるように、生成され得る。言い換えれば、第1の行列は
図6の下部から順に生成されることができ、第2の行列は
図6の右側から順に生成され得る。
【0047】
図7は、部分積の加算を示す。図面において、破線で囲まれた部分X1およびX2は、
図6に示される第1の行列M1と第2の行列M2
1との乗算結果を示す。これらの部分において、部分X1の行列要素は、第3の行列内、および従ってまた第4の行列内の最後の行内の行列要素であり、従って対応する桁位置における部分積の和として抽出される。抽出の後、部分X2の行列要素は、第4の行列内の最後の行へシフトされる。
【0048】
破線で囲まれた部分Y1およびY2は、
図6に示される第1の行列M1と第2の行列M2
2との乗算結果を示す。これらの部分において、部分Y1の行列要素は、第3の行列内の最後の行内の行列要素であり、この行列要素が第4の行列内の最後の行内の行列要素(これはここで部分X2の行列要素である)に加算された後、結果は対応するビット位置での部分積の和として抽出される。
【0049】
この後、同じやり方で、第1の整数要素b0~b3と、第2の整数要素a0~a7との部分積が計算され、さらに、第1の整数要素b4~b7と、第2の整数要素a0~a7との部分積が計算される。次いで、各部分積を対応する桁位置に配置し、部分積を足し合わせることによって、第12の整数が積として計算される。
【0050】
上記の本実施形態において、装置1は、GPUなどのプロセッサであるものとして述べられるが、このプロセッサ(第1のプロセッサと呼ばれる)に加えて、N個の行とN個の列とを有する行列の積を計算するためのコマンドを含まないCPUなどの他の別個のプロセッサ(第2のプロセッサと呼ばれる)が含められ得る。この場合、装置1は、第1の整数および第2の整数のサイズに従って、それが第1のプロセッサを用いて第1の整数と第2の整数との積を計算するか、それとも第2のプロセッサを用いるかを切り換えることができる。例えば、第1の整数および第2の整数のサイズが基準サイズ(例えば8192ビットから16384ビットまでの範囲内のサイズ)より大きい場合、装置1は、第2のプロセッサを用いて積を計算することができる。代わりに、装置1は、第1の整数および第2の整数のサイズが基準サイズより小さい場合、第2のプロセッサを用いて積を計算することができる。このようにして、整数のサイズにより、計算速度が第1のプロセッサを用いるより第2のプロセッサを用いた方が大きい場合、計算の速度を向上させることが可能である。
【0051】
さらに、上記の説明において、装置1は、第1の整数と第2の整数との積を、第1の整数を分割することによって得られる複数の第1の整数要素と、第2の整数を分割することによって得られる複数の第2の整数要素とを乗算することによって計算するが、代わりの他の技法を用いて積を計算することができる。例えば、装置1は、2つの整数(第3の整数および第4の整数と呼ばれる)の積を、カラツバ(Karatsuba)アルゴリズムを用いて計算することができる。例として、装置1は、第3の整数(C)の上半分(Ch)を第1の整数として設定し、第4の整数(D)の上半分(Dh)第2の整数として設定し、上述の実施形態と同じやり方で第1の整数と第2の整数との積を計算することによって、第1の積(Ch・Dh)を計算することができる。さらに、装置1は、第3の整数(C)の下半分(Cl)を第1の整数として設定し、第4の整数(D)の下半分(Dl)を第2の整数として設定し、第1の整数と第2の整数との積を計算することによって、第2の積(Cl・Dl)を計算することができる。装置1は、第3の整数(C)の上半分と下半分との和(Ch+Cl)を第1の整数として設定し、第4の整数(D)の上半分と下半分との和(Dh+Dl)を第2の整数として設定し、第1の整数と第2の整数との積を計算することによって、第3の積(Ch+Cl)・(Dh+Dl)を計算することができる。装置1は次いで、第1の積、第2の積、および第3の積に基づいて、第3の整数および第4の整数を計算することができる。例として、分割の数がzである場合、装置1は、第3の整数と第4の整数との積Eを、式E=(Ch・Dh)z2+{(Ch+Cl)・(Dh+Dl)-(Ch・Dh)-(Cl・Dl)}z+(Cl・Dl)を用いて計算することができる。このようにして、整数要素の間の乗算の数を低減し、計算速度を向上させることが可能である。
【0052】
上記の説明において、装置1はメモリ2と整数積計算部9とを含むが、これらの構成要素の少なくとも1つは装置1から省かれ得る。装置1がメモリ2を含まない場合、行列代入部3は、第1の整数データおよび第2の整数データを装置1の外側から得ることができる。装置1が整数積計算部9を含まない場合、整数積計算部9は、装置1の外側に接続されることができ、装置1は部分積を整数積計算部9に供給することができる。
【0053】
上記は第1の行列および第2の行列への整数要素の代入の1つの実施形態を述べるが、第3の行列の行列要素から部分積を抽出し、これらの部分積を対応する桁位置に配置することが可能である限り、他の実施形態が用いられ得る。例えば、整数要素は、第1の行列または第2の行列あるいはその両方に、桁方向において連続しない順序で代入されることができ、または列もしくは行の順序を変えながら代入され得る。さらに、上記の説明において、行列乗算における被乗数は第1の行列であり、乗数は第2の行列であるがこれらの役割は逆にされ得る。
【0054】
図8は、本発明の実施形態による、前述の動作を行うように構成されたコンピュータの例示的ハードウェア構成を示す。コンピュータ700にインストールされたプログラムは、コンピュータ700に、本発明の実施形態の装置、またはそれらの1つまたは複数の部分(モジュール、構成要素、要素などを含む)に、関連付けられた動作として機能させるまたはそれらを行わせること、またはコンピュータ700に本発明の実施形態のプロセスまたはそれらのステップを行わせること、あるいはその両方ができる。このようなプログラムは、本明細書で述べられるフローチャートおよびブロック図のいくつかまたはすべてのブロックに関連付けられたいくつかの動作をコンピュータ700に行わせるように、CPU700-12によって実行され得る。
【0055】
本実施形態によるコンピュータ700は、CPU700-12、RAM700-14、グラフィックス・コントローラ700-16、およびディスプレイ・デバイス700-18を含み、これらはホスト・コントローラ700-10によって相互に接続される。コンピュータ700はまた、通信インターフェース700-22、ハード・ディスク・ドライブ700-24、DVD-ROMドライブ700-26、およびICカード・ドライブなどの入出力ユニットを含み、これらは入出力コントローラ700-20を通じてホスト・コントローラ700-10に接続される。コンピュータはまた、ROM700-30およびキーボード700-42などのレガシー入出力ユニットを含み、これらは入出力チップ700-40を通して入出力コントローラ700-20に接続される。
【0056】
CPU700-12は、ROM700-30およびRAM700-14に記憶されたプログラムに従って動作し、それによって各ユニットを制御する。グラフィックス・コントローラ700-16は、RAM700-14内またはそれ自体にもたらされたフレーム・バッファなどに、CPU700-12によって生成された画像データを取得し、画像データがディスプレイ・デバイス700-18に表示されるようにする。グラフィックス・コントローラ700-16は1つまたは複数のGPUを含むことができる。
【0057】
通信インターフェース700-22は、ネットワーク700-50を通じて他の電子デバイスと通信する。ハード・ディスク・ドライブ700-24は、コンピュータ700内でCPU700-12によって用いられるプログラムおよびデータを記憶する。DVD-ROMドライブ700-26は、DVD-ROM700-01からプログラムまたはデータを読み出し、RAM700-14を通じてプログラムまたはデータをハード・ディスク・ドライブ700-24にもたらす。ICカード・ドライブは、ICカードからプログラムおよびデータを読み出すこと、またはプログラムおよびデータをICカードに書き込むことあるいはその両方を行う。
【0058】
ROM700-30はそれに、コンピュータ700のハードウェアに応じて、活動化の時点でコンピュータ700によって実行されるブート・プログラムなど、またはプログラムあるいはその両方を記憶する。入出力チップ700-40はまた、様々な入出力ユニットを、パラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポートなどを通じて、入出力コントローラ700-20に接続することができる。
【0059】
プログラムは、DVD-ROM700-01またはICカードなどのコンピュータ可読媒体によってもたらされる。プログラムは、コンピュータ可読媒体から読み出され、これらもコンピュータ可読媒体の例であるハード・ディスク・ドライブ700-24、RAM700-14、またはROM700-30にインストールされ、CPU700-12によって実行される。これらのプログラムにおいて記述された情報処理はコンピュータ700に読み込まれ、結果としてプログラムと、上記で述べられた様々なタイプのハードウェア・リソースとの間の協力を生じる。装置または方法は、コンピュータ700の使用に従った、動作、または情報の処理を実現することによって構成される。
【0060】
例えば、コンピュータ700と外部デバイスとの間で通信が行われるとき、CPU700-12は、通信プログラムにおいて記述された処理に基づいて、通信インターフェース700-22に対して通信処理を指示するように、RAM700-14にロードされた通信プログラムを実行することができる。通信インターフェース700-22は、CPU700-12の制御のもとで、RAM700-14、ハード・ディスク・ドライブ700-24、DVD-ROM700-01、またはICカードなど、記録媒体にもたらされた送信バッファリング領域に記憶された送信データを読み出し、読み出された送信データをネットワーク700-50に送信し、またはネットワーク700-50から受信された受信データを、記録媒体上にもたらされた受信バッファリング領域などに書き込む。
【0061】
加えて、CPU700-12は、ファイルまたはデータベースのすべてのまたは必要な部分がRAM700-14に読み込まれるようにすることができ、ファイルまたはデータベースはハード・ディスク・ドライブ700-24、DVD-ROMドライブ700-26(DVD-ROM700-01)、ICカードなどの外部記録媒体に記憶されており、ならびにRAM700-14上のデータに様々なタイプの処理を行うことができる。CPU700-12は次いで、処理されたデータを外部記録媒体に書き戻すことができる。
【0062】
様々なタイプのプログラム、データ、テーブル、およびデータベースなど、様々なタイプの情報が、情報処理を受けるように記録媒体に記憶され得る。CPU700-12は、RAM700-14から読み出されたデータに対して様々なタイプの処理を行うことができ、これは、本開示の全体にわたって述べられおよびプログラムの命令シーケンスによって指定されるような、様々なタイプの動作、情報の処理、条件判定、条件分岐、無条件分岐、情報の検索/置換などを含み、ならびに結果をRAM700-14に書き戻す。加えて、CPU700-12は、記録媒体内の、ファイル、データベースなどにおける情報を検索することができる。例えば、それぞれが第2の属性の属性値に関連付けられた第1の属性の属性値を有する、複数のエントリが記録媒体に記憶されるとき、CPU700-12は、複数のエントリの中で、それの第1の属性の属性値が指定された、条件に適合するエントリを検索することができ、エントリに記憶された第2の属性の属性値を読み出し、それによって所定の条件を満たす第1の属性に関連付けられた第2の属性の属性値を取得する。計算精度および速度に基づくデータベース検索は、データベース結果を見出すためにCPU700-12によって用いられるクロック・サイクルの数を低減することによって、コンピュータ700の性能を改善する。コンピュータ700のこの改善は、データベース検索に対するより速い応答として見られ得る。
【0063】
上記で説明されたプログラムまたはソフトウェア・モジュールは、コンピュータ700上のまたはその近くの、コンピュータ可読媒体に記憶され得る。加えて、専用通信ネットワークまたはインターネットに接続されたサーバ・システム内にもたらされた、ハード・ディスクまたはRAMなどの記録媒体は、コンピュータ可読媒体として用いられることができ、それによってネットワークを通じてプログラムをコンピュータ700に提供する。
【0064】
本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはその組合せとすることができる。コンピュータ・プログラム製品は、本発明の態様をプロセッサに遂行させるためのコンピュータ可読プログラム命令を有する、(1つまたは複数の)コンピュータ可読記憶媒体を含むことができる。
【0065】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶することができる、有形のデバイスとすることができる。コンピュータ可読記憶媒体は、例えば、非限定的に、電子的記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁的記憶デバイス、半導体記憶デバイス、または前述の任意の適切な組合せとすることができる。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み出し専用メモリ(ROM)、消去可能プログラマブル読み出し専用メモリ(EPROMまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM)、ポータブル・コンパクト・ディスク読み出し専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピ・ディスク、パンチカードまたはその上に記録された命令を有する溝内の隆起構造などの機械的エンコード型デバイス、および前述の任意の適切な組合せを含む。本明細書で用いられる、コンピュータ可読記憶媒体とは、電波または他の自由に伝搬する電磁波、導波路または他の伝送媒体を通して伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、または線材を通して伝送される電気信号など、それ自体が一過性の信号であると解釈されるべきものではない。
【0066】
本明細書で述べられるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、またはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワークあるいはその組合せを通じて、外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅の伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはその組合せを備えることができる。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、コンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体における記憶のために転送する。
【0067】
本発明の動作を遂行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存型命令、マイクロコード、ファームウェア命令、状態設定データ、あるいはSmalltalk(登録商標)、C++(登録商標)などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様なプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードまたはオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、専らユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、または専らリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくは広域ネットワーク(WAN)を含む任意のタイプのネットワークを通して(例えば、インターネット・サービス・プロバイダを用いてインターネットを通して)、ユーザのコンピュータに接続されることができ、または外部コンピュータへの接続がなされ得る。いくつかの実施形態において、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA)を含む電子回路は、本発明の態様を行うために、電子回路を個別化するようにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
【0068】
本発明の態様は、本明細書において本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して述べられる。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されるであろう。
【0069】
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサまたは他のプログラマブル・データ処理装置によって実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックにおいて指定された機能/働きを実施するための手段を作成するように、マシンを生み出すために汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置の、プロセッサに提供され得る。これらのコンピュータ可読プログラム命令は、また、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方のブロックにおいて規定された機能/働きの態様を実施する命令を含んだ製品を備えるように、特定のやり方で機能するようにコンピュータ、プログラマブル・データ処理装置、または他のデバイスあるいはその組合せに指示することができるコンピュータ可読記憶媒体に記憶され得る。
【0070】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックにおいて指定された機能/働きを実施するようにするべく、コンピュータによって実施されるプロセスを生み出すように、一連の動作ステップがコンピュータ、他のプログラマブル装置、または他のデバイス上で行われるようにさせるために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされることができる。
【0071】
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この関連において、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実施するための1つまたは複数の実行可能命令を備えるモジュール、セグメント、または命令の一部分を表すことができる。いくつかの代替的実装形態において、ブロック内に記された機能は、図に記されたものとは異なる順序で生じることができる。例えば、連続して示される2つのブロックは、実際は実質的に並行して実行されることができ、またはブロックは時には関わる機能性に応じて、逆の順序で実行され得る。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定された機能または働きを行う、または専用ハードウェアおよびコンピュータ命令の組合せを遂行する、専用ハードウェア・ベースのシステムによって実施され得ることが留意されるであろう。
【0072】
本発明の実施形態が述べられたが、本発明の技術的範囲は、上述の実施形態に限定されない。当業者には、様々な変更および改良が上述の実施形態に加えられ得ることが明らかである。また「特許請求の範囲」から、このような変更および改良が加えられた実施形態は本発明の技術的範囲に含められ得ることが明らかである。
【0073】
請求項、実施形態、または図に示される装置、システム、プログラム、および方法によって行われる各プロセスの動作、手順、ステップ、および段階は、「の前に(prior to)」、「の前に(before)」などによって何らかの順序が示されない限り、および前のプロセスからの出力が後のプロセスで用いられない限り、任意の順序で行われ得る。請求項、実施形態、または図において、プロセス・フローが「最初に」または「次に」などの語句を用いて述べられた場合であっても、それは必ずしもプロセスがこの順序で行われなければならないことを意味しない。
【0074】
上記から明らかにされたように、本発明の実施形態を用いて、計算精度および計算速度を向上させることが可能である。