(57)【要約】  コンピュータによって実施される方法、コンピュータ・プログラム製品、および装置を提供する。方法は、第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することを含む。方法は、第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することをさらに含む。方法はまた、第１の行列と第２の行列との積である第３の行列を計算することをさらに含む。方法は、第３の行列の各行列要素を、第１の整数と第２の整数との積の計算における部分積として出力することを含む。
2021515936.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータによって実施される方法であって、
第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、
第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、
前記第１の行列と前記第２の行列との積である第３の行列を計算することと、
前記第３の行列の各行列要素を、前記第１の整数と前記第２の整数との積の計算における部分積として出力することと
を含む方法。
【請求項２】
前記第１の行列に前記代入するおよび前記第２の行列に前記代入する間、前記第１の行列および前記第２の行列の各行列要素は、前記第１の行列に含まれる各第１の整数要素と、前記第２の行列に含まれる各第２の整数要素との前記積の中の、前記第１の整数と前記第２の整数との前記積において同じ桁位置に対応する各積が、前記第３の行列の同じ行列要素に対応するように配置される、請求項１に記載のコンピュータによって実施される方法。
【請求項３】
前記Ｎ×Ｎ個の第１の整数要素は、前記第１の整数データにおいて前記第１の桁方向に連続している、請求項１に記載のコンピュータによって実施される方法。
【請求項４】
前記１つまたは複数の第２の整数要素は、前記第２の整数データにおいて前記第２の桁方向に連続している、請求項３に記載のコンピュータによって実施される方法。
【請求項５】
前記第１の行列に前記代入する間、前記Ｎ×Ｎ個の第１の整数要素の中の、Ｎ個の連続した第１の整数要素は、前記第１の行列の各行に、前記第１の整数データにおける前記第１の桁方向において昇順または降順で代入され、
前記第２の行列に前記代入する間、前記複数の第２の整数要素の中の、Ｎ個の連続した第２の整数要素は、前記第２の行列の各列に、前記第２の整数データの前記第２の桁方向において前記Ｎ個の第１の整数要素を前記第１の行列に前記代入する順序と反対の順序で、代入される、
請求項４に記載のコンピュータによって実施される方法。
【請求項６】
前記第１の行列に前記代入する間、前記Ｎ×Ｎ個の第１の整数要素は、前記第１の行列の各行列要素に、列優先および昇順または降順で代入され、
前記第２の行列に前記代入する間、
前記Ｎ個の連続した第２の整数要素は、前記第２の行列の第１の行に、前記Ｎ個の第１の整数要素を前記第１の行列に前記代入する順序と同じ順序で代入され、
前記Ｎ個の第２の整数要素は、前記第２の行列の第２および後続の行に、前記第２の整数データ内の前記Ｎ個の第２の整数要素を一時に１つの整数要素だけシフトしながら、代入される、
請求項５に記載のコンピュータによって実施される方法。
【請求項７】
前記第３の行列は、第４の行列に加算され、
前記部分積として前記出力することは、
前記第４の行列の第１の行または最後の行内の各行列要素を、前記第１の整数と前記第２の整数との前記積における対応するビット位置での、各第１の整数要素と各第２の整数要素との前記部分積の和として、抽出することと、
前記第４の行列内において、前記部分積の前記和として抽出された前記行以外の行を、前記部分積の前記和として抽出された前記行に向かって１行シフトし、空のスペースを有する行内の各行列要素を０に設定することと
を含む、請求項６に記載のコンピュータによって実施される方法。
【請求項８】
前記第２の行列に前記代入する間、前記複数の第２の整数要素から前記１つまたは複数の第２の整数要素を一時に１つ、前記第２の行列に順次に代入するプロセスは、前記第１の行列に前記代入する間、前記複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットが、前記第１の行列に代入されるたびに繰り返され、
前記第３の行列を前記計算すること、および前記部分積を前記出力することは、前記１つまたは複数の第２の整数要素が、前記第２の行列に代入されるたびに行われ、
前記第１の整数と前記第２の整数との前記積は、各出力された部分積に基づいて計算される、
請求項１に記載のコンピュータによって実施される方法。
【請求項９】
前記第１の整数と前記第２の整数との前記積を計算することは、
各部分積を、前記第１の整数と前記第２の整数との前記積における対応する桁位置に配置することと、
各部分積の桁あふれを、より高位の桁に加算することと
を含む、請求項８に記載のコンピュータによって実施される方法。
【請求項１０】
第３の整数の上半分と第４の整数の上半分との第１の積は、前記第３の整数の前記上半分を前記第１の整数として設定し、前記第４の整数の前記上半分を前記第２の整数として設定し、前記第１の整数と前記第２の整数との前記積を計算することによって計算され、
前記第３の整数の下半分と前記第４の整数の下半分との第２の積は、前記第３の整数の前記下半分を前記第１の整数として設定し、前記第４の整数の前記下半分を前記第２の整数として設定し、前記第１の整数と前記第２の整数との前記積を計算することによって計算され、
前記第３の整数の前記上半分と前記下半分との和と、前記第４の整数の前記上半分と前記下半分との和との第３の積は、前記第３の整数の前記上半分と前記下半分との前記和を前記第１の整数として設定し、前記第４の整数の前記上半分と前記下半分との前記和を前記第２の整数として設定し、前記第１の整数と前記第２の整数との前記積を計算することによって計算され、
前記第３の整数と前記第４の整数との積は、前記第１の積、前記第２の積、および前記第３の積に基づいて計算される、
請求項１に記載のコンピュータによって実施される方法。
【請求項１１】
前記第３の行列の計算は、１つのコマンドに従って、Ｎ個の行とＮ個の列とを有する行列の積を計算する第１のプロセッサによって行われる、請求項１に記載のコンピュータによって実施される方法。
【請求項１２】
前記第１の整数および前記第２の整数のサイズに従って、前記第１の整数と前記第２の整数との前記積を、前記第１のプロセッサを用いて計算することと、前記第１の整数と前記第２の整数との前記積を、Ｎ個の行とＮ個の列とを有する行列の積を計算するためのコマンドを有しない第２のプロセッサを用いて計算することとの間で、切り換えが行われる、請求項１１に記載のコンピュータによって実施される方法。
【請求項１３】
前記複数の第１の整数要素および前記複数の第２の整数要素は、同じサイズを有する、請求項１に記載のコンピュータによって実施される方法。
【請求項１４】
前記複数の第１の整数要素および前記複数の第２の整数要素は、それぞれ８ビットである、請求項１３に記載のコンピュータによって実施される方法。
【請求項１５】
装置であって、
プロセッサまたはプログラマブル回路と、
共同で命令を含む１つまたは複数のコンピュータ可読媒体とを備え、前記命令は、前記プロセッサまたは前記プログラマブル回路によって実行されるとき、前記プロセッサまたは前記プログラマブル回路に、
第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、
第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、
前記第１の行列と前記第２の行列との積である第３の行列を計算することと、
前記第３の行列の各行列要素を、前記第１の整数と前記第２の整数との積の計算における部分積として出力することと
を行わせる、装置。
【請求項１６】
前記第１の行列に前記代入するおよび前記第２の行列に前記代入する間、前記第１の行列および前記第２の行列の各行列要素は、前記第１の行列に含まれる各第１の整数要素と、前記第２の行列に含まれる各第２の整数要素との前記積の中の、前記第１の整数と前記第２の整数との前記積において同じ桁位置に対応する各積が、前記第３の行列の同じ行列要素に対応するように配置される、請求項１５に記載の装置。
【請求項１７】
前記命令は、前記プロセッサまたは前記プログラマブル回路によって実行されるとき、前記プロセッサまたは前記プログラマブル回路に、
前記第２の行列に前記代入する間、前記複数の第２の整数要素から前記１つまたは複数の第２の整数要素を一時に１つ、前記第２の行列に順次に代入するプロセスを、前記第１の行列に前記代入する間、前記複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットが、前記第１の行列に代入されるたびに繰り返すことと、
前記１つまたは複数の第２の整数要素が、前記第２の行列に代入されるたびに、前記第３の行列の計算を行い、前記部分積を出力することと、
各出力された部分積に基づいて、前記第１の整数と前記第２の整数との前記積を計算することと
を行わせる、請求項１５に記載の装置。
【請求項１８】
装置であって、
第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入する、第１の行列代入部と、
第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入する、第２の行列代入部と、
前記第１の行列と前記第２の行列との積である第３の行列を計算する、第３の行列計算部と、
前記第３の行列の各行列要素を、前記第１の整数と前記第２の整数との積の計算における部分積として出力する、部分積出力部と
を備える装置。
【請求項１９】
前記第１の行列に前記代入するおよび前記第２の行列に前記代入する間、前記第１の行列および前記第２の行列の各行列要素は、前記第１の行列に含まれる各第１の整数要素と、前記第２の行列に含まれる各第２の整数要素との前記積の中の、前記第１の整数と前記第２の整数との前記積において同じ桁位置に対応する各積が、前記第３の行列の同じ行列要素に対応するように配置される、請求項１８に記載の装置。
【請求項２０】
前記第２の行列代入部は、前記第２の行列に前記代入する間、前記複数の第２の整数要素から前記１つまたは複数の第２の整数要素を一時に１つ、前記第２の行列に順次に代入するプロセスを、前記第１の行列代入部が、前記複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットを、前記第１の行列に代入するたびに繰り返し、
前記第３の行列計算部および前記部分積出力部は、前記第３の行列の計算および前記部分積の出力を、前記第２の行列代入部によって、前記１つまたは複数の第２の整数要素が、前記第２の行列に代入されるたびに行い、
前記装置は、各出力された部分積に基づいて、前記第１の整数と前記第２の整数との前記積を計算する整数積計算部を備える、
請求項１８に記載の装置。
【請求項２１】
プロセッサまたはプログラマブル回路に動作を行わせるように、前記プロセッサまたは前記プログラマブル回路によって実行可能なプログラム命令を共同で記憶する１つまたは複数のコンピュータ可読記憶媒体を含むコンピュータ・プログラム製品であって、前記動作は、
第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、
第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、
前記第１の行列と前記第２の行列との積である第３の行列を計算することと、
前記第３の行列の各行列要素を、前記第１の整数と前記第２の整数との積の計算における部分積として出力することと
を含むコンピュータ・プログラム製品。
【請求項２２】
前記第１の行列に前記代入するおよび前記第２の行列に前記代入する間、前記第１の行列および前記第２の行列の各行列要素は、前記第１の行列に含まれる各第１の整数要素と、前記第２の行列に含まれる各第２の整数要素との前記積の中の、前記第１の整数と前記第２の整数との前記積において同じ桁位置に対応する各積が、前記第３の行列の同じ行列要素に対応するように配置される、請求項２１に記載のコンピュータ・プログラム製品。
【請求項２３】
前記命令は、前記プロセッサまたは前記プログラマブル回路によって実行されるとき、前記プロセッサまたは前記プログラマブル回路に、
前記第２の行列に前記代入する間、前記複数の第２の整数要素から前記１つまたは複数の第２の整数要素を一時に１つ、前記第２の行列に順次に代入するプロセスを、前記第１の行列に前記代入する間、前記複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットが、前記第１の行列に代入されるたびに繰り返すことと、
前記１つまたは複数の第２の整数要素が、前記第２の行列に代入されるたびに、前記第３の行列の計算を行い、前記部分積を出力することと、
各出力された部分積に基づいて、前記第１の整数と前記第２の整数との前記積を計算することと
を行わせる、請求項２１に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、乗算に関し、より詳細には、１６ビット浮動小数点乗算器を用いた行列−行列の乗算による複数精度整数乗算器に関する。
【背景技術】
【０００２】
行列演算を用いて整数を乗算するための従来の方法が提案されている。しかし、近年において、乗算がより速やかにおよびより高精度で行われることに対する要求が生じている。
【発明の概要】
【０００３】
本発明の第１の態様によれば、コンピュータによって実施される方法であって、第１の整数を表す第１の整数データを桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、第２の整数を表す第２の整数データを桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、第１の行列と第２の行列との積である第３の行列を計算することと、第３の行列の各行列要素を、第１の整数と第２の整数との積の計算における部分積として出力することとを含む、方法がもたらされる。このようにして、計算精度および計算速度を向上させることが可能である。
【０００４】
第１の行列に代入するおよび第２の行列に代入する間、第１の行列および第２の行列の各行列要素は、第１の行列に含まれる各第１の整数要素と、第２の行列に含まれる各第２の整数要素との積の中の、第１の整数と第２の整数との積において同じ桁位置に対応する各積が、第３の行列の同じ行列要素に対応するように配置され得る。このようにして、計算された部分積を整列させることが可能であり、従って正しい乗算結果を計算することが可能である。
【０００５】
本発明の他の態様によれば、装置であって、プロセッサまたはプログラマブル回路と、共同で命令を含む１つまたは複数のコンピュータ可読媒体とを備え、命令は、プロセッサまたはプログラマブル回路によって実行されるとき、プロセッサまたはプログラマブル回路に、第１の整数を表す第１の整数データを桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、第２の整数を表す第２の整数データを桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、第１の行列と第２の行列との積である第３の行列を計算することと、第３の行列の各行列要素を、第１の整数と第２の整数との積の計算における部分積として出力することとを行わせる、装置がもたらされる。このようにして、計算精度および計算速度を向上させることが可能である。
【０００６】
本発明のさらに他の態様によれば、装置であって、第１の整数を表す第１の整数データを桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入する、第１の行列代入部と、第２の整数を表す第２の整数データを桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入する、第２の行列代入部と、第１の行列と第２の行列との積である第３の行列を計算する、第３の行列計算部と、第３の行列の各行列要素を、第１の整数と第２の整数との積の計算における部分積として出力する、部分積出力部とを備える装置がもたらされる。このようにして、計算精度および計算速度を向上させることが可能である。
【０００７】
本発明のさらに他の態様によれば、プロセッサまたはプログラマブル回路に動作を行わせるように、プロセッサまたはプログラマブル回路によって実行可能なプログラム命令を共同で記憶する１つまたは複数のコンピュータ可読記憶媒体を含むコンピュータ・プログラム製品であって、動作は、第１の整数を表す第１の整数データを桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、第２の整数を表す第２の整数データを桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、第１の行列と第２の行列との積である第３の行列を計算することと、第３の行列の各行列要素を、第１の整数と第２の整数との積の計算における部分積として出力することとを含むコンピュータ・プログラム製品がもたらされる。このようにして、計算精度および計算速度を向上させることが可能である。
【０００８】
これらならびに他の特徴および利点は、添付の図面に関連して読まれる、それらの例示的実施形態の以下の詳細な説明から明らかになるであろう。
【０００９】
以下の説明は、以下の図を参照して好ましい実施形態の詳細をもたらす。
【図面の簡単な説明】
【００１０】
【図１】例示的実施形態による装置を示す図である。
【図２】第３の行列計算部を示す図である。
【図３】行列要素を記憶するレジスタを示す図である。
【図４】例示的実施形態による装置の動作を示す図である。
【図５】第１の整数データ（Ｂ）および第２の整数データ（Ａ）を示す図である。
【図６】互いに乗算される第１の行列および第２の行列を示す図である。
【図７】部分積の加算を示す図である。
【図８】本発明の実施形態によるコンピュータの例示的ハードウェア構成を示す図である。
【発明を実施するための形態】
【００１１】
本明細書の以下では、本発明のいくつかの実施形態が述べられる。実施形態は「特許請求の範囲」による本発明を限定するものではなく、実施形態において述べられる特徴のすべての組合せは、本発明の態様によってもたらされる手段に対して、必ずしも本質的ではない。
【００１２】
図１は、本実施形態による装置１を示す。装置１は、行列演算を行うことによって２つの整数の積を出力し、例えば、コンピュータ支援設計（ＣＡＤ）、コンピュータ支援エンジニアリング（ＣＡＥ）、財務シミュレーション、または暗号化あるいはその組合せなどの、数値計算を行う。装置１は、メモリ２、行列代入部３、第１の行列記憶部４、第２の行列記憶部５、第３の行列計算部６、第４の行列記憶部７、部分積出力部８、および整数積計算部９を含む。装置１はプロセッサとすることができ、および例えば、グラフィック・プロセッサ・ユニット（ＧＰＵ）でよい。
【００１３】
メモリ２は、乗算演算の対象である整数を表す少なくとも１つの整数データを記憶する。例えば、メモリ２は、第１の整数を表す第１の整数データと、第２の整数を表す第２の整数データとを記憶することができる。
【００１４】
メモリ２は、乗算結果を表す少なくとも１つの整数データを記憶することができる。例えば、メモリ２は、第１の整数と第２の整数との積である第１２の整数を表す第１２の整数データを記憶することができる。
【００１５】
ここで、第１の整数および第２の整数は、互いに同じ値とすることができ、または異なる値でよい。第１の整数および第２の整数は、整数形式で表されることができ、または浮動小数点形式において仮数部によって表され、指数部に関連付けられ得る。本実施形態での例として、第１の整数データ、第２の整数データ、および第１２の整数データは、２値データであり、８ビット、１６ビット、３２ビット、または６４ビットなどの任意の長さを有する。
【００１６】
行列代入部３は、メモリ２から読み出された整数データを桁方向に分割することによって、１つまたは複数の整数要素を生成し、これらの整数要素を行列に代入する。整数要素は、それぞれ１つまたは複数の桁を有することができる。整数データを桁方向に分割することは、整数データを桁方向に降順または昇順で、１つまたは複数の基本桁数に分割することを意味することができる。行列代入部３は、第１の行列代入部３１と第２の行列代入部３２とを含む。
【００１７】
第１の行列代入部３１は、第１の整数を表す第１の整数データを桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、第１の行列記憶部４に代入する。本実施形態での例として、Ｎは２であるが、代わりに他の数、例えば、１６とすることができる。第２の行列代入部３２は、第２の整数を表す第２の整数データを桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列記憶部５の少なくとも１つの行列要素に代入する。例えば、第２の行列代入部３２は、１つから４つの第２の整数要素を、２つの行と２つの列とを有する第２の行列記憶部５に代入することができる。各第２の整数要素は、各第１の整数要素と同じサイズとすることができ、例えば、８ビットとすることができる。
【００１８】
第１の行列記憶部４および第２の行列記憶部５は、それぞれがＮ個の行とＮ個の列（例えば２つの行と２つの列）を有する第１の行列および第２の行列を記憶する。第１の行列記憶部４および第２の行列記憶部５は、行列配置を有するレジスタを含むことができる。第１の行列記憶部４および第２の行列記憶部５のレジスタは、同じサイズのデータを記憶することができる。
【００１９】
第３の行列計算部６は、第１の行列と第２の行列とを掛け合わせることによって、第３の行列を計算する。装置１がプロセッサである場合、第３の行列の計算は１つのコマンドに従って行われ得る。第３の行列計算部６は、第３の行列を第４の行列記憶部７に供給することができる。
【００２０】
第４の行列記憶部７は、第３の行列を積算することによって得られる第４の行列を記憶する。第４の行列は、第３の行列が計算されるたびに、第３の行列の各行列要素を、同じ桁位置に対応する計算された部分積の和に加算することによって得られる行列とすることができる。第４の行列記憶部７は、行列配置を有するレジスタを含むことができる。第４の行列記憶部７のレジスタは、第１の行列記憶部４および第２の行列記憶部５に記憶されるデータより大きなサイズを有するデータを記憶することができる。
【００２１】
部分積出力部８は、第３の行列の各行列要素を、第１の整数と第２の整数との積の計算における部分積として出力する。本実施形態での例として、部分積出力部８は、第３の行列を積算することによって得られる第４の行列の各行列要素を、第１の整数と第２の整数との積の計算における対応する桁位置に対する、第１の整数要素と第２の整数要素との部分積の和として、抽出することができる。部分積出力部８は、各抽出された行列要素を整数積計算部９に供給することができる。
【００２２】
整数積計算部９は、第１の整数と第２の整数との積を計算する。整数積計算部９は、部分積配置部９１と加算部９２とを含むことができる。
【００２３】
部分積配置部９１は、部分積の和から乗算結果を得るために、各部分積を対応する桁位置に配置する。例えば、部分積配置部９１は、部分積出力部８から供給される各部分積（例えば本実施形態における部分積の和）を、第１の整数と第２の整数との積内のこの部分積に対応する桁位置に配置する。
【００２４】
加算部９２は、第１２の整数を、各部分積の和を計算することによって得られる乗算結果として取得する。加算部９２は、メモリ２に第１２の整数を記憶することができる。
【００２５】
上述の装置１を用いて、第１の行列と第２の行列との積である第３の行列が計算され、第３の行列の各行列要素は、第１の整数と第２の整数との積の計算における部分積として出力され、従って部分積を計算することによって乗算を行うことが可能である。それに応じて、計算を細分化しながら乗算を行うことが可能であるので、計算桁数に余裕をもたせながら、部分積を計算することによって、情報脱落などによって生じる計算誤差を低減し、計算精度を向上させることが可能である。さらに、乗算は行列計算に従って行われるので、計算速度を向上させることが可能である。
【００２６】
図２は、第１の行列記憶部４、第２の行列記憶部５、第３の行列計算部６、および第４の行列記憶部７を示す。本実施形態での例として、第３の行列計算部６はテンソル計算ユニットであり、第１の行列記憶部４および第２の行列記憶部５に記憶された、それぞれＮ個の行とＮ個の列（例えば２つの行と２つの列）を有する第１の行列Ｐおよび第２の行列Ｑから、第３の行列ＰＱを計算することができる。さらに、第３の行列計算部６は、演算Ｓ＝Ｐ×Ｑ＋Ｒに従って、新たに計算された第３の行列ＰＱと、第４の行列記憶部７の、第３の計算された行列ＰＱの和である第４の行列Ｒとを、足し合わせることによって新たな第４の行列Ｓを計算し、第４の行列記憶部７の第４の行列Ｒを更新することができる。
【００２７】
図３は、行列要素を記憶するレジスタを示す。本実施形態での例として、第１の行列Ｐおよび第２の行列Ｑの行列要素を記憶するレジスタは、１ビット符号部と、５ビット指数部と、１０ビット仮数部とを有する半精度浮動小数点形式（ＦＰ１６）で各行列要素を記憶することができる。第４の行列ＲおよびＳの行列要素を記憶するレジスタは、１ビット符号部と、８ビット指数部と、２３ビット仮数部とを有する単精度浮動小数点形式（ＦＰ３２）で各行列要素を記憶することができる。例として、各整数要素は、レジスタの仮数部に記憶されることができ、またはレジスタの仮数部および符号部に記憶され得る。
【００２８】
図４は、本実施形態による装置１の動作を示す。ステップＳ１１からＳ２５のプロセスを行うことによって、装置１は、第１の整数に第２の整数を乗算して、積として第１２の整数を計算する。装置１は、第１の整数および第２の整数がオペレータによって指定され、乗算命令が入力されたとき、動作を開始する。動作が開始するとき、第４の行列記憶部７内の第４の行列は０にリセットされ得る。
【００２９】
最初に、ステップＳ１１で、第１の行列代入部３１は、第１の整数データを桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ（例えば４）個の第１の整数要素を、第１の行列記憶部４内の第１の行列に代入する。次に、ステップＳ１３で、第２の行列代入部３２は、第２の整数データを桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、第２の行列記憶部５内の第２の行列の少なくとも１つの行列要素に代入する。
【００３０】
第１の行列への代入を行うとき、第１の行列代入部３１は、メモリ２から第１の整数データを読み出し、この第１の整数データを桁方向に分割することによって、複数の第１の整数要素を生成することができる。例として、第１の行列代入部３１は、第１の整数データを８桁、すなわち８ビットの単位に分割することによって、複数の第１の整数要素を生成することができる。
【００３１】
同様に、第２の行列への代入を行うとき、第２の行列代入部３２は、メモリ２から第２の整数データを読み出し、桁方向にこの第２の整数データを分割することによって、複数の第２の整数要素を生成することができる。例として、第２の行列代入部３２は、第２の整数データを８桁、すなわち８ビットの単位に分割することによって、複数の第２の整数要素を生成することができる。
【００３２】
第１の行列代入部３１および第２の行列代入部３２は、第１の行列および第２の行列の各行列要素を第１の行列および第２の行列に、第１の行列に含まれる各第１の整数要素と、第２の行列に含まれる各第２の整数要素との複数の積の中の、第１２の整数での同じ桁位置に対応する積が、第３の行列の同じ行列要素に対応して配置されるように、代入することができる。このようにして、計算された部分積の桁を整列させることが可能であり、従って正しい乗算結果を計算することが可能である。
【００３３】
例えば、第１の行列代入部３１は、第１の整数データにおいて桁方向に連続したＮ×Ｎ個の第１の整数要素を、第１の行列に代入することができる。この代わりにまたはこれに加えて、第２の行列代入部３２は、第２の整数データにおいて桁方向に連続した１つまたは複数の第２の整数要素を、第２の行列に代入することができる。このようにして、第１の行列および第２の行列への整数要素の代入を簡略化することが可能である。
【００３４】
さらに、第１の行列への代入を行うとき、第１の行列代入部３１は、Ｎ×Ｎ（例えば４）個の第１の整数要素の中の、Ｎ（例えば２）個の連続した第１の整数要素を、第１の行列の各行に代入することができる。代入の順序は、第１の整数データにおける桁方向で昇順または降順とすることができる。第２の行列への代入を行うとき、第２の行列代入部３２は、複数の第２の整数要素の中の、Ｎ（例えば２）個の連続した第２の整数要素を、第２の行列の各列に代入することができる。代入の順序は、第２の整数データの桁方向において、第１の行列に対するＮ個の第１の整数要素の代入順序と反対とすることができる。整数要素を記憶する時間的順序がそれらを読み出す時間的順序と同じである、すなわち、整数要素が低位側から読み出される場合、第１の行列代入部３１は、第１の整数要素を、第１の行列の各行に対して、読み出しの時間的順序と逆の順序でそれらが配置されるように、代入することができ、第２の行列代入部３２は、第２の整数要素を、第２の行列の各列に対して、読み出しの時間的順序でそれらが配置されるように、代入することができる。第１の整数データおよび第２の整数データがリトル・エンディアン形式で記憶される場合、すなわち、より下位のビットがより低く位置付けされる場合、第１の行列代入部３１は、第１の行列の各行に対して桁方向に降順で、第１の整数要素を代入することができ、第２の行列代入部３２は、第２の行列の各列に対して桁方向に昇順で、第２の整数要素を代入することができる。第１の整数データおよび第２の整数データがビッグ・エンディアン形式で記憶される場合、すなわち、より下位のビットがより高く位置付けされる場合、第１の行列代入部３１および第２の行列代入部３２はそれぞれ、反対の順序で整数要素を代入することができる。
【００３５】
さらに、第１の行列への代入を行うとき、第１の行列代入部３１は、Ｎ×Ｎ（例えば４）個の第１の整数要素を、第１の行列の各行列要素に列優先順で代入することができる。第２の行列への代入を行うとき、第２の行列代入部３２は、Ｎ（例えば２）個の連続した第２の整数要素を、第２の行列の第１の行に、第１の行列内の第１の整数要素の代入順序と同じ順序で代入することができる（すなわち桁方向に昇順または降順）。さらに、第２の行列代入部３２は、Ｎ個の第２の整数要素を、第２の行列の第２および後続の行に、第２の整数データ内のＮ個の第２の整数要素を一時に１つの整数要素だけシフトしながら、代入することができる。例えば、第２の行列代入部３２は、第２の行列の各列内の第２の整数要素の代入順序が、第１の行列の各行への第１の整数要素の代入順序と反対になるように、第２の整数要素をシフトすることができる。例として、第１の整数データおよび第２の整数データがリトル・エンディアン形式で記憶される場合、第１の行列代入部３１は、Ｎ×Ｎ個の第１の整数要素を第１の行列に、行優先および桁方向に降順で代入することができ、第２の行列代入部３２は、Ｎ個の第２の整数要素（例えば要素（ａ１）、・・・、要素（ａＮ）、下付き文字は整数要素の順序を示す）を第２の行列の第１の行に、桁方向に降順で代入することができる（例えば要素（ａＮ）、・・・、要素（ａ１）の順に）。さらに、第２の行列代入部３２は、Ｎ個の整数要素（例えば要素（ａ１）、・・・、要素（ａＮ））を、第２の行において１つの整数要素だけより高位の桁側に向かって、シフトすることによって得られるＮ個の整数要素（例えば要素（ａＮ＋１）、・・・、要素（ａ２））を、代入することができる。この後、第２の行列の各列内の第２の整数要素は、行の数だけより高位の桁側に向かってシフトされたＮ個の整数要素を、各行に代入することによって、昇順に設定される。第２の行列代入部３２は、シフトの結果として、代入されることになる整数要素が第２の整数データ内に存在しない場合、０を代入することができる。
【００３６】
次に、ステップＳ１５で、第３の行列計算部６は、第１の行列と第２の行列との積である、第３の行列を計算する。本実施形態での例として、第３の行列計算部６は、計算された第３の行列を、第４の行列記憶部７内の第４の行列に加算することができる。第４の行列は、Ｎ個の行とＮ個の列とを有することができる。
【００３７】
次に、ステップＳ１７で、部分積出力部８は、第３の行列の各行列要素を、第１の整数と第２の整数との積の計算における部分積として出力する。本実施形態での例として、第３の行列は、Ｎ個の行とＮ個の列とを有する第４の行列に加算され、従って部分積出力部８は、第４の行列の第１の行または最後の行内の各行列要素を、第１の整数と第２の整数との積における対応する桁位置での部分積の和として、抽出し、残りの行を１つの行だけ、抽出された行に向かってシフトすることができる。例えば、部分積出力部８は、第１の整数要素が、桁方向に降順で第１の行列に代入される場合、第４の行列から最後の行を抽出することができ、第１の整数要素が、桁方向に昇順で第１の行列に代入される場合、第４の行列から第１の行を抽出することができる。このようにして、それに対して第１の整数と第２の整数との積内に加算されることになるさらなる部分積が存在しない部分積が、第４の行列から抽出される。部分積出力部８は、第４の行列内のシフトの結果として空のスペースが生じる各行列要素に対して、０を設定することができる。
【００３８】
次に、ステップＳ１９で、第２の行列代入部３２は、第２の整数内の整数要素のすべてが第２の行列に代入されたかどうかを判定する。判定結果が否定（Ｓ１９：いいえ）である場合、第２の行列代入部３２は処理をステップＳ１３に移動させ、判定結果が肯定（Ｓ１９：はい）である場合、第２の行列代入部３２は処理をステップＳ２１に移動させる。ステップＳ１３の処理が繰り返されることになる場合、第２の行列代入部３２は、第２の整数データを桁方向に分割することによって得られる複数の第２の整数要素の中の、未だ代入されていない１つまたは複数の第２の整数要素を、第２の行列に代入することができる。このようにして、第１の行列に代入されたＮ×Ｎ個の第１の整数要素と、各第２の整数要素との部分積が計算される。第２の行列代入部３２は、第２の行列の一部分内の行列要素に代入されることになる整数要素が、第２の整数データ内に存在しない場合、０を代入することができる。
【００３９】
ステップＳ２１で、第１の行列代入部３１は、第１の整数内の整数要素のすべてが第１の行列に代入されたかどうかを判定する。判定結果が否定（Ｓ２１：いいえ）である場合、第１の行列代入部３１は処理をステップＳ１１に移動させ、判定結果が肯定（Ｓ２１：はい）である場合、第１の行列代入部３１は処理をステップＳ２３に移動させる。ステップＳ１１の処理が繰り返されることになる場合、第１の行列代入部３１は、第１の整数データを桁方向に分割することによって得られる複数の第１の整数要素の中の、未だ代入されていないＮ×Ｎ個の第１の整数要素を、第１の行列に代入することができる。このようにして、各第１の整数要素と各第２の整数要素との部分積が計算される。第１の行列代入部３１は、第１の行列の一部分内の行列要素に代入されることになる整数要素が、第１の整数データ内に存在しない場合、０を代入することができる。上述のステップＳ１１からＳ２１の処理を行うことによって、一時に複数の第２の整数要素の中の１つまたは複数の第２の整数要素を、第２の行列に順次に代入するプロセスは、複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットが、第１の行列に代入されるたびに繰り返される。さらに、第３の行列の計算、および部分積の出力は、第２の行列への代入が行われるたびに行われる。
【００４０】
ステップＳ２３で、部分積配置部９１は、各部分積を、第１の整数と第２の整数との積における対応する桁位置に配置する。例えば、部分積配置部９１は、第１の整数と第２の整数との積における各部分積が対応する桁位置において加算されるように、桁位置を調整し、各部分積を加算部９２に供給することができる。例として、ステップＳ１７で部分積配置部９１は、あらゆる基準の数の桁（例えば本実施形態では８桁）ごとに対して、各行列要素出力に対する桁位置をシフトすることができる。
【００４１】
次に、ステップＳ２５で、加算部９２は、第１の整数と第２の整数との積である、第１２の整数を、各部分積の和を計算することによって計算する。このようにして、第１２の整数は、各出力された部分積に基づいて計算される。部分積において桁あふれがある場合、加算部９２はこの桁あふれをより高位の桁に加算することができる。
【００４２】
上述のプロセスを用いて、Ｎ×Ｎ個の第１の整数要素の中の、Ｎ個の連続した第１の整数要素は、第１の行列の各行に、桁方向に昇順または降順で代入され、複数の第２の整数要素の中の、Ｎ個の連続した第２の整数要素は、第２の行列の各列に、第１の整数要素の代入順序と反対の順序で代入される。それに応じて、計算された部分積の桁を整列させることが可能であるので、正しい乗算結果を計算することが可能である。
【００４３】
さらに、部分積の桁あふれはより高位の桁に加算されるので、計算精度を向上させることが可能である。
【００４４】
以下は、乗算の詳細な例を述べる。
【００４５】
図５は、第１の整数データ（Ｂ）および第２の整数データ（Ａ）を示す。本実施形態での例として、第１の整数データ（Ｂ）および第２の整数データ（Ａ）は、それぞれ６４ビット２値データである。第１の整数データ（Ｂ）は、それぞれが８ビットを有する８個の第１の整数要素（ｂ０）〜（ｂ７）に分割され得る。第２の整数データ（Ａ）は、それぞれが８ビットを有する８個の第２の整数要素（ａ０）〜（ａ７）に分割され得る。ここで下付き文字は、整数要素の順序を示し、より小さな値はより低位の桁位置を示す。
【００４６】
図６は、互いに乗算される第１の行列および第２の行列を示す。本実施形態での例として、複数の第１の整数要素（ｂ０）〜（ｂ７）は、一時に４つが、２つの列と２つの行とを有する第１の行列に、行優先降順で代入され得る。さらに、１つまたは複数の第２の整数要素は、２つの行と２つの列とを有する第２の行列に、各列において２つの第２の整数要素が昇順で、各行において２つの第２の整数要素が降順であるように、代入され得る。第１の行において第２の整数要素より１つの整数要素だけより高位の桁位置に向かってシフトされた第２の整数要素は、第２の行列の第２の行に代入され得る。整数要素が、上述のような順序で、行方向または列方向あるいはその両方に整列される限り、第１の行列および第２の行列は、より低位の桁位置の整数要素を含む行列が最初に生成されるように、生成され得る。言い換えれば、第１の行列は図６の下部から順に生成されることができ、第２の行列は図６の右側から順に生成され得る。
【００４７】
図７は、部分積の加算を示す。図面において、破線で囲まれた部分Ｘ１およびＸ２は、図６に示される第１の行列Ｍ１と第２の行列Ｍ２１との乗算結果を示す。これらの部分において、部分Ｘ１の行列要素は、第３の行列内、および従ってまた第４の行列内の最後の行内の行列要素であり、従って対応する桁位置における部分積の和として抽出される。抽出の後、部分Ｘ２の行列要素は、第４の行列内の最後の行へシフトされる。
【００４８】
破線で囲まれた部分Ｙ１およびＹ２は、図６に示される第１の行列Ｍ１と第２の行列Ｍ２２との乗算結果を示す。これらの部分において、部分Ｙ１の行列要素は、第３の行列内の最後の行内の行列要素であり、この行列要素が第４の行列内の最後の行内の行列要素（これはここで部分Ｘ２の行列要素である）に加算された後、結果は対応するビット位置での部分積の和として抽出される。
【００４９】
この後、同じやり方で、第１の整数要素ｂ０〜ｂ３と、第２の整数要素ａ０〜ａ７との部分積が計算され、さらに、第１の整数要素ｂ４〜ｂ７と、第２の整数要素ａ０〜ａ７との部分積が計算される。次いで、各部分積を対応する桁位置に配置し、部分積を足し合わせることによって、第１２の整数が積として計算される。
【００５０】
上記の本実施形態において、装置１は、ＧＰＵなどのプロセッサであるものとして述べられるが、このプロセッサ（第１のプロセッサと呼ばれる）に加えて、Ｎ個の行とＮ個の列とを有する行列の積を計算するためのコマンドを含まないＣＰＵなどの他の別個のプロセッサ（第２のプロセッサと呼ばれる）が含められ得る。この場合、装置１は、第１の整数および第２の整数のサイズに従って、それが第１のプロセッサを用いて第１の整数と第２の整数との積を計算するか、それとも第２のプロセッサを用いるかを切り換えることができる。例えば、第１の整数および第２の整数のサイズが基準サイズ（例えば８１９２ビットから１６３８４ビットまでの範囲内のサイズ）より大きい場合、装置１は、第２のプロセッサを用いて積を計算することができる。代わりに、装置１は、第１の整数および第２の整数のサイズが基準サイズより小さい場合、第２のプロセッサを用いて積を計算することができる。このようにして、整数のサイズにより、計算速度が第１のプロセッサを用いるより第２のプロセッサを用いた方が大きい場合、計算の速度を向上させることが可能である。
【００５１】
さらに、上記の説明において、装置１は、第１の整数と第２の整数との積を、第１の整数を分割することによって得られる複数の第１の整数要素と、第２の整数を分割することによって得られる複数の第２の整数要素とを乗算することによって計算するが、代わりの他の技法を用いて積を計算することができる。例えば、装置１は、２つの整数（第３の整数および第４の整数と呼ばれる）の積を、カラツバ（Karatsuba）アルゴリズムを用いて計算することができる。例として、装置１は、第３の整数（Ｃ）の上半分（Ｃｈ）を第１の整数として設定し、第４の整数（Ｄ）の上半分（Ｄｈ）第２の整数として設定し、上述の実施形態と同じやり方で第１の整数と第２の整数との積を計算することによって、第１の積（Ｃｈ・Ｄｈ）を計算することができる。さらに、装置１は、第３の整数（Ｃ）の下半分（Ｃｌ）を第１の整数として設定し、第４の整数（Ｄ）の下半分（Ｄｌ）を第２の整数として設定し、第１の整数と第２の整数との積を計算することによって、第２の積（Ｃｌ・Ｄｌ）を計算することができる。装置１は、第３の整数（Ｃ）の上半分と下半分との和（Ｃｈ＋Ｃｌ）を第１の整数として設定し、第４の整数（Ｄ）の上半分と下半分との和（Ｄｈ＋Ｄｌ）を第２の整数として設定し、第１の整数と第２の整数との積を計算することによって、第３の積（Ｃｈ＋Ｃｌ）・（Ｄｈ＋Ｄｌ）を計算することができる。装置１は次いで、第１の積、第２の積、および第３の積に基づいて、第３の整数および第４の整数を計算することができる。例として、分割の数がｚである場合、装置１は、第３の整数と第４の整数との積Ｅを、式Ｅ＝（Ｃｈ・Ｄｈ）ｚ２＋｛（Ｃｈ＋Ｃｌ）・（Ｄｈ＋Ｄｌ）−（Ｃｈ・Ｄｈ）−（Ｃｌ・Ｄｌ）｝ｚ＋（Ｃｌ・Ｄｌ）を用いて計算することができる。このようにして、整数要素の間の乗算の数を低減し、計算速度を向上させることが可能である。
【００５２】
上記の説明において、装置１はメモリ２と整数積計算部９とを含むが、これらの構成要素の少なくとも１つは装置１から省かれ得る。装置１がメモリ２を含まない場合、行列代入部３は、第１の整数データおよび第２の整数データを装置１の外側から得ることができる。装置１が整数積計算部９を含まない場合、整数積計算部９は、装置１の外側に接続されることができ、装置１は部分積を整数積計算部９に供給することができる。
【００５３】
上記は第１の行列および第２の行列への整数要素の代入の１つの実施形態を述べるが、第３の行列の行列要素から部分積を抽出し、これらの部分積を対応する桁位置に配置することが可能である限り、他の実施形態が用いられ得る。例えば、整数要素は、第１の行列または第２の行列あるいはその両方に、桁方向において連続しない順序で代入されることができ、または列もしくは行の順序を変えながら代入され得る。さらに、上記の説明において、行列乗算における被乗数は第１の行列であり、乗数は第２の行列であるがこれらの役割は逆にされ得る。
【００５４】
図８は、本発明の実施形態による、前述の動作を行うように構成されたコンピュータの例示的ハードウェア構成を示す。コンピュータ７００にインストールされたプログラムは、コンピュータ７００に、本発明の実施形態の装置、またはそれらの１つまたは複数の部分（モジュール、構成要素、要素などを含む）に、関連付けられた動作として機能させるまたはそれらを行わせること、またはコンピュータ７００に本発明の実施形態のプロセスまたはそれらのステップを行わせること、あるいはその両方ができる。このようなプログラムは、本明細書で述べられるフローチャートおよびブロック図のいくつかまたはすべてのブロックに関連付けられたいくつかの動作をコンピュータ７００に行わせるように、ＣＰＵ７００−１２によって実行され得る。
【００５５】
本実施形態によるコンピュータ７００は、ＣＰＵ７００−１２、ＲＡＭ７００−１４、グラフィックス・コントローラ７００−１６、およびディスプレイ・デバイス７００−１８を含み、これらはホスト・コントローラ７００−１０によって相互に接続される。コンピュータ７００はまた、通信インターフェース７００−２２、ハード・ディスク・ドライブ７００−２４、ＤＶＤ−ＲＯＭドライブ７００−２６、およびＩＣカード・ドライブなどの入出力ユニットを含み、これらは入出力コントローラ７００−２０を通じてホスト・コントローラ７００−１０に接続される。コンピュータはまた、ＲＯＭ７００−３０およびキーボード７００−４２などのレガシー入出力ユニットを含み、これらは入出力チップ７００−４０を通して入出力コントローラ７００−２０に接続される。
【００５６】
ＣＰＵ７００−１２は、ＲＯＭ７００−３０およびＲＡＭ７００−１４に記憶されたプログラムに従って動作し、それによって各ユニットを制御する。グラフィックス・コントローラ７００−１６は、ＲＡＭ７００−１４内またはそれ自体にもたらされたフレーム・バッファなどに、ＣＰＵ７００−１２によって生成された画像データを取得し、画像データがディスプレイ・デバイス７００−１８に表示されるようにする。グラフィックス・コントローラ７００−１６は１つまたは複数のＧＰＵを含むことができる。
【００５７】
通信インターフェース７００−２２は、ネットワーク７００−５０を通じて他の電子デバイスと通信する。ハード・ディスク・ドライブ７００−２４は、コンピュータ７００内でＣＰＵ７００−１２によって用いられるプログラムおよびデータを記憶する。ＤＶＤ−ＲＯＭドライブ７００−２６は、ＤＶＤ−ＲＯＭ７００−０１からプログラムまたはデータを読み出し、ＲＡＭ７００−１４を通じてプログラムまたはデータをハード・ディスク・ドライブ７００−２４にもたらす。ＩＣカード・ドライブは、ＩＣカードからプログラムおよびデータを読み出すこと、またはプログラムおよびデータをＩＣカードに書き込むことあるいはその両方を行う。
【００５８】
ＲＯＭ７００−３０はそれに、コンピュータ７００のハードウェアに応じて、活動化の時点でコンピュータ７００によって実行されるブート・プログラムなど、またはプログラムあるいはその両方を記憶する。入出力チップ７００−４０はまた、様々な入出力ユニットを、パラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポートなどを通じて、入出力コントローラ７００−２０に接続することができる。
【００５９】
プログラムは、ＤＶＤ−ＲＯＭ７００−０１またはＩＣカードなどのコンピュータ可読媒体によってもたらされる。プログラムは、コンピュータ可読媒体から読み出され、これらもコンピュータ可読媒体の例であるハード・ディスク・ドライブ７００−２４、ＲＡＭ７００−１４、またはＲＯＭ７００−３０にインストールされ、ＣＰＵ７００−１２によって実行される。これらのプログラムにおいて記述された情報処理はコンピュータ７００に読み込まれ、結果としてプログラムと、上記で述べられた様々なタイプのハードウェア・リソースとの間の協力を生じる。装置または方法は、コンピュータ７００の使用に従った、動作、または情報の処理を実現することによって構成される。
【００６０】
例えば、コンピュータ７００と外部デバイスとの間で通信が行われるとき、ＣＰＵ７００−１２は、通信プログラムにおいて記述された処理に基づいて、通信インターフェース７００−２２に対して通信処理を指示するように、ＲＡＭ７００−１４にロードされた通信プログラムを実行することができる。通信インターフェース７００−２２は、ＣＰＵ７００−１２の制御のもとで、ＲＡＭ７００−１４、ハード・ディスク・ドライブ７００−２４、ＤＶＤ−ＲＯＭ７００−０１、またはＩＣカードなど、記録媒体にもたらされた送信バッファリング領域に記憶された送信データを読み出し、読み出された送信データをネットワーク７００−５０に送信し、またはネットワーク７００−５０から受信された受信データを、記録媒体上にもたらされた受信バッファリング領域などに書き込む。
【００６１】
加えて、ＣＰＵ７００−１２は、ファイルまたはデータベースのすべてのまたは必要な部分がＲＡＭ７００−１４に読み込まれるようにすることができ、ファイルまたはデータベースはハード・ディスク・ドライブ７００−２４、ＤＶＤ−ＲＯＭドライブ７００−２６（ＤＶＤ−ＲＯＭ７００−０１）、ＩＣカードなどの外部記録媒体に記憶されており、ならびにＲＡＭ７００−１４上のデータに様々なタイプの処理を行うことができる。ＣＰＵ７００−１２は次いで、処理されたデータを外部記録媒体に書き戻すことができる。
【００６２】
様々なタイプのプログラム、データ、テーブル、およびデータベースなど、様々なタイプの情報が、情報処理を受けるように記録媒体に記憶され得る。ＣＰＵ７００−１２は、ＲＡＭ７００−１４から読み出されたデータに対して様々なタイプの処理を行うことができ、これは、本開示の全体にわたって述べられおよびプログラムの命令シーケンスによって指定されるような、様々なタイプの動作、情報の処理、条件判定、条件分岐、無条件分岐、情報の検索／置換などを含み、ならびに結果をＲＡＭ７００−１４に書き戻す。加えて、ＣＰＵ７００−１２は、記録媒体内の、ファイル、データベースなどにおける情報を検索することができる。例えば、それぞれが第２の属性の属性値に関連付けられた第１の属性の属性値を有する、複数のエントリが記録媒体に記憶されるとき、ＣＰＵ７００−１２は、複数のエントリの中で、それの第１の属性の属性値が指定された、条件に適合するエントリを検索することができ、エントリに記憶された第２の属性の属性値を読み出し、それによって所定の条件を満たす第１の属性に関連付けられた第２の属性の属性値を取得する。計算精度および速度に基づくデータベース検索は、データベース結果を見出すためにＣＰＵ７００−１２によって用いられるクロック・サイクルの数を低減することによって、コンピュータ７００の性能を改善する。コンピュータ７００のこの改善は、データベース検索に対するより速い応答として見られ得る。
【００６３】
上記で説明されたプログラムまたはソフトウェア・モジュールは、コンピュータ７００上のまたはその近くの、コンピュータ可読媒体に記憶され得る。加えて、専用通信ネットワークまたはインターネットに接続されたサーバ・システム内にもたらされた、ハード・ディスクまたはＲＡＭなどの記録媒体は、コンピュータ可読媒体として用いられることができ、それによってネットワークを通じてプログラムをコンピュータ７００に提供する。
【００６４】
本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはその組合せとすることができる。コンピュータ・プログラム製品は、本発明の態様をプロセッサに遂行させるためのコンピュータ可読プログラム命令を有する、（１つまたは複数の）コンピュータ可読記憶媒体を含むことができる。
【００６５】
コンピュータ可読記憶媒体は、命令実行デバイスによる使用のための命令を保持および記憶することができる、有形のデバイスとすることができる。コンピュータ可読記憶媒体は、例えば、非限定的に、電子的記憶デバイス、磁気記憶デバイス、光記憶デバイス、電磁的記憶デバイス、半導体記憶デバイス、または前述の任意の適切な組合せとすることができる。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル・バーサタイル・ディスク（ＤＶＤ）、メモリ・スティック、フロッピ・ディスク、パンチカードまたはその上に記録された命令を有する溝内の隆起構造などの機械的エンコード型デバイス、および前述の任意の適切な組合せを含む。本明細書で用いられる、コンピュータ可読記憶媒体とは、電波または他の自由に伝搬する電磁波、導波路または他の伝送媒体を通して伝搬する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、または線材を通して伝送される電気信号など、それ自体が一過性の信号であると解釈されるべきものではない。
【００６６】
本明細書で述べられるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、またはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、または無線ネットワークあるいはその組合せを通じて、外部コンピュータまたは外部記憶デバイスに、ダウンロードされ得る。ネットワークは、銅の伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはその組合せを備えることができる。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、コンピュータ可読プログラム命令を、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体における記憶のために転送する。
【００６７】
本発明の動作を遂行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存型命令、マイクロコード、ファームウェア命令、状態設定データ、あるいはＳｍａｌｌｔａｌｋ（登録商標）、Ｃ＋＋（登録商標）などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語または同様なプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組合せで書かれたソース・コードまたはオブジェクト・コードとすることができる。コンピュータ可読プログラム命令は、専らユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして部分的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上および部分的にリモート・コンピュータ上で、または専らリモート・コンピュータもしくはサーバ上で実行することができる。後者のシナリオにおいて、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくは広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを通して（例えば、インターネット・サービス・プロバイダを用いてインターネットを通して）、ユーザのコンピュータに接続されることができ、または外部コンピュータへの接続がなされ得る。いくつかの実施形態において、例えば、プログラマブル・ロジック回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を行うために、電子回路を個別化するようにコンピュータ可読プログラム命令の状態情報を利用することによって、コンピュータ可読プログラム命令を実行することができる。
【００６８】
本発明の態様は、本明細書において本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して述べられる。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方におけるブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されるであろう。
【００６９】
これらのコンピュータ可読プログラム命令は、コンピュータのプロセッサまたは他のプログラマブル・データ処理装置によって実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックにおいて指定された機能／働きを実施するための手段を作成するように、マシンを生み出すために汎用コンピュータ、専用コンピュータ、または他のプログラマブル・データ処理装置の、プロセッサに提供され得る。これらのコンピュータ可読プログラム命令は、また、命令が記憶されたコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方のブロックにおいて規定された機能／働きの態様を実施する命令を含んだ製品を備えるように、特定のやり方で機能するようにコンピュータ、プログラマブル・データ処理装置、または他のデバイスあるいはその組合せに指示することができるコンピュータ可読記憶媒体に記憶され得る。
【００７０】
コンピュータ可読プログラム命令はまた、コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方のブロックにおいて指定された機能／働きを実施するようにするべく、コンピュータによって実施されるプロセスを生み出すように、一連の動作ステップがコンピュータ、他のプログラマブル装置、または他のデバイス上で行われるようにさせるために、コンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされることができる。
【００７１】
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能性、および動作を示す。この関連において、フローチャートまたはブロック図内の各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能命令を備えるモジュール、セグメント、または命令の一部分を表すことができる。いくつかの代替的実装形態において、ブロック内に記された機能は、図に記されたものとは異なる順序で生じることができる。例えば、連続して示される２つのブロックは、実際は実質的に並行して実行されることができ、またはブロックは時には関わる機能性に応じて、逆の順序で実行され得る。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組合せは、指定された機能または働きを行う、または専用ハードウェアおよびコンピュータ命令の組合せを遂行する、専用ハードウェア・ベースのシステムによって実施され得ることが留意されるであろう。
【００７２】
本発明の実施形態が述べられたが、本発明の技術的範囲は、上述の実施形態に限定されない。当業者には、様々な変更および改良が上述の実施形態に加えられ得ることが明らかである。また「特許請求の範囲」から、このような変更および改良が加えられた実施形態は本発明の技術的範囲に含められ得ることが明らかである。
【００７３】
請求項、実施形態、または図に示される装置、システム、プログラム、および方法によって行われる各プロセスの動作、手順、ステップ、および段階は、「の前に（ｐｒｉｏｒ  ｔｏ）」、「の前に（ｂｅｆｏｒｅ）」などによって何らかの順序が示されない限り、および前のプロセスからの出力が後のプロセスで用いられない限り、任意の順序で行われ得る。請求項、実施形態、または図において、プロセス・フローが「最初に」または「次に」などの語句を用いて述べられた場合であっても、それは必ずしもプロセスがこの順序で行われなければならないことを意味しない。
【００７４】
上記から明らかにされたように、本発明の実施形態を用いて、計算精度および計算速度を向上させることが可能である。
【図１】
2021515936.tif 000003
【図２】
2021515936.tif 000004
【図３】
2021515936.tif 000005
【図４】
2021515936.tif 000006
【図５】
2021515936.tif 000007
【図６】
2021515936.tif 000008
【図７】
2021515936.tif 000009
【図８】
2021515936.tif 000010
【手続補正書】
【提出日】令和2年10月7日(2020.10.7)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピュータによって実施される方法であって、
第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、
第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、
前記第１の行列と前記第２の行列との積である第３の行列を計算することと、
前記第３の行列の各行列要素を、前記第１の整数と前記第２の整数との積の計算における部分積として出力することと
を含む方法。
【請求項２】
前記第１の行列に前記代入するおよび前記第２の行列に前記代入する間、前記第１の行列および前記第２の行列の各行列要素は、前記第１の行列に含まれる各第１の整数要素と、前記第２の行列に含まれる各第２の整数要素との前記積の中の、前記第１の整数と前記第２の整数との前記積において同じ桁位置に対応する各積が、前記第３の行列の同じ行列要素に対応するように配置される、請求項１に記載のコンピュータによって実施される方法。
【請求項３】
前記Ｎ×Ｎ個の第１の整数要素は、前記第１の整数データにおいて前記第１の桁方向に連続している、請求項１に記載のコンピュータによって実施される方法。
【請求項４】
前記１つまたは複数の第２の整数要素は、前記第２の整数データにおいて前記第２の桁方向に連続している、請求項３に記載のコンピュータによって実施される方法。
【請求項５】
前記第１の行列に前記代入する間、前記Ｎ×Ｎ個の第１の整数要素の中の、Ｎ個の連続した第１の整数要素は、前記第１の行列の各行に、前記第１の整数データにおける前記第１の桁方向において昇順または降順で代入され、
前記第２の行列に前記代入する間、前記複数の第２の整数要素の中の、Ｎ個の連続した第２の整数要素は、前記第２の行列の各列に、前記第２の整数データの前記第２の桁方向において前記Ｎ個の第１の整数要素を前記第１の行列に前記代入する順序と反対の順序で、代入される、
請求項４に記載のコンピュータによって実施される方法。
【請求項６】
前記第１の行列に前記代入する間、前記Ｎ×Ｎ個の第１の整数要素は、前記第１の行列の各行列要素に、列優先および昇順または降順で代入され、
前記第２の行列に前記代入する間、
前記Ｎ個の連続した第２の整数要素は、前記第２の行列の第１の行に、前記Ｎ個の第１の整数要素を前記第１の行列に前記代入する順序と同じ順序で代入され、
前記Ｎ個の第２の整数要素は、前記第２の行列の第２および後続の行に、前記第２の整数データ内の前記Ｎ個の第２の整数要素を一時に１つの整数要素だけシフトしながら、代入される、
請求項５に記載のコンピュータによって実施される方法。
【請求項７】
前記第３の行列は、第４の行列に加算され、
前記部分積として前記出力することは、
前記第４の行列の第１の行または最後の行内の各行列要素を、前記第１の整数と前記第２の整数との前記積における対応するビット位置での、各第１の整数要素と各第２の整数要素との前記部分積の和として、抽出することと、
前記第４の行列内において、前記部分積の前記和として抽出された前記行以外の行を、前記部分積の前記和として抽出された前記行に向かって１行シフトし、空のスペースを有する行内の各行列要素を０に設定することと
を含む、請求項６に記載のコンピュータによって実施される方法。
【請求項８】
前記第２の行列に前記代入する間、前記複数の第２の整数要素から前記１つまたは複数の第２の整数要素を一時に１つ、前記第２の行列に順次に代入するプロセスは、前記第１の行列に前記代入する間、前記複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットが、前記第１の行列に代入されるたびに繰り返され、
前記第３の行列を前記計算すること、および前記部分積を前記出力することは、前記１つまたは複数の第２の整数要素が、前記第２の行列に代入されるたびに行われ、
前記第１の整数と前記第２の整数との前記積は、各出力された部分積に基づいて計算される、
請求項１に記載のコンピュータによって実施される方法。
【請求項９】
前記第１の整数と前記第２の整数との前記積を計算することは、
各部分積を、前記第１の整数と前記第２の整数との前記積における対応する桁位置に配置することと、
各部分積の桁あふれを、より高位の桁に加算することと
を含む、請求項８に記載のコンピュータによって実施される方法。
【請求項１０】
第３の整数の上半分と第４の整数の上半分との第１の積は、前記第３の整数の前記上半分を前記第１の整数として設定し、前記第４の整数の前記上半分を前記第２の整数として設定し、前記第１の整数と前記第２の整数との前記積を計算することによって計算され、
前記第３の整数の下半分と前記第４の整数の下半分との第２の積は、前記第３の整数の前記下半分を前記第１の整数として設定し、前記第４の整数の前記下半分を前記第２の整数として設定し、前記第１の整数と前記第２の整数との前記積を計算することによって計算され、
前記第３の整数の前記上半分と前記下半分との和と、前記第４の整数の前記上半分と前記下半分との和との第３の積は、前記第３の整数の前記上半分と前記下半分との前記和を前記第１の整数として設定し、前記第４の整数の前記上半分と前記下半分との前記和を前記第２の整数として設定し、前記第１の整数と前記第２の整数との前記積を計算することによって計算され、
前記第３の整数と前記第４の整数との積は、前記第１の積、前記第２の積、および前記第３の積に基づいて計算される、
請求項１に記載のコンピュータによって実施される方法。
【請求項１１】
前記第３の行列の計算は、１つのコマンドに従って、Ｎ個の行とＮ個の列とを有する行列の積を計算する第１のプロセッサによって行われる、請求項１に記載のコンピュータによって実施される方法。
【請求項１２】
前記第１の整数および前記第２の整数のサイズに従って、前記第１の整数と前記第２の整数との前記積を、前記第１のプロセッサを用いて計算することと、前記第１の整数と前記第２の整数との前記積を、Ｎ個の行とＮ個の列とを有する行列の積を計算するためのコマンドを有しない第２のプロセッサを用いて計算することとの間で、切り換えが行われる、請求項１１に記載のコンピュータによって実施される方法。
【請求項１３】
前記複数の第１の整数要素および前記複数の第２の整数要素は、同じサイズを有する、請求項１に記載のコンピュータによって実施される方法。
【請求項１４】
前記複数の第１の整数要素および前記複数の第２の整数要素は、それぞれ８ビットである、請求項１３に記載のコンピュータによって実施される方法。
【請求項１５】
装置であって、
プロセッサまたはプログラマブル回路と、
共同で命令を含む１つまたは複数のコンピュータ可読媒体とを備え、前記命令は、前記プロセッサまたは前記プログラマブル回路によって実行されるとき、前記プロセッサまたは前記プログラマブル回路に、
第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、
第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、
前記第１の行列と前記第２の行列との積である第３の行列を計算することと、
前記第３の行列の各行列要素を、前記第１の整数と前記第２の整数との積の計算における部分積として出力することと
を行わせる、装置。
【請求項１６】
前記第１の行列に前記代入するおよび前記第２の行列に前記代入する間、前記第１の行列および前記第２の行列の各行列要素は、前記第１の行列に含まれる各第１の整数要素と、前記第２の行列に含まれる各第２の整数要素との前記積の中の、前記第１の整数と前記第２の整数との前記積において同じ桁位置に対応する各積が、前記第３の行列の同じ行列要素に対応するように配置される、請求項１５に記載の装置。
【請求項１７】
前記命令は、前記プロセッサまたは前記プログラマブル回路によって実行されるとき、前記プロセッサまたは前記プログラマブル回路に、
前記第２の行列に前記代入する間、前記複数の第２の整数要素から前記１つまたは複数の第２の整数要素を一時に１つ、前記第２の行列に順次に代入するプロセスを、前記第１の行列に前記代入する間、前記複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットが、前記第１の行列に代入されるたびに繰り返すことと、
前記１つまたは複数の第２の整数要素が、前記第２の行列に代入されるたびに、前記第３の行列の計算を行い、前記部分積を出力することと、
各出力された部分積に基づいて、前記第１の整数と前記第２の整数との前記積を計算することと
を行わせる、請求項１５に記載の装置。
【請求項１８】
装置であって、
第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入する、第１の行列代入部と、
第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入する、第２の行列代入部と、
前記第１の行列と前記第２の行列との積である第３の行列を計算する、第３の行列計算部と、
前記第３の行列の各行列要素を、前記第１の整数と前記第２の整数との積の計算における部分積として出力する、部分積出力部と
を備える装置。
【請求項１９】
前記第１の行列に前記代入するおよび前記第２の行列に前記代入する間、前記第１の行列および前記第２の行列の各行列要素は、前記第１の行列に含まれる各第１の整数要素と、前記第２の行列に含まれる各第２の整数要素との前記積の中の、前記第１の整数と前記第２の整数との前記積において同じ桁位置に対応する各積が、前記第３の行列の同じ行列要素に対応するように配置される、請求項１８に記載の装置。
【請求項２０】
前記第２の行列代入部は、前記第２の行列に前記代入する間、前記複数の第２の整数要素から前記１つまたは複数の第２の整数要素を一時に１つ、前記第２の行列に順次に代入するプロセスを、前記第１の行列代入部が、前記複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットを、前記第１の行列に代入するたびに繰り返し、
前記第３の行列計算部および前記部分積出力部は、前記第３の行列の計算および前記部分積の出力を、前記第２の行列代入部によって、前記１つまたは複数の第２の整数要素が、前記第２の行列に代入されるたびに行い、
前記装置は、各出力された部分積に基づいて、前記第１の整数と前記第２の整数との前記積を計算する整数積計算部を備える、
請求項１８に記載の装置。
【請求項２１】
コンピュータ・プログラムであって、プロセッサまたはプログラマブル回路に
第１の整数を表す第１の整数データを第１の桁方向に分割することによって得られる複数の第１の整数要素の中の、Ｎ×Ｎ個の第１の整数要素を、Ｎ個の行とＮ個の列とを有する第１の行列に代入することと、
第２の整数を表す第２の整数データを第２の桁方向に分割することによって得られる複数の第２の整数要素の中の、１つまたは複数の第２の整数要素のそれぞれを、Ｎ個の行とＮ個の列とを有する第２の行列の少なくとも１つの行列要素に代入することと、
前記第１の行列と前記第２の行列との積である第３の行列を計算することと、
前記第３の行列の各行列要素を、前記第１の整数と前記第２の整数との積の計算における部分積として出力することと
を実行させるためのコンピュータ・プログラム。
【請求項２２】
前記第１の行列に前記代入するおよび前記第２の行列に前記代入する間、前記第１の行列および前記第２の行列の各行列要素は、前記第１の行列に含まれる各第１の整数要素と、前記第２の行列に含まれる各第２の整数要素との前記積の中の、前記第１の整数と前記第２の整数との前記積において同じ桁位置に対応する各積が、前記第３の行列の同じ行列要素に対応するように配置される、請求項２１に記載のコンピュータ・プログラム。
【請求項２３】
前記コンピュータ・プログラムは、前記プロセッサまたは前記プログラマブル回路に、
前記第２の行列に前記代入する間、前記複数の第２の整数要素から前記１つまたは複数の第２の整数要素を一時に１つ、前記第２の行列に順次に代入するプロセスを、前記第１の行列に前記代入する間、前記複数の第１の整数要素の中のＮ×Ｎ個の第１の整数要素の異なるセットが、前記第１の行列に代入されるたびに繰り返すことと、
前記１つまたは複数の第２の整数要素が、前記第２の行列に代入されるたびに、前記第３の行列の計算を行い、前記部分積を出力することと、
各出力された部分積に基づいて、前記第１の整数と前記第２の整数との前記積を計算することと
をさらに実行させる、請求項２１に記載のコンピュータ・プログラム。
【国際調査報告】
2021515936.tif 000011
2021515936.tif 000012