(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-08-08
(54)【発明の名称】マスクされたシフト加算演算
(51)【国際特許分類】
G06F 9/315 20180101AFI20240801BHJP
G06F 9/30 20180101ALI20240801BHJP
【FI】
G06F9/315 S
G06F9/30 350A
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2024507893
(86)(22)【出願日】2022-08-15
(85)【翻訳文提出日】2024-02-07
(86)【国際出願番号】 EP2022072749
(87)【国際公開番号】W WO2023020984
(87)【国際公開日】2023-02-23
(32)【優先日】2021-08-19
(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)【発明者】
【氏名】ラオ、ラジャット
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033BD03
5B033BE05
5B033DC03
(57)【要約】
コンピュータ実装方法は、オペランドのセットと共にマスクされたシフト加算演算を行う命令を処理ユニットにより受け取ることを含む。論理AND演算が、オペランドのセットの中のオペランドの第1の対に対して行われて、第1の中間結果を得る。第1の中間結果は、オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけシフトされる。論理AND演算が、オペランドのセットの中のオペランドの第2の対に対して行われて、第2の中間結果を得る。第2の中間結果は、オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけシフトされる。シフトされた第1の中間結果が、シフトされた第2の中間結果に加算される。方法は、加算の出力を、マスクされたシフト加算演算の結果として出力することをさらに含む。
【特許請求の範囲】
【請求項1】
コンピュータ実装方法であって、
オペランドのセットと共にマスクされたシフト加算演算を行う命令を処理ユニットにより受け取ることと、
前記オペランドのセットの中のオペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
前記オペランドのセットの中のオペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと
を含むコンピュータ実装方法。
【請求項2】
前記第1のシフト量が、前記オペランドの第1の対のうちの前記第1のオペランド内の最初の非ゼロ・ビットのインデックスである、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記第1のシフト量だけ前記第1の中間結果をシフトすることが、前記第1のシフト量だけ前記第1の中間結果をゼロ・パディングすることを含む、請求項1または2に記載のコンピュータ実装方法。
【請求項4】
前記第2のシフト量だけ前記第2の中間結果をシフトすることが、前記第2のシフト量だけ前記第2の中間結果をゼロ・パディングすることを含む、請求項1ないし3のいずれか一項に記載のコンピュータ実装方法。
【請求項5】
前記シフトされた第1の中間結果と前記シフトされた第2の中間結果とを加算することから生じた桁上げに基づいて、前記処理ユニットの桁上げフラグを更新すること、をさらに含む、請求項1ないし4のいずれか一項に記載のコンピュータ実装方法。
【請求項6】
前記桁上げフラグが、前記マスクされたシフト加算演算を行う受け取られた前記命令に基づいて更新される、請求項5に記載のコンピュータ実装方法。
【請求項7】
前記処理ユニットが、前記第1の中間結果および前記第2の中間結果のシフト、ならびに前記シフトされた第1の中間結果と前記第2の中間結果との加算を、2つ以上の入力値について並列に行い、
並列化された演算の出力が、前記2つ以上の入力値についての前記マスクされたシフト加算演算の結果である、請求項1ないし6のいずれか一項に記載のコンピュータ実装方法。
【請求項8】
システムであって、
レジスタのセットと、
前記レジスタのセットに結合された1つまたは複数の処理ユニットと、
を備え、前記1つまたは複数の処理ユニットは、オペランドのセットに対してマスクされたシフト加算演算を行うための方法を行うように構成され、前記マスクされたシフト加算演算を行うことが、
前記オペランドのセットの中のオペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
前記オペランドのセットの中のオペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと、を含む、システム。
【請求項9】
前記第1のシフト量が、前記オペランドの第1の対のうちの前記第1のオペランド内の最初の非ゼロ・ビットのインデックスである、請求項8に記載のシステム。
【請求項10】
前記第1のシフト量だけ前記第1の中間結果をシフトすることが、前記第1のシフト量だけ前記第1の中間結果をゼロ・パディングすることを含む、請求項8または9に記載のシステム。
【請求項11】
前記第2のシフト量だけ前記第2の中間結果をシフトすることが、前記第2のシフト量だけ前記第2の中間結果をゼロ・パディングすることを含む、請求項8ないし10のいずれか一項に記載のシステム。
【請求項12】
前記シフトされた第1の中間結果と前記シフトされた第2の中間結果とを加算することから生じた桁上げに基づいて桁上げフラグを更新すること、をさらに含む、請求項8ないし11のいずれか一項に記載のシステム。
【請求項13】
前記桁上げフラグが、前記マスクされたシフト加算演算を行う受け取られた命令に基づいて更新される、請求項12に記載のシステム。
【請求項14】
前記オペランドのセットが、前記レジスタのセット内に提供される、請求項8ないし13のいずれか一項に記載のシステム。
【請求項15】
コンピュータ実行可能命令が記憶されているコンピュータ可読メモリを備えたコンピュータ・プログラム製品であって、前記コンピュータ実行可能命令は、プロセッサによって実行されたときに、前記プロセッサに、マスクされたシフト加算演算を並列に使用して算術演算を行うための方法を行わせ、オペランドのセットに対して各マスクされたシフト加算演算を行うことが、
オペランドのセットと共にマスクされたシフト加算演算を行う命令を受け取ることと、
前記オペランドのセットの中のオペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
前記オペランドのセットの中のオペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと、を含む、コンピュータ・プログラム製品。
【請求項16】
前記第1のシフト量が、前記オペランドの第1の対のうちの前記第1のオペランド内の最初の非ゼロ・ビットのインデックスである、請求項15に記載のコンピュータ・プログラム製品。
【請求項17】
前記第1のシフト量だけ前記第1の中間結果をシフトすることが、前記第1のシフト量だけ前記第1の中間結果をゼロ・パディングすることを含む、請求項15または16に記載のコンピュータ・プログラム製品。
【請求項18】
前記第2のシフト量だけ前記第2の中間結果をシフトすることが、前記第2のシフト量だけ前記第2の中間結果をゼロ・パディングすることを含む、請求項15ないし17のいずれか一項に記載のコンピュータ・プログラム製品。
【請求項19】
前記シフトされた第1の中間結果と前記シフトされた第2の中間結果とを加算することから生じた桁上げに基づいて桁上げフラグを更新すること、をさらに含む、請求項15ないし18のいずれか一項に記載のコンピュータ・プログラム製品。
【請求項20】
前記オペランドがレジスタ内に提供される、請求項15ないし19のいずれか一項に記載のコンピュータ・プログラム製品。
【請求項21】
コンピュータ・プロセッサであって、
レジスタのセットと、
オペランドのセットに対してマスクされたシフト加算命令を実行するように構成された命令実行ユニットと、を備え、前記実行が、
オペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
オペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと、を含む、コンピュータ・プロセッサ。
【請求項22】
前記オペランドの第1の対と前記オペランドの第2の対とが並列に処理される、請求項21に記載のコンピュータ・プロセッサ。
【請求項23】
前記オペランドが前記レジスタのセット内に提供される、請求項21または22に記載のコンピュータ・プロセッサ。
【請求項24】
算術演算のためのコンピュータ実装方法であって、
処理ユニットにより、前記算術演算の2つの入力値をいくつかの別個の部分に分割し、前記2つの入力値のうちの2つの対応する部分を、マスクされたシフト加算演算のオペランドのセットの一部として使用して、前記マスクされたシフト加算演算を並列に行うこと、を含み、各マスクされたシフト加算演算を行うことが、
オペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
オペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと、を含む、コンピュータ実装方法。
【請求項25】
前記オペランドの第1の対と前記オペランドの第2の対とが並列に処理される、請求項24に記載のコンピュータ実装方法。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、全般的にコンピュータ技術に関し、より具体的には、マスクされたシフト加算演算を実装することにより算術演算を行うことに関する。
【背景技術】
【0002】
コンピュータは、通例、算術演算を行う用途に使用される。暗号法、ブロックチェーン、機械学習、画像処理、コンピュータ・ゲーム、電子商取引などのようないくつかの用途は、そのような演算が効率的に(例えば高速に)行われることを必要とする。したがって、整数演算の性能は、学術研究と産業研究の両方が注目するところとなっている。
【0003】
ハードウェアのアーキテクチャを活かすように、または計算プロセスをハードウェアのアーキテクチャに適合させるように算術命令を実装することによって、コンピュータ、特にプロセッサまたは算術論理ユニットあるいはその両方の性能を向上させるために、いくつかの既存技術が使用されている。そのような技術の例には、命令を複数の演算に分割することが含まれ、その場合、各演算が並列に行われ、2つ以上の演算を組み合わせてメモリ・アクセスを減らし、メモリ・アクセス時間を短縮するように演算が順序付けられ、またアクセス時間を短縮するためにオペランドを特定の順序で格納すること等が含まれる。暗号法や機械学習などの用途では、異なる種類の算術演算が必要とされることがある。そのような用途で頻繁に使用される演算をハードウェアに適合させて、そのような演算、ひいては用途の性能を向上させる必要がある。
【発明の概要】
【0004】
本発明の1つまたは複数の実施形態によれば、コンピュータ実装方法は、オペランドのセットと共にマスクされたシフト加算演算を行う命令を処理ユニットにより受け取ることを含む。方法は、オペランドのセットの中のオペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることをさらに含む。方法は、オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ第1の中間結果をシフトすることをさらに含む。方法は、オペランドのセットの中のオペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることをさらに含む。方法は、オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ第2の中間結果をシフトすることをさらに含む。方法は、シフトされた第1の中間結果と、シフトされた第2の中間結果とを加算することをさらに含む。方法は、加算の出力を、マスクされたシフト加算演算の結果として出力することをさらに含む。
【0005】
本発明の1つまたは複数の実施形態では、第1のシフト量が、オペランドの第1の対のうちの第1のオペランド内の最初の非ゼロ・ビットのインデックスである。
【0006】
本発明の1つまたは複数の実施形態では、第1のシフト量だけ第1の中間結果をシフトすることが、第1のシフト量だけ第1の中間結果をゼロ・パディングすることを含む。
【0007】
本発明の1つまたは複数の実施形態では、第2のシフト量だけ第2の中間結果をシフトすることが、第2のシフト量だけ第2の中間結果をゼロ・パディングすることを含む。
【0008】
本発明の1つまたは複数の実施形態では、方法は、シフトされた第1の中間結果とシフトされた第2の中間結果とを加算することから生じた桁上げに基づいて、処理ユニットの桁上げフラグを更新すること、をさらに含む。
【0009】
本発明の1つまたは複数の実施形態では、桁上げフラグが、マスクされたシフト加算演算を行う受け取られた命令に基づいて更新される。
【0010】
本発明の1つまたは複数の実施形態では、処理ユニットが、第1の中間結果および第2の中間結果のシフト、ならびにシフトされた第1の中間結果と第2の中間結果との加算を、2つ以上の入力値について並列に行う。この並列化された演算の出力が、2つ以上の入力値についてのマスクされたシフト加算演算の結果である。
【0011】
本発明の1つまたは複数の実施形態によれば、システムは、レジスタのセットと、レジスタのセットに結合された1つまたは複数の処理ユニットとを備え、1つまたは複数の処理ユニットは、オペランドのセットに対してマスクされたシフト加算演算を行うための方法を行うように構成される。マスクされたシフト加算演算を行うことは、オペランドのセットの中のオペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることを含む。マスクされたシフト加算演算を行うことは、オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ第1の中間結果をシフトすることをさらに含む。マスクされたシフト加算演算を行うことは、オペランドのセットの中のオペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることをさらに含む。マスクされたシフト加算演算を行うことは、オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ第2の中間結果をシフトすることをさらに含む。マスクされたシフト加算演算を行うことは、シフトされた第1の中間結果と、シフトされた第2の中間結果とを加算することをさらに含む。マスクされたシフト加算演算を行うことは、加算の出力を、マスクされたシフト加算演算の結果として出力することをさらに含む。
【0012】
本発明の1つまたは複数の実施形態では、第1のシフト量が、オペランドの第1の対のうちの第1のオペランド内の最初の非ゼロ・ビットのインデックスである。
【0013】
本発明の1つまたは複数の実施形態では、第1のシフト量だけ第1の中間結果をシフトすることが、第1のシフト量だけ第1の中間結果をゼロ・パディングすることを含む。
【0014】
本発明の1つまたは複数の実施形態では、第2のシフト量だけ第2の中間結果をシフトすることが、第2のシフト量だけ第2の中間結果をゼロ・パディングすることを含む。
【0015】
本発明の1つまたは複数の実施形態では、方法は、シフトされた第1の中間結果とシフトされた第2の中間結果とを加算することから生じた桁上げに基づいて桁上げフラグを更新すること、をさらに含む。
【0016】
本発明の1つまたは複数の実施形態では、桁上げフラグが、マスクされたシフト加算演算を行う受け取られた命令に基づいて更新される。
【0017】
本発明の1つまたは複数の実施形態では、オペランドのセットが、レジスタのセット内に提供される。
【0018】
本発明の1つまたは複数の実施形態によれば、コンピュータ・プログラム製品は、コンピュータ実行可能命令が記憶されているコンピュータ可読メモリを含み、コンピュータ実行可能命令は、プロセッサによって実行されたときに、プロセッサに、マスクされたシフト加算演算を並列に使用して算術演算を行うための方法を行わせる。オペランドのセットに対して各マスクされたシフト加算演算を行うことは、オペランドのセットと共にマスクされたシフト加算演算を行う命令を受け取ることを含む。各マスクされたシフト加算演算を行うことは、オペランドのセットの中のオペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることをさらに含む。各マスクされたシフト加算演算を行うことは、オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ第1の中間結果をシフトすることをさらに含む。各マスクされたシフト加算演算を行うことは、オペランドのセットの中のオペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることをさらに含む。各マスクされたシフト加算演算を行うことは、オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ第2の中間結果をシフトすることをさらに含む。各マスクされたシフト加算演算を行うことは、シフトされた第1の中間結果と、シフトされた第2の中間結果とを加算することをさらに含む。各マスクされたシフト加算演算を行うことは、加算の出力を、マスクされたシフト加算演算の結果として出力することをさらに含む。
【0019】
本発明の1つまたは複数の実施形態によれば、第1のシフト量が、オペランドの第1の対のうちの第1のオペランド内の最初の非ゼロ・ビットのインデックスである。
【0020】
本発明の1つまたは複数の実施形態によれば、第1のシフト量だけ第1の中間結果をシフトすることが、第1のシフト量だけ第1の中間結果をゼロ・パディングすることを含む。
【0021】
本発明の1つまたは複数の実施形態によれば、第2のシフト量だけ第2の中間結果をシフトすることが、第2のシフト量だけ第2の中間結果をゼロ・パディングすることを含む。
【0022】
本発明の1つまたは複数の実施形態によれば、上記演算を行うことが、シフトされた第1の中間結果とシフトされた第2の中間結果とを加算することから生じた桁上げに基づいて桁上げフラグを更新すること、をさらに含む。
【0023】
本発明の1つまたは複数の実施形態によれば、オペランドがレジスタ内に提供される。
【0024】
本発明の1つまたは複数の実施形態によれば、コンピュータ・プロセッサは、レジスタのセットと、オペランドのセットに対してマスクされたシフト加算命令を実行するように構成された命令実行ユニットと、を含む。実行は、オペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることを含む。実行は、オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ第1の中間結果をシフトすることをさらに含む。実行は、オペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることをさらに含む。実行は、オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ第2の中間結果をシフトすることをさらに含む。実行は、シフトされた第1の中間結果と、シフトされた第2の中間結果とを加算することをさらに含む。実行は、加算の出力を、マスクされたシフト加算演算の結果として出力することをさらに含む。
【0025】
本発明の1つまたは複数の実施形態では、オペランドの第1の対とオペランドの第2の対とが並列に処理される。
【0026】
本発明の1つまたは複数の実施形態では、オペランドがレジスタのセット内に提供される。
【0027】
本発明の1つまたは複数の実施形態によれば、算術演算のためのコンピュータ実装方法は、処理ユニットにより、算術演算の2つの入力値をいくつかの別個の部分に分割し、2つの入力値のうちの2つの対応する部分を、マスクされたシフト加算演算のオペランドのセットの一部として使用して、マスクされたシフト加算演算を並列に行うこと、を含む。各マスクされたシフト加算演算を行うことは、オペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることを含む。各マスクされたシフト加算演算を行うことは、オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ第1の中間結果をシフトすることをさらに含む。各マスクされたシフト加算演算を行うことは、オペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることをさらに含む。各マスクされたシフト加算演算を行うことは、オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ第2の中間結果をシフトすることをさらに含む。各マスクされたシフト加算演算を行うことは、シフトされた第1の中間結果と、シフトされた第2の中間結果とを加算することをさらに含む。各マスクされたシフト加算演算を行うことは、加算の出力を、マスクされたシフト加算演算の結果として出力することをさらに含む。
【0028】
本発明の1つまたは複数の実施形態では、オペランドの第1の対とオペランドの第2の対とが並列に処理される。
【0029】
上記の特徴は、様々な種類の実装の中でも、少なくとも、システム、コンピュータ・プログラム製品、および機械によっても提供され得る。
【0030】
本発明の実施形態は、既存技術と比べて短縮された時間でマスクされたシフト加算を行う命令(例えば、add_ms、add_msc)を実装することができるプロセッサを容易にする技術的解決策を提供する。本発明の実施形態は、反復にまたがる依存性を低減した、マスクされたシフト加算命令の実行を容易にすることによって時間要件を改善する。依存性は、本発明の1つまたは複数の実施形態において、シフト量をマスクに符号化することによって低減され、シフトは、マスク中の非ゼロ・ビットのインデックスとなる。さらに、本発明の実施形態は、本発明の実施形態は、桁上げリップル演算を行い、縮小基数表現中の桁上げビットの数を単一ビットに減らすためにこの命令を利用することを容易にする(表2)。
【0031】
追加的な技術的特徴および利益が本発明の技術を通じて実現される。本発明の実施形態および態様は、本明細書に詳細に説明され、特許請求される主題の一部とみなされる。よりよい理解のために、詳細な説明および図面を参照する。
【0032】
本明細書に記載される排他的権利の詳細事項が、特に指摘され、明細書の末尾にある特許請求の範囲に明瞭に請求される。本発明の実施形態の前述および他の特徴および利点は、次の添付図面と併せて読まれる以下の詳細な説明から明らかになる。
【図面の簡単な説明】
【0033】
【
図1】本発明の1つまたは複数の実施形態によって対処される技術的課題の視覚的表現である。
【
図2】本発明の1つまたは複数の実施形態による、マスクされたシフト加算演算を行う方法のフローチャートである。
【
図3】本発明の1つまたは複数の実施形態による、シフト量を決定するための方法を示す図である。
【
図4】本発明の1つまたは複数の実施形態による、プロセッサのレジスタの値に行われている演算を示す図である。
【
図5】既存技術を使用して行われる加算演算と、本発明の1つまたは複数の実施形態に従って行われる加算演算の比較のブロック図である。
【
図6】本発明の1つまたは複数の実施形態によるプロセッサのブロック図である。
【
図7】本発明の1つまたは複数の実施形態によるコンピューティング・システムの図である。
【発明を実施するための形態】
【0034】
本明細書に描かれる図は説明を目的とする。本発明の思想から逸脱することなく、図またはそこに説明される動作に多くの変形があり得る。例えば、動作を異なる順序で行うことができ、または動作を追加、削除、もしくは変更することができる。また、用語「結合される」およびその変化形は、2つの要素の間に通信経路を有することを意味し、間に介在する要素/接続がない、それら要素の間の直接の接続を示唆しない。このような変形はすべて、本明細書の一部とみなされる。
【0035】
添付図面および開示される実施形態の以下の詳細な説明では、図に示される様々な要素に、2桁または3桁の参照符号が与えられている。軽微な例外を除いて、各参照符号の一番左の桁が、その要素が最初に示されている図に対応する。
【0036】
マスクされたシフト加算演算の実施を容易にすることにより、コンピュータ・プロセッサの効率を向上させる技術的解決法が本明細書に記載される。コンピュータ・システムでは、加算および乗算の算術演算が頻繁に使用される。
【0037】
コンピュータ・システムは、通例、算術演算を行う際に2進数表現を使用する。さらに、コンピュータ・システム、特にプロセッサおよびプロセッサの算術論理ユニット(ALU)は、例えば、32ビット、64ビット、128ビット等の、所定の「幅」または「ワード・サイズ」(w)を有する。幅は、プロセッサが一度に処理することのできる最大ビット数を表す。プロセッサの幅は、レジスタのサイズ、ALU処理幅のサイズ、またはプロセッサに関連する構成要素の他のそのような処理限界によって決定され得る。
【0038】
プロセッサが縮小基数表現を用いて加算演算および乗算演算を行うときに、技術的課題が存在する。
図1は、本発明の1つまたは複数の実施形態によって対処される技術的課題の視覚的表現を提供する。pをnビットの数とし、wをプロセッサ10のワード・サイズとし、算術演算がpに対して行われるとする。このとき、プロセッサ10は、0<ρ<wとなるように基数
【数1】
を決定し、l=n/ρと定義しなければならない。ここで、lは、この算術演算のために必要とされるレジスタ12(またはメモリ位置)の数である。場合によっては、「l」は「リム数(number limbs)」と呼ばれる。このとき、要素
【数2】
は、下記になるように、整数桁の列A=(a
0,...a
l-1)によって表される。
【数3】
および
【数4】
ρの値を選択することは煩雑であり、実装のトレードオフを生じさせる。プロセッサのワード・サイズよりも小さいρを選択することは、部分積を累積することから生じる桁上げビットがワードに収まるという利点をもたらす。しかし、ある部分積から次の部分積へ桁上げビットをリップルさせることは、一続きの命令を必要とし、ボトルネックとなる。また、乗算はρビットに対して行われるため、ρは、ネイティブのハードウェア乗算器(例えばALU)が少なくともρビットを扱えるように選定される必要がある。大半のプロセッサでは、浮動小数点乗算器が整数乗算のためにも使用され、その結果、ワード・サイズよりも小さいビット幅をサポートするハードウェア乗算器、例えば64ビットマシンにおける56ビット乗算器、につながる。
【0039】
例えば、乗算演算がpについて行われると考える。乗算を行った後、各レジスタ12に記憶されている各ワードには、桁上げビット14の累積がある。桁上げビット14は、各「リム」がρビットに戻るように、後続のワードに加算される必要がある。既存のプロセッサでは、桁上げビット14を伝搬させるために、最下位ワードから開始して最上位ワードまで進む「リップル・キャリー」演算が行われる。この演算は順次行われる必要があるが、ワード間のデータ依存性は、あるワードに対する演算は、その前のワードの桁上げビット14が加算されて、その加算の結果が入手可能になった後にのみ開始できることを意味する。
【0040】
本発明の実施形態は、そのような技術的課題に対処する技術解決策を提供する。本発明の実施形態は、ワード間のデータ依存性を低減して、桁上げビット14を順に伝搬させる演算を行うのを容易にする。その結果、本発明の1つまたは複数の実施形態においては、前のワードのリップル演算の結果を待つ必要なく、桁上げ伝搬動作を次々に発することができる。それにより、本発明の実施形態は、プロセッサの動作を向上させ、したがってコンピューティング技術の改良を提供する。
【0041】
図2は、本発明の1つまたは複数の実施形態による、マスクされたシフト加算演算を行う方法のフローチャートを示す。方法は、ブロック100において、マスクされたシフト加算演算を行う命令を受け取ることを含む。例えば、命令は、「add_ms,a,b,c,d,e」と表すことができ、ここで、オペランドa、b、c、d、eは、プロセッサ10内のレジスタ12である。命令の別の変形は、「add_msc,a,b,c,d,e」であり得る。この場合、桁上げビットが加算され、その加算から生じた桁上げが、プロセッサ10の桁上げビット/フラグ(図示せず)に格納される。
【0042】
この命令の結果は、e=[(a&c)>>c_first_one]+[(b&d)>>d_first_one]であり、c_first_oneは、最下位ビットから数えてcの中の最初の非ゼロ・ビットのインデックスであり、d_first_oneは、最下位ビットから数えてdの中の最初の非ゼロ・ビットのインデックスである。
図4は、本発明の1つまたは複数の実施形態による、プロセッサ10のレジスタ12の値に行われている演算を示す。
【0043】
命令の名前、使用されるオペランド、および命令の形式は、本発明の他の実施形態において様々に異なり得ることが理解される。さらに、本発明の他の実施形態では、オペランドは、メモリ位置、直接値、アドレス・ポインタ等、異なる形で提供され得ることが理解される。さらに、本発明の実施形態は、オペランドが特定の順序にあるものとして本明細書に記載されるが、本発明の他の実施形態では、オペランドの順序は異なり得る。
【0044】
ブロック101において、プロセッサ10は、第1および第3のオペランドであるレジスタaおよびc12を読み出す。ブロック102において、プロセッサ10は、第1のオペランドと第3のオペランドに論理積演算(&)を行い、それが中間結果として格納される。ブロック103において、プロセッサ10は、第3のオペランドであるレジスタc12を用いてシフト量を決定する。
【0045】
図3は、本発明の1つまたは複数の実施形態による、シフト量を決定するための方法を示す。ブロック201において、プロセッサ10は、最下位ビット(LSB)から開始して最上位ビット(MSB)まで、オペランドをビット単位でスキャンする。一部の実施形態では、LSBにインデックス0が割り当てられてよく、一部の実施形態では、MSBにインデックス0が割り当てられてよいことに留意すべきである。オペランドは、レジスタ12、メモリ位置、直接値、またはシフト量が基づく入力値を指定する任意の他の種類の入力であり得る。オペランドのLSBから最上位ビット(MSB)までに遭遇するビットごとに、ブロック202において、プロセッサ10は、そのビットが非ゼロ(すなわち1)であるかどうかを確認する。非ゼロ・ビットの確認(ブロック202)は、(ブロック203において)非ゼロ・ビットに遭遇するまで、または入力値の全ビットが確認されるまで継続する。ブロック203において、最初の非ゼロ・ビットのインデックスが判定される。オペランドがゼロの場合は、ゼロ値が出力される。
【0046】
図2の方法のフローチャートを再度参照すると、第3のオペランドcを使用してシフト量が決定されると(ブロック103)、ブロック104において、プロセッサ10は、中間結果に対してそのシフト量だけシフト演算を行い、結果をゼロ・パディングして新たな(第2の)中間結果を得る。
【0047】
ブロック105において、プロセッサ10は、第2および第4のオペランドbおよびdを読み出す。ブロック106において、プロセッサ10は、第2のオペランドと第4のオペランドに論理積演算(&)を行い、それが中間の(第3の)結果として格納される。ブロック107において、プロセッサ10は、第4のオペランドdを用いて(第2の)シフト量を決定する。シフト量は、
図3で説明した技術と同じ技術を使用して決定される。さらに、ブロック108において、プロセッサ10は、(第3の)中間結果に対してその(第2の)シフト量だけシフト演算を行い、結果をゼロ・パディングして新たな(第4の)中間結果を得る。
【0048】
ブロック109において、プロセッサ10は、第2の中間結果と第4の中間結果(ブロック104および108からの)を共に加算する。加算の結果は、ブロック110で、第5のオペランドeに格納される。
【0049】
ブロック111において、桁上げビットを記録すべき場合、プロセッサ10は、第2の中間結果と第4の中間結果の加算演算(ブロック109の)からの桁上げに応じて桁上げフラグ401を更新する。
【0050】
加算をこのように行うことで、既存技術と比べて、結果を得るために必要な時間が短縮する。
図5は、既存技術を使用して行われる加算演算と、本発明の1つまたは複数の実施形態に従って行われる加算演算の比較のブロック図を示す。比較のために、ワード・サイズw=64および基数ρ=56を使用する現状技術を考える。加算は、表1に示される擬似コード/アルゴリズムを使用して行われる。要約すると、加算は、現状技術により、1:基数の56ビットをオーバーフローするが、ワード全体に収まる部分積を生成し、2:最下位ワードから始めて、基数をオーバーフローするワード中のビットとして桁上げビットを選択し、3:桁上げビットが後続のワードに加算され、4:上記のステップ2、3がすべての部分積に繰り返される、ことにより行われる。
【0051】
【0052】
見て分かるように、1回の反復の中におよび反復にまたがって、命令間に依存性がある(例えば、後続の反復における行4および5は、先行する反復における行16の結果に依存する)。ある反復におけるステップ3および4(先の段落を参照)は、次の反復を開始する前に完了する必要がある。
【0053】
さらに説明するように、本発明の1つまたは複数の実施形態によれば、1回の反復におけるおよび反復にまたがるこの待ち時間成分が低減され、場合によっては解消される。
【0054】
本発明の1つまたは複数の実施形態によるマスクされたシフト加算演算がワード・サイズw=64、基数ρ=54を使用すると考える。命令の実行は、表2に示される擬似コード/アルゴリズムとして表すことができる。
【0055】
【0056】
本明細書に記載されるように、基数の54ビットをオーバーフローするが、ワード全体に収まる部分積が生成される。最上位ワードから開始して、プロセッサは、add_ms pp[i],pp[i-1],MASK_54_107,MASK_108_127,res[i]を行い、ここで、MASK_54_127=ビット0:53でゼロ、ビット54:107で1、108:127でゼロであり、MASK_108_127=ビット0:107でゼロ、ビット108:127で1である。このステップは、すべての部分積に繰り返される。
【0057】
本発明の実施形態は、上記の現状技術からのステップ3とステップ4を組み合わせて1つの命令にする。さらに、ステップ3が、ある反復についての命令を発すると、次の反復の命令は、前の反復の完了を待つことなく、次のクロックで直ちに発生することができる。要約すると、本発明の1つまたは複数の実施形態によるマスクされたシフト加算演算を用いると、依存性が、1回の反復内の命令に限定される。反復にまたがる依存性がないため、ループは、結果を得るために必要とされる時間を短縮するように展開され得る。
【0058】
本発明の実施形態は、例えば、既存技術に対して、256ビットの乗算の場合に40%の向上、2048ビットの乗算の場合に25%の向上をもたらす。後続の演算も乗算である場合に、プロセッサ10を冗長な縮小基数形態に維持することにより、さらなる向上が得られる。
【0059】
したがって、本発明の実施形態は、既存技術と比べて短縮された時間でマスクされたシフト加算を行う命令(例えば、add_ms、add_msc)を実装することができるプロセッサを容易にする技術的解決策を提供する。本発明の実施形態は、反復にまたがる依存性を低減した、マスクされたシフト加算命令の実行を容易にすることによって時間要件を改善する。依存性は、本発明の1つまたは複数の実施形態において、シフト量をマスクに符号化することによって低減され、シフトは、マスク中の非ゼロ・ビットのインデックスとなる。さらに、本発明の実施形態は、桁上げリップル演算を行い、縮小基数表現中の桁上げビットの数を単一ビットに減らすためにこの命令を利用することを容易にする(表2)。
【0060】
図6は、本発明の1つまたは複数の実施形態によるプロセッサのブロック図を示す。プロセッサ10は、様々な構成要素の中でも、命令フェッチ・ユニット601、命令復号オペランド・フェッチ・ユニット602、命令実行ユニット603、メモリ・アクセス・ユニット604、書き戻しユニット605、レジスタのセット12、およびマスクされたシフト加算実行器606を含むことができる。本発明の1つまたは複数の実施形態では、マスクされたシフト加算実行器606は、算術論理ユニット(ALU)(図示せず)の一部であり得る。
【0061】
本発明の1つまたは複数の実施形態では、プロセッサ10は、中央演算処理装置(CPU)、グラフィック処理装置(GPU)、テンソル処理装置(TPU)、またはコンピュータ・システムの任意の他の処理装置など、処理ユニットの中のいくつかのコンピュータ・プロセッサの1つであり得る。代替としてまたは追加として、プロセッサ10は、1つまたは複数の処理装置の一部であるコンピューティング・コアであり得る。
【0062】
命令フェッチ・ユニット601は、メモリから取り出されて実行されるプログラム命令を適切な順序に編成し、それらを命令実行ユニット603に転送する役割を果たす。命令復号オペランド・フェッチ・ユニット602は、命令を命令実行ユニット603に転送する前に、命令およびオペランドの構文解析、例えばアドレス解決、プリフェッチを容易にする。命令実行ユニット603は、命令に従って演算および計算を行う。メモリ・アクセス・ユニット604は、プロセッサ10に結合されているメモリ・デバイス内の特定の位置にアクセスすることを容易にする。メモリ・デバイスは、キャッシュ・メモリ、揮発性メモリ、不揮発性メモリ等であり得る。書き戻しユニット605は、レジスタ12の内容をメモリ・デバイス内の1つまたは複数の位置に記録することを容易にする。マスクされたシフト加算実行器606は、本明細書に記載されるようにマスクされたシフト加算命令を実行することを容易にする。
【0063】
プロセッサの構成要素は、本明細書に記載される技術的解決策の特徴に影響することなく、本発明の1つまたは複数の実施形態において様々に異なり得ることに留意すべきである。本発明の一部の実施形態では、プロセッサ10の構成要素は、組み合わせる、分離する、または本明細書に記載されるものと異なることが可能である。
【0064】
次いで
図7に移ると、一実施形態に従うコンピュータ・システム1500が概略的に示されている。コンピュータ・システム1500は、マスクされたシフト加算演算が行われることを必要とする1つまたは複数の機能を行うために使用される対象コンピューティング・システムであり得る。コンピュータ・システム1500は、本明細書に記載されるように様々な通信技術を利用する任意数のコンピューティング・デバイスおよびネットワークおよびその組合せを備えている、または用いる、あるいはその両方を行う、電子コンピュータ・フレームワークであり得る。コンピュータ・システム1500は、容易にスケーリング可能、拡張可能、およびモジュール式であり得、種々のサービスに合わせて変化する、または互いと独立して一部の機能を再構成する能力を有する。コンピュータ・システム1500は、例えば、サーバ、デスクトップ・コンピュータ、ラップトップ・コンピュータ、タブレット・コンピュータ、またはスマートフォンであってよい。一部の例では、コンピュータ・システム1500は、クラウド・コンピューティング・ノードであってよい。コンピュータ・システム1500は、コンピュータ・システムによって実行される、プログラム・モジュールなどのコンピュータ・システム実行可能命令の一般的文脈で説明され得る。一般に、プログラム・モジュールは、特定のタスクを行う、または特定の抽象データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、ロジック、データ構造等を含み得る。コンピュータ・システム1500は、通信ネットワークによって接続された遠隔の処理デバイスによってタスクが行われる分散クラウド・コンピューティング環境で実施されてよい。分散クラウド・コンピューティング環境では、プログラム・モジュールは、メモリ記憶装置を含む、ローカルおよびリモート両方のコンピュータ・システム記憶媒体に位置してよい。
【0065】
図7に示すように、コンピュータ・システム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)、読出し専用メモリ、フラッシュ・メモリ、または任意の他の好適なメモリ・システムを含み得る。
【0066】
コンピュータ・システム1500は、システム・バス1502に結合された入力/出力(I/O)アダプタ1506および通信アダプタ1507を備えている。I/Oアダプタ1506は、ハード・ディスク1508または任意の他の同様の構成要素あるいはその両方と通信するスモール・コンピュータ・システム・インターフェース(SCSI)アダプタであってよい。I/Oアダプタ1506およびハード・ディスク1508は、本明細書において総称的に大容量ストレージ1510と称される。
【0067】
コンピュータ・システム1500で実行するためのソフトウェア1511が、大容量ストレージ1510に記憶されてよい。大容量ストレージ1510は、プロセッサ1501により可読の有形の記憶媒体の一例であり、ソフトウェア1511は、プロセッサ1501によって実行される命令として記憶されて、コンピュータ・システム1500を、様々な図に関して本明細書の下記に記載されるように動作させる。コンピュータ・プログラム製品およびそのような命令の実行の例は、以下でより詳細に説明される。通信アダプタ1507は、システム・バス1502を、外部ネットワークであってもよいネットワーク1512と相互接続して、コンピュータ・システム1500が他の同様のシステムと通信することを可能にする。1つの実施形態では、システム・メモリ1503の一部と大容量ストレージ1510とが協働してオペレーティング・システムを記憶し、オペレーティング・システムは、
図7に示される様々な構成要素の機能を連携させる、IBMコーポレーションのz/OS(R)またはAIX(R)オペレーティング・システムなど、任意の適当なオペレーティング・システムであってよい。
【0068】
追加的な入力/出力装置が、ディスプレイ・アダプタ1515およびインターフェース・アダプタ1516を介してシステム・バス1502に接続されていると図示される。1つの実施形態では、アダプタ1506、1507、1515、および1516は、中間バス・ブリッジ(図示せず)を介してシステム・バス1502に接続される1つまたは複数のI/Oバスに接続されてよい。ディスプレイ1519(例えば、画面または表示モニタ)がディスプレイ・アダプタ1515によってシステム・バス1502に接続され、ディスプレイ・アダプタ1515は、グラフィックを多用するアプリケーションの性能を向上させるグラフィクス・コントローラおよびビデオ・コントローラを含んでよい。キーボード1521、マウス1522、スピーカ1523等が、インターフェース・アダプタ1516を介してシステム・バス1502に相互接続され得、インターフェース・アダプタ1516は、例えば複数のデバイス・アダプタを単一の集積回路に統合したSuper I/Oチップを含んでよい。ハード・ディスク・コントローラ、ネットワーク・アダプタ、およびグラフィクス・アダプタなどの周辺デバイスを接続するための好適なI/Oバスは、通例、Peripheral Component Interconnect(PCI)などの一般的なプロトコルを含む。よって、
図7のように構成されると、コンピュータ・システム1500は、プロセッサ1501の形態の処理能力、システム・メモリ1503および大容量ストレージ1510を含む記憶能力、キーボード1521およびマウス1522などの入力手段、ならびにスピーカ1523およびディスプレイ1519を含む出力能力を含む。
【0069】
一部の実施形態では、通信アダプタ1507は、特にインターネット・スモール・コンピュータ・システム・インターフェースなどの任意の好適なインターフェースまたはプロトコルを使用してデータを送信することができる。ネットワーク1512は、特に、セルラーネットワーク、無線ネットワーク、ワイド・エリア・ネットワーク(WAN)、ローカル・エリア・ネットワーク(LAN)、またはインターネットであってよい。外部コンピューティング・デバイスが、ネットワーク1512を通じてコンピュータ・システム1500に接続してよい。一部の例では、外部コンピューティング・デバイスは、外部のウェブ・サーバまたはクラウド・コンピューティング・ノードであってよい。
【0070】
図7のブロック図は、コンピュータ・システム1500が
図7に示される構成要素のすべてを含むことを意味するように意図されるものではないことが理解されるべきである。そうではなく、コンピュータ・システム1500は、より少ない適当な構成要素、または
図7に図示されていない追加的な構成要素を含むことができる(例えば、追加的なメモリ構成要素、組み込みコントローラ、モジュール、追加的なネットワーク・インターフェース等)。さらに、コンピュータ・システム1500に関して本明細書に記載される実施形態は、任意の適当な論理を用いて実装されてよく、本明細書で言うところの論理は、様々な実施形態において、好適なハードウェア(例えば、特に、プロセッサ、組み込みコントローラ、または特定用途集積回路)、ソフトウェア(例えば、特にアプリケーション)、ファームウェア、またはハードウェア、ソフトウェア、およびファームウェアの任意の好適な組合せを含み得る。
【0071】
本発明は、任意の可能な技術的詳細の統合レベルにおけるシステム、方法、またはコンピュータ・プログラム製品、あるいはその組合せであってよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実施させるためのコンピュータ可読プログラム命令を有している(1つまたは複数の)コンピュータ可読記憶媒体を含んでよい。
【0072】
コンピュータ可読記憶媒体は、命令実行デバイスによって使用するための命令を保持および記憶することが可能な有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えば、これらに限定されないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、または上述の任意の好適な組合せであってよい。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストには、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、読出し専用メモリ(ROM)、消去可能プログラム可能読出し専用メモリ(EPROMまたはフラッシュ・メモリ)、静的ランダム・アクセス・メモリ(SRAM)、携帯型コンパクト・ディスク読出し専用メモリ(CD-ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク、パンチ・カードや命令が記録されている溝内の隆起構造などの機械的に符号化されたデバイス、または上述の任意の好適な組合せが含まれる。本発明において使用されるコンピュータ可読記憶媒体は、電波または他の自由伝搬する電磁波、導波管もしくは他の伝送媒体を通って伝搬する電磁波(例えば、光ファイバ・ケーブルを通る光パルス)、または電線を通じて伝送される電気信号などの一過性の信号自体であるとは解釈されるべきでない。
【0073】
本明細書に記載されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/処理デバイスに、または、ネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワークまたはワイヤレス・ネットワーク、あるいはその組合せを介して、外部コンピュータもしくは外部記憶装置にダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはその組合せを含んでよい。各コンピューティング/処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受け取り、そのコンピュータ可読プログラム命令を、それぞれのコンピューティング/処理デバイス内部のコンピュータ可読記憶媒体内に記憶するために転送する。
【0074】
本発明の動作を実施するためのコンピュータ可読プログラム命令は、Smalltalk(R)、C++等のオブジェクト指向プログラミング言語、および「C」プログラミング言語または同様のプログラミング言語などの手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組合せで書かれた、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、集積回路の構成データ、または、ソース・コードもしくはオブジェクト・コードのいずれかであってよい。コンピュータ可読プログラム命令は、スタンドアロンのソフトウェア・パッケージとして、全体がユーザのコンピュータ上で、一部がユーザのコンピュータ上で、一部がユーザのコンピュータ上で一部がリモート・コンピュータ上で、または全体がリモート・コンピュータもしくはサーバ上で実行されてよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含む任意タイプのネットワークを通じてユーザのコンピュータに接続されてよく、または接続は外部コンピュータになされてもよい(例えばインターネット・サービス・プロバイダを使用してインターネットを通じて)。一部の実施形態では、例えば、プログラム可能論理回路、フィールド・プログラム可能ゲートアレイ(FPGA)、またはプログラム可能論理アレイ(PLA)を含む電子回路が、本発明の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別設定することによって、コンピュータ可読プログラム命令を実行してよい。
【0075】
本発明の態様は、本明細書において、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して記載される。フローチャート図またはブロック図あるいはその両方の各ブロック、ならびにフローチャート図またはブロックあるいはその組合せの中のブロックの組合せは、コンピュータ可読プログラム命令によって実施され得ることが理解されるであろう。
【0076】
それらのコンピュータ可読プログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するための手段を作り出すように機械を制作すべく、汎用コンピュータ、特殊目的コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されてよい。それらのコンピュータ可読プログラム命令は、命令が記憶されているコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作の態様を実施する命令を含む製造品を構成するように、コンピュータ、プログラム可能データ処理装置、または他のデバイス、あるいはその組合せに特定の様態で機能するように指示することができるコンピュータ可読記憶媒体に記憶されてもよい。
【0077】
コンピュータ可読プログラム命令は、コンピュータ、他のプログラム可能装置、または他のデバイスで実行される命令が、フローチャートまたはブロック図あるいはその両方の1つまたは複数のブロックに指定される機能/動作を実施するように、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードされて、コンピュータ、他のプログラム可能装置、または他のデバイス上で一連の動作ステップを行わせて、コンピュータにより実施されるプロセスを発生させてもよい。
【0078】
図におけるフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装形態のアーキテクチャ、機能、および動作を説明している。これに関して、フローチャートまたはブロック図中の各ブロックは、モジュール、セグメント、または命令の一部を表し得、それは、指定される論理機能を実施するための1つまたは複数の実行可能命令を含む。一部の代替実装形態では、ブロックに記される機能は、図に記される順序から外れて行われてよい。例えば、連続して示される2つのブロックが、実際には実質的に同時に実行されてよく、またはそれらブロックは、時には、関与する機能に応じて逆の順序で実行されてもよい。また、ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方の中のブロックの組合せは、指定される機能を行うか、または特殊目的ハードウェアとコンピュータ命令との組合せを動作させるもしくは実施する、特殊目的のハードウェア・ベース・システムによって実施され得ることが気づかれよう。
【0079】
本発明の様々な実施形態の説明は、説明の目的で提示されたが、網羅的である、または開示される実施形態に制限されることは意図されない。記載される実施形態の範囲および思想から逸脱することなく、多くの変更および変形が当業者に明らかとなろう。本明細書で使用された用語は、実施形態の原理、実際的な応用、もしくは市場に見られる技術に対する技術的向上を最も良く説明するために、または当業者が本明細書に記載される実施形態を理解できるようにするために選択されたものである。
【手続補正書】
【提出日】2024-07-30
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
コンピュータ実装方法であって、
オペランドのセットと共にマスクされたシフト加算演算を行う命令を処理ユニットにより受け取ることと、
前記オペランドのセットの中のオペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
前記オペランドのセットの中のオペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと
を含むコンピュータ実装方法。
【請求項2】
前記第1のシフト量が、前記オペランドの第1の対のうちの前記第1のオペランド内の最初の非ゼロ・ビットのインデックスである、請求項1に記載のコンピュータ実装方法。
【請求項3】
前記第1のシフト量だけ前記第1の中間結果をシフトすることが、前記第1のシフト量だけ前記第1の中間結果をゼロ・パディングすることを含む、請求項
1に記載のコンピュータ実装方法。
【請求項4】
前記第2のシフト量だけ前記第2の中間結果をシフトすることが、前記第2のシフト量だけ前記第2の中間結果をゼロ・パディングすることを含む、請求項
1に記載のコンピュータ実装方法。
【請求項5】
前記シフトされた第1の中間結果と前記シフトされた第2の中間結果とを加算することから生じた桁上げに基づいて、前記処理ユニットの桁上げフラグを更新すること、をさらに含む、請求項
1に記載のコンピュータ実装方法。
【請求項6】
前記桁上げフラグが、前記マスクされたシフト加算演算を行う受け取られた前記命令に基づいて更新される、請求項5に記載のコンピュータ実装方法。
【請求項7】
前記処理ユニットが、前記第1の中間結果および前記第2の中間結果のシフト、ならびに前記シフトされた第1の中間結果と前記第2の中間結果との加算を、2つ以上の入力値について並列に行い、
並列化された演算の出力が、前記2つ以上の入力値についての前記マスクされたシフト加算演算の結果である、請求項
1に記載のコンピュータ実装方法。
【請求項8】
システムであって、
レジスタのセットと、
前記レジスタのセットに結合された1つまたは複数の処理ユニットと、
を備え、前記1つまたは複数の処理ユニットは、オペランドのセットに対してマスクされたシフト加算演算を行うための方法を行うように構成され、前記マスクされたシフト加算演算を行うことが、
前記オペランドのセットの中のオペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
前記オペランドのセットの中のオペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと、を含む、システム。
【請求項9】
前記第1のシフト量が、前記オペランドの第1の対のうちの前記第1のオペランド内の最初の非ゼロ・ビットのインデックスである、請求項8に記載のシステム。
【請求項10】
前記第1のシフト量だけ前記第1の中間結果をシフトすることが、前記第1のシフト量だけ前記第1の中間結果をゼロ・パディングすることを含む、請求項
8に記載のシステム。
【請求項11】
前記第2のシフト量だけ前記第2の中間結果をシフトすることが、前記第2のシフト量だけ前記第2の中間結果をゼロ・パディングすることを含む、請求項
8に記載のシステム。
【請求項12】
前記マスクされたシフト加算演算を行うことが、前記シフトされた第1の中間結果と前記シフトされた第2の中間結果とを加算することから生じた桁上げに基づいて桁上げフラグを更新することをさらに含む、請求項
8に記載のシステム。
【請求項13】
前記桁上げフラグが、前記マスクされたシフト加算演算を行う受け取られた命令に基づいて更新される、請求項12に記載のシステム。
【請求項14】
前記オペランドのセットが、前記レジスタのセット内に提供される、請求項
8に記載のシステム。
【請求項15】
コンピュータ・プロセッサに、請求項1ないし7のいずれか一項に記載の方法の各手順を実行させるためのコンピュータ・プログラム。
【請求項16】
コンピュータ・プロセッサであって、
レジスタのセットと、
オペランドのセットに対してマスクされたシフト加算命令を実行するように構成された命令実行ユニットと、を備え、前記実行が、
オペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
オペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと、を含む、コンピュータ・プロセッサ。
【請求項17】
前記オペランドの第1の対と前記オペランドの第2の対とが並列に処理される、請求項
16に記載のコンピュータ・プロセッサ。
【請求項18】
前記オペランドが前記レジスタのセット内に提供される、請求項
16に記載のコンピュータ・プロセッサ。
【請求項19】
算術演算のためのコンピュータ実装方法であって、
処理ユニットにより、前記算術演算の2つの入力値をいくつかの別個の部分に分割し、前記2つの入力値のうちの2つの対応する部分を、マスクされたシフト加算演算のオペランドのセットの一部として使用して、前記マスクされたシフト加算演算を並列に行うこと、を含み、各マスクされたシフト加算演算を行うことが、
オペランドの第1の対に対して論理AND演算を行って、第1の中間結果を得ることと、
前記オペランドの第1の対のうちの第1のオペランドに基づく第1のシフト量だけ前記第1の中間結果をシフトすることと、
オペランドの第2の対に対して論理AND演算を行って、第2の中間結果を得ることと、
前記オペランドの第2の対のうちの第1のオペランドに基づく第2のシフト量だけ前記第2の中間結果をシフトすることと、
前記シフトされた第1の中間結果と、前記シフトされた第2の中間結果とを加算することと、
前記加算の出力を、前記マスクされたシフト加算演算の結果として出力することと、を含む、コンピュータ実装方法。
【請求項20】
前記オペランドの第1の対と前記オペランドの第2の対とが並列に処理される、請求項
19に記載のコンピュータ実装方法。
【手続補正2】
【補正対象書類名】図面
【補正方法】変更
【補正の内容】
【国際調査報告】