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

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

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

特表2024-516387モジュラ算術演算を加速する方法、システム、プログラム
<>
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図1
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図2
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図3
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図4
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図5
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図6A
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図6B
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図7
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図8
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図9
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図10
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図11
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図12
  • 特表-モジュラ算術演算を加速する方法、システム、プログラム 図13
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-04-15
(54)【発明の名称】モジュラ算術演算を加速する方法、システム、プログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20240408BHJP
【FI】
G09C1/00 620A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023564180
(86)(22)【出願日】2022-03-22
(85)【翻訳文提出日】2023-10-19
(86)【国際出願番号】 IB2022052580
(87)【国際公開番号】W WO2022229724
(87)【国際公開日】2022-11-03
(31)【優先権主張番号】17/242,351
(32)【優先日】2021-04-28
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
(71)【出願人】
【識別番号】390009531
【氏名又は名称】インターナショナル・ビジネス・マシーンズ・コーポレーション
【氏名又は名称原語表記】INTERNATIONAL BUSINESS MACHINES CORPORATION
【住所又は居所原語表記】New Orchard Road, Armonk, New York 10504, United States of America
(74)【代理人】
【識別番号】100112690
【弁理士】
【氏名又は名称】太佐 種一
(74)【代理人】
【識別番号】100120710
【弁理士】
【氏名又は名称】片岡 忠彦
(72)【発明者】
【氏名】ラオ、ラジャット
(57)【要約】
体演算間の重度のパイプライン処理を伴う一般的体における楕円曲線暗号スカラー乗算を対象にしたモジュラ算術演算を加速する方法、システムを提供する。モジュラ・ハードウェア・ブロックによって処理されるデータ内のオペランドのビット幅を決定し、オペランドのビット幅がモジュラ・ハードウェア・ブロックの固定ビット幅に一致するかどうかをチェックし、一致が存在するということに応答して、モジュラ・ハードウェア・ブロックがオペランドを処理し、不一致が存在するということに応答して、モジュラ・ハードウェア・ブロックの固定ビット幅によって適応されるようにオペランドが変更される。
【特許請求の範囲】
【請求項1】
コンピュータ実装方法であって、
モジュラ・ハードウェア・ブロックによって処理されるデータ内のオペランドのビット幅を決定することと、
前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの固定ビット幅の間に不一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することと、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることとを含む、コンピュータ実装方法。
【請求項2】
前記モジュラ・ハードウェア・ブロックによって処理される前記データ内の前記オペランドの前記ビット幅を決定することが、前記オペランドを解析して前記ビット幅を取得することを含む、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの前記固定ビット幅の間に一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることをさらに含み、前記一致が、前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することによって決定される、請求項1に記載のコンピュータ実装方法。
【請求項4】
前記モジュラ・ハードウェア・ブロックが第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に備える、請求項1に記載のコンピュータ実装方法。
【請求項5】
前記モジュラ・ハードウェア・ブロックが、一連の乗累算器を備え、その後に修正ブロックが続く、請求項1に記載のコンピュータ実装方法。
【請求項6】
前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することが、
前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応されるサイズに分割することであって、前記分割が、前記ビット幅が前記固定ビット幅より大きいということに応答する、前記分割することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応される前記サイズに増やすことであって、前記増やすことが、前記ビット幅が前記固定ビット幅より小さいということに応答する、前記増やすこととを含む、請求項1に記載のコンピュータ実装方法。
【請求項7】
前記固定ビット幅が、処理するための個別のオペランドを保持するハードウェア構造の固定サイズである、請求項1に記載のコンピュータ実装方法。
【請求項8】
コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサとを備えているシステムであって、前記コンピュータ可読命令が、前記1つまたは複数のプロセッサを制御して、
モジュラ・ハードウェア・ブロックによって処理されるデータ内のオペランドのビット幅を決定することと、
前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの固定ビット幅の間に不一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することと、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることとを含む動作を実行する、システム。
【請求項9】
前記モジュラ・ハードウェア・ブロックによって処理される前記データ内の前記オペランドの前記ビット幅を決定することが、前記オペランドを解析して前記ビット幅を取得することを含む、請求項8に記載のシステム。
【請求項10】
前記1つまたは複数のプロセッサが、前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの前記固定ビット幅の間に一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることをさらに含む動作を実行し、前記一致が、前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することによって決定される、請求項8に記載のシステム。
【請求項11】
前記モジュラ・ハードウェア・ブロックが第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に備える、請求項8に記載のシステム。
【請求項12】
前記モジュラ・ハードウェア・ブロックが、一連の乗累算器を備え、その後に修正ブロックが続く、請求項8に記載のシステム。
【請求項13】
前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することが、
前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応されるサイズに分割することであって、前記分割が、前記ビット幅が前記固定ビット幅より大きいということに応答する、前記分割することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応される前記サイズに増やすことであって、前記増やすことが、前記ビット幅が前記固定ビット幅より小さいということに応答する、前記増やすこととを含む、請求項8に記載のシステム。
【請求項14】
前記固定ビット幅が、処理するための個別のオペランドを保持するハードウェア構造の固定サイズである、請求項8に記載のシステム。
【請求項15】
プログラム命令が具現化されているコンピュータ可読ストレージ媒体を備えているコンピュータ・プログラム製品であって、前記プログラム命令が、1つまたは複数のプロセッサによって実行可能であり、前記1つまたは複数のプロセッサに、
モジュラ・ハードウェア・ブロックによって処理されるデータ内のオペランドのビット幅を決定することと、
前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの固定ビット幅の間に不一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することと、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることとを含む動作を実行させる、コンピュータ・プログラム製品。
【請求項16】
前記モジュラ・ハードウェア・ブロックによって処理される前記データ内の前記オペランドの前記ビット幅を決定することが、前記オペランドを解析して前記ビット幅を取得することを含む、請求項15に記載のコンピュータ・プログラム製品。
【請求項17】
前記1つまたは複数のプロセッサが、前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの前記固定ビット幅の間に一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることをさらに含む動作を実行し、前記一致が、前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することによって決定される、請求項15に記載のコンピュータ・プログラム製品。
【請求項18】
前記モジュラ・ハードウェア・ブロックが第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に備え、その後に修正ブロックが続く、請求項15に記載のコンピュータ・プログラム製品。
【請求項19】
前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することが、
前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応されるサイズに分割することであって、前記分割が、前記ビット幅が前記固定ビット幅より大きいということに応答する、前記分割することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応される前記サイズに増やすことであって、前記増やすことが、前記ビット幅が前記固定ビット幅より小さいということに応答する、前記増やすこととを含む、請求項15に記載のコンピュータ・プログラム製品。
【請求項20】
前記固定ビット幅が、処理するための個別のオペランドを保持するハードウェア構造の固定サイズである、請求項15に記載のコンピュータ・プログラム製品。
【請求項21】
スカラー乗算のためのモジュラ・ハードウェア・ブロックを形成するコンピュータ実装方法であって、
第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に結合することと、
修正ブロックの入力を前記第3の乗累算器に結合することとを含む、コンピュータ実装方法。
【請求項22】
前記第1、前記第2、および前記第3の乗累算器の各々が、累算器ブロックに結合された乗算ブロックを備え、前記乗算ブロックが固定ビット幅を有する、請求項21に記載のコンピュータ実装方法。
【請求項23】
データ配列が前記第1の乗累算器に結合される、請求項21に記載のコンピュータ実装方法。
【請求項24】
モジュールが前記モジュラ・ハードウェア・ブロックに結合され、前記モジュールが、前記第1の乗累算器の固定ビット幅に適応するようにデータ内のオペランドを変更するように構成される、請求項21に記載のコンピュータ実装方法。
【請求項25】
スカラー乗算のためのモジュラ・ハードウェア・ブロックであって、
直列に結合され、累算器ブロックに結合された乗算ブロックをそれぞれ備えている、第1の乗累算器、第2の乗累算器、および第3の乗累算器であって、前記乗算ブロックが固定ビット幅を有する、前記第1の乗累算器、第2の乗累算器、および第3の乗累算器と、
前記第3の乗累算器に結合された修正ブロックと、
前記第1の乗累算器に結合されたデータ配列と、
前記データ配列に結合されたモジュールであって、前記固定ビット幅によって適応されるようにデータを変更するように構成される、前記モジュールとを備える、モジュラ・ハードウェア・ブロック。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、一般に、コンピュータ・システムに関し、より詳細には、楕円曲線暗号を含んでいるモジュラ算術演算を加速するためのパイプライン化されたハードウェアのために構成されて配置されたコンピュータ実装方法、コンピュータ・システム、およびコンピュータ・プログラムに関する。
【背景技術】
【0002】
楕円曲線暗号は、有限体上の楕円曲線の代数構造に基づく公開鍵暗号のための手法である。楕円曲線暗号は、同等のセキュリティを提供するために、単純なガロア体に基づく暗号などの非楕円曲線暗号によって使用される鍵より小さい鍵を可能にする。数学では、有限体またはガロア体は、有限の数の要素を含む体である。すべての体と同様に、有限体は、乗算、加算、減算、および除算の演算が定義された集合であり、特定の基本ルールを満たす。有限体の最も一般的な例は、pが素数であるとき、整数mod pによって与えられる。楕円曲線は、鍵共有、デジタル署名、疑似ランダム発生器、および他のタスクに適用可能である。楕円曲線は、鍵共有を対称暗号化方式と組み合わせることによって、間接的に暗号化に使用され得る。楕円曲線暗号は、モジュラ算術論理演算ユニットを使用する。
【0003】
数学では、モジュラ演算は、モジュラスと呼ばれる特定の値に達するときに数が「最初に戻る」、整数の演算の手順である。コンピューティングにおいて、モジュラ算術論理演算ユニットは、(加算、減算、および乗算を含む)体演算を実行する組合せデジタル回路であり、計算負荷が大きい。モジュラ演算を実行するモジュラ算術論理演算ユニットのハードウェアは、同じサイズを有するデータのみに適応する固定サイズに限られる。モジュラ算術論理演算ユニットの使用における改善が必要とされる。特に、モジュラ算術論理演算ユニットによって適応されるデータの限られたサイズに対する改善が必要とされる。
【発明の概要】
【0004】
本発明の実施形態は、例えば、体演算間の重度のパイプライン処理を伴う一般的体における楕円曲線暗号スカラー乗算を含む、モジュラ算術演算を加速するパイプライン化されたハードウェアのためのコンピュータ実装方法を対象にする。非限定的な例示的コンピュータ実装方法は、モジュラ・ハードウェア・ブロックによって処理されるデータ内のオペランドのビット幅を決定することと、オペランドのビット幅がモジュラ・ハードウェア・ブロックの固定ビット幅に一致するかどうかをチェックすることとを含む。この方法は、一致が存在するということに応答して、モジュラ・ハードウェア・ブロックにオペランドを処理させることと、不一致が存在するということに応答して、モジュラ・ハードウェア・ブロックの固定ビット幅によって適応されるようにオペランドを変更することと、モジュラ・ハードウェア・ブロックに変更されたオペランドを処理させることとをも含む。本発明の1つまたは複数の実施形態は、体演算間の重度のパイプライン処理を伴う一般的体における楕円曲線暗号スカラー乗算のためのシステムを対象にする。システムの非限定的な例は、コンピュータ可読命令を含んでいるメモリ、およびコンピュータ可読命令を実行するための1つまたは複数のプロセッサを含む。コンピュータ可読命令は、上記の方法を実施し得る。本発明の1つまたは複数の実施形態は、体演算間の重度のパイプライン処理を伴う一般的体における楕円曲線暗号スカラー乗算のためのコンピュータ・プログラム製品を対象にし、コンピュータ・プログラム製品は、プログラム命令が具現化されているコンピュータ可読ストレージ媒体を含む。これらのプログラム命令は、プロセッサに上記の方法を実行させるために、プロセッサによって実行可能である。
【0005】
この方法は、異なるビット幅を有するオペランドを含んでいるデータの異なるセットに対して、同じモジュラ・ハードウェア・ブロック上でスカラー乗算を効率的に実行することによって、楕円曲線暗号スカラー乗算のための既知の方法を上回る改善を実現することができる。データの各セットは、固定ビット幅を有する同じモジュラ・ハードウェア・ブロックによって処理するために効率的に変更されるが、データの元のセットは、固定ビット幅に一致しないビット幅を有するオペランドを含む。
【0006】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、モジュラ・ハードウェア・ブロックによって処理されるデータ内のオペランドのビット幅を決定することは、オペランドを解析してビット幅を取得することを含む。
【0007】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、オペランドのビット幅がモジュラ・ハードウェア・ブロックの固定ビット幅に一致するかどうかをチェックすることは、オペランドのビット幅をモジュラ・ハードウェア・ブロックの固定ビット幅と比較することを含む。したがって、異なるビット幅のオペランドを含むデータがさらなる変更のために認識されることを、有利に可能にする。
【0008】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、モジュラ・ハードウェア・ブロックは、第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に含む。1つまたは複数の実施形態は、3つの乗累算器(のみ)を有利に使用して、異なるビット幅を有するオペランドに効率的に適応する。
【0009】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、モジュラ・ハードウェア・ブロックは、一連の乗累算器を含み、その後に修正ブロックが続く。
【0010】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、モジュラ・ハードウェア・ブロックの固定ビット幅によって適応されるようにオペランドを変更することは、オペランドのビット幅をモジュラ・ハードウェア・ブロックの固定ビット幅と比較することと、ビット幅が固定ビット幅より大きいということに応答して、オペランドのビット幅を固定ビット幅によって適応されるサイズに分割することと、ビット幅が固定ビット幅より小さいということに応答して、オペランドのビット幅を固定ビット幅によって適応されるサイズに増やすこととを含む。したがって、異なるビット幅を有するオペランドが同じハードウェアによって適応されることを有利に可能にする。
【0011】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、固定ビット幅は、処理するための個別のオペランドを保持するハードウェア構造の固定サイズである。したがって、ハードウェア構造は、処理するための固定ビット幅のオペランドを両方とも保持する。
【0012】
本発明の実施形態は、スカラー乗算のためのモジュラ・ハードウェア・ブロックを形成するコンピュータ実装方法を対象にする。この方法は、第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に結合することと、修正ブロックの入力を第3の乗累算器に結合することとを含む。
【0013】
本発明は、データをそれぞれ処理する3つの乗累算器(のみ)を使用して、異なるビット幅を有するオペランドを含んでいるデータの異なるセットに対して、同じモジュラ・ハードウェア・ブロック上でスカラー乗算を効率的に実行することによる、楕円曲線暗号スカラー乗算のための既知の方法を上回る改善である。
【0014】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、第1の乗累算器、第2の乗累算器、および第3の乗累算器の各々は、累算器ブロックに結合された乗算ブロックを含み、累算器ブロックは固定ビット幅を有する。
【0015】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、データ配列が第1の乗累算器に結合される。
【0016】
上記または下記で説明される特徴のうちの1つまたは複数に加えて、または代替として、本発明のさらなる実施形態では、モジュールがモジュラ・ハードウェア・ブロックに結合され、このモジュールは、第1の乗累算器の固定ビット幅に適応するようにデータ内のオペランドを変更するように構成される。このモジュールは、異なるビット幅を有するオペランドが同じハードウェアによって適応されて処理されることを有利に可能にする。
【0017】
本発明の実施形態は、スカラー乗算のためのモジュラ・ハードウェア・ブロックを対象にする。モジュラ・ハードウェア・ブロックは、直列に結合され、累算器ブロックに結合された乗算ブロックをそれぞれ備えている、第1の乗累算器、第2の乗累算器、および第3の乗累算器を含み、乗算ブロックは固定ビット幅を有する。モジュラ・ハードウェア・ブロックは、第3の乗累算器に結合された修正ブロック、第1の乗累算器に結合されたデータ配列、およびデータ配列に結合されたモジュールを含み、このモジュールは、固定ビット幅によって適応されるようにデータを変更するように構成される。
【0018】
この方法は、異なるビット幅を有するオペランドを含んでいるデータの異なるセットに対して、同じモジュラ・ハードウェア・ブロック上でスカラー乗算を効率的に実行することによって、楕円曲線暗号スカラー乗算のための既知の方法を上回る改善を実現する。データの各セットは、固定ビット幅を有する同じモジュラ・ハードウェア・ブロックによって処理するために効率的に変更され得る。
【0019】
その他の技術的特徴および利点が、本発明の技術によって実現される。本発明の実施形態および態様は、本明細書において詳細に説明され、請求される主題の一部と見なされる。さらに良く理解するために、詳細な説明および図面を参照されたい。
【0020】
本明細書に記載された専有権の詳細は、本明細書の最後にある特許請求の範囲において具体的に指摘され、明確に請求される。本発明の実施形態の前述および他の特徴と長所は、添付の図面と併せて行われる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【0021】
図1】本発明の1つまたは複数の実施形態と共に使用するための例示的なコンピュータ・システムのブロック図を示す図である。
図2】本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供すること、スケジュールすること、または実行すること、あるいはその組合せのためのシステムのブロック図を示す図である。
図3】本発明の1つまたは複数の実施形態に従って、例示的なモジュラ・ハードウェア・ブロックのブロック図を示す図である。
図4】本発明の1つまたは複数の実施形態に従って、モジュラ乗算の演算を例示する表1を示す図である。
図5】本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供すること、スケジュールすること、または実行すること、あるいはその組合せのためのコンピュータ実装プロセスのフローチャートを示す図である。
図6A】本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供/実行するためのコンピュータ実装プロセスのフローチャートを示す図である。
図6B】本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供/実行するためのコンピュータ実装プロセスのフローチャートを示す図である。
図7】本発明の1つまたは複数の実施形態に従って、256ビット乗算の完了を例示する表2を示す図である。
図8】本発明の1つまたは複数の実施形態に従って、384ビット乗算の3つの部分の完了を例示する表3を示す図である。
図9】本発明の1つまたは複数の実施形態に従って、利用される素数幅として例示的なビット幅を例示する表4を示す図である。
図10】本発明の1つまたは複数の実施形態に従って、例示的なモジュールのブロック図を示す図である。
図11】本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供すること、スケジュールすること、または実行すること、あるいはその組合せのためのコンピュータ実装プロセスのフローチャートを示す図である。
図12】本発明の1つまたは複数の実施形態に従って、クラウド・コンピューティング環境を示す図である。
図13】本発明の1つまたは複数の実施形態に従って、抽象化モデル・レイヤを示す図である。
【発明を実施するための形態】
【0022】
本発明の1つまたは複数の実施形態は、パイプライン化されたハードウェア上でモジュラ乗算を実行するように配置され、構成されたコンピュータ実装方法、コンピュータ・システム、およびコンピュータ・プログラム製品を提供し、それによって、体演算間の重度のパイプライン処理を伴う一般的体における楕円曲線暗号スカラー乗算の加速を可能にする。
【0023】
楕円曲線暗号は、有限体において実行されるスカラー乗算を伴う。スカラー乗算演算は、点2倍算および点加算を伴う。これら2つの点演算の各々は、基礎になる有限体演算、すなわち加算、減算、乗算、および反転を使用して実現される。本発明の1つまたは複数の実施形態は、点2倍算演算および点加算演算において使用される、加算(add:addition)演算、減算(sub:subtraction)演算、乗算(mul:multiplication)演算などの有限体演算のスケジューリングに対処し、それによって、有限体演算の処理をより高速かつより効率的にする。
【0024】
体(例えば、素数2521-1の整数モジュロの体)において、楕円曲線暗号演算が実行される。スカラー乗算演算は、楕円曲線暗号における基本演算である。スカラー乗算は、曲線上の点を受け取り、繰り返される加算によって、第1の点の「k」倍である別の点を生み出す。スカラー乗算は、一連の点加算演算および点2倍算演算を実行する。本明細書において述べたように、加算、減算、および乗算を含む体演算は、計算負荷が大きい。本発明の1つまたは複数の実施形態は、体算術論理演算ユニットを最適化することによって、およびパイプライン化されて(最適に)スケジュールされた体演算を使用することによって、加速を実現するように構成される。1つまたは複数の実施形態は、モジュラ算術論理演算ユニットを使用して、最小の時間量で楕円曲線暗号スカラー乗算を完了する演算の最適なスケジュールを生成する。モジュラ演算で使用されている素数への参照は、モジュラ演算の基礎になるモジュラスとして解釈され得る。1つまたは複数の実施形態では、制限ではなく説明の目的で素数が示されることがあるが、モジュラ演算は、素数に制限されるよう意図されていない。むしろ、本発明の1つまたは複数の実施形態によれば、ハードウェア設計は、任意の一般的な基礎になるモジュラスを使用してモジュラ演算を実行することができる。通常、ほとんどの応用は、このモジュラスを素数として含む。
【0025】
ここで図1を参照すると、本発明の1つまたは複数の実施形態に従って、コンピュータ・システム100が概して示されている。コンピュータ・システム100は、本明細書において説明されているように、さまざまな通信技術を利用する任意の数および組合せのコンピューティング・デバイスおよびネットワークを備えるか、または採用するか、あるいはその両方である、電子的コンピュータ・フレームワークであることができる。コンピュータ・システム100は、容易に拡大縮小可能で拡張可能なモジュール式であり、異なるサービスに変化する能力、または他の機能とは無関係に、一部の機能を再構成する能力を有することができる。コンピュータ・システム100は、例えば、サーバ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、またはスマートフォンであることができる。一部の例では、コンピュータ・システム100は、クラウド・コンピューティング・ノードであることができる。コンピュータ・システム100は、コンピュータ・システムによって実行されているプログラム・モジュールなどの、コンピュータ・システムによって実行可能な命令との一般的な関連において説明され得る。通常、プログラム・モジュールは、特定のタスクを実行するか、または特定の抽象データ型を実装するルーチン、プログラム、オブジェクト、コンポーネント、論理、データ構造などを含むことができる。コンピュータ・システム100は、通信ネットワークを介してリンクされたリモート処理デバイスによってタスクが実行される、分散クラウド・コンピューティング環境内で実践され得る。分散クラウド・コンピューティング環境において、プログラム・モジュールは、メモリ・ストレージ・デバイスを含む、ローカルおよびリモートの両方のコンピュータ・システム・ストレージ媒体に配置され得る。
【0026】
図1に示されているように、コンピュータ・システム100は、1つまたは複数の中央処理装置(CPU:central processing units)101a、101b、101cなど(総称して、または一般的に、プロセッサ101と呼ばれる)を含んでいる。プロセッサ101は、シングルコア・プロセッサ、マルチコア・プロセッサ、コンピューティング・クラスタ、または任意の数の他の構成であることができる。プロセッサ101は、処理回路とも呼ばれ、システム・バス102を介してシステム・メモリ103およびさまざまな他のコンポーネントに結合される。システム・メモリ103は、読み取り専用メモリ(ROM:read only memory)104およびランダム・アクセス・メモリ(RAM:random access memory)105を含むことができる。ROM104は、システム・バス102に結合され、コンピュータ・システム100の特定の基本機能を制御する基本入出力システム(BIOS:basic input/output system)または統合拡張ファームウェア・インターフェイス(UEFI:Unified Extensible Firmware Interface)のようなその後継を含むことができる。RAMは、プロセッサ101によって使用するためにシステム・バス102に結合された読み取り書き込みメモリである。システム・メモリ103は、動作中の前述の命令の動作のための一時的メモリ空間を提供する。システム・メモリ103は、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ、フラッシュ・メモリ、または任意の他の適切なメモリ・システムを含むことができる。
【0027】
コンピュータ・システム100は、システム・バス102に結合された入出力(I/O:input/output)アダプタ106および通信アダプタ107を備えている。I/Oアダプタ106は、ハード・ディスク108または任意の他の類似するコンポーネントあるいはその両方と通信する小型コンピュータ・システム・インターフェイス(SCSI:small computer system interface)アダプタであることができる。I/Oアダプタ106およびハード・ディスク108は、本明細書では、マス・ストレージ110と総称される。
【0028】
コンピュータ・システム100上で実行するためのソフトウェア111は、マス・ストレージ110に格納され得る。マス・ストレージ110は、プロセッサ101によって読み取り可能な有形のストレージ媒体の例であり、ソフトウェア111は、プロセッサ101による実行のための命令として格納され、コンピュータ・システム100に、さまざまな図に関して本明細書において以下で説明されているように動作させる。本明細書では、コンピュータ・プログラム製品およびそのような命令の実行の例がさらに詳細に説明される。通信アダプタ107は、システム・バス102を、外部のネットワークであることができるネットワーク112と相互接続し、コンピュータ・システム100が他のそのようなシステムと通信できるようにする。1つの実施形態では、システム・メモリ103およびマス・ストレージ110の一部は、図1に示されたさまざまなコンポーネントの機能を調整するために、任意の適切なオペレーティング・システムであることができるオペレーティング・システムを集合的に格納する。
【0029】
ディスプレイ・アダプタ115およびインターフェイス・アダプタ116を介してシステム・バス102に接続されているように、その他の入出力デバイスが示されている。1つの実施形態では、アダプタ106、107、115、および116は、1つまたは複数のI/Oバスに接続されることが可能であり、I/Oバスは、中間バス・ブリッジ(図示せず)を介してシステム・バス102に接続される。ディスプレイ119(例えば、画面または表示モニタ)は、ディスプレイ・アダプタ115によってシステム・バス102に接続され、ディスプレイ・アダプタ115は、グラフィックス重視のアプリケーションおよびビデオ・コントローラの性能を改善するために、グラフィック・コントローラを含むことができる。キーボード121、マウス122、スピーカ123などは、インターフェイス・アダプタ116を介してシステム・バス102に相互接続されることが可能であり、例えばインターフェイス・アダプタ116は、複数のデバイス・アダプタを単一の集積回路に統合するスーパーI/Oチップを含むことができる。ハード・ディスク・コントローラ、ネットワーク・アダプタ、およびグラフィックス・アダプタなどの周辺機器を接続するのに適したI/Oバスは、通常、PCI(Peripheral Component Interconnect)およびPCIe(Peripheral Component Interconnect Express)などの一般的なプロトコルを含む。したがって、図1で構成されているように、コンピュータ・システム100は、プロセッサ101の形態での処理能力と、システム・メモリ103およびマス・ストレージ110を含んでいるストレージ能力と、キーボード121およびマウス122などの入力手段と、スピーカ123およびディスプレイ119を含んでいる出力能力とを含む。
【0030】
一部の実施形態では、通信アダプタ107は、特に、インターネット、小型コンピュータ・システム・インターフェイスなどの任意の適切なインターフェイスまたはプロトコルを使用して、データを送信することができる。ネットワーク112は、特に、セルラー・ネットワーク、無線ネットワーク、広域ネットワーク(WAN:wide area network)、ローカル・エリア・ネットワーク(LAN:local area network)、またはインターネットであることができる。外部コンピューティング・デバイスは、ネットワーク112を介してコンピュータ・システム100に接続することができる。一部の例では、外部コンピューティング・デバイスは、外部Webサーバまたはクラウド・コンピューティング・ノードであることができる。
【0031】
図1のブロック図は、コンピュータ・システム100が図1に示されたコンポーネントのすべてを含むことになるということを示すよう意図されていないということが、理解されるべきである。むしろ、コンピュータ・システム100は、任意の適切なより少ないコンポーネントまたは図1に示されていない追加のコンポーネント(例えば、追加のメモリ・コンポーネント、組み込まれたコントローラ、モジュール、追加のネットワーク・インターフェイスなど)を含むことができる。さらに、コンピュータ・システム100に関して本明細書に記載された実施形態は、任意の適切な論理を使用して実装されてよく、論理は、本明細書で参照されるとき、種々の実施形態において、任意の適切なハードウェア(例えば、特に、プロセッサ、組み込みコントローラ、または特定用途向け集積回路)、ソフトウェア(例えば、特に、アプリケーション)、ファームウェア、またはハードウェア、ソフトウェア、およびファームウェアの任意の適切な組合せを含むことができる。
【0032】
図2は、本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供すること、スケジュールすること、または実行すること、あるいはその組合せによって、モジュラ乗算のパイプライン化されたハードウェア・アクセラレーションをもたらすためのシステム200のブロック図である。システム200は、1つまたは複数のコンピュータ・システム202を含んでいる。コンピュータ・システム202は、図1で説明されたコンピュータ・システム100の任意の要素および機能を含むことができる。コンピュータ・システム202は、点2倍算演算および点加算演算において使用される加算(add)演算、減算(sub)演算、乗算(mul)演算などの有限体演算のスケジューリングを実行することに加えて、モジュラ・ハードウェア・ブロックの動作を引き起こすように構成された、1つまたは複数のモジュール204を含むことができる。モジュール204は、最小の実行時間を達成するように体乗算演算および体加算/減算演算をスケジュールすることによって、点2倍算および点加算が単一の演算ユニット上で実行されることを引き起こす、(例えば、図3Aおよび3Bに示された)1つまたは複数のアルゴリズムを実装するか、または実行するか、あるいはその両方を行う。1つまたは複数の実施形態では、モジュール204は、最小の実行時間を達成するために、点2倍算および点加算が、モジュラ乗算を実行するモジュラ・ハードウェア・ブロック210上で実行されることを引き起こし、異なるビット幅を有するオペランドをもともと含んでいるデータに適用できる、1つまたは複数のアルゴリズムを実装するか、または実行するか、あるいはその両方を行う。
【0033】
図3は、本発明の1つまたは複数の実施形態に従って、例示的なモジュラ・ハードウェア・ブロック210のブロック図である。モジュラ・ハードウェア・ブロック210は、概して乗算ブロック302と呼ばれる3つの乗算ブロック302A、302B、302Cを含んでおり、各乗算ブロックは、概して累算器ブロック304と呼ばれるそれ自身の累算器ブロック304A、304B、304Cを含んでいる。各乗算ブロック302は、累算器ブロック304と共に、乗算および累算ユニット、乗累算器(multiplication accumulator)などとも呼ばれる乗累算器(MAC:multiplication-accumulator)を形成する。各乗算ブロック302は乗算器と呼ばれてよく、各累算器ブロックは累算器と呼ばれてよい。図3には、MAC1、MAC2、およびMAC3として指定された、乗算ブロック302および累算器ブロック304の3つのグループが直列に存在する。各乗算ブロック302は、128b幅(例えば、128ビット幅)とも呼ばれる128ビット(b)のブロックまたはチャンクのデータを受信して処理するように構造化される。各乗算ブロック302は、固定ビット幅(例えば、128ビット)を有する構造である。最後の乗算ブロック302Cおよびその累算器ブロック304Cの出力は、修正ブロック314に供給される。修正ブロック314は、2つの加算/減算ブロック310および312を直列に含んでいる。加算/減算ブロック310および312は、加算演算および減算演算を実行することができる。
【0034】
データ配列320は、オペランドまたはオペランド・データあるいはその両方と呼ばれることがあるデータを含み、このデータに対して演算が発生する。データ配列320の出力は、処理のために第1の乗算ブロック302Aに行く。モジュール204は、データ配列320から乗算ブロック302Aへのデータの出力を制御するように構成される。モジュール204は、データ配列320を操作するための命令または論理回路あるいはその両方を含むことができる。1つまたは複数の実施形態では、モジュール204は、コード配列またはデータ配列あるいはその両方320を含んでよい。1つまたは複数の実施形態では、モジュール204は、モジュラ・ハードウェア・ブロック210の一部であってよい。1つまたは複数の実施形態では、モジュール204は、同じ集積回路上でモジュラ・ハードウェア・ブロック210として実装され得る。
【0035】
乗算ブロック302A、302B、302C、累算器ブロック304A、304B、304C、ならびに加算/減算ブロック310および312は、本明細書において説明されるように実行し、機能するように、ラッチ、レジスタなどのメモリ・ストレージと共に組合せ論理で形成される。乗算ブロック302A、302B、302C、ならびに加算/減算ブロック310および312は、整数2進数に対して算術演算およびビット単位の演算を実行する組合せデジタル回路を含む。1つまたは複数の実施形態では、モジュラ・ハードウェア・ブロック210は、プロセッサ上に形成された論理回路およびメモリ・ストレージであってよい。累算器ブロック304A、304B、304Cは、コンピュータのCPU(中央処理装置)内の算術データおよび論理データの短期間の中間的格納用のレジスタであることができる。各数が加算されるにつれて、累算器内の数値が増加する。
【0036】
図2で説明されたモジュール204は、コンピュータ可読ストレージ媒体に格納される命令として、ハードウェア・モジュールとして、専用ハードウェア(例えば、特定用途向けハードウェア、特定用途向け集積回路(ASIC:application specific integrated circuits)、組み込みコントローラ、ハード配線された回路など)として、またはこれらの任意の1つまたは複数の組合せとして、実装され得る。例では、本明細書に記載されたモジュールは、ハードウェアおよびプログラミングの組合せであることができる。プログラミングは、有形のメモリに格納された、プロセッサによって実行可能な命令であることができ、ハードウェアは、それらの命令を実行するための処理回路(例えば、プロセッサ101)を含むことができる。したがって、システム・メモリは、処理回路によって実行された場合に本明細書に記載されたモジュールを実施するプログラム命令を格納することができる。例えば、実行可能な命令は、図1で説明されたように、1つまたは複数のプロセッサ101上で実行されるソフトウェア111として実装され得る。コンピュータ・システム100の要素は、本発明の1つまたは複数の実施形態に従って、コンピュータ・システム202内で使用されるか、またはコンピュータ・システム202に統合されるか、あるいはその両方であることができる。本明細書の他の例で説明される他の特徴および機能を含むために、他のモジュールが利用されることも可能である。代替的または追加的に、モジュールは、本明細書に記載された技術を実行するための、1つまたは複数の集積回路、特定用途向け集積回路(ASIC)、特定用途向け特殊プロセッサ(ASSP:application specific special processors)、フィールド・プログラマブル・ゲート・アレイ(FPGA:field programmable gate arrays)、または専用ハードウェアの前述の例の任意の組合せなどの、専用ハードウェアを含むことができる。
【0037】
当業者によって認識されるであろうように、モジュラ・ハードウェア・ブロック210は、バレット乗算またはモンゴメリ乗算を使用してモジュラ乗算を実行するように構成される。バレット・アルゴリズムおよびモンゴメリ・アルゴリズムは、両方とも事前計算を必要とし、3つの乗算段、1つの減算段、および1つの条件付き修正段を含む。モジュラ・ハードウェア・ブロック210によって実装されるバレット・アルゴリズムの例が、図4に示された表1に例示されている。図4では、表1はモジュラ乗算の6つの演算を示している。演算1は、データ配列320およびモジュール204によって実行される。1つまたは複数の実施形態では、演算1は、事前に決定されるか、あらかじめ決定されるか、あるいはその両方であってよい。演算2はMAC1によって実行され、演算3はMAC2によって実行され、演算4はMAC3によって実行される。演算5は、加算/減算ブロック310によって実行される。演算6は、加算/減算ブロック312によって実行される。図4では、「k」はビット幅であり、「a」および「b」はオペランドであり、「p」は、通常は素数(既知の定数)であるモジュラスであり、「μ」は、モジュラス「p」のみに依存する事前に計算された定数であり、大まかにモジュラス「p」の逆数の近似として解釈されることが可能であり、「res」は「a」および「b」の2進乗算であり、「r2」は、素数モジュラス「p」との「q2」の上位ビットの2進乗算の中間結果であり、「q2」は、「μ」との「res」の上位ビットの2進乗算の中間結果であり、「r」は、モジュラ乗算「a掛けるb mod p」の最終結果である。図4では、「lo」(ローまたは下位ビット)は、最下位ビット(LSB:least significant bit)から始まるkビット幅であり、「hi」(ハイまたは上位ビット)は、最上位ビット(MSB:most significant bit)から始まるkビット幅である。
【0038】
図5は、本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供すること、スケジュールすること、または実行すること、あるいはその組合せによって、モジュラ・ハードウェア・ブロック210によるモジュラ乗算のパイプラインのハードウェア・アクセラレーションをもたらすためのコンピュータ実装プロセス500のフローチャートである。図5のコンピュータ実装プロセス500は、図2に示されたシステム200を使用して実施され得る。したがって、コンピュータ実装プロセス500は、ここではシステム200を参照して説明される。
【0039】
ブロック502で、コンピュータ・システム202のモジュール204は、オペランドを含んでいるデータ(例えば、メモリ208に格納される点2倍算データ222および点加算データ224)を受信するように構成される。ブロック504で、モジュール204は、モジュラ・ハードウェア・ブロック210によるモジュラ乗算演算を必要とするデータ内のオペランドのビット幅もしくはビット幅サイズ、またはデータのオペランドの素数幅(サイズ)、あるいはその両方を決定するように構成される。モジュール204は、データを解析して、モジュラ・ハードウェア・ブロック210によって処理されるオペランドのビット幅を決定するように構成される。モジュール204は、オペランドを読み取ってビット幅を決定し得る。1つまたは複数の実施形態では、オペランドのビット幅は、あらかじめ決定され得る。
【0040】
ブロック506で、モジュール204は、データのオペランドのビット幅サイズまたは素数幅サイズあるいはその両方(これらは両方とも、ビット幅と呼ばれる)が、第1の乗算ブロック302Aの固定ビット幅(サイズ)/構造に一致するかどうかをチェックするように構成される。例えば、(第1の乗算ブロック302Aを含む)乗算ブロック302は、同じビット幅を有するオペランドに適応するために、固定ビット幅サイズまたは固定された構造あるいはその両方を有する。例えば、乗算ブロック302は、説明の目的で、128ビットの固定ビット幅で示されている。したがって、第1の乗算ブロック302Aに加えて、第2および第3の乗算ブロック302Bおよび302Cへの入力である各オペランド(例えば、オペランド「a」および「b」)は、固定ビット幅(例えば、128ビット)に一致するビット幅を有することになる。ビット幅の一致が存在する場合、フローがブロック512に進む。
【0041】
むしろ、データ内のオペランドのビット幅がモジュラ・ハードウェア・ブロック210の乗算ブロック302の固定ビット幅(例えば、128ビット)に一致しない場合、モジュール204は、ブロック508で、オペランドのビット幅のサイズ(例えば、ビット幅サイズまたは素数幅サイズあるいはその両方)を乗算ブロック302の固定ビット幅によって適応される/含まれるサイズに変更する方法を決定するように構成される。データのオペランドは、図9の表4に示されているように、さまざまなビット幅を有することができる。データの1つのセットは、モジュラ・ハードウェア・ブロック210が処理するための特定のビット幅を有するオペランドを含むことができる。データの別のセットは、モジュラ・ハードウェア・ブロック210によって処理するための異なるビット幅を有するオペランドを含むことができる。図9に示されているように、オペランド(例えば、オペランド「a」および「b」)のビット幅は、例えば、64ビット幅、128ビット幅、256ビット幅、384ビット幅、512ビット幅、768ビット幅、1024ビット幅などであることができる。モジュール204は、乗算ブロック302の固定ビット幅より大きいビット幅を有するオペランド、および乗算ブロック302の固定ビット幅より小さいビット幅を有するオペランドを変更するように構成される。オペランドのビット幅が乗算ブロック302の固定ビット幅より小さい場合、モジュール204は、オペランドの先頭ビットまたは最下位ビットをゼロ(0)で埋めるように構成される。例えば、オペランドが64ビットである場合、モジュール204は、オペランドを処理するために第1の乗算ブロック302Aに送信する前に、128ビットに達するまで各オペランドをゼロで埋めるように構成される。一方、オペランドのビット幅が乗算ブロック302の固定ビット幅より大きい場合、モジュール204は、オペランドのビット幅が固定ビット幅の正確な倍数である(すなわち、余りがない)かどうかを判定するように構成され、正確な倍数である場合、モジュール204は、オペランドごとに等しい部分または係数(すなわち、商)を決定するために、固定ビット幅のサイズでオペランドのビット幅のサイズを割るように構成され、それに応じてモジュール204は、等しい部分または係数あるいはその両方を、処理するためにモジュラ・ハードウェア・ブロック210に送信する。例えば、各オペランドが512ビット幅を有し、第1の乗算ブロック302Aの固定ビット幅が128ビットである場合、モジュール204は、商が正確に4であるということを決定し、各128ビットで、オペランドごとにデータの4つのブロック/チャンクを第1の乗算ブロック302Aに送信するように構成される。オペランドのビット幅が固定ビット幅の正確な倍数でない(すなわち、余りがある)場合、モジュール204は、オペランドをデータのブロック/チャンクに分割し、最後のブロック/チャンクの先頭ビットまたは最下位ビットあるいはその両方をゼロ(0)で埋めるように構成される。
【0042】
ブロック510で、モジュール204は、オペランドのビット幅または素数幅あるいはその両方のサイズを、第1の乗算ブロック302A(ならびに第2および第3の乗算ブロック302Bおよび302C)の固定ビット幅/構造によって適応される(例えば、一致する)サイズ(例えば、128ビット幅)のブロック/チャンクに変更するように構成される。ブロック512で、モジュール204は、第1の乗算ブロック302Aの固定ビット幅/構造に一致するブロック/チャンクでのデータのオペランドを第1の乗算ブロック302Aに入力するか、またはそのようなオペランドが第1の乗算ブロック302Aに入力されることを引き起こすか、あるいはその両方を実行するように構成され、それによって、データのオペランドのビット幅が乗算ブロック302の固定ビット幅/構造に(もともと)一致しない場合でも、モジュラ・ハードウェア・ブロック210の動作を開始するか、または引き起こすか、あるいはその両方を実行する。モジュール204は、データ内のオペランドの元のビット幅が異なっていた場合でも、オペランド(例えば、オペランド「a」および「b」)ごとに正しいビット幅でブロック/チャンクを入力する。
【0043】
図6Aおよび6Bは、ともに、本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供/実行することによって、モジュラ・ハードウェア・ブロック210によるモジュラ乗算のパイプラインのハードウェア・アクセラレーションをもたらすためのコンピュータ実装プロセス600のフローチャートを示している。図6Aおよび6Bのコンピュータ実装プロセス600は、図2に示されたシステム200およびモジュラ・ハードウェア・ブロック210を使用して実施され得る。したがって、コンピュータ実装プロセス600は、ここではシステム200およびモジュラ・ハードウェア・ブロック210を参照して説明される。初期化中に、MAC2の特に乗算ブロック302Bが、「μ」の値をオペランドのうちの1つとして受信して格納し、「μ」は、本明細書において説明されるように、モジュラス「p」のみに依存する事前に計算された定数である。同様に、初期化中に、MAC3の特に乗算ブロック302Cが、「p」の値をオペランドのうちの1つとして受信して格納し、「p」は素数である。「μ」および「p」の値は、複数の演算に利用される定数であり、それぞれMAC2およびMAC3において、初期化されて格納される。「μ」および「p」の値は、(例えば、データ配列320を介して)初期化中にモジュール204から供給され得る。新しい素数モジュラスは、モジュラ乗算演算が開始する前に、これら2つ(「μ」および「p」の値)が更新されるということを意味する。
【0044】
コンピュータ実装プロセス600のブロック602で、モジュラ・ハードウェア・ブロック210は、第1の乗算ブロック302Aの固定ビット幅/構造のサイズでオペランド(例えば、オペランド「a」および「b」)の入力を受信するように構成される。例えば、モジュラ・ハードウェア・ブロック210は、(図5で説明されたように)モジュール204が第1の乗算ブロック302Aに入力したか、または入力されることを引き起こしたか、あるいはその両方であるデータのオペランドのブロック/チャンクを受信することができる。1つまたは複数の実施形態では、モジュール204は、データ配列320に、オペランド(データ)のブロック/チャンクを第1の乗算ブロック302Aに出力するように指示するか、または出力させるか、あるいはその両方を実行してよい。
【0045】
ブロック604で、モジュラ・ハードウェア・ブロック210の乗算ブロック302Aは、部分積を接続された累算器ブロック304Aに格納しながら、受信されたオペランド(例えば、オペランド「a」および「b」)の乗算を開始するように構成される。場合によっては、オペランドは128ビットであることができ、乗算ブロック302Aは、2つのオペランド(例えば、128ビットのオペランド「a」および128ビットのオペランド「b」)を乗算し、その結果を累算器ブロック304Aに渡すことができる。場合によっては、オペランドは、乗算ブロック302Aの固定ビット幅より大きくてよく、乗算ブロック302Aは、(モジュール204による変更の後に)例えば128ビット幅をそれぞれ有するオペランドのビットのブロック/チャンクを受信する。それに応じて、乗算ブロック302Aは、2つのオペランドの最初の128ビットを一緒に乗算し、例えば、オペランド「a」の最初の128ビットのブロック/チャンクに、オペランド「b」の最初の128ビットのブロック/チャンクを掛け、次に、256ビット幅の部分積を累算器ブロック304Aに渡すように構成される。乗算ブロック302Aが第2の部分積を準備している間に、累算器ブロック304Aが第1の部分積を格納する。累算器ブロック304Aは、第2の部分積を乗算ブロック302Aから受信したときに、第2の部分積を格納し、必要に依って第1の部分積に加算するように構成される。このプロセスは、オペランド「a」および「b」の最後のブロック/チャンクが乗算ブロック302Aによって処理され、その後、累算器ブロック304Aによって処理されるまで続く。乗算ブロック302Aおよびその累算器ブロック304Aの結果は、256ビット幅であり、完全な積である。言い換えると、乗算ブロック302Aおよび累算器ブロック304AであるMAC1は、図4の演算2(res=a*b)を実行することに対応する演算a*bの結果(res)を出力し、この出力が、(一部分において)MAC2に渡される。具体的には、ブロック606で、モジュラ・ハードウェア・ブロック210の累算器ブロック304Aは、オペランドの積の上位ビット(「hi」)をMAC2に出力するように構成され、一方、下位ビット(「lo」)が修正ブロック314に渡される。さらに、累算器ブロック304によって処理することに関して、本明細書の図7で、後で説明がなされる。
【0046】
ブロック608で、モジュラ・ハードウェア・ブロック210の乗算ブロック302Bは、MAC1からの結果(res(1+hi))(具体的には、累算器ブロック304Aから出力された上位ビット)を処理するように構成される。MAC1は、上位ビットres(1+hi)のみをMAC2に転送し、次にMAC2は、演算3を計算する。ブロック610で、累算器ブロック304Bは、乗算ブロック302Bからの部分積を累算または格納し、出力をMAC3に提供するように構成される。乗算ブロック302Bおよび累算器ブロック304BであるMAC2は、q2=res(1+hi)*μである図4の演算3を実行し、この出力(q2)をMAC3に提供するように構成される。res(1+hi)がMAC1によって提供され、初期化中に「μ」が受信されたことを思い出す。したがって、完全な積が終了するまで、累算器ブロック304Bで部分積が累算される間に、乗算ブロックがオペランド「res(1+hi)」にオペランド「μ」を掛ける。「res(1+hi)」が、MAC1からの「res」の上位ビットの値を示す表現であるということが、理解されるべきである。「(1+hi)」という表記は、「res」の上位ビットを選択することを指すインデックス表記であり、「hi」は、上位半分である、数値のビットの半分から成るとして定義される。「res」の場合、これは上位「k」ビットである。そのため、「1+hi」は、「res」の上位「k+1」ビットを選び出す。MAC2のハードウェアは、MAC1と同じであり、2つの数値の乗算を実行する。同様に、MAC2は、完全な積の上位ビットq2(1+hi)のみをMAC3に供給する。
【0047】
ブロック612で、モジュラ・ハードウェア・ブロック210の乗算ブロック302Cは、MAC2からの出力(例えば、q2(1+hi))(具体的には、累算器ブロック304Bから出力された上位ビット)を処理するように構成される。MAC2は、上位ビットq2(1+hi)のみをMAC3に供給し、MAC3は、その上位ビットq2(1+hi)に、初期化後にMAC2がローカルに格納した「p」を掛ける。ブロック614で、累算器ブロック304Cは、乗算ブロック302Bからの部分積を累算または格納し、出力を修正ブロック314に提供するように構成される。具体的には、MAC3は、r2=q2(1+hi)*pである図4の演算4を実行し、この出力を修正ブロック314に提供するように構成される。MAC3のハードウェアは、MAC1と同じであり、2つの数値の乗算を実行する。しかし、MAC1およびMAC2とは異なり、MAC3は下位ビットr2(lo+1)のみを修正ブロック314に供給する。MAC1、MAC2、およびMAC3は、同じハードウェアである。各累算器は、下位ビットから始まる乗算の出力を生成する。MAC3は、下位ビットを有効なビットとして出力する。MAC1およびMAC2も下位ビットを出力するが、それらの下位ビットを有効としてマーク付けしない。その後のブロック(MAC2またはMAC3)が、処理を開始するべきであるということを知るように、上位ビットが生成された後になって、初めて有効な信号がアサートされる。そのため、上位ビットまたは下位ビットは、制御論理および信号伝達を介して伝えられる。MAC1、MAC2、およびMAC3はそれぞれ、本明細書において説明されるように実行するための制御論理および信号伝達機能を有する。
【0048】
ブロック616で、モジュラ・ハードウェア・ブロック210の修正ブロック314は、MAC1から(具体的には、累算器ブロック304Aから)下位ビット(「res(lo+1)」)を受信して処理し、MAC3から(具体的には、累算器ブロック304Cから)下位ビットを受信して処理するように構成される。これによって、修正ブロック314がモジュラ・チェックのためのr=res(lo+1)-r2(lo+1)である図4の演算5を実行することを可能にする。特に、加算および減算を実行する加算/減算ブロック310は、「res(lo+1)」からの「r2(lo+1)」の減算を実行し、それによって、回答「r」を返す演算5を実行するように構成される。加算/減算ブロック310の出力が、加算/減算ブロック312に供給される。ブロック618で、修正ブロック314の加算/減算ブロック312は、r-add 2(k+1)を使用して修正を実行し、「p」を減算するか、または加算/減算ブロック310からのフィードバックおよび出力を使用して2pを減算するように構成される。2(k+1)を加算することは、(k+1)番目のビットを廃棄し、下位kビットのみを使用することである。そのため、ブロック310からの結果をそのまま維持すること(この値を「m」と呼ぶ)と、ブロック310からの結果から「p」を減算することによって追加の値を格納すること(この値を「n」と呼ぶ)という、2つのことが常に実行される。チャンクは、ここでは一度に処理される256ビットであるため、256ビットを超える数値の場合、この実行は複数のサイクルにわたって発生する。ブロック310の出力は、結果の(k+1)ビットおよび減算における借用を示す追加のビット(すなわち、(k+2)番目のビット)である。ブロック310からのすべてのチャンクが処理された後に、(k+1)番目のビットおよび(k+2)番目のビットが「m」においてチェックされる。両方とも1であるか、または両方とも0である場合、add 2(k+1)の条件が実行される必要があり、これは、「m」の最初の「k」ビットを送信することによって実行される。むしろ(k+2)番目のビットが0であるが、(k+1)番目のビットが1である場合、加算/減算ブロック312は、「n」の(k+1)番目のビットを調べる。このビットが0である場合、「n」の「k」ビットが結果として出力される。そうではなく、このビットが1である場合、「p」が「n」から減算され、この演算の結果の「k」ビットが出力される。さらに、代替の実装は、ブロック310の結果から「2p」を減算し、次に、前述の条件に依って「m」、「n」、または「o」を選択することによって、追加の値「o」を格納することであることができる。初期化中にモジュール204によって供給されていてよい「p」を使用して加算/減算ブロック312が初期化されたということに注意する。
【0049】
上で導入されたように、図7は、本発明の1つまたは複数の実施形態に従って、時間の経過に伴う256ビット乗算の完了を示す表2を例示している。表2は、1つまたは複数の実施形態に従って、128ビット乗算器上で256ビット乗算を実行するさまざまな段階を示している(例えば、乗算ブロック302A、302B、302Cが128ビット乗算器として示されている)。説明の目的で例として256ビット乗算が示されるが、本発明の実施形態は制限されるよう意図されていない。例えばモジュール204を使用して、入力された256ビットのオペランド「a」および「b」が、2つの128ビットのブロック/チャンク(例えば、(a0,a1)および(b0,b1))にそれぞれ分割される。表2は、各乗算ブロック302およびそれに関連する累算器ブロック304(これらによって単一のMACを形成する)に適用される。乗算ブロック302は、これらのブロック/チャンクの部分積を計算することに進み、次に、累算器ブロック304でそれらの部分積を累算し、512ビットの完全な積を与える。最初のクロック(例えば、クロック・サイクル0)で、MACがa0掛けるb0を計算し、256ビットを与える。これらの256ビットのうちの下位128ビットは、最終的な積において有効なビットであり、緑色でマーク付けされ、表2では対角線のパターンによって表されている。これらの128ビットは、累算器ブロック304から出力される。上位128ビット(例えば、255:128のビット)は、不完全であり、他の部分積の累算を必要とし、黄色でマーク付けされ、表2では縦破線のパターンによって表されている。これらの上位128ビットは、累算器ブロック304内で保持される。次のクロック(例えば、クロック・サイクル1)で、乗算ブロック302は、不完全なビット383:128を前提として、a0掛けるb1の積を計算するように構成される。これらの積が、すでに格納されているビット255:128と累算される。しかしこの値は、まだ出力するほど十分に完了しておらず、そのため256ビット383:128のすべてが、部分的に完了しているとして累算器ブロック304内で保持され、有効な出力は存在しない。
【0050】
図7を引き続き参照し、次のクロック(例えば、クロック・サイクル2)で、前のクロックからの不完全なビット383:128を前提として、乗算ブロック302がa1掛けるb0を計算する。このとき、MACは、累算ブロック304内でビット255:128の前の集合をすべて累算するように構成され、この部分は、現在完全に完了しており、緑色でマーク付けされている(対角線によって表されている)。次のクロック(例えば、クロック・サイクル3)の最後の計算のために、MACは、ビット511:256を前提としてa1掛けるb1を有する。この場合も、前のサイクルからの累算ブロック304内のすべての累算とビット511:256が合わさるため、MACは計算された完全な512ビットの積を含む。そのため、このクロック(例えば、クロック・サイクル3)で、MACは累算器ブロック304から有効な256ビットを取得する。しかし、累算器からのバス幅が128ビットしかないため、MACは、2クロックにわたって256ビットを送信する必要があり、単にデータ転送のために追加の1クロック(例えば、クロック・サイクル4)を与える。したがって、演算2、3、4がMAC1、2、3においてそれぞれ実行される256ビットのモジュラ乗算の場合、表2に示されているように、各MACは正確に同じ256ビットの2進数乗算を実行する。唯一の違いは、異なるMACに供給される入力ビットである。MAC1は、オペランドaおよびbを受信する。MAC2はMAC1から256ビットの上位を受信し、MAC3はMAC2から256ビットの上位を受信するが、MAC3は256ビットの下位を修正ブロックに出力する。図7では、新しい有効なビットが完了していないため、クロック番号1が「出力デッド・サイクル」であることに注意する。同様に、新しい入力ビットが計算される必要がない(すなわち、MACが完了した)ため、クロック番号4は「入力デッド・サイクル」である。
【0051】
図8は、本発明の1つまたは複数の実施形態に従って、384ビット乗算の3つの部分の完了を示している表3を例示している。表3は、384ビットのビット幅の場合のMAC1、2、3におけるモジュラ乗算演算全体を示している。0とラベル付けされた列内のクロック・サイクル0で、MAC1上の演算が開始し、9とラベル付けされた列であるクロック・サイクル9に進む。MAC1がクロック・サイクル9で累算器から有効な256ビットを生成するように構成されており、この256ビットが、128ビットのバスを経由して2クロック9および10にわたって出力されるため、クロック・サイクル10は、図7の256ビットの場合に示されたものと同様の出力デッド・サイクルである。384ビット乗算は、入力オペランドが3つの128ビットのブロック/チャンクそれぞれに分割され、6つの128ビットの出力積のチャンクの計算が784ビットの結果を与えることを必要とする。クロック・サイクル1、3、6、8、9に示された、MAC1出力とマーク付けされたサイクルでの累算の後に、6つの出力ブロック/チャンクが供給される。これによって、灰色でマーク付けされたMAC1の1つの乗算が完了し、この乗算は、表3では行1および2内のドット・パターンによって示されている。MAC1が出力を生成した後に、MAC1は、赤色で示された次の乗算に取り掛かり始めることができ、この乗算は、行1および2内のライン・パターンによって示されている。この乗算は、異なるオペランドに対する、列0~9の正確なコピーである。
【0052】
次にMAC2が、MAC1から上位ビットのみを受け取る。384ビットの場合、合計6つの出力チャンクのうちの3つの上位のブロック/チャンクが必要とされる。そのため、MAC2は、MAC1からの最初の3つの出力を破棄し、最後の3つの出力を使用して、クロック・サイクル9~17である一連の列9~17にわたってMAC1と正確に同じ演算を実行する。同様に、次にMAC3が、MAC2から最後の3つの出力のみを受け取り、クロック・サイクル17~25である列17~25にわたって同じ演算を繰り返す。灰色(ドット・パターン)および赤色(ライン・パターン)の演算の重複は、3つの異なるMACが異なるデータに対して動作することができるパイプライン処理を示している。
【0053】
図9は、本発明の1つまたは複数の実施形態に従って、システム200によって利用される素数幅として例示的なビット幅を示す表4を例示している。固定ビット幅サイズを乗算ブロック302、累算器ブロック304、ならびに加算/減算ブロック310および312に使用するモジュラ・ハードウェア・ブロック210は、さまざまなビット幅を有するオペランドを処理するように構成される。待ち時間は、オペランド(例えば、特定のビット幅のオペランド「a」および「b」)を処理するために必要とされるクロック・サイクル数を示す。反復間隔は、MAC1が乗算積全体を完了してから、MAC1の次の乗算積を開始する前に必要とされるクロック・サイクル数などの、乗算積の完了後の次の演算の待ち時間のことを指す。本明細書において説明されるように、1つまたは複数の実施形態は、データの128ビットのブロック/チャンクに対してモジュラ演算を効率的に実行するように配置されて構成されたモジュラ算術論理演算ユニットを提供する。そのような乗算器は、図9に見られ、図7で説明されたような256×256の乗算の場合、4クロック・サイクルの待ち時間を有する。このアーキテクチャは、複数の演算が実行することを可能にする重度にパイプライン化されたシステムである。データ依存関係を考慮して、使用可能なパイプライン処理を最大限に利用するために、演算の最適なスケジュールが決定される。この方法は、図9に見られるような任意の基礎になる素数または素数幅をサポートする。1つまたは複数の実施形態は、米国標準技術局(NIST:National Institute of Standards and Technology)曲線、ブレインプール標準曲線(Brainpool Standard Curve)などを含む、種々の曲線の性能改善を実現する。また、この性能改善は、ワイエルシュトラス、モンゴメリ、コブリッツ、およびエドワーズの一群の曲線に当てはまる。
【0054】
図10は、本発明の1つまたは複数の実施形態に従う、例示的なモジュール204のブロック図である。論理回路は、さまざまなビット幅のオペランドに対してモジュラ・ハードウェア・ブロック210上でモジュラ乗算が実行されることを引き起こすように、演算(例えば、点2倍算データ222または点加算データ224あるいはその両方)をスケジュールするために使用される。論理回路は、データ演算をコードRAMの特定のメモリ位置(メモリ・アドレス)に配置すること、またはコードRAM内でスケジュールした後に、データ演算を格納すること、あるいはその両方を実行することができる。処理するために固定ビット幅に適応するようにデータのオペランドをスケジュールするか、または変更するか、あるいはその両方を実行する例が、図5で説明されている。オペランドは、実行のための命令である。命令フェッチ・ブロックは、次の命令(すなわち、演算)を、コードRAMに現在格納されているメモリ・アドレスからフェッチするように構成される。命令は、演算に対応する。命令は、実行スケジュールに従って、例えば、メモリ・アドレスの配置されたブロックに従って、命令フェッチ・ブロックによる自動選択のために配置され得る。また、論理回路は、命令フェッチ・ブロックが適切な命令(すなわち、演算)をフェッチする順序を指示することができる。命令実行ブロックは、必要に依って命令を解釈してよく、この解釈/デコーディングは、デコーダ(図示せず)によって実行され得る。命令実行ブロックは、数学関数または論理関数を体ALU上で実行することなどの、命令によって必要とされる動作を実行するために、一連の制御信号としてデコードされる情報であってよい命令(例えば、演算)を体ALUに渡すように構成され、その結果がデータRAMに書き戻され得る。マルチプレクサが、命令実行ブロックから命令(演算)を受信することもできる。命令実行ブロックは、4つのアドレスをデータRAMに送信する。これらのアドレスのうちの2つは、読み取り動作用であり、読み出されて演算ユニット(すなわち、モジュラ・ハードウェア・ブロック210)に供給される2つのオペランドのアドレスである。第3のアドレスは、書き込み動作を目的とし、演算ユニット(すなわち、モジュラ・ハードウェア・ブロック210)からの結果を書き込むためのアドレスである。第4のアドレスは、データRAMの初期化中のみに使用される。読み取り/書き込み/初期化である3つの条件に基づいて、マルチプレクサ(mux:multiplexer )が、データRAMに供給される必要があるアドレスを選択する。例示的なモジュール204が特定の構成で示されているが、モジュール204が図10に示された正確な構成に限定されないということが理解されるべきである。モジュール204は、より多いか、またはより少ないコンポーネントを含んでよい。
【0055】
技術的利点および優位性は、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供し、それによって、モジュラ乗算のパイプラインのハードウェア・アクセラレーションをもたらす。1つまたは複数の実施形態は、3つ(のみ)のMACユニットを含むパイプライン化されたハードウェア上でバレット乗算アルゴリズムまたはモンゴメリ乗算アルゴリズムを使用してモジュラ乗算を実行する。オペランドがブロック/チャンクに分割され、各ブロック/チャンクは、乗算器がサポートするビット幅と同じサイズを有する。計算される必要がある部分積の数は、ブロック/チャンクの数の2乗である。ブロック/チャンクは、出力積の下位ビットを最初に組み立て、出力積の上位ビットを後で組み立てようとする順序で、各MACユニットに供給される。各MACは、他のビットが破棄されるため、処理される必要があるブロック/チャンク(のみ)を受け取る。さらに、最後の修正演算が(常に)実行され、次に、2つの出力のうちの1つが選択される。より詳細には、技術的解決策および利点は、3つのカスケード接続されたMACを含むモジュラ・ハードウェア・ブロックを供給し、MACユニットの後に(モジュラ乗算で修正演算を実行するための)加算器ブロックが続く。第2のMACユニットは、第1のMACユニットから出力された上位の積のみを受け取り、第3のMACユニットは、第2のMACユニットから出力された上位の積のみを受け取る。第1のMACは、前のモジュラ乗算演算のすべての部分積が完了した後、1クロック以下で新しいモジュラ乗算演算のオペランドを素早く効率的に受け取る。
【0056】
技術的利点および優位性は、スカラー乗算アルゴリズムを、さまざまなサイズのオペランドに適用される3つのカスケード接続された128×128ビット乗算器にマッピングすることを含む。モジュラ・ハードウェア・ブロックのシステム・アーキテクチャは、幅広の整数モジュロ演算を実行することができ、算術演算は、(例えば、モジュール204内の)プログラム可能なピココードによって駆動されることが可能であり、ピココードは、一般的有限体上で楕円曲線暗号スカラー乗算を実行するために書き込まれることが可能であり、またはスカラー乗算における体演算は、ピココードを使用して最適にスケジュールされることが可能であり、あるいはその組合せが可能である。1つまたは複数の実施形態では、モジュラ・ハードウェア・ブロックのシステム・アーキテクチャは、3つの128×128ビット乗算器および3つの256ビット累算器を含む。演算ユニットは、モンゴメリ乗算/バレット還元(Barrett reduction)を実装できるように一緒に接続され、クロック・サイクルごとに128ビットの体演算の新しいオペランドを受け取る反復間隔を有するように完全にパイプライン化される。
【0057】
図11は、本発明の1つまたは複数の実施形態に従って、一般的体において、体演算間の重度のパイプライン処理を伴う楕円曲線暗号スカラー乗算を提供すること、スケジュールすること、または実行すること、あるいはその組合せによって、モジュラ乗算のパイプラインのハードウェア・アクセラレーションをもたらすためのコンピュータ実装プロセス1100のフローチャートである。図11のコンピュータ実装プロセス1100は、図2に示されたシステム200を使用して実施され得る。
【0058】
ブロック1102で、モジュール204は、モジュラ・ハードウェア・ブロック210によって処理されるデータ(例えば、点2倍算データ222または点加算データ224あるいはその両方)内のオペランドのビット幅を決定するように構成される。ブロック1104で、モジュール204は、オペランドのビット幅がモジュラ・ハードウェア・ブロック210の固定ビット幅(例えば、128ビット幅)に一致するかどうかをチェックするように構成される。ブロック1106で、一致が存在するということに応答して、モジュール204は、モジュラ・ハードウェア・ブロック210にオペランドを処理させるように構成される。ブロック1108で、不一致が存在するということに応答して、モジュール204は、モジュラ・ハードウェア・ブロック210の固定ビット幅によって適応されるようにオペランドを変更し、モジュラ・ハードウェア・ブロック210に変更されたオペランドを処理させるように構成される。
【0059】
モジュラ・ハードウェア・ブロック210によって処理されるデータ内のオペランドのビット幅を決定することは、オペランドを解析してビット幅を取得することを含む。オペランドのビット幅がモジュラ・ハードウェア・ブロック210の固定ビット幅に一致するかどうかをチェックすることは、オペランドのビット幅をモジュラ・ハードウェア・ブロック210の(あらかじめ知られている)固定ビット幅と比較することを含む。モジュラ・ハードウェア・ブロック210は、第1の乗累算器(MAC1)、第2の乗累算器(MAC2)、および第3の乗累算器(MAC3)を直列に含む。モジュラ・ハードウェア・ブロック210は、一連の乗累算器(例えば、乗算ブロック302およびその累算器ブロック304)を含み、その後に修正ブロック314が続く。モジュラ・ハードウェア・ブロック210の固定ビット幅によって適応されるようにオペランドを変更することは、オペランドのビット幅をモジュラ・ハードウェア・ブロックの固定ビット幅と比較することと、オペランドのビット幅を固定ビット幅によって適応されるサイズに分割することであって、この分割が、ビット幅が固定ビット幅より大きいということに応答する、分割することと、オペランドのビット幅を固定ビット幅によって適応されるサイズに増やすことであって、この増やすことが、ビット幅が固定ビット幅より小さいということに応答する、増やすこととを含む。固定ビット幅は、処理するための個別のオペランドを保持する役割を担うハードウェア構造の固定サイズである。
【0060】
スカラー乗算のためのモジュラ・ハードウェア・ブロックを形成するコンピュータ実装方法は、本発明の1つまたは複数の実施形態に従って提供される。第1の乗累算器(MAC1)、第2の乗累算器(MAC2)、および第3の乗累算器(MAC3)が直列に結合される。修正ブロック314の入力は、第3の乗累算器に結合される。
【0061】
第1、第2、および第3の乗累算器の各々は、累算器ブロック(例えば、累算ブロック304)に結合された乗算ブロック(例えば、乗算ブロック302)を備え、乗算ブロックは固定ビット幅を有する。データ配列320は、第1の乗累算器(MAC1)に結合される。モジュール204はモジュラ・ハードウェア・ブロック210に結合され、モジュール204は、第1の乗累算器(MAC1)の固定ビット幅(例えば、128ビット幅)に適応するようにデータ(例えば、点2倍算データ222または点加算データ224あるいはその両方)内のオペランドを変更するように構成される。
【0062】
本発明の1つまたは複数の実施形態に従って、スカラー乗算のためのモジュラ・ハードウェア・ブロック210が提供される。モジュラ・ハードウェア・ブロック210は、直列に結合され、累算器ブロックに結合された乗算ブロックをそれぞれ備えている、第1の乗累算器(MAC1)、第2の乗累算器(MAC2)、および第3の乗累算器(MAC3)を含み、乗算ブロックは固定ビット幅を有する。修正ブロック314は、第3の乗累算器(MAC3)に結合される。データ配列320は第1の乗累算器(MAC1)に結合され、モジュール204はデータ配列320に結合され、モジュール204は、固定ビット幅によって適応されるように、または固定ビット幅による適応のために、あるいはその両方であるように、データを変更するように構成される。
【0063】
本開示にはクラウド・コンピューティングに関する詳細な説明が含まれているが、本明細書において示された内容の実装は、クラウド・コンピューティング環境に限定されないと理解されるべきである。本発明の実施形態は、現在既知であるか、または今後開発される任意の他の種類のコンピューティング環境と組み合わせて実装され得る。
【0064】
クラウド・コンピューティングは、構成可能な計算リソース(例えば、ネットワーク、ネットワーク帯域幅、サーバ、処理、メモリ、ストレージ、アプリケーション、仮想マシン、およびサービス)の共有プールへの便利なオンデマンドのネットワーク・アクセスを可能にするためのサービス提供モデルであり、管理上の手間またはサービス・プロバイダとのやりとりを最小限に抑えて、これらのリソースを迅速にプロビジョニングおよび解放することができる。このクラウド・モデルは、少なくとも5つの特徴、少なくとも3つのサービス・モデル、および少なくとも4つのデプロイメント・モデルを含んでよい。
【0065】
特徴は、次のとおりである。
【0066】
オンデマンドのセルフ・サービス:クラウドの利用者は、サーバの時間およびネットワーク・ストレージなどの計算能力を一方的に、サービス・プロバイダとの人間的なやりとりを必要とせず、必要に依って自動的にプロビジョニングすることができる。
【0067】
幅広いネットワーク・アクセス:能力は、ネットワークを経由して利用可能であり、標準的なメカニズムを使用してアクセスできるため、異種のシン・クライアントまたはシック・クライアント・プラットフォーム(例えば、携帯電話、ラップトップ、およびPDA)による利用を促進する。
【0068】
リソース・プール:プロバイダの計算リソースは、プールされ、マルチテナント・モデルを使用して複数の利用者に提供される。さまざまな物理的および仮想的リソースが、要求に従って動的に割り当ておよび再割り当てされる。場所に依存しないという感覚があり、利用者は通常、提供されるリソースの正確な場所に関して管理することも知ることもないが、さらに高い抽象化レベルでは、場所(例えば、国、州、またはデータセンター)を指定できることがある。
【0069】
迅速な順応性:能力は、迅速かつ柔軟に、場合によっては自動的にプロビジョニングされ、素早くスケールアウトし、迅速に解放されて素早くスケールインすることができる。プロビジョニングに使用できる能力は、利用者には、多くの場合、任意の量をいつでも無制限に購入できるように見える。
【0070】
測定されるサービス:クラウド・システムは、計測機能を活用することによって、サービスの種類(例えば、ストレージ、処理、帯域幅、およびアクティブなユーザのアカウント)に適したある抽象化レベルで、リソースの使用を自動的に制御および最適化する。リソースの使用状況は、監視、制御、および報告されることが可能であり、利用されるサービスのプロバイダと利用者の両方に透明性を提供する。
【0071】
サービス・モデルは、次のとおりである。
【0072】
SaaS(Software as a Service):利用者に提供される能力は、クラウド・インフラストラクチャ上で稼働しているプロバイダのアプリケーションの利用である。それらのアプリケーションは、Webブラウザ(例えば、Webベースの電子メール)などのシン・クライアント・インターフェイスを介して、種々のクライアント・デバイスからアクセスできる。利用者は、ネットワーク、サーバ、オペレーティング・システム、ストレージ、または個々のアプリケーション機能さえも含む基盤になるクラウド・インフラストラクチャを、限定的なユーザ固有のアプリケーション構成設定を行う可能性を除き、管理することも制御することもない。
【0073】
PaaS(Platform as a Service):利用者に提供される能力は、プロバイダによってサポートされるプログラミング言語およびツールを使用して作成された、利用者が作成または取得したアプリケーションをクラウド・インフラストラクチャにデプロイすることである。利用者は、ネットワーク、サーバ、オペレーティング・システム、またはストレージを含む基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、デプロイされたアプリケーション、および場合によってはアプリケーション・ホスティング環境の構成を制御することができる。
【0074】
IaaS(Infrastructure as a Service):利用者に提供される能力は、処理、ストレージ、ネットワーク、および他の基本的な計算リソースのプロビジョニングであり、利用者は、オペレーティング・システムおよびアプリケーションを含むことができる任意のソフトウェアをデプロイして実行できる。利用者は、基盤になるクラウド・インフラストラクチャを管理することも制御することもないが、オペレーティング・システム、ストレージ、デプロイされたアプリケーションを制御することができ、場合によっては、選択されたネットワーク・コンポーネント(例えば、ホスト・ファイアウォール)を限定的に制御できる。
【0075】
デプロイメント・モデルは、次のとおりである。
【0076】
プライベート・クラウド:このクラウド・インフラストラクチャは、組織のためにのみ運用される。この組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
【0077】
コミュニティ・クラウド:このクラウド・インフラストラクチャは、複数の組織によって共有され、関心事(例えば、任務、セキュリティ要件、ポリシー、およびコンプライアンスに関する考慮事項)を共有している特定のコミュニティをサポートする。これらの組織またはサード・パーティによって管理することができ、オンプレミスまたはオフプレミスに存在することができる。
【0078】
パブリック・クラウド:このクラウド・インフラストラクチャは、一般ユーザまたは大規模な業界団体が使用できるようになっており、クラウド・サービスを販売する組織によって所有される。
【0079】
ハイブリッド・クラウド:このクラウド・インフラストラクチャは、データとアプリケーションの移植を可能にする標準化された技術または独自の技術(例えば、クラウド間の負荷バランスを調整するためのクラウド・バースト)によって固有の実体を残したまま互いに結合された2つ以上のクラウド(プライベート、コミュニティ、またはパブリック)の複合である。
【0080】
クラウド・コンピューティング環境は、ステートレス性、低結合性、モジュール性、および意味的相互運用性に重点を置いたサービス指向の環境である。クラウド・コンピューティングの中心になるのは、相互接続されたノードのネットワークを含んでいるインフラストラクチャである。
【0081】
ここで図12を参照すると、例示的なクラウド・コンピューティング環境50が示されている。図示されているように、クラウド・コンピューティング環境50は、クラウドの利用者によって使用されるローカル・コンピューティング・デバイス(例えば、パーソナル・デジタル・アシスタント(PDA:personal digital assistant)または携帯電話54A、デスクトップ・コンピュータ54B、ラップトップ・コンピュータ54C、または自動車コンピュータ・システム54N、あるいはその組合せなど)が通信できる1つまたは複数のクラウド・コンピューティング・ノード10を含んでいる。ノード10は、互いに通信し得る。ノード10は、1つまたは複数のネットワーク内で、本明細書において前述されたプライベート・クラウド、コミュニティ・クラウド、パブリック・クラウド、またはハイブリッド・クラウド、あるいはこれらの組合せなどに、物理的または仮想的にグループ化され得る(図示せず)。これによって、クラウド・コンピューティング環境50は、クラウドの利用者がローカル・コンピューティング・デバイス上でリソースを維持する必要のないインフラストラクチャ、プラットフォーム、またはSaaS、あるいはその組合せを提供できる。図12に示されたコンピューティング・デバイス54A~Nの種類は、例示のみが意図されており、コンピューティング・ノード10およびクラウド・コンピューティング環境50は、任意の種類のネットワークまたはネットワーク・アドレス可能な接続(例えば、Webブラウザを使用した接続)あるいはその両方を経由して任意の種類のコンピュータ制御デバイスと通信することができると理解される。
【0082】
ここで図13を参照すると、クラウド・コンピューティング環境50(図12)によって提供される機能的抽象化レイヤのセットが示されている。図13に示されたコンポーネント、レイヤ、および機能は、例示のみが意図されており、本発明の実施形態がこれらに限定されないということが、あらかじめ理解されるべきである。図示されているように、次のレイヤおよび対応する機能が提供される。
【0083】
ハードウェアおよびソフトウェア・レイヤ60は、ハードウェア・コンポーネントおよびソフトウェア・コンポーネントを含む。ハードウェア・コンポーネントの例としては、メインフレーム61、RISC(Reduced Instruction Set Computer)アーキテクチャベースのサーバ62、サーバ63、ブレード・サーバ64、ストレージ・デバイス65、ならびにネットワークおよびネットワーク・コンポーネント66が挙げられる。一部の実施形態では、ソフトウェア・コンポーネントは、ネットワーク・アプリケーション・サーバ・ソフトウェア67およびデータベース・ソフトウェア68を含む。
【0084】
仮想化レイヤ70は、仮想サーバ71、仮想ストレージ72、仮想プライベート・ネットワークを含む仮想ネットワーク73、仮想アプリケーションおよびオペレーティング・システム74、ならびに仮想クライアント75などの仮想的実体を提供できる抽象化レイヤを備える。
【0085】
一例を挙げると、管理レイヤ80は、以下で説明される機能を提供してよい。リソース・プロビジョニング81は、クラウド・コンピューティング環境内でタスクを実行するために利用される計算リソースおよび他のリソースの動的調達を行う。計測および価格設定82は、クラウド・コンピューティング環境内でリソースが利用される際のコスト追跡、およびそれらのリソースの利用に対する請求書またはインボイスの送付を行う。一例を挙げると、それらのリソースは、アプリケーション・ソフトウェア・ライセンスを含んでよい。セキュリティは、クラウドの利用者およびタスクのID検証を行うとともに、データおよび他のリソースの保護を行う。ユーザ・ポータル83は、クラウド・コンピューティング環境へのアクセスを利用者およびシステム管理者に提供する。サービス・レベル管理84は、必要なサービス・レベルを満たすように、クラウドの計算リソースの割り当てと管理を行う。サービス水準合意(SLA:Service Level Agreement)計画および実行85は、今後の要求が予想されるクラウドの計算リソースの事前準備および調達を、SLAに従って行う。
【0086】
ワークロード・レイヤ90は、クラウド・コンピューティング環境で利用できる機能の例を示している。このレイヤから提供されるワークロードおよび機能の例としては、マッピングおよびナビゲーション91、ソフトウェア開発およびライフサイクル管理92、仮想クラスルーム教育の配信93、データ解析処理94、トランザクション処理95、ならびにワークロードおよび機能において実装されるソフトウェア・アプリケーション(例えば、1つまたは複数のソフトウェア・アプリケーションとしてのモジュール204)96が挙げられる。
【0087】
本明細書では、関連する図面を参照して、本発明のさまざまな実施形態が説明される。本発明の範囲から逸脱することなく、本発明の代替の実施形態が考案され得る。以下の説明および図面において、要素間のさまざまな接続および位置関係(例えば、上、下、隣接など)が示される。それらの接続または位置関係あるいはその両方は、特に規定されない限り、直接的または間接的であることができ、本発明はこの点において限定するよう意図されていない。したがって、各実体の結合は、直接的結合または間接的結合を指すことができ、各実体間の位置関係は、直接的位置関係または間接的位置関係であることができる。さらに、本明細書に記載されたさまざまな作業および工程段階は、本明細書に詳細に記載されない追加の段階または機能を含んでいるさらに包括的な手順または工程に組み込まれ得る。
【0088】
本明細書に記載された方法のうちの1つまたは複数は、データ信号上で論理機能を実装するための論理ゲートを含んでいる個別の論理回路、適切な組合せ論理ゲートを含んでいる特定用途向け集積回路(ASIC)、プログラマブル・ゲート・アレイ(PGA:programmable gate array)、フィールド・プログラマブル・ゲート・アレイ(FPGA)などの、それぞれ従来技術においてよく知られている、技術のいずれかまたは組合せを使用して実装され得る。
【0089】
簡潔さの目的で、本発明の態様の作成および使用に関連する従来技術は、本明細書に詳細に記載されることもあれば、記載されないこともある。具体的には、本明細書に記載されたさまざまな技術的特徴を実装するためのコンピューティング・システムおよび特定のコンピュータ・プログラムのさまざまな態様は、よく知られている。したがって、簡潔さのために、多くの従来の実装に関する詳細は、本明細書では、既知のシステムまたは工程あるいはその両方の詳細を提供することなく、簡潔にのみ述べられるか、または全体的に省略される。
【0090】
一部の実施形態では、さまざまな機能または動作は、特定の位置で、または1つまたは複数の装置もしくはシステムの動作に関連して、あるいはその両方で行われ得る。一部の実施形態では、特定の機能または動作の一部は、第1のデバイスまたは位置で実行されることが可能であり、機能または動作の残りの部分は、1つまたは複数の追加のデバイスまたは位置で実行され得る。
【0091】
本明細書で使用される用語は、特定の実施形態を説明することのみを目的としており、制限することを意図していない。本明細書において使用されるとき、単数形「a」、「an」、および「the」は、文脈で特に明示的に示されない限り、複数形も含むよう意図されている。「備える」または「備えている」あるいはその両方の用語は、本明細書で使用される場合、記載された機能、整数、ステップ、動作、要素、またはコンポーネント、あるいはその組合せの存在を示すが、1つまたは複数の他の機能、整数、ステップ、動作、要素、コンポーネント、またはこれらのグループ、あるいはその組合せの存在または追加を除外していないということが、さらに理解されるであろう。
【0092】
下の特許請求の範囲内のすべての手段またはステップおよび機能要素の対応する構造、材料、動作、および等価なものは、具体的に請求される他の請求された要素と組み合わせて機能を実行するための任意の構造、材料、または動作を含むことが意図されている。本開示は、例示および説明の目的で提示されているが、網羅的であることは意図されておらず、開示された形態に限定されない。本開示の範囲および思想から逸脱することなく、多くの変更および変形が当業者にとって明らかであろう。本開示の原理および実際的な適用を最も適切に説明するため、および他の当業者が、企図されている特定の用途に適しているようなさまざまな変更を伴う多様な実施形態に関して、本開示を理解できるようにするために、実施形態が選択されて説明された。
【0093】
本明細書において示された図は、例示である。本開示の思想から逸脱することなく、本明細書に記載された図またはステップ(または動作)の多くの変形が存在することが可能である。例えば、動作は異なる順序で実行されることが可能であり、あるいは動作は追加、削除、または変更されることが可能である。また、「結合される」という用語は、2つの要素間に信号経路が存在することを表しており、それらの要素間に要素/接続が介在しない要素間の直接的接続を意味していない。これらすべての変形は、本開示の一部であると見なされる。
【0094】
以下の定義および略称が、特許請求の範囲および本明細書の解釈に使用される。本明細書において使用されるとき、「備える」、「備えている」、「含む」、「含んでいる」、「有する」、「有している」、「含有する」、「含有している」という用語、またはこれらの任意の他の変形は、非排他的包含をカバーするよう意図されている。例えば、要素のリストを含んでいる組成、混合、工程、方法、製品、または装置は、それらの要素のみに必ずしも限定されず、明示されていないか、またはそのような組成、混合、工程、方法、製品、または装置に固有の、他の要素を含むことができる。
【0095】
さらに、「例示的」という用語は、本明細書では「例、事例、または実例としての役割を果たす」ことを意味するために使用される。「例示的」として本明細書に記載された実施形態または設計は、必ずしも他の実施形態または設計よりも好ましいか、または有利であると解釈されるべきではない。「少なくとも1つ」および「1つまたは複数」という用語は、1以上の任意の整数(すなわち、1、2、3、4など)を含んでいると理解される。「複数」という用語は、2以上の任意の整数(すなわち、2、3、4、5など)を含んでいると理解される。「接続」という用語は、間接的「接続」および直接的「接続」の両方を含むことができる。
【0096】
「約」、「実質的に」、「近似的に」、およびこれらの変形の用語は、本願書の出願時に使用できる機器に基づいて、特定の量の測定に関連付けられた誤差の程度を含むよう意図されている。例えば、「約」は、特定の値の±8%または5%、あるいは2%の範囲を含むことができる。
【0097】
本発明は、任意の可能な統合の技術的詳細レベルで、システム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令を含んでいるコンピュータ可読ストレージ媒体を含んでよい。
【0098】
コンピュータ可読ストレージ媒体は、命令実行デバイスによって使用するための命令を保持および格納できる有形のデバイスであることができる。コンピュータ可読ストレージ媒体は、例えば、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁ストレージ・デバイス、半導体ストレージ・デバイス、またはこれらの任意の適切な組合せであってよいが、これらに限定されない。コンピュータ可読ストレージ媒体のさらに具体的な例の非網羅的リストは、ポータブル・フロッピー(R)・ディスク、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラマブル読み取り専用メモリ(EPROM:erasable programmable read-only memoryまたはフラッシュ・メモリ)、スタティック・ランダム・アクセス・メモリ(SRAM:static random access memory)、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD-ROM:compact disc read-only memory)、デジタル・バーサタイル・ディスク(DVD:digital versatile disk)、メモリ・スティック、フロッピー(R)・ディスク、命令が記録されているパンチカードまたは溝の中の隆起構造などの機械的にエンコードされるデバイス、およびこれらの任意の適切な組合せを含む。本明細書において使用されるとき、コンピュータ可読ストレージ媒体は、電波または他の自由に伝搬する電磁波、導波管または他の送信媒体を伝搬する電磁波(例えば、光ファイバ・ケーブルを通過する光パルス)、あるいはワイヤを介して送信される電気信号などの、それ自体が一過性の信号であると解釈されるべきではない。
【0099】
本明細書に記載されたコンピュータ可読プログラム命令は、コンピュータ可読ストレージ媒体から各コンピューティング・デバイス/処理デバイスへ、またはネットワーク(例えば、インターネット、ローカル・エリア・ネットワーク、広域ネットワーク、またはワイヤレス・ネットワーク、あるいはその組合せ)を介して外部コンピュータまたは外部ストレージ・デバイスへダウンロードされ得る。このネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス送信、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを備えてよい。各コンピューティング・デバイス/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェイスは、コンピュータ可読プログラム命令をネットワークから受信し、それらのコンピュータ可読プログラム命令を各コンピューティング・デバイス/処理デバイス内のコンピュータ可読ストレージ媒体に格納するために転送する。
【0100】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA:instruction-set-architecture)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路のための構成データ、あるいは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む1つまたは複数のプログラミング言語の任意の組合せで記述されたソース・コードまたはオブジェクト・コードであってよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で全体的に実行すること、ユーザのコンピュータ上でスタンドアロン・ソフトウェア・パッケージとして部分的に実行すること、ユーザのコンピュータ上およびリモート・コンピュータ上でそれぞれ部分的に実行すること、あるいはリモート・コンピュータ上またはサーバ上で全体的に実行することができる。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意の種類のネットワークを介してユーザのコンピュータに接続されてよく、または接続は、(例えば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに対して行われてよい。一部の実施形態では、本発明の態様を実行するために、例えばプログラマブル・ロジック回路、フィールドプログラマブル・ゲート・アレイ(FPGA)、またはプログラマブル・ロジック・アレイ(PLA:programmable logic arrays)を含む電子回路は、コンピュータ可読プログラム命令の状態情報を利用することによって、電子回路をカスタマイズするためのコンピュータ可読プログラム命令を実行し得る。
【0101】
本発明の態様は、本明細書において、本発明の実施形態に従って、方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロック図あるいはその両方に含まれるブロックの組合せが、コンピュータ可読プログラム命令によって実装されるということが理解されるであろう。
【0102】
これらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能なデータ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施する手段を作り出すべく、汎用コンピュータ、専用コンピュータ、または他のプログラム可能なデータ処理装置のプロセッサに提供されてマシンを作り出すものであってよい。これらのコンピュータ可読プログラム命令は、命令が格納されたコンピュータ可読ストレージ媒体がフローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含んでいる製品を備えるように、コンピュータ可読ストレージ媒体に格納され、コンピュータ、プログラム可能なデータ処理装置、または他のデバイス、あるいはその組合せに特定の方式で機能するように指示できるものであってもよい。
【0103】
コンピュータ可読プログラム命令は、コンピュータ上、他のプログラム可能な装置上、または他のデバイス上で実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスに読み込まれてもよく、それによって、一連の動作可能なステップを、コンピュータ上、他のプログラム可能な装置上、またはコンピュータ実装プロセスを生成する他のデバイス上で実行させる。
【0104】
図内のフローチャートおよびブロック図は、本発明のさまざまな実施形態に従って、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を示す。これに関連して、フローチャートまたはブロック図内の各ブロックは、規定された論理機能を実装するための1つまたは複数の実行可能な命令を備える、命令のモジュール、セグメント、または部分を表してよい。一部の代替の実装では、ブロックに示された機能は、図に示された順序とは異なる順序で発生し得る。例えば、連続して示された2つのブロックは、実際には、含まれている機能に応じて、実質的に同時に実行されるか、または場合によっては逆の順序で実行され得る。ブロック図またはフローチャート図あるいはその両方の各ブロック、ならびにブロック図またはフローチャート図あるいはその両方に含まれるブロックの組合せは、規定された機能または動作を実行するか、あるいは専用ハードウェアとコンピュータ命令の組合せを実行する専用ハードウェアベースのシステムによって実装されるということにも注意する。
【0105】
本発明のさまざまな実施形態の説明は、例示の目的で提示されているが、網羅的であることは意図されておらず、開示された実施形態に限られない。説明された実施形態の範囲および思想から逸脱しない多くの変更および変形が、当業者にとって明らかであろう。本明細書で使用された用語は、実施形態の原理、実際の適用、または市場で見られる技術を超える技術的改良を最も適切に説明するため、または他の当業者が本明細書に記載された実施形態を理解できるようにするために選択されている。
図1
図2
図3
図4
図5
図6A
図6B
図7
図8
図9
図10
図11
図12
図13
【手続補正書】
【提出日】2023-12-27
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータの情報処理による、方法であって、
モジュラ・ハードウェア・ブロックによって処理されるデータ内のオペランドのビット幅を決定することと、
前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの固定ビット幅の間に不一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することと、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることとを含む、方法
【請求項2】
前記モジュラ・ハードウェア・ブロックによって処理される前記データ内の前記オペランドの前記ビット幅を決定することが、前記オペランドを解析して前記ビット幅を取得することを含む、請求項1に記載の方法
【請求項3】
前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの前記固定ビット幅の間に一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることをさらに含み、前記一致が、前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することによって決定される、請求項1に記載の方法
【請求項4】
前記モジュラ・ハードウェア・ブロックが第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に備える、請求項1に記載の方法
【請求項5】
前記モジュラ・ハードウェア・ブロックが、一連の乗累算器を備え、その後に修正ブロックが続く、請求項1に記載の方法
【請求項6】
前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することが、
前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応されるサイズに分割することであって、前記分割が、前記ビット幅が前記固定ビット幅より大きいということに応答する、前記分割することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応される前記サイズに増やすことであって、前記増やすことが、前記ビット幅が前記固定ビット幅より小さいということに応答する、前記増やすこととを含む、請求項1に記載の方法
【請求項7】
前記固定ビット幅が、処理するための個別のオペランドを保持するハードウェア構造の固定サイズである、請求項1に記載の方法
【請求項8】
コンピュータ可読命令を含んでいるメモリと、
前記コンピュータ可読命令を実行するための1つまたは複数のプロセッサとを備えているシステムであって、前記コンピュータ可読命令が、前記1つまたは複数のプロセッサを制御して、
モジュラ・ハードウェア・ブロックによって処理されるデータ内のオペランドのビット幅を決定することと、
前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの固定ビット幅の間に不一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することと、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることとを含む動作を実行する、システム。
【請求項9】
前記モジュラ・ハードウェア・ブロックによって処理される前記データ内の前記オペランドの前記ビット幅を決定することが、前記オペランドを解析して前記ビット幅を取得することを含む、請求項8に記載のシステム。
【請求項10】
前記1つまたは複数のプロセッサが、前記オペランドの前記ビット幅と前記モジュラ・ハードウェア・ブロックの前記固定ビット幅の間に一致が存在するということに応答して、前記モジュラ・ハードウェア・ブロックに前記オペランドを処理させることをさらに含む動作を実行し、前記一致が、前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することによって決定される、請求項8に記載のシステム。
【請求項11】
前記モジュラ・ハードウェア・ブロックが第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に備える、請求項8に記載のシステム。
【請求項12】
前記モジュラ・ハードウェア・ブロックが、一連の乗累算器を備え、その後に修正ブロックが続く、請求項8に記載のシステム。
【請求項13】
前記モジュラ・ハードウェア・ブロックの前記固定ビット幅によって適応されるように前記オペランドを変更することが、
前記オペランドの前記ビット幅を前記モジュラ・ハードウェア・ブロックの前記固定ビット幅と比較することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応されるサイズに分割することであって、前記分割が、前記ビット幅が前記固定ビット幅より大きいということに応答する、前記分割することと、
前記オペランドの前記ビット幅を前記固定ビット幅によって適応される前記サイズに増やすことであって、前記増やすことが、前記ビット幅が前記固定ビット幅より小さいということに応答する、前記増やすこととを含む、請求項8に記載のシステム。
【請求項14】
前記固定ビット幅が、処理するための個別のオペランドを保持するハードウェア構造の固定サイズである、請求項8に記載のシステム。
【請求項15】
請求項1~7の何れか1項に記載の方法をコンピュータに実行させる、コンピュータ・プログラム。
【請求項16】
請求項15に記載の前記コンピュータ・プログラムを、コンピュータ可読ストレージ媒体に記録した、ストレージ媒体。
【請求項17】
スカラー乗算のためのモジュラ・ハードウェア・ブロックを形成する方法であって、
第1の乗累算器、第2の乗累算器、および第3の乗累算器を直列に結合することと、
修正ブロックの入力を前記第3の乗累算器に結合することと、
前記第1、前記第2、および前記第3の乗累算器の各々が、累算器ブロックに結合された乗算ブロックを備え、前記乗算ブロックが固定ビット幅を有することと、
データ配列が前記第1の乗累算器に結合されることと、
モジュールが前記モジュラ・ハードウェア・ブロックに結合されることと、
前記モジュールが、前記第1の乗累算器の固定ビット幅に適応するようにデータ内のオペランドを変更するように構成されることを含む、方法
【請求項18】
スカラー乗算のためのモジュラ・ハードウェア・ブロックであって、
直列に結合され、累算器ブロックに結合された乗算ブロックをそれぞれ備えている、第1の乗累算器、第2の乗累算器、および第3の乗累算器であって、前記乗算ブロックが固定ビット幅を有する、前記第1の乗累算器、第2の乗累算器、および第3の乗累算器と、
前記第3の乗累算器に結合された修正ブロックと、
前記第1の乗累算器に結合されたデータ配列と、
前記データ配列に結合されたモジュールであって、前記固定ビット幅によって適応されるようにデータを変更するように構成される、前記モジュールとを備える、モジュラ・ハードウェア・ブロック。
【国際調査報告】