IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ インターナショナル・ビジネス・マシーンズ・コーポレーションの特許一覧

<>
  • 特表-融合モジュラ積和演算 図1
  • 特表-融合モジュラ積和演算 図2
  • 特表-融合モジュラ積和演算 図3
  • 特表-融合モジュラ積和演算 図4
  • 特表-融合モジュラ積和演算 図5
  • 特表-融合モジュラ積和演算 図6
  • 特表-融合モジュラ積和演算 図7
  • 特表-融合モジュラ積和演算 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-10-23
(54)【発明の名称】融合モジュラ積和演算
(51)【国際特許分類】
   G06F 17/10 20060101AFI20241016BHJP
【FI】
G06F17/10 S
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024520060
(86)(22)【出願日】2022-10-11
(85)【翻訳文提出日】2024-04-02
(86)【国際出願番号】 CN2022124644
(87)【国際公開番号】W WO2023071780
(87)【国際公開日】2023-05-04
(31)【優先権主張番号】17/513,974
(32)【優先日】2021-10-29
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(74)【復代理人】
【識別番号】110000877
【氏名又は名称】弁理士法人RYUKA国際特許事務所
(72)【発明者】
【氏名】ラオ、ラジャット
【テーマコード(参考)】
5B056
【Fターム(参考)】
5B056AA05
5B056BB71
5B056BB73
5B056FF01
5B056FF02
(57)【要約】
コンピュータ実装方法は、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する段階を備え、ここで、a、b、及びcは、一組のオペランドとして提供される。第1の乗累算ユニットは、a*bを計算するバイナリ乗算を計算する。第2の乗累算ユニットは、pを使用してバイナリ乗算の結果を更新することによって第1の中間結果を計算する。第3の乗累算ユニットの累算器は、cで初期化される。第3の乗累算ユニットは、第1の中間結果及びcを使用して第2の中間結果を計算する。加算器ユニットは、バイナリ乗算の結果の一部分から第2の中間結果の一部分を減算する。加算器の出力は、融合モジュラ積和演算の結果として提供される。
【特許請求の範囲】
【請求項1】
処理ユニットによって、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する命令を受け取る段階、ここで、a、b、及びcは、一組のオペランドとして提供される;
第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する段階;
第2の乗累算ユニットによって、pを使用して前記バイナリ乗算の結果を更新することによって第1の中間結果を計算する段階;
cで第3の乗累算ユニットの累算器を初期化する段階;
前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する段階;
加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する段階;及び
前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する段階
を備える、コンピュータ実装方法。
【請求項2】
前記加算器は、前記第1の乗累算ユニットにおける乗算器よりも幅広のビット幅を有する、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記加算器の前記ビット幅は、前記第1の乗累算ユニットにおける前記乗算器の前記ビット幅よりも1多い、請求項2に記載のコンピュータ実装方法。
【請求項4】
cで前記第3の乗累算ユニットの前記累算器を初期化する段階は、前記累算器の下位ビットにcの値を記憶する段階を有する、請求項1に記載のコンピュータ実装方法。
【請求項5】
前記第1の中間結果を計算する段階は、事前計算された定数でa*bの前記バイナリ乗算の前記結果の第2のバイナリ乗算を実行する段階を有する、請求項1に記載のコンピュータ実装方法。
【請求項6】
前記第2の中間結果を計算する段階は、前記第1の中間結果の上位ビットを係数pと乗算する段階を有し、pの値は、前記命令を呼び出す前に前記第3の乗累算ユニットに記憶される、請求項5に記載のコンピュータ実装方法。
【請求項7】
前記出力が0及びpの間であることを確実にするために加算器の前記出力を補正する段階を更に備える、請求項1に記載のコンピュータ実装方法。
【請求項8】
一組のレジスタ;及び
各々が乗算器及び累算器を含む3つの乗累算ユニットを有する一組の乗累算ユニット
を備え、前記一組の乗累算ユニットは、前記一組のレジスタに結合され、前記一組の乗累算ユニットは、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する方法を実行するように構成されており、ここで、a、b、及びcは、前記一組のレジスタにおいて提供されており、前記融合モジュラ積和演算を実行することは、
第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する段階;
第2の乗累算ユニットによって、pを使用して前記バイナリ乗算の結果を更新することによって第1の中間結果を計算する段階;
cで第3の乗累算ユニットからの累算器を初期化する段階;
前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する段階;
加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する段階;及び
前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する段階
を備える、システム。
【請求項9】
前記加算器は、前記第1の乗累算ユニットにおける乗算器よりも幅広のビット幅を有する、請求項8に記載のシステム。
【請求項10】
前記加算器の前記ビット幅は、前記第1の乗累算ユニットにおける前記乗算器の前記ビット幅よりも1多い、請求項9に記載のシステム。
【請求項11】
cで前記第3の乗累算ユニットからの前記累算器を初期化する段階は、前記累算器の下位ビットにcの値を記憶する段階を有する、請求項8に記載のシステム。
【請求項12】
前記第1の中間結果を計算する段階は、事前計算された定数でa*bの前記バイナリ乗算の前記結果の第2のバイナリ乗算を実行することを有する、請求項8に記載のシステム。
【請求項13】
前記第2の中間結果を計算する段階は、前記第1の中間結果の上位ビットを係数pと乗算する段階を有し、pの値は、前記融合モジュラ積和演算を実行する命令を呼び出す前に前記第3の乗累算ユニットに記憶される、請求項12に記載のシステム。
【請求項14】
前記出力が0及びpの間であることを確実にするために前記加算器の前記出力を補正する段階を更に備える、請求項8に記載のシステム。
【請求項15】
コンピュータ実行可能命令が記憶されたコンピュータ可読メモリを備えるコンピュータプログラム製品であって、前記コンピュータ実行可能命令は、プロセッサによって実行されると、前記プロセッサに、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する方法を実行させ、ここで、a、b、及びcは、オペランドとして提供され、前記融合モジュラ積和演算を実行することは、
第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する手順;
第2の乗累算ユニットによって、pを使用して前記バイナリ乗算の結果を更新することによって第1の中間結果を計算する手順;
cで第3の乗累算ユニットからの累算器を初期化する手順;
前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する手順;
加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する手順;及び
前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する手順
を備える、コンピュータプログラム製品。
【請求項16】
前記加算器のビット幅は、前記第1の乗累算ユニットにおける乗算器のビット幅よりも1多い、請求項15に記載のコンピュータプログラム製品。
【請求項17】
cで前記第3の乗累算ユニットからの前記累算器を初期化する手順は、前記累算器の下位ビットにcの値を記憶する手順を有する、請求項15に記載のコンピュータプログラム製品。
【請求項18】
前記第1の中間結果を計算する手順は、事前計算された定数でa*bの前記バイナリ乗算の前記結果の第2のバイナリ乗算を実行する手順を有する、請求項15に記載のコンピュータプログラム製品。
【請求項19】
前記第2の中間結果を計算する手順は、前記第1の中間結果の上位ビットを係数pと乗算する手順を有し、pの値は、前記融合モジュラ積和演算を実行する命令を呼び出す前に前記第3の乗累算ユニットに記憶される、請求項18に記載のコンピュータプログラム製品。
【請求項20】
前記出力が0及びpの間であることを確実にするために前記加算器の前記出力を補正する手順を更に備える、請求項15に記載のコンピュータプログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、概して、コンピュータ技術に関し、より詳細には、融合モジュラ積和(FMMA)演算を実装することによって算術演算を実行することに関する。
【0002】
コンピュータは、典型的には、算術演算を実行する応用のために使用される。暗号、ブロックチェーン、機械学習、画像処理、コンピュータゲーム、eコマース等のような幾つかの応用は、そのような動作が効率的に(例えば、高速に)実行されることを要求する。したがって、整数算術の性能が、学術的及び産業的の両方の研究の焦点となっている。
【0003】
幾つかの既存の技法が、計算プロセスを利用するか、又はこれをハードウェアのアーキテクチャに対して適応させる算術命令を実装することによって、コンピュータ、特にプロセッサ及び/又は算術論理演算ユニットの性能を改善するのに使用される。そのような技法の例としては、1つの命令を複数の演算に分割することが挙げられ、ここで、各演算は、並列に実行され、2つ又はそれよりも多くの演算が組み合わされてメモリアクセスが削減され、演算は、メモリアクセス時間を削減するように順序付けされ、オペランドは、アクセス時間を削減するために特定の順序で記憶される等である。暗号及び機械学習等の応用に対して、異なるタイプの算術演算が要求され得る。
【発明の概要】
【0004】
本発明の1つ又は複数の実施形態によれば、コンピュータ実装方法は、処理ユニットによって、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する命令を受け取る段階を備え、ここで、a、b、及びcは、一組のオペランドとして提供される。前記方法は、第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する段階を更に備える。前記方法は、第2の乗累算ユニットによって、pを使用してバイナリ乗算の結果を更新することによって第1の中間結果を計算する段階を更に備える。前記方法は、cで第3の乗累算ユニットの累算器を初期化する段階を更に備える。前記方法は、前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する段階を更に備える。前記方法は、加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する段階を更に備える。前記方法は、前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する段階を更に備える。
【0005】
本発明の1つ又は複数の実施形態によれば、システムは、一組のレジスタ、及び各々が乗算器及び累算器を含む3つの乗累算ユニットを有する一組の乗累算ユニットを備える。前記一組の乗累算ユニットは、前記一組のレジスタに結合される。前記一組の乗累算ユニットは、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する方法を実行するように構成されており、ここで、a、b、及びcは、前記一組のレジスタにおいて提供されている。前記融合モジュラ積和演算を実行する方法は、第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する段階を備える。前記方法は、第2の乗累算ユニットによって、pを使用してバイナリ乗算の結果を更新することによって第1の中間結果を計算する段階を更に備える。前記方法は、cで第3の乗累算ユニットの累算器を初期化する段階を更に備える。前記方法は、前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する段階を更に備える。前記方法は、加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する段階を更に備える。前記方法は、前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する段階を更に備える。
【0006】
本発明の1つ又は複数の実施形態によれば、コンピュータプログラム製品は、コンピュータ実行可能命令が記憶されたコンピュータ可読メモリを備え、前記コンピュータ実行可能命令は、プロセッサによって実行されると、前記プロセッサに、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する方法を実行させ、ここで、a、b、及びcは、オペランドとして提供される。前記融合モジュラ積和演算を実行する前記方法は、第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する手順を備える。前記方法は、第2の乗累算ユニットによって、pを使用してバイナリ乗算の結果を更新することによって第1の中間結果を計算する手順を更に備える。前記方法は、cで第3の乗累算ユニットの累算器を初期化する手順を更に備える。前記方法は、前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する手順を更に備える。前記方法は、加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する手順を更に備える。前記方法は、前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する手順を更に備える。
【0007】
追加の技術的特徴及び利益が、本発明の技法を通して実現される。本発明の実施形態及び態様が本明細書において詳細に説明され、特許請求される主題の一部とみなされる。より良好な理解のために、詳細な説明及び図面を参照する。
【図面の簡単な説明】
【0008】
本明細書において説明される排他的権利の詳細が特に指し示されており、本明細書の結論における特許請求の範囲において明確に特許請求されている。本発明の実施形態の前述及び他の特徴及び利点は、添付図面と併せて読まれると、以下の詳細な説明から明らかである。
【0009】
図1】モジュラ積和を計算するのに使用されるプロセッサの一組のハードウェアコンポーネントを示す図である。
【0010】
図2】本発明の1つ又は複数の実施形態に係る、融合積和命令の実行を容易にするモジュラ算術及び論理ユニットのアーキテクチャを示す図である。
【0011】
図3】本発明の1つ又は複数の実施形態に係る、FMMA_B命令を実行する方法のフローチャートである。
【0012】
図4】本発明の1つ又は複数の実施形態に係る、融合積和命令の実行を容易にするモジュラ算術及び論理ユニットのアーキテクチャを示す図である。
【0013】
図5】本発明の1つ又は複数の実施形態に係る、FMMA_M命令を実行する方法のフローチャートである。
【0014】
図6】融合モジュラ積和命令が本発明の1つ又は複数の実施形態に従って演算の効率を改善する例示のシナリオを示す図である。
【0015】
図7】本発明の1つ又は複数の実施形態に係るプロセッサのブロック図である。
【0016】
図8】本発明の1つ又は複数の実施形態に係るコンピューティングシステムを示す図である。
【0017】
本明細書において示される図面は、例示である。本発明の範囲から逸脱することなく、図面又はそこで説明される動作に対して多くの変形が存在し得る。例えば、アクションを異なる順序において実行することもできるし、又はアクションは、追加、消去又は修正することもできる。また、「結合される」という用語及びその変形は、2つの要素間で通信経路を有することを説明し、それらの間に介在する要素/接続がない要素間の直接接続を示唆するものではない。これらの変形の全てが本明細書の一部とみなされる。
【0018】
添付の図及び開示される実施形態の以下の詳細な説明において、図に示されている様々な要素には、2桁又は3桁の参照番号が与えられる。わずかな例外を除き、各参照番号の最も左の桁は、その要素が最初に示された図に対応する。
【発明を実施するための形態】
【0019】
融合モジュラ積和(FMMA)演算の実行を容易にすることによってコンピュータプロセッサの効率を改善する技術的解決手段が本明細書において説明される。コンピュータシステムでは、加算及び乗算の算術演算が頻繁に使用される。融合積和命令(FMA)は、実行されることになる命令の数を削減するために、及びメモリアクセスを削減し、ひいては実行効率を改善するために、単一の命令で積和演算を実行するための一般的な方法である。FMA命令は、整数及び浮動小数点の両方の演算において広く使用される命令である。
【0020】
本発明の実施形態は、モジュラ加算演算及びモジュラ乗算演算を実行する場合、別個に実行されるこれら2つの演算と比較して命令の数及びメモリアクセスを削減する融合演算を実行することによって、性能を改善するという技術的課題に対処する。本発明の実施形態は、FMMA演算を実行する単一の命令、及び現行技術水準のハードウェア上でそのような演算を実装する技法を容易にする。
【0021】
モジュラ算術は、暗号化、ブロックチェーン、人工知能等のような幾つかのコンピュータ応用において頻繁に使用される。したがって、FMMA演算/命令を提供することによってそのような応用の実行における改善を提供することによって、本発明の実施形態は、コンピューティング技術の分野において、及び少なくともそのようなFMMA演算が使用される分野に、実用的な応用を提供する。さらに、本発明の実施形態は、モジュラ積和演算の実行を改善することによって、コンピューティング技術それ自体に対する改善を提供する。
【0022】
コンピュータシステムは、典型的には、算術演算を実行するときにバイナリ数表現を使用する。さらに、コンピュータシステム、及び特にプロセッサ及び当該プロセッサの算術論理演算ユニット(ALU)は、事前定義された「幅」又は「ワードサイズ」(w)、例えば、32ビット、64ビット、128ビット等を有する。幅は、プロセッサが一度に処理することができるビットの最大数を示す。プロセッサの幅は、レジスタのサイズ、ALU処理幅のサイズ、又はプロセッサに関連付けられたコンポーネントの他の任意のそのような処理制約によって示すことができる。
【0023】
テーブル1は、コンピューティングシステムにおいてモジュラ乗算を実行するのに典型的に使用されるBarrettモジュラ乗算アルゴリズムを提供する。テーブル1の列1は、オペランドa、bの素数pとのモジュラ乗算を計算するために実行される計算のシーケンスを示す。a、b、及びpを入力とすると、モジュラ乗算の出力は、
r=(a*b)%p
であり、これは、列1に示されているように計算される。テーブル1の列2では、kがプロセッサのビット幅であると仮定して、計算のために要求されるビット幅が示されている。
テーブル1
【表1】
【0024】
テーブル2は、コンピューティングシステムにおいてモジュラ乗算を実行するのに使用される典型的な代替形態であるMontgomeryモジュラ乗算アルゴリズムを提供する。テーブル2の列1は、オペランドa、bの素数pとのモジュラ乗算を計算するために実行される計算のシーケンスを示す。a、b、及びpを入力とすると、このケースでのモジュラ乗算の出力は、
c=(a*b*R-1)%p
であり、これは、列1に示されているように計算される。ここで、X(lo)及びX(hi)表現は、それぞれ、Xにおけるビットの低い方の半分及びXにおけるビットの高い方の半分を示す。テーブル2の列2では、kがプロセッサのビット幅であると仮定して、計算のために要求されるビット幅が示されている。ここで、wは、プロセッサのワードサイズに依存する値である。
テーブル2
【表2】
【0025】
さらに、テーブル1及びテーブル2から見て取ることができるように、既存の解決策は、実行されるために少なくとも3つの別個の乗算を要求する。本発明の実施形態は、本明細書において説明されるように、データアクセス及び命令実行時間を削減するためにそのような乗算を融合する。加えて、本発明の実施形態は、加算演算の融合を容易にする。
【0026】
図1は、モジュラ積和を計算するのに使用されるプロセッサの一組のハードウェアコンポーネントを示している。プロセッサ10は、モジュラ積和を計算する1つ又は複数のコンポーネントを有するALU15を備えることができる。ALU15の1つ又は複数のコンポーネントは、本発明の1つ又は複数の実施形態において計算の効率を改善するためにパイプライン処理を使用することができる。さらに、本発明の幾つかの実施形態では、示されている1つ又は複数のコンポーネントの結果は、中間値として、例えば、メモリ、レジスタ等に記憶することができる。中間(又は最終)結果を記憶するコンポーネントも、図1において識別される。
【0027】
ALU15のコンポーネントは、加算器22、乗算器24、及び累算器26の1つ又は複数のインスタンスを含む。図1は、モジュラ積和のために使用されることになるオペランドを含む、実行されることになる命令を含むコードアレイ14も示している。
【0028】
さらに、図1は、ALU15における1つ又は複数のコンポーネントのビット幅(例えば、128b、256b)、及び計算中に1つのコンポーネントから他のコンポーネントに転送されるデータの幅を示している。ビット幅は、本発明の1つ又は複数の実施形態において変動し得ることが理解される。しかしながら、ハードウェアのビット幅は、そのハードウェア上で実行することができるモジュラ積和を制限し得る。
【0029】
図1に示されているパイプラインは、それぞれ、テーブル1及びテーブル2に示されているBarrett及びMontgomeryモジュラ乗算の典型的な実装において使用される。見て取ることができるように、3つの乗算器24が要求される。さらに、パイプラインは、本発明の実施形態が乗算を融合した後に提供する加算演算を含まない。
【0030】
本発明の実施形態は、2つのFMMA命令を提供する。第1のFMMA命令は、Barrettモジュラ乗算及びその後の加算を融合方式で計算する。第1のFMMA命令のためのシンタックスは、fmma_b a、b、c、dである。提供される第2のFMMA命令は、Montgomeryモジュラ乗算及びその後の加算を融合方式で計算する。第2のFMMA命令のためのシンタックスは、fmma_m a、b、c、dである。Montgomeryアルゴリズムのケースでは、オペランドは、Montgomery形式であり、生成される結果もMontgomery形式である。Montgomery形式への及びMontgomery形式からの数の変換は、本発明の実施形態によって提供される技術的解決手段に影響を与えることなく、既に知られているか又は将来開発される技法を使用して実行することができる。
【0031】
ここで、a、b、c、及びdは、オペランドであり、プロセッサ10におけるレジスタとすることができる。両方のケースにおいて、出力は、d=((a*b)+c)%pを計算する。本発明の幾つかの実施形態では、素数pも命令シンタックスにおけるオペランドとすることができるが、本明細書における説明では、pは、ここではALU15が素数で初期化されており(Barrett/Montgomeryの両方におけるステップ1)、fmma_b/fmma_m命令の前に事前計算が呼び出されることを仮定する。
【0032】
図2は、本発明の1つ又は複数の実施形態に係る、FMMA命令の実行を容易にするモジュラALUのアーキテクチャを示している。モジュラALU25は、加算器22、乗算器24、及び累算器26の1つ又は複数のインスタンスを含み、ALU15と同様のパイプライン処理を使用する。しかしながら、累算器26は、加算器22の代わりに使用される。それゆえ、ALU25は、3つの乗累算(MAC)ユニット21、23、27を含み、各MACブロックは、乗算器24及び累算器26を含む。さらに、3つのMACユニット21、23、27に後続して、追加ビット幅(例えば、129ビット)を有する加算器29が使用される。本発明の幾つかの実施形態では、加算器29のビット幅は、3つのMACユニット21、23、27における乗算器24のビット幅よりも1多い。
【0033】
ALU25では、オペランドa、bは、MAC21によって読み出されて使用され、オペランドcは、MAC27によって、特に、MAC27の累算器26によって読み出される。より広いビット幅を有する加算器29は、MAC27からの出力を受け取る。
【0034】
図3は、本発明の1つ又は複数の実施形態に係る、FMMA_B命令を実行する方法のフローチャートを示している。方法300は、ブロック301において、第1のMAC21に第1及び第2のオペランドa、bを読み込むことを含む。オペランドは、データアレイ8から読み出される。ブロック302において、第1のMAC21は、第1及び第2のオペランドのバイナリ乗算を実行し、部分積を累算する。
【0035】
ブロック303において、第2のMAC23は、ブロック302の結果の事前定義された定数Muとのバイナリ乗算を実行する。本発明の1つ又は複数の実施形態では、Muは、第2のMAC23に記憶される。
【0036】
ブロック304において、第3のオペランドcは読み出されて、第3のMAC27における累算器26が初期化される。第3のオペランドは、第3のMAC27の累算器26の下位ビットに読み込まれる。例えば、累算器26が256ビット幅であり、かつオペランドcが128ビット幅である場合、cは、累算器26のビット128~255に記憶される。第3のオペランドは、第1のMAC21及び第2のMAC23におけるバイナリ乗算と並列に第3のMACに読み込むことができることに留意されたい。
【0037】
ブロック305において、第3のMAC27は、ステップ303からの結果の上位ビットを、係数pと乗算し、第3のMAC27の事前初期化された累算器26において結果を累算する。ここで、「上位ビット」は、ステップ303からの結果の前半(例えば、256ビット値からの最初の128ビット)を表すことができる。
【0038】
ブロック306において、加算器22は、ステップ302における結果の下位ビットからステップ305における結果の下位ビットを減算する。ステップ302及び305の結果は、それぞれ、第1のMAC21及び第3のMAC27における累算器26に記憶される値である。
【0039】
ブロック307において、ステップ306からの結果が有効範囲0~p内にあることを確実にするために条件補正が実行される。
【0040】
このようにして実行されるFMMA_B命令は、モジュラ積和演算の現行の順次的パイプライン実行よりも効率的である。本発明の1つ又は複数の実施形態に従って、ALU25を使用して512ビットオペランド上でfmma_bを実行することを検討する。説明されたように、第3のオペランドは、第3のMAC27における累算器26の下位512ビットを初期化するのに使用される。「ストレージMAX OPサイズ」は、累算器が第3のオペランドに書き込むのに十分なビット幅を有することを保証する。第3のMAC27における累算器26は、次に、乗算器24の出力に対して動作し、データを累算する(すなわち、出力を、事前初期化された第3のオペランドと加算する)。第3のMAC27の結果において総計で513ビット、すなわち、乗算からの512ビット及び累算器26の初期状態に起因した追加ビットが存在する可能性がある。これらのビットは、テーブル1におけるステップ5を実行するために129ビット加算器29にフィードされる。
【0041】
ここで、512ビット演算が128ビット幅で実行されるので、ビットは、本発明の幾つかの実施形態では4クロックの期間にわたってフィードされる。最初の3クロックは、各々128ビットを有することになり、最終クロックは、最後の129ビットを空にすることになる。他の実施形態では、読み出しは、より少ない又は追加のクロックで実行することができる。
【0042】
このようにして、融合モジュラ積和は、Montgomeryモジュラ乗算を使用してALU25によって実行される。このようにして実行されるFMMA_Mは、モジュラ積和を別個にかつ順次的に実行することと比較してより少ないリソースを要求することによって効率を改善する。
【0043】
図4は、本発明の1つ又は複数の実施形態に係る、FMMA命令の実行を容易にするALUを示している。モジュラALU35は、加算器22、乗算器24、及び累算器26の1つ又は複数のインスタンスを含み、ALU15と同様のパイプライン処理を使用する。ここで、ALU35は、3つのMACユニット、すなわち、第1のMAC31、第2のMAC33、及び第3のMAC37を含む。3つのMACユニット31、33、37に後続して、追加ビット幅(例えば、129ビット)を有する加算器39が使用される。本発明の幾つかの実施形態では、加算器39のビット幅は、3つのMACユニット31、33、37における乗算器24のビット幅よりも1多い。
【0044】
ALU35では、第3のオペランドcは、第1のMACユニット31の累算器26の上位ビットを初期化するために読み出され、使用される。より広いビット幅を有する加算器39は、MAC37からの出力を受け取る。
【0045】
図5は、本発明の1つ又は複数の実施形態に係る、FMMA_M命令を実行する方法のフローチャートを示している。方法500は、ブロック501において、第1のMAC31に第1及び第2のオペランドa、bを読み込むことを含む。オペランドは、データアレイ8から読み出される。ブロック502において、第1のMAC31の累算器26は、第3のオペランドcを累算器26の上位ビットに読み込むことによって初期化される。
【0046】
ブロック503において、第1及び第2のオペランドのバイナリ乗算が実行され、結果は、第1のMAC31の事前初期化された累算器26で累算される。第3のオペランドcは、それに応じて、最初の2つのオペランドのバイナリ乗算の結果に加算される。
【0047】
ブロック504において、503の下位ビットは、第2のMAC33によって係数Pの事前計算された逆数と乗算される。第2のMAC33は、本発明の幾つかの実施形態では、方法500を呼び出す前にpの値で初期化される。
【0048】
ブロック505において、第3のMAC37は、ステップ504の下位ビットを係数pと乗算する。係数pは、本発明の幾つかの実施形態では、方法500を呼び出す前に第3のMAC37に記憶される。
【0049】
さらに、ブロック506において、加算器39は、ステップ503の結果の上位ビットからステップ505の結果の上位ビットを減算する。加算器39は、2の補数、又は他の任意の既知の技法を使用して減算を計算することができる。
【0050】
ブロック507において、ステップ506からの結果が有効範囲0~p内にあることを確実にするために条件補正が実行される。
【0051】
ここで、「上位ビット」は、1つ又は複数のステップからの結果の前半(例えば、256ビット値からのビット0~127)を表すことができ、「下位ビット」は、結果の後半(例えば、256ビット値からのビット128~255)を表す。ステップ503、504、及び505の結果は、それぞれ、第1のMAC31、第2のMAC33、及び第3のMAC37における累算器26に記憶される値である。
【0052】
このようにして実行されるFMMA_M命令は、モジュラ積和演算の現行の順次的パイプライン実行よりも効率的である。本発明の1つ又は複数の実施形態に従って、ALU35を使用して128ビットオペランド上でfmma_mを実行することを検討する。第3のオペランドは、第1のMACユニット31の256ビット累算器26の上位128ビットを初期化するのに使用される。累算器26の結果の下位128ビットは、次の、すなわち、第2及び第3のMACユニット33、37に渡される。幾つかのケースでは、129の上位ビット、すなわち、乗算に起因した128及び第1のMAC31の累算器26の初期状態に起因した追加ビットが存在し得る。これらの129ビットは、次にテーブル2におけるステップ5を実行するために加算器39に渡される。
【0053】
本発明の実施形態は、最小のハードウェア変更で融合積和をサポートするために既存のモジュラ算術ユニットのサポートを向上する。ハードウェア変更の量は、加算器の幅を1ビットだけ増加することのみである(例えば、加算器29、39)。第3のオペランドで累算器を初期化することによって、FMMAは、ユーザが所望し得るいずれかのモジュラ乗算アルゴリズムを使用して達成することができる。さらに、累算器を初期化することによってFMMAを実行することによって、本発明の実施形態は、モジュラ積和演算が順次的に要求される場合にプロセッサの演算を改善する。モジュラ乗算及び融合モジュラ積和演算の全体レイテンシは、両方とも厳密に同じである。そのため、本発明の実施形態は、必要とされる命令の数、及び同様にfmmaを活用することができる演算の総レイテンシにおける改善を提供する。
【0054】
図6は、FMMA命令が本発明の1つ又は複数の実施形態に従って演算の効率を改善する例示のシナリオを示している。バタフライ演算を含む反復数論変換(Number Theoretic Transform:NTT)アルゴリズムを実行するアルゴリズムの例示のコード600を検討する。示された例の代わりにFMMA演算を要求する他の任意のアルゴリズム/コードを使用することができること、及び本明細書において説明されるFMMA命令を他の任意のコードにおいて使用することができることが理解される。例60について、A[k+j]がレジスタR0にあり、A[k+j+m/2]がR1にあり、wがR2にあり、及びR3、R4は、一時的スクラッチパッドレジスタであることを仮定する。
【0055】
ブロック61に示されているように、融合モジュラ積和命令を実行することができないALU(例えば、ALU15)は、2つのスクラッチパッドレジスタ(例えば、R2、R4)を使用し、4つの命令呼び出しが、要求を実行するために要求される。ブロック62に示されているように、本明細書において説明されるfmma命令のうちのいずれか1つを使用することによって、必要とされるスクラッチパッドレジスタの数は2つから1つに削減される。さらに、全体レイテンシは、少なくとも1つのモジュラ加算の時間だけ削減される。
【0056】
したがって、本発明の実施形態は、融合モジュラ積和演算を実行する単一の命令を実装するための実用的な応用を提供することによってコンピューティング技術に対する改善を容易にする。本明細書において提供されるように、融合演算は、大幅なハードウェア変更を伴うことなく現行技術水準のハードウェア上で実装することができる。
【0057】
図7は、本発明の1つ又は複数の実施形態に係るプロセッサのブロック図を示している。プロセッサ10は、コンポーネントの中でもとりわけ、命令フェッチユニット601、命令復号オペランドフェッチユニット602、命令実行ユニット603、メモリアクセスユニット604、ライトバックユニット605、一組のレジスタ12、及びFMMA実行器606を備えることができる。本発明の1つ又は複数の実施形態では、FMMA実行器606は、算術論理演算ユニット(ALU)(図示せず)の一部とすることができる。
【0058】
本発明の1つ又は複数の実施形態では、プロセッサ10は、中央処理ユニット(CPU)、グラフィックス処理ユニット(GPU)、テンソル処理ユニット(TPU)、又はコンピュータシステムの他の任意の処理ユニット等の処理ユニットにおける幾つかのコンピュータプロセッサのうちの1つとすることができる。代替的には、又は加えて、プロセッサ10は、1つ又は複数の処理ユニットの一部であるコンピューティングコアとすることができる。
【0059】
命令フェッチユニット601は、プログラム命令を、メモリからフェッチされ、適切な順序で実行されるように編成すること、及びそれらを命令実行ユニット603に転送することを担当する。命令復号オペランドフェッチユニット602は、命令実行ユニット603に命令を転送する前に、命令及びオペランド、例えば、アドレス解決、プリフェッチングをパースすることを容易にする。命令実行ユニット603は、命令に従って動作及び計算を実行する。メモリアクセスユニット604は、プロセッサ10に結合されているメモリデバイスにおける特定のロケーションにアクセスすることを容易にする。メモリデバイスは、キャッシュメモリ、揮発性メモリ、不揮発性メモリ等とすることができる。ライトバックユニット605は、レジスタ12のコンテンツをメモリデバイスにおける1つ又は複数のロケーションに記録することを容易にする。FMMA実行器606は、本明細書において説明されるようなFMMA命令(fmma_b、又はfmma_bのいずれか)を実行することを容易にする。
【0060】
プロセッサのコンポーネントは、本明細書において説明された技術的解決手段の特徴に影響を与えることなく本発明の1つ又は複数の実施形態において変動し得ることに留意されたい。本発明の幾つかの実施形態では、プロセッサ10のコンポーネントは、本明細書において説明されたものと組み合わせることもできるし、これらとは別個とすることもできるし、又はこれらと異なることもできる。
【0061】
ここで図8を参照すると、コンピュータシステム1500が、一実施形態に従って全体的に示されている。コンピュータシステム1500は、モジュラ積和演算が実行されることを要求する1つ又は複数の機能を実行するのに使用されるターゲットコンピューティングシステムとすることができる。コンピュータシステム1500は、本明細書において説明されるように、様々な通信技術を利用するコンピューティングデバイス及びネットワークを任意の数及び組み合わせで備え、及び/又は利用する電子的コンピュータフレームワークとすることができる。コンピュータシステム1500は、異なるサービスに変化するか又は他のものから独立して幾つかの特徴を再構成する能力で、容易にスケーリング可能、拡張可能、及びモジュラとすることができる。コンピュータシステム1500は、例えば、サーバ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、又はスマートフォンであってよい。幾つかの例では、コンピュータシステム1500は、クラウドコンピューティングノードであってよい。コンピュータシステム1500は、コンピュータシステムによって実行される、プログラムモジュール等の、コンピュータシステム実行可能命令の一般的な文脈において説明されてよい。概して、プログラムモジュールは、特定のタスクを実行するか又は特定の抽象データタイプを実装するルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造等を含んでよい。コンピュータシステム1500は、タスクが通信ネットワークを通してリンクされるリモート処理デバイスによって実行される分散クラウドコンピューティング環境において実施されてよい。分散クラウドコンピューティング環境では、メモリ記憶デバイスを含むローカルコンピュータシステム記憶媒体及びリモートコンピュータシステム記憶媒体の両方にプログラムモジュールが配置されてよい。
【0062】
図8に示されているように、コンピュータシステム1500は、1つ又は複数の中央処理ユニット(CPU)1501a、1501b、1501c等(まとめて、又は一般にプロセッサ1501と称される)を有する。プロセッサ1501は、シングルコアプロセッサ、マルチコアプロセッサ、コンピューティングクラスタ、又は任意の数の他の構成とすることができる。処理回路とも称されるプロセッサ1501は、システムバス1502を介して、システムメモリ1503及び様々な他のコンポーネントに結合される。システムメモリ1503は、リードオンリメモリ(ROM)1504及びランダムアクセスメモリ(RAM)1505を含むことができる。ROM1504は、システムバス1502に結合され、コンピュータシステム1500の特定の基本機能を制御する基本入力/出力システム(BIOS)を含んでよい。RAMは、プロセッサ1501による使用のためにシステムバス1502に結合されたリード-ライトメモリである。システムメモリ1503は、動作中に上記命令の動作のための一時的メモリ空間を提供する。システムメモリ1503は、ランダムアクセスメモリ(RAM)、リードオンリメモリ、フラッシュメモリ、又は他の任意の適したメモリシステムを含むことができる。
【0063】
コンピュータシステム1500は、システムバス1502に結合された入力/出力(I/O)アダプタ1506及び通信アダプタ1507を含む。I/Oアダプタ1506は、ハードディスク1508及び/又は他の任意の同様のコンポーネントと通信するスモールコンピュータシステムインターフェース(SCSI)アダプタであってよい。I/Oアダプタ1506及びハードディスク1508は、本明細書においてまとめてマスストレージ1510と称される。
【0064】
コンピュータシステム1500上で実行するためのソフトウェア1511がマスストレージ1510に記憶されてよい。マスストレージ1510は、プロセッサ1501によって可読の有形記憶媒体の一例であり、ここで、ソフトウェア1511は、コンピュータシステム1500に、様々な図に関して本明細書において以下で説明されるように動作させるためにプロセッサ1501によって実行される命令として記憶される。コンピュータプログラム製品及びそのような命令の実行の例が、本明細書においてより詳細に論述される。通信アダプタ1507は、システムバス1502を、外部ネットワークであり得るネットワーク1512と相互接続し、コンピュータシステム1500が他のそのようなシステムと通信することを可能にする。1つの実施形態では、システムメモリ1503及びマスストレージ1510の部分は、集合的に、オペレーティングシステムを記憶し、これは、図8に示されている様々なコンポーネントの機能を協調させるための、IBM Corporationからのz/OS又はAIXオペレーティングシステム等の任意の適切なオペレーティングシステムであってよい。
【0065】
追加の入力/出力デバイスが、ディスプレイアダプタ1515及びインターフェースアダプタ1516を介してシステムバス1502に接続されるものとして示される。1つの実施形態では、アダプタ1506、1507、1515、及び1516は、中間バスブリッジ(図示せず)を介してシステムバス1502に接続されている1つ又は複数のI/Oバスに接続されてよい。ディスプレイ1519(例えば、スクリーン又はディスプレイモニタ)が、グラフィックス集約アプリケーション及びビデオコントローラの性能を改善するためにグラフィックスコントローラを含み得るディスプレイアダプタ1515によってシステムバス1502に接続される。キーボード1521、マウス1522、スピーカ1523等は、例えば、複数のデバイスアダプタを単一の集積回路に統合するSuper I/Oチップを含み得るインターフェースアダプタ1516を介してシステムバス1502に相互接続することができる。ハードディスクコントローラ、ネットワークアダプタ、及びグラフィックスアダプタ等の周辺デバイスを接続する適したI/Oバスは、典型的には、ペリフェラルコンポーネントインターコネクト(PCI)等の一般的なプロトコルを含む。それゆえ、図8において構成されるように、コンピュータシステム1500は、プロセッサ1501の形式の処理能力、及びシステムメモリ1503及びマスストレージ1510を含む記憶能力、キーボード1521及びマウス1522等の入力手段、及びスピーカ1523及びディスプレイ1519を含む出力能力を含む。
【0066】
幾つかの実施形態では、通信アダプタ1507は、とりわけ、インターネットスモールコンピュータシステムインターフェース等の任意の適したインターフェース又はプロトコルを使用してデータを送信することができる。ネットワーク1512は、とりわけ、セルラネットワーク、無線ネットワーク、ワイドエリアネットワーク(WAN)、ローカルエリアネットワーク(LAN)、又はインターネットであってよい。外部コンピューティングデバイスは、ネットワーク1512を通してコンピュータシステム1500に接続してよい。幾つかの例では、外部コンピューティングデバイスは、外部ウェブサーバ又はクラウドコンピューティングノードであってよい。
【0067】
図8のブロック図は、コンピュータシステム1500が図8に示されたコンポーネントの全てを含むことを示すことを意図していないことを理解されたい。むしろ、コンピュータシステム1500は、図8に示されていない任意の適切なより少ない又は追加のコンポーネント(例えば、追加のメモリコンポーネント、埋め込みコントローラ、モジュール、追加のネットワークインターフェース等)を含むことができる。さらに、コンピュータシステム1500に関して本明細書において説明される実施形態は、任意の適切なロジックで実装されてよく、ロジックは、本明細書において参照される場合、様々な実施形態において、任意の適したハードウェア(とりわけ、例えば、プロセッサ、埋め込みコントローラ、又は特定用途向け集積回路)、ソフトウェア(とりわけ、例えば、アプリケーション)、ファームウェア、又はハードウェア、ソフトウェア、及びファームウェアの任意の適した組み合わせを含むことができる。
【0068】
本発明は、統合のあらゆる可能な技術詳細レベルにおけるシステム、方法、及び/又はコンピュータプログラム製品であってよい。コンピュータプログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を有するコンピュータ可読記憶媒体(又は複数の媒体)を含んでよい。
【0069】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用されるための命令を保持及び記憶することができる有形デバイスとすることができる。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁記憶デバイス、半導体記憶デバイス、又は前述したものの任意の適した組み合わせであってよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的なリストは、次のもの:ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリメモリ(EPROM又はフラッシュメモリ)、スタティックランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、デジタル多用途ディスク(DVD)、メモリスティック、フロッピディスク、機械的にエンコードされたデバイス、例えば、パンチカード又は命令を記録した溝内の隆起構造、及び前述したものの任意の適した組み合わせを含む。コンピュータ可読記憶媒体は、本明細書において使用される場合、無線波又は他の自由に伝播する電磁波、導波路又は他の送信媒体を通して伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、又はワイヤを通して送信される電気信号等の一時的信号それ自体とは解釈されるべきではない。
【0070】
本明細書において説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体から、それぞれのコンピューティング/処理デバイスに、又は、ネットワーク、例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク及び/又はワイヤレスネットワークを介して、外部コンピュータ又は外部記憶デバイスに、ダウンロードすることができる。ネットワークは、銅送信ケーブル、光送信ファイバ、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ及び/又はエッジサーバを含んでよい。各コンピューティング/処理デバイス内のネットワークアダプタカード又はネットワークインターフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、当該コンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に記憶するために転送する。
【0071】
本発明の動作を実行するコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、又は1つ又は複数のプログラミング言語の任意の組み合わせで記述されたソースコード又はオブジェクトコードのいずれかであってよく、1つ又は複数のプログラミング言語は、Smalltalk(登録商標)、C++等のようなオブジェクト指向プログラミング言語、及び「C」プログラミング言語又は同様のプログラミング言語等の手続き型プログラミング言語を含む。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に実行されてもよいし、スタンドアロンソフトウェアパッケージとしてユーザのコンピュータ上で部分的に実行されてもよいし、部分的にユーザのコンピュータ上で、かつ、部分的にリモートコンピュータ上で実行されてもよいし、又はリモートコンピュータ又はサーバ上で完全に実行されてもよい。後者のシナリオでは、リモートコンピュータが、ローカルエリアネットワーク(LAN)又はワイドエリアネットワーク(WAN)を含む任意のタイプのネットワークを介してユーザのコンピュータに接続されてもよいし、又はその接続が、(例えば、インターネットサービスプロバイダを使用してインターネットを介して)外部コンピュータに対して行われてもよい。幾つかの実施形態では、例えば、プログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)、又はプログラマブルロジックアレイ(PLA)を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用することによってコンピュータ可読プログラム命令を実行して、電子回路をパーソナライズしてよい。
【0072】
本発明の態様は、本明細書において、本発明の実施形態に係る方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図及び/又はブロック図を参照して説明されている。フローチャート図及び/又はブロック図の各ブロック、及びフローチャート図及び/又はブロック図におけるブロックの組み合わせは、コンピュータ可読プログラム命令によって実装することができることが理解されよう。
【0073】
これらのコンピュータ可読プログラム命令を汎用コンピュータ、専用コンピュータ、又は他のプログラマブルデータ処理装置のプロセッサに提供して機械を生成することができ、それにより、コンピュータ又は他のプログラマブルデータ処理装置のプロセッサを介して実行される命令が、フローチャート及び/又はブロック図の単数又は複数のブロックで指定された機能/動作を実装する手段を作成するようになる。また、これらのコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体に記憶することができ、当該命令は、コンピュータ、プログラマブルデータ処理装置、及び/又は他のデバイスに対し、特定の方法で機能するよう命令することができ、それにより、命令を記憶したコンピュータ可読記憶媒体は、フローチャート及び/又はブロック図の単数又は複数のブロックで指定された機能/動作の態様を実装する命令を含む製品を含むようになる。
【0074】
また、コンピュータ可読プログラム命令を、コンピュータ、他のプログラマブルデータ処理装置、又は他のデバイスにロードして、一連の動作段階をコンピュータ、他のプログラマブル装置又は他のデバイス上で実行させ、コンピュータ実装プロセスを生成することができ、それにより、コンピュータ、他のプログラマブル装置、又は他のデバイス上で実行される命令は、フローチャート及び/又はブロック図の単数又は複数のブロックで指定された機能/動作を実装するようになる。
【0075】
図におけるフローチャート及びブロック図は、本発明の様々な実施形態に係るシステム、方法、及びコンピュータプログラム製品の可能な実装のアーキテクチャ、機能、及び動作を示す。これに関して、フローチャート又はブロック図における各ブロックは、指定される論理機能を実装する1つ又は複数の実行可能命令を含む命令のモジュール、セグメント、又は部分を表し得る。幾つかの代替的な実装では、ブロックに記載される機能が、図に記載される順序とは異なる順序で行われ得る。例えば、連続して示されている2つのブロックは、実際には、実質的に同時に実行されてもよく、又はブロックは、場合によって、関与する機能に依存して逆の順序で実行されてもよい。ブロック図及び/又はフローチャート図の各ブロック、及びブロック図及び/又はフローチャート図におけるブロックの組み合わせは、指定された機能又は動作を実行するか、又は専用ハードウェア及びコンピュータ命令の組み合わせを実行する専用ハードウェアベースシステムによって実装することができることにも留意されたい。
【0076】
本発明の様々な実施形態の説明は、例示の目的で提示されたが、網羅的であることも、又は開示された実施形態に限定することも意図されていない。説明された実施形態の範囲から逸脱することなく、当業者には多くの修正及び変形が明らかとなるであろう。本明細書において使用される術語は、実施形態の原理、実用的な応用、又は市場に見られる技術に対する技術的改善を最も良好に説明するように、又は、他の当業者が本明細書において開示された実施形態を理解することを可能にするように選択された。
図1
図2
図3
図4
図5
図6
図7
図8
【手続補正書】
【提出日】2024-05-08
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
処理ユニットによって、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する命令を受け取る段階、ここで、a、b、及びcは、一組のオペランドとして提供される;
第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する段階;
第2の乗累算ユニットによって、pを使用して前記バイナリ乗算の結果を更新することによって第1の中間結果を計算する段階;
cで第3の乗累算ユニットの累算器を初期化する段階;
前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する段階;
加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する段階;及び
前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する段階
を備える、コンピュータ実装方法。
【請求項2】
前記加算器は、前記第1の乗累算ユニットにおける乗算器よりも幅広のビット幅を有する、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記加算器の前記ビット幅は、前記第1の乗累算ユニットにおける前記乗算器の前記ビット幅よりも1多い、請求項2に記載のコンピュータ実装方法。
【請求項4】
cで前記第3の乗累算ユニットの前記累算器を初期化する段階は、前記累算器の下位ビットにcの値を記憶する段階を有する、請求項1に記載のコンピュータ実装方法。
【請求項5】
前記第1の中間結果を計算する段階は、事前計算された定数でa*bの前記バイナリ乗算の前記結果の第2のバイナリ乗算を実行する段階を有する、請求項1から4のいずれか一項に記載のコンピュータ実装方法。
【請求項6】
前記第2の中間結果を計算する段階は、前記第1の中間結果の上位ビットを係数pと乗算する段階を有し、pの値は、前記命令を呼び出す前に前記第3の乗累算ユニットに記憶される、請求項5に記載のコンピュータ実装方法。
【請求項7】
前記出力が0及びpの間であることを確実にするために加算器の前記出力を補正する段階を更に備える、請求項1から4のいずれか一項に記載のコンピュータ実装方法。
【請求項8】
一組のレジスタ;及び
各々が乗算器及び累算器を含む3つの乗累算ユニットを有する一組の乗累算ユニット
を備え、前記一組の乗累算ユニットは、前記一組のレジスタに結合され、前記一組の乗累算ユニットは、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する方法を実行するように構成されており、ここで、a、b、及びcは、前記一組のレジスタにおいて提供されており、前記融合モジュラ積和演算を実行することは、
第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する段階;
第2の乗累算ユニットによって、pを使用して前記バイナリ乗算の結果を更新することによって第1の中間結果を計算する段階;
cで第3の乗累算ユニットからの累算器を初期化する段階;
前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する段階;
加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する段階;及び
前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する段階
を備える、システム。
【請求項9】
前記加算器は、前記第1の乗累算ユニットにおける乗算器よりも幅広のビット幅を有する、請求項8に記載のシステム。
【請求項10】
前記加算器の前記ビット幅は、前記第1の乗累算ユニットにおける前記乗算器の前記ビット幅よりも1多い、請求項9に記載のシステム。
【請求項11】
cで前記第3の乗累算ユニットからの前記累算器を初期化する段階は、前記累算器の下位ビットにcの値を記憶する段階を有する、請求項8に記載のシステム。
【請求項12】
前記第1の中間結果を計算する段階は、事前計算された定数でa*bの前記バイナリ乗算の前記結果の第2のバイナリ乗算を実行することを有する、請求項8から11のいずれか一項に記載のシステム。
【請求項13】
前記第2の中間結果を計算する段階は、前記第1の中間結果の上位ビットを係数pと乗算する段階を有し、pの値は、前記融合モジュラ積和演算を実行する命令を呼び出す前に前記第3の乗累算ユニットに記憶される、請求項12に記載のシステム。
【請求項14】
前記出力が0及びpの間であることを確実にするために前記加算器の前記出力を補正する段階を更に備える、請求項8から11のいずれか一項に記載のシステム。
【請求項15】
コンピュータ実行可能命令を備えるコンピュータプログラムであって、前記コンピュータ実行可能命令は、プロセッサによって実行されると、前記プロセッサに、d=((a*b)+c)%pを計算する融合モジュラ積和演算を実行する方法を実行させ、ここで、a、b、及びcは、オペランドとして提供され、前記融合モジュラ積和演算を実行することは、
第1の乗累算ユニットによって、a*bを計算するバイナリ乗算を計算する手順;
第2の乗累算ユニットによって、pを使用して前記バイナリ乗算の結果を更新することによって第1の中間結果を計算する手順;
cで第3の乗累算ユニットからの累算器を初期化する手順;
前記第3の乗累算ユニットによって、前記第1の中間結果及びcを使用して第2の中間結果を計算する手順;
加算器によって、前記バイナリ乗算の前記結果の一部分から前記第2の中間結果の一部分を減算する手順;及び
前記融合モジュラ積和演算の結果として、前記加算器の出力を出力する手順
を備える、コンピュータプログラム。
【請求項16】
前記加算器のビット幅は、前記第1の乗累算ユニットにおける乗算器のビット幅よりも1多い、請求項15に記載のコンピュータプログラム。
【請求項17】
cで前記第3の乗累算ユニットからの前記累算器を初期化する手順は、前記累算器の下位ビットにcの値を記憶する手順を有する、請求項15に記載のコンピュータプログラム。
【請求項18】
前記第1の中間結果を計算する手順は、事前計算された定数でa*bの前記バイナリ乗算の前記結果の第2のバイナリ乗算を実行する手順を有する、請求項15から17のいずれか一項に記載のコンピュータプログラム。
【請求項19】
前記第2の中間結果を計算する手順は、前記第1の中間結果の上位ビットを係数pと乗算する手順を有し、pの値は、前記融合モジュラ積和演算を実行する命令を呼び出す前に前記第3の乗累算ユニットに記憶される、請求項18に記載のコンピュータプログラム。
【請求項20】
前記出力が0及びpの間であることを確実にするために前記加算器の前記出力を補正する手順を更に備える、請求項15から17のいずれか一項に記載のコンピュータプログラム。
【国際調査報告】