(58)【調査した分野】(Int.Cl.,DB名)
前記第1の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を即値オペランド内の第1のフィールドによって指定する、請求項1または2に記載のプロセッサ。
前記第1の命令は、前記ラウンド定数オペランドセットを前記即値オペランド内の第2のフィールドによって少なくとも部分的に指定する、請求項3に記載のプロセッサ。
前記第1の命令は、前記ソースデータオペランドセットを8個の32ビット値を有するSIMDレジスタとして指定する、請求項1から9のいずれか一項に記載のプロセッサ。
前記第1の命令は、前記ソースデータオペランドセットをそれぞれ4個の32ビット値を有する2つのSIMDレジスタとして指定する、請求項1から9のいずれか一項に記載のプロセッサ。
前記第1の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を、0から63の間のラウンド回数を格納すべく、即値オペランド内の第1のフィールドによって指定し、0から3の間の反復カウントを格納すべく、第2のフィールドによって指定する、請求項1から3のいずれか一項に記載のプロセッサ。
前記第3の部分は、前記第3のベクトルレジスタの前記複数のm個のデータフィールドのうちの4個を有し、前記格納されたラウンド定数オペランドセットの各ラウンド定数Tjはjビット分予め左回転されている、請求項15に記載の方法。
SM3ハッシュアルゴリズムのラウンドスライスのための第1の命令と、前記SM3ハッシュアルゴリズムのためのSM3メッセージ拡張スライスのための第2の命令と、を格納するためのメモリと、
プロセッサと、を備え、
前記プロセッサは、
前記第1の命令をフェッチするための命令フェッチステージと、
前記第1の命令をデコードするためのデコードステージと、
前記第2の命令もまたデコードするための前記デコードステージと、
1または複数の実行ユニットと、を有し、
前記第1の命令は、前記SM3ハッシュアルゴリズムのラウンドスライス部分と、中間ハッシュ値入力オペランドと、ラウンドスライスソースデータオペランドセットと、ラウンド定数オペランドセットと、を指定し、前記第2の命令は、第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、拡張範囲と、を指定し、
前記1または複数の実行ユニットは、前記第1の命令の前記デコードに応答し、
前記中間ハッシュ値入力オペランドおよび前記ラウンド定数オペランドセットを適用し、前記第1の命令の第1の結果を第1のSIMDデスティネーションレジスタに格納することを含め、複数のラウンド反復から成るSM3ハッシュラウンドスライスセットを前記ラウンドスライスソースデータオペランドセットに実行し、
前記1または複数の実行ユニットは、前記第2の命令の前記デコードに応答し、
前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットから、SM3メッセージ拡張の数を実行し、前記SM3メッセージ拡張の数は前記指定された拡張範囲によって判断され、前記第2の命令の第2の結果を第2のSIMDデスティネーションレジスタ内に格納する、処理システム。
前記第2の命令は、前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットをそれぞれ8個の32ビット値を有する2つのSIMDレジスタとして指定する、請求項23から29のいずれか一項に記載の処理システム。
【発明を実施するための形態】
【0045】
以下の詳細な説明は、プロセッサ内、コンピュータシステム内若しくは他の処理装置内で、またはプロセッサ、コンピュータシステム若しくは他の処理装置と関連して、SIMD SM3暗号化ハッシュ機能を提供する命令および処理ロジックについて開示する。いくつかの実施形態は、SIMD SM3メッセージ拡張のための命令をデコードするためのデコーダを有するプロセッサを含み、当該命令は第1のソースデータオペランドセットおよび第2のソースデータオペランドセット並びに拡張範囲を指定する。プロセッサ実行ユニットは命令に応答して、第1のソースデータオペランドセットおよび第2のソースデータオペランドセットからSM3メッセージ拡張の数を実行し、SM3メッセージ拡張の数は指定された拡張範囲によって判断され、その結果をSIMDデスティネーションレジスタに格納する。いくつかの実施形態はまた、中間ハッシュ値入力、ソースデータセット、およびラウンド定数セットからハッシュアルゴリズムのSIMD SM3ハッシュラウンドスライス部分のための命令を実行する。プロセッサ実行ユニットは、複数のSM3ハッシュラウンド反復から成るセットをソースデータセットに実行して、中間ハッシュ値入力およびラウンド定数セットを適用し、新しいハッシュ値結果をSIMDデスティネーションレジスタに格納する。SM3暗号化ハッシュアルゴリズムの詳細は、world wide webのtools.ietf.org/pdf/draft-shen- sm3 -hash-01.pdfから入手可能な2014年2月14日のバージョン01の中国科学院によるIETFインターネットドラフトである「SM3ハッシュ関数」にて確認できるであろう。
【0046】
SIMD SM3暗号化ハッシュ命令を使用して、SIMD SM3暗号化ハッシュ機能を複数のアプリケーションに提供できることを理解されたい。そのようなアプリケーションとしては、財務トランザクション、電子商取引、電子メール、ソフトウェア配布、データストレージ、乱数生成等のためのデータ整合性、デジタル署名、本人確認、メッセージコンテンツ認証およびメッセージ元認証を保証するための暗号化プロトコルおよびインターネット通信が挙げられる。
【0047】
SM3暗号化ハッシュ機能を提供するためのSIMD命令および処理ロジックのいくつかの実施形態について、SM3メッセージ拡張およびSM3暗号化ハッシュラウンドは、現在のマイクロプロセッサの標準的な実行パイプラインの中で、複数の反復のスライスにおいて同時におよび/または並列に実行されてよい。SM3メッセージ拡張のスライスおよび/またはSM3暗号化ハッシュラウンドのスライスの実行に関連するレイテンシによる他の同時インフライト命令に対し、十分なカバーを提供すべく、1スライスごとの反復数は好都合に選択されてよいことを理解されたい。故に、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数(例えば、1スライスごとに2、4または8回の反復)を有する、SIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令の実行を提供することによって、スーパースカラ実行パイプライン、および/またはアウトオブオーダプロセッサパイプライン内のこのような他の要求される命令(例えば、SM3メッセージ拡張命令)の同時実行を許容し、それによって多数のアプリケーションの処理スループットを大きく改善し、汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できるようになることも理解されたい。
【0048】
以下の詳細な説明において、本発明の実施形態に対するより完全な理解を提供すべく、処理ロジック、プロセッサタイプ、マイクロアーキテクチャ条件、イベント、有効化メカニズム等の多くの具体的な詳細が記載されている。しかしながら、当業者ならば、そのような具体的な詳細なしに本発明は実施され得ることを理解されたい。また、本発明の実施形態を不要に不明瞭にするのを回避すべく、いくつかの周知の構造、回路等は詳細に示されていない。
【0049】
以下の実施形態は、プロセッサに関して記載されているが、他のタイプの集積回路およびロジックデバイスには他の実施形態が適用可能である。本発明の実施形態に係る類似の技術および教示は、他のタイプの回路または半導体デバイスに適用可能であり、当該回路または半導体デバイスは、より高いパイプラインスループットおよび改善された性能の利益を享受できる。本発明の実施形態の教示は、データ操作を実行するあらゆるプロセッサまたは機械に適用可能である。しかしながら、本発明は512ビット、256ビット、128ビット、64ビット、32ビットまたは16ビットデータの操作を実行するプロセッサまたは機械に限定されず、本発明は、データ操作またはデータ管理が行われるあらゆるプロセッサおよび機械に適用可能である。また、以下の詳細な説明は例示を提供しており、添付図面は例示目的のために様々な例を図示している。しかしながら、これらの例は、本発明の実施形態に係るあらゆる可能性のある実装を網羅的に列挙するのではなく、単に本発明の実施形態の例を提供する意図であって、限定的な意味において解釈されるべきではない。
【0050】
以下の例示は、実行ユニットおよびロジック回路の文脈で命令処理および命令配信について記載するが、本発明の他の実施形態は、有形な機械可読媒体上に格納されたデータおよび/または命令を用いて実現され得、当該データおよび/または命令は機械による実行時、機械に対して、本発明の少なくとも一実施形態と一貫性のある機能を実行させる。一実施形態において、本発明の実施形態に関連する機能は、機械で実行可能な命令に具現化される。命令は、当該命令でプログラムされる汎用プロセッサまたは特定用途向けプロセッサに対し、本発明の複数の段階を実行させるために使用可能である。本発明の実施形態は、コンピュータプログラム製品またはソフトウェアとして提供されてよく、当該コンピュータプログラム製品またはソフトウェアは、自身に格納された命令を有する機械またはコンピュータ可読媒体を含んでよく、当該命令を使用して、本発明の実施形態による1または複数の演算を実行するようにコンピュータ(または他の電子デバイス)をプログラムしてよい。代替的に、本発明の実施形態の複数の段階は、当該段階を実行するための固定機能ロジックを含む特別なハードウェアコンポーネント、またはプログラムされたコンピュータコンポーネントおよび固定機能のハードウェアコンポーネントの任意の組み合わせによって実行されてよい。
【0051】
本発明の実施形態を実行するためのロジックをプログラムするために使用される命令は、DRAM、キャッシュ、フラッシュメモリまたは他のストレージ等のシステム内のメモリに格納されてよい。さらに、命令はネットワークを介してまたは他のコンピュータ可読媒体を通して配信されてよい。故に、機械可読媒体としては、特に限定されないが、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク、リードオンリメモリ(CD‐ROM)、および光磁気ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、磁気若しくは光カード、フラッシュメモリ、または電気、光、音波または他の形態の伝搬信号(例えば、搬送波、赤外線信号、デジタル信号等)を介したインターネット経由での情報送信に使用される有形の機械可読ストレージ等、機械(例えばコンピュータ)によって読み取り可能な形態で情報を格納または送信するための任意のメカニズムが含まれてよい。従って、コンピュータ可読媒体としては、機械(例えばコンピュータ)によって読み取り可能な形態で電子的命令または情報を格納または送信するために好適な任意のタイプの有形の機械可読媒体が含まれる。
【0052】
設計は、作成からシミュレーション、製造まで様々なステージを経てよい。設計を表わすデータは、多数の方法で設計を表わしてよい。まず、シミュレーションで有用であるように、ハードウェアはハードウェア記述言語または別の機能記述言語を使用して表わされてよい。また、ロジックおよび/またはトランジスタゲートを用いる回路レベルモデルが、設計プロセスのどこかのステージで生成されてよい。さらに、多くの設計はどこかのステージにおいて、ハードウェアモデルの様々なデバイスの物理的配置を表わすデータレベルに到達する。従来の半導体製造技術が使用される場合、ハードウェアモデルを表わすデータは、集積回路の生成に使用されるマスクについて異なるマスク層における様々な特徴部の存在または不存在を指定するデータであってよい。設計のあらゆる表現において、データは任意の形態の機械可読媒体に格納されてよい。メモリ、またはディスク等の磁気若しくは光ストレージは、このような情報を送信するために変調または変調以外の方法で生成された光波または電波を介して送信される情報を格納する機械可読媒体であってよい。コードまたは設計を示すまたは搬送する電気搬送波が送信される場合、電気信号のコピー、バッファリング、または再送信が実行される限度において、新しいコピーが作成される。故に、通信プロバイダまたはネットワークプロバイダは、搬送波にエンコードされた情報等の項目を有形の機械可読媒体上に少なくとも一時的に格納し、本発明の実施形態の技術を具現化してよい。
【0053】
現在のプロセッサでは、多数の異なる実行ユニットを使用し、様々なコードおよび命令が処理および実行されている。いくつかの命令はより迅速に終了する一方、他の命令は完了までに複数のクロックサイクルを必要とし得る等、すべての命令は等しく作成されているわけではない。命令のスループットがより高速なほど、プロセッサの性能全体はより良好になる。故に、多数の命令を可能な限り高速で実行させると有利になろう。しかしながら、より複雑なもの、実行時間およびプロセッサリソースの観点からより多くのものを要求するような特定の命令が存在する。例えば、浮動小数点命令、ロード/ストア操作、データ移動等がある。
【0054】
より多くのコンピュータシステムがインターネット、テキストおよびマルチメディアアプリケーションで使用されるにつれ、追加のプロセッササポートが経時的に導入されている。一実施形態において、命令セットは、データタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み処理および例外処理、並びに外部入力および出力(I/O)を含む1または複数のコンピュータアーキテクチャに関連付けられてよい。
【0055】
一実施形態において、命令セットアーキテクチャ(ISA)は、1または複数のマイクロアーキテクチャによって実装されてよく、当該マイクロアーキテクチャは1または複数の命令セットを実装するために使用されるプロセッサロジックおよび回路を含む。従って、異なるマイクロアーキテクチャを備えるプロセッサは、共通の命令セットの少なくとも一部を共有してよい。例えば、インテル(登録商標)Pentium(登録商標)4プロセッサ、インテル(登録商標)Core(商標)プロセッサ、およびカリフォルニア州サニーベールのアドバンストマイクロデバイス社のプロセッサは、異なる内部設計を有するもののx86命令セット(より新しいバージョンに追加されたいくつかの拡張機能を持つ)のバージョンとほぼ同一のものを実装する。同様に、ARM Holdings、MIPS、またはそれらのライセンシ若しくは採用者等の他のプロセッサ開発企業によって設計されたプロセッサは、共通の命令セットの少なくとも一部を共有してよいが、異なるプロセッサ設計を含んでよい。例えば、ISAとの同一レジスタアーキテクチャは、新規または周知の技術を使用して異なるマイクロアーキテクチャにおいて異なる方法で実装されてよく、このようなものとしては専用物理レジスタ、レジスタリネーミングメカニズムを使用(例えばレジスタエイリアステーブル(RAT)、リオーダバッファ(ROB)およびリタイアメントレジスタファイルの使用)して動的に割り当てられた1または複数の物理レジスタが含まれる。一実施形態において、レジスタは、1または複数のレジスタ、レジスタアーキテクチャ、レジスタファイル、またはソフトウェアプログラマによってアドレス指定可能であってもなくてもよい他のレジスタセットを含んでよい。
【0056】
一実施形態において、命令は、1または複数の命令フォーマットを含んでよい。一実施形態において、命令フォーマットは、実行されるべき演算およびその演算が実行されるオペランドをとりわけ指定するための様々なフィールド(ビット数、ビットの場所等)を示してよい。いくつかの命令フォーマットは、命令テンプレート(またはサブフォーマット)によってさらに定義されてよい。例えば、特定の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセットを有するように定義されてよく、および/または、異なって解釈される特定のフィールドを有するように定義されてよい。一実施形態において、命令は命令フォーマット(および、定義されている場合は、その命令フォーマットの複数の命令テンプレートのうちの特定の1つにおいて)を使用して表わされ、命令は演算およびその演算が行われるオペランドを指定または示す。
【0057】
科学的アプリケーション、財務アプリケーション、自動ベクトル化汎用アプリケーション、RMS(Recognition(認識)、mining(マイニング)、およびsynthesis(合成))アプリケーション、並びにビジュアルおよびマルチメディアアプリケーション(例えば、2D/3Dグラフィックス、画像処理、ビデオ圧縮/圧縮解除、音声認識アルゴリズムおよびオーディオ操作)は、多数のデータアイテム上に同一の演算が実行されることを要求してよい。一実施形態において、単一命令複数データ(SIMD)とは、プロセッサに、複数のデータ要素への演算を実行させるタイプの命令を指す。SIMD技術は、レジスタ内のビットを複数の固定サイズまたは可変サイズのデータ要素に論理的に分割可能なプロセッサにおいて使用されてよく、データ要素の各々は別個の値を表わす。例えば、一実施形態において、64ビットレジスタ内のビットは、4つの別個の16ビットデータ要素を含むソースオペランドとして編成されてよく、当該データ要素の各々は別箇の16ビット値を表わす。このタイプのデータは、「パックされた」データタイプまたは「ベクトル」データタイプと称されてよく、このデータタイプのオペランドは、パックされたデータオペランドまたはベクトルオペランドと称される。一実施形態において、パックされたデータアイテムまたはベクトルは、単一のレジスタ内に格納されたパックされたデータ要素のシーケンスであってよく、パックされたデータオペランドまたはベクトルオペランドは、SIMD命令(または「パックされたデータ命令または「ベクトル命令」)のソースオペランドまたはデスティネーションオペランドであってよい。一実施形態において、SIMD命令は、同一または異なるサイズのデスティネーションベクトルオペランド(結果のベクトルオペランドとも称される)を同一または異なる数のデータ要素を備える状態で同一または異なるデータ要素順序において生成すべく、単一のベクトル演算が2つのソースベクトルオペランドに行われることを指定する。
【0058】
x86命令、MMX(商標)命令、ストリーミングSIMD拡張(SSE)命令、SSE2命令、SSE3命令、SSE4.1命令およびSSE4.2命令を含む命令セットを有するIntel(登録商標)Core(商標)プロセッサ、ベクトル浮動小数点(VFP)命令および/またはNEON命令を含む命令セットを有するARM Cortex(登録商標)ファミリのプロセッサ等のARMプロセッサ、中国科学アカデミーのコンピューティング技術協会(ICT)によって開発されたLoongsonファミリのプロセッサ等のMIPSプロセッサによって採用されるようなSIMD技術がアプリケーション性能の大きな改善を可能にした(Core(商標)およびMMX(商標)は、カリフォルニア州サンタクララのインテルコーポレーションの登録商標または商標である)。
【0059】
一実施形態において、デスティネーションおよびソースのレジスタ/データとは、対応するデータまたは演算のソースおよびデスティネーションを表わす一般的な用語である。いくつかの実施形態において、それらはレジスタ、メモリ、または本明細書に記載されたものではない他の名前または機能を有する他のストレージ領域によって実装されてよい。例えば、一実施形態において、「DEST1」が一時的なストレージレジスタまたは他のストレージ領域であってよい一方で、「SRC1」および「SRC2」は、第1のソースストレージレジスタおよび第2のソースストレージレジスタまたは他のストレージ領域等であってよい。他の実施形態において、SRCおよびDESTストレージ領域のうちの2または2より多いものが、同一のストレージ領域(例えばSIMDレジスタ)内の複数の異なるデータストレージ要素に対応してよい。一実施形態において、複数のソースレジスタのうちの1つは、例えば、第1のソースデータおよび第2のソースデータで行われた演算結果をデスティネーションレジスタとして機能する2つのソースレジスタのうちの1つにライトバックすることによって、デスティネーションレジスタとして動作してもよい。
【0060】
図1Aは、プロセッサと共に形成された例示的なコンピュータシステムのブロック図であり、プロセッサは本発明の一実施形態による命令を実行するための実行ユニットを含む。システム100は、本明細書に記載の実施形態におけるような本発明による、処理データに対するアルゴリズムを実行するためのロジックを含む実行ユニットを採用するプロセッサ102等のコンポーネントを含む。システム100は、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なPENTIUM(登録商標)III、PENTIUM(登録商標)4、Xeon(商標)、Itanium(登録商標)、XScale(商標)および/またはStrongARM(商標)マイクロプロセッサに基づく処理システムの典型的なものであるが、他のシステム(他のマイクロプロセッサ、エンジニアリングワークステーション、セットトップボックス等を有するPCを含む)も使用されてよい。一実施形態において、サンプルシステム100は、ワシントン州レドモンドのマイクロソフト社から入手可能なWINDOWS(登録商標)オペレーティングシステムのバージョンを実行してよいが、他のオペレーティングシステム(例えばUNIX(登録商標)およびLinux(登録商標))、埋め込みソフトウェアおよび/またはグラフィックユーザインタフェースも使用されてよい。故に、本発明の実施形態は、ハードウェア回路およびソフトウェアの任意の特定の組み合わせに限定されない。
【0061】
実施形態はコンピュータシステムに限定されない。本発明の代替的な実施形態は、ハンドヘルドデバイスおよび埋め込みアプリケーション等の他のデバイスにおいて使用されてよい。ハンドヘルドデバイスのいくつかの例としては、携帯電話、インターネットプロトコルデバイス、デジタルカメラ、携帯情報端末(PDA)およびハンドヘルドPCが含まれる。埋め込みアプリケーションとしては、マイクロコントローラ、デジタル信号プロセッサ(DSP)、システムオンチップ、ネットワークコンピュータ(NetPC)、セットトップボックス、ネットワークハブ、ワイドエリアネットワーク(WAN)スイッチ、または少なくとも一実施形態に係る1または複数の命令を実行し得る任意の他のシステムが含まれ得る。
【0062】
図1Aは、プロセッサ102と共に形成されたコンピュータシステム100のブロック図であり、プロセッサ102は本発明の一実施形態による少なくとも1つの命令を実行するアルゴリズムを実行するための1または複数の実行ユニット108を含む。一実施形態は、単一プロセッサのデスクトップまたはサーバシステムの文脈で記載され得るが、代替の実施形態がマルチプロセッサシステム内に含まれてよい。システム100は、「ハブ」システムアーキテクチャの一例である。コンピュータシステム100は、データ信号を処理するためのプロセッサ102を含む。プロセッサ102は、複合命令セットコンピュータ(CISC)マイクロプロセッサ、縮小命令セットコンピューティング(RISC)マイクロプロセッサ、超長命令語(VLIW)マイクロプロセッサ、複数の命令セットの組み合わせを実装するプロセッサ、または、例えばデジタル信号プロセッサ等の任意の他のプロセッサデバイスであってよい。プロセッサ102はプロセッサバス110に連結され、プロセッサバス110は、プロセッサ102とシステム100内の他のコンポーネントとの間でデータ信号を送信し得る。システム100の複数の要素は、当該技術分野に習熟した者にとって周知であるそれらの従来機能を実行する。
【0063】
一実施形態において、プロセッサ102はレベル1(L1)内部キャッシュメモリ104を含む。アーキテクチャに応じて、プロセッサ102は、単一の内部キャッシュまたは複数のレベルの内部キャッシュを有してよい。代替的に、別の実施形態においては、キャッシュメモリは、プロセッサ102の外部に存在してよい。他の実施形態はまた、特定の実装およびニーズに応じて、内部および外部の両方のキャッシュの組み合わせを含んでよい。レジスタファイル106は、異なるタイプのデータを整数レジスタ、浮動小数点レジスタ、ステータスレジスタ、および命令ポインタレジスタを含む様々なレジスタに格納してよい。
【0064】
整数演算および浮動小数点演算を実行するためのロジックを含む実行ユニット108も、プロセッサ102内に存在する。プロセッサ102はまた、特定のマクロ命令のためのマイクロコードを格納するマイクロコード(μコード)ROMを含む。一実施形態では、実行ユニット108は、パックされた命令セット109を処理するためのロジックを含む。命令を実行するための関連回路と共に、汎用プロセッサ102の命令セット内にパックされた命令セット109を含めることによって、多くのマルチメディアアプリケーションによって使用される演算が、汎用プロセッサ102内のパックされたデータを使用して実行されてよい。故に、多くのマルチメディアアプリケーションはパックされたデータに演算を実行するために、プロセッサのデータバスの全幅を使用することによって、加速化され、より効率的に実行されてよい。これにより、1データ要素に1または複数の演算を一度に実行すべく、データのより小さな単位をプロセッサのデータバスにわたり転送する必要性をなくしてよい。
【0065】
実行ユニット108の代替の実施形態はマイクロコントローラ、埋め込みプロセッサ、グラフィックデバイス、DSP、および他のタイプのロジック回路内で使用されてもよい。システム100は、メモリ120を含む。メモリ120は、ダイナミックランダムアクセスメモリ(DRAM)デバイス、スタティックランダムアクセスメモリ(SRAM)デバイス、フラッシュメモリデバイス、または他のメモリデバイスであってよい。メモリ120は、プロセッサ102によって実行可能な、データ信号によって表現される命令および/またはデータを格納してよい。
【0066】
システムロジックチップ116は、プロセッサバス110およびメモリ120に連結される。示される実施形態中のシステムロジックチップ116は、メモリコントローラハブ(MCH)である。プロセッサ102は、MCH116とプロセッサバス110を介して通信してよい。MCH116は、命令およびデータの格納およびグラフィックコマンド、データおよびテクスチャの格納のためにメモリ120への高帯域幅メモリパス118を提供する。MCH116は、システム100内のプロセッサ102、メモリ120、および他のコンポーネント間にわたり、データ信号を送信し、データ信号をプロセッサバス110、メモリ120、およびシステムI/O 122間にわたり橋渡しする。いくつかの実施形態において、システムロジックチップ116は、グラフィックコントローラ112に連結するためのグラフィックポートを提供してよい。MCH116は、メモリインタフェース118を介してメモリ120に連結される。グラフィックカード112が、アクセラレーテッドグラフィックポート(AGP)相互接続114を介してMCH116に連結される。
【0067】
システム100は、MCH116をI/Oコントローラハブ(ICH)130に連結するための独自のハブインタフェースバス122を使用する。ICH130は、ローカルI/Oバスを介していくつかのI/Oデバイスへの直接的な接続を提供する。ローカルI/Oバスは、周辺機器をメモリ120、チップセットおよびプロセッサ102に接続するための高速I/Oバスである。いくつかの例としては、オーディオコントローラ、ファームウェアハブ(フラッシュBIOS)128、無線送受信器126、データストレージ124、ユーザ入力およびキーボードインタフェースを含むレガシI/Oコントローラ、ユニバーサルシリアルバス(USB)等のシリアル拡張ポート、およびネットワークコントローラ134が挙げられる。データストレージデバイス124は、ハードディスクドライブ、フロッピー(登録商標)ディスクドライブ、CD‐ROMデバイス、フラッシュメモリデバイス、または他の大容量ストレージデバイスを含んでよい。
【0068】
システムの別の実施形態について、一実施形態による命令はシステムオンチップと共に使用されてよい。システムオンチップの一実施形態は、プロセッサおよびメモリで構成される。このような1システムのためのメモリはフラッシュメモリである。フラッシュメモリは、プロセッサおよび他のシステムコンポーネントと同一ダイ上に配置されてよい。また、メモリコントローラまたはグラフィックコントローラ等の他のロジックブロックもシステムオンチップ上に配置されてよい。
【0069】
図1Bは、本発明の一実施形態に係る原理を実装するデータ処理システム140を示す。本明細書に記載の実施形態は、本発明の実施形態の範囲から逸脱することなく、代替の処理システムと共に使用し得ることを当業者は容易に理解されたい。
【0070】
コンピュータシステム140は、一実施形態による少なくとも1つの命令を実行可能な処理コア159を備える。一実施形態について、処理コア159は、特に限定されないが、CISC、RISC、またはVLIWタイプのアーキテクチャを含む任意のタイプのアーキテクチャの処理ユニットを表わす。処理コア159はまた、1または複数の処理技術における製造に好適であってよく、また機械可読媒体に対し十分詳細に表現されることによって、当該製造を容易にするために好適であってよい。
【0071】
処理コア159は、実行ユニット142、レジスタファイルのセット145、およびデコーダ144を備える。処理コア159はまた、本発明の実施形態の理解には不要である追加の回路(不図示)を含む。実行ユニット142は処理コア159によって受信される命令を実行するために使用される。典型的なプロセッサ命令の実行に加え、実行ユニット142は、パックされたデータフォーマットに演算を実行するために、パックされた命令セット143内の命令を実行してよい。パックされた命令セット143は、本発明の実施形態を実行するための命令および他のパックされた命令を含む。実行ユニット142は、内部バスによってレジスタファイル145に連結される。レジスタファイル145は、データを含む情報を格納するための処理コア159上のストレージ領域を表わす。上記の通り、パックされたデータを格納するために使用されるストレージ領域は、重要ではないことを理解されたい。実行ユニット142はデコーダ144に連結される。デコーダ144は、処理コア159によって受信される命令を、制御信号および/またはマイクロコードエントリポイントにデコードするために使用される。これらの制御信号および/またはマイクロコードエントリポイントに応答して、実行ユニット142は適切な演算を実行する。一実施形態において、デコーダは命令のオペコードを解釈するために使用され、当該オペコードは、命令内で示される該当データに対しどのような演算を実行すべきかを示すであろう。
【0072】
処理コア159は、様々な他のシステムデバイスとの通信のためにバス141に連結され、当該システムデバイスとしては特に限定されないが、例えば、シンクロナスダイナミックランダムアクセスメモリ(SDRAM)コントロール146、スタティックランダムアクセスメモリ(SRAM)コントロール147、バーストフラッシュメモリインタフェース148、PCメモリカード国際協会(PCMCIA)/コンパクトフラッシュ(登録商標)(CF)カードコントロール149、液晶ディスプレイ(LCD)コントロール150、ダイレクトメモリアクセス(DMA)コントローラ151、および代替のバスマスターインタフェース152が含まれてよい。一実施形態において、データ処理システム140はまたI/Oバス153を介して様々なI/Oデバイスと通信するためのI/Oブリッジ154を含んでよい。このようなI/Oデバイスとしては特に限定されないが、例えば、汎用非同期送受信回路(UART)155、ユニバーサルシリアルバス(USB)156、Bluetooth(登録商標)無線UART157およびI/O拡張インタフェース158が含まれてよい。
【0073】
データ処理システム140の一実施形態は、モバイル、ネットワークおよび/または無線通信、並びに文字列比較演算等を含むSIMD演算を実行可能な処理コア159を提供する。処理コア159は、様々なオーディオアルゴリズム、ビデオアルゴリズム、イメージ処理アルゴリズムおよび通信アルゴリズムでプログラムされてよく、当該アルゴリズムにはウォルシュアダマール変換、高速フーリエ変換(FFT)、離散コサイン変換(DCT)、およびそれらそれぞれの逆変換等の離散変換と、色空間変換、ビデオエンコードモーション推定またはビデオデコードモーション補償等の圧縮/圧縮解除技法と、パルス符号変調(PCM)等の変調/復調(MODEM)機能とが含まれる。
【0074】
図1Cは、SIMD SM3暗号化ハッシュ機能を提供するための命令を実行可能なデータ処理システムの別の代替の実施形態を示す。代替の一実施形態により、データ処理システム160は、メインプロセッサ166、SIMDコプロセッサ161、キャッシュメモリ167、および入/出力システム168を含んでよい。随意で、入/出力システム168は、無線インタフェース169に連結されてよい。SIMDコプロセッサ161は、一実施形態による命令を含む演算を実行可能である。処理コア170は1または複数の処理技術における製造に好適であってよく、また機械可読媒体上で十分詳細に表現されることによって、処理コア170を含むデータ処理システム160のうちの全部または一部の製造を容易にするために好適であってよい。
【0075】
一実施形態について、SIMDコプロセッサ161は実行ユニット162およびレジスタファイルのセット164を備える。メインプロセッサ166の一実施形態は、実行ユニット162による実行のための一実施形態による命令を含む命令セット163のうちの命令を認識するためのデコーダ165を備える。代替の実施形態については、SIMDコプロセッサ161はまた、命令セット163のうちの命令をデコードするためのデコーダ165Bのうちの少なくとも一部を備える。処理コア170はまた、本発明の実施形態の理解には不要である追加の回路(不図示)を含む。
【0076】
演算時、メインプロセッサ166は、キャッシュメモリ167および入/出力システム168とのやり取りを含む一般的なタイプのデータ処理操作を制御するデータ処理命令ストリームを実行する。SIMDコプロセッサ命令がデータ処理命令ストリーム内に埋め込まれている。メインプロセッサ166のデコーダ165は、これらのSIMDコプロセッサ命令を付属のSIMDコプロセッサ161によって実行される必要があるタイプのものであると認識する。従って、メインプロセッサ166は、これらのSIMDコプロセッサ命令(または、SIMDコプロセッサ命令を表わす制御信号)をコプロセッサバス171に対し発行し、当該コプロセッサバス171から、これらのSIMDコプロセッサ命令が任意の付属のSIMDコプロセッサによって受信される。この場合、SIMDコプロセッサ161は、自身を宛先とするあらゆる受信されたSIMDコプロセッサ命令を受け付けおよび実行する。
【0077】
データは、SIMDコプロセッサ命令による処理のために、無線インタフェース169を介して受信されてよい。一例として、音声通信がデジタル信号の形態で受信されてよく、当該デジタル信号はSIMDコプロセッサ命令によって処理され、当該音声通信を表わすデジタルオーディオサンプルを再生成してよい。別の例として、圧縮されたオーディオおよび/またはビデオがデジタルビットストリームの形態で受信されてよく、当該デジタルビットストリームはSIMDコプロセッサ命令によって処理され、デジタルオーディオサンプルおよび/またはモーションビデオフレームを再生成してよい。処理コア170の一実施形態について、メインプロセッサ166およびSIMDコプロセッサ161は、単一の処理コア170に統合され、当該単一の処理コア170は実行ユニット162、レジスタファイルのセット164および一実施形態による命令を含む命令セット163のうちの命令を認識するためのデコーダ165を備える。
【0078】
図2は、本発明の一実施形態による命令を実行するためのロジック回路を含むプロセッサ200のためのマイクロアーキテクチャのブロック図である。いくつかの実施形態において、一実施形態による命令は、バイト、ワード、ダブルワード、クワッドワード等のサイズに加え、単精度整数データタイプおよび倍精度整数データタイプおよび単精度浮動小数点データタイプおよび倍精度浮動小数点データタイプのようなデータタイプを有するデータ要素に演算を行うように実装されてよい。一実施形態において、インオーダフロントエンド201は実行されるべき命令をフェッチするプロセッサ200の一部であり、当該命令をプロセッサパイプラインにおいて後で使用されるように準備する。フロントエンド201はいくつかのユニットを含んでよい。一実施形態において、命令プリフェッチャ226は、メモリから命令をフェッチし、当該命令を命令デコーダ228にフィードすると、命令デコーダ228が今度は当該命令をデコードまたは解釈する。例えば、一実施形態において、デコーダは、受信された命令を、機械が実行可能な「マイクロ命令」または「マイクロオペレーション」(マイクロopまたはμopとも称される)と称される1または複数の演算にデコードする。他の実施形態において、デコーダは命令を、オペコード並びに対応するデータおよび制御フィールドに解析する。オペコード並びに対応するデータおよび制御フィールドは、マイクロアーキテクチャによって使用され、一実施形態による演算を実行する。一実施形態において、トレースキャッシュ230はデコードされたμopを取得し、実行のために、それらをプログラムにより順序付けられたシーケンスまたはμopキュー234内のトレースに組み立てる。トレースキャッシュ230が複雑な命令に遭遇する場合、マイクロコードROM232は演算の完了に必要なμopを提供する。
【0079】
いくつかの命令が単一のマイクロopに変換される一方、他の命令は完全な演算を完了させるためのいくつかのマイクロopを必要とする。一実施形態において、命令の完了に4つより多いマイクロopが必要な場合、デコーダ228はマイクロコードROM232にアクセスし、命令を実行する。一実施形態において、命令は、命令デコーダ228で処理するための少数のマイクロopにデコードされてよい。別の実施形態において、演算を遂行するために多数のマイクロopが必要な場合、命令はマイクロコードROM232内に格納されてよい。トレースキャッシュ230とは、一実施形態によるマイクロコードROM232からの1または複数の命令を完了すべく、マイクロコードシーケンスを読み取るための正しいマイクロ命令ポインタを判断するためのエントリポイントプログラマブルロジックアレイ(PLA)を指す。マイクロコードROM232が命令のためのマイクロopのシーケンス処理を完了した後、機械のフロントエンド201は、トレースキャッシュ230からのマイクロopのフェッチを再開する。
【0080】
アウトオブオーダ実行エンジン203は、命令を実行のために準備する場所である。アウトオブオーダ実行ロジックは、命令フローがパイプラインに行き、実行のためにスケジュールされる際、性能を最適化するために、命令フローを円滑化し、並べ替えるための複数のバッファを有する。アロケータロジックは、各μopが実行のために必要とする機械のバッファおよびリソースを割り当てる。レジスタリネーミングロジックはロジックレジスタをレジスタファイル内のエントリにリネーム(名前変更)する。アロケータはまた、命令スケジューラの前にある2つのμopキューのうちの一方にある各μopのためにエントリを割り当てる。当該μopキューのうちの1つはメモリ操作用、もう1つは非メモリ操作用のものであり、当該命令スケジューラはメモリスケジューラ、高速スケジューラ202、低速/全般浮動小数点スケジューラ204、および簡易浮動小数点スケジューラ206で構成される。μopスケジューラ202、204、206は、それらの従属入力レジスタオペランドソースの準備状態およびμopがそれらの演算の完了に必要とする実行リソースの利用可能性に基づいて、μopが、いつ実行準備が整うかを判断する。一実施形態の高速スケジューラ202は、メインクロックサイクルの各半分においてスケジュールしてよい一方、他のスケジューラはメインプロセッサクロックサイクルごとに一回のみスケジュールしてよい。スケジューラは、μopの実行をスケジュールするためのディスパッチポートを調整する。
【0081】
レジスタファイル208、210は、スケジューラ202、204、206および実行ブロック211内の実行ユニット212、214、216、218、220、222、224間に配置される。それぞれ整数演算および浮動小数点演算のための別個のレジスタファイル208、210が存在する。一実施形態の各レジスタファイル208、210はまた、レジスタファイル内にまだ書き込まれていない完了したばかりの結果を、新しい従属μopにバイパスまたは転送し得るバイパスネットワークを含む。整数レジスタファイル208および浮動小数点レジスタファイル210はまた、それら同士でデータを通信可能である。一実施形態について、整数レジスタファイル208は2つの別個のレジスタファイルに分割され、1つのレジスタファイルは低次の32ビットデータ用、第2のレジスタファイルは高次の32ビットデータ用である。一実施形態の浮動小数点レジスタファイル210は、128ビット幅エントリを有する。というのは、浮動小数点命令は通常、64〜128ビット幅のオペランドを有するからである。
【0082】
実行ブロック211は、命令が実際に実行される場所である実行ユニット212、214、216、218、220、222、224を含む。このセクションは、マイクロ命令が実行する必要のある整数データオペランド値および浮動小数点データオペラント値を格納するレジスタファイル208、210を含む。一実施形態のプロセッサ200は複数の実行ユニット、すなわちアドレス生成ユニット(AGU)212、AGU214、高速ALU216、高速ALU218、低速ALU220、浮動小数点ALU222、浮動小数点移動ユニット224で構成される。一実施形態では、浮動小数点実行ブロック222、224は、浮動小数点演算、MMX演算、SIMD演算およびSSE演算または他の演算を実行する。一実施形態の浮動小数点ALU222は、マイクロopの除算、平方根および剰余を実行するための64ビット単位の浮動小数点除算器を含む。本発明のいくつかの実施形態について、浮動小数点値を含む命令は、浮動小数点ハードウェアで処理されてよい。一実施形態において、ALU演算が高速ALU実行ユニット216、218に移動する。一実施形態の高速ALU216、218は、高速演算をクロックサイクルの半分の有効なレイテンシで実行してよい。一実施形態では、複素整数演算の大半は低速ALU220に移動される。というのは、低速ALU220は、乗算、シフト、フラグロジック、および分岐処理等の長レイテンシタイプの演算のための整数実行ハードウェアを含むからである。メモリロード/ストア操作は、AGU212、214によって実行される。一実施形態では、整数ALU216、218、220は、64ビットデータオペランドに整数演算を実行する文脈で記載される。代替の実施形態において、ALU216、218、220は、16、32、128、256等の様々なデータビットをサポートするように実装されてよい。同様に、浮動小数点ユニット222、224は、様々なビット幅を有するオペランドの範囲をサポートするように実装されてよい。一実施形態では、浮動小数点ユニット222、224は、SIMD命令およびマルチメディア命令と連携して、128ビット幅のパックされたデータオペランドに演算を行ってよい。
【0083】
一実施形態において、μopスケジューラ202、204、206は、親ロードが実行を終了する前に、従属する演算をディスパッチする。μopはプロセッサ200内で予測的にスケジュールされ、実行され、プロセッサ200はまたメモリミスを処理するためのロジックを含む。データロードがデータキャッシュ内で失敗する場合、従属する演算がパイプライン内にインフライトで存在する可能性があり、これにより、スケジューラは一時的に誤ったデータが残された状態になっている。再生メカニズムは、誤ったデータを使用する命令を追跡および再実行する。従属する演算のみが再生の必要があり、独立した演算は完了を許可される。プロセッサの一実施形態に係るスケジューラおよび再生メカニズムはまた、SIMD SM3暗号化ハッシュ機能を提供する命令をキャッチするように設計されている。
【0084】
「レジスタ」という用語は、オペランドを識別するための命令の一部として使用されるオンボードプロセッサのストレージ場所を指してよい。換言すると、レジスタとは、プロセッサの外部(プログラマの視点から)から使用可能なレジスタであってよい。しかしながら、一実施形態のレジスタは特定のタイプの回路を意味するものとして限定されるべきではない。一実施形態のレジスタは、データの格納、データの供給、および本明細書に記載の機能を実行可能である。本明細書に記載のレジスタは、プロセッサ内の回路によって、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等、任意の数の異なる技術を使用して実装されてよい。一実施形態において、整数レジスタは32ビットの整数データを格納する。一実施形態のレジスタファイルはまた、パックされたデータのための8つのマルチメディアSIMDレジスタを含む。後述の通り、レジスタはパックされたデータを保持するように設計されたデータレジスタであると理解されてよく、当該データレジスタとしては、カリフォルニア州サンタクララのインテルコーポレーションのMMX技術で有効にされるマイクロプロセッサ内の64ビット幅MMX(商標)レジスタ(いくつかの例において「mm」レジスタとも称される)といったものが挙げられる。整数および浮動小数点の両方の形態で利用可能なこれらのMMXレジスタは、SIMD命令およびSSE命令に伴うパックされたデータ要素と共に動作してよい。同様に、SSE2、SSE3、SSE4、またはそれ以降(概して「SSEx」と称される)に関する128ビット幅XMMレジスタ技術は、このようなパックされたデータオペランドを保持するためにも使用されてよい。一実施形態において、パックされたデータおよび整数データを格納する際、レジスタは当該2つのデータタイプ間を区別する必要はない。一実施形態において、整数および浮動小数点は同一のレジスタファイル内または異なるレジスタファイル内に含まれる。さらに、一実施形態において、浮動小数点データおよび整数データは異なるレジスタ内または同一のレジスタ内に格納されてよい。
【0085】
以下の図中の例示において、多数のデータオペランドについて説明される。
図3Aは、本発明の一実施形態による、マルチメディアレジスタ内の様々なパックされたデータタイプを表わしたものを示す。
図3Aは、128ビット幅オペランドのパックされたバイト310、パックされたワード320、およびパックされたダブルワード(dword)330のデータタイプを示す。この例のパックされたバイトフォーマット310は128ビット長であり、16個のパックされたバイトデータ要素を含む。1バイトは、例えば、8ビットのデータとして定義される。各バイトデータ要素の情報は、0ビットから7ビットまではバイト0、8ビットから15ビットまではバイト1、16ビットから23ビットまではバイト2、および最終の120ビットから127ビットまではバイト15内に格納される。故に、すべての利用可能なビットがレジスタ内で使用される。このストレージ構成によって、プロセッサのストレージ効率が向上する。なお、16個のデータ要素にアクセスされるので、16個のデータ要素に対し1つの演算が並列に実行されてよい。
【0086】
概して、一データ要素は、同一の長さを持つ他のデータ要素と共に、単一のレジスタまたはメモリ場所に格納される個々のデータである。SSEx技術に関するパックされたデータシーケンスにおいては、XMMレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された128ビットである。同様に、MMXおよびSSE技術に関するパックされたデータシーケンスにおいては、MMXレジスタ内に格納されたデータ要素の数は、個々のデータ要素のビット長で分割された64ビットである。
図3Aに示すデータタイプは128ビット長であるが、本発明の実施形態は、64ビット幅、256ビット幅、512ビット幅のオペランドまたは他のサイズのオペランドと共に動作してもよい。この例のパックされたワードフォーマット320は128ビット長であり、8個のパックされたワードデータ要素を含む。各パックされたワードは、16ビットの情報を含む。
図3Aのパックされたダブルワードフォーマット330は128ビット長であり、4個のパックされたダブルワードデータ要素を含む。各パックされたダブルワードデータ要素は、32ビットの情報を含む。パックされたクワッドワードは128ビット長であり、2個のパックされたクワッドワードデータ要素を含む。
【0087】
図3Bは、代替的なレジスタ内データストレージフォーマットを示す。各パックされたデータは、1より多い独立データ要素を含んでよい。パックされたハーフ341、パックされたシングル342およびパックされたダブル343の3つのパックされたデータフォーマットが図示されている。パックされたハーフ341、パックされたシングル342およびパックされたダブル343の一実施形態は、固定小数点データ要素を含む。代替的な実施形態については、パックされたハーフ341、パックされたシングル342およびパックされたダブル343のうちの1または複数は、浮動小数点データ要素を含んでよい。パックされたハーフ341の代替的な一実施形態は、8個の16ビットデータ要素を含む128ビット長である。パックされたシングル342の一実施形態は128ビット長であり、4個の32ビットデータ要素を含む。パックされたダブル343の一実施形態は128ビット長であり、2個の64ビットデータ要素を含む。このようなパックされたデータフォーマットは、例えば、96ビット、160ビット、192ビット、224ビット、256ビット、512ビットまたはそれ以上といった他のレジスタ長にさらに拡張されてよいことを理解されたい。
【0088】
図3Cは、本発明の一実施形態による、マルチメディアレジスタ内の様々な符号付きおよび符号なしのパックされたデータタイプを表わしたものを示す。符号なしのパックされたバイト表現344は、SIMDレジスタ内の符号なしのパックされたバイトの格納状態を示す。各バイトデータ要素の情報は、0ビットから7ビットまではバイト0、8ビットから15ビットまではバイト1、16ビットから23ビットまではバイト2等、および最終の120ビットから127ビットまではバイト15内に格納される。故に、すべての利用可能なビットがレジスタ内で使用される。このストレージ構成によって、プロセッサのストレージ効率が向上されてよい。なお、16個のデータ要素にアクセスされるので、16個のデータ要素に対し1つの演算が並列に実行されてよい。符号付きのパックされたバイト表現345は、符号付きのパックされたバイトの格納状態を示す。各バイトデータ要素の第8番目のビットは、符号インジケータであることに留意されたい。符号なしのパックされたワード表現346は、ワード0からワード7がSIMDレジスタ内にどのように格納されるかを示す。符号付きのパックされたワード表現347は、符号なしのパックされたワードのレジスタ内表現346と類似する。各ワードデータ要素の第16番目のビットが符号インジケータであることに留意されたい。符号なしのパックされたダブルワード表現348は、ダブルワードデータ要素の格納方法を示す。符号付きパックされたダブルワード表現349は、符号なしのパックされたダブルワードのレジスタ内表現348と類似する。必要な符号ビットは、各ダブルワードデータ要素の第32番目のビットであることに留意されたい。
【0089】
図3Dは、演算エンコーディング(オペコード)フォーマット360の一実施形態の図であり、演算エンコーディング(オペコード)フォーマット360は32ビットまたは32ビットより多いビットを有し、カリフォルニア州サンタクララのインテルコーポレーションのworld wide web(www)(intel.com/products/processor/manuals/)から入手可能な「インテル(登録商標)64およびIA‐32インテルアーキテクチャソフトウェア開発者のマニュアル第2Aと第2Bとの組み合わせ:命令セットリファレンスA-Z」に記載のタイプのオペコードフォーマットと一致するレジスタ/メモリオペランドアドレス指定モードを有する。一実施形態において、命令はフィールド361および362のうちの1または複数によってエンコードされてよい。1命令ごとに、最大2つのソースオペランド識別子364および365を含む、最大2つのオペランド位置が識別されてよい。一実施形態では、デスティネーションオペランド識別子366は、ソースオペランド識別子364と同一である一方、他の実施形態においては、それらは異なる。代替の実施形態では、デスティネーションオペランド識別子366は、ソースオペランド識別子365と同一である一方、他の実施形態においては、それらは異なる。一実施形態において、ソースオペランド識別子364および365によって識別される複数のソースオペランドのうちの1つは、命令の結果によって上書きされる一方、他の実施形態においては、識別子364はソースレジスタ要素に対応し、識別子365はデスティネーションレジスタ要素に対応する。一実施形態では、オペランド識別子364および365を使用して、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。
【0090】
図3Eは、40または40より多くのビットを有する別の代替の演算エンコーディング(オペコード)フォーマット370の図である。オペコードフォーマット370は、オペコードフォーマット360と対応し、オプションのプレフィックスバイト378を含む。一実施形態による命令は、フィールド378、371および372のうちの1または複数によってエンコードされてよい。1命令ごとに最大2つのオペランド位置が、ソースオペランド識別子374および375並びにプレフィックスバイト378によって識別されてよい。一実施形態では、プレフィックスバイト378が使用され、32ビットまたは64ビットのソースオペランドおよびデスティネーションオペランドを識別してよい。一実施形態では、デスティネーションオペランド識別子376はソースオペランド識別子374と同一である一方、他の実施形態においては、それらは異なる。代替の実施形態では、デスティネーションオペランド識別子376は、ソースオペランド識別子375と同一である一方、他の実施形態においては、それらは異なる。一実施形態において、命令はオペランド識別子374および375によって識別されるオペランドのうちの1または複数に対し演算を行い、オペランド識別子374および375によって識別される1または複数のオペランドは命令の結果で上書きされる一方、他の実施形態においては、識別子374および375によって識別されるオペランドは別のレジスタ内の別のデータ要素に書き込まれる。オペコードフォーマット360および370は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのアドレス指定が、MODフィールド363および373によって並びにオプションのスケールインデックスベースおよび変位バイトによって部分的に指定されることを可能にする。
【0091】
次に
図3Fを参照すると、いくつかの代替の実施形態において、64ビット(または128ビットまたは256ビットまたは512ビットまたはそれ以上)の単一命令複数データ(SIMD)算術演算は、コプロセッサデータ処理(CDP)命令を介して実行されてよい。演算エンコーディング(オペコード)フォーマット380は、CDPオペコードフィールド382および389を有する1つのそのようなCDP命令を表示する。代替の実施形態における、当該タイプのCDP命令演算は、フィールド383、384、387および388のうちの1または複数によってエンコードされてよい。1命令ごとに、最大2つのソースオペランド識別子385および390並びに1つのデスティネーションオペランド識別子386を含む、最大3つのオペランド位置が識別されてよい。コプロセッサの一実施形態は、8ビット、16ビット、32ビット、および64ビットの値に演算を行ってよい。一実施形態について、命令は整数データ要素に対し実行される。いくつかの実施形態において、命令は条件フィールド381を使用して条件的に実行されてよい。いくつかの実施形態では、ソースデータサイズがフィールド383によってエンコードされてよい。いくつかの実施形態において、ゼロ(Z)、負(N)、キャリー(C)およびオーバーフロー(V)検出がSIMDフィールドでなされてよい。いくつかの命令については、飽和タイプがフィールド384によってエンコードされてよい。
【0092】
次に
図3Gを参照すると、カリフォルニア州サンタクララのインテルコーポレーションのworld−wide−web(www)のintel.com/products/processor/manuals/から入手可能な「Intel(登録商標)Advanced Vector Extensions Programming Reference」に記載されたオペコードフォーマットタイプに一致する、別の実施形態によるSIMD SM3暗号化ハッシュ機能を提供するための別の代替的な演算エンコーディング(オペコード)フォーマット397の図である。
【0093】
オリジナルのx86命令セットは、アドレスシラブルの様々なフォーマットおよび追加のバイト内に含まれる即値オペランドを持つ1バイトオペコードのために提供されており、追加のバイトの存在は第1の「オペコード」バイトから認識される。また、オペコードに対する修飾子として予約された特定のバイト値が存在した(命令の前に配置される必要があったことから、プレフィックスと称される)。256オペコードバイトの元のパレット(これらの特別なプレフィックス値を含む)が使用され尽くすと、単一のバイトが256オペコードの新しいセットへのエスケープとして使用された。ベクトル命令(例えば、SIMD)が追加されたら、より多くのオペコードの必要性が生じるので、たとえプレフィックスの使用を介して拡張された場合であっても、「2バイト」オペコードマッピングもまた不十分であった。この目的のために、2バイトにさらに、オプションのプレフィックスを識別子として使用する追加のマップ内に、新しい命令が追加された。
【0094】
また、64ビットモードの追加のレジスタを容易化すべく、プレフィックスとオペコード(および、オペコードを判断するために必要な任意のエスケープバイト)との間に追加のプレフィックス(「REX」と称する)が使用されてよい。一実施形態において、64ビットモードの追加のレジスタの使用を示すべく、REXは4つの「ペイロード」ビットを有してよい。他の実施形態において、REXは4ビットより少ないまたは多いビットを有してよい。少なくとも1つの命令セットの一般的なフォーマット(フォーマット360および/またはフォーマット370に概して対応する)は一般的に、以下のように示される。
[prefixes] [rex] escape [escape2] opcode modrm (等)
【0095】
オペコードフォーマット397は、オペコードフォーマット370に対応し、最も一般的に使用される他のレガシの命令プレフィックスバイトおよびエスケープコードに代わるオプションのVEXプレフィックスバイト391(一実施形態では、16進数の「C4」で開始する)を含む。例えば、以下は、命令をエンコードするための2つのフィールドを使用する一実施形態を示す。それは、元の命令内に第2のエスケープコードが存在する場合、またはREXフィールド内の追加のビット(例えば、XBフィールドおよびWフィールド)が使用される必要がある場合に、使用されてよい。以下に示される実施形態では、レガシエスケープが新しいエスケープ値によって表され、レガシプレフィックスは「ペイロード」バイトの一部として完全に圧縮され、レガシプレフィックスは将来の拡張のために再利用され、利用可能であり、第2のエスケープコードは、利用可能な将来のマップまたは特徴空間とともに「マップ」フィールドに圧縮され、新しい特徴(例えば、増大されたベクトル長および追加のソースレジスタ指定子)が追加される。
【数1】
【0096】
一実施形態による命令が、フィールド391および392のうちの1または複数によってエンコードされてよい。1命令につき最大4つのオペランド位置が、ソースオペランド識別子374および375との組み合わせ、並びにオプションのスケールインデックスベース(SIB)識別子393と、オプションの変位識別子394と、オプションの即値バイト395との組み合わせによるフィールド391によって識別されてよい。一実施形態について、32ビット若しくは64ビットのソースオペランドおよびデスティネーションオペランド、並びに/または128ビット若しくは256ビットのSIMDレジスタオペランドまたはメモリオペランドを識別すべく、VEXプレフィックスバイト391が使用されてよい。一実施形態について、オペコードフォーマット397によって提供される機能は、オペコードフォーマット370と冗長的であってよい一方、他の実施形態においては、それらは異なる。オペコードフォーマット370および397は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのアドレス指定が、MODフィールド373によって部分的に並びにオプションの(SIB)識別子393と、オプションの変位識別子394と、オプションの即値バイト395とによって指定されることを可能にする。
【0097】
次に
図3Hを参照すると、別の実施形態による、SIMD SM3暗号化ハッシュ機能を提供するための別の代替的な演算エンコーディング(オペコード)フォーマット398の図である。オペコードフォーマット398は、オペコードフォーマット370および397に対応し、最も一般的に使用される他のレガシの命令プレフィックスバイトおよびエスケープコードに代わり、かつ、追加の機能を提供するためのオプションのEVEXプレフィックスバイト396(一実施形態では、16進数の「62」から開始)を含む。 一実施形態による命令が、フィールド396および392のうちの1または複数によってエンコードされてよい。1命令につき最大4つのオペランド位置およびマスクが、ソースオペランド識別子374と375との組み合わせ、およびオプションのスケールインデックスベース(SIB)識別子393と、オプションの変位識別子394と、オプションの即値バイト395との組み合わせによるフィールド396によって識別されてよい。一実施形態について、32ビット若しくは64ビットのソースオペランドおよびデスティネーションオペランド、並びに/または128ビット、256ビット若しくは512ビットのSIMDレジスタオペランドまたはメモリオペランドを識別すべく、EVEXプレフィックスバイト396が使用されてよい。一実施形態について、オペコードフォーマット398によって提供される機能は、オペコードフォーマット370または397と冗長的であってよい一方、他の実施形態においては、それらは異なる。オペコードフォーマット398は、レジスタ対レジスタ、メモリ対レジスタ、メモリによるレジスタ、レジスタによるレジスタ、即値によるレジスタ、レジスタ対メモリのマスクを用いるアドレス指定が、MODフィールド373によって部分的に並びにオプションの(SIB)識別子393と、オプションの変位識別子394と、オプションの即値バイト395とによって指定されることを可能にする。少なくとも1つの命令セットの一般的なフォーマット(フォーマット360および/またはフォーマット370に概して対応する)は一般的に、以下のように示される。
evexl RXBmmmmm WvvvLpp evex4 opcode modrm [sib] [disp] [imm]
【0098】
一実施形態について、EVEXフォーマット398によりエンコードされた命令は、追加の新しい機能と共にSIMD SM3暗号化ハッシュ機能を提供するために使用され得る追加の「ペイロード」ビットを有してよい。追加の新しい機能としては、例えば、ユーザ構成可能マスクレジスタ、または追加のオペランド、または128ビット、256ビット若しくは512ビットのベクトルレジスタまたはそれより多いビットのレジスタからの選択等が含まれ、選択はこれらのレジスタからなされる。
【0099】
例えば、暗黙的なマスクを持つSIMD SM3暗号化ハッシュ機能を提供するためにVEXフォーマット397が使用されてよい場合、明示的なユーザ構成可能マスクを持つSIMD SM3暗号化ハッシュ機能を提供するためにEVEXフォーマット398が使用されてよい。また、128ビットまたは256ビットのベクトルレジスタにSIMD SM3暗号化ハッシュ機能を提供するためにVEXフォーマット397が使用されてよい場合、128ビット、256ビット、512ビットまたはそれより大きい(またはより小さい)ベクトルレジスタにSIMD SM3暗号化ハッシュ機能を提供するために、EVEXフォーマット398が使用されてよい。
【0100】
SIMD SM3暗号化ハッシュ機能を提供するための例示的命令が、以下の例によって示される。
【表1】
【0101】
SIMD SM3暗号化ハッシュ命令は上の例の通り、SIMD SM3暗号化ハッシュ機能を複数のアプリケーションに提供するために使用できることを理解されたい。そのようなアプリケーションとしては、財務トランザクション、電子商取引、電子メール、ソフトウェア配布、データストレージ、乱数生成等のためのデータ整合性、デジタル署名、本人確認、メッセージコンテンツ認証およびメッセージ元認証を保証するための暗号化プロトコルおよびインターネット通信が挙げられる。
【0102】
ハッシュラウンドの予め指定された数の反復を行うSIMD SM3暗号化ハッシュ命令を提供することによって、特定のハッシュアルゴリズム実装によるメッセージ「チャンク」の処理および予め回転されたラウンド定数(例えば、T
j<<<j)の準備等の他のSIMD処理およびスカラ処理と同時に、プロセッサパイプライン内でハッシュアルゴリズムのSIMD実行を可能にし得ることも理解されたい。つまり、ハッシュラウンドの単一の反復が3サイクル(例えば、1ラウンドにつき3サイクル)のパイプラインレイテンシを有し得る場合、結果がパイプライン経由で戻されることをバイパスすることによって、2回の反復が4サイクル(例えば、1ラウンドにつき2サイクル)のみのレイテンシを有してよく、4回の反復が6サイクル(例えば、1ラウンドにつき1.5サイクル)のみのレイテンシを有してよい。4または6サイクルのそのパイプラインレイテンシ中、他の有用な処理が、ハッシュラウンドスライスと並列にまたは同時に実行されてよい。故に、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数(例えば、1スライスごとに2、4または8回の反復)を有する、SIMDセキュアハッシュアルゴリズムラウンドスライスのための命令を提供することによって、スーパースカラ実行パイプライン、および/またはアウトオブオーダプロセッサパイプライン内の他の命令の同時実行を許容し、それによって処理スループットを大きく改善し、汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できるようになる。
【0103】
このような実施形態は、SIMD SM3メッセージ拡張のための命令をデコードするためのデコーダを有するプロセッサを備え、命令は第1のソースデータオペランドセットおよび第2のソースデータオペランドセット並びに拡張範囲を指定する。プロセッサ実行ユニットは命令に応答して、第1のソースデータオペランドセットおよび第2のソースデータオペランドセットからSM3メッセージ拡張の数を実行し、SM3メッセージ拡張の数は指定された拡張範囲によって判断され、その結果をSIMDデスティネーションレジスタに格納する。いくつかの実施形態はまた、中間ハッシュ値入力、ソースデータセット、およびラウンド定数セット(例えば、1または複数の予め回転された定数T
j<<<j)から、ハッシュアルゴリズムのSIMD SM3ハッシュラウンドスライス部分のための命令を実行する。プロセッサ実行ユニットは、複数のSM3ハッシュラウンド反復から成るセットをソースデータセットに実行して、中間ハッシュ値入力およびラウンド定数セットを適用し、新しいハッシュ値結果をSIMDデスティネーションレジスタに格納する。
【0104】
SM3暗号化ハッシュ機能を提供するためのSIMD命令および処理ロジックのいくつかの実施形態について、SM3メッセージ拡張およびSM3暗号化ハッシュラウンドの両方は、現在のマイクロプロセッサの標準的な実行パイプラインの中で、複数の反復のスライスにおいて同時におよび/または並列に実行されてよい。SM3メッセージ拡張のスライスおよび/またはSM3暗号化ハッシュラウンドのスライスの実行に関連するレイテンシによる他の同時インフライト命令に対し、十分なカバーを提供すべく、1スライスごとの反復数は好都合に選択されてよいことを理解されたい。故に、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数(例えば、1スライスごとに2、4または8回の反復)を有するSIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令の実行を提供することによって、スーパースカラ実行パイプラインおよび/またはアウトオブオーダプロセッサパイプライン内のこのような他の要求される命令(例えば、SM3メッセージ拡張命令)の同時実行を許容し、それによって多数のアプリケーションの処理スループットを大きく改善し、汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できるようになることも理解されたい。
【0105】
図4Aは、本発明の少なくとも一実施形態に従う、インオーダパイプラインおよびレジスタリネーミングステージ、アウトオブオーダ発行/実行パイプラインを示すブロック図である。
図4Bは、本発明の少なくとも一実施形態による、インオーダアーキテクチャコアおよびレジスタリネーミングロジック、プロセッサ内に含まれるアウトオブオーダ発行/実行ロジックを示すブロック図である。
図4A中の実線ボックスはインオーダパイプラインを示す一方、破線ボックスはレジスタリネーミング、アウトオブオーダ発行/実行パイプラインを示す。同様に、
図4B中の実線ボックスはインオーダアーキテクチャロジックを示す一方、破線ボックスはレジスタリネーミングロジックおよびアウトオブオーダ発行/実行ロジックを示す。
【0106】
図4A中、プロセッサパイプライン400はフェッチステージ402、長さデコードステージ404、デコードステージ406、割り当てステージ408、リネーミングステージ410、スケジューリング(ディスパッチまたは発行としても知られる)ステージ412、レジスタ読み取り/メモリ読み取りステージ414、実行ステージ416、ライトバック/メモリ書き込みステージ418、例外処理ステージ422、およびコミットステージ424を含む。
【0107】
図4B中、矢印は2または2より多いユニット間の連結を示し、矢印の方向はそれらのユニット間のデータフロー方向を示す。
図4Bは、実行エンジンユニット450に連結されたフロントエンドユニット430を含むプロセッサコア490を示し、これら両方はメモリユニット470に連結される。
【0108】
コア490は縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、またはハイブリッド若しくは代替的なコアタイプであってよい。さらなる別のオプションとして、コア490は、例えば、ネットワークコアまたは通信コア、圧縮エンジンコア、グラフィックコア等の特定用途のコアであってよい。
【0109】
フロントエンドユニット430は、命令キャッシュユニット434に連結された分岐予測ユニット432を含み、命令キャッシュユニット434は、命令変換ルックアサイドバッファ(TLB)436に連結され、TLB436は命令フェッチユニット438に連結され、命令フェッチユニット438はデコードユニット440に連結される。デコードユニットまたはデコーダは命令をデコードしてよく、1または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよく、これらは元の命令からデコードされ、あるいは元の命令を反映し、あるいは元の命令から導かれる。デコーダは、様々な異なるメカニズムを使用して実装されてよい。好適なメカニズムの例としては特に限定されないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ(PLA)、マイクロコードリードオンリメモリ(ROM)等が含まれる。命令キャッシュユニット434はさらにメモリユニット470内のレベル2(L2)キャッシュユニット476に連結される。デコードユニット440は、実行エンジンユニット450内のリネーム/アロケータユニット452に連結される。
【0110】
実行エンジンユニット450は、リタイアメントユニット454に連結されたリネーム/アロケータユニット452および1または複数のスケジューラユニット456のセットを含む。スケジューラユニット456は、予約ステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表わす。スケジューラユニット456は物理レジスタファイルユニット458に連結される。複数の物理レジスタファイルユニット458の各々は1または複数の物理レジスタファイルを表わしており、それぞれ異なる物理レジスタファイルは、スカラ整数、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点等、ステータス(例えば、実行されるべき次の命令のアドレスである命令ポインタ)等の1または複数の異なるデータタイプを格納する。物理レジスタファイルユニット458にリタイアメントユニット454を重複させ、レジスタリネーミングおよびアウトオブオーダ実行を実装可能な様々な方法を示してよい(例えば、リオーダバッファおよびリタイアメントレジスタファイルを使用して、将来のファイル、履歴バッファおよびタイアメントレジスタファイルを使用して、レジスタマップおよびレジスタプールを使用して等)。概して、アーキテクチャレジスタは、プロセッサの外部から、またはプログラマの視点から可視である。レジスタは、任意の既知の特定のタイプの回路に限定されない。様々な異なるタイプのレジスタが、それらが本明細書に記載のデータを格納し、提供可能な限り、好適である。好適なレジスタの例としては特に限定されないが、専用物理レジスタ、レジスタリネーミングを使用して動的に割り当てられた物理レジスタ、専用物理レジスタおよび動的に割り当てられた物理レジスタの組み合わせ等が含まれる。リタイアメントユニット454および物理レジスタファイルユニット458は、実行クラスタ460に連結される。実行クラスタ460は、1または複数の実行ユニット462のセット、1または複数のメモリアクセスユニット464のセットを含む。実行ユニット462は、様々な演算(例えば、シフト、加算、減算、乗算)を様々なタイプのデータ(例えば、スカラ浮動小数点、パックされた整数、パックされた浮動小数点、ベクトル整数、ベクトル浮動小数点)に行ってよい。いくつかの実施形態は、特定の関数または関数セットに専用の複数の実行ユニットを含んでよい一方、他の実施形態は、1つのみの実行ユニットまたは、それらすべてが全関数を実行する複数の実行ユニットを含んでよい。スケジューラユニット456、物理レジスタファイルユニット458、および実行クラスタ460が可能性として複数形で図示されているのは、特定の実施形態は、特定タイプのデータ/演算のために別個のパイプライン(例えば、スカラ整数のパイプライン、スカラ浮動小数点/パックされた整数/パックされた浮動小数点/ベクトル整数/ベクトル浮動小数点のパイプラインおよび/またはメモリアクセスパイプライン。これらの各々は独自のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する。別個のメモリアクセスパイプラインの場合、このパイプラインの実行クラスタのみがメモリアクセスユニット464を有する特定の実施形態が実装される)を形成するからである。別個のパイプラインが使用される場合、これらのパイプラインのうちの1または複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
【0111】
メモリアクセスユニット464のセットがメモリユニット470に連結され、当該メモリユニット470はレベル2(L2)キャッシュユニット476に連結されたデータキャッシュユニット474に連結されたデータTLBユニット472を含む。一例示的な実施形態において、メモリアクセスユニット464は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、これらの各々はメモリユニット470内のデータTLBユニット472に連結される。L2キャッシュユニット476は、1または複数の他のレベルのキャッシュに連結され、最終的にメインメモリに連結される。
【0112】
例を挙げると、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、パイプライン400を以下のように実装してよい。すなわち、(1)命令フェッチ438がフェッチステージ402および長さデコードステージ404を実行する。(2)デコードユニット440がデコードステージ406を実行する。(3)リネーム/アロケータユニット452が割り当てステージ408およびリネーミングステージ410を実行する。(4)スケジューラユニット456がスケジュールステージ412を実行する。(5)物理レジスタファイルユニット458およびメモリユニット470がレジスタ読み取り/メモリ読み取りステージ414を実行する。実行クラスタ460が実行ステージ416を実行する。(6)メモリユニット470および物理レジスタファイルユニット458がライトバック/メモリ書き込みステージ418を実行する。(7)様々なユニットが例外処理ステージ422の実行に使用されてよい。(8)リタイアメントユニット454および物理レジスタファイルユニット458がコミットステージ424を実行する。
【0113】
コア490は、1または複数の命令セット(例えば、x86命令セット(より新しいバージョンに追加されたいくつかの拡張機能を持つ)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEON等のオプションの追加拡張機能を持つ)をサポートしてよい。
【0114】
コアは、マルチスレッディング(演算またはスレッドの2または2より多い並列セットの実行)をサポートし、様々な方法でマルチスレッディングを実行してよいことを理解されたい。そのようなものとしては、時分割マルチスレッディング、同時マルチスレッディング(この場合、単一の物理コアは、物理コアが同時にマルチスレッディングを行う複数のスレッドの各々に対する論理コアを提供する)、またはこれらの組み合わせ(例えば、時分割フェッチおよび時分割デコード並びにインテル(登録商標)ハイパースレッド技術等のそれら以降の同時マルチスレッディング)が含まれる。
【0115】
レジスタリネーミングはアウトオブオーダ実行の文脈で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて使用されてよいことを理解されたい。プロセッサの示された実施形態は、別個の命令キャッシュユニット434/データキャッシュユニット474および共有L2キャッシュユニット476も含む一方、代替の実施形態は、例えば、レベル1(L1)内部キャッシュまたは複数のレベルの内部キャッシュ等、命令およびデータの両方のための単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュおよび外部キャッシュの組み合わせを含んでよく、外部キャッシュはコアおよび/またはプロセッサの外部に存在する。代替的に、すべてのキャッシュは、コアおよび/またはプロセッサの外部に存在してよい。
【0116】
図5は、本発明の実施形態による統合メモリコントローラおよびグラフィックを持つシングルコアプロセッサおよびマルチコアプロセッサ500のブロック図である。
図5の実線のボックスは、シングルコア502A、システムエージェント510、1または複数のバスコントローラユニットのセット516を持つプロセッサ500を示す一方で、オプションの追加である破線のボックスは複数のコア502A〜N、システムエージェントユニット510内の1または複数の統合メモリコントローラユニットのセット514、および統合グラフィックロジック508を持つ代替のプロセッサ500示す。
【0117】
メモリ階層は、複数のコア内の1または複数のレベルのキャッシュ、共有キャッシュユニットのセットまたは1または複数の共有キャッシュユニット506、および統合メモリコントローラユニット514のセットに連結された外部メモリ(不図示)を含む。共有キャッシュユニットのセット506はレベル2(L2)、レベル3(L3)、レベル4(L4)等の1または複数の中レベルのキャッシュ、または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせを含んでよい。一実施形態では、リングベースの相互接続ユニット512が、統合グラフィックロジック508、共有キャッシュユニット506のセット、およびシステムエージェントユニット510を相互接続する一方で、代替的な実施形態は、このようなユニットを相互接続するための任意の数の周知技術を使用してよい。
【0118】
いくつかの実施形態において、コア502A〜Nのうちの1または複数は、マルチスレッディングが可能である。システムエージェント510は、コア502A〜Nを調整し、コア502A〜Nを操作するためのそれらのコンポーネントを含む。システムエージェントユニット510は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含んでよい。PCUは、コア502A〜Nの電力状態を調整するために必要なロジックおよびコンポーネント並びに統合グラフィックロジック508であってよく、または当該ロジックおよび当該コンポーネント並びに統合グラフィックロジック508を含んでよい。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
【0119】
コア502A〜Nはアーキテクチャおよび/または命令セットの観点から、同種または異種であってよい。例えば、コア502A〜Nのうちのいくつかは、インオーダであってよい一方、他のものはアウトオブオーダである。別の例として、コア502A〜Nのうちの2または2より多いものは同一の命令セットを実行可能であってよい一方、他のものは、その命令セットのサブセットのみまたは異なる命令セットを実行可能であってよい。
【0120】
プロセッサは、カリフォルニア州サンタクララのインテルコーポレーションから入手可能なCore(商標)i3、i5、i7、2DuoおよびQuad、Xeon(商標)、Itanium(商標)、XScale(商標)またはStrongARM(商標)プロセッサ等の汎用プロセッサであってよい。代替的に、プロセッサは、ARM Holdings社、MIPS等の別の会社のものであってもよい。プロセッサは、例えば、ネットワークプロセッサまたは通信プロセッサ、圧縮エンジンプロセッサ、グラフィックプロセッサ、コプロセッサ、埋め込みプロセッサ等の特定用途向けプロセッサであってよい。プロセッサは、1または複数のチップ上に実装されてよい。プロセッサ500は、例えば、BiCMOS、CMOS、またはNMOS等の多数のプロセス技術のうちの任意のものを使用する1または複数の基板の一部であってよく、および/または当該基板上に実装されてよい。
【0121】
図6〜8は、プロセッサ500を含めるために好適な例示的なシステムである一方、
図9はコア502のうちの1または複数を含んでよい例示的なシステムオンチップ(SoC)である。ラップトップ、デスクトップ、ハンドヘルドPC、携帯情報端末、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスのための当該技術分野で既知の他のシステム設計および構成も好適である。一般的に、本明細書に開示のプロセッサおよび/または他の実行ロジックを組み込み可能な非常に多種多様なシステムまたは電子デバイスが概して好適である。
【0122】
ここで
図6を参照すると、本発明の一実施形態によるシステム600のブロック図が示されている。システム600は、1または複数のプロセッサ610、615を含んでよく、当該1または複数のプロセッサ610、615は、グラフィックメモリコントローラハブ(GMCH)620に連結される。
図6中、追加のプロセッサ615のオプションとしての性質は、破線で示されている。
【0123】
各プロセッサ610、615はプロセッサ500の何らかのバージョンであってよい。しかしながら、統合グラフィックロジックおよび統合メモリ制御ユニットは、プロセッサ610、615内に存在しない可能性があることに留意されたい。
図6は、GMCH620はメモリ640に連結されてよく、メモリ640は、例えば、ダイナミックランダムアクセスメモリ(DRAM)であってよいことを示す。少なくとも一実施形態で、DRAMは不揮発性キャッシュに関連付けられてよい。
【0124】
GMCH620は、チップセットまたはチップセットの一部であってよい。GMCH620はプロセッサ610、615と通信し、プロセッサ610、615とメモリ640との間のやり取りを制御してよい。また、GMCH620は、プロセッサ610、615と、システム600の他の要素との間の加速バスインタフェースとして動作してもよい。少なくとも一実施形態では、GMCH620は、プロセッサ610、615とフロントサイドバス(FSB)695等のマルチドロップバスを介して通信する。
【0125】
さらに、GMCH620はディスプレイ645(フラットパネルディスプレイ等)に連結される。GMCH620は統合グラフィックアクセラレータを含んでよい。さらにGMCH620は、入/出力(I/O)コントローラハブ(ICH)650に連結され、当該入/出力(I/O)コントローラハブ(ICH)650は、様々な周辺デバイスをシステム600に連結するために使用されてよい。
図6の実施形態の例のために、外部グラフィックデバイス660が示されており、当該外部グラフィックデバイス660は別の周辺デバイス670と共にICH650に連結された別個のグラフィックデバイスであってよい。
【0126】
代替的に、追加のまたは異なるプロセッサがシステム600内に存在してもよい。例えば、追加のプロセッサ615は、プロセッサ610と同一である追加のプロセッサ、プロセッサ610と異種または非対称である追加のプロセッサ、アクセラレータ(例えば、グラフィックアクセラレータまたはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサを含んでよい。物理リソース610と615の間には、アーキテクチャ、マイクロアーキテクチャ、熱、電力消費の特性等を含む利点の指標範囲から見て様々な差異があってよい。これらの差異は、プロセッサ610、615間の非対称性および異種性として差異自体が効果的に表われてよい。少なくとも一実施形態について、様々なプロセッサ610、615が同一のダイパッケージ内に存在してよい。
【0127】
ここで
図7を参照すると、本発明の実施形態による第2のシステム700のブロック図が示されている。
図7に図示の通り、マルチプロセッサシステム700は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続750を介して連結された第1のプロセッサ770および第2のプロセッサ780を含む。プロセッサ770および780の各々は、プロセッサ610、615のうちの1または複数と同様、プロセッサ500の何らかのバージョンであってよい。
【0128】
2つのプロセッサ770、780のみが図示されるものの、本発明の範囲はそのようには限定されないことを理解されたい。他の実施形態においては、1または複数の追加のプロセッサが特定のプロセッサ内に存在してよい。
【0129】
プロセッサ770および780は、統合メモリコントローラユニット772および782をそれぞれ含むものとして図示されている。プロセッサ770はまた、そのバスコントローラユニットの一部として、ポイントツーポイント(P−P)インタフェース776および778を含み、同様に第2のプロセッサ780はP−Pインタフェース786および788を含む。プロセッサ770、780は、P−Pインタフェース回路778、788を使用してポイントツーポイント(P−P)インタフェース750を介して情報を交換してよい。
図7に図示の通り、IMC 772および782は当該プロセッサをそれぞれのメモリ、すなわちメモリ732とメモリ734とに連結し、当該メモリは、それぞれのプロセッサに局所的に取り付けられたメインメモリの一部であってよい。
【0130】
プロセッサ770、780はそれぞれ、ポイントツーポイントインタフェース回路776、794、786、798を使用して、個々のP−Pインタフェース752、754を介してチップセット790と情報を交換してよい。チップセット790はまた、高性能グラフィックスインタフェース739を介して高性能グラフィックス回路738と情報を交換してもよい。
【0131】
共有キャッシュ(不図示)がいずれかのプロセッサの内部または両方のプロセッサの外部に含まれてよく、共有キャッシュはさらに当該プロセッサとP−P相互接続を介して接続されていてよく、その結果、プロセッサが低電力モードの場合、いずれかまたは両方のプロセッサのローカルキャッシュ情報が共有キャッシュ内に格納され得るようになる。
【0132】
チップセット790はインタフェース796を介して第1のバス716に連結されてよい。一実施形態において、第1のバス716はペリフェラルコンポーネントインターコネクト(PCI)バスであってよく、またはPCIエクスプレスバス若しくは別の第3世代I/O相互接続バス等のバスであってよいが、本発明の範囲はそのようには限定されない。
【0133】
図7に図示の通り、様々なI/Oデバイス714が、バスブリッジ718と共に第1のバス716に連結されてよく、当該バスブリッジ718は第1のバス716を第2のバス720に連結する。一実施形態において、第2のバス720はローピンカウント(LPC)バスであってよい。一実施形態において、様々なデバイスが第2のバス720に連結されてよく、これらとしては、例えば、キーボードおよび/またはマウス722、通信デバイス727、並びに命令/コードおよびデータ730を含み得るディスクドライブ若しくは他の大容量ストレージデバイス等のストレージユニット728が含まれる。さらに、オーディオI/O724が第2のバス720に連結されてよい。他のアーキテクチャも可能であることに留意されたい。例えば、
図7のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバスまたは他のこのようなアーキテクチャを実装してよい。
【0134】
ここで
図8を参照すると、本発明の一実施形態による第3のシステム800のブロック図が示されている。
図7および
図8中で同様の要素は同様の参照符号が付されており、
図8の他の態様を不明瞭にするのを回避すべく、
図7の特定の態様は
図8で省略されている。
【0135】
図8は、プロセッサ870、880が統合メモリおよびI/O制御ロジック(CL)872、882をそれぞれ含んでよいことを示す。少なくとも一実施形態について、CL 872、882は、
図5および
図7に関し上記したもののような統合メモリコントローラユニットを含んでよい。また、CL872、882はI/O制御ロジックも含んでよい。
図8は、メモリ832、834がCL872、882に連結されるだけでなく、I/Oデバイス814が制御ロジック872、882に連結されることも示している。レガシI/Oデバイス815がチップセット890に連結される。
【0136】
ここで
図9を参照すると、本発明の一実施形態によるSoC900のブロック図が示されている。
図5中と同様の要素は同様の参照番号が付されている。また、破線は、より高度なSoC上でのオプションの機能を表わす。
図9中、相互接続ユニット902は、アプリケーションプロセッサ910、システムエージェントユニット510、バスコントローラユニット516、統合メモリコントローラユニット514、1または複数のメディアプロセッサ920のセット、スタティックランダムアクセスメモリ(SRAM)ユニット930、ダイレクトメモリアクセス(DMA)ユニット932、および1または複数の外部ディスプレイに連結するためのディスプレイユニット940に連結される。ここで、当該アプリケーションプロセッサ910は1または複数のコア502A〜Nのセットおよび共有キャッシュユニット506を含む。当該1または複数のメディアプロセッサ920のセットは統合グラフィックロジック508、静止および/またはビデオカメラ機能を提供するためのイメージプロセッサ924、ハードウェアオーディオアクセラレーションを提供するためのオーディオプロセッサ926、およびビデオエンコード/デコードアクセラレーションを提供するためのビデオプロセッサ928を含んでよい。
【0137】
図10は、中央処理装置(CPU)およびグラフィック処理ユニット(GPU)を含むプロセッサを示し、これらは一実施形態による少なくとも1つの命令を実行してよい。一実施形態において、少なくとも一実施形態による演算を実行するための命令は、CPUによって実行され得る。別の実施形態においては、命令はGPUによって実行され得る。さらなる別の実施形態においては、命令はGPUおよびCPUによって実行される演算の組み合わせを通して実行されてよい。例えば、一実施形態においては、一実施形態による命令は、GPUでの実行のために受信およびデコードされてよい。しかしながら、デコードされた命令内の1または複数の演算はCPUによって実行されてよく、命令の最終的なリタイアのために結果がGPUに戻されてよい。逆に、いくつかの実施形態において、CPUがプライマリプロセッサとして、GPUがコプロセッサとして動作してよい。
【0138】
いくつかの実施形態において、高度に並列化されたスループットの高いプロセッサから利益享受する命令はGPUによって実行されてよい一方で、深くパイプライン化されたアーキテクチャから利益享受するプロセッサの性能から利益享受する命令はCPUによって実行されてよい。例えば、グラフィック、科学アプリケーション、財務アプリケーションおよび他の並列ワークロードは、GPUの性能から利益享受してよく、そのように実行可能であるのに対して、オペレーティングシステムのカーネルまたはアプリケーションコード等のよりシーケンシャルなアプリケーションは、CPUにより好適であってよい。
【0139】
図10中、プロセッサ1000は、CPU1005、GPU1010、イメージプロセッサ1015、ビデオプロセッサ1020、USBコントローラ1025、UARTコントローラ1030、SPI/SDIOコントローラ1035、ディスプレイデバイス1040、高解像度マルチメディアインタフェース(HDMI(登録商標))コントローラ1045、MIPIコントローラ1050、フラッシュメモリコントローラ1055、デュアルデータレート(DDR)コントローラ1060、セキュリティエンジン1065、およびI
2S/I
2C(Integrated Interchip Sound/Inter−Integrated Circuit)インタフェース1070を含む。
図10中のプロセッサ内に、より多くのCPUまたはGPUおよび他の周辺インタフェースコントローラを含む、他のロジックおよび回路が含まれてもよい。
【0140】
少なくとも一実施形態に係る1または複数の態様は、機械可読媒体上に格納された、プロセッサ内の様々なロジックを表わす典型的データによって実装されてよく、当該データは機械による読み取り時に、機械に対し本明細書に記載の技術を実行するためのロジックを生成させる。このような「IPコア」として知られる典型的なものが有形の機械可読媒体(「テープ」)上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。例えば、ARM Holdingsによって開発されたCortex(商標)プロセッサファミリおよび中国科学院のコンピューティング技術協会(ICT)により開発された龍芯(Loongson)IPコア等のIPコアが、テキサスインスツルメンツ、クアルコム、アップルまたはサムスン等の様々な顧客またはライセンシにライセンスまたは販売されてよく、またこれらの顧客またはライセンシによって生産されるプロセッサに実装されてよい。
【0141】
図11は、一実施形態によるIPコアの開発を示すブロック図を示す。ストレージ1130は、シミュレーションソフトウェア1120および/またはハードウェア若しくはソフトウェアモデル1110を含む。一実施形態において、IPコア設計を表わすデータがメモリ1140(例えばハードディスク)、有線接続(例えばインターネット)1150または無線接続1160を介してストレージ1130に提供されてよい。次に、シミュレーションツールおよびモデルによって生成されるIPコア情報が製造施設に送信されてよく、製造施設において、少なくとも一実施形態による少なくとも1つの命令を実行するためのIPコア情報がサードパーティによって製造されてよい。
【0142】
いくつかの実施形態において、1または複数の命令は第1のタイプまたはアーキテクチャ(例えばx86)に対応してよく、1または複数の命令は異なるタイプまたはアーキテクチャ(例えばARM)のプロセッサで変換またはエミュレートされてよい。従って、一実施形態による命令は、ARM、x86、MIPS、GPUを含む任意のプロセッサ若しくはプロセッサタイプまたは他のプロセッサタイプ若しくはアーキテクチャで実行されてよい。
【0143】
図12は、一実施形態による第1のタイプの命令が異なるタイプのプロセッサによってエミュレートされる方法を示す。
図12中、プログラム1205は、一実施形態による命令と同一または実質的に同一の機能を実行してよいいくつかの命令を含む。しかしながら、プログラム1205の命令はプロセッサ1215と異なるまたはプロセッサ1215と互換性のないタイプおよび/またはフォーマットであってよく、つまりプログラム1205内の命令タイプはプロセッサ1215によってネイティブに実行可能でなくてよいことを意味する。しかしながら、エミュレーションロジック1210の補助を用いて、プログラム1205の命令は、プロセッサ1215によってネイティブに実行可能な命令に変換される。一実施形態において、エミュレーションロジックはハードウェアで具現化される。別の実施形態においては、エミュレーションロジックは、プログラム1205内の命令タイプを、プロセッサ1215でネイティブに実行可能なタイプに変換するソフトウェアを含む有形の機械可読媒体で具現化される。他の実施形態においては、エミュレーションロジックは、固定機能のハードウェアまたはプログラム可能なハードウェアと、有形の機械可読媒体上に格納されたプログラムとの組み合わせである。一実施形態において、プロセッサはエミュレーションロジックを含む一方で、他の実施形態においては、エミュレーションロジックはプロセッサの外部に存在し、サードパーティによって供給される。一実施形態において、プロセッサは、プロセッサ内に含まれる、またはプロセッサに関連付けられたマイクロコードまたはファームウェアを実行することにより、ソフトウェアを有する有形の機械可読媒体に具現化されたエミュレーションロジックをロード可能である。
【0144】
図13は、本発明の実施形態による、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令コンバータの使用を対比するブロック図である。図示された実施形態において、命令コンバータはソフトウェア命令コンバータであるものの、代替的に、命令コンバータはソフトウェア、ファームウェア、ハードウェアまたはこれらの様々な組み合わせで実装されてもよい。
図13は、高水準言語1302のプログラムが、x86バイナリコード1306を生成するx86コンパイラ1304を使用してコンパイルされ得ることを示しており、当該x86バイナリコード1306は、少なくとも1つのx86命令セットコア1316を持つプロセッサによってネイティブに実行されてよい。少なくとも1つのx86命令セットコアを持つプロセッサ1316は、少なくとも1つのx86命令セットコアを持つインテルのプロセッサと実質的に同一の諸機能を実行できる任意のプロセッサを表わしており、これは次のように行う。すなわち、少なくとも1つのx86命令セットコアを持つインテルのプロセッサと実質的に同一の結果を得るべく、(1)インテルx86命令セットコアの命令セットの大部分、または(2)少なくとも1つのx86命令セットコアを持つインテルのプロセッサ上での実行を目的とするアプリケーションまたは他のソフトウェアのオブジェクトコードバージョン、を互換性のある状態で実行またはそれ以外の方法で処理することによってである。x86コンパイラ1304は、x86バイナリコード1306(例えばオブジェクトコード)を生成するよう動作可能なコンパイラを表わし、当該x86バイナリコード1306は、追加のリンク処理と共に、または追加のリンク処理なく、少なくとも1つのx86命令セットコアを持つプロセッサ1316上で実行可能である。同様に、
図13は、高水準言語1302のプログラムが、代替の命令セットバイナリコード1310を生成する代替の命令セットコンパイラ1308を使用してコンパイルされ得ることを示しており、当該代替の命令セットバイナリコード1310は、少なくとも1つのx86命令セットコアを持たないプロセッサ1314(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/または、カリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行するコアを持つプロセッサ)によってネイティブに実行されてよい。命令コンバータ1312は、x86バイナリコード1306を、x86命令セットコアを持たないプロセッサ1314によってネイティブに実行可能なコードに変換されるのに使用される。この変換されたコードは、これが可能な命令コンバータの作成は難しいため、代替の命令セットバイナリコード1310と同じである可能性は低いが、しかしながら、変換されたコードは、一般的な演算を達成し、代替的な命令セットに属する複数の命令で構成されるであろう。故に、命令コンバータ1312はエミュレーション、シミュレーションまたは任意の他の処理を介して、x86命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがx86バイナリコード1306を実行できるようにするソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表わす。
【0145】
図14Aは、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のための装置1401の一実施形態の図を示す。装置1401の実施形態は、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のためのパイプライン400(例えば、実行ステージ416)の一部またはコア490(例えば、実行ユニット462)の一部であってよい。装置1401の実施形態は、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数(例えば、2または4回の反復、これによってスーパースカラ実行パイプライン内の他の命令の同時実行を許容できる)を有するSIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令をデコードする、デコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)に連結されてよく、当該命令は中間ハッシュ値入力オペランド1410、ソースデータオペランド1415セット、およびハッシュアルゴリズムのラウンドスライス部分(例えば、オプションの即値オペランド1418内または命令ニーモニックおよび/または演算コード内で、初期ラウンドとしてj、および/または反復数としてi)を指定する。命令の実施形態はまた、ラウンド定数オペランドセット(例えば、オプションの即値オペランド1418内でT
j...T
j+i−1、ここで初期ラウンドjおよび反復数i)を指定してもよい。1または複数の実行ユニット(例えば、実行装置1405)はデコードされた命令に応答して、複数のラウンド反復から成るSM3ハッシュラウンドスライスセットをソースデータオペランドセット1415に実行して、中間ハッシュ値入力オペランド1410およびラウンド定数オペランドセットを適用し、第1の命令の結果1480をSIMDデスティネーションレジスタに格納する。
【0146】
ハッシュラウンドの予め指定された数の反復を行うSIMD SM3暗号化ハッシュ命令を提供することによって、特定のハッシュアルゴリズム実装によるメッセージ「チャンク」の前処理および予め回転されたラウンド定数(例えば、T
j<<<j)の準備等の他のSIMD処理およびスカラ処理と同時に、プロセッサパイプライン内でハッシュアルゴリズムのSIMD実行を可能にし得ることを理解されたい。つまり、ハッシュラウンドの単一の反復が3サイクル(例えば、1ラウンドにつき3サイクル)のパイプラインレイテンシを有し得る場合、指定数の反復を行い、および/または結果がパイプライン経由で戻されることをバイパスすることによって、2回の反復が4サイクル(例えば、1ラウンドにつき2サイクル)のみのレイテンシを有してよく、4回の反復が6サイクル(例えば、1ラウンドにつき1.5サイクル)のみのレイテンシを有してよい。4または6サイクルのそのパイプラインレイテンシ中、他の有用な処理が、ハッシュラウンドスライスと並列にまたは同時に実行されてよい。故に、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数(例えば、1スライスにつき2、4または8回等の反復)を有する、SIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令を提供することによって、スーパースカラ実行パイプライン、および/またはアウトオブオーダプロセッサパイプライン内の他の命令の同時実行を許容し、それによって処理スループットを大きく改善し、ベクトルレジスタを持つ汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できるようになる。
【0147】
例えば、装置1401の実施形態は、変動可能な複数のm個の可変サイズのデータ要素の値を格納するための変動可能な複数のm個の可変サイズのデータフィールドを含むベクトルレジスタ(例えば、物理レジスタファイルユニット458)に連結されてよい。SIMD SM3暗号化ハッシュアルゴリズムラウンドスライスを提供するための命令の実施形態は、中間ハッシュ値入力状態オペランド1410を指定し、複数のベクトルレジスタのうちの1つ、即値オペランド1418およびソースデータオペランド1415セットを指定する。装置の実施形態1401は、レジスタファイル(例えば、物理レジスタファイルユニット458)に連結された実行ユニット1405を含んでよく、実行ユニット1405はデコードされた命令に応答して、SIMD SM3暗号化ハッシュアルゴリズムラウンドスライス機能を提供し、中間ハッシュ値入力状態オペランド1410およびメッセージソースデータオペランド1415セットを受信し、複数の反復のうちの各反復に対する出力状態1480を生成する。次に、デコードされた命令の結果1480はSIMDデスティネーションレジスタ(例えば物理レジスタファイルユニット458内)に格納されてよい。
【0148】
図14Bは、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のための装置1402の代替的な実施形態の図を示す。装置1402の実施形態は、SIMD SM3暗号化ハッシュ機能を提供するための命令の実行のためのパイプライン400(例えば実行ステージ416)の一部またはコア490(例えば実行ユニット462)の一部であってよい。装置1402の実施形態は、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数(例えば、2または4回の反復、これによってスーパースカラ実行パイプライン内の他の命令の同時実行を許容できる)を有するSIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令をデコードするためのデコードステージ(例えばデコード406)またはデコーダ(例えばデコードユニット440)に連結されてよく、当該命令は中間ハッシュ値入力オペランド1410、ソースデータオペランド1415セット、ラウンド定数オペランド1412セット(例えば、初期ラウンドのための単一の予め回転されたT
j、または随意で4つの予め回転されたセットT
j...T
j+3)およびハッシュアルゴリズムのラウンドスライス部分(例えば、即値オペランド1418内の初期ラウンドjおよび/または反復数iとして)を指定する。1または複数の実行ユニット(例えば、実行装置1405)はデコードされた命令に応答して、複数のラウンド反復から成るSM3ハッシュラウンドスライスセットをソースデータオペランド1415セットに実行して、中間ハッシュ値入力オペランド1410およびラウンド定数オペランド1412セットを適用し、第1の命令の結果1480をSIMDデスティネーションレジスタ(例えば、いくつかの実施形態において、中間ハッシュ値入力オペランド1410に使用されるのと同一のSIMDレジスタ)に格納する。
【0149】
図15は、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のための装置1501の別の代替の実施形態の図を示す。装置1501の実施形態は、複数の反復(例えば、図面には1回のみの反復が示されるものの、2または4回の反復、)を有するSIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令をデコードするためのデコードステージ(例えばデコード406)またはデコーダ(例えばデコードユニット440)に連結されてよく、これにより、スーパースカラ実行パイプライン内での他の命令の同時実行を許容してよく、当該命令は中間ハッシュ値入力オペランド1510、ソースデータオペランドセット(例えば、メッセージワードW
jおよびW
j+4を含む)、ラウンド定数オペランドセット(例えば、予め回転されたT
jを含む)、およびハッシュアルゴリズムのラウンドスライス部分(例えば、随意に即値オペランド内に初期ラウンドjおよび/または反復数iのインジケータを含める)を指定する。1または複数の実行ユニット(例えば、実行装置1501を含む)はデコードされた命令に応答して、複数のラウンド反復から成るSM3ハッシュラウンドスライスセットをソースデータオペランドセット(例えば、1514および1516を含む)に実行して、中間ハッシュ値入力オペランド1510およびラウンド定数1512オペランドセットのうちの1または複数を適用し、デコードされた命令の結果1580をSIMDデスティネーションレジスタ(例えば、いくつかの実施形態において、中間ハッシュ値入力オペランド1510に使用されるのと同一のSIMDレジスタ)に格納する。
【0150】
実行装置1501に図示の通り、ブール関数FF
j1522およびGG
j1524が、中間ハッシュ値32ビットデータフィールド入力、A、B、CおよびE、F、Gをそれぞれ処理するためにハッシュアルゴリズムの指定されたラウンドスライス部分(例えば、初期ラウンドjのインジケータを含める)により選択されてよい。一実施形態により、ブール関数FF
jおよびGG
jは、jが16未満の場合、それぞれ
【数2】
として、jが15を超える場合、それぞれ
【数3】
として、選択されてよい。SM3ハッシュラウンドスライスの各反復において、ラウンド定数オペランドセットの各ラウンド定数1512 T
jは、中間ハッシュ値ベクトル1520の左回転された各データフィールドA(例えば、回転器1526を介して回転量1525分)および中間ハッシュ値ベクトル1520の第2の回転されていないデータフィールドEを用いて加算(例えば加算器1530を介して)される。SM3ハッシュラウンドスライスの各反復において、ソースデータオペランドセットの各データフィールド1514W
jは、ブール関数GG
j1524の出力、中間ハッシュ値ベクトル1520の各データフィールドH、および加算器1530の左回転された出力SS1(例えば、回転器1532を介して回転量1531分)を用いて加算(例えば、加算器1540を介して)される。SM3ハッシュラウンドスライスの各反復において、ソースデータオペランドセットの各データフィールド1514 W
jおよび1516 W
j+4がXORされ、各データフィールド1534 W'
jを生成し、左回転された各データフィールドAが加算器1530の左回転された出力SS1を用いてXORされ、各データフィールドSS2を出力する。各データフィールド1534 W'
jおよびSS2の両方は、ブール関数FF
j 1522の出力および中間ハッシュ値ベクトル1520の各データフィールドDを用いて加算(例えば、加算器1550を介して)され、予備出力状態1570の新しい各データフィールドAを生成する。中間ハッシュ値ベクトル1520の回転されていない各データフィールドAは、予備出力状態1570の新しい各データフィールドBになる。中間ハッシュ値ベクトル1520の左回転された各データフィールドB(例えば、回転器1562を介して回転量1561分)は、予備出力状態1570の新しい各データフィールドCになる。中間ハッシュ値ベクトル1520の回転されていない各データフィールドCは、予備出力状態1570の新しい各データフィールドDになる。加算器1540の出力は転置器1542 P
0を介して転置され、予備出力状態1570の新しい各データフィールドEを生成する。中間ハッシュ値ベクトル1520の回転されていない各データフィールドEは、予備出力状態1570の新しい各データフィールドFになる。中間ハッシュ値ベクトル1520の左回転された各データフィールドF(例えば、回転器1566を介して回転量1565分)は、予備出力状態1570の新しい各データフィールドGになる。中間ハッシュ値ベクトル1520の回転されていない各データフィールドGは、予備出力状態1570の新しい各データフィールドHになる。
【0151】
最終的に、SM3ハッシュラウンドスライスの各反復において、予備出力状態1570が新しい出力状態1580 V
j+1として格納される。いくつかの実施形態において、出力状態ラッチが、反復の結果として生成された出力状態1580(例えば、新規V
j+1値)を格納する。いくつかの実施形態において、ハッシュ値出力状態1580を中間ハッシュ値入力状態にバイパスすることは、SM3ハッシュラウンドスライスの複数の反復のうちの次の各反復のために、出力状態1580をバイパスする出力状態1580ラッチから入力状態1520へのバイパス(例えば、バイパスネットワーク208または210)によって行われてよい。ブール関数、転置、ラウンド定数パラメータおよびメッセージ拡張等のさらなる詳細は、world wide webのtools.ietf.org/pdf/draft-shen- sm3 -hash-01.pdfから入手可能な2014年2月14日のバージョン01の中国科学院によるIETFインターネットドラフトである「SM3ハッシュ関数」にて確認できるであろう。
【0152】
図16は、SIMD SM3暗号化ハッシュ機能を提供するための命令の実行のための装置1601の別の代替の実施形態の図を示す。装置1601の実施形態は、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のためのパイプライン400(例えば、実行ステージ416)の一部またはコア490(例えば、実行ユニット462)の一部であってよい。装置1601の実施形態は、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数(例えば、4回の反復、これによってスーパースカラ実行パイプライン内の他の命令の同時実行を許容できる)を有するSIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令をデコードするためのデコードステージ(例えばデコード406)またはデコーダ(例えばデコードユニット440)に連結されてよく、当該命令は中間ハッシュ値入力オペランド1610、ソースデータオペランド1615セット、オプションのラウンド定数オペランド1612セット(例えば、単一の予め回転された初期T
j、または随意で4つの予め回転されたセットT
j...T
j+3のセットを含む)およびハッシュアルゴリズムのラウンドスライス部分(例えば、随意で即値オペランド1418内の初期ラウンドjおよび/または反復数iとして)を指定する。SIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令に係るいくつかの実施形態は、単一の予め回転された初期定数T
jを指定し、スライスの各ラウンドにおいて、その単一の初期定数の1ビットを内部で回転してよい。SIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令に係る他の代替的な実施形態は、jの値のみを指定(例えば、即値オペランド1618内で)し、各回転された定数T
j<<<jを内部で検索または生成してよい。SIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令に係るさらなる他の代替的な実施形態は、複数の予め回転された定数をセット(例えば、4つの予め回転されたT
j...T
j+3)として指定してよい。1または複数の実行ユニット(例えば、実行装置1601)はデコードされた命令に応答して、複数のラウンド反復から成るSM3ハッシュラウンドスライスセットをソースデータオペランド1615セット(例えば、W
jおよびW
j+4の各データフィールド)に実行して、SM3ラウンド
j 1605において中間ハッシュ値入力オペランド1610およびラウンド定数オペランド1612セット(例えばT
j)のうちの1または複数を適用し、予備出力状態1681 V
j+1を生成する。さらに、デコードされた命令に応答して、第2のSM3ハッシュラウンド反復がソースデータオペランド1615セット(例えば、W
j+1およびW
j+5の各データフィールド)に実行され、SM3ラウンド
j+1 1606において、第2の中間ハッシュ値入力1681 V
j+1およびラウンド定数オペランド1612セット(例えば、T
j+1)のうちの1または複数を適用し、予備出力状態1682 V
j+2を生成し、...第4のSM3ハッシュラウンド反復がソースデータオペランド1615セット(例えば、W
j+3およびW
j+7の各データフィールド)に実行され、SM3ラウンド
j+3 1608において、第4の中間ハッシュ値入力V
j+3(不図示)およびラウンド定数オペランド1612セット(例えば、T
j+3)のうちの1または複数を適用し、命令の結果として新しい出力状態1684 V
j+4を生成し、命令の結果1684をSIMDデスティネーションレジスタ(例えば、いくつかの実施形態において、中間ハッシュ値入力オペランド1610に使用されるのと同一のSIMDレジスタ)に格納する。
【0153】
また、いくつかの実施形態は、SIMD SM3メッセージ拡張のための命令をデコードするためのデコーダを備えるプロセッサを含んでもよく、命令は第1のソースデータオペランドセットおよび第2のソースデータオペランドセット並びに拡張範囲を指定する。プロセッサ実行ユニットは命令に応答して、第1のソースデータオペランドセットおよび第2のソースデータオペランドセットから、SM3メッセージ拡張の数を実行し、SM3メッセージ拡張の数は指定された拡張範囲によって判断され、その結果をSIMDデスティネーションレジスタに格納する。SM3暗号化ハッシュ機能を提供するためのSIMD命令および処理ロジックのいくつかの実施形態について、SM3メッセージ拡張およびSM3暗号化ハッシュラウンドの両方は、現在のマイクロプロセッサの標準的な実行パイプラインの中で、複数の反復のスライスにおいて同時におよび/または並列に実行されてよい。SM3メッセージ拡張のスライスおよび/またはSM3暗号化ハッシュラウンドのスライスの実行に関連するレイテンシによる他の同時インフライト命令に対し、十分なカバーを提供すべく、1スライスごとの反復数は好都合に選択されてよいことを理解されたい。
【0154】
図17Aは、SIMD SM3暗号化ハッシュ機能を提供する別の命令の実行のための装置1701の一実施形態の図を示す。装置1701の実施形態は、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のためのパイプライン400(例えば、実行ステージ416)の一部またはコア490(例えば、実行ユニット462)の一部であってよい。装置1701の実施形態は、ハッシュアルゴリズムのメッセージ拡張の反復合計数(例えば、52回のメッセージ拡張反復未満)より少ない反復数(例えば、2または4回の反復、これによりスーパースカラ実行パイプライン内の他の命令の同時実行を許容する)を有するSIMD SM3暗号化ハッシュアルゴリズムメッセージ拡張のための命令をデコードするためのデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)に連結されてよく、当該命令は第1のソースデータオペランド1719セット(例えば、W
j−16,W
j−15,...W
j−9)および第2のソースデータオペランド1711セット(例えば、W
j−8,W
j−7,...W
j−1)並びに拡張範囲(例えば、随意で、即値オペランド1718内または命令ニーモニックおよび/または演算コード内で反復の拡張範囲数eとして)を指定する。1または複数の実行ユニット(例えば、実行装置1704)はデコードされた命令に応答して、複数のメッセージ拡張反復から成るSM3ハッシュアルゴリズムスライスセットを第1のソースデータオペランド1719セットおよび第2のソースデータオペランド1711セットに実行し、SM3メッセージ拡張の数は指定された拡張範囲によって判断され、命令の結果1790(例えば、W
j−4...W
j−1、W
j...W
j+3)をSIMDデスティネーションレジスタに格納する。
【0155】
図17Bは、SIMD SM3暗号化ハッシュ機能を提供する別の命令の実行のための装置1702の代替的な実施形態の図を示す。装置1702の実施形態は、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のためのパイプライン400(例えば、実行ステージ416)の一部またはコア490(例えば、実行ユニット462)の一部であってよい。装置1702の実施形態は、ハッシュアルゴリズムのメッセージ拡張の反復合計数(例えば、52回のメッセージ拡張反復より少ない)より少ない反復数(例えば、2または4回の反復、これによりスーパースカラ実行パイプライン内の他の命令の同時実行を許容する)を有するSIMD SM3暗号化ハッシュアルゴリズムメッセージ拡張のための命令をデコードするためのデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)に連結されてよく、当該命令は第1のソースデータオペランド1719セット(例えば、W
j−16,W
j−15,...W
j−9)および第2のソースデータオペランド1711セット(例えば、W
j−8,W
j−7,...W
j−1)並びに拡張範囲(例えば、随意で、即値オペランド1718内または命令ニーモニックおよび/または演算コード内で反復の拡張範囲数e+1として)を指定する。1または複数の実行ユニット(例えば、実行装置1703)はデコードされた命令に応答して、複数のメッセージ拡張反復から成るSM3ハッシュアルゴリズムスライスセットを第1のソースデータオペランド1719セットおよび第2のソースデータオペランド1711セットに実行し、SM3メッセージ拡張の数は指定された拡張範囲によって判断され、命令の結果1792(例えば、W
j+e−7...W
j−1、W
j...W
j+e)をSIMDデスティネーションレジスタ(例えば、いくつかの実施形態において、第1のソースデータオペランド1719または第2のソースデータオペランド1711に使用されるのと同一のSIMDレジスタ)に格納する。
【0156】
図18Aは、SIMD SM3暗号化ハッシュ機能を提供する別の命令の実行のための装置1801の別の代替の実施形態の図を示す。装置1801の実施形態は、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のためのパイプライン400(例えば、実行ステージ416)の一部またはコア490(例えば、実行ユニット462)の一部であってよい。装置1801の実施形態は、ハッシュアルゴリズムのメッセージ拡張の反復合計数(例えば、52回のメッセージ拡張反復より少ない)より少ない反復数(例えば、2または4回の反復、これによりスーパースカラ実行パイプライン内の他の命令の同時実行を許容してよい)を有するSIMD SM3暗号化ハッシュアルゴリズムメッセージ拡張のための命令をデコードするためのデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)に連結されてよく、当該命令は第1のソースデータオペランド1819セット(例えば、W
0,W
1,...W
7)および第2のソースデータオペランド1811セット(例えば、W
8,W
9,...W
15)並びに拡張範囲(例えば、随意で、即値オペランド(不図示)内または命令ニーモニックおよび/または演算コード内で反復の拡張範囲数または反復−1のeとして)を指定する。1または複数の実行ユニット(例えば、実行装置1808)はデコードされた命令に応答して、複数のメッセージ拡張反復から成るSM3ハッシュアルゴリズムスライスセットを第1のソースデータオペランド1819セットおよび第2のソースデータオペランド1811セットに実行し、SM3メッセージ拡張の数は指定された拡張範囲によって判断される。例えば、一実施形態において、新規拡張(または拡大)メッセージワードW
16は、1804において命令の結果1890の要素として次のように生成される。
【数4】
ここで、転置1803 P
1は次のように定義される。
【数5】
新規拡張(または拡大)メッセージワードW
17は、1805において、命令の結果1890の要素として次のように生成される。
【数6】
新規拡張(または拡大)メッセージワードW
18は、1806において、命令の結果1890の要素として次のように生成される。
【数7】
4個の新規32ビットワードW
19のうちの1つに対するメッセージ拡張は、第1(例えば1819)のソースデータオペランドセットおよび第2(例えば1811)のソースデータオペランドセットの32ビットワードデータ要素に加え、当該4個の新規32ビットワードのうちのもう1つ(すなわちW
16)を必要とする。従って、一実施形態において、転置
【数8】
は、処理ブロック1802内で
【数9】
として図示される通り生成され、1807において(W
6<<<7)およびW
13を用いてXORされ、新規拡張(拡大)メッセージワードW
19を命令の結果1890の要素として生成してよい。次に、命令の結果1890(例えば、W
12,...W
15,W
16,...W
19)はSIMDデスティネーションレジスタ内に格納されてよい。いくつかの実施形態においては、出力ラッチが反復の中間結果として生成された結果1890を格納する。いくつかの実施形態においては、中間結果1890を別のマイクロ命令(またはマイクロオペレーションまたはμop)の1または複数の入力ソースデータオペランドにバイパスすることはバイパス(例えば、バイパスネットワーク208または210)によって実行されてよい。
【0157】
図18Bは、SIMD SM3暗号化ハッシュ機能を提供する別の命令の実行のための装置1810のさらなる別の代替的な実施形態の図を示す。装置1810の実施形態は、SIMD SM3暗号化ハッシュ機能を提供する命令の実行のためのパイプライン400(例えば、実行ステージ416)の一部またはコア490(例えば、実行ユニット462)の一部であってよい。装置1810の実施形態は、ハッシュアルゴリズムのメッセージ拡張の反復合計数(例えば、52回のメッセージ拡張反復より少ない)より少ない反復数(例えば、8回の反復、これによりスーパースカラ実行パイプライン内の他の命令の同時実行を許容してよい)を有するSIMD SM3暗号化ハッシュアルゴリズムメッセージ拡張のための命令をデコードするためのデコードステージ(例えば、デコード406)またはデコーダ(例えば、デコードユニット440)に連結されてよく、当該命令は第1のソースデータオペランド1819セット(例えば、W
0,W
1,...W
7)および第2のソースデータオペランド1811セット(例えば、W
8,W
9,...W
15)並びに拡張範囲(例えば、随意で、即値オペランド1818内または命令ニーモニックおよび/または演算コード内で反復の拡張範囲数または反復マイナス1のeとして)を指定する。1または複数の実行ユニット(例えば、実行装置1809)はデコードされた命令に応答して、複数のメッセージ拡張反復から成るSM3ハッシュアルゴリズムスライスセットを第1のソースデータオペランド1819セットおよび第2のソースデータオペランド1811セットに実行し、SM3メッセージ拡張の数は指定された拡張範囲によって判断される。一実施形態において、中間結果1821(例えば、W
12,...W
15,W
16,...W
19)が、デコードされた命令(例えば、マイクロ命令、マイクロオペレーションまたはμopの結果として)に応答する1または複数の実行ユニット(例えば、実行装置1808)によって生成されてよい。次に、デコードされた命令(例えば、第2のマイクロ命令、マイクロオペレーションまたはμopの結果として)に応答して、中間結果1821は、後のロジックレイヤ(例えば、実行装置1808)に第1のソースデータオペランド1819セット(例えばW
4,W
5,...W
7)および第2のソースデータオペランド1811セット(例えばW
8,W
9,...W
11)の要素と共に提供され、拡張(または拡大)されたメッセージ結果1890(例えば、W
16,...W
19,W
20,...W
23)を生成してよい。次に、命令の結果1890(例えば、W
16,...W
19,W
20,...W
23)はSIMDデスティネーションレジスタ(例えば、いくつかの実施形態において、第1のソースデータオペランド1719に使用されるのと同一のSIMDレジスタ)に格納されてよい。
【0158】
図19は、SIMD SM3暗号化ハッシュ機能を提供するための命令の実行のためのプロセス1901の一実施形態のためのフロー図を示す。処理1901および本明細書に開示された他の処理は、汎用機械または特定用途機械またはそれら両方の組み合わせによって実行可能な、専用ハードウェア若しくはソフトウェア若しくはファームウェアの演算コードを備えてよい処理ブロックによって実行される。
【0159】
処理1901の処理ブロック1910において、SM3ハッシュアルゴリズムの中間ハッシュ値入力状態ソースオペランドが第1のSIMDベクトルレジスタ内に格納(例えば、複数のm個のデータフィールドの第1の部分内)される。処理ブロック1920において、ソースデータオペランドセットが第2のSIMDベクトルレジスタに格納(例えば、複数のm個のデータフィールドの第2の部分内)される。処理ブロック1925において、SM3ハッシュアルゴリズムのSIMD SM3ハッシュラウンドスライス部分のための命令が受信される。処理ブロック1950において、ハッシュ値出力状態がSIMD SM3ハッシュラウンドスライスの反復の結果として生成される。処理ブロック1960において、ハッシュラウンドスライスのすべての反復が終了したか否かに関する判断がなされる。終了していない場合、随意で処理ブロック1970において、ハッシュラウンドスライスの次の反復のために、出力状態結果は入力状態にバイパスされ、処理は処理ブロック1950における開始を反復する。そうでなければ、処理は処理ブロック1980に進み、処理ブロック1980では、ハッシュ値出力状態結果が第1のSIMDレジスタ内のデスティネーションオペランドに格納される。
【0160】
処理1901の処理ブロックおよび本明細書に開示の他の処理は、反復方法で実行されるものとして示されているものの、可能な場合はいつでも代替の順序、または同時若しくは並列での実行が好ましく行われてよいことを理解されたい。
【0161】
図20は、SIMD SM3暗号化ハッシュ機能を提供するための命令の実行のためのプロセス2001の別の実施形態のフロー図を示す。処理2001の処理ブロック2010において、SM3ハッシュアルゴリズムの中間ハッシュ値入力状態ソースオペランドが第1のSIMDベクトルレジスタ内に格納(例えば、複数のm個のデータフィールドの第1の部分内)される。処理ブロック2015において、メッセージブロックがラウンドスライスソースデータオペランドセットのために拡張される。処理ブロック2020において、ソースデータオペランドセットが第2のSIMDベクトルレジスタ内またはメモリ内に格納(例えば、複数のm個のデータフィールドの第2の部分内)される。処理ブロック2025において、SM3ハッシュアルゴリズムのSIMD SM3ハッシュラウンドスライス部分のための命令がデコードされ、当該命令は即値オペランド内で上記ラウンドスライス部分を指定する。処理ブロック2030において、第2のSIMDレジスタから、またはメモリから、現在の反復のための1組のラウンドスライスソースデータ(例えば、W
jおよびW
j+4)が選択される。処理ブロック2035において、現在のラウンドスライス部分の反復のためのラウンド定数(例えばT
j)が選択される。処理ブロック2040において、現在の反復のための1組のブール関数(例えばFF
jおよびGG
j)が選択される。処理ブロック2045において、SM3ハッシュラウンドが選択されたソースデータおよび中間ハッシュ値入力状態に行われる。処理ブロック2050において、ハッシュ値出力状態が、SIMD SM3ハッシュラウンドスライスの反復の結果として生成される。処理ブロック2060において、ハッシュラウンドスライスのすべての反復が終了したか否かの判断がなされる。終了していない場合、随意で処理ブロック2070において、ハッシュラウンドスライスの次の反復のために、出力状態結果は入力状態にバイパスされ、処理は処理ブロック2030における開始を反復する。そうでなければ、処理は処理ブロック2080に進み、処理ブロック2080では、ハッシュ値出力状態結果が第1のSIMDレジスタ内のデスティネーションオペランドに格納される。いくつかの代替的な実施形態において、ハッシュ値出力状態結果は、第1のSIMDレジスタ以外のSIMDレジスタ内またはメモリ内のデスティネーションオペランドに格納されてよい。
【0162】
図21は、SIMD SM3暗号化ハッシュ機能を提供するための代替の命令の実行のためのプロセス2101の一実施形態のためのフロー図を示す。処理2101の処理ブロック2110において、SM3ハッシュアルゴリズムの第1のソースデータオペランドセットが第1のSIMDベクトルレジスタ内に格納(例えば、複数のm個のデータフィールドの第1の部分内)される。処理ブロック2120において、第2のソースデータオペランドセットが第2のSIMDベクトルレジスタ内に格納(例えば、複数のm個のデータフィールドの第2の部分内)される。処理ブロック2130において、SM3ハッシュアルゴリズムのSIMD SM3メッセージ拡張(または拡大)のための命令が受信される。処理ブロック2140において、新規メッセージワードが、SIMD SM3メッセージ拡張スライスの反復の結果として生成される。処理ブロック2150において、メッセージ拡張のすべての反復が終了したか否かに関する判断がなされる。終了していない場合、随意で処理ブロック2160において、メッセージ拡張スライスの次の反復のために、拡張されたメッセージブロック結果は入力状態にバイパスされ、処理は処理ブロック2140における開始を反復する。そうでなければ、処理は処理ブロック2170に進み、処理ブロック2170では、拡張されたメッセージブロック結果が第1のSIMDレジスタ内のデスティネーションオペランドに格納される。いくつかの代替的な実施形態において、拡張されたメッセージブロック結果は、第1のSIMDレジスタ以外のSIMDレジスタ内またはメモリ内のデスティネーションオペランドに格納されてよい。
【0163】
SIMD SM3暗号化ハッシュ命令は本明細書で開示の通り、SIMD SM3暗号化ハッシュ機能を複数のアプリケーションに提供するために使用できることを理解されたい。そのようなアプリケーションとしては、財務トランザクション、電子商取引、電子メール、ソフトウェア配布、データストレージ、乱数生成等のためのデータ整合性、デジタル署名、本人確認、メッセージコンテンツ認証およびメッセージ元認証を保証するための暗号化プロトコルおよびインターネット通信が挙げられる。
【0164】
SM3暗号化ハッシュ機能を提供するためのSIMD命令および処理ロジックのいくつかの実施形態について、SM3メッセージ拡張およびSM3暗号化ハッシュラウンドの両方は、現在のマイクロプロセッサの標準的な実行パイプラインの中で、複数の反復のスライスにおいて同時におよび/または並列に実行されてよい。SM3メッセージ拡張のスライスおよび/またはSM3暗号化ハッシュラウンドのスライスの実行に関連するレイテンシによる他の同時インフライト命令に対し、十分なカバーを提供すべく、1スライスごとの反復数は好都合に選択されてよいことを理解されたい。
【0165】
従って、ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数(例えば、1スライスごとに2、4または8回の反復)を有する、SIMD SM3暗号化ハッシュアルゴリズムラウンドスライスのための命令の実行を提供することによって、スーパースカラ実行パイプライン、および/またはアウトオブオーダプロセッサパイプライン内の他の命令(例えば、SM3メッセージ拡張命令)の同時実行を許容し、それによって多数のアプリケーションの処理スループットを大きく改善し、汎用プロセッサに関連する製造処理改善のために周波数スケーリングを利用できることも理解されたい。
【0166】
本明細書に開示のメカニズムに係る実施形態は、ハードウェア、ソフトウェア、ファームウェアまたはこれらの実装アプローチの組み合わせにおいて実装されてよい。本発明の実施形態は、少なくとも1つのプロセッサ、ストレージシステム(揮発性および不揮発性メモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備えるプログラム可能なシステム上で実行されるコンピュータプログラムまたはプログラムコードとして実装されてよい。
【0167】
本明細書に記載の機能を実行し、出力情報を生成すべく、プログラムコードが入力命令に適用されてよい。出力情報は、既知の方法で1または複数の出力デバイスに適用されてよい。本願の意図する処理システムとは、例えばデジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサ等のプロセッサを有する任意のシステムが含まれる。
【0168】
プログラムコードは、処理システムと通信するために、高水準の手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械言語で実装されてもよい。実際、本明細書に記載のメカニズムは特定のプログラミング言語には一切範囲限定されない。いずれの場合においても、言語はコンパイル型言語または解釈型言語であってよい。
【0169】
少なくとも一実施形態に係る1または複数の態様は、機械可読媒体上に格納された、プロセッサ内で様々なロジックを表わす典型的命令によって実装されてよく、当該命令は機械による読み取り時に、機械に対し、本明細書に記載の技術を実行するためのロジックを生成させる。このような「IPコア」として知られる典型的なものが、有形の機械可読媒体上に格納され、様々な顧客または製造施設に供給され、実際にロジックまたはプロセッサを生産する製造機械にロードされてよい。
【0170】
このような機械可読ストレージ媒体としては特に限定されないが、機械またはデバイスによって製造または形成される複数の物品から成る非一時的な有形の構成が含まれてよく、それらとしては、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD‐ROM)、コンパクトディスクリライタブル(CD‐RW)、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ(ROM)、ダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)等のランダムアクセスメモリ(RAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)等の半導体デバイス、磁気カード若しくは光カードといった記憶媒体、または電子的命令を格納するのに好適な任意の他のタイプの媒体が含まれる。
【0171】
従って、また、本発明の実施形態は、命令を含む、または本明細書に記載の構造、回路、装置、プロセッサおよび/またはシステム機能を定義するハードウェア記述言語(HDL)等の設計データを含む非一時的な有形の機械可読媒体を含む。また、このような実施形態はプログラム製品としても称されてよい。
【0172】
いくつかの場合において、命令コンバータを使用し、命令はソース命令セットからターゲット命令セットへ変換されてよい。例えば、命令コンバータは、ある命令を、コアによって処理されるべき1または複数の他の命令へと、トランスレート(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を使用して)、モーフィング、エミュレーション、またはそれら以外の方法による変換を行ってよい。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせによって実装されてよい。命令コンバータは、プロセッサ内、プロセッサ外、または部分的にプロセッサ内または部分的にプロセッサ外に存在してよい。
【0173】
故に、少なくとも一実施形態による1または複数の命令を実行するための技術が開示されている。具体的な例示的実施形態が記載され、添付図面に図示されているものの、このような実施形態は専ら例示にすぎず、広範な本発明においての限定となるものではなく、本開示に接する当業者には様々な他の変形例が想起され得るので、本発明は図示および記載された具体的な構造および構成に限定されないことを理解されたい。本技術分野等、成長が速く、さらなる進歩が容易に予測できない技術分野においては、当該開示の実施形態は、技術の進展を可能にすることで容易となるように、本開示の原理または添付の特許請求の範囲から逸脱することなく構成および詳細において容易に変更可能である。
[項目1]
SIMD SM3ハッシュラウンドスライスのための第1の命令をデコードするためのデコードステージと、
1または複数の実行ユニットと、を備え、
前記第1の命令はハッシュのアルゴリズムのラウンドスライス部分、中間ハッシュ値入力オペランド、ソースデータオペランドセットおよびラウンド定数オペランドセットを指定し、
前記1または複数の実行ユニットは前記デコードされた第1の命令に応答して、
複数のラウンド反復から成るSM3ハッシュラウンドスライスセットを前記ソースデータオペランドセットに実行して、前記中間ハッシュ値入力オペランドおよび前記ラウンド定数オペランドセットを適用し、
前記第1の命令の結果をSIMDデスティネーションレジスタに格納する、プロセッサ。
[項目2]
前記第1の命令は前記SIMDデスティネーションレジスタを、前記中間ハッシュ値入力オペランドとしても指定する、項目1に記載のプロセッサ。
[項目3]
前記第1の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を即値オペランド内の第1のフィールドによって指定する、項目1または2に記載のプロセッサ。
[項目4]
前記第1の命令は、前記ラウンド定数オペランドセットを前記即値オペランド内の第2のフィールドによって少なくとも部分的に指定する、項目3に記載のプロセッサ。
[項目5]
前記第1の命令は、前記即値オペランド内の前記第2のフィールドによってブール関数FF
jおよびGG
jセレクタをさらに指定する、項目4に記載のプロセッサ。
[項目6]
前記第1の命令は前記ハッシュのアルゴリズムの前記ラウンドスライス部分を第1の命令ニーモニック内で4回のラウンドとして指定する、項目1から5のいずれか一項に記載のプロセッサ。
[項目7]
前記ラウンド定数オペランドセットは、4個の予め回転された32ビット定数値を有する、項目6に記載のプロセッサ。
[項目8]
前記第1の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を第1の命令ニーモニック内で2回のラウンドとして指定する、項目1から5のいずれか一項に記載のプロセッサ。
[項目9]
前記第1の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を第1の命令ニーモニック内で1回のラウンドとして指定する、項目1から5のいずれか一項に記載のプロセッサ。
[項目10]
前記第1の命令は、前記ソースデータオペランドセットを8個の32ビット値を有するSIMDレジスタとして指定する、項目1から9のいずれか一項に記載のプロセッサ。
[項目11]
前記第1の命令は、前記ソースデータオペランドセットを8個の32ビット値を有するメモリ場所として指定する、項目1から9のいずれか一項に記載のプロセッサ。
[項目12]
前記第1の命令は、前記ソースデータオペランドセットをそれぞれ4個の32ビット値を有する2つのSIMDレジスタとして指定する、項目1から9のいずれか一項に記載のプロセッサ。
[項目13]
前記第1の命令は、前記ハッシュのアルゴリズムの前記ラウンドスライス部分を、0から63の間のラウンド回数を格納すべく、即値オペランド内の第1のフィールドによって指定し、0から3の間の反復カウントを格納すべく、第2のフィールドによって指定する、項目1から3のいずれか一項に記載のプロセッサ。
[項目14]
SIMD SM3メッセージ拡張のための第1の命令をデコードするためのデコードステージと、
1または複数の実行ユニットと、を備え、
前記第1の命令は第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、拡張範囲と、を指定し、
前記1または複数の実行ユニットは前記デコードされた第1の命令に応答して、
前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットから、SM3メッセージ拡張の数を実行し、前記SM3メッセージ拡張の数は前記指定された拡張範囲によって判断され、
前記第1の命令の結果をSIMDデスティネーションレジスタに格納する、プロセッサ。
[項目15]
前記第1の命令は、前記SIMDデスティネーションレジスタをデスティネーションオペランドとして指定する、項目14に記載のプロセッサ。
[項目16]
前記第1の命令は、前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットをそれぞれ8個の32ビット値を有する2つのSIMDレジスタとして指定する、項目14または15に記載のプロセッサ。
[項目17]
前記第1の命令は、前記拡張範囲を即値オペランド内の第1のフィールドによって指定する、項目14から16のいずれか一項に記載のプロセッサ。
[項目18]
前記第1の命令は、前記拡張範囲を第1の命令ニーモニック内で、4個の新規32ビットワードのメッセージ拡張を示すように指定する、項目14から17のいずれか一項に記載のプロセッサ。
[項目19]
前記4個の新規32ビットワードのうちの1つのための前記メッセージ拡張は、前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットに加え、前記4個の新規32ビットワードのうちのもう1つを必要とする、項目18に記載のプロセッサ。
[項目20]
前記第1の命令は、前記拡張範囲を第1の命令ニーモニック内で、2個の新規32ビットワードのメッセージ拡張を示すように指定する、項目14から17のいずれか一項に記載のプロセッサ。
[項目21]
前記第1の命令は、前記拡張範囲を第1の命令ニーモニック内で、1個の新規32ビットワードのメッセージ拡張を示すように指定する、項目14から17のいずれか一項に記載のプロセッサ。
[項目22]
前記第1の命令は、前記拡張範囲を第1の命令ニーモニック内で、4個の新規32ビットワードのメッセージ拡張を示すように指定する、項目14から17のいずれか一項に記載のプロセッサ。
[項目23]
第1のベクトルレジスタの複数のm個のデータフィールドの第1の部分に、SM3ハッシュアルゴリズムの中間ハッシュ値入力状態のソースオペランドを格納する段階と、
第2のベクトルレジスタの複数のm個のデータフィールドの第2の部分に、ソースデータオペランドセットを格納する段階と、
プロセッサで、前記SM3ハッシュアルゴリズムのラウンド反復の合計回数より少ない反復数を有する前記SM3ハッシュアルゴリズムのSM3ハッシュラウンドスライスの部分のためのSIMD命令を実行する段階と、
前記SM3ハッシュラウンドスライスの各反復において、反復の結果を生成し、前記反復の前記結果として生成されたハッシュ値出力状態を格納し、複数の前記反復の次の各反復のために、前記ハッシュ値出力状態を前記中間ハッシュ値入力状態にバイパスする段階と、を備える、方法。
[項目24]
第3のベクトルレジスタの前記複数のm個のデータフィールドの第3の部分に、ラウンド定数オペランドセットを格納する段階と、
前記SM3ハッシュラウンドスライスの各反復において、
前記ラウンド定数オペランドセットのそれぞれのラウンド定数T
jを読み取り、前記それぞれのラウンド定数を前記第1のベクトルレジスタの左回転された各データフィールドAおよび前記第1のベクトルレジスタの第2の回転されていないデータフィールドEを用いて加算する段階と、をさらに備える、項目23に記載の方法。
[項目25]
前記第3の部分は、前記第3のベクトルレジスタの前記複数のm個のデータフィールドのうちの4個を有し、前記格納されたラウンド定数オペランドセットの各ラウンド定数T
jはjビット分予め左回転されている、項目24に記載の方法。
[項目26]
前記SM3ハッシュラウンドスライスの各反復において、
前記第2のベクトルレジスタの各データフィールドW
jを読み取り、前記第2のベクトルレジスタの前記各データフィールドを前記第2のベクトルレジスタの第2のデータフィールドW
j+4を用いてXORする段階をさらに備える、項目23から25のいずれか一項に記載の方法。
[項目27]
前記第2の部分は、前記第2のベクトルレジスタの前記複数のm個のデータフィールドのうちの8個を有する、項目26に記載の方法。
[項目28]
前記第1の部分は、前記第1のベクトルレジスタの前記複数のm個のデータフィールドのうちの8個を有する、項目23から26のいずれか一項に記載の方法。
[項目29]
前記SIMD命令は、前記SM3ハッシュアルゴリズムの前記SM3ハッシュラウンドスライスの部分を即値オペランド内の第1のフィールドによって指定する、項目23から28のいずれか一項に記載の方法。
[項目30]
前記SIMD命令は、ラウンド定数オペランドセットを前記即値オペランド内の第2のフィールドによって少なくとも部分的に指定する、項目29に記載の方法。
[項目31]
前記SIMD命令は、ブール関数FF
jおよびGG
jセレクタを前記即値オペランド内の前記第2のフィールドによってさらに指定する、項目30に記載の方法。
[項目32]
第1のベクトルレジスタの複数のm個のデータフィールドの第1の部分に、第1のソースデータオペランドセットを格納する段階と、
第2のベクトルレジスタの前記複数のm個のデータフィールドの第2の部分に、第2のソースデータオペランドセットを格納する段階と、
プロセッサで、SIMD命令を実行する段階と、
前記SIMD命令の結果をSIMDデスティネーションレジスタに格納する段階と、を備え、
前記SIMD命令は、前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットから、SM3メッセージ拡張の数を有するSM3のハッシュアルゴリズムのSM3メッセージ拡張スライス部分のための拡張範囲を指定し、前記SM3メッセージ拡張の数は、前記指定された拡張範囲によって判断される、方法。
[項目33]
前記SIMD命令は、前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットを8個の32ビット値をそれぞれ有する2つのSIMDレジスタとして指定する、項目32に記載の方法。
[項目34]
前記SIMD命令は、前記拡張範囲を即値オペランド内の第1のフィールドによって指定する、項目32または33に記載の方法。
[項目35]
前記SIMD命令は、前記拡張範囲を第1の命令ニーモニック内で、4個の新規32ビットワードのメッセージ拡張を示すように指定する、項目32から34のいずれか一項に記載の方法。
[項目36]
前記4個の新規32ビットワードのうちの1つのための前記メッセージ拡張は、前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットに加え、前記4個の新規32ビットワードのうちのもう1つを必要とする、項目35に記載の方法。
[項目37]
SIMD SM3ハッシュアルゴリズムラウンドスライスのための第1の命令と、前記SIMD SM3ハッシュアルゴリズムのためのSM3メッセージ拡張スライスのための第2の命令と、を格納するためのメモリと、
プロセッサと、を備え、
前記プロセッサは、
前記第1の命令をフェッチするための命令フェッチステージと、
前記第1の命令をデコードするためのデコードステージと、
前記第2の命令をデコードするための前記デコードステージと、
1または複数の実行ユニットと、を有し、
前記第1の命令は、前記SM3ハッシュアルゴリズムのラウンドスライス部分と、中間ハッシュ値入力オペランドと、ラウンドスライスソースデータオペランドセットと、ラウンド定数オペランドセットと、を指定し、前記第2の命令は、第1のソースデータオペランドセットと、第2のソースデータオペランドセットと、拡張範囲と、を指定し、
前記1または複数の実行ユニットは、前記デコードされた第1の命令に応答し、
複数のラウンド反復から成るSM3ハッシュラウンドスライスセットを前記ラウンドスライスソースデータオペランドセットに実行して、前記中間ハッシュ値入力オペランドおよび前記ラウンド定数オペランドセットを適用し、前記第1の命令の第1の結果を第1のSIMDデスティネーションレジスタに格納し、
前記1または複数の実行ユニットは、前記デコードされた第2の命令に応答し、
前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットから、SM3メッセージ拡張の数を実行し、前記SM3メッセージ拡張の数は前記指定された拡張範囲によって判断され、前記第2の命令の第2の結果を第2のSIMDデスティネーションレジスタ内に格納する、処理システム。
[項目38]
前記第1の命令は、前記SM3ハッシュアルゴリズムの前記ラウンドスライス部分を即値オペランド内の第1のフィールドによって指定する、項目37に記載の処理システム。
[項目39]
前記第1の命令は、前記ラウンド定数オペランドセットを即値オペランド内の第2のフィールドによって少なくとも部分的に指定する、項目37または38に記載の処理システム。
[項目40]
前記第1の命令は、ブール関数FF
jおよびGG
jセレクタを前記即値オペランド内の前記第2のフィールドによってさらに指定する、項目39に記載の処理システム。
[項目41]
前記第1の命令は、前記SM3ハッシュアルゴリズムの前記ラウンドスライス部分を第1の命令ニーモニック内で4回のラウンドとして指定する、項目37から40のいずれか一項に記載の処理システム。
[項目42]
前記ラウンド定数オペランドセットは、初期の予め回転された32ビット定数値を有する、項目41に記載の処理システム。
[項目43]
前記ラウンド定数オペランドセットは、4個の予め回転された32ビット定数値を有する、項目42に記載の処理システム。
[項目44]
前記第2の命令は、前記第1のソースデータオペランドセットおよび前記第2のソースデータオペランドセットをそれぞれ8個の32ビット値を有する2つのSIMDレジスタとして指定する、項目37から43のいずれか一項に記載の処理システム。
[項目45]
前記第2の命令は、前記拡張範囲を即値オペランド内の第1のフィールドによって指定する、項目37から44のいずれか一項に記載の処理システム。
[項目46]
前記第2の命令は、前記拡張範囲を第1の命令ニーモニック内で4個の新規32ビットワードのメッセージ拡張を示すように指定する、項目37から45のいずれか一項に記載の処理システム。