特許第5798650号(P5798650)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

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

▶ インテル・コーポレーションの特許一覧

特許5798650短整数の乗算の数を減らすためのシステム、装置、および方法
<>
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000002
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000003
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000004
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000005
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000006
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000007
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000008
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000009
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000010
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000011
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000012
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000013
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000014
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000015
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000016
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000017
  • 特許5798650-短整数の乗算の数を減らすためのシステム、装置、および方法 図000018
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5798650
(24)【登録日】2015年8月28日
(45)【発行日】2015年10月21日
(54)【発明の名称】短整数の乗算の数を減らすためのシステム、装置、および方法
(51)【国際特許分類】
   G06F 9/305 20060101AFI20151001BHJP
【FI】
   G06F9/30 340A
【請求項の数】20
【外国語出願】
【全頁数】29
(21)【出願番号】特願2014-43808(P2014-43808)
(22)【出願日】2014年3月6日
(65)【公開番号】特開2014-182811(P2014-182811A)
(43)【公開日】2014年9月29日
【審査請求日】2014年3月6日
(31)【優先権主張番号】13/840,985
(32)【優先日】2013年3月15日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】591003943
【氏名又は名称】インテル・コーポレーション
(74)【代理人】
【識別番号】110000877
【氏名又は名称】龍華国際特許業務法人
(72)【発明者】
【氏名】アルブレクト、イリヤ
(72)【発明者】
【氏名】オウルド−アハムド−ヴァル、エルモウスタファ
【審査官】 清木 泰
(56)【参考文献】
【文献】 Jonathan Bush,Timothy S. Newman著,深瀬長彰翻訳,3DNow!を使い倒せ,Linux Japan,日本,株式会社五橋研究所,2000年 3月 1日,第3巻,第3号,Pages:137〜141
【文献】 影山裕昭,x86アセンブラ講座 MMX命令を使ってみよう,Oh!X 1999春号,日本,ソフトバンクパブリッシング株式会社,1999年 5月14日,Pages:252〜258
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/30− 9/355
G06F 9/40− 9/42
G06F 7/00
G06F 7/38− 7/537
G06F 7/57− 7/575
G06F 7/74− 7/78
G06F17/10−17/18
G06F15/80
(57)【特許請求の範囲】
【請求項1】
第1ソースオペランドと、第2ソースオペランドと、デスティネーションオペランドとを特定する2乗乗算(SQRMUL)命令を復号化する復号化ロジックと、
実行ロジックと
を備え、
前記実行ロジックは、
前記第1ソースオペランドのデータ値の2乗を計算し、
前記第2ソースオペランドのデータ値の2乗を計算し、
前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の乗算を計算し、
前記計算の結果を前記デスティネーションオペランドに格納し、
前記計算には1つの乗算オペレーションのみが用いられる、装置。
【請求項2】
前記デスティネーションオペランドは汎用レジスタである、請求項1に記載の装置。
【請求項3】
前記第1ソースオペランドのデータ値の2乗は、前記デスティネーションオペランドの下位ビットに格納され、
前記第2ソースオペランドのデータ値の2乗は、前記デスティネーションオペランドの上位ビットに格納され、
前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の前記乗算は、前記デスティネーションオペランドの中位ビットに格納される、
請求項1または2に記載の装置。
【請求項4】
前記デスティネーションオペランドはパックドデータレジスタであり、
3つの前記計算の各結果は、前記パックドデータレジスタのそれぞれ異なるデータ要素に格納される、請求項1から3のいずれか1項に記載の装置。
【請求項5】
前記実行ロジックは、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成し、
前記一時変数を2乗し、
2乗された前記一時変数を4Nビットだけ右シフトする
ことにより前記第1ソースオペランドの前記データ値の前記2乗を計算し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項1から4のいずれか1項に記載の装置。
【請求項6】
前記実行ロジックは、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成し、
前記一時変数を2乗し、
2乗された前記一時変数を、((4Nビットだけ左シフトされた)−1)の値とANDオペレーションし、
(2N+1)だけ右シフトする
ことにより、前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の前記乗算を計算し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項1から5のいずれか1項に記載の装置。
【請求項7】
前記実行ロジックは、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成し、
前記一時変数を2乗し、
2乗された前記一時変数を、((2Nビットだけ左シフトされた1)−1)の値とANDオペレーションする
ことにより、前記第2ソースオペランドの前記データ値の前記2乗を計算し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項1から6のいずれか1項に記載の装置。
【請求項8】
第1ソースオペランドと、第2ソースオペランドと、デスティネーションオペランドとを特定する2乗乗算(SQRMUL)命令をコンピュータプロセッサで実行する方法であり、
前記第1ソースオペランドのデータ値の2乗を計算する段階と、
前記第2ソースオペランドのデータ値の2乗を計算する段階と、
前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の乗算を計算する段階と、
前記計算の結果を前記デスティネーションオペランドに格納する段階と
を備え、
前記計算には1つの乗算オペレーションのみが用いられる、方法。
【請求項9】
前記デスティネーションオペランドは汎用レジスタである、請求項8に記載の方法。
【請求項10】
前記第1ソースオペランドのデータ値の2乗は、前記デスティネーションオペランドの下位ビットに格納され、
前記第2ソースオペランドのデータ値の2乗は、前記デスティネーションオペランドの上位ビットに格納され、
前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の前記乗算は、前記デスティネーションオペランドの中位ビットに格納される、
請求項8または9に記載の方法。
【請求項11】
前記デスティネーションオペランドはパックドデータレジスタであり、
3つの前記計算の各結果は、前記パックドデータレジスタのそれぞれ異なるデータ要素に格納される、請求項8から10のいずれか1項に記載の方法。
【請求項12】
前記第1ソースオペランドの前記データ値の前記2乗を計算する段階は、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成する段階と、
前記一時変数を2乗する段階と、
2乗された前記一時変数を4Nビットだけ右シフトする段階と
を有し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項8から11のいずれか1項に記載の方法。
【請求項13】
前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の前記乗算を計算する段階は、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成する段階と、
前記一時変数を2乗する段階と、
2乗された前記一時変数を、((4Nビットだけ左シフトされた)−1)の値とANDオペレーションする段階と、
(2N+1)だけ右シフトする段階と
を有し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項8から12のいずれか1項に記載の方法。
【請求項14】
前記第2ソースオペランドの前記データ値の前記2乗を計算する段階は、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成する段階と、
前記一時変数を2乗する段階と、
2乗された前記一時変数を、((2Nビットだけ左シフトされた1)−1)の値とANDオペレーションする段階と
を有し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項8から13のいずれか1項に記載の方法。
【請求項15】
第1ソースオペランドと、第2ソースオペランドと、デスティネーションオペランドとを特定する2乗乗算(SQRMUL)命令を実行するための手順をコンピュータに実行させるプログラムであり、
前記手順は、
前記第1ソースオペランドのデータ値の2乗を計算する手順と、
前記第2ソースオペランドのデータ値の2乗を計算する手順と、
前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の乗算を計算する手順と、
前記計算の結果を前記デスティネーションオペランドに格納する手順と
を備え、
前記計算には1つの乗算オペレーションのみが用いられる、プログラム。
【請求項16】
前記デスティネーションオペランドは汎用レジスタである、請求項15に記載のプログラム。
【請求項17】
前記第1ソースオペランドのデータ値の2乗は、前記デスティネーションオペランドの下位ビットに格納され、
前記第2ソースオペランドのデータ値の2乗は、前記デスティネーションオペランドの上位ビットに格納され、
前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の前記乗算は、前記デスティネーションオペランドの中位ビットに格納される、請求項15または16に記載のプログラム。
【請求項18】
前記第1ソースオペランドの前記データ値の前記2乗を計算する手順は、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成する手順と、
前記一時変数を2乗する手順と、
2乗された前記一時変数を4Nビットだけ右シフトする手順と
を有し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項15から17のいずれか1項に記載のプログラム。
【請求項19】
前記第1ソースオペランドおよび前記第2ソースオペランドの前記データ値の前記乗算を計算する手順は、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成する手順と、
前記一時変数を2乗する手順と、
2乗された前記一時変数を、((4Nビットだけ左シフトされた)−1)の値とANDオペレーションする手順と、
(2N+1)だけ右シフトする手順と
を有し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項15から18のいずれか1項に記載のプログラム。
【請求項20】
前記第2ソースオペランドの前記データ値の前記2乗を計算する手順は、
2Nビットだけ前記第1ソースオペランドの前記データ値を左シフトし、前記第2ソースオペランドの前記データ値により、シフトされた前記データ値をORオペレーションすることにより一時変数を生成する手順と、
前記一時変数を2乗する手順と、
2乗された前記一時変数を、((2Nビットだけ左シフトされた1)−1)の値とANDオペレーションする手順と
を有し、
Nは、前記第1ソースオペランド及び前記第2ソースオペランドのデータ要素のサイズである、請求項15から19のいずれか1項に記載のプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本願発明の分野は一般的にコンピュータプロセッサアーキテクチャに関し、より詳細には、実行されると特定の結果を引き起こす命令に関する。
【背景技術】
【0002】
命令セット、または命令セットアーキテクチャ(ISA)は、コンピュータアーキテクチャのプログラミングに関する部分であり、ネイティブデータ型、命令、レジスタアーキテクチャ、アドレッシングモード、メモリアーキテクチャ、割り込み/例外処理、および外部入出力(I/O)を含みうる。なお、命令という用語は一般的に本明細書において、プロセッサの復号器がマクロ命令を復号化する結果として生じるマイクロ命令、またはマイクロopとは対照的であるマクロ命令、つまり、実行のためにプロセッサに提供される命令を指す。
【図面の簡単な説明】
【0003】
本願発明について、添付の図面中の図において限定的ではなく例示的に示す。同様の参照符号は、同様の要素を示す。
図1】SQRMUL命令の例示的な実行を示す。
図2】1以上の命令を実行するプロセッサ(プロセッサコア)の例示的な実施形態のブロック図である。
図3】プロセッサにおけるSQRMUL命令の実行の実施形態を示す。
図4】SQRMUL命令を処理するための方法の実施形態を示す。
図5】SQRMUL命令を処理するための方法の実施形態を示す。
図6図4および5のフローのいずれかを選択する例示的な方法を示す。
図7】本願発明の一実施形態に係るレジスタアーキテクチャ700のブロック図である。
図8A】本願発明の実施形態に係る、例示的なインオーダパイプラインと、例示的なレジスタリネーミング・アウトオブオーダ発行/実行パイプラインとの両方を示すブロック図である。
図8B】本願発明の実施形態に係る、プロセッサに含められる、インオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。
図9A】チップ内の(同じタイプおよび/または異なるタイプの他のコアを含む)いくつかのロジックブロックのうちの1つである、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。
図9B】チップ内の(同じタイプおよび/または異なるタイプの他のコアを含む)いくつかのロジックブロックのうちの1つである、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。
図10】本願発明の実施形態に係る、1より大きい数のコアを有し得、統合型メモリコントローラを有し得、および、統合型グラフィック処理ロジックを有し得るプロセッサ1000のブロック図である。
図11】例示的なコンピュータアーキテクチャのブロック図である。
図12】例示的なコンピュータアーキテクチャのブロック図である。
図13】例示的なコンピュータアーキテクチャのブロック図である。
図14】例示的なコンピュータアーキテクチャのブロック図である。
図15】本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。
【発明を実施するための形態】
【0004】
以下の説明において、様々な具体的な詳細の説明が明記される。しかし、本願発明の実施形態はそれら具体的な詳細の説明を用いずとも実施され得ることを理解されたい。他の例においては、本説明の理解を曖昧にしないよう、周知の回路、構造、および技術が詳細には示されていない。
【0005】
本明細書において「一実施形態」、「実施形態」、「例示的な実施形態」などについて参照した場合、それらは、説明される実施形態が特定の特徴、構造、または特性を含み得ることを示すが、あらゆる実施形態が同特定の特徴、構造、または特性を含んでいるとは限らないことを示す。さらに、そのような文言は、同じ実施形態について言及しているとは限らない。さらに、ある実施形態に関連して特定の特徴、構造、または特性が説明される場合、明示的に説明されようとされなかろうと、そのような特徴、構造、または特性を他の実施形態と関連して実装することは当業者の理解するところであるものと考えられる。
【0006】
概要 命令セットアーキテクチャは、ISAを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。異なるマイクロアーキテクチャを有するプロセッサは、共通の命令セットを共有し得る。例えば、Intel Pentium(登録商標)4プロセッサ、Intelコアプロセッサ、および、Advanced Micro Devices,Inc.(カリフォルニア州サニーベール)のプロセッサは、x86命令セット(より新しいバージョンではいくつかの拡張命令が追加された)のほぼ同一のバージョンを実装するが、異なる内部設計を有する。例えば、ISAの同じレジスタアーキテクチャが周知の技術を用いる異なるマイクロアーキテクチャで異なるやり方で実装され得る。それらには、専用の物理レジスタ、レジスタリネーミングメカニズムを用いる1以上の動的に割り当てられる物理レジスタ(例えば、Register Alias Table(RAT)、Reorder Buffer(ROB)、およびリタイヤレジスタファイルの利用については、米国特許第5,446,912号に説明され、複数のマップおよびレジスタのプールの利用については米国特許第5,207,132号に説明される)などが含まれる。他に特定されない限り、レジスタアーキテクチャ、レジスタファイル、およびレジスタといった文言は、ソフトウェア/プログラマーにとってビジブル(visible)である、命令がレジスタを特定するやり方を指す。特定されることが望まれる場合、論理的な、アーキテクチャ上の、またはソフトウェアビジブルである、といった形容詞句がレジスタアーキテクチャ内のレジスタ/ファイルを指すために用いられる。他方、任意のマイクロアーキテクチャ(例えば、物理レジスタ、リオーダバッファ、リタイヤレジスタ、レジスタプール)のレジスタを指す場合には異なる形容詞句が用いられる。
【0007】
命令セットは、1以上の命令フォーマットを含む。任意の命令フォーマットは、実行される処理、および同処理の対象であるオペランドなどを特定する様々なフィールド(ビット数、ビット位置)を規定する。任意の命令は、任意の命令フォーマットを用いて表現され、処理およびオペランドを特定する。命令ストリームは、複数の命令からなる特定のシーケンスであり、同シーケンス内の各命令は、ある命令フォーマットの命令の発生である。
【0008】
科学、財務、自動ベクトル化された汎用、RMS(認識、マイニング、合成)/ビジュアルおよびマルチメディアアプリケーション(例えば、2D/3Dグラフィック処理、画像処理、動画圧縮/解凍、音声認識アルゴリズム、および音声操作)においては、多数のデータアイテムに対して同じ処理を行うことが必要となることが多い(「データ並列処理」と呼ばれる)。単一命令複数データ(SIMD)とは、プロセッサに、複数のデータアイテムに対して同じ処理を行わせるタイプの命令を指す。SIMD技術は、レジスタ内のビットを、それぞれが別個の値を表す多数の一定サイズのデータ要素へ論理的に分割し得るプロセッサに特に適している。例えば、64ビットのレジスタ内のビットは、それぞれが別個の16ビット値を表す4つの別個の16ビットのデータ要素として処理されるソースオペランドとして特定され得る。他の例として、256ビットのレジスタ内のビットは、4つの別個の64ビットのパックドデータ要素(クワドワード(Q)サイズのデータ要素)、8つの別個の32ビットのパックドデータ要素(ダブルワード(D)サイズのデータ要素)、16の別個の16ビットのパックドデータ要素(ワード(W)サイズのデータ要素)、または、32の別個の8ビットのデータ要素(バイト(B)サイズのデータ要素)として処理されるソースオペランドとして特定され得る。 このタイプのデータは、パックドデータタイプ、またはベクトルデータタイプと呼ばれ、このデータタイプのオペランドは、パックドデータオペランドまたはベクトルオペランドと呼ばれる。 言い換えると、パックドデータアイテムまたはベクトルとは、パックドデータ要素のシーケンスを指し、パックドデータオペランドまたはベクトルオペランドは、(パックドデータ命令またはベクトル命令としても知られる)SIMD命令のソースまたはデスティネーションオペランドである。
【0009】
例として、1つのタイプのSIMD命令は、垂直方向に2つのソースベクトルオペランドに対して実行される1つのベクトル処理を特定して、同じサイズであり、データ要素の数が同じであり、データ要素の順序が同じである(結果ベクトルオペランドとも呼ばれる)デスティネーションベクトルオペランドを生成する。ソースベクトルオペランドのデータ要素はソースデータ要素と呼ばれ、デスティネーションベクトルオペランドのデータ要素は、デスティネーションまたは結果データ要素と呼ばれる。これらのソースベクトルオペランドはサイズが同じであり、同じ幅のデータ要素を含み、よって、それらは同じ数のデータ要素を含む。2つのソースベクトルオペランドの同じビット位置のソースデータ要素は、(対応するデータ要素とも呼ばれる)データ要素のペアを形成する(つまり、各ソースオペランドのデータ要素位置0のデータ要素が対応し、各ソースオペランドのデータ要素位置1のデータ要素が対応する、などである)。SIMD命令により特定される処理はソースデータ要素のこれらのペアのそれぞれに対して別々に実行され、対応する数の結果データ要素が生成される。よって、ソースデータ要素の各ペアは、対応する結果データ要素を有する。処理が垂直方向に実行され、結果ベクトルオペランドは同じサイズおよび同じ数のデータ要素を有し、結果データ要素は、ソースベクトルオペランドと同じデータ要素の順序で格納されるので、結果データ要素は、結果ベクトルオペランドの、ソースベクトルオペランドのソースデータ要素の対応するペアと同じビット位置にある。 この例示的なタイプのSIMD命令に加えて、他の様々なタイプのSIMD命令がある(例えば、1つだけの、または2より大きな数のソースベクトルオペランドを有するタイプ、水2乗向に実行されるタイプ、異なるサイズの結果ベクトルオペランド、異なるサイズのデータ要素を有する結果ベクトルオペランド、および/または異なるデータ要素の順序を有する結果ベクトルオペランドを生成するタイプ)。なお、デスティネーションベクトルオペランド(またはデスティネーションオペランド)という用語は、ある位置(レジスタ、または命令により特定されるメモリアドレス)に同デスティネーションオペランドを格納し、当該デスティネーションオペランドがソースオペランドとして他の命令により(当該他の命令による同位置の特定により)アクセスされ得るようにする処理を含む、命令により特定される処理の実行の直接的な結果として規定される。
【0010】
x86、MMX(商標)、ストリーミングSIMD拡張命令(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサなどにより採用されるものなどSIMD技術により、アプリケーション性能の大幅な改善が可能となった(Core(商標)およびMMX(商標)は、カリフォルニア州サンタクララのIntel Corporationの登録商標、または商標である)。 Advanced Vector Extensions(AVX)(AVX1およびAVX2)と呼ばれVEX符号化方式を用いる他のSIMD拡張命令のセットが発表され、および/または発行されている(例えば、Intel(登録商標)64 and IA−32 Architectures Software Developers Manual,October 2011、および、Intel(登録商標)Advanced Vector Extensions Programming Reference,June 2011を参照されたい)。
【0011】
+a*b+bおよびa[i]=b[i]の計算などいくつかの通常用いられている数学的オペレーションが、行列および長数の乗算(matrix and long number multiplications)に用いられることが多い。そのような数学的オペレーションは、レイテンシーが大きく現代のCPUに対する負荷が依然としてかなり大きい多くの乗算命令を用いる。例えば、aおよびbが基数Bの符号なし整数だとする。a+a*b+bを計算するためのコードは、以下のようになる。1:a_sq=a*a2:a_times_b=a*b3:b_sq=b*b4:これら3つの乗算の加算
【0012】
現代のCPUでは各乗算は〜5サイクルを要するので、3つの乗算のレイテンシーの合計は、15サイクルとなるであろう。
【0013】
以下に示すのは、命令セットのうち総称的に2乗乗算(SQRMUL)命令と呼ばれる命令の実施形態、および、上記したレイテンシーを改善するために用いられ得るシステム、アーキテクチャ、命令フォーマットなどの実施形態である。SQRMULの実行により、第1ソースオペランドのデータ値の2乗と、第2ソースオペランドのデータ値の2乗と、第1および第2ソースオペランドのデータの乗算とが計算され、これら3つの計算の結果が単一のデスティネーションオペランドに格納される。
【0014】
図1は、SQRMUL命令の例示的な実行を示す。2つのソースレジスタ101、103はそれぞれ、値A、Bを有する。これらの値は実行ロジック107により処理され、A、A*B、およびBが生成される。これらの結果は、デスティネーションレジスタ105に格納される。このレジスタは、汎用レジスタ(例えば、ダブルワードサイズのレジスタ)、または、(計算値を格納するための専用のデータ要素位置を有する)パックドデータレジスタであり得る。特定の順序が示されるが、計算値を格納するための他の何らかの順序が用いられ得る。
【0015】
図2は、1以上のSQRMUL命令204を実行するプロセッサ(プロセッサコア)200の例示的な実施形態のブロック図である。いくつかの実施形態において、プロセッサは、(例えば、デスクトップ、ラップトップ、サーバ、および同様のコンピュータで用いられるタイプの)汎用プロセッサであり得る。代替的に、プロセッサは特定用途向けプロセッサであり得る。適した特定用途向けプロセッサの例には、数多くあるうちのいくつかを挙げると、ネットワークプロセッサ、通信プロセッサ、暗号プロセッサ、グラフィックプロセッサ、コプロセッサ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、およびコントローラが含まれるが、これらに限定されない。プロセッサは、様々な複数命令セットコンピューティング(CISC)プロセッサ、様々な縮小命令セットコンピューティング(RISC)プロセッサ、様々な超長命令語(VLIW)プロセッサ、これらの様々なハイブリッド型、または全体的に他のタイプのプロセッサのうちいずれかであり得る。
【0016】
プロセッサ200は、アーキテクチャ的にビジブルなレジスタ(architecturally−visible registers)(例えば、アーキテクチャレジスタファイル)205を含む。またアーキテクチャレジスタは本明細書において単にレジスタとも呼ばれ得る。他に特定されないか、または明らかでない限り、本明細書においてアーキテクチャレジスタ、レジスタファイル、およびレジスタといった文言は、ソフトウェアおよび/またはプログラマーにとってビジブルなレジスタ、並びに/若しくは、オペランドを識別するマクロ命令またはアセンブリ言語命令により特定されるレジスタを指す。これらのレジスタは、任意のマイクロアーキテクチャ内の他のアーキテクチャ的でない、またはアーキテクチャ的にビジブルでないレジスタ(例えば、命令により用いられる一時的なレジスタ、リオーダバッファ、リタイヤレジスタなど)と対比される。レジスタは一般的にオンダイのプロセッサ格納位置を表す。示されるアーキテクチャレジスタは、パックドデータレジスタ206を含む。パックドデータレジスタのそれぞれは、パックドデータまたはベクトルデータを格納するよう動作可能である。また、示されるアーキテクチャレジスタは、パックドデータ処理マスクレジスタ207も含みうる。パックドデータ処理マスクレジスタのそれぞれは、パックドデータ処理マスクを格納するよう動作可能である。これらのレジスタは、本説明において、書き込みマスクレジスタと呼ばれ得る。パックドデータオペランドは、パックドデータレジスタ207に格納され得る。
【0017】
またプロセッサは、実行ロジック208も含む。実行ロジックは、1以上のSQRMUL命令204を実行または処理するよう動作可能である。いくつかの実施形態において、実行ロジックはこれらの命令を実行するための特定のロジック(例えば、場合によってはファームウェアと組み合わせられる特定の回路またはハードウェア)を含みうる。
【0018】
SQRMULの例示的なフォーマット
この命令の例示的なフォーマットは、「SQRMUL DEST,SOURCE 1,SOURCE 2」である。ここでオペランドのうち全てがレジスタである。いくつかの実施形態において、レジスタは汎用レジスタである。これらのレジスタは、8、16、32、64、および128ビットを含むがこれらに限定されない何らかのサイズのものである。他の実施形態において、レジスタは、浮動小数点、またはパックドデータレジスタである。 他の実施形態において、ソースは汎用レジスタであり、デスティネーションはパックドデータレジスタである。殆どの実施形態において、ソースレジスタは、符号なし整数を格納する。
【0019】
SQRMULの実行の例示的な方法 図3は、プロセッサにおけるSQRMUL命令の実行の実施形態を示す。301において、第1および第2ソースレジスタオペランドと、デスティネーションレジスタオペランドと、命令コードとを含むSQRMUL命令がフェッチされる。
【0020】
303において、SQRMUL命令が、復号化ロジックにより復号化される。
【0021】
305において、ソースオペランドの値が取得される/読み取られる。例えば、ソースレジスタが読み取られる。
【0022】
307において、復号化されたSQRMUL命令(またはマイクロ命令などの命令を含む処理)が1以上の機能ユニットなどの実行リソースにより実行され、第1ソースオペランドのデータ値の2乗と、第2ソースオペランドのデータ値の2乗と、第1および第2ソースオペランドのデータの乗算とが計算され、これら3つの計算の結果が全て単一のデスティネーションオペランドに格納される。
【0023】
309において、計算値は、デスティネーションレジスタオペランドに格納される。これらの値は、重要性の最も低いものから重要性の最も高いものにかけて(A、A*B、B)、またはその逆など特定の順序で格納され得る。いくつかの実施形態において、計算値はパックドデータレジスタのデータ要素に格納される。
【0024】
307と309とは別々に示されたが、いくつかの実施形態において、それらは命令の実行の一部として共に実行される。
【0025】
図4および5は、SQRMUL命令を処理するための方法の実施形態を示す。これらの実施形態において、Lは、ビット(32または64)で表される汎用レジスタのサイズとして定義され、aおよびbはそれぞれ、基数Bの第1および第2ソースオペランドの符号なし整数であり、Nは第1ソースオペランド及び第2ソースオペランドのデータ要素のサイズに等しい。以下の例において、aまたはAは、第1ソースに格納されるデータを表し、bまたはBは、第2ソースに格納されるデータを表す。いくつかの実施形態において、シフトなどは、ビット数単位で行われる。
【0026】
図4は、SQRMUL命令を処理するための方法の実施形態を示す。これは、L≧6Nである一般的なケースである。本実施形態において、処理301〜305のうち全てではなくともいくつかが事前に実行されているものと想定されている。しかし、それらは、以下に示される詳細を曖昧にしないよう示されていない。例えば、フェッチおよび復号化は示されておらず、オペランドの取得も示されていない。
【0027】
401において、一時変数tが構築される。 いくつかの実施形態において、この一時変数は、Aを2Nだけ左シフトし、Bにより、そのシフトされた値をORオペレーションすることにより構築される。言い換えると、t=(A<<2*N)|Bである。典型的には、このオペレーションは、2つのクロックサイクルを要する。結果として得られるtの値は、A*22N+Bである。
【0028】
403において、一時変数の2乗が計算される。これにより、t=t*t=A*24N+2AB*22N+Bである第2の一時変数が生成される。いくつかの例において、この乗算は、5つのサイクルを要する。
【0029】
405において、A、A*B、およびBは、第2の一時変数から抽出される。Aは、第2の一時変数を4Nだけ右シフトすることにより抽出される。言い換えると、A=t>>4Nである。A*Bは、第2の一時変数を、(4Nだけ左シフトされた)−1)の値とANDオペレーションし、(2N+1)だけ右シフトすることにより抽出される。言い換えると、A*B=(t&(<<4N−1))>>(2N+1)である。最後に、Bは、第2の一時変数を、((2Nだけ左シフトされた1)−1)の値とANDオペレーションすることにより抽出される。言い換えると、B=t&(1<<2N−1)である。いくつかのシステムにおいて、このことは、合計2〜3サイクルを要する。
【0030】
407において、抽出された値が格納される。いくつかの実施形態において、A、A*B、およびBはそれぞれ、ダブルワードの下位、中位、および上位の4分の1に格納される。他の実施形態において、これらの値は、パックドデータレジスタの別個のデータ要素に格納される。
【0031】
図5は、SQRMUL命令を処理するための方法の実施形態を示す。 これは、4N=Lである一般的なケースである。本実施形態において、処理301〜305のうち全てではなくともいくつかが事前に実行されているものと想定されている。しかし、それらは、以下に示される詳細を曖昧にしないよう示されていない。例えば、フェッチおよび復号化は示されておらず、オペランドの取得も示されていない。
【0032】
501において、一時変数tが構築される。 いくつかの実施形態において、この一時変数は、Aを2Nだけ左シフトし、Bにより、そのシフトされた値をORオペレーションすることにより構築される。言い換えると、t=(A<<2*N)|Bである。典型的には、このオペレーションは、2つのクロックサイクルを要する。結果として得られるtの値は、A*22N+Bである。
【0033】
503において、一時変数の2乗が計算され、第1および第2の位置に格納される。これにより、A*24N+2AB*22N+Bを格納する位置が生成される。いくつかの例において、この乗算は、5つのサイクルを要する。いくつかの実施形態において、第1および第2の位置はレジスタである。
【0034】
505において、A、A*B、およびBが抽出される。Aは、第1の位置に格納される値である。言い換えると、A=位置1である。A*Bは、(2N+1)だけ、第2の位置に格納されるデータを右シフトすることにより抽出される。言い換えると、A*B=位置2>>(2N+1)である。最後に、Bは、第2の位置の内容を、(22N−1)の値の1の補数とANDオペレーションすることにより抽出される。言い換えると、B=位置2&〜(2<<2−1)。いくつかのシステムにおいて、このことは、合計1サイクルを要する。
【0035】
507において、抽出された値が格納される。いくつかの実施形態において、A、A*B、およびBはそれぞれ、ダブルワードの下位、中位、および上位の4分の1に格納される。他の実施形態において、これらの値は、パックドデータレジスタの別個のデータ要素に格納される。
【0036】
図6は、図4および5のフローのいずれかを選択する例示的な方法を示す。601において、4N=1であるか否かの判断がなされる。判断結果が肯定的である場合、603において、図5のフローが用いられる。判断結果が否定的である場合、605において、図4のフローが用いられる。
【0037】
上記ではSQRMUL命令に関して説明がなされたが、上記のコードシーケンスは、SQRMULに対応しないプロセッサ内の複数の命令により実行され得る。
【0038】
例示的なレジスタアーキテクチャ 図7は、本願発明の一実施形態に係るレジスタアーキテクチャ700のブロック図である。示される実施形態において、512ビットの幅である32のベクトルレジスタ710がある。これらのレジスタは、zmm0〜zmm31として参照される。下位の16のzmmレジスタの下位の256ビットは、レジスタymm0〜16にオーバーレイ(overlaid)される。下位の16のzmmレジスタの下位の128ビット(ymmレジスタの下位の128ビット)は、レジスタxmm0〜15にオーバーレイされる。
【0039】
汎用レジスタ725−示される実施形態において、メモリオペランドをアドレッシングする既存のx86アドレッシングモードと併せて用いられる16の64ビットの汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、およびR8〜R15という名前で参照される。
【0040】
MMXのパックド整数フラットレジスタファイル750がエイリアスされる(aliased)スカラー浮動小数点スタックレジスタファイル(x87スタック)745−示される実施形態において、x87スタックは、x87命令セットの拡張命令を用いて32/64/80ビットの浮動小数点データに対してスカラー浮動小数点オペレーションを実行するために用いられる8つの要素のスタックである。64ビットのパックド整数データに対する処理を実行し、MMXレジスタとXMMレジスタとの間で実行されるいくつかの処理のオペランドを保持するためにMMXレジスタが用いられる。
【0041】
本願発明の代替的な実施形態においては、より広い、またはより狭いレジスタが用いられ得る。加えて、本願発明の代替的な実施形態においては、より多くの、より少ない、または異なるレジスタファイルおよびレジスタが用いられ得る。
【0042】
例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ プロセッサコアは、異なるやり方で、異なる目的のために、また異なるプロセッサ内で実装され得る。例えば、そのようなコアの実装には、1)汎用コンピューティングを目的とする汎用インオーダコア、2)汎用コンピューティングを目的とする高性能の汎用アウトオブオーダコア、3)グラフィック処理および/または科学用途向け(スループット)コンピューティングを主な目的とする特定用途向けコアが含まれ得る。異なるプロセッサの実装には、1)汎用コンピューティングを目的とする1以上の汎用インオーダコア、および/または、汎用コンピューティングを目的とする1以上の汎用アウトオブオーダコアを含むCPU、並びに、2)グラフィック処理および/または科学用途(スループット)を主な目的とする1以上の特定用途向けコアを含むコプロセッサが含まれ得る。そのような異なるプロセッサにより、異なるコンピュータシステムアーキテクチャがもたらされる。それらコンピュータシステムアーキテクチャには、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、統合型グラフィック処理および/または科学用途向け(スループット)ロジックなど特定用途向けロジック、若しくは、特定用途向けコアと呼ばれることもある)、および、4)同じダイ上に、上述した(アプリケーションコアまたはアプリケーションプロセッサと呼ばれることもある)CPU、上述したコプロセッサ、および追加の機能性を含みうるシステムオンチップなどが含まれ得る。次に、例示的なコアアーキテクチャについて説明をし、その後、例示的なプロセッサおよびコンピュータアーキテクチャの説明が続く。
【0043】
例示的なコアアーキテクチャ インオーダおよびアウトオブオーダコアのブロック図
図8Aは、本願発明の実施形態に係る、例示的なインオーダパイプラインと、例示的なレジスタリネーミング・アウトオブオーダ発行/実行パイプラインとの両方を示すブロック図である。図8Bは、プロセッサに含められる、インオーダアーキテクチャコアの例示的な実施形態と、本願発明の実施形態に係る、例示的なレジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図8Aおよび8Bの実線で示される四角は、インオーダパイプラインおよびインオーダコアを示し、破線で示される四角の任意選択的な追加は、レジスタリネーミング・アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様は、アウトオブオーダの態様のサブセットであるので、アウトオブオーダの態様について説明する。
【0044】
図8Aにおいて、プロセッサパイプライン800は、フェッチステージ802、長さ復号化ステージ804、復号化ステージ806、割り当てステージ808、リネーミングステージ810、(発送(dispatch)または発行ステージとしても知られる)スケジューリングステージ812、レジスタ読み取り/メモリ読み取りステージ814、実行ステージ816、書き戻し/メモリ書き込みステージ818、例外処理ステージ822、およびコミットステージ824を含む。
【0045】
図8Bは、実行エンジンユニット850に結合されたフロントエンドユニット830を含み、フロントエンドユニット830と実行エンジンユニット850との両方がメモリユニット870に結合されたプロセッサコア890を示す。コア890は、縮小命令セットコンピューティング(RISC)コア、複数命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、または、ハイブリッドまたは代替的なコアタイプであり得る。さらに他のオプションとして、コア890は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット(GPGPU)コア、グラフィック処理コアなど特定用途向けコアであり得る。
【0046】
フロントエンドユニット830は、分岐予測ユニット832を含み、分岐予測ユニット832は、命令キャッシュユニット834に結合され、命令キャッシュユニット834は、命令トランスレーションルックアサイドバッファ(TLB)836に結合され、命令トランスレーションルックアサイドバッファ(TLB)836は、命令フェッチユニット838に結合され、命令フェッチユニット838は、復号化ユニット840に結合される。復号化ユニット840(または復号器)は、命令を復号化し得、元の命令から復号化され、または、元の命令を反映し、または、元の命令から導出される1以上のマイクロ処理、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成し得る。復号化ユニット840は、様々な異なるメカニズムを用いて実装され得る。適したメカニズムの例としては、ルックアップテーブル、ハードウェア実装、プログラム可能ロジックアレイ(PLA)、マイクロコード読み取り専用メモリ(ROM)などが含まれるがこれらに限定されない。一実施形態において、コア890は、特定のマクロ命令のためのマイクロコードを(例えば、復号化ユニット840内に、または、フロントエンドユニット830内に)格納するマイクロコードROMまたは他の媒体を含む。復号化ユニット840は、実行エンジンユニット850内のリネーム/割り当てユニット852に結合される。
【0047】
実行エンジンユニット850は、リタイヤユニット854に結合されたリネーム/割り当てユニット852と、1以上のスケジューラユニット856からなるセットとを含む。スケジューラユニット856は、予約ステーション、中央命令ウィンドウ(central instruction window)などを含む、任意の数の異なるスケジューラを表す。スケジューラユニット856は、物理レジスタファイルユニット858に結合される。物理レジスタファイルユニット858のそれぞれは、互いに異なる1以上のデータタイプを格納する1以上の物理レジスタファイルを表す。そのようなデータタイプには、スカラー整数、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、スタータス(例えば、次に実行される命令のアドレスである命令ポインタ)などが含まれる。一実施形態において、物理レジスタファイルユニット858は、ベクトルレジスタユニットおよびスカラーレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタ、および汎用レジスタを提供し得る。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々なやり方(例えば、リオーダバッファおよびリタイヤレジスタファイルを用いて、未来のファイル(future file)、履歴バッファ(history buffer)、およびリタイヤレジスタファイルを用いて、レジスタマップおよびレジスタのプールを用いて、など)を示すべく、物理レジスタファイルユニット858にはリタイヤユニット854が重ねられている。リタイヤユニット854および物理レジスタファイルユニット858は、実行クラスタ860結合される。実行クラスタ860は、1以上の実行ユニット862からなるセット、および1以上のメモリアクセスユニット864からなるセットを含む。実行ユニット862は様々な処理(例えば、シフト、追加、減算、乗算)を、様々なタイプのデータ(例えば、スカラー浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態には、特定の機能、または複数の機能からなるセットのための専用の複数の実行ユニットが含まれ得るが、他の実施形態においては、全ての機能を実行する1つだけの実行ユニット、または複数の実行ユニットが含まれ得る。特定の実施形態においては、特定のタイプのデータ/処理に対して別個のパイプライン(例えば、それぞれが自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する、スカラー整数パイプライン、スカラー浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/または、メモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット864を有する特定の実施形態が実施される)が生成されるので、スケジューラユニット856、物理レジスタファイルユニット858、および実行クラスタ860は、場合によっては複数あるものとして示されている。また、別個のパイプラインが用いられる場合、これらのパイプラインのうち1以上は、アウトオブオーダ発行/実行であり得、残りがインオーダであり得ることを理解されたい。
【0048】
複数のメモリアクセスユニット864からなるセットは、メモリユニット870に結合され、メモリユニット870は、データキャッシュユニット874に結合されたデータTLBユニット872を含む。データキャッシュユニット874は、レベル2(L2)キャッシュユニット876に結合される。例示的な一実施形態において、メモリアクセスユニット864は、ロードユニット、格納アドレスユニット、および、格納データユニットを含みうる。これらはそれぞれ、メモリユニット870内のデータTLBユニット872に結合される。命令キャッシュユニット834はさらに、メモリユニット870内のレベル2(L2)キャッシュユニット876に結合される。L2キャッシュユニット876は、1以上の他のレベルのキャッシュへ結合され、さらには、主メモリに結合される。
【0049】
例として、例示的なレジスタリネーミング・アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン800を実装し得る。1)命令フェッチ838が、フェッチおよび長さ復号化ステージ802、804を実行する。2)復号化ユニット840が、復号化ステージ806を実行する。3)リネーム/割り当てユニット852が、割り当てステージ808およびリネーミングステージ810を実行する。4)スケジューラユニット856がスケジュールステージ812を実行する。5)物理レジスタファイルユニット858およびメモリユニット870が、レジスタ読み取り/メモリ読み取りステージ814を実行する。実行クラスタ860が実行ステージ816を実行する。6)メモリユニット870および物理レジスタファイルユニット858が、書き戻し/メモリ書き込みステージ818を実行する。7)様々なユニットが例外処理ステージ822に関わり得る。8)リタイヤユニット854および物理レジスタファイルユニット858が、コミットステージ824を実行する。
【0050】
コア890は、本明細書に説明される命令を含む1以上の命令セット(例えば、x86命令セット(より新しいバージョンではいくつかの拡張命令が追加された)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなど任意選択的な追加の拡張命令を含む)に対応し得る。一実施形態において、コア890は、パックドデータ命令セットの拡張命令(例えば、前述したAVX1、AVX2、および/または、何らかの形態の一般的なベクトルフレンドリーな命令フォーマット(U=0および/またはU=1))に対応するロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられる処理を、パックドデータを用いて実行することが可能になる。
【0051】
コアは、マルチスレッディング(処理またはスレッドの2以上の並列セットを実行)に対応し得、このことを様々なやり方で行いうることを理解されたい。それら様々なやり方には、タイムスライスドマルチスレッディング(time sliced multithreading)、同時のマルチスレッディング(1つの物理コアは、同物理コアが同時にマルチスレッディングを行っているスレッドのそれぞれに対して論理コアを提供する)、または、これらの組み合わせ(例えば、Intel(登録商標)Hyperthreading技術のように、タイムスライスドフェッチ(time sliced fetching)および復号化、並びにその後の同時のマルチスレッディング)が含まれる。
【0052】
アウトオブオーダ実行に関して、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられ得ることを理解されたい。また、プロセッサの示される実施形態は、別個の命令およびデータキャッシュユニット834/874、並びに共有されたL2キャッシュユニット876も含むが、代替的な実施形態においては、例えば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなど命令およびデータの両方に関して単一の内部キャッシュが用いられ得る。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含みうる。代替的に、キャッシュの全てが、コアおよび/またはプロセッサの外部にあり得る。
【0053】
特定的かつ例示的なインオーダコアアーキテクチャ
【0054】
図9Aおよび9Bは、チップ内の(同じタイプおよび/または異なるタイプの他のコアを含む)いくつかのロジックブロックのうちの1つであり得、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。ロジックブロックは、アプリケーションに応じて、何らかの一定の機能ロジック、メモリI/Oインタフェース、および他の必要なI/Oロジックを有する高帯域幅相互接続ネットワーク(例えば、リング型ネットワーク)を介して通信を行う。
【0055】
図9Aは、本願発明の実施形態に係る、シングルプロセッサコアと、そのオンダイ相互接続ネットワーク902への接続と、そのレベル2(L2)キャッシュ904のローカルなサブセットとを示すブロック図である。一実施形態において、命令復号器900は、パックドデータ命令セットの拡張命令を含むx86命令セットに対応する。L1キャッシュ906は、キャッシュメモリ、並びにスカラーおよびベクトルユニットへの低レイテンシーのアクセスを可能とする。(設計を単純化すべく)一実施形態においては、スカラーユニット908およびベクトルユニット910は別個のレジスタセット(それぞれ、スカラーレジスタ912およびベクトルレジスタ914)を用い、それらの間で転送されるデータはメモリに書き込まれ、その後、レベル1(L1)キャッシュ906から読み取られるが、本願発明の代替的な実施形態においては、異なるアプローチが用いられ得る(例えば、1つのレジスタセットが用いられる、または、書き込まれ読み取られることなくデータが2つのレジスタファイル間で転送されることを可能とする通信パスが含まれる)。
【0056】
L2キャッシュ904のローカルなサブセットは、1つのプロセッサコアあたり1つの別個のローカルなサブセットへ分割されるグローバルなL2キャッシュ(global L2 cache)の一部である。各プロセッサコアは、自身のL2キャッシュ904のローカルなサブセットへの直接的なアクセスパスを有する。プロセッサコアにより読まれるデータは、自身のL2キャッシュサブセット904に格納され、それぞれ自身のローカルなL2キャッシュサブセットにアクセスしている他のプロセッサコアと並行して迅速にアクセスされ得る。プロセッサコアにより書き込まれるデータは、自身のL2キャッシュサブセット904に格納され、必要であれば他のサブセットからフラッシュされる。リング型ネットワークは、共有されるデータの一貫性を確保する。リング型ネットワークは、プロセッサコア、L2キャッシュ、および他のロジックブロックなどのエージェントがチップ内で互いに通信を行えるよう双方向性である。各リングデータパスは、1方向あたり、1012ビット幅である。
【0057】
図9Bは、本願発明の実施形態に係る、図9Aのプロセッサコアの部分の拡大図である。図9Bは、L1キャッシュ904のL1データキャッシュ906A部分、並びに、ベクトルユニット910およびベクトルレジスタ914に関する細かな詳細を含む。詳細には、ベクトルユニット910は、整数の単精度浮動、および倍精度浮動命令(integer,single−precision float,and double−precision float instructions)のうち1以上を実行する16ワイドのベクトル処理ユニット(VPU)である(16ワイドALU928を参照されたい)。VPUはスウィズルユニット920によりレジスタ入力のスウィズルに対応し、数値化ユニット922A、922Bにより数値化に対応し、複製ユニット924によりメモリ入力の複製に対応する。
【0058】
統合型メモリコントローラおよびグラフィック処理ロジックを有するプロセッサ 図10は、本願発明の実施形態に係る、1より大きい数のコアを有し得、統合型メモリコントローラを有し得、および、統合型グラフィック処理ロジックを有し得るプロセッサ1000のブロック図である。図10の実線で示される四角は、単一のコア1002A、システムエージェント1010、1以上のバスコントローラユニット1016からなるセットを含むプロセッサ1000を示す。破線で示される四角は任意選択的に追加されるものを含む、つまり、複数のコア1002A〜1002N、システムエージェントユニット1010内の1以上の統合型メモリコントローラユニット1014からなるセット、および特定用途向けロジック1008を含む代替的なプロセッサ1000を示す。
【0059】
よって、プロセッサ1000の異なる実装には、1)特定用途向けロジック1008が(1以上のコアを含みうる)統合型グラフィック処理および/または科学用途向け(スループット)ロジックであり、コア1002A〜1002Nが1以上の汎用コア(例えば、汎用インオーダコア、汎用アウトオブオーダコア、これら2つの組み合わせ)であるCPU、2)コア1002A〜1002Nがグラフィック処理および/または科学用途(スループット)を主な目的とする複数の特定用途向けコアであるコプロセッサ、および3)コア1002A〜1002Nが複数の汎用インオーダコアであるコプロセッサが含まれ得る。よって、プロセッサ1000は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用グラフィック処理ユニット)、高スループットの複数の統合型コア(high−throughput many integrated core)(MIC)コプロセッサ(30以上のコアを含む)、埋め込みプロセッサなど、汎用プロセッサ、コプロセッサ、または特定用途向けプロセッサであり得る。プロセッサは、1以上のチップ上で実装され得る。プロセッサ1000は、例えば、BiCMOS、CMOS、またはNMOSなどの複数の処理技術のうちいずれかを用いる1以上の基板の一部であり得、並びに/若しくはそれら基板上で実装され得る。
【0060】
メモリ階層は、コア内の1以上のレベルのキャッシュ、1以上の共有キャッシュユニット1006からなるセット、および、統合型メモリコントローラユニット1014からなるセットに結合された外部メモリ(図示せず)を含む。共有キャッシュユニット1006からなるセットは、レベル2(L2)、レベル3(L3),レベル4(L4),または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせなど1以上の中間レベルのキャッシュを含みうる。一実施形態においては、リング型の相互接続ユニット1012が統合型グラフィック処理ロジック1008、共有キャッシュユニット1006からなるセット、およびシステムエージェントユニット1010/統合型メモリコントローラユニット1014を相互接続するが、代替的な実施形態においては、そのようなユニットを相互接続するための任意の数の周知の技術が用いられ得る。一実施形態において、1以上のキャッシュユニット1006とコア1002A〜1002Nとの間で一貫性が維持される。
【0061】
いくつかの実施形態において、コア1002A〜1002Nのうち1以上がマルチスレッディングを行うことが出来る。システムエージェント1010は、コア1002A〜1002Nを調整し、動作させるコンポーネントを含む。システムエージェントユニット1010は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含みうる。PCUは、コア1002A〜1002Nおよび統合型グラフィック処理ロジック1008の電力状態を管理するために必要なロジックまたはコンポーネントであり得、または、それらを含みうる。ディスプレイユニットは、1以上の外部接続されたディスプレイを駆動するためのものである。
【0062】
コア1002A〜1002Nは、アーキテクチャ命令セットの点で同種または異種であってもよい。つまり、コア1002A〜1002Nのうち2以上は同じ命令セットを実行可能であり、他のコアは、同命令セットのサブセット、または異なる命令セットのみを実行可能であり得る。
【0063】
例示的なコンピュータアーキテクチャ 図11〜14は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィック処理デバイス、ビデオゲーム機器、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関して当技術分野で公知のシステム設計および構成も適している。一般的に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込み可能な、非常に多種多様なシステムまたは電子デバイスが一般的に適している。
【0064】
図11は、本願発明の一実施形態に係るシステム1100のブロック図を示す。システム1100は、コントローラハブ1120に結合される1以上のプロセッサ1110、1115を含みうる。一実施形態において、コントローラハブ1120は、グラフィック処理メモリコントローラハブ(GMCH)1190および(別個のチップ上にあり得る)入力/出力ハブ(IOH)1150を含む。GMCH1190は、メモリ1140およびコプロセッサ1145が結合されたメモリおよびグラフィック処理コントローラを含む。IOH1150は、入力/出力(I/O)デバイス1160をGMCH1190に結合する。代替的に、メモリおよびグラフィック処理コントローラのうち一方または両方は、(本明細書で説明されるように)プロセッサ内で統合され、メモリ1140およびコプロセッサ1145は、プロセッサ1110、および、IOH1150を備える1つのチップ内のコントローラハブ1120へ直接結合される。
【0065】
追加のプロセッサ1115は任意選択的に用いられるので、図11において破線で示されている。各プロセッサ1110、1115は、本明細書において説明される処理コアのうち1以上を含み得、プロセッサ1000の何らかのバージョンであり得る。
【0066】
メモリ1140は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであり得る。少なくとも1つの実施形態において、コントローラハブ1120は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPath Interconnect(QPI)などのポイントツーポイントインタフェース、または同様の接続1195を介してプロセッサ1110、1115と通信を行う。
【0067】
一実施形態において、コプロセッサ1145は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、埋め込みプロセッサなど特定用途向けプロセッサである。一実施形態において、コントローラハブ1120は、統合型グラフィック処理アクセラレータを含みうる。
【0068】
アーキテクチャ的特性、マイクロアーキテクチャ的特性、熱的特性、電力消費特性などを含む様々な利点に関して、物理リソース1110、1115間では様々な差があり得る。
【0069】
一実施形態において、プロセッサ1110は、一般的なタイプのデータ処理動作を制御する命令を実行する。命令にはコプロセッサ命令が埋め込まれ得る。プロセッサ1110は、取り付けられたコプロセッサ1145により実行されるべきタイプのものとしてこれらのコプロセッサ命令を認識する。したがって、プロセッサ1110は、コプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令(またはコプロセッサ命令を表す制御信号)をコプロセッサ1145へ発行する。コプロセッサ1145は受信したコプロセッサ命令を受け付け、実行する。
【0070】
図12は、本願発明の実施形態に係る、より特定的かつ例示的な第1のシステム1200のブロック図である。図12に示すようにマルチプロセッサシステム1200は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1250を介して結合される第1プロセッサ1270および第2プロセッサ1280を含む。プロセッサ1270、1280のそれぞれは、プロセッサ1000の何らかのバージョンであり得る。本願発明の一実施形態において、プロセッサ1270、1280はそれぞれ、プロセッサ1110、1115であり、コプロセッサ1238は、コプロセッサ1145である。他の実施形態において、プロセッサ1270、1280はそれぞれ、プロセッサ1110、および、コプロセッサ1145である。
【0071】
プロセッサ1270、1280はそれぞれ、統合型メモリコントローラ(IMC)ユニット1272、1282を含むものとして示されている。また、プロセッサ1270は自身のバスコントローラユニットの一部としてポイントツーポイント(P−P)インタフェース1276、1278を含み、同様に、第2プロセッサ1280は、インタフェース1286、1288を含む。プロセッサ1270、1280は、P−Pインタフェース回路1278、1288を用いてポイントツーポイント(P−P)インタフェース1250を介して情報を交換し得る。図12に示されるように、IMC1272、1282は、プロセッサを、各プロセッサにローカルに取り付けられた主メモリの一部であり得るそれぞれのメモリ、つまり、メモリ1232およびメモリ1234に結合する。
【0072】
プロセッサ1270、1280はそれぞれ、ポイントツーポイントインタフェース回路1276、1294、1286、1298を用いて個別のP−Pインタフェース1252、1254を介してチップセット1290と情報を交換し得る。チップセット1290は任意選択的に、高性能インタフェース1239を介してコプロセッサ1238と情報を交換し得る。一実施形態において、コプロセッサ1238は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、埋め込みプロセッサなど特定用途向けプロセッサである。
【0073】
共有キャッシュ(図示せず)は、プロセッサが低電力モードに入った場合に、片方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るよう、いずれかのプロセッサに含まれる、または、両方のプロセッサの外ではあるが、P−P相互接続を介してプロセッサと接続される。
【0074】
チップセット1290は、インタフェース1296を介して第1バス1216と結合され得る。一実施形態において、第1バス1216はPeripheral Component Interconnect(PCI)バス、またはPCI Expressバスなどのバス、若しくは、他の第3世代のI/O相互接続バスであり得る。ただし、本願発明の範囲はそのように限定されない。
【0075】
図12に示されるように、第1バス1216を第2バス1220へ結合するバスブリッジ1218と併せて、様々なI/Oデバイス1214が第1バス1216へ結合され得る。一実施形態において、コプロセッサ、高スループットMICプロセッサ、GPGPU、アクセラレータ(例えば、グラフィック処理アクセラレータ、または、デジタル信号処理(DSP)ユニットなど)、フィールドプログラム可能ゲートアレイ、または何らかの他のプロセッサなど1以上の追加のプロセッサ1215が第1バス1216に結合される。一実施形態において、第2バス1220は、low pin count(LPC)バスであり得る。一実施形態において、例えば、キーボードおよび/またはマウス1222、通信デバイス1227、および、命令/コードおよびデータ1230を含みうるディスクドライブまたは他の大容量記憶デバイスなどの記憶ユニット1228を含む様々なデバイスが第2バス1220に結合され得る。さらに、オーディオI/O1224が、第2バス1220に結合され得る。なお、他のアーキテクチャを用いることも可能である。例えば、図12のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス、または他のそのようなアーキテクチャを実装し得る。
【0076】
図13は、本願発明の実施形態に係る、より特定的かつ例示的な第2のシステム1300のブロック図である。図12および13において同様の要素には同様の参照番号が付与され、図13の他の態様を曖昧にしないよう図12のいくつかの態様は図13において省略されている。
【0077】
図13は、プロセッサ1270、1280がそれぞれ、統合型メモリおよびI/O制御ロジック(「CL」)1272、1282を含みうることを示す。よって、CL1272、1282は、統合型メモリコントローラユニットを含み、I/O制御ロジックを含む。図13は、メモリ1232、1234がCL1272、1282に結合されることだけでなく、I/Oデバイス1314が制御ロジック1272、1282に結合されることも示す。レガシーI/Oデバイス1315は、チップセット1290に結合される。
【0078】
図14は、本願発明の実施形態に係るSoC1400のブロック図を示す。図10の要素と同様の要素には同様の参照番号が付与される。また、破線で示される四角は、より発展したSoCにおける任意選択的な特徴である。図14において、相互接続ユニット1402は、1以上のコア202A〜202Nからなるセットおよび共有キャッシュユニット1006を含むアプリケーションプロセッサ1410と、システムエージェントユニット1010と、バスコントローラユニット1016と、統合型メモリコントローラユニット1014と、統合型グラフィック処理ロジック、画像プロセッサ、オーディオプロセッサ、および動画プロセッサを含みうる1以上のコプロセッサ1420からなるセットと、スタティックランダムアクセスメモリ(SRAM)ユニット1430と、ダイレクトメモリアクセス(DMA)ユニット1432と、1以上の外部ディスプレイに結合するためディスプレイユニット1440とに結合される。一実施形態において、コプロセッサ1420は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、埋め込みプロセッサなどの特定用途向けプロセッサを含む。
【0079】
本明細書で開示するメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにより実施されてもよい。本願発明の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性、および非揮発性のメモリ、および/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラム可能なシステムで実行されるコンピュータプログラムまたはプログラムコードとして実施されてもよい。
【0080】
図12に示されるコード1230などのプログラムコードは、本明細書で開示される機能を実行し、出力情報を生成する入力命令に適用されてもよい。出力情報は、公知の方式で、1以上の出力デバイスに適用されてもよい。本明細書の目的において、処理システムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する何らかのシステムを含む。
【0081】
プログラムコードは、処理システムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実施されてもよい。またプログラムコードは、所望される場合、アセンブリ言語または機械言語で実施されてもよい。事実、本明細書で開示されるメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語、またはインタープリタ型言語であってもよい。
【0082】
少なくとも1つの実施形態の1以上の態様は、機械によって読み出されると当該機械に本明細書で開示される技術を実施するロジックを作成させる、プロセッサ内の様々なロジックを表す機械可読媒体に格納された表現命令によって実施されてもよい。「IPコア」として知られるそのような表現は、有形の機械可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造機械にロードされるべく様々な顧客または製造施設に提供されてもよい。
【0083】
そのような機械可読記憶媒体には、これらに限定されるわけではないが、機械またはデバイスによって製造または形成される、ハードディスク、フロッピー(登録商標)ディスク、光学式ディスク、コンパクトディスク読み取り専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスクなどを含む他の何らかのタイプのディスク、読み取り専用メモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラム可能読み取り専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気または光学式カード、または、電子命令を格納するのに適した他の何らかのタイプの媒体などの記憶媒体を含む物品の非一時的な有形構造を含みうる。
【0084】
したがって、本願発明の実施形態は、本明細書で説明される構造、回路、装置、プロセッサ、および/またはシステム特徴を定める、Hardware Description Language(HDL)などの命令を保持する、または設計データを保持する非一時的な有形機械可読媒体も含む。そのような実施形態は、プログラム製品とも呼ばれ得る。
【0085】
エミュレート(バイナリトランスレーション、コードモーフィングなど) 場合によっては、命令コンバータを用いて、ソース命令セットからターゲット命令セットへ命令が変換される。例えば、命令コンバータは、命令をコアによって処理される1以上の他の命令にトランスレートする(例えば、スタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーションを用いて)、モーフィングする、エミュレートする、または変換してもよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実施されてもよい。命令コンバータは、プロセッサ上、プロセッサ外、または一部がプロセッサ上で一部がプロセッサ外であってもよい。
【0086】
図15は、本願発明の実施形態に係る、ソース命令セットのバイナリ命令をターゲット命令セットのバイナリ命令に変換するソフトウェア命令コンバータの利用を対比するブロック図である。示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実施されてもよい。図15は、少なくとも1つのx86命令セットコアを備えるプロセッサ1516によりネイティブに実行され得るx86バイナリコード1506を生成するべくx86コンパイラ1504を用いてコンパイルされ得る高水準言語1502のプログラムを示す。少なくとも1つのx86命令セットコアを備えるプロセッサ1516は、(1)Intel x86命令セットコアの命令セットの実質的な部分、または、(2)少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ結果を得るべく、少なくとも1つのx86命令セットコアを備えるIntelプロセッサで実行されることを目的とするアプリケーションのオブジェクトコードバージョンまたは他のソフトウェアに適合して実行する、または処理することにより、少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ機能を実行出来るプロセッサを表す。x86コンパイラ1504は、少なくとも1つのx86命令セットコアを備えるプロセッサ1516で追加のリンケージ処理あり、またはなしで実行され得るx86バイナリコード1506(例えばオブジェクトコード)を生成するべく動作可能なコンパイラを表す。同様に、図15は、少なくとも1つのx86命令セットコアを備えないプロセッサ1514(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行するコアを備えるプロセッサ、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを備えるプロセッサなど)によってネイティブに実行され得る代替的な命令セットバイナリコード1510を生成するべく、代替的な命令セットコンパイラ1508を用いてコンパイルされ得る高水準言語1502のプログラムを示す。命令コンバータ1512を用いて、x86命令セットコアを備えないプロセッサ1514によってネイティブに実行され得るコードへx86バイナリコード1506を変換する。この変換されたコードが、代替的な命令セットバイナリコード1510と同じであることは考えられにくい。なぜなら、このことに対応可能な命令コンバータは作成しにくいからである。しかし、変換されたコードは、一般的な動作を実行し、代替的な命令セットからの命令によって構成されているであろう。よって、命令コンバータ1512は、エミュレート、シミュレート、または他の何らかの処理により、プロセッサ、或いは、x86命令セットプロセッサまたはコアを有さない他の電子デバイスがx86バイナリコード1506を実行することを可能とする、ソフトウェア、ファームウェア、ハードウェア、またはこれらの組み合わせを表す。
【0087】
本願発明の実施形態は、装置を含み、装置は、第1ソースオペランドと、第2ソースオペランドと、デスティネーションオペランドとを含む2乗乗算(SQRMUL)命令を復号化する復号化ロジックと、実行ロジックとを備え、実行ロジックは、第1ソースオペランドのデータ値の2乗を計算し、第2ソースオペランドのデータ値の2乗を計算し、第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算を計算し、計算の結果をデスティネーションオペランドに格納し、計算には1つの乗算オペレーションのみが用いられる。
【0088】
装置のいくつかの実施形態において、互い関連して、またはそれぞれ独立して以下のうち1以上が実装される。i)デスティネーションオペランドは汎用レジスタである。ii)第1ソースオペランドのデータ値の2乗は、デスティネーションオペランドの下位ビットに格納され、第2ソースオペランドのデータ値の2乗は、デスティネーションオペランドの上位ビットに格納され、第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算は、デスティネーションオペランドの中位ビットに格納される。iii)デスティネーションオペランドはパックドデータレジスタであり、3つの計算の各結果は、パックドデータレジスタのそれぞれ異なるデータ要素に格納される。iv)実行ロジックは、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成し、一時変数を2乗し、4Nビットだけ一時変数を右シフトすることにより第1ソースオペランドのデータ値の2乗を計算し、Nは、log(データ値の基数)である。v)実行ロジックは、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成し、一時変数を2乗し、2乗された一時変数を、(2だけ左シフトされた2)−1)の値とANDオペレーションし、(2N+1)だけ右シフトすることにより、第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算を計算し、Nは、log(データ値の基数)である。vi)実行ロジックは、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成し、一時変数を2乗し、2乗された一時変数を、((Nだけ左シフトされた1)−1)の値の1の補数とANDオペレーションすることにより、第2ソースオペランドのデータ値の2乗を計算し、Nは、log(データ値の基数)である。
【0089】
本願発明の実施形態は、第1ソースオペランドと、第2ソースオペランドと、デスティネーションオペランドとを含む2乗乗算(SQRMUL)命令をコンピュータプロセッサで実行する方法を含み、方法は、第1ソースオペランドのデータ値の2乗を計算する段階と、第2ソースオペランドのデータ値の2乗を計算する段階と、第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算を計算する段階と、計算の結果をデスティネーションオペランドに格納する段階とを備え、計算には1つの乗算オペレーションのみが用いられる。
【0090】
方法のいくつかの実施形態において、互い関連して、またはそれぞれ独立して以下のうち1以上が実装される。i)デスティネーションオペランドは汎用レジスタである。ii)第1ソースオペランドのデータ値の2乗は、デスティネーションオペランドの下位ビットに格納され、第2ソースオペランドのデータ値の2乗は、デスティネーションオペランドの上位ビットに格納され、第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算は、デスティネーションオペランドの中位ビットに格納される。iii)デスティネーションオペランドはパックドデータレジスタであり、3つの計算の各結果は、パックドデータレジスタのそれぞれ異なるデータ要素に格納される。iv)第1ソースオペランドのデータ値の2乗を計算する段階は、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成する段階と、一時変数を2乗する段階と、4Nビットだけ一時変数を右シフトする段階とを有し、Nは、log(データ値の基数)である。v)第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算を計算する段階は、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成する段階と、一時変数を2乗する段階と、2乗された一時変数を、(2だけ左シフトされた2)−1)の値とANDオペレーションする段階と、(2N+1)だけ右シフトする段階とを有し、Nは、log(データ値の基数)である。vi)第2ソースオペランドのデータ値の2乗を計算する段階は、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成する段階と、一時変数を2乗する段階と、2乗された一時変数を、((Nだけ左シフトされた1)−1)の値の1の補数とANDオペレーションする段階とを有し、Nは、log(データ値の基数)である。
【0091】
本願発明の実施形態は、プロセッサにより実行されるとプロセッサに第1ソースオペランドと、第2ソースオペランドと、デスティネーションオペランドとを含む2乗乗算(SQRMUL)命令を実行する方法を実施させるコードを含む有形の機械可読媒体を含み、方法は、第1ソースオペランドのデータ値の2乗を計算する段階と、第2ソースオペランドのデータ値の2乗を計算する段階と、第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算を計算する段階と、計算の結果をデスティネーションオペランドに格納する段階とを備え、計算には1つの乗算オペレーションのみが用いられる。
【0092】
有形の機械可読媒体のいくつかの実施形態において、互い関連して、またはそれぞれ独立して以下のうち1以上が実装される。i)デスティネーションオペランドは汎用レジスタである。ii)第1ソースオペランドのデータ値の2乗は、デスティネーションオペランドの下位ビットに格納され、第2ソースオペランドのデータ値の2乗は、デスティネーションオペランドの上位ビットに格納され、第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算は、デスティネーションオペランドの中位ビットに格納される。iii)デスティネーションオペランドはパックドデータレジスタであり、3つの計算の各結果は、パックドデータレジスタのそれぞれ異なるデータ要素に格納される。iv)第1ソースオペランドのデータ値の2乗を計算する段階は、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成する段階と、一時変数を2乗する段階と、4Nビットだけ一時変数を右シフトする段階とを有し、Nは、log(データ値の基数)である。v)第1ソースオペランドおよび第2ソースオペランドのデータ値の乗算を計算する段階は、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成する段階と、一時変数を2乗する段階と、2乗された一時変数を、(2だけ左シフトされた2)−1)の値とANDオペレーションする段階と、(2N+1)だけ右シフトする段階とを有し、Nは、log(データ値の基数)である。vi)第2ソースオペランドのデータ値の2乗を計算する段階は、2Nだけ第1ソースオペランドのデータ値を左シフトし、第2ソースオペランドのデータ値により、シフトされたデータ値をORオペレーションすることにより一時変数を生成する段階と、一時変数を2乗する段階と、2乗された一時変数を、((Nだけ左シフトされた1)−1)の値の1の補数とANDオペレーションする段階とを有し、Nは、log(データ値の基数)である。
図1
図2
図3
図4
図5
図6
図7
図8A
図8B
図9A
図9B
図10
図11
図12
図13
図14
図15