JP2019207393A - 高性能認証付き暗号に関するハードウェアアクセラレータ及び方法 - Google Patents

高性能認証付き暗号に関するハードウェアアクセラレータ及び方法 Download PDF

Info

Publication number
JP2019207393A
JP2019207393A JP2019035652A JP2019035652A JP2019207393A JP 2019207393 A JP2019207393 A JP 2019207393A JP 2019035652 A JP2019035652 A JP 2019035652A JP 2019035652 A JP2019035652 A JP 2019035652A JP 2019207393 A JP2019207393 A JP 2019207393A
Authority
JP
Japan
Prior art keywords
circuit
vector register
value
input
round
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2019035652A
Other languages
English (en)
Inventor
スレシュ ヴィクラム
Suresh Vikram
スレシュ ヴィクラム
マシュー サヌ
Mathew Sanu
マシュー サヌ
サトパティ スドゥヒア
Satpathy Sudhir
サトパティ スドゥヒア
ゴーパル ヴィノード
Gopal Vinodh
ゴーパル ヴィノード
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2019207393A publication Critical patent/JP2019207393A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/72Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0637Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0631Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0643Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/065Encryption by serially and continuously modifying data stream elements, e.g. stream cipher systems, RC4, SEAL or A5/3
    • H04L9/0656Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher
    • H04L9/0662Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator
    • H04L9/0668Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher with particular pseudorandom sequence generator producing a non-linear pseudorandom sequence
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/04Masking or blinding
    • H04L2209/046Masking or blinding of operations, operands or results of the operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • H04L2209/122Hardware reduction or efficient architectures

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Nonlinear Science (AREA)
  • Power Engineering (AREA)
  • Advance Control (AREA)

Abstract

【課題】暗号化演算のハードウェアアクセラレータを提供する。【解決手段】ベクトルレジスタからの第1入力及び第2入力に結合される第1モジュラ加算器610、及び、第1モジュラ加算器とベクトルレジスタからの第2データパスとに結合される第2モジュラ加算器612を含む第1データパス、並びに、第2入力とベクトルレジスタからの第3データパスとに結合される第1論理XOR回路614、第1論理XOR回路に結合される第1ローテート回路616、第1ローテート回路及び第3データパスに結合される第2論理XOR回路618、及び、第2論理XOR回路に結合される第2ローテート回路620を含む第2データパスを含む回路と、第1データパスの第1及び第2モジュラ加算器、並びに、第2データパスの第1及び第2論理XOR回路、第1及び第2ローテート回路に、1又は複数の制御値に従ってラウンドの一部を実行させる。【選択図】図6

Description

本開示は、概して電子工学に関し、より具体的には、本開示の実施形態は、暗号化演算を実行するハードウェアアクセラレータに関する。
プロセッサ又はプロセッサのセットは、命令セット、例えば、命令セットアーキテクチャ(ISA)からの命令を実行する。命令セットは、プログラミングに関するコンピュータアーキテクチャの一部であり、概して、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理、並びに、外部入力及び出力(I/O)を含む。本明細書において命令という用語は、マクロ命令、例えば、実行のためにプロセッサに提供される命令、又は、マイクロ命令、例えば、マクロ命令をデコードするプロセッサのデコーダに起因する命令を指し得ることに留意されたい。
本開示は、例示の目的で示されており、添付の図面の図に限定されることはなく、図内の同様の参照符号は同様の要素を示す。
本開示の実施形態に係る複数のコア及びハードウェアアクセラレータを含むハードウェアプロセッサを示す。
本開示の実施形態に係るハードウェアプロセッサ及びハードウェアアクセラレータを含むシステムを示す。
本開示の実施形態に係るChaChaハードウェアアクセラレータを示す。
本開示の実施形態に係るBlakeハードウェアアクセラレータを示す。
本開示の実施形態に係るデュアルモード(ChaCha/Blake)ハードウェアアクセラレータを示す。
本開示の実施形態に係るChaChaクウォータラウンド回路を示す。
本開示の実施形態に係る統合されたChaChaクウォータラウンド及びBlakeラウンド回路を示す。
本開示の実施形態に係るハードウェアアクセラレータの回路を示す。
本開示の実施形態に係るハードウェアアクセラレータの暗号化演算についてのラウンドの複数サイクルを示す。
本開示の実施形態に係る図9におけるハードウェアアクセラレータのクリティカルデータパスを示す。
本開示の実施形態に係るハードウェアアクセラレータの回路を示す。
本開示の実施形態に係る図11のハードウェアアクセラレータの暗号化演算についてのラウンドの複数サイクルを示す。
本開示の実施形態に係る図12におけるハードウェアアクセラレータのクリティカルデータパスを示す。
本開示の実施形態に係るハードウェアアクセラレータの回路を示す。
本開示の実施形態に係る図14のハードウェアアクセラレータの暗号化演算についてのラウンドの複数サイクルを示す。
本開示の実施形態に係る図15におけるハードウェアアクセラレータのクリティカルデータパスを示す。
本開示の実施形態に係るフロー図を示す。
本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらのクラスAの命令テンプレートを示すブロック図である。
本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらのクラスBの命令テンプレートを示すブロック図である。
本開示の実施形態に係る図18A及び図18Bにおける汎用的なベクトルに適した命令フォーマットに対するフィールドを示すブロック図である。
本開示の一実施形態に係るフルオペコードフィールドを作成する図19Aにおける特定のベクトルに適した命令フォーマットのフィールドを示すブロック図である。
本開示の一実施形態に係るレジスタインデックスフィールドを作成する図19Aにおける特定のベクトルに適した命令フォーマットのフィールドを示すブロック図である。
本開示の一実施形態に係る拡張オペレーションフィールド1850を作成する図19Aにおける特定のベクトルに適した命令フォーマットのフィールドを示すブロック図である。
本開示の一実施形態に係るレジスタアーキテクチャのブロック図である。
本開示の実施形態に係る例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。
本開示の実施形態に係るプロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。
本開示の実施形態に係る、オンダイ相互接続ネットワークへのその接続、及び、レベル2(L2)キャッシュのローカルサブセットと共に示すシングルプロセッサコアのブロック図である。
本開示の実施形態に係る図22Aにおけるプロセッサコアの一部の拡大図である。
本開示の実施形態に係る1より多いコアを有し得る、統合メモリコントローラを有し得る、及び、統合グラフィックスを有し得るプロセッサのブロック図である。
本開示の一実施形態に係るシステムのブロック図である。
本開示の実施形態に係るより具体的で例示的なシステムのブロック図である。
本開示の実施形態に係る第2のより具体的で例示的なシステムのブロック図が示される。
本開示の実施形態に係るシステムオンチップ(SoC)のブロック図が示される。
本開示の実施形態に係るソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するためのソフトウェア命令変換器の使用を対比したブロック図である。
以下の説明において、多数の具体的な詳細が示される。しかしながら、本開示の実施形態は、これらの具体的な詳細がなくても実施され得ることが理解される。他の例において、周知の回路、構造及び技術は、本説明の理解を曖昧にしないために、詳細に示されてはいない。
本明細書において、「一実施形態」、「実施形態」、「例示的な実施形態」などへの言及は、説明される実施形態が、特定の機能、構造又は特性を含み得るが、すべての実施形態が、その特定の機能、構造又は特性を必ずしも含んでいなくてもよいことを示す。さらに、そのような表現は必ずしも同じ実施形態を指しているわけではない。さらに、実施形態と関連して特定の機能、構造又は特性が説明される場合、明示に説明されるか否かに関わらず、他の実施形態と関連してそのような機能、構造又は特性に影響を及ぼすことが当業者の知識の範囲内であることが考えられる。
(例えば、ハードウェア)プロセッサ(例えば、1又は複数のコアを有する)は、例えば算術、論理又は他の機能を実行するために、データに対する演算を行うように命令(例えば、命令のスレッド)を実行し得る。例えば、ソフトウェアは、オペレーションを要求し得、ハードウェアプロセッサ(例えば、それの1つのコア又は複数のコア)は、要求に応答してオペレーションを実行し得る。一実施形態において、プロセッサは、例えば、(例えば、オンダイ又はオフダイ)アクセラレータ(例えば、オフロードエンジン)に結合され、1又は複数のオペレーションがプロセッサ上のみで実行される代わりに、これらの(例えば、オフロードされた)オペレーションを実行する。一実施形態において、プロセッサは、例えば、1又は複数のオペレーションがプロセッサ上のみで実行される代わりに、これらのオペレーションを実行する(例えば、オンダイ)アクセラレータ(例えば、オフロードエンジン)を含む。
オペレーションの非限定的な例は、(例えば、暗号化及び/又は復号のための)暗号化演算である。暗号化演算は、復号された場合のみ読み出され得る暗号化テキストを生成するために、(例えば、暗号化暗号と称され得る)暗号化規格を用いて、(例えば、平文と称され得る)対象とする情報又はメッセージを暗号化することを含んでよい。暗号化規格は、暗号化規格に従って生成される擬似乱数暗号キーを利用し得る。暗号化規格は、(例えば、ガロアカウンタモード(GCM))において実装される)高度な暗号化規格(AES)、ChaCha(例えば、ChaChaX、Xはラウンド数であり、例えば、ChaCha20は20ラウンド、すなわち、80クウォータラウンドである)暗号化規格(例えば、ストリーム暗号)、Poly1305AEAD、Blake(例えば、Blake2、Blake2b又はBlake2s)又はこれらの規格のいずれかに基づく(例えば、将来の)暗号化規格のうちの1つ又は複数を含んでよい。暗号化規格は、例えば、1又は複数のインターネットブラウザにより用いられるトランスポート層セキュリティ(TLS)プロトコルにおいて、追加のデータを有する認証付き暗号(AEAD)に用いられ暗号化規格(例えば、暗号(cipher))であってよい。暗号化演算は、暗号化演算に関する(例えば、ChaCha)暗号キー及び/又は(例えば、Blake)状態を決定することを含んでよい。ハッシングアルゴリズムのPoly又はBlakeタイプは、ある実施形態に用いられてよく、例えば、Blakeタイプは、ChaChaストリーム暗号を用いて、ハッシュを実行してよく、及び/又は、Polyタイプは、認証付き暗号のためにChaChaと共に用いられてよい。
一実施形態において、アクセラレータは、例えば、暗号化演算を実行するプロセッサ(例えば、中央処理装置(CPU))への及び/又はプロセッサのための要求に応答して、暗号化演算を実行してよい。アクセラレータは、データ、例えば、入力データ及び/又は出力データを格納する(例えば、アクセラレータを有するオンダイの、又は、オフダイの)1又は複数のストレージデバイスに結合されてよい。一実施形態において、アクセラレータは、(例えば、入力キーを含む)暗号化入力データを受信し、成果(例えば、出力キー(例えば、キーストリーム)又は状態)を出力する。プロセッサは、1つのオペレーション又は複数のオペレーション(例えば、命令、命令スレッド又は他のワーク)をアクセラレータにオフロードする命令を実行してよい。プロセッサは、アクセラレータから成果(例えば、出力キー又は状態)を受け取って、例えば、暗号化メッセージ(例えば、暗号化テキスト)を生成するために、当該成果を用いて、さらなるアクションを実行してよい。一実施形態において、出力キー(例えば、キーストリーム)は、暗号化メッセージ(例えば、暗号化テキスト)を成果として生成するために、平文を用いて排他的なORがとられ(XORがとられ)る。
本明細書におけるある実施形態では、認証付き暗号の性能を大幅に向上させるために、(例えば、1又は複数の暗号化演算(例えば、ChaCha及び/又はBlakeストリーム暗号化規格に従う加速オペレーションを含む)のアクセラレーションハードウェアを介した)アクセラレーションを可能にする。本明細書におけるある実施形態では、例えば、ソフトウェア及び/又はマイクロコードを用いて暗号化演算を実行することと比較して、性能が最適化された(例えば、ChaCha)暗号化規格に従って、暗号化演算を実行するための(例えば、構成可能な)ハードウェアアクセラレータを対象にする。本明細書におけるある実施形態では、例えば、遅延型の列/対角線状態アラインメント技術を用いない場合と比較して、遅延型の列/対角線状態アラインメント技術を用いて(例えば、15%)性能が最適化された(例えば、ChaCha)暗号化規格に従って、暗号化演算を実行するための(例えば、構成可能な)ハードウェアアクセラレータを対象にする。ある実施形態において、例えば、(例えば、ChaCha)ラウンドの変数などの追加機能をサポートする、及び/又は、ハードウェアアクセラレータは、(例えば、共有回路を用いる)(例えば、Blake)暗号化ハッシュ関数をサポートするように拡張される。
本明細書におけるある実施形態では、ソフトウェア又はマイクロコードを用いる代わりに、ハードウェアアクセラレータを用いて暗号化演算を実行する。本明細書におけるある実施形態では、ソフトウェア及び/又はマイクロコード実装を用いることができない所望のスループットを有する(例えば、複数の(例えば、直列)加算を含む)暗号化演算のアクセラレーションを提供する。本明細書におけるある実施形態では、クロックサイクル毎に暗号化規格(例えば、ChaCha暗号化規格)のラウンドの一部(例えば、1クウォータラウンド(Qラウンド))を実行する最適化されたデータパスを有する構成可能なハードウェアアクセラレータを対象にする。ある実施形態において、ハードウェアアクセラレータは、ラウンドの変数、例えば、(ChaCha20モード)におけるデフォルトである20用に構成される。ある実施形態において、例えば、ハードウェアアクセラレータは、ChaCha Qラウンド操作にBlakeラウンド関数との類似性を活用することにより、(例えば、Blake)ハッシュ関数を加速するように構成される。ChaCha20暗号化規格用のハードウェアアクセラレータの一実施形態において、当該ハードウェアアクセラレータは、約80サイクルより小さいレイテンシ与えるだけであり、及び/又は、(例えば、ソフトウェア実装上の性能を10倍向上させる)約5.3Gbpsの暗号化スループットを提供し、顕著な性能向上をもたらす。本明細書の開示に係るハードウェアアクセラレータのある実施形態では、ChaCha暗号化規格用の専用のQラウンド計算回路を使用し、これは、さらに性能を向上させるために、列/対角線状態アラインメント技術と共に用いられ得る。本明細書におけるある実施形態では、スループットのさらなる向上を得るために、並列(例えば、Qラウンド)演算に対してスケーリングされ得る完全に合成可能なハードウェアアクセラレータ設計を提供する。ハードウェアアクセラレータのある実施形態では、増加又は減少されたラウンド数で、ChaCha暗号化規格とはわずかに異なるものを実行するために用いられてよく、低レベルソフトウェア実装に対してハードウェアを柔軟にする。わずかな変更を伴って、本明細書におけるある実施形態では、ソフトウェア実装にわたるBlakeハッシュ関数を実装する際に10倍の性能改善を得るようにBlakeラウンド計算に対するサポートを提供する。
図1は、本開示の実施形態に係る複数のコア(0からN、Nは1又はそれより大きくてよい)を含むハードウェアプロセッサ100及びハードウェアアクセラレータ104を示す。ハードウェアプロセッサ100(例えば、アクセラレータ104及び/又はこれらのコア)は、データストレージデバイス106(例えば、メモリ)に結合されてよい。一実施形態において、メモリは、ダイナミックランダムアクセスメモリ(DRAM)、プライベート(例えば、アクセラレータに対してプライベート)なランダムアクセスメモリ(RAM)、キャッシュメモリ又はシステムメモリであってよい。単一のハードウェアアクセラレータ104が示されているが、複数のハードウェアアクセラレータ(例えば、0からM)が用いられてもよい。複数のコアが示されているが、単一のコア、例えば、コア0(102)が用いられてもよい。ハードウェアアクセラレータは、ハードウェア暗号化及び/又は復号回路であってよい。
プロセッサ100(例えば、コア102)は、(例えば、ソフトウェアから)要求を受信して、(復号を含み得る)暗号化演算を実行してよく、(例えば、少なくとも一部の)暗号化演算(例えば、スレッド)をハードウェアアクセラレータ104にオフロードしてよい。コア、アクセラレータ及びデータストレージデバイス106は、互いに通信して(例えば、結合されて)よい。矢印は、2方向の通信(例えば、コンポーネント間)を示すが、一方向の通信が用いられてもよい。一実施形態において、(例えば、各)コアは、例えば、データ108にアクセスするために、データストレージデバイス106と通信して(例えば、結合されて)よい。一実施形態において、(例えば、各)アクセラレータは、例えば、データ108にアクセスするために、データストレージデバイス106と通信して(例えば、結合されて)よい。データ108は、(例えば、図5に関して説明されるような)暗号化データであってよい。示される実施形態において、ハードウェアアクセラレータ104は、ハードウェアプロセッサ100内にある。ハードウェアアクセラレータ104は、本明細書で説明される回路のいずれかを含んでよい。ハードウェアプロセッサ100は、1又は複数のレジスタ(例えば、ハードウェアアクセラレータ104から分離したレジスタ110)を含んでよい。レジスタ110は、(例えば、図5に関して説明されるような)暗号化データを格納してよい。ハードウェアアクセラレータ104は、1又は複数のレジスタ(例えば、コアから分離したレジスタ112)を含んでよい。レジスタ112は、(例えば、図5に関して説明されるような)暗号化データを格納してよい。ハードウェアアクセラレータ104のレジスタ112は、例えば、ハードウェアアクセラレータ104が暗号化演算を実行する前に、(例えば、ハードウェアプロセッサ100の1つのコア又は複数のコアにより)暗号化データを用いてロードされてよい。
図2は、本開示の実施形態に係るハードウェアプロセッサ201及びハードウェアアクセラレータ204を含むシステム200を示す。一実施形態において、ハードウェアアクセラレータ204は、ハードウェアプロセッサ201と共にオンダイである。一実施形態において、ハードウェアアクセラレータ204は、ハードウェアプロセッサ201のオフダイである。一実施形態において、少なくともハードウェアプロセッサ201及びハードウェア解凍アクセラレータ204を含むシステム200はシステムオンチップ(SOC)である。ハードウェアプロセッサ201(例えば、コア202)は、(例えば、ソフトウェアから)要求を受信して、解凍(例えば、デフレート)スレッド(例えば、オペレーション)を実行してよく、(例えば、少なくとも一部の)解凍(例えば、デフレート)スレッド(例えば、オペレーション)をハードウェアアクセラレータ(例えば、ハードウェア解凍アクセラレータ204)にオフロードしてよい。ハードウェアプロセッサ201は、1又は複数のコア(0からN)を含んでよい。一実施形態において、各コアは、ハードウェアアクセラレータ204と通信して(例えば、結合されて)よい。一実施形態において、各コアは、複数のハードウェア解凍アクセラレータのうちの1つと通信して(例えば、結合されて)よい。コア、アクセラレータ及びデータストレージデバイス206は、互いに通信して(例えば、結合されて)よい。矢印は、2方向の通信(例えば、コンポーネント間)を示すが、一方向の通信が用いられてもよい。一実施形態において、(例えば、各)コアは、例えば、(例えば、ロード及び/又はストア)データ208にアクセスするために、データストレージデバイス206と通信して(例えば、結合されて)よい。一実施形態において、(例えば、各)アクセラレータ204は、例えば、(例えば、ロード及び/又はストア)データ208にアクセスするために、データストレージデバイス206と通信して(例えば、結合されて)よい。データ208は、(例えば、図5に関して説明されるような)暗号化データであってよい。ハードウェアアクセラレータ204は、本明細書に説明される回路のいずれかを含んでよい。ハードウェアプロセッサ201は、1又は複数のレジスタ(例えば、レジスタ210)を含んでよい。レジスタ210は、(例えば、図5に関して説明されるような)暗号化データを格納してよい。ハードウェアアクセラレータ204は、1又は複数のレジスタ(例えば、レジスタ212)を含んでよい。レジスタ212は、(例えば、図5に関して説明されるような)暗号化データを格納してよい。ハードウェアアクセラレータ204のレジスタ212は、例えば、ハードウェアアクセラレータ204が暗号化演算を実行する前に、(例えば、ハードウェアプロセッサ201により)暗号化データを用いてロードされてよい。ハードウェアアクセラレータは、特定の暗号化規格又は規格のために提供されてよい。
図3は、本開示の実施形態に係るChaChaハードウェアアクセラレータ304を示す。示されるハードウェアアクセラレータ304は、ChaCha入力値を受信する複数の入力301(例えば、入力ポート)を含み、ChaChaハードウェアアクセラレータ304により操作される場合に出力303(例えば、出力ポート)に対するChaChaキー出力値を生成する。一実施形態において、入力301に対する入力値は、(例えば、256ビット)キー、(例えば、96ビット)ノンス(例えば、初期化)値、(例えば、32ビット)初期のカウント値(例えば、定数値)及びハードウェアアクセラレータ304が実行するラウンド数を示す(例えば、6ビット)値のうちの1つ又は複数を含む。ハードウェアアクセラレータ304は、以下の図に示される回路を含んでよい。
図4は、本開示の実施形態に係るBlakeハードウェアアクセラレータ404を示す。示されるハードウェアアクセラレータ404は、Blake入力値を受信する複数の入力401(例えば、入力ポート)を含み、Blakeハードウェアアクセラレータ404により操作される場合に、出力403(例えば、出力ポート)に対するBlake状態出力値を生成する。一実施形態において、入力401に対する入力値は、(例えば、512ビット)Blake状態値、第1のメッセージプラス定数値及び第2のメッセージプラス定数値のうちの1つ又は複数を含む。ハードウェアアクセラレータ404は、以下の図に示される回路を含んでよい。
図5は、本開示の実施形態に係るデュアルモード(ChaCha/Blake)ハードウェアアクセラレータ504を示す。示されるハードウェアアクセラレータ504は、ChaCha入力値を受信する複数の入力501(例えば、入力ポート)を含み、ChaChaモードにおけるハードウェアアクセラレータ504により操作される場合に、出力503(例えば、出力ポート)に対するChaChaキー出力値を生成する。一実施形態において、入力501に対する入力値は、(例えば、256ビット)キー、(例えば、96ビット)ノンス(例えば、初期化)値、(例えば、32ビット)初期のカウント値(例えば、定数値)及びハードウェアアクセラレータ504が実行するラウンド数を示す(例えば、6ビット)値のうちの1つ又は複数を含む。ハードウェアアクセラレータ504は、以下の図に示される回路を含んでよい。示されるハードウェアアクセラレータ504はまた、Blake入力値を受信する複数の入力505(例えば、入力ポート)を含み、Blakeモードにおいてハードウェアアクセラレータ504により操作される場合に、出力507(例えば、出力ポート)に対するBlake状態出力値を生成する。一実施形態において、入力505に対する入力値は、(例えば、512ビット)Blake状態値、第1のメッセージプラス定数値及び第2のメッセージプラス定数値のうちの1つ又は複数を含む。ハードウェアアクセラレータ504は、ChaChaモードとBlakeモードとの間を切り替えるために、(例えば、プロセッサから)値を受信する入力509(例えば、入力ポート)をさらに含む。2つの別個の入力501、505(例えば、入力ポート)を用いる代わりに、ハードウェアアクセラレータは、単一の統合された入力511(例えば、入力ポート)を用いてよい。2つの別個の出力503、507(例えば、出力ポート)を用いる代わりに、ハードウェアアクセラレータは、単一の統合された出力513(例えば、出力ポート)を用いてよい。ハードウェアアクセラレータ504は、以下の図(例えば、図7)に示される回路を含んでよい。
一実施形態において、入力509に対する単一の構成ビットは、ChaCha(例えば、ストリーム暗号)モードとBlake(例えば、ハッシュ関数)モードとからオペレーションのモードを選択する。ChaChaモードの一実施形態において、入力は、(例えば、256ビット)キー、(例えば、96ビット)ノンス及び(例えば、32ビット)初期のカウント値を含む。ある実施形態において、(例えば、6ビット)(例えば、構成)値は、ハードウェアアクセラレータ504がChaCha暗号化規格に従って実行するラウンド数を示す。したがって、特定のハードウェアアクセラレータは、あらゆる脆弱性を克服するために、ラウンド数を変更する(例えば、増やす又は減らす)ように柔軟性を提供する。一実施形態において、ハードウェアアクセラレータは、ChaCha暗号化規格オペレーションの20ラウンドを実行することがデフォルトで設定されている。以下の表1は、ChaCha状態機構の実施形態を説明する。
一実施形態において、ChaCha(例えば、ChaCha20)は、暗号化の20ラウンドごとに、(例えば、図3におけるアクセラレータ304の出力303から、又は、図5におけるアクセラレータ504の出力503(又は513)から)(例えば、512ビット)キーストリームを生成するストリーム暗号である。ある実施形態において、キーストリームは、暗号化テキストを取得するために、平文を用いてXORがとられる。ある実施形態において、キーストリームの計算は、以下の表1に示されるように、複数の要素(例えば、16×32ビットワード)に分割され、4×4行列のデータ(例えば、32ビットワード)として編成される(例えば、512ビット)状態に対して作用する。
一実施形態において、ChaCha状態の開始要素は、
1.定数(「C0、C1、C2及びC3」)−C0からC3は、暗号化の20ラウンド毎の後の初期化された(例えば、32ビット)定数である、
2.キー(「N」)−(例えば、256ビット)秘密キー、
3.ブロックカウンタ(「BC」)−暗号化の20ラウンド毎にインクリメントされる(例えば、32ビット)ブロックカウンタ、
4.ノンス(「N」)−(例えば、96ビット)ノンス又は初期化ベクトル
を含む。
一実施形態において、表1からのデータは、例えば、データを用いるオペレーションをハードウェアアクセラレータにオフロードしているハードウェアコンポーネントにより、(例えば、単一の)パックドデータ(例えば、ベクトル)レジスタにロードされる。表1は、各データ要素に対する例示的な要素の位置を含む。2次元マトリクスにおいて示されるが、データは、単一次元のアレイ(例えば、ベクトル)に格納されてよい。マトリクス表記は、ここでは、なぜ一部のラウンド(例えば、クウォータラウンド)が、(例えば、表1のマトリクスの列からのデータのサブセットを用いる)列ラウンドと称されており、一方、その他が、(例えば、表1のマトリクスの対角線からのデータのサブセットを用いる)対角線ラウンドと称されるかを示すために用いられている。ハードウェアアクセラレータは、そのオペレーションを実行するために、上記のデータ(例えば、ハードウェアアクセラレータに結合されたベクトルレジスタにロードされるデータ)を用いてよい。ハードウェアアクセラレータは、ラウンド(又は、ラウンドの一部、例えば、ラウンドの4分の1(クウォータラウンド))を実行する(例えば、特化型)回路、例えば、図6に示すようなChaChaクウォータラウンド回路、又は、図7に示すような統合されたChaChaクウォータラウンド/Blakeラウンド回路を用いてよい。
ChaCha暗号化規格に関する(例えば、主な)オペレーションは、クウォータラウンド(Qラウンド)操作である。Blake暗号化ハッシュ関数の実施形態では、ChaChaクウォータラウンド操作と同様のラウンド操作を有するChaCha暗号化規格に基づいてもよい。構成可能なアクセラレータは、(例えば、図5における入力501及び入力505により示されるように、)(例えば、512ビット)Blake入力値及び(例えば、384ビット)ChaCha入力値に対して2つの別個の入力ポートを有することができる、又は、代わりに、(例えば、図5における統合された入力511により示されるような)共通の(例えば、512ビット)入力を共有することができ、例えば、キー、ノンス、初期カウンタ値はChaChaモードの間に共通の入力から抽出される。同様に、アクセラレータは、(例えば、図5における出力503及び出力507により示されるような)2つのモードに対して2つの別個の出力ポートを有してよい、又は、代わりに、(例えば、図5における統合された出力513により示されるような)共通の512ビットの出力ポートを共有してもよい。ある実施形態において、アクセラレータ(例えば、共通の512ビット入力/出力(I/O)バス)に対する結合(例えば、入力及び出力)は、選択されたモードへの入力と同様に、例えば、オペレーションの終了時のサンプリングされた出力を提供する。Qラウンドに関する例示的な論理回路の実装は、図6に示されるようなものである。
図6は、本開示の実施形態に係るChaChaクウォータラウンド回路600を示す。示される回路600は、(例えば、ここでは、値A、B、C、Dと称される)4つの入力値をそれぞれ受信する4つの入力(例えば、入力ポート)(602、604、606及び608)を含む。示される回路600は、(例えば、本明細書において値Anew、Bnew、Cnew及びDnewと称される)4つの出力値をそれぞれ出力する4つの出力(例えば、出力ポート)(652、654、656及び658)を含む。一実施形態において、回路600は、単一のサイクル(例えば、アクセラレータのサイクル)において、(例えば、暗号化標準に従う)その計算を実行する。回路600は、入力602から出力652へのデータパスA、入力604から出力654へのデータパスB、入力606から出力656へのデータパスC及び入力608から出力658へのデータパスDを含む。データパスAは、値Aと値Bとを加算してその出力上に成果としてそれを提供するように入力602及び入力604に結合される加算器610(例えば、モジュラ加算器)を含む。加算器610の出力は、加算器612(例えば、モジュラ加算器)の第1の入力に結合され、加算器612の第2の入力は、これらの入力値を加算してその出力652上に成果Anewとしてそれを提供するように、データパスBのローテート回路616の出力に結合される。データパスBは、これらの値のXORをとり、その出力上に成果としてそれを提供するように、入力604とデータパスCにおける加算器622からの出力とに結合される論理XOR回路614を含む。論理XOR回路614の出力は、その値を(例えば、12ビット左に)ローテートさせてその出力上に成果としてそれを提供する(例えば、12ビット、左)ローテート回路616の入力に結合される。ローテート回路616の出力は、論理XOR回路618の第1の入力に結合され、論理XOR回路618の第2の入力は、これらの値を加算してその出力上に成果としてそれを提供するデータパスCにおける加算器624の出力に結合される。論理XOR回路618の出力は、その値を(例えば、7ビット左に)ローテートさせてその出力654上に成果Bnewとしてそれを提供する(例えば、7ビット、左)ローテート回路620の入力に結合される。データパスCは、これらの値を加算してその出力上に成果としてそれを提供するように、入力606とデータパスDのローテート回路628の出力とに結合される加算器622(例えば、モジュラ加算器)を含む。加算器622の出力は、加算器624(例えば、モジュラ加算器)の第1の入力に結合され、加算器624の第2の入力は、これらの入力値を加算して、その出力656上に成果Cnewとしてそれを提供するようにデータパスDのローテート回路632の出力に結合される。データパスDは、これらの値のXORをとり、その出力上に成果としてそれを提供するように、入力608とデータパスAにおける加算器610からの出力とに結合される論理XOR回路626を含む。論理XOR回路626の出力は、その値を(例えば、16ビット左に)ローテートさせてその出力上に成果としてそれを提供する(例えば、16ビット、左)ローテート回路628に結合される。ローテート回路628の出力は、論理XOR回路630第1の入力に結合され、論理XOR回路630の第2の入力は、これらの値を加算してその出力上に成果としてそれを提供するデータパスAにおける加算器612の出力に結合される。論理XOR回路630の出力は、その値を(例えば、8ビット左に)ローテートさせてその出力658上に成果Dnewとしてそれを提供する(例えば、8ビット、左)ローテート回路632の入力に結合される。
ある実施形態において、モジュラ加算器は、成果Xがモジュラス(例えば、232又は264のモジュラス)より小さい(又は、これに等しい)場合、成果Xに対する実際の成果を出力し、そうでない場合は、出力X=Xモジュラス(例えば、232又は264のモジュラス)である。ある実施形態において、論理XOR回路は、その入力が異なる(一方が真であり、他方が偽である)場合のみ真値(例えば、1)を出力し、そうでない場合、偽値(例えば、ゼロ)を出力する。一実施形態において、論理XOR回路は、XORゲート又は他の論理回路実装である。ある実施形態において、ローテート回路は、いずれのビットも破棄することなく、その入力値(例えば、複数のビット)に対する循環シフト(例えば、破棄される代わりに、一端から他端へのラップアラウンド)を実行する。ローテート回路は、所与のビット数に対する右ローテート又は左ローテートを実行してよく、例えば、図6におけるローテート回路616は、例えば、制御回路からの制御値に基づいて12ビットの左ローテートを実行する。ある実施形態において、シフト回路は、その入力値(例えば、複数のビット)に対するシフトを実行して、端部から落ちるいずれかのビットを破棄する。
ある実施形態において、Qラウンド回路600は、A、B、C、Dという名称の4つの(例えば、それぞれ32ビット)入力に対して演算を行い、4直列加算(モジュロ232)、XOR及びローテート操作から構成される。本実施形態におけるQラウンド回路600の出力は、ChaCha状態の入力要素を更新するために用いられる4つの新たに算出された(例えば、32ビット)値Anew、Bnew、Cnew及びDnewである。一実施形態において、制御回路は図8における制御回路806である。
図7は、本開示の実施形態に係る統合されたChaChaクウォータラウンド及びBlakeラウンド回路700を示す。示される回路700は、(例えば、ここでは、値A、B、C、Dと称される)4つの入力値をそれぞれ受信する4つの入力(例えば、入力ポート)(702、704、706及び708)を含む。図6における回路600とは対照的に、示される回路700は、さらに、マルチプレクサ701、加算器703(例えば3つ又はそれより多くの入力を加算するための桁上げ保存加算器)、マルチプレクサ705、加算器707(例えば、3つ又はそれより多くの入力を加算するための桁上げ保存加算器)及びマルチプレクサを制御する制御線を含む。示されるマルチプレクサ701は、Blake状態(例えば、32'b0)の第1のサブセット(例えば、32ビット)及び第1のメッセージ+定数値のうちの一方をその出力として選択する、例えば、図5を参照。制御線(Blake選択)は、例えば、制御回路(例えば、図8における制御回路806)により提供される値によって、これらの入力から選択する。示されるマルチプレクサ701は、Blake状態(例えば、32'b0)の第1のサブセット(例えば、32ビット)及び第2のメッセージ+定数値のうちの一方をその出力として選択する、例えば、図5を参照。制御線(Blake選択)は、例えば、制御回路(例えば、図8における制御回路806)により提供される値により、これらの入力から選択する。示される回路700は、(例えば、ここでは、値Anew、Bnew、Cnew及びDnewと称される)4つの出力値をそれぞれ出力する4つの出力(例えば、出力ポート)(752、754、756及び758)を含む。一実施形態において、回路700は、単一のサイクル(例えば、アクセラレータのサイクル)において、(例えば、暗号化標準に従う)その計算を実行する。回路700は、入力702から出力752へのデータパスA、入力704から出力754へのデータパスB、入力706から出力756へのデータパスC及び入力708から出力758へのデータパスDを含む。データパスAは、その出力として、Blake状態(例えば、32'b0)の第1のサブセット(例えば、32ビット)及び第1のメッセージ+定数値のうちの一方を選択するマルチプレクサ701を含む。マルチプレクサ701の出力は、第1の入力として、加算器703(例えば、3つ又はより多くの入力を加算するための桁上げ保存加算器(CSA))に結合され、入力702及び入力704も、これらの値を加算して成果としてそれを提供する加算器703に結合される。CSA加算器703の桁上げ及び保存出力は、加算器710(例えば、モジュラ加算器)に入力されてよく、加算器710は、その出力上に成果としてそれを提供する。
一実施形態において、ChaChaモードでは、2つの値(A及びB)のみが加算されるが、Blakeモードでは、3つの値が加算されることになる。ある実施形態において、回路700は、これら3つの値の項を加算して、合計値及び桁上げ値の両方を生成する桁上げ保存加算器(例えば、CSA加算器703)を含む。合計値及び桁上げ値は、加算を完了し、最終的な合計を得るように加算器710により加算されてよい。ある実施形態において、ChaChaモードでは、CSA加算器703への3つの入力のうちの1つがゼロであり、したがって、CSA加算器703の出力は、A+Bの合計値/桁上げ値であり、それらは、AをBに加算した値を得るように、加算器710により共に加算される。
データパスAはまた、Blake状態(例えば、32'b0)の第1のサブセット(例えば、32ビット)及び第2の異なるメッセージ+定数値のうちの一方をその出力として選択するマルチプレクサ705を含む。マルチプレクサ705の出力は、第1の入力として、加算器707(例えば、3つ又はより多くの入力を加算するための桁上げ保存加算器)に結合され、加算器707の第2の入力は、加算器710からの出力に結合され、加算器707の第3の入力は、これらの値を加算して成果としてそれを提供する(例えば、12ビット、左又は右)ローテート回路716の出力に結合される。
一実施形態において、ChaChaモードでは、2つの値(A及びB)のみが加算されるが、Blakeモードでは、3つの値が加算されることなる。ある実施形態において、回路700は、3つの値の項を加算して、合計値及び桁上げ値の両方を生成する別の桁上げ保存加算器(例えば、CSA加算器707)を含む。合計値及び桁上げ値は、加算を完了し、最終的な合計を得るように加算器712により加算されてよい。ある実施形態において、ChaChaモードでは、CSA加算器707への3つの入力のうちの1つがゼロであり、したがって、CSA加算器707の出力は、A+Bの合計値/桁上げ値であり、それらは、AをBに加算した値を得るように、加算器712により共に加算される。
加算器712の出力は、データパスD内の論理XOR回路730の第1の入力に結合され、その出力752上に成果Anewとして提供される。データパスBは、これらの値のXORをとり、その出力上に成果としてそれを提供するように入力704とデータパスCにおける加算器722からの出力とに結合される論理XOR回路714を含む。論理XOR回路714の出力は、その値を(例えば、12ビット左又は右にそれぞれ)ローテートさせてその出力上に成果としてそれを提供する(例えば、12ビット、左又は右)ローテート回路716の入力に結合される。ローテート回路716の出力は、論理XOR回路718の第1の入力に結合され、論理XOR回路718の第2の入力は、これらの値を加算してその出力上に成果としてそれを提供するデータパスCにおける加算器724の出力に結合される。論理XOR回路718の出力は、その値を(例えば、7ビット左又は右にそれぞれ)ローテートさせてその出力754上に成果Bnewとしてそれを提供する(例えば、7ビット、左又は右)ローテート回路720の入力に結合される。データパスCは、これらの値を加算してその出力上に成果としてそれを提供するように、入力706とデータパスDのローテート回路728の出力とに結合される加算器722(例えば<モジュラ加算器)を含む。加算器722の出力は、加算器724(例えば、モジュラ加算器)の第1の入力に結合され、加算器724の第2の入力は、これらの入力値を加算してその出力756上に成果Cnewとしてそれを提供するように、データパスDのローテート回路732の出力に結合される。データパスDは、これらの値のXORをとり、その出力上に成果としてそれを提供するように、入力708とデータパスAにおける加算器710からの出力とに結合される論理XOR回路726を含む。論理XOR回路726の出力は、その値を(例えば、16ビット左又は右にそれぞれ)ローテートさせてその出力上に成果としてそれを提供する(例えば、16ビット、左又は右)ローテート回路728の入力に結合される。ローテート回路728の出力は、論理XOR回路730の第1の入力に結合され、論理XOR回路730の第2の入力は、これらの値を加算してその出力上に成果としてそれを提供するデータパスAにおける加算器712の出力に結合される。論理XOR回路730の出力は、その値を(例えば、8ビット左又は右にそれぞれ)ローテートさせてその出力758上に成果Dnewとしてそれを提供する(例えば、8ビット、左又は右)ローテート回路732の入力に結合される。
ある実施形態において、モジュラ加算器は、Xがモジュラス(例えば、232又は264のモジュラス)より小さい(又は、これに等しい)場合、成果Xに対する実際の成果を出力し、そうでない場合、出力X=Xモジュラス(例えば、232又は264のモジュラス)である。ある実施形態において、論理XOR回路は、その入力が異なる(一方が真であり、他方が偽である)場合のみ、真値(例えば、1)を出力し、そうでない場合、偽値(例えば、ゼロ)を出力する。一実施形態において、論理XOR回路は、XORゲート又は他の論理回路実装である。ある実施形態において、ローテート回路は、いずれのビットも破棄することなく、その入力値(例えば、複数のビット)に対する循環シフト(例えば、破棄される代わりに、一端から他端へのラップアラウンド)を実行する。ローテート回路は、所与のビット数に対する右ローテート又は左ローテートを実行してよく、例えば、図7におけるローテート回路716は、例えば、制御回路からの制御値に基づいて12ビットの左ローテートを実行する。ある実施形態において、シフト回路は、その入力値(例えば、複数のビット)に対するシフトを実行し、端部から落ちるいずれかのビットを破棄する。
ある実施形態では、Blakeモードにおいて、回路700は、4つの(例えば、×32ビット)値AからDの入力を含み、Qラウンドと同様の操作を経る。しかしながら、ある実施形態において、ハッシュ関数への入力メッセージ及びラウンド定数はまた、ラウンド操作中に、ラウンド関数の状態Aに2回加算され、及び/又は、ChaChaにおけるすべての左ローテート操作は、Blakeラウンド関数における右ローテート操作により置き換えられる。
Blakeモードにおいて、(例えば、512ビット)状態及び2つの追加のメッセージ+定数項は、(例えば、回路700を含む)ハードウェアアクセラレータから(例えば、プロセッサコアにより)外部で算出され、一次入力としてアクセラレータに提供されてよい。したがって、ChaCha Qラウンド回路は、図7に示されるように、Blakeラウンド関数をサポートするように拡張されてよい。一実施形態において、統合されたデータパスは、オペレーションのモードに応じて、32'b0とメッセージ+定数とから選択する。ある実施形態において、ローテート回路は、各XOR関数の出力時に2:1マルチプレクサを導入することにより、左又は右ローテートを実行するように構成される。図7に関して説明した追加のコンポーネントのうちの1つ又は複数の結果として、構成可能なアクセラレータの実施形態では、データパスにわずかな変更を伴って、ChaCha暗号及びBlakeハッシュ関数の両方をサポートできる。
表1を再び参照すると、ある実施形態において、ChaCha暗号化規格(例えば、単一の)ラウンド操作は、例えば、直列加算、XOR及びシフト演算を有する4つのクウォータラウンド(Qラウンド)を含む。一実施形態において、各Qラウンドは、表1の列要素又は対角要素の中から選択された4つの値(例えば、32ビット値、すなわち、ワード)を操作して、4つの新たな値(例えば、32ビット値)を生成して、Qラウンド入力を置き換える。ある実施形態において、ChaCha演算の第1ラウンドは、表1の列データに沿って演算が行われ、第1ラウンドの4つのQラウンドは、
1.Qラウンド(0、4、8、12)(例えば、表1の左から1列目)
2.Qラウンド(1、5、9、13)(例えば、表1の左から2列目)
3.Qラウンド(2、6、10、14)(例えば、表1の左から3列目)
4.Qラウンド(3、7、11、15)(例えば、表1の左から4列目)
である。これらの実施形態のうちのある実施形態において、ChaCha演算の第2ラウンドは、表1の対角要素に対して演算を行い、4つのQラウンドの第2ラウンドは、
5.Qラウンド(0、5、10、15)
6.Qラウンド(1、6、11、12)
7.Qラウンド(2、7、8、13)
8.Qラウンド(3、4、9、14)これらの実施形態のうちのある実施形態では、後続のラウンドにおいて、Qラウンドへの入力は、上記のQラウンド1−8を通じて繰り返し(例えば、入力は、列及び対角要素に沿って交互に選択され)、その結果、例えば、20ラウンドを実行するために、上記の8つのクウォータラウンドについての10イタレーションが、その順番で実行される。ChaCha暗号化規格(例えば、ChaCha20)のある実施形態では、総ラウンド数(例えば、ChaCha20に関して20ラウンド)の終了時に、ChaCha状態は、平文を用いてXORがとられる512ビットキーストリームを生成するために、初期状態に加えられる。ChaCha演算の総ラウンド数(例えば、20ラウンド)の完了時に、ChaCha状態は、定数、キー、ノンス及びブロックカウンタ(BC)のインクリメントされた値を用いて、(例えば、表1及び関連する文章に従って)再初期化される。Blake演算のある実施形態において、各ラウンド関数は、4つの列段階及び4つの対角線段階から構成され、2ラウンドにわたって実行されるChaChaにおける8つのQラウンド操作と合致する。よって、以下のアーキテクチャの最適化はまた、アクセラレータがBlakeモードで動作しているときのクリティカルパスを減らす。
図8は、本開示の実施形態に係るハードウェアアクセラレータ800の回路を示す。一実施形態において、(例えば、ベクトル)(例えば、16×32ビット)レジスタ802は、暗号化規格(例えば、ChaCha)ラウンドのワーキング状態を格納する。各暗号化(例えば、ChaCha20の各20ラウンド)の開始時に、例えば、(例えば、表1及び関連する文章に従って)定数、秘密キー、更新されたブロックカウント及びノンスに対する暗号化規格(例えば、ChaCha)状態が初期化される。一実施形態において、その状態は、入力808を通じて提供される。ある実施形態における暗号化に関する(例えば、各ラウンドが4回のイタレーションから成る)後続のラウンドでは、ラウンド及びイタレーション値に基づく暗号化規格(例えば、ChaCha)計算のために、列又は対角要素のいずれか一方が選択される。ある実施形態において、暗号化規格(例えば、ChaCha)の(例えば、4×32ビット)出力は、更新された入力要素を用いており、一方、残り(例えば、12×32ビット)状態は、変化しないままである。
ハードウェアアクセラレータ800は、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求しているプロセッサ又は他のコンポーネントから入力値を受信する入力808(例えば、入力ポート)を含み、例えば、暗号化の第1のイタレーション(例えば、Qラウンド)前に、入力808から供給し、かつ、暗号化の他のイタレーションのためにマルチプレクサ816から供給する(例えば、異なる入力808が必要とされるまで、例えば、ChaCha20の20ラウンドごとに)ために制御回路806がマルチプレクサ818に制御値を送信する。一実施形態において、追加のマルチプレクサ820(又は、並列のマルチプレクサのセット)(例えば、少なくとも16個のデータ入力を有する)は、例えば、入力データに対するラウンド(例えば、Qラウンド)回路の第1のオペレーション前に、(例えば、暗号化の初期の)入力値を(例えば、任意の)所望の順序(例えば、図12に関して以下に説明される順序)に置くために提供される。一実施形態において、マルチプレクサ818は、例えば、入力データに対するラウンド(例えば、Qラウンド)回路の第1のオペレーションの前に、入力値を(例えば、任意の)所望の順序(例えば、図12に関して以下で説明される順序)に置くために、複数の入力(例えば、少なくとも16個の入力)を含む。ハードウェアアクセラレータ800は、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求したプロセッサ又は他のコンポーネントに出力値を提供する出力810(例えば、出力ポート)を含む。示される出力810は、例えば、入力値を格納する、及び/又は、暗号化演算のワーキング状態値を格納するベクトルレジスタ802に結合される。示される実施形態において、制御回路806は、要求された暗号化演算(例えば、所望のラウンド数)が完了したことを示す準備ストレージ812内の準備値を送信してよく、例えば、その結果、ハードウェアアクセラレータに暗号化演算を実行させることを要求したプロセッサ又は他のコンポーネントは、準備ストレージ812をモニタして、(例えば、出力810を介して)ベクトルレジスタ802から値をロードできる。一実施形態において、準備ストレージ812内の準備値の設定することで、ハードウェアアクセラレータ800に、(例えば、出力810を介して)ベクトルレジスタ802からの値を、ハードウェアアクセラレータに暗号化演算を実行させることを要求したプロセッサ又は他のコンポーネントへと送信させる。
ある実施形態において、制御回路806は、制御値(例えば、マルチプレクサ制御値)を提供して、暗号化標準に従って(例えば、イタレーション)を制御する(例えば、上記で説明したQラウンド1−8を実行する)ために含まれる。一実施形態において、ハードウェアアクセラレータ800は、ラウンド回路804(例えば、図6のQラウンド回路600又は図7の統合されたQラウンド/Blakeラウンド回路700)を含む。制御回路806は、ラウンド回路804(例えば、ChaChaクウォータラウンド回路600又は統合されたChaChaクウォータラウンド及びBlakeラウンド回路700において用いられるローテート方向及び/又は値を提供する、及び/又は、統合されたChaChaクウォータラウンド及びBlakeラウンド回路700において用いられるマルチプレクサの入力及び制御値などを提供する)制御線(点線として示される)を含んでよい。一実施形態において、(例えば、ある実施形態ではシングルマルチプレクサであり得る)マルチプレクサ814のセットは、例えば、制御回路806からの制御値に従って、データソースをベクトルレジスタ802からラウンド回路804の入力に切り替える。一実施形態において、(例えば、ある実施形態では、シングルマルチプレクサであり得る)マルチプレクサ816のセットは、例えば、制御回路806からの制御値に従って、ラウンド回路804から供給されたデータをベクトルレジスタ802に切り替える。一実施形態において、図8のマルチプレクサ816(例えば、デマルチプレクサ)は、例えば、マルチプレクサ916A又はマルチプレクサ916Bが同じ(例えば、単一の)回路である場合、マルチプレクサ916A又はマルチプレクサ916Bである。一実施形態において、制御回路806は、ラウンド(例えば、Qラウンド)操作の複数サイクルを実行するために、複数の値を含む。
図9は、本開示の実施形態に係るハードウェアアクセラレータ900の暗号化演算についてのラウンドの複数サイクル(例えば、Qラウンド)を示す。ある実施形態において、制御回路(例えば、図8からの制御回路806)は、制御値(例えば、マルチプレクサ制御値)を提供して、暗号化標準に従って(例えば、イタレーション)を制御する(例えば、上記で説明したQラウンド1−8を実行する)ために含まれる。一実施形態において、マルチプレクサ916A及びマルチプレクサ916Bは別個の回路である。別の実施形態において、マルチプレクサ916A及びマルチプレクサ916Bは同じ回路であり、その結果、例えば、図9では、同じ回路を通じてループされる複数のイタレーション(例えば、Qラウンド)を示す。マルチプレクサ916A及びマルチプレクサ916Bが同じ(例えば、単一の)回路である実施形態において、マルチプレクサは、図8のマルチプレクサ816(例えば、デマルチプレクサ)として用いられてよい。一実施形態において、マルチプレクサ914A及びマルチプレクサ914Bは別個の回路である。別の実施形態において、マルチプレクサ914A及びマルチプレクサ914Bは同じ回路であり、その結果、例えば、図9では、同じ回路を通じてループされる複数のイタレーション(例えば、Qラウンド)を示す。マルチプレクサ914A及びマルチプレクサ914Bが同じ(例えば、単一の)回路である実施形態において、マルチプレクサは、図8のマルチプレクサ814(例えば、デマルチプレクサ)として用いられてよい。一実施形態において、Qラウンド回路904A及びQラウンド回路904Bは別個の回路である。別の実施形態において、Qラウンド回路904A及びQラウンド回路904Bは同じ回路であり、その結果、例えば、図9では、同じ回路を通じてループされる複数のイタレーション(例えば、Qラウンド)を示す。実施形態において、Qラウンド回路904A及びQラウンド回路904Bは、同じ(例えば、単一の)回路であり、Qラウンド回路は、図8のラウンド回路804として用いられてよい。ベクトルレジスタ902A、ベクトルレジスタ902B及びベクトルレジスタ902C(又は、これらの任意の組み合わせ)は、同じベクトルレジスタであってよい。ベクトルレジスタ902A、ベクトルレジスタ902B及びベクトルレジスタ902C(又は、これらの任意の組み合わせ)が同じ(例えば、単一の)レジスタである実施形態において、ベクトルレジスタ回路は、図8のベクトルレジスタ802として用いられてよい。R0〜R15は、ベクトルレジスタが16個の要素を含む実施形態を示すことに留意する。以下の実施形態において、要素内に示される数字(例えば、サイクル0での要素R0、R1、R2及びR3における0、1、2及び3のそれぞれ)は、表1からの値を示し、例えば、0は定数C0であり、12はBC[ビット31:0]であるが、ここでは、実際の値そのものではなく、分かりやすくするためだけのものであることに留意する。ある実施形態において、ベクトルレジスタは、実際の値を格納する。一実施形態において、例えば、入力データに対するラウンド(例えば、Qラウンド)回路の第1のオペレーションの前に、(例えば、それぞれが少なくとも16個のデータ入力を有する)並列のマルチプレクサ920A及び920Bの任意の追加的なセットは、(例えば、暗号化の初期の)入力値を(例えば、任意の)所望の順序(例えば、図12に関して以下に説明される順序)に置くために提供される。一実施形態において、マルチプレクサ920A及びマルチプレクサ914Bは別個の回路である。別の実施形態において、マルチプレクサ920A及びマルチプレクサ920Bは同じ回路であり、その結果、例えば、図9では、同じ回路を通じてループされる複数のイタレーション(例えば、Qラウンド9を示す。マルチプレクサ920A及びマルチプレクサ920Bが同じ(例えば、単一の)回路である実施形態において、マルチプレクサは、図8のマルチプレクサ820又はマルチプレクサ818として用いられてよい。一実施形態において、マルチプレクサ920A及び/又はマルチプレクサ920Bの新しい(例えば、右端の入力)は、例えば、制御回路(例えば、図8の制御回路806)により、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求したプロセッサ又は他のコンポーネントから入力値を受信し、制御回路は、制御値をマルチプレクサ920A及び/又はマルチプレクサ920Bに送信して、(i)例えば、暗号化の第1のイタレーション(例えば、Qラウンド)の前に、新しい入力から(例えば、図8の入力808から)データを供給する、及び/又は、(ii)(例えば、異なる「新たな」入力が、例えば、ChaCha20に対して20ラウンドごとに、必要とされるまで)暗号化の他のイタレーションのために、マルチプレクサ916A及び/又はマルチプレクサ916Bからそれぞれデータを供給する。
以下では、例としてChaCha Qラウンドについて説明するが、他の実装、例えば、Blakeラウンドなどが予見される。
サイクルゼロにおけるQラウンド(0、4、8、12)(例えば、表1の左から1列目)に関する一実施形態においてChaCha状態は、表1の要素0−15の順序でベクトルレジスタ902Aに格納される。Qラウンド回路904Aは、サイクル1に関するデータ要素0、4、8及び12に対して演算を行い、マルチプレクサは、(例えば、ChaChaクウォータラウンド回路600又は統合されたChaChaクウォータラウンド及びBlakeラウンド回路700に関する値A、B、C、Dとしてそれぞれ)値を、ベクトルレジスタ902AのR0、R4、R8及びR12からQラウンド回路904Aへと出力する。Qラウンド回路904Aは、次に、回路に従ってデータに対する演算を行って、新たな値(本明細書において、値Anew、Bnew、Cnew及びDnewと称される)を生成する。新たな値は、次に、(ベクトルレジスタ902Aと同じ物理レジスタであり得る)ベクトルレジスタ902BのR0、R4、R8及びR12に格納される。ベクトルレジスタ902Aの(例えば、R0、R4、R8及びR12からの値を含んでいない)他の値は、ベクトルレジスタ902B内の同じデータ要素の位置に格納されてよい(例えば、オペレーションがそれらに対してなんら実行されることなく、例えば、単に出力と同じ値入力を渡すだけである)。ベクトルレジスタ902BのR0、R4、R8及びR12に対して値が更新されているが、要素内に示される数字(例えば、サイクル1での要素R0、R4、R8及びR12における0、4、8及び12のそれぞれ)は、その値が、表1からの各値に基づいていることを示し(例えば、ベクトルレジスタ902Bの要素0で格納される値Anewは、表1からAの入力が定数C0であるということに基づいており、ベクトルレジスタ902Bの要素4で格納される値Bnewは、表1からBの入力がキー[ビット255:224]であることに基づいており、ベクトルレジスタ902Bの要素8で格納される値Cnewは、表1からCの入力がキー[ビット127:96]であることに基づいており、ベクトルレジスタ902Bの要素12で格納される値Dnewは、表1からDの入力がBC[ビット31:0]であることに基づいている)が、ここでは、実際の値そのものではなく、分かりやすくするためだけのものであることに留意する。ある実施形態において、ベクトルレジスタは、実際の値を格納する。
Qラウンド回路904Bは、サイクル2に関するデータ要素1、5、9及び13に対して演算子、マルチプレクサは、(例えば、ChaChaクウォータラウンド回路600又は統合されたChaChaクウォータラウンド及びBlakeラウンド回路700に関する値A、B、C、Dとしてそれぞれ)値を、ベクトルレジスタ902BのR1、R5、R9及びR12からQラウンド回路904Bへと出力する。Qラウンド回路904Bは、次に、回路に従ってデータに対する演算を行って、新たな値(本明細書において、値Anew、Bnew、Cnew及びDnewと称される)を生成する。新たな値は、次に、(ベクトルレジスタ902A及び/又はベクトルレジスタ902Bと同じ物理レジスタであり得る)ベクトルレジスタ902CのR1、R5、R9及びR13に格納される。ベクトルレジスタ902Bの(例えば、R1、R5、R9及びR13からの値を含んでいない)他の値は、ベクトルレジスタ902C内の同じデータ要素の位置に格納されてよい(例えば、それらに対してオペレーションがなんら実行されることなく、例えば、単に出力と同じ値入力を渡すだけである)。ベクトルレジスタ902CのR1、R5、R9及びR13に対して値が更新されているが、要素内に示される数字(例えば、サイクル2での要素R1、R5、R9及びR13における1、5、9及び13のそれぞれ)は、その値が、表1からの各値に基づいていることを示し(例えば、ベクトルレジスタ902Cの要素1で格納される値Anewは、表1からAの入力が定数C1であることに基づいており、ベクトルレジスタ902Cの要素5で格納される値Bnewは、表1からBの入力がキー[ビット223:192]であることに基づいており、ベクトルレジスタ902Cの要素9で格納される値Cnewは、表1からCの入力がキー[ビット95:64]であることに基づいており、ベクトルレジスタ902Cの要素13で格納される値Dnewは、表1からDの入力がノンス[ビット95:64]であることに基づいている)が、ここでは、実際の値そのものではなく、分かりやすくするためだけのものであることに留意する。ある実施形態において、ベクトルレジスタは、実際の値を格納する。
これらの実施形態では、表1から要素の位置0−15がベクトルレジスタ内の物理レジスタ要素と合致することに留意する。
図10は、本開示の実施形態に係る、図9におけるハードウェアアクセラレータ904A/904Bのクリティカルデータパス1000を示す。クリティカルという用語は、最も長い時間を要する、例えば、横断するために最も多くのゲートステージを含むパスを指し得る。
図9における上記の実施例では、初期のChaCha状態は、表1に示される4×4行列に適合する順序で、(例えば、16×32ビット)ベクトルレジスタ(902A〜902C)に格納される。(例えば、サイクル1の開始時における)サイクル1において、Qラウンド(0、4、8、12)に対する第1の入力は、レジスタ要素0、1、2及び3における値のサブセットから選択されており、したがって、例えば、図8におけるマルチプレクサ814Aとして示されるような、(例えば、4:1)マルチプレクサ914A(1)を用いて、ラウンド(例えば、Qラウンド)回路に入力を供給する。他の3つの入力はまた、914において、例えば、少なくとも4つのゲートステージをクリティカルパスに加える(例えば、4:1)マルチプレクサを経る。さらに、示される実施形態ではQラウンドの出力時に、Qラウンドのサブセット(例えば、4つの)入力値のみが更新される一方、残りの12の状態は変化しないままである。ある実施形態において、逆多重化オペレーションは、例えば、クリティカルパスに追加の少なくとも2ゲートステージの遅れを加える各状態レジスタの入力において、(例えば、2:1)マルチプレクサを利用する。一実施形態において、Qラウンド計算におけるクリティカルパスは、ベクトルレジスタ902A(又は902B)からの(例えば、図6又は図7における)入力A又はBから開始し、例えば、図10に示されるように、入力マルチプレクサ914A(又は914B)、Qラウンド回路904A(又は904B)及び出力マルチプレクサ916A(又は916B)を通じて約34ゲートステージに広がるBnewの計算で終了する。任意選択的に、(例えば、少なくとも16個のデータ入力を有する)並列のマルチプレクサ920Aの追加セットは、例えば、入力データに対するラウンド(例えば、Qラウンド)回路の第1のオペレーションの前に、(例えば、暗号化の初期の)入力値を(例えば、任意の)所望の順序(例えば、図12に関して以下に説明される順序)に置くために提供される。
ある実施形態において、クリティカルパスにおけるゲートステージの数を減らすことが所望され得る。例えば、ソーシングマルチプレクサ(例えば、図9のマルチプレクサ914及び/又は図8のマルチプレクサ820)は、例えば、ChaCha暗号化規格に関して上述した8つのQラウンド操作に従って、Qラウンド回路に要素を供給するために、入力値を(例えば、表1の0〜15のフォーマットの順序から)、所望の順序でQラウンド回路に供給する。本明細書におけるある実施形態では、例えば、図11及び図12に示されるように、複数サイクル(例えば、各ラウンドの最後のサイクルを除くすべて)における同じレジスタ内のQラウンドの(例えば、4つ、例えば、32ビット)入力値を集める(cluster)列及び対角線自動アラインメント技術を推定する回路を用いる。例えば、図11〜図16に示される実施形態では、入力値をリオーダするために用いられるクリティカルパス内の(例えば、4:1)マルチプレクサを取り外す(例えば、図9及び図10のマルチプレクサ914A及び914Bを取り外す)。
ある実施形態において、初期化の間、(例えば、16×32ビット)ChaCha入力値(例えば、状態)は、列配向様式で(例えば、512ビット)レジスタに格納され、その結果、レジスタ[例えば、ビット511:384]は、ラウンド1の第1Qラウンドに入る(例えば、4×32ビット)状態を格納する。同様に、レジスタ[例えば、ビット383:256]、レジスタ[例えば、ビット255:128]及びレジスタ[127:0]は、ラウンド1のQラウンド2、3及び4に対する入力ワードをそれぞれ含む。サイクル1において、Qラウンド1の計算の後に、出力は、レジスタ[例えば、ビット127:0]に格納され、残りのビットは、レジスタ[511:384]内の次の(例えば、4×32ビット)入力を自動的にアラインするために、(例えば、同じビット量分、例えば、128位置分)左にシフトされる。本実施形態におけるQラウンド論理への入力は、状態レジスタの同じ128ビットから常に得られるので、(例えば、4:1)ソーシングマルチプレクサの使用が除外される。第4Qラウンド操作の終了時に、Qラウンドの出力及び残りの状態は、本実施形態において、例えば、レジスタ[例えば、ビット511:384]に格納された次のQラウンドへの入力を用いて、次の対角線に配向されたラウンド操作用にデータ全体(例えば、512ビット)をアラインするために、レジスタに適切にシャッフルされる。次の3つのサイクルは、例えば、図12に示されるように、列配向ラウンドと同様のQラウンド操作及び状態シフト/格納を実行してよい。第4Qラウンドの終了時に、状態レジスタのコンテンツ及びQラウンドの出力は、列ラウンド操作用に状態をアラインするために適切にシャッフルされてよい。ある実施形態において、Qラウンドの入力時に、(例えば、4:1)ソーシングマルチプレクサを除外することで、クリティカルパスを10%低減する。
図11は、本開示の実施形態に係るハードウェアアクセラレータ1100の回路を示す。図12は、本開示の実施形態に係る図11のハードウェアアクセラレータ1100の暗号化演算についてのラウンドの複数サイクル1200を示す。
一実施形態において、ベクトルレジスタ1102は、示される要素の順序、すなわち、0、4、8、12、1、5、9、13、2、6、10、14、3、7、11、15で、表1からの値を用いてロードされる(例えば、プロセッサにより入力される)。これらの値参照は、例えば、これら独自の各データ値を有する表1の要素への参照に過ぎない、又は、その入力データに対するQラウンド操作により形成される新しいデータへの参照に過ぎない(例えば、値0が定数C0を記号化し、値AとしてQラウンド回路に入力され、少なくともC0に基づいて生成されるAnewは、回路を通じたデータフローを示すために、本図において値0とも称される)。R0〜R15は、16個のレジスタ要素自体への参照であり、例えば、これらの要素に格納されるデータではない。ハードウェアアクセラレータ1100は、ベクトルレジスタ1102を含む。ベクトルレジスタ1102は、図11において2度示されており、回路がそれ自体へとフィードバックし得ることを示す。例えば、マルチプレクサに対するR0〜R15にラベリングされた入力は、(例えば、ある実施形態における図11の下半分にあるベクトルレジスタ1102からデータを供給する)ベクトルレジスタ1102のレジスタ要素の位置を示し得る。別の実施形態において、図11の上部における任意選択的なベクトルレジスタ1102は、図11の下半分にあるベクトルレジスタ1102と同じハードウェアインスタンスではなく、例えば、マルチプレクサ1120の左側の入力は、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求しているプロセッサ又は他のコンポーネントから新しいデータを供給するために、入力(例えば、図8の入力808)に結合されてよい。一実施形態において、制御回路(例えば、図8の制御回路806)は、制御値をマルチプレクサ1120に送信して、(i)(例えば、暗号化の第1のイタレーション(例えば、Qラウンド)の前に、)それらの左側の入力から(例えば、図8の入力808から)新しいデータを供給し、及び/又は、(ii)(例えば、異なる「新たな」入力が、例えば、ChaCha20に対して20ラウンドごとに、必要とされるまで)暗号化の他のイタレーションのために、図11の下半分にあるQラウンド回路1104及び/又はベクトルレジスタ1102から反復データを供給する。
図11の上部に示されるベクトルレジスタ1102は、表1に関して列配向における、(例えば、図12のサイクル0で)ベクトルレジスタへとロードされるときの初期値を示す。例えば、レジスタストレージ位置R0、R1、R2及びR3内の要素0、4、8及び12はそれぞれ、サイクルゼロにおいて、表1からの値を示し、例えば、0は定数C0であり12はBC[ビット31:0]であるが、ここでは、実際の値そのものではなく、分かりやすくするためだけのものである。本実施形態において、Qラウンド回路1104(例えば、図6からは、Qラウンド回路600又は図7からは、統合されたQラウンド/Blakeラウンド回路700)は、特定数の(例えば、すべての)Qラウンド(例えば、4より多いQラウンド)のために、ベクトルレジスタ1102の第1の端部における隣接要素からデータ値を受信し、例えば、暗号化演算のこれらのサイクルに対して、ベクトルレジスタ1102のR0からのデータ値を入力値Aとして、ベクトルレジスタ1102のR1からのデータ値を入力値Bとして、ベクトルレジスタ1102のR2からのデータ値を入力値Cとして、及び、ベクトルレジスタ1102のR3からのデータ値を入力値Dとして受信する。ある実施形態において、Qラウンド回路1104は、特定数の(例えば、列配向)Qラウンド(例えば、最初の3つのQラウンド)のために、成果値Anew、Bnew、Cnew及びDnewをベクトルレジスタ1102の他方、反対側に出力し、例えば、出力データ値Anewをベクトルレジスタ1102のR12に、出力データ値Bnewをベクトルレジスタ1102のR13に、出力データ値Cnewをベクトルレジスタ1102のR14に、及び、出力データ値Dnewをベクトルレジスタ1102のR15に格納する。例えば、図12のサイクル0からサイクル1への点線、サイクル1からサイクル2への点線、及び、サイクル2からサイクル3への点線で示されるように、R4〜R15の残りの値は、同じ特定数の(例えば、列配向)Qラウンド(例えば、最初の3つのQラウンド)のために、第2の端部から第1の端部へ、(例えば、Qラウンド回路1104により消費されるのと同じビット数)シフトされてよい。
1サイクル(例えば、サイクル3からサイクル4)において、異なるスキームが用いられる。例えば、Qラウンド回路1104は、特定数の(例えば、対角線配向)Qラウンド(例えば、4つのQラウンドの最後)のために、成果値Anew、Bnew、Cnew及びDnewを、ベクトルレジスタ1102の特定の(例えば、隣接していない)要素に出力し、例えば、出力データ値Anewをベクトルレジスタ1102のR12に、出力データ値Bnewをベクトルレジスタ1102のR9に、出力データ値Cnewをベクトルレジスタ1102のR6に、及び、出力データ値Dnewをベクトルレジスタ1102のR3に格納する。例えば、R4〜R15の残りの値は、(例えば、サイクル4におけるベクトルレジスタ1102に示されるように)完全対角線アラインメントを得るために、示されるパターン(例えば、サイクル3からサイクル4)に従って分散されてもよい。一実施形態において、前のサイクルからのデータが(例えば、クロック信号に基づいて)ラッチされた後すぐに新たなサイクルが始まる。
次に、次のQラウンド(例えば、上述した8つのラウンドのうちの5番)が始まってよく、例えば、Qラウンド回路1104(例えば、図6からは、Qラウンド回路600又は図7からは、統合されたQラウンド/Blakeラウンド回路700)は、特定数の(例えば、すべての)Qラウンド(例えば、上述した8つのうちのQラウンド1〜8)のために、ベクトルレジスタ1102の第1の端部における隣接要素からデータ値を受信し、例えば、暗号化演算のこれらのサイクルに対して、ベクトルレジスタ1102のR0からのデータ値を入力値Aとして、ベクトルレジスタ1102のR1からのデータ値を入力値Bとして、ベクトルレジスタ1102のR2からのデータ値を入力値Cとして、ベクトルレジスタ1102のR3からのデータ値を入力値Dとして受信する。ある実施形態において、Qラウンド回路1104は、特定数の(例えば、列配向)Qラウンド(例えば、これら次の3つのQラウンド5−7)のために、成果値Anew、Bnew、Cnew及びDnewをベクトルレジスタ1102の他方、反対側に出力し、例えば、出力データ値Anewをベクトルレジスタ1102のR12に、出力データ値Bnewをベクトルレジスタ1102のR13に、出力データ値Cnewをベクトルレジスタ1102のR14に、及び、出力データ値Dnewをベクトルレジスタ1102のR15に格納する。例えば、図12のサイクル4からサイクル5への点線で示されるように、R4〜R15の残りの値は、同じ特定数の(例えば、列配向)Qラウンド(例えば、次の3つのQラウンド5−7)のために、第2の端部から第1の端部へ、(例えば、Qラウンド回路1104により消費されるのと同じビット数)シフトされてよい。
マルチプレクサ1116のそれぞれへのQラウンド制御値(QRND)及び/又はマルチプレクサ1120のそれぞれへの新たな暗号化制御値(NEW_ENC)は、制御回路、例えば、図8の制御回路806から送信されてよい。例えば、どのQラウンドが実行されるかに従って、制御値は、それらのマルチプレクサに、入力値をそれらの各位置に出力させてよい、例えば、図12を参照。一実施形態において、マルチプレクサ1116は、Qラウンドのサブセット(例えば、4つのQラウンドのうちの最初の3つ)のために、(例えば、図12のサイクル0からサイクル1、サイクル1からサイクル2、サイクル2からサイクル3へと示されるような)列配向された値を供給し、残りのQラウンド(例えば、4つのQラウンドの4番目)のために、(例えば、図12のサイクル3からサイクル4へと示されるような)対角線に配向された値を供給する。一実施形態において、マルチプレクサ1120のそれぞれへの新たな暗号化制御値(NEW_ENC)は、暗号化演算に従って入力データを供給し、例えば、実行対象のオペレーションに従って、(複数の物理レジスタ又は単一の物理レジスタであり得る)ベクトルレジスタ1102の示される要素からデータを提供する。例えば、示されるマルチプレクサ1120(1)は、ベクトルレジスタ1102のレジスタ要素R1に結合される第1の入力と、ベクトルレジスタ1102のレジスタ要素R9に結合される第2の入力とを含み、(例えば、新たな暗号化であることを示す)第1の暗号化制御値(例えば、論理0)(NEW_ENC)は、マルチプレクサ1120(1)に、ベクトルレジスタ1102のレジスタ要素R1からマルチプレクサ1116(1)の入力へと値を出力させ、(例えば、新たな暗号化でないことを示す)第2の暗号化制御値(例えば、論理1)(NEW_ENC)は、マルチプレクサ1120(1)に、ベクトルレジスタ1102のレジスタ要素R9からマルチプレクサ1116(1)の入力へと値を出力させる。示される実施形態において、マルチプレクサ1116(1)の他の入力は、ベクトルレジスタ1102のレジスタ要素R5に結合される。一実施形態において、第1のマルチプレクサ制御値(例えば、論理1)は、マルチプレクサ1116(1)に、ベクトルレジスタ1102のレジスタ要素R5からベクトルレジスタ1102のレジスタ要素R1(例えば、Qラウンド回路1104の入力B)へと入力を出力させ、第2マルチプレクサ制御値(例えば、論理0)は、マルチプレクサ1116(1)に、マルチプレクサ1120(1)からベクトルレジスタ1102のレジスタ要素R1(例えば、Qラウンド回路1104の入力B)へと入力を出力させる(例えば、(例えば、上述した1〜8のパターンのうちの)Qラウンド回路1104がそのデータに対して実行するQラウンドパターンのどれかに従う)。
図12において、サイクル0からサイクル1、サイクル1からサイクル2、及び、サイクル2からサイクル3に関して、Qラウンドの出力値(例えば、Anew、Bnew、Cnew及びDnew)は、R0、R1、R2及びR3からそれぞれ生成され、R12、R13、R12及びR15にそれぞれ格納される。示される実施形態において、Qラウンド回路1104からの出力(例えば、Anew、Bnew、Cnew及びDnew)は、(例えば、マルチプレクサへの入力として)アクセラレータ1100にループバックされる。図12における中括弧内の数字は、ハードウェアのサイクル数又は異なるインスタンスを示し得る。
一実施形態において、初回のサイクル(例えば、新たな暗号化)に関して、ハードウェアアクセラレータ1100は、(例えば、制御値NEW_ENCとして論理1をアサートすることにより)並列のマルチプレクサ1120の第1のセットの左側の入力を(例えば、その順番におけるその要素0、4、8、12、1、5、9、13、2、6、10、14、3、7、11、15に関する表1からの値を最初に格納しているベクトルレジスタ1102に)供給し、(例えば、制御値QRNDとして論理0をアサートすることにより)並列のマルチプレクサの第2のセット(存在するならば)を通じてこれらの値をベクトルレジスタ1102(例えば、図11の下半分に示されるベクトルレジスタインスタンス)へと渡す(例えば、戻す)。
一実施形態において、Qラウンドの列配向された(例えば、第1、第2、第3、第5、第6又は第7)サイクルに関して、ハードウェアアクセラレータ1100は、図12に示されるようにデータを導き、例えば、(例えば、制御値NEW_ENCとして論理0をアサートすることにより)マルチプレクサ1120の右側の入力を選択してマルチプレクサ1120(0)、マルチプレクサ1120(4)、マルチプレクサ1120(8)及びマルチプレクサ1120(12)に対するベクトルレジスタ1102に値を渡し、残りのマルチプレクサ1120に対するマルチプレクサ1116に値を渡し、及び、(例えば、制御値QRNDとして論理1をアサートすることにより)マルチプレクサ1116の左側の入力を選択して、例えば、Qラウンド回路1104により演算されるこれらの値をベクトルレジスタ1102に提供する。論理0及び論理1は特定の機能と共に本明細書において説明されるが、それらは双方が入れ替わってもよい。
一実施形態において、Qラウンドの対角線配向された(例えば、第4又は第8)サイクルに関して、ハードウェアアクセラレータ1100は、図12に示されるようにデータを導き、例えば、(例えば、制御値NEW_ENCとして論理0をアサートすることにより)マルチプレクサ1120の右側の入力を選択してマルチプレクサ1120(0)、マルチプレクサ1120(4)、マルチプレクサ1120(8)及びマルチプレクサ1120(12)に対するベクトルレジスタ1102に値を渡し、及び、残りのマルチプレクサ1120に対するマルチプレクサ1116に値を渡し、及び、(例えば、制御値QRNDとして論理0をアサートすることにより)マルチプレクサ1116の右側の入力を選択して、例えば、Qラウンド回路1104により演算されるベクトルレジスタ1102にこれらの値を提供する。
ベクトルレジスタインスタンスは、中括弧内のサイクル数を用いて参照され得る。一実施形態において、これらは、同じベクトルレジスタ(例えば、図11のベクトルレジスタ1102)である。例えば、図12のサイクル3からサイクル4に向けて、示されるハードウェアアクセラレータ1100は、ベクトルレジスタ1102(3)のR4からベクトルレジスタ1102(4)のR0に、ベクトルレジスタ1102(3)のR9からベクトルレジスタ1102(4)のR1に、ベクトルレジスタ1102(3)のR14からベクトルレジスタ1102(4)のR2にデータを格納し、(値Dとして、ベクトルレジスタ1102(3)のR3の入力に基づいて)Qラウンド回路1104からベクトルレジスタ1102(4)のR3に、ベクトルレジスタ1102(3)のR8からベクトルレジスタ1102(4)のR4に、ベクトルレジスタ1102(3)のR13からベクトルレジスタ1102(4)のR5にDnewを格納し、(値Cとして、ベクトルレジスタ1102(3)のR2の入力に基づいて、)Qラウンド回路1104からベクトルレジスタ1102(4)のR6に、ベクトルレジスタ1102(3)のR7からベクトルレジスタ1102(4)のR7に、ベクトルレジスタ1102(3)のR12からベクトルレジスタ1102(4)のR8にCnewを格納し、(値Bとして、ベクトルレジスタ1102(3)のR1の入力に基づいて)Qラウンド回路1104からベクトルレジスタ1102(4)のR9に、ベクトルレジスタ1102(3)のR6からベクトルレジスタ1102(4)のR10に、ベクトルレジスタ1102(3)のR11からベクトルレジスタ1102(4)のR11にBnewを格納し、(値Aとして、ベクトルレジスタ1102(3)のR0の入力に基づいて)Qラウンド回路1104からベクトルレジスタ1102(4)のR12に、ベクトルレジスタ1102(3)のR5からベクトルレジスタ1102(4)のR13に、ベクトルレジスタ1102(3)のR10からベクトルレジスタ1102(4)のR14に、及び、ベクトルレジスタ1102(3)のR15からベクトルレジスタ1102(4)のR15にAnewを格納する。
一実施形態において、図11の上部及び下部にあるベクトルレジスタ1102は、別個のレジスタ(例えば、(例えば、あらゆる上書きを回避するために)出力データが生成されている間、入力データを格納する一時レジスタである)。示される実施形態において、特定のパス(例えば、マルチプレクサ1120のうちの一番左のマルチプレクサ)は、直列に2つのマルチプレクサではなく、直列に1つのマルチプレクサだけを含むことに留意する。
図13は、本開示の実施形態に係る図12におけるハードウェアアクセラレータのクリティカルデータパスを示す。図10のクリティカルパス1000との比較において、マルチプレクサ914A又は914B(を、例えば、ステアリングするQラウンド回路の入力)のいずれも存在していないため、例えば、データ生成オペレーションの最も時間のかかる速度を向上させることにより、アクセラレータの(例えば、コンピュータの)機能を改善することに留意する。クリティカルという用語は、最も長い時間を要する、例えば、横断するために最も多くのゲートステージを含むパスを指し得る。図12の上記の実施例において、初期のChaCha状態は、表1に示される4×4行列の(例えば、第1)列に適合する順序で(例えば、16×32ビット)ベクトルレジスタ1102に格納される。(例えば、ベクトルレジスタ1102に結合する前に)図13のクリティカルデータパスは、(例えば、入力A又はB上に)供給し、(例えば、図6又は図7のパスA又はB上の)Qラウンド回路1104を横断し、次に、マルチプレクサ、例えば、マルチプレクサ1116(9)が直列に続くマルチプレクサ1120(9)、及び/又は、マルチプレクサ1116(13)が直列に続くマルチプレクサ1120(13)を横断する。
図14は、本開示の実施形態に係るハードウェアアクセラレータ1400の回路を示す。図15は、本開示の実施形態に係る図14のハードウェアアクセラレータ1400の暗号化演算についてのラウンドの複数サイクル1500を示す。図15における中括弧内の数字は、ハードウェアのサイクル数又は異なるインスタンスを示し得る。
一実施形態において、ベクトルレジスタ1402は、示される要素の順序、すなわち、0、4、8、12、1、5、9、13、2、6、10、14、3、7、11、15で、表1からの値を用いてロードされる。これらの値参照は、例えば、これら独自の各データ値を有する表1の要素への参照に過ぎない、又は、その入力データに対するQラウンド操作により形成される新しいデータへの参照に過ぎない(例えば、値0が定数C0を記号化し、値AとしてQラウンド回路に入力され、少なくともC0に基づいて生成されるAnewは、回路を通じたデータフローを示すために、本図において値0とも称される)。R0〜R15は、16個のレジスタ要素自体への参照であり、例えば、これらの要素に格納されるデータではない。ハードウェアアクセラレータ1400は、ベクトルレジスタ1402を含む。ベクトルレジスタ1402は、図14において2度示されており、回路がそれ自体へとフィードバックし得ることを示す。例えば、マルチプレクサに対するR0〜R15にラベリングされた入力は、(例えば、ある実施形態において図14の下半分にあるベクトルレジスタ1402からデータを供給する)ベクトルレジスタ1402のレジスタ要素の位置を示し得る。別の実施形態において、図14の上部における任意選択的なベクトルレジスタ1402は、図14の下半分にあるベクトルレジスタ1402と同じハードウェアインスタンスではなく、例えば、マルチプレクサ1420の左側の入力は、例えば、ハードウェアアクセラレータに暗号化演算を実行させることを要求しているプロセッサ又は他のコンポーネントから新しいデータを供給するために、入力(例えば、図8の入力808)に結合されてよい。一実施形態において、制御回路(例えば、図8の制御回路806)は、制御値をマルチプレクサ1420に送信して、(i)(例えば、暗号化の第1のイタレーション(例えば、Qラウンド)の前に、)それらの左側の入力から(例えば、図8の入力808から)新しいデータを供給し、及び/又は、(ii)(例えば、異なる「新たな」入力が、例えば、ChaCha20に対して20ラウンドごとに、必要とされるまで)暗号化の他のイタレーションのために、図11の下半分にあるQラウンド回路1404及び/又はベクトルレジスタ1402から反復データを供給する。
図14の上部に示されるベクトルレジスタ1402は、表1に関して列配向における、(例えば、図15のサイクル0で)ベクトルレジスタへとロードされるときの初期値を示す。例えば、レジスタストレージ位置R0、R1、R2及びR3の要素0、4、8及び12はそれぞれ、サイクルゼロにおいて、表1からの値を示し、例えば、0は定数C0であり、15はBC[ビット31:0]であるが、ここでは、際の値そのものではなく、実分かりやすくするためだけのものである。本実施形態において、Qラウンド回路1404(例えば、図6からは、Qラウンド回路600又は図7からは、統合されたQラウンド/Blakeラウンド回路700)は、特定数の(例えば、すべての)Qラウンド(例えば、4より多いQラウンド)のために、ベクトルレジスタ1402の第1の端部における隣接要素からデータ値を受信し、例えば、暗号化演算のこれらのサイクルに対して、ベクトルレジスタ1402のR0からのデータ値を入力値Aとして、ベクトルレジスタ1402のR1からのデータ値を入力値Bとして、ベクトルレジスタ1402のR2からのデータ値を入力値Cとして、ベクトルレジスタ1402のR3からのデータ値を入力値Dとして受信する。ある実施形態において、Qラウンド回路1404は、特定数の(例えば、列配向)Qラウンド(例えば、最初の3つのQラウンド)のために、成果値Anew、Bnew、Cnew及びDnewをベクトルレジスタ1402の他方、反対側に出力し、例えば、出力データ値Anewをベクトルレジスタ1402のR12に、出力データ値Bnewをベクトルレジスタ1402のR13に、出力データ値Cnewをベクトルレジスタ1402のR14に、及び、出力データ値Dnewをベクトルレジスタ1402のR15に格納する。例えば、図15のサイクル0からサイクル1への点線、サイクル1からサイクル2への点線、及び、サイクル2からサイクル3への点線で示されるように、R4〜R15の残りの値は、同じ特定数の(例えば、列配向)Qラウンド(例えば、最初の3つのQラウンド)のために、第2の端部から第1の端部へ、(例えば、Qラウンド回路1404により消費されるのと同じビット数)シフトされてよい。
例えば、図11〜図12に示される実施形態は、対角線アラインメントが、1サイクル(例えば、サイクル3からサイクル4)に(例えば、内に)現れることを示す。しかしながら、ある実施形態では、これは、Qラウンド回路の出力時における、(例えば、2:1)マルチプレクサ(例えば、図11及び図13のマルチプレクサ1116(9))に対して、列配向から対角線配向ラウンド計算へと移行する場合に適切な状態レジスタ入力を選択させる。ある実施形態において、このマルチプレクサは、例えば、図15に示されるように、1クロックサイクル分、列/対角線自動アラインメントを遅延させることにより除外される。ベクトルレジスタインスタンスは、中括弧内のサイクル数を用いて参照され得る。一実施形態において、これらは、同じベクトルレジスタ(例えば、図14のベクトルレジスタ1402)である。
一実施形態において、ラウンド1の第4Qラウンドの終了時に、(例えば、クリティカルパスの一部である)QラウンドのBnewの出力は、依然として、ベクトルレジスタ1402(4)[例えば、ビット95:64]に格納されている。結果として、状態(例えば、要素)4、7、9及び11(例えば、ベクトルレジスタ1402(4)内のレジスタ要素R9、R13、R6及びR14のそれぞれ)を除くすべて状態(例えば、要素)は、列ラウンド操作に適切にアラインされ、例えば、ベクトル部分的にアラインされる。これら4つの状態(例えば、要素)は、次のサイクルの第1のQラウンド操作(例えば、ラウンド2、サイクル5)に参加しないので、それらは、対角線ラウンド操作に対してすべての状態(例えば、要素)を完全にアラインするために、サイクル5に適切にシフトされ得る。Qラウンドのクリティカルな出力Bnewが常に同じレジスタに格納される本実施形態において、クリティカルパス内の(例えば、2:1)マルチプレクサ(例えば、図11及び図13のマルチプレクサ1116(9))(を例えば、ステアリングするQラウンド回路の出力)は、したがって、除外されてよく、ある実施形態において5%の性能をさらに改善する。同様の遅延型アラインメントは、対角線配向から列配向ラウンド計算へ移行する場合に実行されてよい。一実施形態において、アクセラレータ1400は、18kゲートのセルエリアを有し、かつ、1.2ナノ秒(ns)のサイクル時間で動作する場合、5.3ギガビット毎秒(Gbps)のスループットを有する。
例えば、図15のサイクル3からサイクル4に向けて、示されるハードウェアアクセラレータ1400は、ベクトルレジスタ1402(3)のR4からベクトルレジスタ1402(4)のR0に、ベクトルレジスタ1402(3)のR9からベクトルレジスタ1402(4)のR1に、ベクトルレジスタ1402(3)のR14からベクトルレジスタ1402(4)のR2にデータを格納し、(値Dとして、ベクトルレジスタ1402(3)のR3の入力に基づいて)Qラウンド回路1404からベクトルレジスタ1402(4)のR3に、ベクトルレジスタ1402(3)のR8からベクトルレジスタ1402(4)のR4に、ベクトルレジスタ1402(3)のR13からベクトルレジスタ1402(4)のR5に、ベクトルレジスタ1402(3)のR10からベクトルレジスタ1402(4)のR6に、ベクトルレジスタ1402(3)のR7からベクトルレジスタ1402(4)のR7に、ベクトルレジスタ1402(3)のR12からベクトルレジスタ1402(4)のR8に、ベクトルレジスタ1402(3)のR5からベクトルレジスタ1402(4)のR9に、ベクトルレジスタ1402(3)のR6からベクトルレジスタ1402(4)のR10に、ベクトルレジスタ1402(3)のR11からベクトルレジスタ1402(4)のR11にDnewを格納し、(値Aとして、ベクトルレジスタ1402(3)のR0の入力に基づいて)Qラウンド回路1404からベクトルレジスタ1402(4)のR12にAnewを格納し、(値Bとして、ベクトルレジスタ1402(3)のR1の入力に基づいて)Qラウンド回路1404からベクトルレジスタ1402(4)のR13にBnewを格納し、(値Cとして、ベクトルレジスタ1402(3)のR2の入力に基づいて)Qラウンド回路1404からベクトルレジスタ1402(4)のR14に、ベクトルレジスタ1402(3)のR15からベクトルレジスタ1402(4)のR15にCnewを格納する。
マルチプレクサ1416及び1418のそれぞれへのQラウンド制御値(QRND)、及び/又は、マルチプレクサ1420のそれぞれへの新たな暗号化制御値(NEW_ENC)は、制御回路、例えば、図8の制御回路806から送信されてよい。制御値は、例えば、どのQラウンドが実行されているかに従って、(例えば、1サイクルに関して)それらのマルチプレクサに、それらの各位置へと入力値を出力させる、例えば、図15を参照。一実施形態において、マルチプレクサ1420のそれぞれへの新たな暗号化制御値(NEW_ENC)は、暗号化演算に従って入力データを供給し、例えば、実行対象のオペレーションに従って、(複数の物理レジスタ又は単一の物理レジスタであり得る)ベクトルレジスタ1402の示される要素からデータを提供する。一実施形態において、図15のサイクル3からサイクル4に向けて、示されるハードウェアアクセラレータ1400(例えば、これらの制御回路)は、暗号化制御値(例えば、論理0)(NEW_ENC)をアサートして、マルチプレクサ1420((例えば、複数のマルチプレクサ1420のうちの1つのマルチプレクサのそのパスにもシリアルマルチプレクサ1416がない場合)例えば、その独自の制御ラインQRND3を含み得るマルチプレクサ1420(9)を除く)に、それらの右側の入力の出力をベクトルレジスタ1402へと送信させ、Qラウンド制御値(例えば、論理0)(QRND)をアサートして、マルチプレクサ1416に、それらの右側の入力の出力をベクトルレジスタ1402へと送信させ、別のQラウンド制御値2(例えば、論理1)(QRND2)をアサートして、マルチプレクサ1418に、その左側の入力(例えば、R5)の出力をダウンストリームマルチプレクサ1420(9)へと送信させ、別のQラウンド制御値3(例えば、論理0)(QRND3)をアサートして、マルチプレクサ1420(9)に、その右側の入力から(例えば、マルチプレクサ1418の出力から)データを供給させる。
本実施形態において、Qラウンド回路1404(例えば、図6からは、Qラウンド回路600又は図7からは、統合されたQラウンド/Blakeラウンド回路700)は、特定のQラウンドのために(例えば、第4又は8Qラウンド後の次のQラウンドのために)、ベクトルレジスタ1402の第1の端部における隣接要素からデータ値を受信し、例えば、Qラウンド回路1404への暗号化演算のこれらのサイクルに対して、ベクトルレジスタ1402(4)のR0からのデータ値を入力値Aとして、ベクトルレジスタ1402(4)のR1からのデータ値を入力値Bとして、ベクトルレジスタ1402(4)のR2からのデータ値を入力値Cとして、及び、ベクトルレジスタ1402(4)のR3からのデータ値を入力値Dとして受信し、特定のQラウンドのために(例えば、第5Qラウンドのために)、ベクトルレジスタ1402の他方、反対側に成果値Anew、Bnew、Cnew及びDnewを出力し、例えば、出力データ値Anewをベクトルレジスタ1402(5)のR12に、出力データ値Bnewをベクトルレジスタ1402(5)のR13に、出力データ値Cnewをベクトルレジスタ1402(5)のR14に、出力データ値Dnewをベクトルレジスタ1402(5)のR15に格納する。例えば、図15のサイクル0からサイクル1への点線、サイクル1からサイクル2への点線、及び、サイクル2からサイクル3への点線で示されるように、R4〜R15の残りの値は、特定数の(例えば、列配向)Qラウンド(例えば、ラウンドの最初の3つのQラウンド)のために、第2の端部から第1の端部へ、(例えば、Qラウンド回路1404により消費されるのと同じビット数)シフトされてよい。
さらなる例として、図15のサイクル4からサイクル5に向けて、示されるハードウェアアクセラレータ1400は、ベクトルレジスタ1402(4)のR4からベクトルレジスタ1402(5)のR0に、ベクトルレジスタ1402(4)のR5からベクトルレジスタ1402(5)のR1に、ベクトルレジスタ1402(4)のR14からベクトルレジスタ1402(5)のR2に、ベクトルレジスタ1402(4)のR7からベクトルレジスタ1402(5)のR3に、ベクトルレジスタ1402(4)のR8からベクトルレジスタ1402(5)のR4に、ベクトルレジスタ1402(4)のR13からベクトルレジスタ1402(5)のR5に、ベクトルレジスタ1402(4)のR10からベクトルレジスタ1402(5)のR6に、ベクトルレジスタ1402(4)のR11からベクトルレジスタ1402(5)のR7に、ベクトルレジスタ1402(4)のR12からベクトルレジスタ1402(5)のR8に、のベクトルレジスタ1402(4)のR9からベクトルレジスタ1402(5)のR9に、ベクトルレジスタ1402(4)のR6からベクトルレジスタ1402(5)のR10に、ベクトルレジスタ1402(4)のR15からベクトルレジスタ1402(5)のR11にデータを格納し、(値Aとして、ベクトルレジスタ1402(4)のR0の入力に基づいて)Qラウンド回路1404からベクトルレジスタ1402(5)のR12にAnewを格納し、(値Bとして、ベクトルレジスタ1402(4)のR1の入力に基づいて)Qラウンド回路1404からベクトルレジスタ1402(5)のR13にBnewを格納し、(値Cとして、ベクトルレジスタ1402(4)のR2の入力に基づいて)Qラウンド回路1404からベクトルレジスタ1402(5)のR14にCnewを格納し、(値Dとしてベクトルレジスタ1402(4)のR3の入力に基づいて)Qラウンド回路1404からベクトルレジスタ1402(5)のR15にDnewを格納する。
マルチプレクサ1416及び1418のそれぞれへのQラウンド制御値(QRND)、及び/又は、マルチプレクサ1420のそれぞれへの新たな暗号化制御値(NEW_ENC)は、制御回路、例えば、図8の制御回路806から送信されてよい。制御値は、例えば、どのQラウンドが実行されているかに従って、(例えば、1サイクルに関して)それらのマルチプレクサに、それらの各位置へと入力値を出力させる、例えば、図15を参照。一実施形態において、マルチプレクサ1420のそれぞれへの新たな暗号化制御値(NEW_ENC)は、暗号化演算に従って入力データを供給し、例えば、実行対象のオペレーションに従って、(複数の物理レジスタ又は単一の物理レジスタであり得る)ベクトルレジスタ1402の示される要素からデータを提供する。一実施形態において、図15のサイクル4からサイクル5へ向けて、示されるハードウェアアクセラレータ1400(例えば、これらの制御回路)は、暗号化制御値(例えば、論理0)(NEW_ENC)をアサートして、マルチプレクサ1420((例えば、複数のマルチプレクサ1420のうちの1つのマルチプレクサのそのパスにもシリアルマルチプレクサ1416がない場合)例えば、その独自の制御ラインQRND3を含み得るマルチプレクサ1420(9)を除く)に、それらの右側の入力の出力をベクトルレジスタ1402に送信させ、Qラウンド制御値(例えば、論理1)(QRND)をアサートして、マルチプレクサ1416に、それらの左側の入力の出力をベクトルレジスタ1402へと送信させ、別のQラウンド制御値2(例えば、論理1)(QRND2)をアサートして、マルチプレクサ1418に、右側の入力(例えば、R9)の出力をダウンストリームマルチプレクサ1420(9)へと送信させ、別のQラウンド制御値3(例えば、論理0)(QRND3)をアサートして、マルチプレクサ1420(9)に、その右側の入力から(例えば、マルチプレクサ1418の出力から)データを供給させる。
したがって、ハードウェアアクセラレータ1400は、(例えば、制御値を介して)図15に示されるようにデータを導いてよく、例えば、マルチプレクサ1418、マルチプレクサ1420及びマルチプレクサ1416のうちの対応する入力を選択して、図15に示されるデータステアリング及びオペレーションを達成する。一実施形態において、図14の上部及び下部にあるベクトルレジスタ1402は、別個のレジスタである((例えば、あらゆる上書きを回避するために)例えば、出力データが生成されている間、一方は、入力データを格納する一時レジスタである)。示される実施形態において、特定のパス(例えば、グループ内の一番左のマルチプレクサ)は、2つのマルチプレクサではなく、1つのマルチプレクサだけを含むことに留意する。
本明細書における実施形態のいずれかに関して、別個の制御線(例えば、他の制御値のうちの1つ又は複数から独立したそれら自身の制御値)が用いられてよい(例えば、制御回路が各マルチプレクサ制御線に対して一意の制御値を生成してよい)。
図16は、本開示の実施形態に係る図15におけるハードウェアアクセラレータのクリティカルデータパス1600を示す。図10のクリティカルパス1000との比較において、マルチプレクサ914A又は914B(を、例えば、ステアリングするQラウンド回路の入力)のいずれも存在していないため、例えば、データ生成オペレーションの最も時間のかかる速度を向上させることにより、アクセラレータの(例えば、コンピュータの)機能を改善することに留意する。図13のクリティカルパス1300との比較において、マルチプレクサ1116(9)又はマルチプレクサ1120(9)(を、例えば、ステアリングするQラウンド回路の出力)のうちの少なくとも一方が存在していないので、例えば、データ生成オペレーションの最も時間のかかる速度を向上させることにより、アクセラレータの(例えば、コンピュータの)機能を改善することに留意する。クリティカルという用語は、最も長い時間を要する、例えば、横断するために最も多くのゲートステージを含むパスを指し得る。図15の上記の実施例において、初期のChaCha状態は、表1に示される4×4行列の(例えば、第1)列に適合する順序で(例えば、16×32ビット)ベクトルレジスタ1402に格納される。(例えば、ベクトルレジスタ1402に結合する前に)図15のクリティカルデータパスは、(例えば、入力A又はB上に)を供給し、(例えば、図6又は図7のパスA又はB上の)Qラウンド回路1404を横断し、次に、マルチプレクサ、例えば、他のマルチプレクサが直列に続くシングルマルチプレクサ1420(13)を横断する。
図17は、本開示の実施形態に係るフロー図1700を示す。示されるフロー1700は、暗号化演算のラウンドの入力ベクトルをベクトルレジスタに格納する段階1702と、ベクトルレジスタからの第1の入力及びベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、第1のモジュラ加算器、及び、ベクトルレジスタからの回路の第2のデータパスに結合される第2のモジュラ加算器とを有する回路の第1のデータパスにおいて、第1のモジュラ加算器を用いて、入力ベクトルからの第1の入力からの第1の値と、ベクトルレジスタからの第2の入力からの第2の値とを加算して第1の中間結果を生成すること、第2のモジュラ加算器を用いて、第1の中間結果と、第2のデータパスからの第3の中間結果とを加算して第1の結果を生成すること、並びに、第2の入力、及び、ベクトルレジスタからの回路の第3のデータパスに結合される第1の論理XOR回路と、第1の論理XOR回路に結合される第1のローテート回路と、第1のローテート回路及び第3のデータパスに結合される第2の論理XOR回路と、第2の論理XOR回路に結合される第2のローテート回路とを有する回路の第2のデータパスにおいて、第1の論理XOR回路を用いて、ベクトルレジスタからの第2の入力からの第2の値と、第3のデータパスからの第3の結果との論理XORをとって第2の中間結果を生成すること、第1のローテート回路を用いて、1又は複数の制御値に従って第2の中間結果をローテートさせて第3の中間結果を生成すること、第3の中間結果と第3のデータパスからの第4の結果との論理XORをとって第5の中間結果を生成すること、第2のローテート回路を用いて、1又は複数の制御値に従って第5の中間結果をローテートさせて第2の結果を生成することにより、回路を用いて入力ベクトルに対するラウンドの一部を実行する段階1704と、一部に対する第1のデータパスからの第1の結果と、一部に対する第2のデータパスからの第2の結果とをベクトルレジスタに格納する段階1706とを含む。
一実施形態において、装置は、暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、回路であって、ベクトルレジスタからの第1の入力及びベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、第1のモジュラ加算器、及び、ベクトルレジスタからの第2のデータパスに結合される第2のモジュラ加算器とを含む第1のデータパス、及び、第2の入力、ベクトルレジスタからの第3のデータパスに結合される第1の論理XOR回路と、第1の論理XOR回路に結合される第1のローテート回路と、第1のローテート回路及び第3のデータパスに結合される第2の論理XOR回路と、第2の論理XOR回路に結合される第2のローテート回路とを含む第2のデータパスとを含む回路と、第1のデータパスの第1のモジュラ加算器及び第2のモジュラ加算器、並びに、第2のデータパスの第1の論理XOR回路、第2の論理XOR回路、第1のローテート回路及び第2のローテート回路に、1又は複数の制御値に従ってラウンドの一部(例えば、すべてより少ない)を実行させ、(例えば、回路の1又は複数のマルチプレクサに)一部に対する第1のデータパスからの第1の結果と、一部に対する第2のデータパスからの第2の結果とをベクトルレジスタに格納させる制御回路とを含む。初回のサイクルにおいて、入力ベクトルは、第1の要素に格納される第1の定数値及び第1の要素に隣接する第2の要素に格納される第2の定数値であってよく、制御回路は、初回のサイクルにおける回路への入力として第1の定数値又は第2の定数値を供給するように、ベクトルレジスタと回路との間に結合されるマルチプレクサを制御してよい。初回のサイクル(例えば、図12及び15のサイクル1)において、入力ベクトルは、(例えば、何も要素が介在することなく)隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値であってよく、制御回路は、初回のサイクルにおける回路への入力(例えば、図6及び図7に関して説明されたようなA、B、C及びD)として、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を提供してよい。制御回路は、回路の第1のデータパスのための、ベクトルレジスタからの第1の入力に第1の定数値を提供し、初回のサイクルにおける回路への第2のデータパスのための、ベクトルレジスタからの第2の入力に第1のキー値を提供してよい。第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値は、初回のサイクルにおいて、ベクトルレジスタの第1の端部における隣接要素に格納されてよく、制御回路は、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を回路に入力して、出力値(例えば、図6及び図7に関して説明したようなAnew、Bnew、Cnew及びDnew)を生成し、ラウンドの次のサイクルのために、ベクトルレジスタの第2の端部の隣接要素に出力値を格納してよい。制御回路は、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値以外の初回のサイクルの入力ベクトルを、ラウンドの次のサイクルのためにベクトルレジスタの第1の端部において開始する要素にシフトしてよく、出力値は、ラウンドの次のサイクルのために、ベクトルレジスタの第2の端部の隣接要素に格納される。制御回路は、ベクトルレジスタの第1の端部における複数の隣接要素からのラウンドの追加のサイクルのための値を回路に入力してラウンドの追加のサイクルのための出力値を生成し、ラウンドの追加のサイクルのための出力値、及び、追加のサイクルの後の(例えば、すぐ)次のサイクルのために完全にアラインされた状態で、複数の隣接要素以外のベクトルレジスタの要素からの値をベクトルレジスタに格納させてよい。制御回路は、ベクトルレジスタの第1の端部における複数の隣接要素からのラウンドの追加のサイクルのための値を回路に入力してラウンドの追加のサイクルのための出力値を生成し、ラウンドの追加のサイクルのための出力値のサブセットからの値、及び、複数の隣接要素以外のベクトルレジスタの要素からの値を、追加のサイクルの後の次のサイクルのために完全にアラインされた状態でベクトルレジスタの第1の端部における隣接要素に格納させ、追加のサイクルの後の次のサイクルのために部分的にアラインされた状態で、第1の端部以外のベクトルレジスタの要素にサブセット以外の値を格納させてよい。
別の実施形態において、方法は、暗号化演算のラウンドの入力ベクトルをベクトルレジスタに格納する段階と、ベクトルレジスタからの第1の入力及びベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、第1のモジュラ加算器、及び、ベクトルレジスタからの回路の第2のデータパスに結合される第2のモジュラ加算器とを含む回路の第1のデータパスにおいて、第1のモジュラ加算器を用いて、入力ベクトルからの第1の入力からの第1の値と、ベクトルレジスタからの第2の入力からの第2の値とを加算して第1の中間結果を生成すること、第2のモジュラ加算器を用いて、第1の中間結果と、第2のデータパスからの第3の中間結果とを加算して第1の結果を生成すること、並びに、第2の入力、及び、ベクトルレジスタからの回路の第3のデータパスに結合される第1の論理XOR回路と、第1の論理XOR回路に結合される第1のローテート回路と、第1のローテート回路及び第3のデータパスに結合される第2の論理XOR回路と、第2の論理XOR回路に結合される第2のローテート回路とを含む回路の第2のデータパスにおいて、第1の論理XOR回路を用いて、ベクトルレジスタからの第2の入力からの第2の値と、第3のデータパスからの第3の結果との論理XORをとって第2の中間結果を生成すること、第1のローテート回路を用いて、1又は複数の制御値に従って第2の中間結果をローテートさせて第3の中間結果を生成すること、第3の中間結果と第3のデータパスからの第4の結果との論理XORをとって第5の中間結果を生成すること、第2のローテート回路を用いて、1又は複数の制御値に従って第5の中間結果をローテートさせて第2の結果を生成することにより、回路を用いて入力ベクトルに対するラウンドの一部を実行する段階と、一部に対する第1のデータパスからの第1の結果と、一部に対する第2のデータパスからの第2の結果とをベクトルレジスタに格納する段階とを含む。入力ベクトルを格納する段階は、初回のサイクルにおいて、第1の要素内の第1の定数値及び第1の要素に隣接する第2の要素内の第2の定数値を格納する段階を含んでよく、さらに、ベクトルレジスタと回路との間に結合されるマルチプレクサをスイッチングして、初回のサイクルにおける回路への入力として第1の定数値又は第2の定数値を供給する段階を含む。入力ベクトルを格納する段階は、初回のサイクルにおいて、入力ベクトルの隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を格納する段階を含んでよく、さらに、初回のサイクルにおける回路への入力として、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を送信する段階を含んでよい。送信する段階は、回路の第1のデータパスのための、ベクトルレジスタからの第1の入力に第1の値として第1の定数値を送信する段階、及び、初回のサイクルにおける回路の第2のデータパスのための、ベクトルレジスタからの第2の入力に第2の値として第1のキー値を送信する段階を含んでよい。入力ベクトルを格納する段階は、初回のサイクルにおいて、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値をベクトルレジスタの第1の端部における隣接要素に格納する段階を含んでよく、送信する段階は、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を回路に送信して、第1の結果及び第2の結果を含む出力値を生成する段階、及び、ラウンドの次のサイクルのために、ベクトルレジスタの第2の端部の隣接要素に出力値を格納する段階を含んでよい。実行する段階は、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値以外の初回のサイクルの入力ベクトルを、ラウンドの次のサイクルのためにベクトルレジスタの第1の端部において開始する要素にシフトする段階、及び、ラウンドの次のサイクルのために、ベクトルレジスタの第2の端部の隣接要素に出力値を格納する段階を含んでよい。方法は、ベクトルレジスタの第1の端部における複数の隣接要素からのラウンドの追加のサイクルのための入力値を回路に送信してラウンドの追加のサイクルのための出力値を生成する段階、及び、追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、ラウンドの追加のサイクルの出力値、及び、複数の隣接要素以外のベクトルレジスタの要素からの値をベクトルレジスタに格納する段階を含んでよい。方法は、ベクトルレジスタの第1の端部における複数の隣接要素からのラウンドの追加のサイクルのための入力値を回路に送信してラウンドの追加のサイクルのための出力値を生成する段階と、ラウンドの追加のサイクルのための出力値のサブセットからの値、及び、複数の隣接要素以外のベクトルレジスタの要素からの値を、追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、ベクトルレジスタの第1の端部における隣接要素に格納する段階と、追加のサイクルの後の次のサイクルのために部分的にアラインされた状態で、第1の端部以外のベクトルレジスタの要素にサブセット以外の値を格納する段階とを含んでよい。
さらに別の実施形態において、システムは、スレッドを実行し、暗号化演算をオフロードするハードウェアプロセッサと、暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、ハードウェアアクセラレータであって、ベクトルレジスタからの第1の入力及びベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、第1のモジュラ加算器、及び、ベクトルレジスタからの第2のデータパスに結合される第2のモジュラ加算器とを含む第1のデータパス、及び、第2の入力、及び、ベクトルレジスタからの第3のデータパスに結合される第1の論理XOR回路と、第1の論理XOR回路に結合される第1のローテート回路と、第1のローテート回路及び第3のデータパスに結合される第2の論理XOR回路と、第2の論理XOR回路に結合される第2のローテート回路とを含む第2のデータパスを含む回路、並びに、第1のデータパスの第1のモジュラ加算器第2のモジュラ加算器、並びに、第2のデータパスの第1の論理XOR回路、第2の論理XOR回路、第1のローテート回路及び第2のローテート回路に、1又は複数の制御値に従ってラウンドの一部を実行させ、一部に対する第1のデータパスからの第1の結果と、一部に対する第2のデータパスからの第2の結果とをベクトルレジスタに格納させる制御回路とを含む。初回のサイクルにおいて、入力ベクトルは、第1の要素に格納される第1の定数値及び第1の要素に隣接する第2の要素に格納される第2の定数値を含み(例えば、含んでよく)、制御回路は、初回のサイクルにおける回路への入力として第1の定数値又は第2の定数値を供給するように、ベクトルレジスタと回路との間に結合されるマルチプレクサを制御してよい。初回のサイクルにおいて、入力ベクトルは、隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値であってよく、制御回路は、初回のサイクルにおける回路への入力として、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を提供してよい。制御回路は、回路の第1のデータパスのための、ベクトルレジスタからの第1の入力に第1の定数値を提供し、初回のサイクルにおける回路の第2のデータパスのための、ベクトルレジスタからの第2の入力に第1のキー値を提供してよい。第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値は、初回のサイクルにおいて、ベクトルレジスタの第1の端部における隣接要素に格納されてよく、制御回路は、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を回路に入力して出力値を生成し、ラウンドの次のサイクルのためにベクトルレジスタの第2の端部の隣接要素に出力値を格納してよい。制御回路は、第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値以外の初回のサイクルの入力ベクトルを、ラウンドの次のサイクルのためにベクトルレジスタの第1の端部において開始する要素にシフトしてよく、出力値は、ラウンドの次のサイクルのために、ベクトルレジスタの第2の端部の隣接要素に格納される。制御回路は、ベクトルレジスタの第1の端部における複数の隣接要素からのラウンドの追加のサイクルのための値を回路に入力してラウンドの追加のサイクルのための出力値を生成し、ラウンドの追加のサイクルのための出力値、及び、追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、複数の隣接要素以外のベクトルレジスタの要素からの値をベクトルレジスタに格納させてよい。制御回路は、ベクトルレジスタの第1の端部における複数の隣接要素からのラウンドの追加のサイクルのための値を回路に入力してラウンドの追加のサイクルのための出力値を生成し、ラウンドの追加のサイクルのための出力値のサブセットからの値、及び、複数の隣接要素以外のベクトルレジスタの要素からの値を、追加のサイクルの後の次のサイクルのために完全にアラインされた状態でベクトルレジスタの第1の端部における隣接要素に格納させ、追加のサイクルの後の次のサイクルのために部分的にアラインされた状態で、第1の端部以外のベクトルレジスタの要素にサブセット以外の値を格納させてよい。
別の実施形態において、装置は、暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、回路であって、ベクトルレジスタからの第1の入力及びベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、第1のモジュラ加算器、及び、ベクトルレジスタからの第2のデータパスに結合される第2のモジュラ加算器とを含む第1のデータパス、及び、第2の入力、及び、ベクトルレジスタからの第3のデータパスに結合される第1の論理XOR回路と、第1の論理XOR回路に結合される第1のローテート回路と、第1のローテート回路及び第3のデータパスに結合される第2の論理XOR回路と、第2の論理XOR回路に結合される第2のローテート回路とを含む第2のデータパスを含む回路と、第1のデータパスの第1のモジュラ加算器及び第2のモジュラ加算器、並びに、第2のデータパスの第1の論理XOR回路、第2の論理XOR回路、第1のローテート回路及び第2のローテート回路に、ラウンドの一部を実行させ、一部に対する第1のデータパスからの第1の結果と、一部に対する第2のデータパスからの第2の結果とをベクトルレジスタに格納させる手段とを含む。
さらに別の実施形態において、装置は、ハードウェアプロセッサにより実行されるときに、ハードウェアプロセッサに、本明細書に開示されるいずれかの方法を実行させるコードを格納するデータストレージデバイスを備える。装置は、詳細な説明に記載されたものと同じであってよい。方法は、詳細な説明に記載されたものと同じであってよい。
命令セットは、1又は複数の命令フォーマットを含んでよい。所与の命令フォーマットは、数ある中でも、実行対象のオペレーション(例えば、オペコード)及びそのオペレーションが実行されるオペランド及び/又は他のデータフィールド(例えば、マスク)を指定する様々なフィールド(例えば、ビットの数、ビットの位置)を規定してよい。いくつかの命令フォーマットは、命令テンプレート(又はサブフォーマット)の定義を通じてさらに細分化される。例えば、所与の命令フォーマットの命令テンプレートは、命令フォーマットのフィールドの異なるサブセット(含まれるフィールドは、典型的には同じ順序であるが、より少ないフィールドが含まれているので、少なくともいくつかは、異なるビット位置を有する)を有するように定義されてよい、及び/又は、所与のフィールドが異なって解釈されるように定義されてよい。したがって、ISAの各命令は、所与の命令フォーマットを用いて(及び、定義されている場合、命令フォーマットの命令テンプレートのうちの所与の1つにおいて)表現されており、オペレーション及びオペランドを指定するためのフィールドを含む。例えば、例示的なADD命令は、特定のオペコードと、そのオペコード及びオペランドフィールドを指定してオペランド(ソース1/デスティネーション及びソース2)を選択するオペコードフィールドを含む命令フォーマットとを有し、命令ストリームにおけるこのADD命令の存在は、特定のオペランドを選択するオペランドフィールド内の特定のコンテンツを有することになる。アドバンストベクトル拡張(AVX)(AVX1及びAVX2)と称され、ベクトル拡張(VEX)符号化スキームを用いるSIMD拡張のセットがリリース及び/又は公開されている(例えば、インテル(登録商標)64及びIA−32アーキテクチャソフトウェア開発者マニュアル、2018年1月を参照、及び、インテル(登録商標)アーキテクチャ命令セット拡張プログラミングリファレンス、2018年1月を参照)。
例示的な命令フォーマット
本明細書で説明される命令の実施形態は、種々のフォーマットで具現化されてよい。さらに、例示的なシステム、アーキテクチャ及びパイプラインが以下に詳細に説明される。命令の実施形態は、当該システム、アーキテクチャ及びパイプライン上で実行されてよいが、これらの詳細に限定されるものではない。
汎用的なベクトルに適した命令フォーマット
ベクトルに適した命令フォーマットは、ベクトル命令に適した命令フォーマットである(例えば、ベクトル演算に固有の特定のフィールドがある)。実施形態では、ベクトル及びスカラ演算の両方がベクトルに適した命令フォーマットを通じてサポートされることが説明されており、代替的な実施形態では、ベクトルに適した命令フォーマットをベクトル演算のみに用いる。
図18A〜図18Bは、本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらの命令テンプレートを示すブロック図である。図18Aは、本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらのクラスAの命令テンプレートを示すブロック図であり、一方、図18Bは、本開示の実施形態に係る汎用的なベクトルに適した命令フォーマット及びこれらのクラスBの命令テンプレートを示すブロック図である。具体的には、汎用的なベクトルに適した命令フォーマット1800は、クラスA命令及びクラスB命令テンプレートに対して定義され、その両方が非メモリアクセス1805の命令テンプレート及びメモリアクセス1820の命令テンプレートを含む。ベクトルに適した命令フォーマットとの関連で、汎用という用語は、いずれの特定の命令セットにも関係しない命令フォーマットを指す。
本開示の実施形態では、ベクトルに適した命令フォーマットが、32ビット(4バイト)又は64ビット(8バイト)データ要素幅(又はサイズ)を有する64バイトのベクトルオペランド長(又はサイズ)(したがって、64バイトのベクトルは、16個のダブルワードサイズの要素又は代替的に8クワッドワードサイズの要素のいずれか一方から構成される)、16ビット(2バイト)又は8ビット(1バイト)データ要素幅(又はサイズ)を有する64バイトのベクトルオペランド長(又はサイズ)、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)又は8ビット(1バイト)データ要素幅(又はサイズ)を有する32バイトのベクトルオペランド長(又はサイズ)、及び、32ビット(4バイト)、64ビット(8バイト)、16ビット(2バイト)又は8ビット(1バイト)データ要素幅(又はサイズ)を有する16バイトのベクトルオペランド長(又はサイズ)をサポートすることが説明される一方、代替的な実施形態より多い、より多い、より少ない又は異なるデータ要素幅(例えば、128ビット(16バイト)のデータ要素幅)を有する、より多い、より少ない及び/又は異なるベクトルオペランドサイズ(例えば、256バイトのベクトルオペランド)をサポートしてよい。
図18AのクラスAの命令テンプレートは、1)非メモリアクセス1805の命令テンプレート内に非メモリアクセス・フルラウンド制御型オペレーション1810の命令テンプレート、及び、非メモリアクセス・データ変換型オペレーション1815の命令テンプレートが示される、2)メモリアクセス1820の命令テンプレート内に、メモリアクセス・一時的1825の命令テンプレート、及び、メモリアクセス・非一時的1830の命令テンプレートが示されることを含む。図18BのクラスBの命令テンプレートは、1)非メモリアクセス1805の命令テンプレート内に、非メモリアクセス・書き込みマスク制御・部分的なラウンド制御型オペレーション1812の命令テンプレート、及び、非メモリアクセス・書き込みマスク制御・VSIZE型オペレーション1817の命令テンプレートが示され、2)メモリアクセス1820の命令テンプレート内に、メモリアクセス、書き込みマスク制御1827の命令テンプレートが示されることを含む。
汎用的なベクトルに適した命令フォーマット1800は、図18A〜図18Bに示される順序で以下に列挙される次のフィールドを含む。
フォーマットフィールド1840−このフィールドの特定の値(命令フォーマット識別子値)は、ベクトルに適した命令フォーマットを一意に識別し、従って、命令ストリームにおけるベクトルに適した命令フォーマット内の命令の存在を一意に識別する。このように、このフィールドは、汎用的なベクトルに適した命令フォーマットのみを有する命令セットには必要とされないという意味で任意選択的である。
ベースオペレーションフィールド1842−そのコンテンツは、異なるベースオペレーションを区別する。
レジスタインデックスフィールド1844−そのコンテンツは、直接的に又はアドレス生成を通じて、ソース及びデスティネーションオペランドがレジスタ内にあるか、又は、メモリ内にあるかに関わらず、それらの位置を指定する。これらは、P×Q(例えば、32×512、16×128、32×1024、64×1024)レジスタファイルからN個のレジスタを選択するための十分なビット数を含む。一実施形態において、Nは、最大で3つのソース及び1つのデスティネーションレジスタであってよく、代替的な実施形態では、より多くの又はより少ないソース及びデスティネーションレジスタをサポートしてよい(例えば、最大で2つのソースをサポートしてよく、その場合、これらのソースのうちの1つはまたデスティネーションとしての機能を果たし、最大で3つのソースをサポートしてよく、その場合、これらのソースのうちの1つはまた、デスティネーションとしての機能を果たし、最大で2つのソース及び1つのデスティネーションをサポートしてよい)。
修飾子フィールド1846−そのコンテンツは、指定しないメモリアクセスからメモリアクセスを指定する汎用的なベクトル命令フォーマット内の命令の存在を区別する、すなわち、非メモリアクセス1805の命令テンプレートとメモリアクセス1820の命令テンプレートとを区別する。メモリアクセスオペレーションは、メモリ階層に対して読み出し及び/又は書き込みを行い(場合によっては、レジスタ内の値を用いて、ソース及び/又はデスティネーションアドレスを指定する)、一方、非メモリアクセスオペレーションは、これを行わない(例えば、ソース及びデスティネーションはレジスタである)。一実施形態において、このフィールドはまた、メモリアドレス計算を実行するために、3つの異なる態様の中から選択する一方、代替的な実施形態では、メモリアドレス計算を実行するために、より多い、より少ない又は異なる態様をサポートしてよい。
拡張(augmentation)オペレーションフィールド1850−そのコンテンツは、様々な異なるオペレーションのうちのどれがベースオペレーションに加えて実行されるかを区別する。このフィールドは、コンテキストに固有のものである。本開示の一実施形態において、このフィールドは、クラスフィールド1868、アルファフィールド1852及びベータフィールド1854に分割される。拡張オペレーションフィールド1850は、2つ、3つ又は4つの命令ではなく、単一の命令において実行されるオペレーションの共通のグループを可能にする。
スケールフィールド1860−そのコンテンツは、メモリアドレス生成のための(例えば、2スケール×インデックス+ベースを用いるアドレス生成のための)インデックスフィールドのコンテンツをスケーリングすることを可能にする。
変位フィールド1862A−そのコンテンツは、(例えば、2スケール×インデックス+ベース+変位を用いるアドレス生成のための)メモリアドレス生成の一部として用いられる。
変位ファクタフィールド1862B(変位ファクタフィールド1862Bのすぐ上に変位フィールド1862Aを並置すること、一方又は他方が用いられることを示すことに留意する)−そのコンテンツは、アドレス生成の一部として用いられ、それは、メモリアクセス(N)のサイズによりスケーリングされる変位ファクタを指定する−ここで、Nは、(例えば、2スケール×インデックス+ベース+スケーリングされた変位を用いるアドレス生成用の)メモリアクセス内のバイト数である。冗長下位ビットは無視され、よって、有効なアドレスを算出する場合に用いられる最終的な変位を生成するために、変位ファクタフィールドのコンテンツは、メモリオペランドの合計のサイズ(N)で乗算される。Nの値は、フルオペコードフィールド1874(本明細書で後述される)及びデータ操作フィールド1854Cに基づいて、ランタイムにおいてプロセッサハードウェアにより決定される。変位フィールド1862A及び変位ファクタフィールド1862Bは、それらが非メモリアクセス1805の命令テンプレートに用いられないという意味で任意選択的であり、及び/又は、異なる実施形態では、2つのうちの一方だけを実装してもよいし、どちらも実装しなくてもよい。
データ要素幅フィールド1864−そのコンテンツは、(いくつかの実施形態では、すべての命令に対して、他の実施形態では、複数の命令のうちのいくつかのみに対して)多数のデータ要素幅のうちのどれが用いられるかを区別する。1つのデータ要素幅だけしかサポートされていない、及び/又は、オペコードのいくつかの態様を用いて、データ要素幅がサポートされている場合に必要とされないという意味で、このフィールドは任意選択的である。
書き込みマスクフィールド1870−そのコンテンツは、データ要素の位置に基づいて、デスティネーションベクトルオペランド内のデータ要素の位置がベースオペレーション及び拡張オペレーションの結果を反映するか否かを制御する。クラスAの命令テンプレートは、マージング−書き込みマスキングをサポートし、一方、クラスBの命令テンプレートは、マージング及びゼロ書き込みマスキングの両方をサポートする。マージする場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが、(ベースオペレーション及び拡張オペレーションにより指定される)任意のオペレーションの実行中に更新されることから保護することを可能にし、他の一実施形態において、対応するマスクビットが0を有するデスティネーションの各要素の古い値を保存する。対照的に、ゼロを書き込む場合、ベクトルマスクは、デスティネーションにおける要素の任意のセットが、(ベースオペレーション及び拡張オペレーションにより指定される)任意のオペレーションの実行中にゼロにされることを可能にし、一実施形態において、対応するマスクビットが0値を有する場合、デスティネーションの要素は0に設定される。この機能のサブセットは、実行されるオペレーションのベクトル長(すなわち、最初のものから最後のものまでの修正される要素のスパン)を制御する能力がある。しかしながら、修正された要素が連続している必要はない。したがって、書き込みマスクフィールド1870は、ロード、ストア、算術、論理などを含む部分的なベクトル演算を可能にする。書き込みマスクフィールド1870のコンテンツが用いられる書き込みマスクを含む多数の書き込みマスクレジスタのうちの1つを選択する(したがって、書き込みマスクフィールド1870のコンテンツは、実行対象のそのマスキングを間接的に識別する)本開示の実施形態が説明される一方、代替的な実施形態では、代わりに又は追加的に、マスク書き込みフィールド1870のコンテンツが実行されるマスキングを直接指定することを可能にする。
即値フィールド1872−そのコンテンツは、即値の指定を可能にする。このフィールドは、即値をサポートしていない汎用的なベクトルに適したフォーマットの実装において存在しておらず、かつ、即値を用いない命令にも存在していないという意味で任意選択的である。
クラスフィールド1868−そのコンテンツは、命令の異なるクラスを区別する。図18A〜図18Bを参照すると、このフィールドのコンテンツは、クラスA命令及びクラスB命令を選択する。図18A〜図18Bにおいて、角が丸められた四角は、フィールド(例えば、図18A〜図18Bのそれぞれにおけるクラスフィールド1868用のクラスA1868A及びクラスB1868B)に特定の値が存在することを示すために用いられる。
クラスAの命令テンプレート
クラスAの非メモリアクセス1805の命令テンプレートの場合、アルファフィールド1852は、RSフィールド1852Aとして解釈され、そのコンテンツは、異なる拡張オペレーションタイプのうちのどれが実行されるかを区別し(例えば、ラウンド1852A.1及びデータ変換1852A.2はそれぞれ、非メモリアクセス・ラウンドタイプオペレーション1810、及び、非メモリアクセスデータ変換型オペレーション1815の命令テンプレートに対して指定される)、一方、ベータフィールド1854は、指定されたタイプのオペレーションのうちどれが実行されるかを区別する。非メモリアクセス1805の命令テンプレートには、スケールフィールド1860、変位フィールド1862A及び変位スケールフィールド1862Bが存在しない。
非メモリアクセス命令テンプレート−フルラウンド制御型オペレーション
非メモリアクセス・フルラウンド制御型オペレーション1810の命令テンプレートにおいて、ベータフィールド1854は、ラウンド制御フィールド1854Aとして解釈され、そのコンテンツは、静的ラウンドを提供する。説明される本開示の実施形態において、ラウンド制御フィールド1854Aは、全浮動小数点例外抑制(SAE)フィールド1856及びラウンド操作制御フィールド1858を含み、代替的な実施形態では、これらの概念の両方を同じフィールドにエンコードすることをサポートしてもよく、又は、これらの概念/フィールドの一方又は他方のみを有してよい(例えば、ラウンド操作制御フィールド1858のみを有してよい)。
SAEフィールド1856−そのコンテンツは、例外イベント報告を無効化するか否かを区別し、SAEフィールド1856のコンテンツが、抑制が可能であることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグも報告せず、任意の浮動小数点例外ハンドラを立ち上げることもない。
ラウンド操作制御フィールド1858−そのコンテンツは、ラウンド操作のグループのうちのどれが実行するかを区別する(例えば、切り上げ、切り捨て、0への丸め及び近似値への丸め)。したがって、ラウンド操作制御フィールド1858は、1命令単位でラウンド操作モードの変更を可能にする。プロセッサがラウンド操作モードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンド操作制御フィールド1850のコンテンツは、そのレジスタ値をオーバライドする。
非メモリアクセス命令テンプレート−データ変換型オペレーション
非メモリアクセス・データ変換型オペレーション1815の命令テンプレートにおいて、ベータフィールド1854は、データ変換フィールド1854Bとして解釈され、そのコンテンツは、多数のデータ変換のうちのどれが実行されるかを区別する(例えば、非データ変換、スウィズル、ブロードキャスト)。
クラスAのメモリアクセス1820の命令テンプレートの場合、アルファフィールド1852は、エビクションヒントフィールド1852Bとして解釈され、そのコンテンツは、複数のエビクションヒントのうちのどれが用いられるかを区別し(図18Aにおいて、一時的1852B.1及び非一時的1852B.2はそれぞれ、メモリアクセス・一時的1825の命令テンプレート及びメモリアクセス・非一時的1830の命令テンプレートに指定される)、一方、ベータフィールド1854は、データ操作フィールド1854Cとして解釈され、そのコンテンツは、多数のデータ操作オペレーション(プリミティブとしても知られる)のうちのどれが実行されるかを区別する(例えば、非マニピュレーション、ブロードキャスト、ソースのアップコンバート及びデスティネーションのダウンコンバート)。メモリアクセス1820の命令テンプレートは、スケールフィールド1860を含み、任意選択的に、変位フィールド1862A又は変位スケールフィールド1862Bを含む。
ベクトルメモリ命令は、変換サポートを用いて、メモリからのベクトルロード及びメモリへのベクトルストアを実行する。通常のベクトル命令と同様に、ベクトルメモリ命令は、データ要素の様式でメモリから/メモリへデータを転送し、実際に転送される要素は、書き込みマスクとして選択されるベクトルマスクのコンテンツにより指示される。
メモリアクセス命令テンプレート−一時的
一時的データは、キャッシュから利益を得るのに十分なほど速やかに再利用される可能性が高いデータである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む異なる態様でそれを実装してもよい。
メモリアクセス命令テンプレート−非一時的
非一時的データは、第1レベルキャッシュにキャッシュする利益を受けられるほど速やかに再利用される可能性が低いデータであり、エビクションが優先されるべきである。しかしながら、これはヒントであり、異なるプロセッサは、ヒントを完全に無視することを含む異なる態様でそれを実装してもよい。
クラスBの命令テンプレート
クラスBの命令テンプレートの場合、アルファフィールド1852は、書き込みマスク制御(Z)フィールド1852Cとして解釈され、そのコンテンツは、書き込みマスクフィールド1870により制御される書き込みマスキングがマージングであるべきか、ゼロ化(zeroing)であるべきかを区別する。
クラスBの非メモリアクセス1805の命令テンプレートの場合、ベータフィールド1854の一部は、RLフィールド1857Aとして解釈され、そのコンテンツは、異なる拡張オペレーションタイプのうちのどれが実行されるかを区別し(例えば、ラウンド1857A.1及びベクトル長(VSIZE)1857A.2はそれぞれ、非メモリアクセス・書き込みマスク制御・部分的なラウンド制御型オペレーション1812の命令テンプレート、及び、非メモリアクセス・書き込みマスク制御・VSIZE型オペレーション1817の命令テンプレートに指定される)、一方、ベータフィールド1854の残りは、指定されたタイプのオペレーションのうちどれが実行されるかを区別する。非メモリアクセス1805の命令テンプレートには、スケールフィールド1860、変位フィールド1862A及び変位スケールフィールド1862Bが存在しない。
非メモリアクセス・書き込みマスク制御・部分的なラウンド制御型オペレーション1810の命令テンプレートにおいて、ベータフィールド1854の残りは、ラウンド操作フィールド1859Aとして解釈され、例外イベント報告が無効化される(所与の命令はいかなる種類の浮動小数点例外フラグも報告せず、任意の浮動小数点例外ハンドラを立ち上げることもない)。
ラウンド操作制御フィールド1859A−ラウンド操作制御フィールド1858と同じように、そのコンテンツは、ラウンド操作のグループのうちのどれが実行するかを区別する(例えば、切り上げ、切り捨て、0への丸め及び近似値への丸め)。したがって、ラウンド操作制御フィールド1859Aは、1命令単位でラウンド操作モードの変更を可能にする。プロセッサがラウンド操作モードを指定するための制御レジスタを含む本開示の一実施形態において、ラウンド操作制御フィールド1850のコンテンツは、そのレジスタ値をオーバライドする。
非メモリアクセス・書き込みマスク制御・VSIZE型オペレーション1817の命令テンプレートにおいて、ベータフィールド1854の残りは、ベクトル長フィールド1859Bとして解釈され、そのコンテンツは、多数のベクトル長のうちのどれが、実行されるかを区別する(例えば、128、256又は512バイト)。
クラスBのメモリアクセス1820の命令テンプレートの場合、ベータフィールド1854の一部は、ブロードキャストフィールド1857Bとして解釈され、そのコンテンツは、ブロードキャストタイプのデータ操作オペレーションが実行されるか否かを区別し、一方、ベータフィールド1854の残りは、ベクトル長フィールド1859Bとして解釈される。メモリアクセス1820の命令テンプレートは、スケールフィールド1860を含み、任意選択的に、変位フィールド1862A又は変位スケールフィールド1862Bを含む。
汎用的なベクトルに適した命令フォーマット1800に関して、フルオペコードフィールド1874は、フォーマットフィールド1840、ベースオペレーションフィールド1842及びデータ要素幅フィールド1864を含むことが示される。一実施形態では、フルオペコードフィールド1874がこれらのフィールドのすべてを含むことが示される一方、それらのすべてをサポートしていない実施形態では、フルオペコードフィールド1874がこれらのフィールドの一部を含むことが示される。フルオペコードフィールド1874は、オペレーションコード(オペコード)を提供する。
拡張オペレーションフィールド1850、データ要素幅フィールド1864及び書き込みマスクフィールド1870は、汎用的なベクトルに適した命令フォーマットにおいて1命令単位で、これらの機能が指定されることを可能にする。
書き込みマスクフィールド及びデータ要素幅フィールドの結合は、異なるデータ要素幅に基づいて、マスクが適用されることを可能にする型付き命令を作成する。
クラスA及びクラスB内で見つけられる様々な命令テンプレートは、異なる状況で有益である。本開示のいくつかの実施形態において、異なるプロセッサ又はプロセッサ内の異なるコアは、クラスAのみ、クラスBのみ、又は両方のクラスをサポートしてよい。例えば、汎用コンピューティング用の高性能汎用アウトオブオーダコアは、クラスBのみをサポートしてよく、主にグラフィックス及び/又は科学(スループット)コンピューティング向けのコアは、クラスAのみをサポートしてよく、両方用のコアは、両方をサポートしてよい(もちろん、コアは、両方のクラスからのテンプレート及び命令のいくつかの混合を有するが、両方のクラスからのすべてのテンプレート及び命令が開示の範囲内にあるわけではない)。また、単一のプロセッサは、複数のコアを含んでよく、そのすべてが同じクラスをサポートする、又は、異なるコアが異なるクラスをサポートする。例えば、別個のグラフィックス及び汎用コアを有するプロセッサにおいて、主に、グラフィックス及び/又は科学コンピューティング用の複数のグラフィックスコアは、クラスAのみをサポートしてよく、一方、複数の汎用コアのうちの1つ又は複数は、クラスBのみをサポートする汎用コンピューティング用のアウトオブオーダ実行及びレジスタリネーミングを有する高性能な汎用コアであってよい。別個のグラフィックスコアを有していない別のプロセッサは、クラスA及びクラスBの両方をサポートするもう1つの汎用インオーダ又はアウトオブオーダコアを含んでよい。もちろん、1つのクラスからの機能は、異なる本開示の実施形態において他のクラスに実装されてもよい。高水準言語に書き込まれるプログラムは、1)実行のターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、又は、2)すべてのクラスの命令を有する異なる結合を用いて書き込まれた代替的なルーチンを有し、かつ、コードを現在実行しているプロセッサによりサポートされる命令に基づいて実行するルーチンを選択する制御フローコードを有する形式を含む様々な異なる実行可能な形式に置き換えられる(例えば、ジャストインタイムでコンパイルされる又は静的にコンパイルされる)であろう。
例示的な特定のベクトルに適した命令フォーマット
図19は、本開示の実施形態に係る例示的な特定のベクトルに適した命令フォーマットを示すブロック図である。図19は、フィールドの位置、サイズ、解釈及び順序と同様に、これらのフィールドの一部の値も指定するという意味で固有である特定のベクトルに適した命令フォーマット1900を示す。特定のベクトルに適した命令フォーマット1900は、x86命令セットを拡張するために用いられてよく、したがって、フィールドのいくつかは、既存のx86命令セット及びこれらの拡張版(例えば、AVX)において用いられるものと同様又は同じである。このフォーマットは、拡張を伴う既存のx86命令セットのプレフィックスエンコードフィールド、リアルオペコードバイトフィールド、MOD R/Mフィールド、SIBフィールド、変位フィールド及び即値フィールドとの整合性を保つ。図18からのフィールドが図19のどのフィールドにマッピングされるかが示される。
本開示の実施形態では、例示の目的で汎用的なベクトルに適した命令フォーマット1800との関連で特定のベクトルに適した命令フォーマット1900を参照して説明されているが、本開示は、特許請求の範囲に記載されたものを除いて、特定のベクトルに適した命令フォーマット1900に限定されるものではないことを理解されたい。例えば、汎用的なベクトルに適した命令フォーマット1800は、様々フィールドに対する様々な可能性のあるサイズを検討し、一方、特定のベクトルに適した命令フォーマット1900は、特定のサイズのフィールドを有するように示される。具体的な例として、データ要素幅フィールド1864は、特定のベクトルに適した命令フォーマット1900において、1ビットフィールドとして示されているが、本開示は、そこまで限定されることはない(すなわち、汎用的なベクトルに適した命令フォーマット1800は、他のサイズのデータ要素幅フィールド1864を検討する)。
汎用的なベクトルに適した命令フォーマット1800は、図19Aに示される順序で以下に列挙される次のフィールドを含む。
EVEXプレフィックス(バイト0−3)1902は、4バイト形式にエンコードされる。
フォーマットフィールド1840(EVEXバイト0、ビット[7:0])−第1のバイト(EVEXバイト0)は、フォーマットフィールド1840であり、それは、0x62(本開示の一実施形態において、ベクトルに適した命令フォーマットを区別するために用いられる固有値)を含む。
第2〜第4バイト(EVEXバイト1−3)は、具体的な能力を提供する多数のビットフィールドを含む。
REXフィールド1905(EVEXバイト1、ビット[7‐5])−EVEX.Rビットフィールド(EVEXバイト1、ビット[7]−R)、EVEX.Xビットフィールド(EVEXバイト1、ビット[6]−X)及び1857BEXバイト1、ビット[5]−Bで構成される。EVEX.R、EVEX.X及びEVEX.Bビットフィールドは、対応するVEXビットフィールドと同じ機能を提供し、これらは、1の補数形式を用いてエンコードされる、すなわち、ZMM0は、1111Bとしてエンコードされ、ZMM15は、0000Bとしてエンコードされる。命令の他のフィールドは、当該技術分野において知られているように、レジスタインデックスの下位3ビット(rrr、xxx及びbbb)をエンコードし、その結果、EVEX.R、EVEX.X及びEVEX.Bを加えることにより、Rrrr、Xxxx及びBbbbが形成され得る。
REX'フィールド1810−これは、REX'フィールド1810の第1の部分であり、拡張32レジスタセットの上位16個又は下位16個のいずれかをエンコードするために用いられるEVEX.R'ビットフィールド(EVEXバイト1、ビット[4]−R')である。本開示の一実施形態において、このビットは、リアルオペコードバイトが62であるBOUND命令と(周知のx86 32ビットモードにおいて)区別するために、以下に示されるような他のものと共にビット反転フォーマットに格納されるが、MOD R/Mフィールド(以下に説明)では、MODフィールド内の値11を受け入れない。本開示の代替的な実施形態では、このビット及び以下に示される他のビットを反転フォーマットに格納しない。値1は、下位16個のレジスタをエンコードするために用いられる。言い換えると、R'Rrrrは、EVEX.R'、EVEX.R及び他のフィールドの他のRRRを結合することにより形成される。
オペコードマップフィールド1915(EVEXバイト1、ビット[3:0]−mmmm)−そのコンテンツは、暗黙の先頭オペコードバイト(0F、0F38又は0F3)をエンコードする。
データ要素幅フィールド1864(EVEXバイト2、ビット[7]−W)−表記EVEX.Wにより表される。EVEX.Wは、データタイプの粒度(サイズ)(32ビットデータ要素又は64ビットデータ要素のいずれか)を規定するために用いられる。
EVEX.vvvv1920(EVEXバイト2、ビット[6:3]−vvvv)−EVEX.vvvvの役割は、1)EVEX.vvvvが、反転(1の補数)形式において指定される第1のソースレジスタオペランドをエンコードし、2又はそれより多いソースオペランドを有する命令を有効にすること、2)EVEX.vvvvが、特定のベクトルシフトに対して1の補数形式で指定されるデスティネーションレジスタオペランドをエンコードすること、又は、3)EVEX.vvvvは、いずれのオペランドをエンコードすることはなく、当該フィールドは予約されており、1111bを含む。したがって、EVEX.VVVVフィールド1920は、反転(1の補数)形式で格納される第1のソースレジスタ指定子の下位ビットをエンコードする。命令に応じて、追加の異なるEVEXビットフィールドは、指定子のサイズを32個のレジスタに拡張するために用いられる。
EVEX.U1868のクラスフィールド(EVEXバイト2、ビット[2]−U)−EVEX.U=0である場合、クラスA又はEVEX.U0を示し、EVEX.U=1である場合、クラスB又はEVEX.U1を示す。
プレフィックスエンコードフィールド1925(EVEXバイト2、ビット[1:0]−pp)−ベースオペレーションフィールドに追加のビットを提供する。EVEXプレフィックスフォーマットにおけるレガシSSE命令にサポートを提供することに加えて、これはまた、SIMDプレフィックスをコンパクトにするという利点を有する(SIMDプレフィックスを表現するバイトを必要とするのではなく、EVEXプレフィックスが2ビットのみを必要とする)。一実施形態において、レガシフォーマット及びEVEXプレフィックスフォーマットの両方において、SIMDプレフィックス(66H、F2H、F3H)を用いるレガシSSE命令をサポートするために、これらのレガシSIMDプレフィックスは、SIMDプレフィックスエンコードフィールドへとエンコードされ、デコーダのPLAに提供される前に、ランタイムにおいてレガシSIMDプレフィックスへと拡張される(そのため、PLAは、これらのレガシ命令のレガシ及びEVEXフォーマットの両方を修正することなく実行できる。より新しい命令では、オペコード拡張として、EVEXプレフィックスエンコードフィールドのコンテンツを直接的に用いることができ、ある実施形態では、整合性を目的として同様に拡張するが、これらのレガシSIMDプレフィックスにより異なる意味が指定されることを可能にする。代替的な実施形態は、2ビットのSIMDプレフィックスエンコーディングをサポートするようにPLAを再設計してよく、したがって、拡張する必要がない。
アルファフィールド1852(EVEXバイト3、ビット[7]−EH、EVEX.EH、EVEX.rs、EVEX.RL、EVEX.write mask control及びEVEX.Nとしても知られ、また、αを用いて示される)−前述したように、このフィールドは、コンテキストに固有のものである。
ベータフィールド1854(EVEXバイト3、ビット[6:4]−SSS、EVEX.s2−0、EVEX.r2−0、EVEX、rrl、EVEX.LL0、EVEX.LLBとしても知られ、また、βββを用いて示される)−前述したように、このフィールドは、コンテキストに固有のものである。
REX'フィールド1810−これは、REX'フィールドの残りであり、拡張32レジスタセットの上位16個又は下位16個のいずれかをエンコードするために用いられ得るEVEX.V'ビットフィールド(EVEXバイト3、ビット[3]−V')である。このビットは、ビット反転フォーマットに格納される。値1は、下位16個のレジスタをエンコードするために用いられる。言い換えると、V'VVVVは、EVEX.V'、EVEX.vvvvを結合することにより形成される。
書き込みマスクフィールド1870(EVEXバイト3、ビット[2:0]−kkk)−そのコンテンツは、前述したように書き込みマスクレジスタ内のレジスタインデックスを指定する。本開示の一実施形態において、特定の値EVEX.kkk=000は、特定の命令に用いられる書き込みマスクが存在しないことを示唆する特別な挙動を有する(これは、すべてのものに対してハードウェアに組み込まれる書き込みマスク、又は、マスキングハードウェアをバイパスするハードウェアの使用を含む様々な態様で実装され得る)。
リアルオペコードフィールド1930(バイト4)はオペコードバイトとしても知られる。オペコードの一部は、このフィールドにおいて指定される。
MOD R/Mフィールド1940(バイト5)は、MODフィールド1942、Regフィールド1944及びR/Mフィールド1946を含む。前述したように、MODフィールド1942のコンテンツは、メモリアクセスと非メモリアクセスオペレーションとを区別する。Regフィールド1944の役割は、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコーディングする、又は、オペコード拡張として取り扱われ、かつ、任意の命令オペランドをエンコードするのに用いられない、という2つの状況に要約され得る。R/Mフィールド1946の役割は、メモリアドレスを参照する命令オペランドをエンコーディングすること、又は、デスティネーションレジスタオペランド又はソースレジスタオペランドのいずれかをエンコーディングすることを含んでよい。
スケール、インデックス、ベース(SIB)バイト(バイト6)−前述したように、スケールフィールド1850のコンテンツは、メモリアドレス生成に用いられる。SIB.xxx1954及びSIB.bbb1956−これらのフィールドのコンテンツは、レジスタインデックスXxxx及びBbbbに関して前に言及されている。
変位フィールド1862A(バイト7〜10)−MODフィールド1942が10を含む場合、バイト7〜10は、変位フィールド1862Aであり、それは、レガシ32ビット変位(disp32)と同じく機能し、バイト粒度で機能する。
変位ファクタフィールド1862B(バイト7)−MODフィールド1942が01を含む場合、バイト7は変位ファクタフィールド1862Bである。このフィールドの位置は、バイト粒度で機能するレガシx86命令セットの8ビット変位(disp8)の位置と同じである。disp8は符号拡張されるので、−128から127バイトオフセット間のみでアドレスを指定することができ、64バイトのキャッシュラインに関して、disp8は、4つの実際に有用な値、−128、−64、0及び64のみに設定され得る8ビットを用いる。多くの場合、より広い範囲が必要とされることから、disp32が用いられる。しかしながら、disp32には4バイトが必要である。disp8及びdisp32とは対照的に、変位ファクタフィールド1862Bは、disp8を再解釈したものであり、変位ファクタフィールド1862Bを用いる場合、実際の変位は、メモリオペランドアクセス(N)のサイズで乗算された変位ファクタフィールドのコンテンツにより決定される。このタイプの変位は、disp8*Nと称される。これは、平均命令長を縮小する(変位に用いられるが範囲がはるかに広くなる単一バイト)。そのような圧縮された変位は、有効な変位がメモリアクセスの粒度の倍数であるという前提に基づいており、よって、アドレスオフセットの冗長下位ビットはエンコードされる必要がない。言い換えると、変位ファクタフィールド1862Bは、レガシx86命令セットの8ビット変位に置き換わる。したがって、変位ファクタフィールド1862Bは、disp8がdisp8*Nにオーバーロードされるという例外のみで、x86命令セットの8ビット変位と同じ態様でエンコードされる(そのため、ModRM/SIBエンコーディングルールに変更はない)。言い換えると、エンコーディングのルール又はエンコーディングの長さに変更はないが、(メモリオペランドのサイズにより変位をスケーリングして、バイトに関するアドレスオフセットを取得する必要がある)ハードウェアによる変位値の解釈のみに変更がある。即値フィールド1872は、前述したように操作する。
フルオペコードフィールド
図19Bは、本開示の一実施形態に係るフルオペコードフィールド1874を作成する特定のベクトルに適した命令フォーマット1900のフィールドを示すブロック図である。具体的には、フルオペコードフィールド1874は、フォーマットフィールド1840、ベースオペレーションフィールド1842及びデータ要素幅(W)フィールド1864を含む。ベースオペレーションフィールド1842は、プレフィックスエンコードフィールド1925、オペコードマップフィールド1915及びリアルオペコードフィールド1930を含む。
レジスタインデックスフィールド
図19Cは、本開示の一実施形態に係るレジスタインデックスフィールド1844を作成する特定のベクトルに適した命令フォーマット1900のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド1844は、REXフィールド1905、REX'フィールド1910、MODR/M.regフィールド1944、MODR/M.r/mフィールド1946、VVVVフィールド1920、xxxフィールド1954及びbbbフィールド1956を含む。
拡張オペレーションフィールド
図19Dは、本開示の一実施形態に係る拡張オペレーションフィールド1850を作成する特定のベクトルに適した命令フォーマット1900のフィールドを示すブロック図である。クラス(U)フィールド1868が0を含む場合、EVEX.U0(クラスA1868A)を表し、1を含む場合は、EVEX.U1(クラスB1868B)を表す。U=0、かつMODフィールド1942が11を含む(非メモリアクセスオペレーションを意味する)場合、アルファフィールド1852(EVEXバイト3、ビット[7])−EH)は、RSフィールド1852Aとして解釈される。RSフィールド1852Aが1(ラウンド1852A.1)を含む場合、ベータフィールド1854(EVEXバイト3、ビット[6:4]−SSS)は、ラウンド制御フィールド1854Aとして解釈される。ラウンド制御フィールド1854Aは、1ビットのSAEフィールド1856及び2ビットのラウンド操作フィールド1858を含む。RSフィールド1852Aが0(データ変換1852A.2)を含む場合、ベータフィールド1854(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ変換フィールド1854Bとして解釈される。U=0、かつMODフィールド1942が00、01又は10を含む(メモリアクセスオペレーションを意味する)場合、アルファフィールド1852(EVEXバイト3、ビット[7]−EH)は、エビクションヒント(EH)フィールド1852Bとして解釈され、ベータフィールド1854(EVEXバイト3、ビット[6:4]−SSS)は、3ビットのデータ操作フィールド1854Cとして解釈される。
U=1である場合、アルファフィールド1852(EVEXバイト3、ビット[7]−EH)は、書き込みマスク制御(Z)フィールド1852Cとして解釈される。U=1、かつMODフィールド1942が11を含む(非メモリアクセスオペレーションを意味する)場合、ベータフィールド1854の一部(EVEXバイト3、ビット[4]−S)は、RLフィールド1857Aとして解釈され、1(ラウンド1857A.1)を含む場合、ベータフィールド1854の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ラウンド操作フィールド1859Aとして解釈され、一方、RLフィールド1857Aが0(VSIZE1857.A2)を含む場合、ベータフィールド1854の残り(EVEXバイト3、ビット[6−5]−S2−1)は、ベクトル長フィールド1859B(EVEXバイト3、ビット[6−5]−L1−0)として解釈される。U=1、かつMODフィールド1942が00、01又は10を含む(メモリアクセスオペレーションを意味する)場合、ベータフィールド1854(EVEXバイト3、ビット[6:4]−SSS)は、ベクトル長フィールド1859B(EVEXバイト3、ビット[6−5]−L1−0)及びブロードキャストフィールド1857B(EVEXバイト3、ビット[4]−B)として解釈される。
例示的なレジスタアーキテクチャ
図20は、本開示の一実施形態に係るレジスタアーキテクチャ2000のブロック図である。図示される実施形態において、512ビット幅である32個のベクトルレジスタ2010があり、これらのレジスタは、zmm0からzmm31と称される。下位16個のzmmレジスタの下位256ビットは、レジスタymm0〜16上にオーバーレイされる。下位16個のzmmレジスタの下位128ビット(ymmレジスタの下位128ビット)は、レジスタxmm0〜15上にオーバーレイされる。以下の表に示されるように、特定のベクトルに適した命令フォーマット1900は、これらのオーバーレイされたレジスタファイルに対して操作する。
言い換えると、ベクトル長フィールド1859Bは、最大長から1又は複数の他のより短い長さまでの範囲内から選択し、そのようなより短い長さはそれぞれ、先行する長さの半分の長さであり、ベクトル長フィールド1859Bなしの命令テンプレートは、最大のベクトル長に対して操作する。さらに、一実施形態において、特定のベクトルに適した命令フォーマット1900のクラスBの命令テンプレートは、パックド又はスカラ単/倍精度浮動小数点データ及びパックド又はスカラ整数データに対して操作する。スカラ演算は、zmm/ymm/xmmレジスタ内の最下位のデータ要素の位置に対して実行されるオペレーションであり、実施形態に応じて、上位のデータ要素の位置は、それらが命令前と同じままであるか、又は、ゼロにされるかのいずれかである。
書き込みマスクレジスタ2015−図示される実施形態において、8つの書き込みマスクレジスタ(k0からk7)があり、それぞれ64ビットのサイズである。代替的な実施形態において、書き込みマスクレジスタ2015は、16ビットのサイズである。前述したように、本開示の一実施形態において、ベクトルマスクレジスタk0は、書き込みマスクとして用いられることができず、通常k0を示すエンコーディングが書き込みマスクに用いられる場合、0xFFFFのハードウェアに組み込まれる書き込みマスクを選択することで、その命令に対する書き込みマスキングを効果的に無効にする。
汎用レジスタ2025−図示される実施形態において、メモリオペランドにアドレスを指定するために、既存のx86アドレス指定モードと共に用いられる16個の64ビット汎用レジスタがある。これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP及びR8からR15という名称により参照される。
MMXパックド整数フラットレジスタファイル2050がエイリアスされるスカラ浮動小数点スタックレジスタファイル(x87スタック)2045−図示される実施形態において、x87スタックは、x87命令セット拡張を用いて、32/64/80ビットの浮動小数点データに対するスカラ浮動小数点演算を実行するために用いられる8要素スタックであり、一方、MMXレジスタは、64ビットのパックド整数データに対するオペレーションを実行するために用いられ、同様に、MMXとXMMレジスタとの間で実行される一部の演算に対するオペランドを保持するために用いられる。
本開示の代替的な実施形態では、より広い又はより狭いレジスタを用いてよい。さらに、本開示の代替的な実施形態では、より多い、より少ない又は異なるレジスタファイル及びレジスタを用いてよい。
例示的なコアアーキテクチャ、プロセッサ及びコンピュータアーキテクチャ
プロセッサコアは、異なる態様で、異なる目的で、かつ、異なるプロセッサにおいて実装されてよい。例えば、そのようなコアの実装は、1)汎用コンピューティング用の汎用インオーダコア、2)汎用コンピューティング用の高性能汎用アウトオブオーダコア、3)主にグラフィックス及び/又は科学(スループット)コンピューティング向けの専用コアを含んでよい。異なるプロセッサの実装は、1)汎用コンピューティング用の1又は複数の汎用インオーダコア、及び/又は、汎用コンピューティング用の1又は複数の汎用アウトオブオーダコアを含むCPU、及び、2)主にグラフィックス及び/又は科学(スループット)用の1又は複数の特別用途コアを含むコプロセッサを含んでよい。そのような異なるプロセッサは、異なるコンピュータシステムアーキテクチャをもたらし、それは、1)CPUとは別個のチップ上のコプロセッサ、2)CPUと同じパッケージ内の別個のダイ上のコプロセッサ、3)CPUと同じダイ上のコプロセッサ(この場合、そのようなコプロセッサは、場合によっては、例えば、統合グラフィックス及び/又は科学(スループット)論理などの特別用途論理と称され、又は、特別用途コアと称される)、及び、4)説明されたCPUと同じダイ上に含まれ得るシステムオンチップ(場合によっては、アプリケーションコア又はアプリケーションプロセッサ、上述のコプロセッサ及び追加的な機能性と称される)を含んでよい。例示的なコアアーキテクチャが説明されているが、次に、例示的なプロセッサ及びコンピュータアーキテクチャの説明が続く。
例示的なコアアーキテクチャ
インオーダ及びアウトオブオーダコアのブロック図
図21Aは、本開示の実施形態に係る、例示的なインオーダパイプライン及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行パイプラインの両方を示すブロック図である。図21Bは、本開示の実施形態に係るプロセッサに含まれるインオーダアーキテクチャコアの例示的な実施形態及び例示的なレジスタリネーミング、アウトオブオーダ発行/実行アーキテクチャコアの両方を示すブロック図である。図21A〜図21B内の実線の枠は、インオーダパイプライン及びインオーダコアを示し、一方、任意選択的な追加の破線の枠は、レジスタリネーミング、アウトオブオーダ発行/実行パイプライン及びコアを示す。インオーダ態様が、アウトオブオーダ態様のサブセットであることを前提に、アウトオブオーダ態様が説明される。
図21Aにおいて、プロセッサパイプライン2100は、フェッチステージ2102、長さデコードステージ2104、デコードステージ2106、割り当てステージ2108、リネームステージ2110、スケジューリング(ディスパッチ又は発行としても知られる)ステージ2112、レジスタ読み出し/メモリ読み出しステージ2114、実行ステージ2116、ライトバック/メモリ書き込みステージ2118、例外処理ステージ2122及びコミットステージ2124を含む。
図21Bは、実行エンジンユニット2150に結合されるフロントエンドユニット2130を含むプロセッサコア2190を示し、両方ともメモリユニット2170に結合される。コア2190は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア又はハイブリッド若しくは代替的なコアタイプであってよい。さらに別のオプションとして、コア2190は、例えば、ネットワーク又は通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィックス処理ユニット(GPGPU)コア又はグラフィックスコアなどの特別用途コアであってよい。
フロントエンドユニット2130は、命令キャッシュユニット2134に結合される分岐予測ユニット2132を含み、命令キャッシュユニット2134は命令変換ルックアサイドバッファ(TLB)2136に結合され、命令変換ルックアサイドバッファ(TLB)2136は命令フェッチユニット2138に結合され、命令フェッチユニット2138はデコードユニット2140に結合される。デコードユニット2140(又は、デコーダ若しくはデコーダユニット)は、命令(例えば、マクロ命令)をデコードし、1又は複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、又は、他の制御信号を出力として生成してよく、これらは、元の命令からデコードされ、そうでなければ、元の命令を反映し、又は、元の命令から導出される。デコードユニット2140は、様々な異なるメカニズムを用いて実装されてよい。適切なメカニズムの例は、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブル論理アレイ(PLA)、マイクロコードリードオンリメモリ(ROM)などを含む。一実施形態において、コア2190は、マイクロコードROM、又は、特定のマクロ命令に対するマイクロコードを格納する(例えば、デコードユニット2140における、そうでなければ、フロントエンドユニット2130内の)他の媒体を含む。デコードユニット2140は、実行エンジンユニット2150内のリネーム/割り当てユニット2152に結合される。
実行エンジンユニット2150は、リタイアメントユニット2154に結合されるリネーム/割り当てユニット2152、及び、1又は複数のスケジューラユニット2156のセットを含む。スケジューラユニット2156は、予約ステーション、中央命令ウィンドウなどを含む任意の数の異なるスケジューラを表す。スケジューラユニット2156は、物理レジスタファイルユニット2158に結合される。物理レジスタファイルユニット2158のそれぞれは、1又は複数の物理レジスタファイル、1又は複数の異なるデータタイプを格納する異なるいくつか、例えば、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス(例えば、実行対象の次の命令のアドレスである命令ポインタ)などを表す。一実施形態において、物理レジスタファイルユニット2158は、ベクトルレジスタユニット、書き込みマスクレジスタユニット及びスカラレジスタユニットを有する。これらのレジスタユニットは、アーキテクチャのベクトルレジスタ、ベクトルマスクレジスタ及び汎用レジスタを提供し得る。物理レジスタファイルユニット2158は、(例えば、リオーダバッファ及びリタイアメントレジスタファイルを用いる、将来のファイル、履歴バッファ及びリタイアメントレジスタファイルを用いる、レジスタマップ及びレジスタのプールを用いるなどして)レジスタリネーミング及びアウトオブオーダ実行が実装され得る様々な態様を示すために、リタイアメントユニット2154により重ね合わせられている。リタイアメントユニット2154及び物理レジスタファイルユニット2158は、実行クラスタ2160に結合される。実行クラスタ2160は、1又は複数の実行ユニット2162のセット、及び、1又は複数のメモリアクセスユニット2164のセットを含む。実行ユニット2162は、様々なオペレーション(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行してよい。いくつかの実施形態では、特定の機能又は機能のセットに専用の多数の実行ユニットを含んでよく、一方、他の実施形態では、1つの実行ユニットのみ、又は、すべての機能をすべてが実行する複数の実行ユニットを含んでよい。ある実施形態では、特定のタイプのデータ/オペレーションに対して別個のパイプライン(例えば、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、及び/又は、メモリアクセスパイプラインは、独自のスケジューラユニット、物理レジスタファイルユニット、及び/又は、実行クラスタをそれぞれが有する−別個のメモリアクセスパイプラインの場合、ある実施形態では、このパイプラインの実行クラスタのみがメモリアクセスユニット2164を有する実施形態において実装される)を作成するので、スケジューラユニット2156、物理レジスタファイルユニット2158及び実行クラスタ2160は、場合によっては複数のものとして示されている。別個のパイプラインが用いられる場合、これらのパイプラインのうちの1つ又は複数はアウトオブオーダ発行/実行であってよく、残りはインオーダであってよいことも理解されたい。
メモリアクセスユニット2164のセットは、メモリユニット2170に結合され、メモリユニット2170は、レベル2(L2)キャッシュユニット2176に結合されるデータキャッシュユニット2174に結合されるデータTLBユニット2172を含む。一つの例示的な実施形態において、メモリアクセスユニット2164は、ロードユニット、格納アドレスユニット及び格納データユニットを含んでよく、それぞれが、メモリユニット2170内のデータTLBユニット2172に結合される。命令キャッシュユニット2134は、メモリユニット2170内のレベル2(L2)キャッシュユニット2176にさらに結合される。L2キャッシュユニット2176は、1又は複数の他のレベルのキャッシュに結合されて、最終的にメインメモリに結合される。
例として、例示的なレジスタリネーミング、アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン2100を実装してよい。1)命令フェッチ2138がフェッチ及び長さデコードステージ2102及び2104を実行し、2)デコードユニット2140がデコードステージ2106を実行し、3)リネーム/割り当てユニット2152が割り当てステージ2108及びリネームステージ2110を実行し、4)スケジューラユニット2156がスケジューリングステージ2112を実行し、5)物理レジスタファイルユニット2158及びメモリユニット2170がレジスタ読み出し/メモリ読み出しステージ2114を実行して、実行クラスタ2160が実行ステージ2116を実行し、6)メモリユニット2170及び物理レジスタファイルユニット2158がライトバック/メモリ書き込みステージ2118を実行し、7)様々なユニットが例外処理ステージ2122に関連してよく、8)リタイアメントユニット2154及び物理レジスタファイルユニット2158がコミットステージ2124を実行する。
コア2190は、本明細書で説明された命令を含む、1又は複数の命令セット(例えば、(より新しいバージョンで追加されたいくつかの拡張を伴う)x86命令セット)、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット、カリフォルニア州サニーベールのARMホールディングスの(例えば、NEONなどの任意選択的な追加の拡張を伴う)ARM命令セットをサポートしてよい。一実施形態において、コア2190は、パックドデータ命令セット拡張(例えば、AVX1、AVX2)をサポートする論理を含み、これによって、多くのマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて実行されることを可能にする。
コアは、(2又はそれより多くのオペレーション又はスレッドの並列セットを実行する)マルチスレッディングをサポートしてよく、タイムスライス型マルチスレッディング、同時マルチスレッディング(物理コアが同時にマルチスレッディングするスレッドのそれぞれに対して、単一の物理コアが論理的なコアを提供する)、又は、これらの組み合わせ(例えば、インテル(登録商標)ハイパースレッディング・テクノロジーにおける、例えば、タイムスライス型フェッチング及びデコーディング、並びに、その後の同時マルチスレッディング)を含む様々な態様で行われてよいことを理解されたい。
レジスタリネーミングがアウトオブオーダ実行との関連で説明されているが、レジスタリネーミングはインオーダアーキテクチャにおいて用いられ得ることに理解されたい。プロセッサの図示される実施形態ではまた、別個の命令及びデータキャッシュユニット2134/2174、並びに、共有型L2キャッシュユニット2176を含むが、代替的な実施形態では、命令及びデータ両方のために、例えば、レベル1(L1)内部キャッシュ又はマルチレベルの内部キャッシュなどの単一の内部キャッシュを有してよい。いくつかの実施形態において、システムは、内部キャッシュと、コア及び/又はプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。代替的に、キャッシュのすべては、コア及び/又はプロセッサの外部にあってよい。
具体的な例示的インオーダコアアーキテクチャ
図22A〜図22Bは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示し、そのコアは、チップ内の(同じタイプ及び/又は異なるタイプの他のコアを含む)いくつかの論理ブロックのうちの1つであろう。論理ブロックは、高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を通じて、アプリケーションに応じて、いくつかの固定機能論理、メモリI/Oインタフェース及び他の必要なI/O論理と通信する。
図22Aは、本開示の実施形態に係る、オンダイ相互接続ネットワーク2202へのその接続、及び、レベル2(L2)キャッシュ2204のローカルサブセットと共に示すシングルプロセッサコアのブロック図である。一実施形態において、命令デコードユニット2200は、パックドデータ命令セット拡張を有するx86命令セットをサポートする。L1キャッシュ2206は、スカラ及びベクトルユニットへのキャッシュメモリに対する低レイテンシなアクセスを可能にする。一実施形態では、(設計を単純化するために)、スカラユニット2208及びベクトルユニット2210は、別個のレジスタセット(それぞれ、スカラレジスタ2212及びベクトルレジスタ2214)を用いており、それらの間を転送されるデータは、メモリに書き込まれ、次に、レベル1(L1)キャッシュ2206からリードバックされるが、一方、本開示の代替的な実施形態では、異なるアプローチ(例えば、単一のレジスタセットを用いる、又は、書き込まれることもリードバックされることもなく2つのレジスタファイル間でデータが転送されることを可能にする通信パスを含む)を用いてよい。
L2キャッシュのローカルサブセット2204は、プロセッサコア毎に1つずつ、別個のローカルサブセットに分割されるグローバルL2キャッシュの一部である。各プロセッサコアは、L2キャッシュの独自のローカルサブセット2204へのダイレクトアクセスパスを有する。プロセッサコアにより読み出されるデータは、そのL2キャッシュサブセット2204に格納され、これら自身のローカルL2キャッシュサブセットにアクセスする他のプロセッサコアと並列して、迅速にアクセスされ得る。プロセッサコアにより書き込まれるデータは、独自のL2キャッシュサブセット2204に格納され、必要な場合、他のサブセットからフラッシュされる。リングネットワークは、共有データに対するコヒーレンシを確保する。リングネットワークは、例えば、プロセッサコア、L2キャッシュ及び他の論理ブロックなどのエージェントがチップ内で互いに通信を行うことを可能にするために双方向である。各リングデータパスは一方向あたり1012ビット幅である。
図22Bは、本開示の実施形態に係る図22Aにおけるプロセッサコアの一部の拡大図である。図22Bは、L1キャッシュ2204のL1データキャッシュ2206A部分、並びに、ベクトルユニット2210及びベクトルレジスタ2214に関するさらなる詳細を含む。具体的には、ベクトルユニット2210は、16幅ベクトル処理ユニット(VPU)(16幅ALU2228を参照)であり、これは、整数、単精度浮動及び倍精度浮動命令のうちの1つ又は複数を実行する。VPUは、スウィズルユニット2220を用いたレジスタ入力のスウィズル、数値変換ユニット2222A−Bを用いた数値変換、及び、メモリ入力に対する複製ユニット2224を用いた複製をサポートする。書き込みマスクレジスタ2226は、結果としてもたらすベクトル書き込みをプレディケートすることを可能にする。
図23は、本開示の実施形態に係る1より多いコアを有し得る、統合メモリコントローラを有し得る、及び、統合グラフィックスを有し得るプロセッサ2300のブロック図である。図23内の実線の枠は、シングルコア2302Aと、システムエージェント2310と、1又は複数のバスコントローラユニット2316のセットとを有するプロセッサ2300を示し、一方、任意選択的な追加の破線の枠は、複数のコア2302A−Nと、システムエージェントユニット2310内の1又は複数の統合メモリコントローラユニット2314のセットと、特別用途論理2308とを有する代替的なプロセッサ2300を示す。
したがって、プロセッサ2300の異なる実装は、1)(1又は複数のコアを含み得る)統合グラフィックス及び/又は科学(スループット)論理である特別用途論理2308を有するCPU、及び、1又は複数の汎用コアであるコア2302A−N(例えば、汎用インオーダコア、汎用アウトオブオーダコア、この2つの組み合わせ)、2)主にグラフィックス及び/又は科学(スループット)用の多数の特別用途コアであるコア2302A−Nを有するコプロセッサ、及び、3)多数の汎用インオーダコアであるコア2302A−Nを有するコプロセッサを含んでよい。したがって、プロセッサ2300は、汎用プロセッサ、コプロセッサ又は特別用途プロセッサ、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU(汎用グラフィックス処理ユニット)、高スループットの多集積コア(MIC)コプロセッサ(30又はそれより多いコアを含む)、埋め込み型プロセッサなどであってよい。プロセッサは、1又は複数のチップ上に実装されてよい。プロセッサ2300は、例えば、BiCMOS、CMOS又はNMOSなどの多数の処理技術のうちのいずれかを用いる1又は複数の基板の一部であってよい、及び/又は、1又は複数の基板上に実装されてよい。
メモリ階層は、コア内の1又は複数のレベルのキャッシュ、1又は複数の共有キャッシュユニット2306のセット、及び、統合メモリコントローラユニット2314のセットに結合される外部メモリ(図示されていない)を含む。共有キャッシュユニットのセット2306は、例えば、レベル2(L2、レベル3(L3)、レベル4(L4)又は他のレベルのキャッシュなどの1又は複数の中間レベルのキャッシュ、ラストレベルキャッシュ(LLC)及び/又はこれらの組み合わせを含んでよい。一実施形態において、リングベースの相互接続ユニット2312は、統合グラフィックス論理2308、共有キャッシュユニットのセット2306及びシステムエージェントユニット2310/統合メモリコントローラユニット2314を相互接続し、代替的な実施形態では、そのようなユニットを相互接続するための任意の数の周知技術を用いてよい。一実施形態において、コヒーレンシは、1又は複数のキャッシュユニット2306とコア2302−A−Nとの間で維持される。
いくつかの実施形態において、コア2302A−Nのうちの1つ又は複数は、マルチスレッディングが可能である。システムエージェント2310は、コア2302A−Nを調整及び動作させるこれらのコンポーネントを含む。システムエージェントユニット2310は、例えば、電力制御ユニット(PCU)及びディスプレイユニットを含んでよい。PCUは、コア2302A−N及び統合グラフィックス論理2308の電力状態を調整するために必要な論理及びコンポーネントであってよい、又は、これらを含んでよい。ディスプレイユニットは、1又は複数の外部に接続されたディスプレイを駆動させるためのものである。
コア2302A−Nは、アーキテクチャ命令セットに関して同種又は異種であってよい、すなわち、コア2302A−Nの2又はそれより多くは、同じ命令セットを実行することが可能であり得る一方、他のものは、その命令セットのサブセット又は異なる命令セットのみを実行することが可能であり得る。
例示的なコンピュータアーキテクチャ
図24〜図27は、例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込み型プロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス及び様々な他の電子デバイスに関して当該技術分野で知られる他のシステム設計及び構成にも適している。概して、本明細書で開示されるようなプロセッサ及び/又は他の実行論理を組み込むことが可能な多様なシステム又は電子デバイスが概して適している。
ここで図24を参照すると、本開示の一実施形態に係るシステム2400のブロック図が示される。システム2400は、1又は複数のプロセッサ2410、2415を含んでよく、これらはコントローラハブ2420に結合される。一実施形態において、コントローラハブ2420は、グラフィックスメモリコントローラハブ(GMCH)2490及び入出力ハブ(IOH)2450(別個のチップにあってよい)を含み、GMCH2490は、メモリ2440及びコプロセッサ2445に結合されるメモリ及びグラフィックスコントローラを含み、IOH2450は、入力/出力(I/O)デバイス2460をGMCH2490に結合する。代替的に、メモリ及びグラフィックスコントローラの一方又は両方は、(本明細書で説明されたように)プロセッサ内に統合され、メモリ2440及びコプロセッサ2445は、プロセッサ2410、及びIOH2450を有する単一のチップ内のコントローラハブ2420に直接的に結合される。メモリ2440は、暗号化モジュール2440Aを含んでよく、例えば、実行されるときに、プロセッサに、本開示のいずれかの方法を実行させるコードを格納する。
追加のプロセッサ2415の任意選択的な特性が図24に破線で示されている。各プロセッサ2410、2415は、本明細書で説明される処理コアのうちの1つ又は複数を含んでよく、プロセッサ2300のいくつかのバージョンであってよい。
メモリ2440は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)又はその2つの組み合わせであってよい。少なくとも1つの実施形態に関して、コントローラハブ2420は、マルチドロップバス、例えば、フロントサイドバス(FSB)、Quickpath相互接続(QPI)などのポイントツーポイントインタフェース、又は、同様の接続2495を介してプロセッサ2410、2415と通信する。
一実施形態において、コプロセッサ2445は、特別用途プロセッサ、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU、埋め込み型プロセッサなどである。一実施形態において、コントローラハブ2420は、統合グラフィックスアクセラレータを含んでよい。
アーキテクチャ特性、マイクロアーキテクチャ特性、熱特性及び電力消費特性などを含む広範な評価基準の利点の観点から、物理リソース2410、2415間には様々な違いあり得る。
一実施形態において、プロセッサ2410は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。命令内に埋め込まれるものはコプロセッサ命令であり得る。プロセッサ2410は、取り付けられたコプロセッサ2445により実行されるべきタイプのものとしてこれらのコプロセッサ命令を認識する。したがって、プロセッサ2410は、これらのコプロセッサ命令(又は、コプロセッサ命令を表す制御信号)をコプロセッサ2445に向けてコプロセッサバス又は他の相互接続上に発行する。コプロセッサ2445は、受信したコプロセッサ命令を受け入れて実行する。
ここで図25を参照すると、本開示の実施形態に係る第1のより具体的で例示的なシステム2500のブロック図が示される。図25に示されるように、マルチプロセッサシステム2500は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続2550を介して結合される第1のプロセッサ2570及び第2のプロセッサ2580を含む。プロセッサ2570及び2580のそれぞれは、プロセッサ2300のいくつかのバージョンであってよい。本開示の一実施形態において、プロセッサ2570及び2580はそれぞれ、プロセッサ2410及び2415であり、一方、コプロセッサ2538はコプロセッサ2445である。別の実施形態において、プロセッサ2570及び2580はそれぞれ、プロセッサ2410及びコプロセッサ2445である。
プロセッサ2570及び2580は、統合メモリコントローラ(IMC)ユニット2572及び2582をそれぞれ含むことが示されている。プロセッサ2570はまた、そのバスコントローラユニットの一部としてポイントツーポイント(P−P)インタフェース2576及び2578を含み、同様に、第2のプロセッサ2580は、P−Pインタフェース2586及び2588を含む。プロセッサ2570、2580P−Pインタフェース回路2578、2588を用いてポイントツーポイント(P−P)インタフェース2550を介して情報を交換し得る。図25に示されるように、IMC2572及び2582は、プロセッサをメモリ、すなわち、メモリ2532及びメモリ2534にそれぞれ結合し、これらは、それぞれのプロセッサにローカルに取り付けられるメインメモリの一部であってよい。
プロセッサ2570、2580はそれぞれ、ポイントツーポイントインタフェース回路2576、2594、2586、2598を用いて、個々のP−Pインタフェース2552、2554を介してチップセット2590と情報を交換し得る。チップセット2590は、高性能インタフェース2539を介してコプロセッサ2538と情報を任意選択的に交換してよい。一実施形態において、コプロセッサ2538は、特別用途プロセッサ、例えば、ハイスループットMICプロセッサ、ネットワーク又は通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、GPGPU又は埋め込み型プロセッサなどである。
共有キャッシュ(図示されていない)は、プロセッサ又は両方のプロセッサの外部のいずれかに含まれてよく、さらに、P−P相互接続を介してプロセッサと接続されてよく、その結果、プロセッサが低電力モードに置かれている場合、プロセッサのローカルキャッシュ情報のいずれか又は両方は、共有キャッシュに格納されてよい。
チップセット2590は、インタフェース2596を介して第1のバス2516に結合されてよい。一実施形態において、第1のバス2516は、ペリフェラルコンポーネントインターコネクト(PCI)バス、若しくは、PCI Expressバス又は別の第3世代I/O相互接続バスのようなバスであってよいが、本開示の範囲はそこまで限定されることはない。
図25に示されるように、様々なI/Oデバイス2514は、第1のバス2516と共に、第1のバス2516を第2のバス2520に結合するバスブリッジ2518に結合されてよい。一実施形態において、1又は複数の追加のプロセッサ2515、例えば、コプロセッサ、ハイスループットMICプロセッサ、GPGPUのアクセラレータ(例えば、グラフィックスアクセラレータ又はデジタル信号処理(DSP)ユニット)、フィールドプログラマブルゲートアレイ、又は、任意の他のプロセッサが第1のバス2516に結合される。一実施形態において、第2のバス2520はローピンカウント(LPC)バスであってよい。一実施形態において、例えば、キーボード及び/又はマウス2522、通信デバイス2527及びストレージユニット2528、命令/コード及びデータ2530などを含み得るディスクドライブ又は他の大容量ストレージデバイスを含む様々なデバイスが、第2のバス2520に結合されてよい。さらに、オーディオI/O2524は、第2のバス2520に結合されてよい。他のアーキテクチャが可能であることに留意する。例えば、図25のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は他のそのようなアーキテクチャを実装してよい。
ここで図26を参照すると、本開示の実施形態に係る第2のより具体的で例示的なシステム2600のブロック図が示される。図25及び図26の同様の要素には同様の参照符号を付しており、図25の特定の態様は、図26の他の態様を曖昧になることを回避するために、図26から省略されている。
図26は、プロセッサ2570、2580が統合メモリ及びI/O制御論理(「CL」)2572及び2582をそれぞれ含み得ることを示す。したがって、CL2572、2582は統合メモリコントローラユニットを含み、I/O制御論理を含む。図26は、メモリ2532、2534がCL2572、2582に結合されるだけでなく、I/Oデバイス2614もまた、制御論理2572、2582に結合されることを示す。レガシI/Oデバイス2615がチップセット2590に結合される。
ここで図27を参照すると、本開示の実施形態に係るSoC2700のブロック図が示される。図23の同様の要素には同様の参照符号を付している。また、破線の枠は、より高度なSoC上の任意選択的な機能である。図27において、相互接続ユニット2702は、1又は複数のコア202A−Nのセット及び共有キャッシュユニット2306を含むアプリケーションプロセッサ2710と、システムエージェントユニット2310と、バスコントローラユニット2316と、統合メモリコントローラユニット2314と、統合グラフィックス論理と、イメージプロセッサと、オーディオプロセッサ及びビデオプロセッサを含み得る1又は複数のコプロセッサ2720のセットと、スタティックランダムアクセスメモリ(SRAM)ユニット2730と、ダイレクトメモリアクセス(DMA)ユニット2732と、1又は複数の外部ディスプレイに結合するためのディスプレイユニット2740とに結合される。一実施形態において、コプロセッサ2720は、特別用途プロセッサ、例えば、ネットワーク又は通信プロセッサ、圧縮エンジン、GPGPU、ハイスループットMICプロセッサ又は埋め込み型プロセッサなどを含む。
本明細書に開示される(例えば、メカニズムの)実施形態は、ハードウェア、ソフトウェア、ファームウェア又はそのような実装アプローチの組み合わせで実装されてよい。本開示の実施形態では、少なくとも1つのプロセッサ、ストレージシステム(揮発性及び不揮発性メモリ及び/又はストレージ要素を含む)、少なくとも1つの入力デバイス及び少なくとも1つの出力デバイスを有するプログラマブルシステム上で実行するコンピュータプログラム又はプログラムコードとして実装されてよい。
プログラムコード、例えば、図25に示されるコード2530は、本明細書で説明される機能を実行して、出力情報を生成するための入力命令に適用され得る。出力情報は、既知の様式で、1又は複数の出力デバイスに適用されてよい。本願の目的のために、処理システムは、例えば、デジタルシグナルプロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)又はマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
プログラムコードは、処理システムと通信するために、高水準手順型又はオブジェクト指向プログラミング言語で実装されてよい。プログラムコードはまた、必要に応じて、アセンブリ言語又は機械言語で実装されてよい。実際に、本明細書で説明されるメカニズムは、任意の特定のプログラミング言語の範囲に限定されるものではない。いずれの場合であっても、言語は、コンパイラ型言語又はインタプリタ型言語であってよい。
少なくとも1つの実施形態の1又は複数の態様では、プロセッサ内の様々な論理を表す機械可読媒体に格納される代表的な命令により実装されてよく、これは、マシンにより読み出される場合、本明細書で説明される技術を実行させる論理をマシンに構築させる。「IPコア」として知られるそのような代表的なものは、有形の機械可読媒体に格納され、論理又はプロセッサを実際に作成する製造機械にロードするために、様々な顧客又は製造施設に供給されてよい。
そのような機械可読記憶媒体は、例えば、ハードディスク、フロッピーディスク、光ディスク、コンパクトディスクリードオンリメモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)及び磁気−光ディスク、リードオンリメモリ(ROM)、ランダムアクセスメモリ(RAM)、例えばダイナミックランダムアクセスメモリ(DRAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラマブルリードオンリメモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ(EEPROM)、相変化メモリ(PCM)、磁気又は光カード又は電子命令を格納するのに適したその他のタイプの媒体などの半導体デバイスを含む任意のその他のタイプのディスクなどの記憶媒体を含む、マシン又はデバイスにより製造又は形成される非一時的な有形の構成をした物品を限定することなく含み得る。
したがって、本開示の実施形態はまた、命令を含む又は設計データ、例えば、本明細書で説明される構造、回路、装置、プロセッサ及び/又はシステムの機能を規定するハードウェア記述言語(HDL)を含む非一時的な有形の機械可読媒体を含む。そのような実施形態では、プログラム製品とも称され得る。
エミュレーション(バイナリ変換、コードモーフィングなどを含む)
場合によっては、命令変換器は、命令セットを供給からターゲット命令セットに命令を変換するために用いられてよい。例えば、命令変換器は、命令を、コアにより処理される1又は複数の他の命令に、(例えば、静的バイナリ変換、動的コンパイルを含む動的バイナリ変換を用いて)翻訳、モーフィング、エミュレート又はそうでなければ、変換してよい。命令変換器は、ソフトウェア、ハードウェア、ファームウェア又はこれらの組み合わせで実装されてよい。命令変換器は、プロセッサ上、プロセッサ外、又は、プロセッサ上の一部及びプロセッサ外の一部であってよい。
図28は、本開示の実施形態に係る、ソース命令セット内のバイナリ命令をターゲット命令セット内のバイナリ命令に変換するソフトウェア命令変換器の使用を対比したブロック図である。図示される実施形態において、命令変換器は、ソフトウェア命令変換器であるが、代替的に、命令変換器は、ソフトウェア、ファームウェア、ハードウェア又はこれらの様々な組み合わせで実装されてよい。図28は、高水準言語2802におけるプログラムを示し、少なくとも1つのx86命令セットコアを有するプロセッサ2816によりネイティブに実行され得るx86バイナリコード2806を生成するために、x86コンパイラ2804を用いてコンパイルされてよい。少なくとも1つのx86命令セットコアを有するプロセッサ2816は、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと同じ結果を実質的に達成するために、(1)インテル(登録商標)x86命令セットコアの命令セットの大部分、又は、(2)少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサを実行する対象のアプリケーション又は他のソフトウェアのオブジェクトコードのバージョンを互換的に実行することにより、そうでなければ、処理することにより、少なくとも1つのx86命令セットコアを有するインテル(登録商標)プロセッサと同じ機能を実質的に実行できる任意のプロセッサを表す。x86コンパイラ2804は、追加のリンケージ処理を用いて又は用いることなく、少なくとも1つのx86命令セットコアを有するプロセッサ2816上で実行され得るx86バイナリコード2806(例えば、オブジェクトコード)を生成するように動作可能なコンパイラを表す。同様に、図28は、少なくとも1つのx86命令セットコアのないプロセッサ2814(例えば、カリフォルニア州サニーベールのMIPSテクノロジーズのMIPS命令セット実行する、及び/又は、カリフォルニア州サニーベールのARMホールディングスのARM命令セットを実行するコアを有するプロセッサ)によりネイティブに実行され得る代替的な命令セットのバイナリコード2810を生成するために、高水準言語2802内のプログラムが代替的な命令セットコンパイラ2808を用いてコンパイルされ得ることを示す。命令変換器2812は、x86バイナリコード2806を、x86命令セットコアなしのプロセッサ2814によりネイティブに実行され得るコードに変換するために用いられる。これを可能にする命令変換器が作成するのは難しいので、この変換されたコードは、代替的な命令セットのバイナリコード2810と同じである可能性は低い。しかしながら、変換されたコードは、一般的なオペレーションを実現し、代替的な命令セットからの命令で構成される。したがって、命令変換器2812は、エミュレーション、シミュレーション又はその他の処理を通じてx86命令セットプロセッサ又はコアを有していないプロセッサ又は他の電子デバイスが、x86バイナリコード2806を実行することを可能にするソフトウェア、ファームウェア、ハードウェア又はそれらの組み合わせを表す。
[項目1]
暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
上記ベクトルレジスタからの第1の入力及び上記ベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、上記第1のモジュラ加算器、及び、上記ベクトルレジスタからの第2のデータパスに結合される第2のモジュラ加算器とを有する第1のデータパス、及び、
上記第2の入力、及び、上記ベクトルレジスタからの第3のデータパスに結合される第1の論理XOR回路と、上記第1の論理XOR回路に結合される第1のローテート回路と、上記第1のローテート回路及び上記第3のデータパスに結合される第2の論理XOR回路と、上記第2の論理XOR回路に結合される第2のローテート回路とを有する上記第2のデータパス
を有する回路と、
上記第1のデータパスの上記第1のモジュラ加算器及び上記第2のモジュラ加算器、並びに、上記第2のデータパスの上記第1の論理XOR回路、上記第2の論理XOR回路、上記第1のローテート回路及び上記第2のローテート回路に、1又は複数の制御値に従って上記ラウンドの一部を実行させ、上記一部に対する上記第1のデータパスからの第1の結果と、上記一部に対する上記第2のデータパスからの第2の結果とを上記ベクトルレジスタに格納させる制御回路と
を備える装置。
[項目2]
初回のサイクルにおいて、上記入力ベクトルは、第1の要素に格納される第1の定数値及び上記第1の要素に隣接する第2の要素に格納される第2の定数値を有し、上記制御回路は、上記初回のサイクルにおける上記回路への入力として上記第1の定数値又は上記第2の定数値を供給するように、上記ベクトルレジスタと上記回路との間に結合されるマルチプレクサを制御する、項目1に記載の装置。
[項目3]
初回のサイクルにおいて、上記入力ベクトルは、隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を有し、上記制御回路は、上記初回のサイクルにおける上記回路への入力として、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値を提供する、項目1に記載の装置。
[項目4]
上記制御回路は、上記回路の上記第1のデータパスのための、上記ベクトルレジスタからの上記第1の入力に上記第1の定数値を提供し、上記初回のサイクルにおける上記回路の上記第2のデータパスのための、上記ベクトルレジスタからの上記第2の入力に上記第1のキー値を提供する、項目3に記載の装置。
[項目5]
上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値は、上記初回のサイクルにおいて、上記ベクトルレジスタの第1の端部における隣接要素に格納され、上記制御回路は、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値を上記回路に入力して出力値を生成し、上記ラウンドの次のサイクルのために、上記ベクトルレジスタの第2の端部の隣接要素に上記出力値を格納する、項目3に記載の装置。
[項目6]
上記制御回路は、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値以外の上記初回のサイクルの上記入力ベクトルを、上記ラウンドの上記次のサイクルのために上記ベクトルレジスタの上記第1の端部において開始する要素にシフトし、上記出力値は、上記ラウンドの上記次のサイクルのために、上記ベクトルレジスタの上記第2の端部の上記隣接要素に格納される、項目5に記載の装置。
[項目7]
上記制御回路は、上記ベクトルレジスタの上記第1の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための値を上記回路に入力して上記ラウンドの上記追加のサイクルのための出力値を生成し、上記ラウンドの上記追加のサイクルのための上記出力値、及び、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を上記ベクトルレジスタに格納させる、項目6に記載の装置。
[項目8]
上記制御回路は、上記ベクトルレジスタの上記第1の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための値を上記回路に入力して上記ラウンドの上記追加のサイクルのための出力値を生成し、上記ラウンドの上記追加のサイクルのための上記出力値のサブセットからの値、及び、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で上記ベクトルレジスタの上記第1の端部における隣接要素に格納させ、上記追加のサイクルの後の上記次のサイクルのために部分的にアラインされた状態で、上記第1の端部以外の上記ベクトルレジスタの要素に上記サブセット以外の値を格納させる、項目6に記載の装置。
[項目9]
暗号化演算のラウンドの入力ベクトルをベクトルレジスタに格納する段階と、
上記ベクトルレジスタからの第1の入力及び上記ベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、上記第1のモジュラ加算器、及び、上記ベクトルレジスタからの回路の第2のデータパスに結合される第2のモジュラ加算器とを有する上記回路の第1のデータパスにおいて、上記第1のモジュラ加算器を用いて、上記入力ベクトルからの上記第1の入力からの第1の値と、上記ベクトルレジスタからの上記第2の入力からの第2の値とを加算して第1の中間結果を生成すること、及び、上記第2のモジュラ加算器を用いて、上記第1の中間結果と、上記第2のデータパスからの第3の中間結果とを加算して第1の結果を生成すること、並びに、
上記第2の入力、及び、上記ベクトルレジスタからの上記回路の第3のデータパスに結合される第1の論理XOR回路と、上記第1の論理XOR回路に結合される第1のローテート回路と、上記第1のローテート回路及び上記第3のデータパスに結合される第2の論理XOR回路と、上記第2の論理XOR回路に結合される第2のローテート回路とを有する上記回路の上記第2のデータパスにおいて、上記第1の論理XOR回路を用いて、上記ベクトルレジスタからの上記第2の入力からの上記第2の値と、上記第3のデータパスからの第3の結果との論理XORをとって第2の中間結果を生成すること、上記第1のローテート回路を用いて、1又は複数の制御値に従って上記第2の中間結果をローテートさせて第3の中間結果を生成すること、上記第3の中間結果と上記第3のデータパスからの第4の結果との論理XORをとって第5の中間結果を生成すること、及び、上記第2のローテート回路を用いて、1又は複数の制御値に従って上記第5の中間結果をローテートさせて第2の結果を生成すること
により、上記回路を用いて上記入力ベクトルに対する上記ラウンドの一部を実行する段階と、
上記一部に対する上記第1のデータパスからの上記第1の結果と、上記一部に対する上記第2のデータパスからの上記第2の結果とを上記ベクトルレジスタに格納する段階と
を備える方法。
[項目10]
上記入力ベクトルを上記格納する段階は、初回のサイクルにおいて、第1の要素内の第1の定数値及び上記第1の要素に隣接する第2の要素内の第2の定数値を格納する段階を有し、さらに、上記ベクトルレジスタと上記回路との間に結合されるマルチプレクサをスイッチングして、上記初回のサイクルにおける上記回路への入力として上記第1の定数値又は上記第2の定数値を供給する段階を有する、項目9に記載の方法。
[項目11]
上記入力ベクトルを上記格納する段階は、初回のサイクルにおいて、上記入力ベクトルの隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を格納する段階を有し、さらに、上記初回のサイクルにおける上記回路への入力として、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値を送信する段階を有する、項目9に記載の方法。
[項目12]
上記送信する段階は、上記回路の上記第1のデータパスのための、上記ベクトルレジスタからの上記第1の入力に上記第1の定数値を上記第1の値として送信する段階、及び、上記初回のサイクルにおける上記回路の上記第2のデータパスのための、上記ベクトルレジスタからの上記第2の入力に上記第1のキー値を上記第2の値として送信する段階を有する、項目11に記載の方法。
[項目13]
上記入力ベクトルを上記格納する段階は、初回のサイクルにおいて、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値を上記ベクトルレジスタの第1の端部における隣接要素に格納する段階を有し、上記送信する段階は、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値を上記回路に送信して、上記第1の結果及び上記第2の結果を含む出力値を生成する段階、及び、上記ラウンドの次のサイクルのために、上記ベクトルレジスタの第2の端部の隣接要素に上記出力値を格納する段階を有する、項目11に記載の方法。
[項目14]
上記実行する段階は、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値以外の上記初回のサイクルの上記入力ベクトルを、上記ラウンドの上記次のサイクルのために上記ベクトルレジスタの上記第1の端部において開始する要素にシフトする段階、及び、上記ラウンドの上記次のサイクルのために、上記ベクトルレジスタの上記第2の端部の上記隣接要素に上記出力値を格納する段階を有する、項目13に記載の方法。
[項目15]
上記ベクトルレジスタの上記第1の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための入力値を上記回路に送信して上記ラウンドの上記追加のサイクルのための出力値を生成する段階と、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、上記ラウンドの上記追加のサイクルのための上記出力値、及び、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を上記ベクトルレジスタに格納する段階とをさらに備える、項目14に記載の方法。
[項目16]
上記ベクトルレジスタの上記第1の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための入力値を上記回路に送信して上記ラウンドの上記追加のサイクルのための出力値を生成する段階と、上記ラウンドの上記追加のサイクルのための上記出力値のサブセットからの値、及び、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で上記ベクトルレジスタの上記第1の端部における隣接要素に格納する段階と、上記追加のサイクルの後の上記次のサイクルのために部分的にアラインされた状態で、上記第1の端部以外の上記ベクトルレジスタの要素に上記サブセット以外の値を格納する段階とをさらに備える、項目14に記載の方法。
[項目17]
スレッドを実行し、暗号化演算をオフロードするハードウェアプロセッサと、
上記暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
ハードウェアアクセラレータであって、
上記ベクトルレジスタからの第1の入力及び上記ベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、上記第1のモジュラ加算器、及び、上記ベクトルレジスタからの第2のデータパスに結合される第2のモジュラ加算器とを有する第1のデータパス、及び
上記第2の入力、及び、上記ベクトルレジスタからの第3のデータパスに結合される第1の論理XOR回路と、上記第1の論理XOR回路に結合される第1のローテート回路と、上記第1のローテート回路及び上記第3のデータパスに結合される第2の論理XOR回路と、上記第2の論理XOR回路に結合される第2のローテート回路とを有する上記第2のデータパス
を含む回路、並びに、
上記第1のデータパスの上記第1のモジュラ加算器及び上記第2のモジュラ加算器、並びに、上記第2のデータパスの上記第1の論理XOR回路、上記第2の論理XOR回路、上記第1のローテート回路及び上記第2のローテート回路に、1又は複数の制御値に従って上記ラウンドの一部を実行させ、上記一部に対する上記第1のデータパスからの第1の結果と、上記一部に対する上記第2のデータパスからの第2の結果とを上記ベクトルレジスタに格納させる制御回路
を有するハードウェアアクセラレータと
を備えるシステム。
[項目18]
初回のサイクルにおいて、上記入力ベクトルは、第1の要素に格納される第1の定数値及び上記第1の要素に隣接する第2の要素に格納される第2の定数値を有し、上記制御回路は、上記初回のサイクルにおける上記回路への入力として上記第1の定数値又は上記第2の定数値を供給するように、上記ベクトルレジスタと上記回路との間に結合されるマルチプレクサを制御する、項目17に記載のシステム。
[項目19]
初回のサイクルにおいて、上記入力ベクトルは、隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を有し、上記制御回路は、上記初回のサイクルにおける上記回路への入力として、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値を提供する、項目17に記載のシステム。
[項目20]
上記制御回路は、上記回路の上記第1のデータパスのための、上記ベクトルレジスタからの上記第1の入力に上記第1の定数値を提供し、上記初回のサイクルにおける上記回路の上記第2のデータパスのための、上記ベクトルレジスタからの上記第2の入力に上記第1のキー値を提供する、項目19に記載のシステム。
[項目21]
上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値は、上記初回のサイクルにおいて、上記ベクトルレジスタの第1の端部における隣接要素に格納され、上記制御回路は、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値を上記回路に入力して出力値を生成し、上記ラウンドの次のサイクルのために、上記ベクトルレジスタの第2の端部の隣接要素に上記出力値を格納する、項目19に記載のシステム。
[項目22]
上記制御回路は、上記第1の定数値、上記第1のキー値、上記第2のキー値及び上記第1のブロックカウンタ値以外の上記初回のサイクルの上記入力ベクトルを、上記ラウンドの上記次のサイクルのために上記ベクトルレジスタの上記第1の端部において開始する要素にシフトし、上記出力値は、上記ラウンドの上記次のサイクルのために、上記ベクトルレジスタの上記第2の端部の上記隣接要素に格納される、項目21に記載のシステム。
[項目23]
上記制御回路は、上記ベクトルレジスタの上記第1の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための値を上記回路に入力して、上記ラウンドの上記追加のサイクルのための出力値を生成し、上記ラウンドの上記追加のサイクルのための上記出力値、及び、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、上記ベクトルレジスタに、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を格納させる、項目22に記載のシステム。
[項目24]
上記制御回路は、上記ベクトルレジスタの上記第1の端部における複数の隣接要素からの上記ラウンドの追加のサイクルのための値を上記回路に入力して上記ラウンドの上記追加のサイクルのための出力値を生成し、上記ラウンドの上記追加のサイクルのための上記出力値のサブセットからの値、及び、上記複数の隣接要素以外の上記ベクトルレジスタの要素からの値を、上記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で上記ベクトルレジスタの上記第1の端部における隣接要素に格納させ、上記追加のサイクルの後の上記次のサイクルのために部分的にアラインされた状態で、上記第1の端部以外の上記ベクトルレジスタの要素に上記サブセット以外の値を格納させる、項目22に記載のシステム。

Claims (25)

  1. 暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
    前記ベクトルレジスタからの第1の入力及び前記ベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、前記第1のモジュラ加算器、及び、前記ベクトルレジスタからの第2のデータパスに結合される第2のモジュラ加算器とを有する第1のデータパス、及び、
    前記第2の入力、及び、前記ベクトルレジスタからの第3のデータパスに結合される第1の論理XOR回路と、前記第1の論理XOR回路に結合される第1のローテート回路と、前記第1のローテート回路及び前記第3のデータパスに結合される第2の論理XOR回路と、前記第2の論理XOR回路に結合される第2のローテート回路とを有する前記第2のデータパス
    を有する回路と、
    前記第1のデータパスの前記第1のモジュラ加算器及び前記第2のモジュラ加算器、並びに、前記第2のデータパスの前記第1の論理XOR回路、前記第2の論理XOR回路、前記第1のローテート回路及び前記第2のローテート回路に、1又は複数の制御値に従って前記ラウンドの一部を実行させ、前記一部に対する前記第1のデータパスからの第1の結果と、前記一部に対する前記第2のデータパスからの第2の結果とを前記ベクトルレジスタに格納させる制御回路と
    を備える装置。
  2. 初回のサイクルにおいて、前記入力ベクトルは、第1の要素に格納される第1の定数値及び前記第1の要素に隣接する第2の要素に格納される第2の定数値を有し、前記制御回路は、前記初回のサイクルにおける前記回路への入力として前記第1の定数値又は前記第2の定数値を供給するように、前記ベクトルレジスタと前記回路との間に結合されるマルチプレクサを制御する、請求項1に記載の装置。
  3. 初回のサイクルにおいて、前記入力ベクトルは、隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を有し、前記制御回路は、前記初回のサイクルにおける前記回路への入力として、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値を提供する、請求項1又は2に記載の装置。
  4. 前記制御回路は、前記回路の前記第1のデータパスのための、前記ベクトルレジスタからの前記第1の入力に前記第1の定数値を提供し、前記初回のサイクルにおける前記回路の前記第2のデータパスのための、前記ベクトルレジスタからの前記第2の入力に前記第1のキー値を提供する、請求項3に記載の装置。
  5. 前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値は、前記初回のサイクルにおいて、前記ベクトルレジスタの第1の端部における隣接要素に格納され、前記制御回路は、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値を前記回路に入力して出力値を生成し、前記ラウンドの次のサイクルのために、前記ベクトルレジスタの第2の端部の隣接要素に前記出力値を格納する、請求項3又は4に記載の装置。
  6. 前記制御回路は、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値以外の前記初回のサイクルの前記入力ベクトルを、前記ラウンドの前記次のサイクルのために前記ベクトルレジスタの前記第1の端部において開始する要素にシフトし、前記出力値は、前記ラウンドの前記次のサイクルのために、前記ベクトルレジスタの前記第2の端部の前記隣接要素に格納される、請求項5に記載の装置。
  7. 前記制御回路は、前記ベクトルレジスタの前記第1の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための値を前記回路に入力して前記ラウンドの前記追加のサイクルのための出力値を生成し、前記ラウンドの前記追加のサイクルのための前記出力値、及び、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を前記ベクトルレジスタに格納させる、請求項6に記載の装置。
  8. 前記制御回路は、前記ベクトルレジスタの前記第1の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための値を前記回路に入力して前記ラウンドの前記追加のサイクルのための出力値を生成し、前記ラウンドの前記追加のサイクルのための前記出力値のサブセットからの値、及び、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で前記ベクトルレジスタの前記第1の端部における隣接要素に格納させ、前記追加のサイクルの後の前記次のサイクルのために部分的にアラインされた状態で、前記第1の端部以外の前記ベクトルレジスタの要素に前記サブセット以外の値を格納させる、請求項6又は7に記載の装置。
  9. 暗号化演算のラウンドの入力ベクトルをベクトルレジスタに格納する段階と、
    前記ベクトルレジスタからの第1の入力及び前記ベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、前記第1のモジュラ加算器、及び、前記ベクトルレジスタからの回路の第2のデータパスに結合される第2のモジュラ加算器とを有する前記回路の第1のデータパスにおいて、前記第1のモジュラ加算器を用いて、前記入力ベクトルからの前記第1の入力からの第1の値と、前記ベクトルレジスタからの前記第2の入力からの第2の値とを加算して第1の中間結果を生成すること、及び、前記第2のモジュラ加算器を用いて、前記第1の中間結果と、前記第2のデータパスからの第3の中間結果とを加算して第1の結果を生成すること、並びに、
    前記第2の入力、及び、前記ベクトルレジスタからの前記回路の第3のデータパスに結合される第1の論理XOR回路と、前記第1の論理XOR回路に結合される第1のローテート回路と、前記第1のローテート回路及び前記第3のデータパスに結合される第2の論理XOR回路と、前記第2の論理XOR回路に結合される第2のローテート回路とを有する前記回路の前記第2のデータパスにおいて、前記第1の論理XOR回路を用いて、前記ベクトルレジスタからの前記第2の入力からの前記第2の値と、前記第3のデータパスからの第3の結果との論理XORをとって第2の中間結果を生成すること、前記第1のローテート回路を用いて、1又は複数の制御値に従って前記第2の中間結果をローテートさせて第3の中間結果を生成すること、前記第3の中間結果と前記第3のデータパスからの第4の結果との論理XORをとって第5の中間結果を生成すること、及び、前記第2のローテート回路を用いて、1又は複数の制御値に従って前記第5の中間結果をローテートさせて第2の結果を生成すること
    により、前記回路を用いて前記入力ベクトルに対する前記ラウンドの一部を実行する段階と、
    前記一部に対する前記第1のデータパスからの前記第1の結果と、前記一部に対する前記第2のデータパスからの前記第2の結果とを前記ベクトルレジスタに格納する段階と
    を備える方法。
  10. 前記入力ベクトルを前記格納する段階は、初回のサイクルにおいて、第1の要素内の第1の定数値及び前記第1の要素に隣接する第2の要素内の第2の定数値を格納する段階を有し、さらに、前記ベクトルレジスタと前記回路との間に結合されるマルチプレクサをスイッチングして、前記初回のサイクルにおける前記回路への入力として前記第1の定数値又は前記第2の定数値を供給する段階を有する、請求項9に記載の方法。
  11. 前記入力ベクトルを前記格納する段階は、初回のサイクルにおいて、前記入力ベクトルの隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を格納する段階を有し、さらに、前記初回のサイクルにおける前記回路への入力として、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値を送信する段階を有する、請求項9又は10に記載の方法。
  12. 前記送信する段階は、前記回路の前記第1のデータパスのための、前記ベクトルレジスタからの前記第1の入力に前記第1の定数値を前記第1の値として送信する段階、及び、前記初回のサイクルにおける前記回路の前記第2のデータパスのための、前記ベクトルレジスタからの前記第2の入力に前記第1のキー値を前記第2の値として送信する段階を有する、請求項11に記載の方法。
  13. 前記入力ベクトルを前記格納する段階は、初回のサイクルにおいて、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値を前記ベクトルレジスタの第1の端部における隣接要素に格納する段階を有し、前記送信する段階は、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値を前記回路に送信して、前記第1の結果及び前記第2の結果を含む出力値を生成する段階、及び、前記ラウンドの次のサイクルのために、前記ベクトルレジスタの第2の端部の隣接要素に前記出力値を格納する段階を有する、請求項11又は12に記載の方法。
  14. 前記実行する段階は、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値以外の前記初回のサイクルの前記入力ベクトルを、前記ラウンドの前記次のサイクルのために前記ベクトルレジスタの前記第1の端部において開始する要素にシフトする段階、及び、前記ラウンドの前記次のサイクルのために、前記ベクトルレジスタの前記第2の端部の前記隣接要素に前記出力値を格納する段階を有する、請求項13に記載の方法。
  15. 前記ベクトルレジスタの前記第1の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための入力値を前記回路に送信して前記ラウンドの前記追加のサイクルのための出力値を生成する段階と、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、前記ラウンドの前記追加のサイクルのための前記出力値、及び、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を前記ベクトルレジスタに格納する段階とをさらに備える、請求項14に記載の方法。
  16. 前記ベクトルレジスタの前記第1の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための入力値を前記回路に送信して前記ラウンドの前記追加のサイクルのための出力値を生成する段階と、前記ラウンドの前記追加のサイクルのための前記出力値のサブセットからの値、及び、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で前記ベクトルレジスタの前記第1の端部における隣接要素に格納する段階と、前記追加のサイクルの後の前記次のサイクルのために部分的にアラインされた状態で、前記第1の端部以外の前記ベクトルレジスタの要素に前記サブセット以外の値を格納する段階とをさらに備える、請求項14又は15に記載の方法。
  17. スレッドを実行し、暗号化演算をオフロードするハードウェアプロセッサと、
    前記暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
    ハードウェアアクセラレータであって、
    前記ベクトルレジスタからの第1の入力及び前記ベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、前記第1のモジュラ加算器、及び、前記ベクトルレジスタからの第2のデータパスに結合される第2のモジュラ加算器とを有する第1のデータパス、及び
    前記第2の入力、及び、前記ベクトルレジスタからの第3のデータパスに結合される第1の論理XOR回路と、前記第1の論理XOR回路に結合される第1のローテート回路と、前記第1のローテート回路及び前記第3のデータパスに結合される第2の論理XOR回路と、前記第2の論理XOR回路に結合される第2のローテート回路とを有する前記第2のデータパス
    を含む回路、並びに、
    前記第1のデータパスの前記第1のモジュラ加算器及び前記第2のモジュラ加算器、並びに、前記第2のデータパスの前記第1の論理XOR回路、前記第2の論理XOR回路、前記第1のローテート回路及び前記第2のローテート回路に、1又は複数の制御値に従って前記ラウンドの一部を実行させ、前記一部に対する前記第1のデータパスからの第1の結果と、前記一部に対する前記第2のデータパスからの第2の結果とを前記ベクトルレジスタに格納させる制御回路
    を有するハードウェアアクセラレータと
    を備えるシステム。
  18. 初回のサイクルにおいて、前記入力ベクトルは、第1の要素に格納される第1の定数値及び前記第1の要素に隣接する第2の要素に格納される第2の定数値を有し、前記制御回路は、前記初回のサイクルにおける前記回路への入力として前記第1の定数値又は前記第2の定数値を供給するように、前記ベクトルレジスタと前記回路との間に結合されるマルチプレクサを制御する、請求項17に記載のシステム。
  19. 初回のサイクルにおいて、前記入力ベクトルは、隣接要素に格納される第1の定数値、第1のキー値、第2のキー値及び第1のブロックカウンタ値を有し、前記制御回路は、前記初回のサイクルにおける前記回路への入力として、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値を提供する、請求項17又は18に記載のシステム。
  20. 前記制御回路は、前記回路の前記第1のデータパスのための、前記ベクトルレジスタからの前記第1の入力に前記第1の定数値を提供し、前記初回のサイクルにおける前記回路の前記第2のデータパスのための、前記ベクトルレジスタからの前記第2の入力に前記第1のキー値を提供する、請求項19に記載のシステム。
  21. 前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値は、前記初回のサイクルにおいて、前記ベクトルレジスタの第1の端部における隣接要素に格納され、前記制御回路は、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値を前記回路に入力して出力値を生成し、前記ラウンドの次のサイクルのために、前記ベクトルレジスタの第2の端部の隣接要素に前記出力値を格納する、請求項19又は20に記載のシステム。
  22. 前記制御回路は、前記第1の定数値、前記第1のキー値、前記第2のキー値及び前記第1のブロックカウンタ値以外の前記初回のサイクルの前記入力ベクトルを、前記ラウンドの前記次のサイクルのために前記ベクトルレジスタの前記第1の端部において開始する要素にシフトし、前記出力値は、前記ラウンドの前記次のサイクルのために、前記ベクトルレジスタの前記第2の端部の前記隣接要素に格納される、請求項21に記載のシステム。
  23. 前記制御回路は、前記ベクトルレジスタの前記第1の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための値を前記回路に入力して、前記ラウンドの前記追加のサイクルのための出力値を生成し、前記ラウンドの前記追加のサイクルのための前記出力値、及び、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で、前記ベクトルレジスタに、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を格納させる、請求項22に記載のシステム。
  24. 前記制御回路は、前記ベクトルレジスタの前記第1の端部における複数の隣接要素からの前記ラウンドの追加のサイクルのための値を前記回路に入力して前記ラウンドの前記追加のサイクルのための出力値を生成し、前記ラウンドの前記追加のサイクルのための前記出力値のサブセットからの値、及び、前記複数の隣接要素以外の前記ベクトルレジスタの要素からの値を、前記追加のサイクルの後の次のサイクルのために完全にアラインされた状態で前記ベクトルレジスタの前記第1の端部における隣接要素に格納させ、前記追加のサイクルの後の前記次のサイクルのために部分的にアラインされた状態で、前記第1の端部以外の前記ベクトルレジスタの要素に前記サブセット以外の値を格納させる、請求項22又は23に記載のシステム。
  25. 暗号化演算のラウンドの入力ベクトルを格納するベクトルレジスタと、
    回路であって、
    前記ベクトルレジスタからの第1の入力及び前記ベクトルレジスタからの第2の入力に結合される第1のモジュラ加算器と、前記第1のモジュラ加算器、及び、前記ベクトルレジスタからの第2のデータパスに結合される第2のモジュラ加算器とを有する第1のデータパス、及び、
    前記第2の入力、及び、前記ベクトルレジスタからの第3のデータパスに結合される第1の論理XOR回路と、前記第1の論理XOR回路に結合される第1のローテート回路と、前記第1のローテート回路及び前記第3のデータパスに結合される第2の論理XOR回路と、前記第2の論理XOR回路に結合される第2のローテート回路とを有する前記第2のデータパス
    を有する回路と、
    前記第1のデータパスの前記第1のモジュラ加算器及び前記第2のモジュラ加算器、並びに、前記第2のデータパスの前記第1の論理XOR回路、前記第2の論理XOR回路、前記第1のローテート回路及び前記第2のローテート回路に、1又は複数の制御値に従って前記ラウンドの一部を実行させ、前記一部に対する前記第1のデータパスからの第1の結果と、前記一部に対する前記第2のデータパスからの第2の結果を前記ベクトルレジスタに格納させる手段と
    を備える装置。
JP2019035652A 2018-04-02 2019-02-28 高性能認証付き暗号に関するハードウェアアクセラレータ及び方法 Pending JP2019207393A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US15/943,654 US10705842B2 (en) 2018-04-02 2018-04-02 Hardware accelerators and methods for high-performance authenticated encryption
US15/943,654 2018-04-02

Publications (1)

Publication Number Publication Date
JP2019207393A true JP2019207393A (ja) 2019-12-05

Family

ID=65230260

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019035652A Pending JP2019207393A (ja) 2018-04-02 2019-02-28 高性能認証付き暗号に関するハードウェアアクセラレータ及び方法

Country Status (5)

Country Link
US (1) US10705842B2 (ja)
EP (1) EP3550764B1 (ja)
JP (1) JP2019207393A (ja)
KR (1) KR20190115408A (ja)
CN (1) CN110347634A (ja)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10305479B1 (en) * 2018-06-12 2019-05-28 Nxp B.V. Fault attack protection against synchronized fault injections
US10951393B2 (en) * 2018-10-11 2021-03-16 Fungible, Inc. Multimode cryptographic processor
US11349639B2 (en) * 2018-12-28 2022-05-31 ePIC Blockchain Technologies Inc. Circuit and method for overcoming memory bottleneck of ASIC-resistant cryptographic algorithms
US10831497B2 (en) * 2019-01-31 2020-11-10 International Business Machines Corporation Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data
US11288406B1 (en) * 2019-11-15 2022-03-29 The Charles Stark Draper Laboratory, Inc. Fast XOR interface with processor and memory
CN111612622B (zh) * 2020-05-20 2021-03-23 深圳比特微电子科技有限公司 用于执行散列算法的电路和方法
KR102418794B1 (ko) * 2020-06-02 2022-07-08 오픈엣지테크놀로지 주식회사 하드웨어 가속기를 위한 파라미터를 메모리로부터 액세스하는 방법 및 이를 이용한 장치
CN116097232A (zh) * 2020-08-31 2023-05-09 雅培糖尿病护理公司 医学监控系统中的安全通信
US11917088B2 (en) * 2020-09-21 2024-02-27 International Business Machines Corporation Integrating device identity into a permissioning framework of a blockchain
US11669331B2 (en) * 2021-06-17 2023-06-06 International Business Machines Corporation Neural network processing assist instruction
US11822675B2 (en) * 2021-06-24 2023-11-21 International Business Machines Corporation Securing customer data and internal register data during hardware checkstops in a multi-tenant environment
US20230153168A1 (en) * 2021-11-18 2023-05-18 International Business Machines Corporation Accelerator trustworthiness
TWI778902B (zh) * 2021-12-30 2022-09-21 新唐科技股份有限公司 加法遮罩值產生器、加密器以及產生串流金鑰的方法
KR20240059299A (ko) * 2022-10-27 2024-05-07 주식회사 소테리아 저전력 쿼터 라운드 연산기

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8713574B2 (en) 2006-06-05 2014-04-29 International Business Machines Corporation Soft co-processors to provide a software service function off-load architecture in a multi-core processing environment
US9703595B2 (en) 2008-10-02 2017-07-11 Mindspeed Technologies, Llc Multi-core system with central transaction control
US8498229B2 (en) 2008-12-30 2013-07-30 Intel Corporation Reduced power state network processing
US9465660B2 (en) 2011-04-11 2016-10-11 Hewlett Packard Enterprise Development Lp Performing a task in a system having different types of hardware resources
US8924741B2 (en) 2012-12-29 2014-12-30 Intel Corporation Instruction and logic to provide SIMD secure hashing round slice functionality
US10095558B2 (en) 2015-05-26 2018-10-09 Cavium, Inc. Systems and methods for offloading inline SSL processing to an embedded networking device
US20170236123A1 (en) 2016-02-16 2017-08-17 Blockstack Inc. Decentralized processing of global naming systems
US10142098B2 (en) 2016-06-29 2018-11-27 Intel Corporation Optimized SHA-256 datapath for energy-efficient high-performance Bitcoin mining
GB2551865B (en) * 2017-01-14 2020-03-18 PQ Solutions Ltd Improved stream cipher system
US20180212761A1 (en) * 2017-01-23 2018-07-26 Cryptography Research, Inc. Hardware circuit to perform round computations of arx-based stream ciphers
US10447770B2 (en) 2017-05-30 2019-10-15 Verizon Patent And Licensing Inc. Blockchain micro-services framework
US9912479B1 (en) * 2017-06-09 2018-03-06 ISARA Corporation Key encapsulation mechanisms

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
HENZEN, L., CARBOGNANI, F., FELBER, N., & FICHTNER, W.: "VLSI hardware evaluation of the stream ciphers Salsa20 and ChaCha, and the compression function Rumb", 2008 2ND INTERNATIONAL CONFERENCE ON SIGNALS, CIRCUITS AND SYSTEMS, JPN6023006525, 2008, pages 1 - 5, XP031405857, ISSN: 0004994824 *
MOZAFFARI-KERMANI, M., & AZARDERAKHSH, R.: "Reliable hash trees for post-quantum stateless cryptographic hash-based signatures", 2015 IEEE INTERNATIONAL SYMPOSIUM ON DEFECT AND FAULT TOLERANCE IN VLSI AND NANOTECHNOLOGY SYSTEMS (, JPN6023006526, 2015, pages 103 - 108, XP032812597, ISSN: 0004994825, DOI: 10.1109/DFT.2015.7315144 *

Also Published As

Publication number Publication date
US20190042249A1 (en) 2019-02-07
US10705842B2 (en) 2020-07-07
KR20190115408A (ko) 2019-10-11
CN110347634A (zh) 2019-10-18
EP3550764B1 (en) 2021-02-17
EP3550764A1 (en) 2019-10-09

Similar Documents

Publication Publication Date Title
JP2019207393A (ja) 高性能認証付き暗号に関するハードウェアアクセラレータ及び方法
KR101692914B1 (ko) Sha256 알고리즘의 메시지 스케줄링을 위한 명령어 세트
CN110233720B (zh) Sm4加速处理器、方法和系统
US9100184B2 (en) Instructions processors, methods, and systems to process BLAKE secure hashing algorithm
US20180004517A1 (en) Apparatus and method for propagating conditionally evaluated values in simd/vector execution using an input mask register
KR101692800B1 (ko) 128 비트 데이터 경로들상에서의 sha1 라운드 처리를 위한 명령어 세트
US11121856B2 (en) Unified AES-SMS4—Camellia symmetric key block cipher acceleration
US20140108480A1 (en) Apparatus and method for vector compute and accumulate
CN107133018B (zh) 执行groestl散列的指令
US20170242703A1 (en) Instruction set for supporting wide scalar pattern matches
KR20170097018A (ko) 벡터 브로드캐스트 및 xorand 로직 명령어를 위한 장치 및 방법
US20210200880A1 (en) Method and apparatus for multi-key total memory encryption based on dynamic key derivation
TWI769645B (zh) 資料元件比較處理器、方法、系統及指令
US8953785B2 (en) Instruction set for SKEIN256 SHA3 algorithm on a 128-bit processor
KR102460268B1 (ko) 큰 정수 산술 연산을 수행하기 위한 방법 및 장치
US20170052789A1 (en) Instruction for fast zuc algorithm processing
KR101787615B1 (ko) 단일 명령어에 응답하여 회전 및 xor을 수행하기 위한 시스템들, 장치들, 및 방법들
KR20170099873A (ko) 벡터 비트 셔플을 수행하기 위한 방법 및 장치
TWI567640B (zh) 用於不引發算術旗標的三輸入運算元加法指令之方法及處理器
US9389861B2 (en) Systems, apparatuses, and methods for mapping a source operand to a different range
US20230100106A1 (en) System, Apparatus And Method For Direct Peripheral Access Of Secure Storage
KR20170097613A (ko) 벡터 수평 로직 명령어를 위한 장치 및 방법

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230221

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230501

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20230718