(57)【特許請求の範囲】
【請求項１】
プロセッサがハッシュ関数を実行する方法であって、
前記プロセッサが前記ハッシュ関数の複数のＲｏｕｎｄを計算するために使用される複数の状態値の第１のセットを格納するようにレジスタセット内で第１のストレージ位置を指定する段階と、
前記プロセッサが前記ハッシュ関数の複数のＲｏｕｎｄを計算するためにまた使用される複数の状態値の第２のセットを格納するように前記レジスタセット内で第２のストレージ位置を指定する段階と、
前記プロセッサが前記複数の状態値の第１のセットおよび前記複数の状態値の第２のセットを使用し、前記ハッシュ関数の複数のＲｏｕｎｄを実行する段階とを備え、
複数のＲｏｕｎｄの第１のセットのための前記複数の状態値の第１のセットおよび複数のＲｏｕｎｄの第２のセットのための前記複数の状態値の第２のセットを格納すべく前記第１のストレージ位置が指定され、前記複数のＲｏｕｎｄの第１のセットのための前記複数の状態値の第２のセットおよび前記複数のＲｏｕｎｄの第２のセットのための前記複数の状態値の第１のセットを格納すべく前記第２のストレージ位置が指定されるように、前記実行する段階が、前記プロセッサが前記第１のストレージ位置および前記第２のストレージ位置の複数の前記指定をスワッピングすることを含む、方法。
【請求項２】
前記複数のＲｏｕｎｄの第１のセットが複数の偶数のＲｏｕｎｄを有し、前記複数のＲｏｕｎｄの第２のセットが複数の奇数のＲｏｕｎｄを有する、請求項１に記載の方法。
【請求項３】
前記実行する段階がさらに、
前記プロセッサが各Ｒｏｕｎｄにおいて、既存の複数の状態値の第１のセットおよび既存の複数の状態値の第２のセットを使用し、新しい複数の状態値の第１のセットを計算する段階と、
前記プロセッサが前記複数の状態値の第２のセットを前記既存の複数の状態値の第１のセットに等しくなるよう設定する段階とを有する、請求項１または２に記載の方法。
【請求項４】
前記複数の状態値の第２のセットを前記既存の複数の状態値の第１のセットに等しくなるよう前記設定する段階の動作が、前記第１のストレージ位置および前記第２のストレージ位置の複数の前記指定を前記スワッピングすることによって自動的に実行される、請求項３に記載の方法。
【請求項５】
前記第１のストレージ位置および前記第２のストレージ位置の各々が、１２８ビットパックレジスタを有する、請求項４に記載の方法。
【請求項６】
前記第１のストレージ位置および前記第２のストレージ位置の各々が、２５６ビットパックレジスタを有する、請求項４に記載の方法。
【請求項７】
前記ハッシュ関数がセキュアメッセージ（ＳＭ）３ハッシュ関数を有しており、前記複数の状態値の第１のセットは前記ＳＭ３ハッシュ関数のＡ変数、Ｃ変数、Ｅ変数、およびＧ変数を有し、前記複数の状態値の第２のセットは前記ＳＭ３ハッシュ関数のＢ変数、Ｄ変数、Ｆ変数、およびＨ変数を有する、請求項３に記載の方法。
【請求項８】
前記複数の状態値の第１のセットおよび前記複数の状態値の第２のセットの各値が３２ビット値を有する、請求項１から７のいずれか一項に記載の方法。
【請求項９】
前記複数の状態値の第１のセットが、４つの３２ビット値を有し、前記複数の状態値の第２のセットが別の４つの３２ビット値を有する、請求項８に記載の方法。
【請求項１０】
プロセッサであって、
ハッシュ関数の複数の状態変数が格納される、第１のストレージ位置と第２のストレージ位置とを含むレジスタセットと、
前記ハッシュ関数を実行し、かつ、前記ハッシュ関数の複数のＲｏｕｎｄを計算するために使用される複数の状態値の第１のセットを格納するように前記第１のストレージ位置を指定し、かつ、前記ハッシュ関数の前記複数のＲｏｕｎｄを計算するためにまた使用される複数の状態値の第２のセットを格納するように前記第２のストレージ位置を指定する実行ユニットと、
前記複数の状態値の第１のセットおよび前記複数の状態値の第２のセットを使用し、前記ハッシュ関数の複数のＲｏｕｎｄを実行する前記実行ユニットであって、複数のＲｏｕｎｄの第１のセットのための前記複数の状態値の第１のセットおよび複数のＲｏｕｎｄの第２のセットのための前記複数の状態値の第２のセットを格納すべく前記第１のストレージ位置が指定され、前記複数のＲｏｕｎｄの第１のセットのための前記複数の状態値の第２のセットおよび前記複数のＲｏｕｎｄの第２のセットのための前記複数の状態値の第１のセットを格納すべく前記第２のストレージ位置が指定されるように、前記第１のストレージ位置および前記第２のストレージ位置の複数の前記指定をスワッピングすることを実行することが含む前記実行ユニットとを備えるプロセッサ。
【請求項１１】
前記複数のＲｏｕｎｄの第１のセットが複数の偶数のＲｏｕｎｄを有し、前記複数のＲｏｕｎｄの第２のセットが複数の奇数のＲｏｕｎｄを有する、請求項１０に記載のプロセッサ。
【請求項１２】
実行することがさらに、
各Ｒｏｕｎｄにおいて、既存の複数の状態値の第１のセットおよび既存の複数の状態値の第２のセットを使用し、新しい複数の状態値の第１のセットを計算することと、
前記複数の状態値の第２のセットを前記既存の複数の状態値の第１のセットに等しくなるよう設定することとを含む、請求項１０または１１に記載のプロセッサ。
【請求項１３】
前記複数の状態値の第２のセットを前記既存の複数の状態値の第１のセットに等しくなるよう前記設定する動作が、前記第１のストレージ位置および前記第２のストレージ位置の複数の前記指定を前記スワッピングすることによって自動的に実行される、請求項１２に記載のプロセッサ。
【請求項１４】
前記第１のストレージ位置および前記第２のストレージ位置の各々が、１２８ビットパックレジスタを有する、請求項１３に記載のプロセッサ。
【請求項１５】
前記第１のストレージ位置および前記第２のストレージ位置の各々が、２５６ビットパックレジスタを有する、請求項１３に記載のプロセッサ。
【請求項１６】
前記ハッシュ関数がセキュアメッセージ（ＳＭ）３ハッシュ関数を有しており、前記複数の状態値の第１のセットは前記ＳＭ３ハッシュ関数のＡ変数、Ｃ変数、Ｅ変数、およびＧ変数を有し、前記複数の状態値の第２のセットは前記ＳＭ３ハッシュ関数のＢ変数、Ｄ変数、Ｆ変数、およびＨ変数を有する、請求項１２に記載のプロセッサ。
【請求項１７】
前記複数の状態値の第１のセットおよび前記複数の状態値の第２のセットの各値が３２ビット値を有する、請求項１０から１６のいずれか一項に記載のプロセッサ。
【請求項１８】
前記複数の状態値の第１のセットが、４つの３２ビット値および前記複数の状態値の第２のセットが別の４つの３２ビット値を有する、請求項１７に記載のプロセッサ。
【請求項１９】
システムであって、
複数の命令とデータとを格納するメモリと、
前記複数の命令とデータとをキャシュする複数のキャッシュレベルを有するキャッシュサブシステムと、
ネットワーク上で前記システムを通信可能に連結するネットワークインタフェースと、
１または複数の周辺機器から複数のコマンドを受信する、少なくとも１つの入出力ユニットと、
プロセッサとを備え、
前記プロセッサが
ハッシュ関数の複数の状態変数が格納される、第１のストレージ位置と第２のストレージ位置とを含むレジスタセットと、
前記ハッシュ関数を実行し、かつ、前記ハッシュ関数の複数のＲｏｕｎｄを計算するために使用される複数の状態値の第１のセットを格納するように前記第１のストレージ位置を指定し、かつ、前記ハッシュ関数の前記複数のＲｏｕｎｄを計算するためにまた使用される複数の状態値の第２のセットを格納するように前記第２のストレージ位置を指定する実行ユニットと、
前記複数の状態値の第１のセットおよび前記複数の状態値の第２のセットを使用し、前記ハッシュ関数の複数のＲｏｕｎｄを実行する前記実行ユニットであって、複数のＲｏｕｎｄの第１のセットのための前記複数の状態値の第１のセットおよび複数のＲｏｕｎｄの第２のセットのための前記複数の状態値の第２のセットを格納すべく前記第１のストレージ位置が指定され、前記複数のＲｏｕｎｄの第１のセットのための前記複数の状態値の第２のセットおよび前記複数のＲｏｕｎｄの第２のセットのための前記複数の状態値の第１のセットを格納すべく前記第２のストレージ位置が指定されるように、前記第１のストレージ位置および前記第２のストレージ位置の複数の前記指定をスワッピングすることを実行することが含む前記実行ユニットとを備える、システム。
【請求項２０】
前記複数のＲｏｕｎｄの第１のセットが複数の偶数のＲｏｕｎｄを有し、前記複数のＲｏｕｎｄの第２のセットが複数の奇数のＲｏｕｎｄを有する、請求項１９に記載のシステム。
【請求項２１】
実行することがさらに、
各Ｒｏｕｎｄにおいて、既存の複数の状態値の第１のセットおよび既存の複数の状態値の第２のセットを使用し、新しい複数の状態値の第１のセットを計算することと、
前記複数の状態値の第２のセットを前記既存の複数の状態値の第１のセットに等しくなるよう設定することとを含む、請求項１９または２０に記載のシステム。
【請求項２２】
前記複数の状態値の第２のセットを前記既存の複数の状態値の第１のセットに等しくなるよう前記設定する動作が、前記第１のストレージ位置および前記第２のストレージ位置の複数の前記指定を前記スワッピングすることによって自動的に実行される、請求項２１に記載のシステム。
【請求項２３】
前記第１のストレージ位置および前記第２のストレージ位置の各々が、１２８ビットパックレジスタを有する、請求項２２に記載のシステム。
【請求項２４】
前記第１のストレージ位置および前記第２のストレージ位置の各々が、２５６ビットパックレジスタを有する、請求項２２に記載のシステム。
【請求項２５】
前記ハッシュ関数がセキュアメッセージ（ＳＭ）３ハッシュ関数を有しており、前記複数の状態値の第１のセットは前記ＳＭ３ハッシュ関数のＡ変数、Ｃ変数、Ｅ変数、およびＧ変数を有し、前記複数の状態値の第２のセットは前記ＳＭ３ハッシュ関数のＢ変数、Ｄ変数、Ｆ変数、およびＨ変数を有する、請求項２１に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概して、複数のコンピュータプロセッサの分野に関する。具体的には、本発明は複数のハッシュ動作を効率的に実行する方法および装置に関する。
【背景技術】
【０００２】
セキュアメッセージ（Ｓｅｃｕｒｅ  Ｍｅｓｓａｇｅ：ＳＭ）３ハッシュ関数は、Ｃｈｉｎｅｓｅ  Ｃｏｍｍｅｒｃｉａｌ  Ｃｒｙｐｔｏｇｒａｐｈｙ  Ａｄｍｉｎｉｓｔｒａｔｉｏｎによって、インターネット技術タスクフォース（ＩＥＴＦ）およびインターネット研究タスクフォース（ＩＲＴＦ）コミュニティの便宜のため、発行された新しい暗号関数である。ＳＭ３は現在、Ｃｈｉｎａ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｓｅｃｕｒｉｔｙ  Ｓｔａｎｄａｒｄｉｚａｔｉｏｎ  Ｔｅｃｈｎｉｃａｌ  Ｃｏｍｍｉｔｔｅｅ（略してＴＣ２６０）の取り組みによって、ＴＣＭ（Ｔｒｕｓｔｅｄ  Ｃｏｍｐｕｔｉｎｇ  Ｍｏｄｕｌｅ）のハッシュアルゴリズムとして指定されている。ＳＭ３の設計は、ＳＨＡ２の場合、１つのメッセージ由来語をフィーディングするのみであるのに対し、２つのメッセージ由来語を各Ｒｏｕｎｄにフィーディングする等、ＳＨＡ２関数を強化させるべく、複数の機能を追加することによってＳｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ(ＳＨＡ）２の設計を基に構築されている。
【発明の開示】
【０００３】
本願発明は、次の複数の図面に照らしつつ、以下の詳細な説明を読むと、より良く理解できる。
【図面の簡単な説明】
【０００４】
【図１Ａ】本発明の複数の実施形態に係る、インオーダフェッチ、デコード、リタイアパイプラインの一例およびレジスタ名前変更、アウトオブオーダ発行／実行パイプラインの一例の両方を示すブロック図である。
【図１Ｂ】本発明の複数の実施形態に係るプロセッサ内に含まれる、インオーダフェッチ、デコード、リタイアコアの例示的一実施形態およびレジスタ名前変更、アウトオブオーダ発行／実行アーキテクチャコアの一例の両方を示すブロック図である。
【図２】本発明の複数の実施形態に係る統合メモリコントローラおよび複数のグラフィックスを有するシングルコアプロセッサおよびマルチコアプロセッサのブロック図である。
【図３】本願発明の一実施形態に係るシステムのブロック図を示す。
【図４】本願発明の一実施形態に係る第２のシステムのブロック図を示す。
【図５】本願発明の一実施形態に係る第３のシステムのブロック図を示す。
【図６】本願発明の一実施形態に係るシステムオンチップ（ＳｏＣ）のブロック図を示す。
【図７】本願発明の複数の実施形態に従って、ソース命令セット内の複数のバイナリ命令をターゲット命令セット内の複数のバイナリ命令に変換すべく、ソフトウェア命令コンバータを使用する場合の対比を示すブロック図を示す。
【図８】本願発明の複数の実施形態が実装可能なプロセッサアーキテクチャの一実施形態を示す。
【図９】ＳＭ３（セキュアメッセージ）ハッシュ関数を実施すべく、Ｒｏｕｎｄ内で実行される複数の動作を示す。
【図１０】ハッシュ動作の様々な複数のＲｏｕｎｄを実行するアーキテクチャおよび複数の関連技術に係る一実施形態を示す。
【図１１】本願発明の一実施形態に係るハッシュ関数の複数のＲｏｕｎｄを実行する方法を示す。
【発明を実施するための形態】
【０００５】
以下の詳細な説明では、以下に記載の本発明に係る複数の実施形態について完全な理解を提供すべく、多くの具体的な詳細が説明目的で記載されている。しかしながら、当業者にとっては本発明の複数の実施形態がこれら具体的な詳細がなくても実施可能であることが明らかであろう。他の複数の例において、本発明の複数の実施形態に係る根本的な複数の原理を不明瞭にするのを回避すべく、周知の複数の構造および複数のデバイスがブロック図の形態で示されている。
【０００６】
［例示的な複数のプロセッサアーキテクチャおよび複数のデータタイプ］
【０００７】
図１Ａは、本発明の複数の実施形態に係る、インオーダフェッチ、デコード、リタイアパイプラインの一例およびレジスタ名前変更、アウトオブオーダ発行／実行パイプラインの一例の両方を示すブロック図である。図１Ｂは、本発明の複数の実施形態に係るプロセッサ内に含まれる、インオーダフェッチ、デコード、リタイアコアの一例示的実施形態およびレジスタ名前変更、アウトオブオーダ発行／実行アーキテクチャコアの一例の両方を示すブロック図である。図１Ａおよび図１Ｂの複数の実線ボックスは、パイプラインおよびコアの複数のインオーダ部分を示す一方で、複数の破線ボックス内の任意の追加操作は、レジスタ名前変更、アウトオブオーダ発行／実行パイプラインおよびコアを示す。
【０００８】
図１Ａで、プロセッサパイプライン１００は、フェッチステージ１０２、長さデコードステージ１０４、デコードステージ１０６、割当ステージ１０８、名前変更ステージ１１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ１１２、レジスタ読み取り／メモリ読み取りステージ１１４、実行ステージ１１６、ライトバック／メモリ書き込みステージ１１８、例外処理ステージ１２２、およびコミットステージ１２４を含む。
【０００９】
図１Ｂは、実行エンジンユニット１５０に連結されたフロントエンドユニット１３０を含むプロセッサコア１９０を示し、フロントエンドユニット１３０および実行エンジンユニット１５０の両方はメモリユニット１７０に連結されている。コア１９０は、縮小命令セットコンピューテイング（ＲＩＳＣ）コア、複合命令セットコンピューテイング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッド若しくは代替のコアタイプであってよい。さらに別のオプションとして、コア１９０は例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、ＧＰＧＰＵ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｃｏｍｐｕｔｉｎｇ  Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）コア、グラフィックスコア等の特定用途のコアであってよい。
【００１０】
フロントエンドユニット１３０は、命令キャッシュユニット１３４に連結された分岐予測ユニット１３２を含み、命令キャッシュユニット１３４は命令トランスレーションルックアサイドバッファ（ＴＬＢ）１３６に連結され、命令ＴＬＢ１３６は命令フェッチユニット１３８に連結され、命令フェッチユニット１３８はデコードユニット１４０に連結される。デコードユニット（またはデコーダ）１４０は複数の命令をデコード（解読）してよく、またデコードユニット１４０は、出力として、１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、あるいは元の複数の命令からデコードされた他の複数のコントロールシグナル、若しくは元の複数の命令を反映する他の複数のコントロールシグナル、若しくは元の複数の命令から派生された他の複数のコントロールシグナルを生成してよい。デコードユニット１４０は様々な異なるメカニズムを使用して実装されてよい。複数の好適なメカニズムの複数の例は、限定されないが複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ（ＰＬＡ）、複数のマイクロコードリードオンリメモリ（ＲＯＭ）等を含む。一実施形態において、コア１９０はマイクロコードＲＯＭまたは特定の複数のマイクロ命令のためのマイクロコード（例えばデコードユニット１４０内またはフロントエンドユニット１３０内）を格納する他の媒体を含む。デコードユニット１４０は、実行エンジンユニット１５０内の名前変更／割り当てユニット１５２に連結されている。
【００１１】
実行エンジンユニット１５０は、リタイアメントユニット１５４および一連の１または複数のスケジューラユニット１５６に連結された名前変更／割り当てユニット１５２を含む。スケジューラユニット１５６は、複数の予約ステーション、中央命令ウィンドウを含む、任意の数の様々なスケジューラを表す。スケジューラユニット１５６は、物理レジスタファイルユニット１５８に連結されている。複数の物理レジスタファイルユニット１５８のそれぞれは、１または複数の物理レジスタファイルを表し、物理レジスタファイルの様々なファイルは、１または複数の様々なデータタイプを格納する。１または複数の様々なデータタイプとしては、スカラ整数、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点、状態（実行される次の命令アドレスである命令ポインタ等）等である。一実施形態において、物理レジスタファイルユニット１５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、アーキテクチャ的な複数のベクトルレジスタ、複数のベクトルマスクレジスタ、および複数の汎用レジスタを提供してよい。レジスタ名前変更およびアウトオブオーダ実行が実装され得る様々な方法を示すべく、物理レジスタファイルユニット１５８は、リタイアメントユニット１５４によって重ね合わされる（例えばレオーダバッファおよびリタイアメントレジスタファイルを使用する、フューチャファイル、ヒストリバッファ、およびリタイアメントレジスタファイルを使用する、レジスタマップおよびレジスタプールを使用する等）。リタイアメントユニット１５４および物理レジスタファイルユニット１５８は、実行クラスタ１６０に連結される。実行クラスタ１６０は、一連の１または複数の実行ユニット１６２および一連の１または複数のメモリアクセスユニット１６４を含む。実行ユニット１６２は、様々なタイプのデータ（例えば、スカラ浮動小数点、パック整数、パック浮動小数点、ベクトル整数、ベクトル浮動小数点）に対し、様々な操作（例えば、複数のシフト、加算、減算、乗算）を実行してよい。一部の実施形態では、特定の複数の関数または複数の関数セット専用の多数の実行ユニットを含んでよい一方で、他の複数の実施形態は１つのみの実行ユニットまたはユニットのすべてが全部の関数を実行する複数の実行ユニットを含んでよい。特定の複数の実施形態は、特定の複数のタイプのデータ／複数の操作用に、複数の個別のパイプラインを形成するので、スケジューラユニット１５６、物理レジスタファイルユニット１５８、および実行クラスタ１６０は複数の場合もあり得るものとして示されている（例えば、スカラ整数パイプライン、スカラ浮動小数点／パック整数／パック浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／または各々が独自のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有するメモリアクセスパイプライン。個別のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット１６４を有する特定の複数の実施形態が実装される）。複数の個別のパイプラインが使用される場合、１または複数のこれらのパイプラインはアウトオブオーダ発行／実行および残りがインオーダであってよいことも理解されたい。
【００１２】
一連のメモリアクセスユニット１６４は、メモリユニット１７０に連結されており、メモリユニット１７０は、レベル２（Ｌ２）キャッシュユニット１７６に連結されたデータキャッシュユニット１７４に連結されたデータＴＬＢユニット１７２を含む。一実施形態において、メモリアクセスユニット１６４は、ロードユニット、格納アドレスユニット、および格納データユニットを含んでよく、それらの各々はメモリユニット１７０内のデータＴＬＢユニット１７２に連結される。命令キャッシュユニット１３４はさらに、メモリユニット１７０内のレベル２（Ｌ２）キャッシュユニット１７６に連結される。Ｌ２キャッシュユニット１７６は、１または複数の他のレベルのキャッシュに連結され、最終的にはメインメモリに連結される。
【００１３】
例示であるが、例示のレジスタ名前変更、アウトオブオーダ発行／実行コアアーキテクチャは、パイプライン１００を次のように実装してよい。１．命令フェッチ１３８がフェッチ段階１０２および長さデコード段階１０４を実行する。２．デコードユニット１４０がデコード段階１０６を実行する。３．名前変更／割り当てユニット１５２が割当段階１０８および名前変更段階１１０を実行する。４．スケジューラユニット１５６がスケジューリング段階１１２を実行する。５．物理レジスタファイルユニット１５８およびメモリユニット１７０がレジスタ読み取り／メモリ読み取り段階１１４を実行する。実行クラスタ１６０は実行段階１１６を実行する。６．メモリユニット１７０および物理レジスタファイルユニット１５８がライトバック／メモリ書き込み段階１１８を実行する。７．例外処理段階１２２に様々なユニットが関与してよい。８．リタイアメントユニット１５４および物理レジスタファイルユニット１５８はコミット段階１２４を実行する。
【００１４】
コア１９０は本明細書に記載の命令を含め、１または複数の命令セットをサポートしてよい。１または複数の命令セットとして、ｘ８６命令セット（さらに複数の新バージョンでいくつかの拡張命令が追加されている）、カリフォルニア州サニーベールにあるＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールにあるＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮ等の複数のオプションの追加拡張命令を持つ）がある。一実施形態において、コア１９０はパックされたデータ命令セット拡張（例えば、後述のＡＶＸ１、ＡＶＸ２および／またはいくつかの形式の汎用で扱いやすいベクトル命令形式（Ｕ＝０および／またはＵ＝１））をサポートするロジックを含む。これにより、多くのマルチメディアアプリケーションによって使用される複数の操作を、パックされたデータを使用して実行可能にする。
【００１５】
コアはマルチスレッディングをサポートしてよく（複数の操作または複数のスレッドの２又は２より多い並列セットの実行）、かつ、コアはマルチスレッディングのサポートをタイムスライスマルチスレッディング、同時マルチスレッディング（単一の物理コアが、物理コアが同時マルチスレッディングしている複数のスレッドの各々に対しロジカルコアを提供する）、あるいはそれらの組み合わせ（例えばＩｎｔｅｌ（登録商標）のＨｙｐｅｒｔｈｒｅａｄｉｎｇテクノロジ等、タイムスライスフェッチおよびデコード並びにその後の同時マルチスレッディング）を含む、様々な方法で行ってよいことが理解されるべきである。
【００１６】
レジスタ名前変更はアウトオブオーダ実行の文脈の中で記載されている一方で、レジスタ名前変更はインオーダアーキテクチャで使用可能であることを理解されたい。プロセッサの例示の実施形態は、個別の命令キャッシュユニット１３４とデータキャッシュユニット１７４、および共有されたＬ２キャッシュユニット１７６も含む一方で、複数の代替の実施形態は、例えば、レベル１（Ｌ１）内部キャッシュ、または複数のレベルの内部キャッシュのように、複数の命令とデータの両方に対し単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは内部キャッシュと、コアおよび／またはプロセッサに外付けされた外部キャッシュとの組み合わせを含んでよい。あるいは、すべてのキャッシュはコアおよび／またはプロセッサに対し外付けされてよい。
【００１７】
図２は、本発明の複数の実施形態に係る、２個以上のコア、統合メモリコントローラ、および複数の統合グラフィックスを有してよい、プロセッサ２００のブロック図である。図２の複数の実線ボックスは、単一のコア２０２Ａ、システムエージェント２１０、一連の１または複数のバスコントローラユニット２１６を持つプロセッサ２００を示す一方で、複数の破線ボックスの任意の追加操作は複数のコア２０２ＡからＮ、システムエージェントユニット２１０内の一連の１または複数の統合メモリコントローラユニット２１４、および特定用途用ロジック２０８を持つ代替のプロセッサ２００を示す。
【００１８】
従って、プロセッサ２００の様々な実装には次のものが含まれてよい。１．統合されたグラフィックスおよび／またはサイエンティフィック（スループット）ロジックである特定用途用ロジック２０８を持つＣＰＵ（１または複数のコアを含んでよい）、および１または複数の汎用コア（複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら２つの組み合わせ）であるコア２０２ＡからＮ。２．主にグラフィックスおよび／またはサイエンティフィック（スループット）用の多数の特定用途コアであるコア２０２ＡからＮを持つコプロセッサ。３．多数の汎用インオーダコアであるコア２０２ＡからＮを持つコプロセッサ。従って、プロセッサ２００は例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ（Ｇｅｎｅｒａｌ  Ｐｕｒｐｏｓｅ  Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）、高スループットＭＩＣ（Ｍａｎｙ  Ｉｎｔｅｇｒａｔｅｄ  Ｃｏｒｅ）コプロセッサ（３０または３０より多いコアを含む）、埋め込みプロセッサ等の汎用プロセッサ、コプロセッサまたは特定用途用プロセッサであってよい。プロセッサは１または複数のチップに実装されてよい。プロセッサ２００は、例えばＢｉＣＭＯＳ、ＣＭＯＳまたはＮＭＯＳといった任意の多数の処理テクノロジを使用する、１または複数の回路基板の一部であってよく、および／または当該回路基板上に実装されてよい。
【００１９】
メモリ階層は、複数のコア内のキャッシュの１または複数のレベル、一連の共有キャッシュユニット２０６または１または複数の共有キャッシュユニット２０６、および一連の統合メモリコントローラユニット２１４に連結された外部メモリ（図示せず）を含む。一連の共有キャッシュユニット２０６は、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、他のレベルのキャッシュ、ＬＬＣ（Ｌａｓｔ  Ｌｅｖｅｌ  Ｃａｃｈｅ）および／またはこれらの組み合わせ等の１または複数のＭＬＣ（Ｍｉｄ  Ｌｅｖｅｌ  Ｃａｃｈｅ）レベルのキャッシュを含んでよい。
一実施形態で、リングベースの相互接続ユニット２１２が統合グラフィックスロジック２０８、一連の共有キャッシュユニット２０６、およびシステムエージェントユニット２１０／統合メモリコントローラユニット２１４を相互接続する一方で、複数の代替の実施形態はそのような複数のユニットを相互接続するための任意の数の既知の技術を使用してよい。一実施形態で、１または複数のキャッシュユニット２０６と、複数のコア２０２Ａから２０２Ｎとの間の一貫性が維持される。
【００２０】
いくつかの実施形態において、コア２０２Ａからコア２０２Ｎの１または複数のマルチスレッディングを実行できてよい。システムエージェント２１０は複数のコア２０２Ａからコア２０２Ｎを調整および操作するそれらのコンポーネントを含む。システムエージェントユニット２１０は例えば、パワーコントロールユニット（ＰＣＵ）およびディスプレイユニットを含んでよい。ＰＣＵはコア２０２Ａから２０２Ｎおよび統合グラフィックスロジック２０８の電源状態を制御するのに必要なロジックおよび複数のコンポーネントであってよい、あるいはＰＣＵは上記ロジックおよび複数のコンポーネントを含んでよい。ディスプレイユニットは１または複数の外部接続されたディスプレイを駆動するためのものである。
【００２１】
コア２０２Ａから２０２Ｎはアーキテクチャ命令セットの観点から、同種または異種のいずれであってもよい。つまり、コア２０２Ａから２０２Ｎの２又は２より多い同一の命令セットが実行可能であってよい一方で、他の複数のものはその命令セットのサブセットのみまたは異なる命令セットを実行可能であってよい。一実施形態において、コア２０２Ａから２０２Ｎは異種なものであり、後述の複数の「小型」コアおよび複数の「大型」コアの両方を含む。
【００２２】
図３から６は、複数の例示のコンピュータアーキテクチャのブロック図である。複数のラップトップ、複数のデスクトップ、複数のノートパソコン、複数の携帯用情報端末、複数のエンジニアリングワークステーション、複数のサーバ、複数のネットワークデバイス、複数のネットワークハブ、複数のスイッチ、複数の埋め込みプロセッサ、複数のデジタルシグナルプロセッサ（ＤＳＰ）、複数のグラフィックスデバイス、複数のテレビゲームデバイス、複数のセットトップボックス、複数のマイクロコントローラ、複数の携帯電話、複数のポータブルメディアプレーヤ、複数の携帯用デバイス、および様々な他の電子デバイスに係る、複数の技術分野で既知の複数のシステム設計および構成も好ましい。通常、本明細書に記載のプロセッサおよび／または実行ロジックを搭載可能な非常に様々なシステムまたは電子デバイスが概して好ましい。
【００２３】
図３を見ると、本願発明の一実施形態に係るシステム３００のブロック図である。システム３００は、コントローラハブ３２０に連結された１または複数のプロセッサ３１０、３１５を含んでよい。一実施形態において、コントローラハブ３２０はグラフィックスメモリコントローラハブ（ＧＭＣＨ）３９０および入出力ハブ（ＩＯＨ）３５０（個別の複数のチップ上にあってよい）を含む。ＧＭＣＨ３９０はメモリ３４０およびコプロセッサ３４５が連結された複数のメモリコントローラおよびグラフィックスコントローラを含む。入出力ハブ３５０は複数の入出力デバイス３６０をＧＭＣＨ３９０に連結する。あるいは、メモリコントローラおよびグラフィックスコントローラの一方または両方はプロセッサ内に統合されており（本明細書に記載の通り）、メモリ３４０およびコプロセッサ３４５はプロセッサ３１０に直接連結されており、コントローラハブ３２０は入出力ハブ３５０とともに単一のチップ内にある。
【００２４】
追加のプロセッサ３１５のオプション的な性質は図３に点線で示される。各プロセッサ３１０、３１５は本明細書に記載のプロセッシングコアの１または複数を含んでよく、かつ、プロセッサ２００何らかのバージョンであってよい。
【００２５】
メモリ３４０は例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはこれら２つの組み合わせであってよい。少なくとも一実施形態において、コントローラハブ３２０は、フロントサイドバス（ＦＳＢ）等のマルチドロップバス、ＱＰＩ（ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）等のポイントツーポイントインタフェース、または同様の接続３９５を介して、プロセッサ３１０、３１５と通信する。
【００２６】
一実施形態において、コプロセッサ３４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等の特定用途用プロセッサである。一実施形態において、コントローラハブ３２０は統合グラフィックスアクセラレータを含んでよい。
【００２７】
物理リソース３１０および３１５間には、アーキテクチャ的特性、マイクロアーキテクチャ的特性、熱的特性、電力消費的特性等、様々な利点の基準範囲の観点より、様々な差異があってよい。
【００２８】
一実施形態において、プロセッサ３１０は一般タイプの複数のデータ処理操作を制御する複数の命令を実行する。複数の命令内に埋め込まれたものは、複数のコプロセッサ命令であってよい。プロセッサ３１０はこれらのコプロセッサ命令を取り付けられたコプロセッサ３４５によって実行されるべきタイプのものであると認識する。従って、プロセッサ３１０はコプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令（あるいは複数のコプロセッサ命令を示す複数のコントロールシグナル）をコプロセッサ３４５に対し発行する。コプロセッサ３４５は受信される複数のコプロセッサ命令を受け取り、実行する。
【００２９】
図４を見ると、本願発明の一実施形態に係る、より具体的な第１の例示的システム４００のブロック図が示されている。図４に示される通り、マルチプロセッサシステム４００はポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続４５０を介して連結された第１のプロセッサ４７０および第２のプロセッサ４８０を含む。プロセッサ４７０および４８０の各々は、プロセッサ２００の何らかのバージョンであってよい。本発明の一実施形態において、プロセッサ４７０および４８０はそれぞれプロセッサ３１０および３１５である一方で、コプロセッサ４３８はコプロセッサ３４５である。別の実施形態において、プロセッサ４７０および４８０はそれぞれプロセッサ３１０およびコプロセッサ３４５である。
【００３０】
プロセッサ４７０および４８０はそれぞれ統合メモリコントローラユニット（ＩＭＣ）４７２および４８２を含むよう図示されている。プロセッサ４７０はそのバスコントローラユニットの一部としてポイントツーポイント（Ｐ‐Ｐ）インタフェース４７６および４７８も含み、同様に第２のプロセッサ４８０はＰ‐Ｐインタフェース４８６および４８８を含む。プロセッサ４７０、４８０は、ポイントツーポイント（Ｐ‐Ｐ）インタフェース回路４７８、４８８を使用するＰ‐Ｐインタフェース４５０を介して情報を交換してよい。図４に示される通り、ＩＭＣ４７２および４８２は上記複数のプロセッサをそれぞれのメモリ、つまりメモリ４３２とメモリ４３４とに連結する。メモリ４３２とメモリ４３４とは上記複数のプロセッサの各々にローカルに取り付けられたメインメモリの複数の部分であってよい。
【００３１】
プロセッサ４７０、４８０はそれぞれ、ポイントツーポイントインタフェース回路４７６、４９４、４８６、４９８を使用する個々のＰ‐Ｐインタフェース４５２、４５４を介してチップセット４９０と情報を交換してよい。チップセット４９０はオプションとして、高性能インタフェース４３９を介してコプロセッサ４３８と情報を交換してよい。一実施形態において、コプロセッサ４３８は例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等の特定用途用プロセッサである。
【００３２】
共有キャッシュ（不図示）がＰ‐Ｐ相互接続を介して複数のプロセッサと接続されつつ、一方のプロセッサ内または両方のプロセッサの外部に含まれてよい。これによって、プロセッサが低電力モードに置かれた場合、一方のプロセッサまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納可能になる。
【００３３】
チップセット４９０はインタフェース４９６を介して第１のバス４１６に連結されてよい。本願発明の範囲は限定されないものの、一実施形態において、第１のバス４１６はＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス、あるいはＰＣＩ  Ｅｘｐｒｅｓｓバスまたは別の第三世代Ｉ／Ｏ相互接続バス等のバスであってよい。
【００３４】
図４に図示の通り、第１のバス４１６を第２のバス４２０に連結するバスブリッジ４１８とともに、様々なＩ／Ｏデバイス４１４が第１のバス４１６に連結されてよい。一実施形態において、複数のコプロセッサ、複数の高スループットＭＩＣプロセッサ、複数のＧＰＧＰＵ、複数のアクセラレータ（複数のグラフィックスアクセラレータまたは複数のデジタルシグナルプロセッシング（ＤＳＰ）ユニット等）、複数のフィールドプログラマブルゲートアレイ、または任意の他のプロセッサ等、１または複数の追加のプロセッサ４１５が第１のバス４１６に連結される。一実施形態において、第２のバス４２０はＬｏｗ  Ｐｉｎ Ｃｏｕｎｔバスであってよい。一実施形態において、例えば、キーボードおよび／またはマウス４２２、複数の通信デバイス４２７、複数の命令／コードおよびデータ４３０を含められるディスクドライブまたは他の大容量記憶装置等のストレージユニット４２８を含め、様々なデバイスが第２のバス４２０に連結されてよい。さらに、オーディオＩ／Ｏ４２４が第２のバス４２０に連結されてよい。他の複数のアーキテクチャが可能であることに留意されたい。例えば、図４のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他の同様のアーキテクチャを実装してよい。
【００３５】
図５を見ると、本願発明の一実施形態に係る、具体的な第２の例示的システム５００のブロック図が示されている。図４と図５とで同様の要素は、同様の参照番号を付し、図５の他の複数の態様を不明瞭にするのを回避すべく、図４の複数の特定の態様は図５で省略されている。
【００３６】
図５は、プロセッサ４７０および４８０はそれぞれ、統合メモリおよびＩ／Ｏ制御ロジック（ＣＬ）４７２および４８２を含んでよいことを示す。すなわち、ＣＬ４７２、４８２は複数の統合メモリコントローラユニットを含み、Ｉ／Ｏ制御ロジックを含む。図５は、ＣＬ４７２、４８２に連結されるのはメモリ４３２、４３４だけでなく、複数のＩ／Ｏデバイス５１４もＣＬ（制御ロジック）４７２、４８２に連結されることを示す。レガシＩ／Ｏデバイス５１５が、チップセット４９０に連結される。
【００３７】
図６を見ると、本願発明の一実施形態に係るＳｏＣ６００のブロック図が示されている。図２と同様の複数の要素には、同様の複数の参照番号が付されている。また、複数の破線ボックスは、より高度な複数のＳｏＣ上の複数のオプションの特徴である。図６で、相互接続ユニット６０２は次のものに連結される。すなわち、一連の１または複数のコア５０２Ａから５０２Ｎおよび共有キャッシュユニット５０６を含むアプリケーションプロセッサ６１０。システムエージェントユニット５１０。バスコントローラユニット５１６。統合メモリコントローラユニット５１４。統合グラフィックスロジック、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含められる一連の１または複数のコプロセッサ６２０。スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット６３０。ダイレクトメモリアクセス（ＤＭＡ）ユニット６３２。１または複数の外部ディスプレイに連結されるディスプレイユニット６４０。一実施形態において、コプロセッサ６２０は例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋め込みプロセッサ等の特定用途用プロセッサを含む。
【００３８】
本明細書に記載の複数のメカニズムに係る複数の実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはそのような実装アプローチの組み合わせとして実装されてよい。本発明の複数の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／または複数のストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを備える、複数のプログラム可能なシステム上で実行される複数のコンピュータプログラムまたはプログラムコードとして実装されてよい。
【００３９】
本明細書に記載の複数の関数を実行し、出力情報を生成すべく、図４に示されるコード４３０等のプログラムコードが複数の入力命令に適用されてよい。出力情報は既知の方法で、１または複数の出力デバイスに適用されてよい。本願の複数の意図において、処理システムとは例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）またはマイクロプロセッサ等のプロセッサを有する任意のシステムを含む。
【００４０】
処理システムと通信すべく、プログラムコードは高水準の手続き型またはオブジェクト指向型プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリまたは機械言語で実装されてよい。実際、本明細書に記載の複数のメカニズムは、いかなる特定のプログラミング言語にも範囲限定されない。いかなる場合も、言語はコンパイラ型言語またはインタープリタ型言語であってよい。
【００４１】
少なくとも１つの実施形態に係る１または複数の態様は、様々なロジックをプロセッサ内で示す機械可読媒体上に格納される複数の代表的命令によって実装されてよい。代表的命令とは機械により読み取られると、機械に対し、本明細書に記載の複数の技術を実行させるロジックを作成させるものである。複数の「ＩＰコア」として知られるそのような複数の表現命令が有形の機械可読媒体上に格納されてよく、様々なカスタマまたは製造業の設備に提供され、実際にロジックまたはプロセッサを形成する複数の製造機械にロードされてよい。
【００４２】
そのような機械可読記憶媒体は、限定はされないが、機械またはデバイスによって製造または形成される複数の物品の非一時的かつ有形な複数の構成を含んでよい。そのようなものとして、複数のハードディスク、複数のフロッピー（登録商標）ディスク、複数の光ディスク、複数のＣＤ‐ＲＯＭ、複数のＣＤ−ＲＷ、および複数の光磁気ディスクを含む任意の他のタイプのディスク、複数の読み取り専用メモリ（ＲＯＭ）、複数のＤＲＡＭ、複数のＳＲＡＭ等の複数のランダムアクセスメモリ（ＲＡＭ）、複数のＥＰＲＯＭ，複数のフラッシュメモリ、複数のＥＥＰＲＯＭ、複数の相変化メモリ（ＰＣＭ）、複数の磁気カード若しくは光カード等の半導体デバイス、あるいは複数の電子的な命令を格納するのに好ましい、他の任意のタイプの媒体といったストレージ媒体がある。
【００４３】
従って、本発明の複数の実施形態はまた、複数の命令を含む、またはハードウェア記述言語（ＨＤＬ）等の設計データを含む非一時的で有形な機械可読媒体を含む。ハードウェア記述言語は本明細書に記載の複数の構造、回路、装置、プロセッサおよび／またはシステム機能を定義する。そのような複数の実施形態は複数のプログラム製品と呼ばれることもある。
【００４４】
場合によって、命令コンバータを使用して、ソース命令セットの命令をターゲット命令セットに変換してよい。例えば、命令コンバータは、命令をコアによって処理される１または複数の他の命令に、トランスレート（例えば、スタティックバイナリ変換、ダイナミックコンパイルを含むダイナミックバイナリ変換を使用して）、モーフィング、エミュレート、または変換してよい。命令コンバータはソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせとして実装されてよい。命令コンバータはプロセッサ上、プロセッサの外部、または部分的にプロセッサ上および部分的にプロセッサ外部にあってよい。
【００４５】
図７は、本発明の複数の実施形態に従って、ソース命令セット内の複数のバイナリ命令をターゲット命令セット内の複数のバイナリ命令に変換する、ソフトウェア命令コンバータの使用を対比させるブロック図である。図示の実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装できる。図７は、少なくとも１つのｘ８６命令セットコアを有するプロセッサ７１６によってネイティブに実行され得るｘ８６バイナリコード７０６を生成すべく、ｘ８６コンパイラ７０４を使用してコンパイル可能な高水準言語７０２のプログラムを示す。少なくとも１つのｘ８６命令セットコアを有するプロセッサ７１６は、次のような任意のプロセッサを表す。すなわち、そのようなプロセッサとは、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサと実質的に同一の結果を実現すべく、次の（１）または（２）を互換性のある状態で実行あるいは処理することで、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサと実質的に同一の複数の機能を実行可能なプロセッサである。（１）Ｉｎｔｅｌ（登録商標）ｘ８６命令セットコアの命令セットの大部分、または（２）少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌ（登録商標）プロセッサ上での実行用の複数のアプリケーション若しくは他のソフトウェアのオブジェクトコードの複数のバージョン。ｘ８６コンパイラ７０４は、追加のリンケージ処理のあるなしに関わらず、少なくとも１つのｘ８６命令セットコア７１６を有するプロセッサ上で実行可能なｘ８６バイナリコード７０６（オブジェクトコード等）を生成すべく動作可能なコンパイラを表す。同様に、図７は、少なくとも１つのｘ８６命令セットコアを有さないプロセッサ７１４（例えば、カリフォルニア州のサニーベールにあるＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行するおよび／またはカリフォルニア州のサニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行する複数のコアを有するプロセッサ）によってネイティブで実行され得る代替の命令セットバイナリコード７１０を生成すべく、代替の命令セットコンパイラ７０８を使用してコンパイル可能な高水準言語７０２のプログラムを示す。ｘ８６バイナリコード７０６を、ｘ８６命令セットコアを有さないプロセッサ７１４によってネイティブで実行され得るコードに変換すべく、命令コンバータ７１２が使用される。この変換が可能な命令コンバータの作成は難しいので、この変換されたコードは代替の命令セットバイナリコード７１０と同一でない可能性がある。しかしながら、変換されたコードは全般的な操作を遂行し、代替の命令セットの複数の命令で構成される。よって、命令コンバータ７１２はエミュレーション、シミュレーションまたは任意の他の処理を介して、ｘ８６命令セットプロセッサまたはコアを有さないプロセッサまたは他の電子デバイスがｘ８６バイナリコード７０６を実行できるようにするソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
【００４６】
[複数のハッシュ動作を効率的に実行する方法および装置]
【００４７】
本発明の一実施形態は、ハッシュ動作を効率的に実行するための新しい命令および支援ハードウェアを含む。以下に記載の複数の実施形態はＳＭ３ハッシュアルゴリズムに重点を置く一方で、本発明の複数の根本的な原理はＳＭ３に提供される特有の実装に限定されない。例えばＳＭ３を実装するための以下に記載の同一の技術が、他の複数のハッシュアルゴリズムおよび／または他の複数のタイプの処理関数を効率的に実行すべく使用されてよい。さらに、一実施形態はＩｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＩＡ）の拡張として実装される一方で、本発明の根本的な複数の原理は任意の特定のＩＳＡに限定されない。
【００４８】
図８に示される通り、本発明に係る複数の実施形態が実装され得る例示のプロセッサ８５５は、本明細書に記載の効率的な複数のハッシュ技術を実行するハッシュ関数実行ロジック８４１を持つ実行ユニット８４０を含む。レジスタセット８０５は、実行ユニット８４０が命令ストリームを実行する際、複数のオペランド、制御データおよび他の複数のタイプのデータのためのレジスタストレージを提供する。一実施形態において、レジスタセット８０５は、ＩＡのストリーミングＳＩＭＤ拡張命令（ＳＳＥ）アーキテクチャの一部として指定される複数のＸＭＭのＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）レジスタ等の１２８ビットの複数のレジスタを含む。あるいは、またはそれに加え、上記複数のレジスタはＩＡのＡＶＸ（Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ）２アーキテクチャの一部として指定される複数のＹＭＭのＳＩＭＤレジスタ等の２５６ビットの複数のレジスタを含んでよい。しかしながら、本発明の根本的な複数の原理は特定のレジスタタイプまたはレジスタサイズに限定されない。
【００４９】
わかりやすく、単一のプロセッサコア（「コア０」）の詳細が図８に示されている。しかしながら、図８に示される各コアはコア０と同一のロジックセットを有してよいことを理解されたい。図示の通り、各コアは、特定のキャッシュ管理ポリシーに従い、複数の命令およびデータをキャッシュする、専用のレベル１（Ｌ１）キャッシュ８１２およびレベル２（Ｌ２）キャッシュ８１１も含んでよい。Ｌ１キャッシュ８１２は複数の命令を格納するための個別の命令キャッシュ８２０およびデータを格納するための個別のデータキャッシュ８２１を含む。様々なプロセッサキャッシュ内に格納された複数の命令およびデータは、固定サイズ（６４、１２８、５１２バイト長等）であり得る複数のキャッシュラインの精度で管理される。この例示の実施形態に係る各コアは、メインメモリ８００および／または共有レベル３（Ｌ３）キャッシュ８１６から複数の命令をフェッチする命令フェッチユニット８１０、複数の命令をデコードするデコードユニット８２０（プログラムの複数の命令を複数のマイクロオペレーションまたは複数の「ｕｏｐ」にデコードする等）、複数の命令を実行する実行ユニット８４０（例えば、本明細書に記載の複数の述語命令）および複数の命令をリタイアさせ、複数の結果をライトバックするライトバックユニット８５０を有する。
【００５０】
命令フェッチユニット８１０は、様々な周知のコンポーネントを含む。これらには、メモリ８００（または複数のキャッシュの１つ）からフェッチされる次の命令のアドレスを格納する次の命令ポインタ８０３、アドレス変換の速度を改善すべく最近使用された仮想命令アドレスに対する物理命令アドレスのマップを格納する命令トランスレーションルックアサイドバッファ（ＩＴＬＢ）８０４、複数の命令分岐アドレスを推測的に予測する分岐予測ユニット８０２、および複数の分岐アドレスおよび複数のターゲットアドレスを格納するブランチターゲットバッファ（ＢＴＢ）８０１がある。複数の命令はいったんフェッチされると今度は、デコードユニット８３０、実行ユニット８４０、ライトバックユニット８５０を含む、命令パイプラインの残りの複数の段階に送られる。これらのユニットの各々の構造および機能は当業者によって十分理解されており、本発明の様々な実施形態に関する複数の態様を不明瞭にするのを回避すべく、本明細書では詳細に記載されない。
【００５１】
上記の通り、一実施形態において、実行ユニット８４０内のハッシュ関数ロジック８４１はＳＭ３ハッシュアルゴリズムをより効率的に処理すべく、様々な技術を実行する。故に、ＳＭ３ハッシュアルゴリズムの基本的な複数の原理についての簡単な説明がまず提供され、その後に、本発明の複数の実施形態についての詳細な説明が続く。
【００５２】
本明細書で使用されるように「メッセージ」は、ＳＭ３ハッシュが実行されるバイナリコードを意味する。「メッセージダイジェスト」または「ダイジェスト」はハッシュ動作の最終結果である。ＳＭ３アルゴリズムは、複数のメッセージを複数の完全な５１２ビットのブロックにセグメント化する「スタッフィング」方法を指定する。ＳＭ３圧縮アルゴリズムは、複数の中間ブロックの出力状態が次の５１２ビットブロック圧縮の入力状態として機能する状況で、複数の５１２ビットブロックのシーケンス上で実行される。各ブロックの圧縮の状態および最終ダイジェストは２５６ビット値である。２５６ビットの状態値は、ワードＡ、Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、ＧおよびＨとして表される８つの３２ビット「語」に区画化され、「ビッグエンディアン」形式（Ａの次にＢ等）で指定される。図９は、複数の状態値の第１のセット９０１が複数の状態値の第２のセット９０２に変換されるＲｏｕｎｄ処理中に、実行される複数の操作を図示する。初期の状態値は、ＳＭ３規格で定義される定数である。特に、５１２ビットブロックのための圧縮関数は以下のように定義される。
【００５３】
【数１】
0006051458.tif 000002
ここで、
【数２】
0006051458.tif 000003
【００５４】
変数ＳＳ１、ＳＳ２、ＴＴ１、およびＴＴ２は、各反復処理で使用される複数の内部中間値である。Ｔｊは０≦ｊ≦１５の場合、７９ｃｃ４５１９および１６≦ｊ≦６３の場合、７ａ８７９ｄ８ａと指定される。各Ｒｏｕｎｄの（Ｔｊ＜＜＜ｊ）入力はあらかじめ設定されてよく、Ｒｏｕｎｄ値ｊによって参照されるテーブルからロードされてよい。Ｐ０関数は、
【数３】
0006051458.tif 000004
として指定される線形変換順列関数である。
【００５５】
圧縮される５１２ビットのブロックは、Ｗ０からＷ１５までのようなビッグエンディアン形式で参照される３２ビットの１６語に区画化される。Ｗ'入力は、以下のように指定される。
【数４】
0006051458.tif 000005
よって、Ｗ'０からＷ'１１までは初期ブロックデータからの単一のｘｏｒ関数で特定され得る。
【００５６】
Ｒｏｕｎｄ１６から６３のＷｊ入力およびＲｏｕｎｄ１２から６３の
【数５】
0006051458.tif 000006
入力は、次のように指定される「メッセージ拡張」（メッセージスケジューラ）に従い展開される。
【数６】
0006051458.tif 000007
ここで、Ｐ１は別の順列関数であり、次のように指定される。
【数７】
0006051458.tif 000008
また、Ｒｏｕｎｄ６０から６３までの
【数８】
0006051458.tif 000009
の展開において
【数９】
0006051458.tif 000010
項をサポートすべく、ｊ＝６４からｊ＝６７までのＷｊが計算される。
【００５７】
ＩＡストリーミングＳＩＭＤ拡張命令（ＳＳＥ）アーキテクチャの一部として指定される複数のＸＭＭ  ＳＩＭＤ（Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ）レジスタ等の１２８ビットレジスタファイルを持つプロセッサ上でのＳＭ３ハッシュアルゴリズムの性能を向上させるべく、またはＩＡ  ＡＶＸ（Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ）２アーキテクチャの一部として指定される複数のＹＭＭ  ＳＩＭＤレジスタ等の２５６ビットのレジスタファイルを持つプロセッサ上でのＳＭ３ハッシュアルゴリズムの性能を向上させるべく、本発明の一実施形態は、複数の新しい命令を含む。１２８ビットＳＳＥアーキテクチャに指定される命令は、暗黙的なオペランドレジスタの使用を必要とするものの、同一のＸＸＭベースの命令を使用する、電力効率が良く高性能の、さらなる広範囲のコアにおいて、ＳＭ３の加速化を可能にするという利点がある。
【００５８】
本発明の一実施形態は、ＳＭ３状態はＡからＨの８つの状態変数を含む一方で、変数Ｂ、Ｄ、Ｆ及びＨは前のＲｏｕｎｄの変数Ａ、Ｃ、Ｅ及びＧをそれぞれ単純に再利用するだけで更新され、よって、何の計算も必要としないという点をうまく利用する。特に、上記の通り、現在のＲｏｕｎｄは以下のようになる。
Ｂ（現在のＲｏｕｎｄ）←Ａ（前のＲｏｕｎｄ）
Ｄ（現在のＲｏｕｎｄ）←Ｃ（前のＲｏｕｎｄ）
Ｆ（現在のＲｏｕｎｄ）←Ｅ（前のＲｏｕｎｄ）および
Ｈ（現在のＲｏｕｎｄ）←Ｇ（前のＲｏｕｎｄ）
【００５９】
よって、本発明の一実施形態では、各Ｒｏｕｎｄについて、状態変数Ａ、Ｃ、Ｅ、Ｇのみ計算する。具体的には次のようになる。変数ＡはＴＴ１によって更新される。変数ＥはＰ０（ＴＴ２）によって更新される。変数ＣはＢ＜＜＜９の最後のＲｏｕｎｄ変数によって更新される。変数ＧはＦ＜＜＜１９の最後のＲｏｕｎｄ変数によって更新される。
【００６０】
残りの状態値Ｂ、Ｄ、Ｆ、およびＨは、以下に記載されるように、各処理Ｒｏｕｎｄの複数のレジスタ指定を変更するのみで特定される。
【００６１】
特に、２５６ビットの全ＳＭ３状態は、２つの１２８ビットＸＭＭレジスタ（例えばｘｍｍ１およびｘｍｍ２）を必要とするが、残る問題は、８つの変数ＡからＨをいかに理想的に区画化するかというだけである。上記の複数の見解を使用し、本発明の一実施形態は、次のような効率的なレジスタ区画化を使用する。図１０に示すように、複数のＳＭ３状態変数が２つのＸＭＭレジスタ、ＸＭＭ１  １００２およびＸＭＭ２  １０１０に保持される。ＸＭＭ１  １００２は複数の奇数のＲｏｕｎｄに対するＡ、Ｃ、ＥおよびＧを、複数の偶数のＲｏｕｎｄに対するＢ、Ｄ、Ｆ及びＨを含み、ＸＭＭ２  １０１０は複数の奇数のＲｏｕｎｄに対するＢ、Ｄ、Ｆ、Ｈを、複数の偶数のＲｏｕｎｄに対するＡ、Ｃ、Ｅ、Ｇを含む。図１０は、Ｒｏｕｎｄ１に対して、ＸＭＭ２  １０１０に格納される値Ａ１、Ｃ１、Ｅ１、およびＧ１に到達するべく、サイクル１から３を使用するＲｏｕｎｄ０（Ａ０からＧ０の指定で示される）の詳細を示す。
【００６２】
図１０は、各サイクルで複数の値を計算する際に関わるロジックを示すが、パイプラインの複数の技術またはパイプライン化プロセッサアーキテクチャ内で採用され得る他の複数の実装に関する詳細は特に示さないことに留意されたい。これらの詳細は当業者によって十分理解されており、本発明の根本的な複数の原理を不明瞭にするのを回避すべく、図１０には示さない。
【００６３】
１２８ビットのデータパスおよびレジスタファイルについて、ＳＭ３ハッシュの単一のＲｏｕｎｄを更新するための命令に係る一実施形態は、次のように指定される。ＳＭ３ＲＮＤ  ＸＭＭｓｒｃｄｓｔ，  ＸＭＭｓｒｃ，  ＩＭＭここで、ＸＭＭｓｒｃｄｓｔは複数の奇数のＲｏｕｎｄのＸＭＭ１  １００２および複数の偶数のＲｏｕｎｄのＸＭＭ２  １０１０であり、ＸＭＭｓｒｃは複数の偶数のＲｏｕｎｄのＸＭＭ１  １００２および複数の奇数のＲｏｕｎｄのＸＭＭ２  １０１０である。一実施形態において、即値であるＩＭＭは、ｊ＝０から１５の場合は０に、ｊ＝１６から６３の場合は１に設定される。
【００６４】
図１０の具体的な詳細を見ると、一実施形態において、ＸＭＭ０  １００１はＲｏｕｎｄ０のサイクル１に対し、
【数１０】
0006051458.tif 000011
を含む暗黙的なソースである。これらの値がＸＭＭ１  １００２からのＡ０、Ｃ０、Ｅ０及びＧ０とともに使用され、サイクル２の複数の値が計算される。内部一時ストレージ１００８（非アーキテクチャ的レジスタまたはバッファ等）は、図示のとおり、ＳＳ２、ＳＳ１、Ｗｊ'、およびＷｊに対する複数の新しい値を格納する。ＳＳ１は次のように計算される。値Ａは演算子１００３を使用し、左に１２回回転される。桁上げ保存加算器１００４は加算器１００５と組み合わされ、Ａ＜＜＜１２の結果をＥおよびＴｊ＜＜＜Ｊと結合する。次に、結合された結果が演算子１００６を使用し、左に７回回転される。ＳＳ２がＸＯＲ演算子１００７を使用し、Ａ＜＜＜１２をＳＳ１とＸＯＲすることで計算される。図示の通り、Ｗｊ'およびＷｊに対する複数の値がＸＭＭ０  １００１を介して渡される。
【００６５】
上記の複数の値、Ａ０、Ｃ０、Ｅ０、およびＧ０に対してＸＭＭ１  １００２に格納された初期値、及びＢ０、Ｄ０、Ｆ０、およびＨ０に対してＸＭＭ２  １０１０に格納された初期値で、サイクル２が開始する。次のように、Ａ、Ｃ、Ｅ、およびＧに対する新しい値（Ｒｏｕｎｄ１を示すべく、Ａ１、Ｃ１、Ｅ１およびＧ１として記載）がサイクル２から３で計算され、ＸＭＭ２  １０１０に格納される。演算子１０１１がＡ０、Ｂ０およびＣ０を複数の入力として使用し、ＦＦｊ（Ａ、Ｂ、Ｃ）を生成し（上記のＦＦｊの方程式を参照）、演算子１０１３はＥ０Ｆ０Ｇ０を複数の入力として使用し、ＧＧｊ（Ｅ、Ｆ、Ｇ）を生成する（上記のＧＧｊの方程式を参照）。次に、Ａ１に対する値が、桁上げ保存加算器１０１２および１０１５、および加算器１０１７を使い、ＦＦｊ（Ａ０、Ｂ０、Ｃ０）＋Ｄ０＋ＳＳ２＋Ｗｊ'を使用し、計算される。Ｃ１の値は、演算子１０１８を介して左に９回転されたＢ０の値を使用し、計算される。Ｅ１の値は、Ｐ０をＧＧｊ（Ｅ０、Ｆ０、Ｇ０）＋Ｈ０＋ＳＳ１＋Ｗｊで乗算することで計算される。これは、桁上げ保存加算器１０１４と１０１６、および加算器１０１９で計算される。Ｐ０関数は、Ｐ０（Ｘ）＝（Ｘ＜＜＜９）ｘｏｒ（Ｘ＜＜＜１７）で指定される線形変換順列関数である。よって、Ｅ１はＧＧｊ（Ｅ０、Ｆ０、Ｇ０）＋Ｈ０＋ＳＳ１＋ＷｊにＰ０線形変換順列を実行することで計算される。Ｇ１の値は演算子１０２０によってＦ０を左に９回回転することで計算される。
【００６６】
重要なこととして、Ａ１Ｃ１Ｅ１およびＧ１に対する値のみがサイクル２から３で計算される。Ｂ１、Ｄ１、Ｆ１、およびＨ１に対する値は、Ａ０、Ｃ０、Ｅ０、およびＧ０の前の値から取得される。上記の通り、ＸＭＭｓｒｃｄｓｔは複数の奇数のＲｏｕｎｄに対するＸＭＭ１  １００２および複数の偶数のＲｏｕｎｄに対するＸＭＭ２  １０１０であり、ＸＭＭｓｒｃは複数の偶数のＲｏｕｎｄに対するＸＭＭ１  １００２および複数の奇数のＲｏｕｎｄに対するＸＭＭ２  １０１０である。よって、１つのＲｏｕｎｄからのＡ、Ｃ、Ｅ及びＧの値は独立して計算されず、あるいはこれらの値が次のＲｏｕｎｄでＢ、Ｄ、Ｆ及びＨになる際、１つのＲｏｕｎｄからのＡ、Ｃ、Ｅ、Ｇの値は新しい複数のレジスタに物理的に移動されない。そうではなく、ＸＭＭ１／ＸＭＭ２レジスタの複数の指定をスワッピングすることで、これらの値は単純にＢ、Ｄ、Ｆ、およびＨになるので、これにより複数の処理リソースを維持する。
【００６７】
代替の実施形態（例えば、ＡＶＸ２または複数の２５６ビットレジスタを持つ他のアーキテクチャ）において、単一のＹＭＭ  ＳＩＭＤレジスタ内でＳＭ３のＲｏｕｎｄに対し完全な状態更新を実行する、複数の２５６ビットＹＭＭレジスタを使用する命令は、ＳＭ３ＲＮＤ  ＹＭＭ１、ＹＭＭ２として指定され得る。ここで、ＹＭＭ１は８×３２ビットＳＭ３状態に対するソース／デスティネーションレジスタであり、ＹＭＭ２は現在のＲｏｕｎｄに対する
【数１１】
0006051458.tif 000012
を含むソースレジスタである。
【００６８】
さらに高性能な代替的な第２の定義は、ＳＭ３ハッシュの２つの完全なＲｏｕｎｄを５サイクルのＳＩＭＤパイプで実行でき、次のように指定される。ＳＭ３ＲＮＤＳ２  ＹＭＭ１，  ＹＭＭ２，  ＹＭＭ３  ここでＹＭＭ１は、ソースとしてのＲｏｕｎｄｊに対するＳＭ３状態を持つソース／デスティネーションレジスタであり、Ｒｏｕｎｄｊ＋２に対する結果のＳＭ３状態は、デスティネーションとしてライトバックされる。この実施形態において、ＹＭＭ２は
【数１２】
0006051458.tif 000013
に対するソースレジスタであり、ＹＭＭ３は
【数１３】
0006051458.tif 000014
に対するソースレジスタである。一実施形態において、これはすべての
【数１４】
0006051458.tif 000015
を保持するＹＭＭ２を持つ２つのレジスタを用いてのみ指定されることに留意されたい。 
【００６９】
単一の場合のＳＭ３Ｒｏｕｎｄ命令代替および２つの場合のＳＭ３Ｒｏｕｎｄ命令代替の両方について、Ｒｏｕｎｄ１６から６３に対するＷｊおよびＲｏｕｎｄ１２から６３までの
【数１５】
0006051458.tif 000016
の展開は、ＳＭ３性能がメッセージ拡張によって影響されないよう、複数のパラメータを複数の入力として使用する複数のＲｏｕｎｄ命令に先行し、および前の複数のＲｏｕｎｄの複数のＲｏｕｎｄ命令と並行して計算可能である。
【００７０】
図１１は、本発明の一実施形態に係る方法を示す。１１０１において、ＳＭ３等のハッシュ動作がプロセッサ内で初期化される。例えば、本明細書に記載のＳＭ３命令の１つがデコードされ、その結果の複数のｕｏｐが実行ユニットの１または複数の実行ポートに提供されてよい。また、複数のハッシュ動作を実行するのに必要な複数の初期値は、複数の適切なストレージ位置に設定される。例えば、上記のように、ＸＭＭ０は第１のＲｏｕｎｄ処理のための（Ｔｊ＜＜＜ｊ）、ＷｊおよびＷｊ'を含むべく、更新されてよい。同様に、図１０に図示される一時ストレージ１００８はＳＳ２、ＳＳ１、Ｗｊ'およびＷｊに対する複数の値と共に更新されてよい。
【００７１】
１１０２において、複数の状態値の第１のセット（Ａ０、Ｃ０、Ｅ０、およびＧ０等）は、複数のロジカルストレージ位置の第１のセット（例えば、ＸＭＭ１）内に格納され、複数の状態値の第２のセット（Ｂ０、Ｄ０、Ｆ０およびＨ０等）は複数のロジカルストレージ位置の第２のセット（例えば、ＸＭＭ２）内に格納される。１１０３において、処理の「奇数」Ｒｏｕｎｄが複数の状態値の第１のセットおよび第２のセットを使用し実行され、更新された複数の状態値の第１のセットを生成する（例えば、複数の新しい値Ａ１、Ｃ１、Ｅ１、およびＧ１が計算される）。
【００７２】
１１０４において、複数の状態値の第２のセットが、非更新の複数の状態値の第１のセットと等しくなるよう自動的に設定されるように、複数の第１のロジカルストレージ位置および複数の第２のロジカルストレージ位置の複数の指定がスワッピングされる。例えば、図１０の実施形態において、複数のＳＭ３の状態変数が２つのＸＭＭレジスタ、ＸＭＭ１  １００２およびＸＭＭ２  １０１０に保持される。ここで、ＸＭＭ１  １００２は複数の奇数のＲｏｕｎｄに対するＡ、Ｃ、Ｅ及びＧ並びに複数の偶数のＲｏｕｎｄに対するＢ、Ｄ、Ｆ及びＨを含み、ＸＭＭ２  １０１０は複数の奇数のＲｏｕｎｄに対するＢ、Ｄ、Ｆ及びＨ並びに複数の偶数のＲｏｕｎｄに対するＡ、Ｃ、Ｅ及びＧを含む。よって、各Ｒｏｕｎｄにおいて、単純に複数のレジスタ指定（即ち、どの複数の状態変数がどの複数のレジスタに格納されるといった指示）をスワッピングするだけで、Ｂ、Ｄ、Ｆ、およびＨに対する値は、それぞれＡ、Ｃ、Ｅ、およびＧの前の値に自動的に設定される。よって、本明細書で使用されるように、複数のストレージ位置の複数の「指定」をスワッピングするとは、複数のストレージ位置に格納されるデータの指示を変更することを意味する。
【００７３】
１１０５において、新しく計算されたＡ、Ｃ、Ｅ、およびＧの値が、新しく指定された複数の第２のロジカルストレージ位置に格納される（例えば、図１０に示される例示のＸＭＭ２内に格納されるＡ１、Ｃ１、Ｅ１、およびＧ１）。１１０６において、複数の計算の複数の偶数のＲｏｕｎｄが複数の状態変数の第１のセットおよび第２のセットを使用し実行され、複数の状態変数（例えば、Ａ、Ｃ、Ｅ、およびＧ）の第１のセットを再度更新する。
【００７４】
１１０７において、複数の状態値の第２のセットが非更新の複数の状態値の第１のセットと等しくなるよう自動的に設定されるように、複数の第１のロジカルストレージ位置および複数の第２のロジカルストレージ位置の複数の指定が再度スワッピングされる。前述の通り、一実施形態において、Ａ、Ｃ、Ｅ及びＧ並びにＢ、Ｄ、Ｆ及びＨを含む複数の指定されたレジスタは奇数のＲｏｕｎｄおよび偶数のＲｏｕｎｄについて、スワッピングされる。よって、Ｂ、Ｄ、Ｆ、およびＨの値は、複数のレジスタ指定をスワッピングすることで、それぞれＡ、Ｃ、Ｅ、およびＧの前の値に再度、自動的に設定される。１１０８において、更新された複数の状態値の第１のセットは複数の第１のロジカルストレージ位置（図１０のＸＭＭ１等）に格納される。次に当該方法は、１１０８で判断されるハッシュ動作の完了まで１１０３から１１０８の間を反復する。
【００７５】
複数の最適なＳＭ３実装は現在、ＦＰＧＡまたはＡＳＩＣ専用ハードウェアである。ソフトウェアにおけるＳＭ３の性能は、各ＳＭ３Ｒｏｕｎｄおよびメッセージ拡張の計算で必要とされる依存操作の数が原因で低い。本明細書に記載された、複数のＳＭ３ＲＮＤ命令を追加することで、５つのプロセッササイクルで実行されるＳＭ３ハッシュ圧縮関数の２つのＲｏｕｎｄ、あるいは３つのプロセッササイクルで完了されるＳＭ３の単一のＲｏｕｎｄのいずれかを可能にする。これは複数の最適なソフトウェア実装に対し、４倍を超える改善を提供すると予測される。
【００７６】
他の複数の実施形態において、ｊを指定すべく、イミディエートバイトが使用される（Ｔｊを含むＹＭＭレジスタの代わり）。これらの実施形態においては、ＹＭＭ２は複数のＷ値を含むことができるのに対し、ＹＭＭ３はＷ'を含むことができる。さらに、ＹＭＭ２は上記と同様に定義されてよく、またＹＭＭ２はＷ＆Ｗ'の組み合わされた複数の値を含んでよい（ＹＭＭ３を必要としない）。
【００７７】
前述の明細書において、本発明は複数の特定の例示的な実施形態に即して記載された。しかしながら、添付の特許請求の範囲に記載された本発明のさらなる広範な精神および範囲から逸脱することなく、上記実施形態に対し様々な変形および変更を加えられることは明白である。従って、本明細書および複数の図面は、限定的な意味ではなく、例示的な意味としてみなされる。
【００７８】
本発明の複数の実施形態は、上記した様々な段階を含んでよい。上記複数の段階は、一般用途用プロセッサまたは特定用途用プロセッサに対し、上記複数の段階を実行させるべく使用され得る、複数の機械実行可能命令として具現化されてよい。あるいは、これらの段階は、上記段階を実行するための配線論理を含む複数の特定のハードウェアコンポーネントによって、あるいは複数のプログラムされたコンピュータコンポーネントおよび複数のカスタムハードウェアコンポーネントの任意の組み合わせによって実行されてよい。
【００７９】
本明細書に記載の通り、複数の命令は、特定の複数の操作を実行すべく構成された、あるいは所定の機能を有する特定用途向け集積回路（ＡＳＩＣ）等の特定の複数のハードウェア構成を参照してよく、または複数の命令は、非一時的コンピュータ可読媒体に具現されたメモリ内に格納された複数のソフトウェア命令を参照してよい。よって、複数の図面に示された複数の技術は、１または複数の電子デバイス（エンドステーション、ネットワーク要素等）上で格納され実行されるコードおよびデータを使用して実装可能である。そのような複数の電子デバイスは、非一時的コンピュータ機械可読記憶媒体（例えば、複数の磁気ディスク、複数の光ディスク、ランダムアクセスメモリ、リードオンリメモリ、複数のフラッシュメモリデバイス、相変化メモリ）および一時的コンピュータ機械可読通信媒体（複数の搬送波、複数の赤外線信号、複数のデジタル信号等の電子的形式、光学的形式、音響的形式または他の形式の複数の伝搬信号）等のコンピュータ機械可読媒体を使用し、コードおよびデータを格納および通信する（内部的におよび／またはネットワーク上で他の複数の電子デバイスとともに）。また、そのような複数の電子デバイスは通常、１または複数のストレージデバイス（非一時的機械可読記憶媒体）、複数のユーザ入出力デバイス（例えばキーボード、タッチスクリーンおよび／またはディスプレイ）、および複数のネットワーク接続等の１または複数の他のコンポーネントに連結された１または複数のプロセッサのセットを含む。上記プロセッサのセットおよび他の複数のコンポーネントの連結は通常、１または複数のバスおよびブリッジを（バスコントローラとも呼ばれる）介してなされる。ストレージデバイスおよびネットワークトラフィックを搬送する複数の信号はそれぞれ、１または複数の機械可読記憶媒体および機械可読通信媒体を示す。よって、特定の電子デバイスのストレージデバイスは通常、その電子デバイスの１または複数のプロセッサのセット上で実行されるコードおよび／またはデータを格納する。もちろん、本発明の一実施形態に係る１または複数の部分は、ソフトウェア、ファームウェアおよび／またはハードウェアの様々な組み合わせを用いて実装可能である。本詳細な説明の随所において、説明の意図として、本願発明の完全な理解を提供すべく、多くの具体的な詳細が記載された。しかしながら、本願発明は、これらの具体的な詳細の一部がなくても実施可能であることは当業者にとって明白である。特定の複数の例において、本願発明の主題を不明瞭にするのを回避すべく、複数の周知の構造および機能は詳細に記載されていない。従って、本発明の範囲及び精神は以降の特許請求の範囲に照らし、判断されるべきである。
【図１Ａ】
0006051458.tif 000017
【図１Ｂ】
0006051458.tif 000018
【図２】
0006051458.tif 000019
【図３】
0006051458.tif 000020
【図４】
0006051458.tif 000021
【図５】
0006051458.tif 000022
【図６】
0006051458.tif 000023
【図７】
0006051458.tif 000024
【図８】
0006051458.tif 000025
【図９】
0006051458.tif 000026
【図１０】
0006051458.tif 000027
【図１１】
0006051458.tif 000028