JP2015534188A - ユーザレベルのスレッディングのために即時のコンテキスト切り替えを可能とする新規の命令および高度に効率的なマイクロアーキテクチャ - Google Patents

ユーザレベルのスレッディングのために即時のコンテキスト切り替えを可能とする新規の命令および高度に効率的なマイクロアーキテクチャ Download PDF

Info

Publication number
JP2015534188A
JP2015534188A JP2015534474A JP2015534474A JP2015534188A JP 2015534188 A JP2015534188 A JP 2015534188A JP 2015534474 A JP2015534474 A JP 2015534474A JP 2015534474 A JP2015534474 A JP 2015534474A JP 2015534188 A JP2015534188 A JP 2015534188A
Authority
JP
Japan
Prior art keywords
bank
instruction
context
processor
banks
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.)
Granted
Application number
JP2015534474A
Other languages
English (en)
Other versions
JP6143872B2 (ja
Inventor
オレンステイン、ドロン
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 JP2015534188A publication Critical patent/JP2015534188A/ja
Application granted granted Critical
Publication of JP6143872B2 publication Critical patent/JP6143872B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/30123Organisation of register space, e.g. banked or distributed register file according to context, e.g. thread buffers
    • 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/3824Operand accessing
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/461Saving or restoring of program or task context
    • G06F9/462Saving or restoring of program or task context with multiple register sets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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/46Multiprogramming arrangements
    • G06F9/466Transaction processing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

プロセッサは、拡張レジスタセットの複数のバンクを用いて、複数のユーザレベルスレッドの複数のコンテキストを格納する。現在のバンクレジスタは、現在アクティブであるバンクを指し示すポインタを提供する。第1スレッドは自身のコンテキスト(第1コンテキスト)を、拡張レジスタセットの第1バンクに保存し、第2スレッドは自身のコンテキスト(第2コンテキスト)を、拡張レジスタセットの第2バンクに保存する。プロセッサが、第1スレッドと第2スレッドとの間で複数のコンテキストを交換するための命令を受信した場合、プロセッサは、第1バンクから第2バンクへポインタを変更させ、第2バンクに格納されている第2コンテキストを用いて第2スレッドを実行する。

Description

本開示は、プロセッサまたは他の処理ロジックにより実行された場合に、複数の論理、数学、または他の関数演算を実行する処理ロジック、複数のマイクロプロセッサ、および関連する命令セットアーキテクチャの分野に関する。
命令セット、または命令セットアーキテクチャ(ISA)は、プログラミングに関するコンピュータアーキテクチャの一部であり、複数のネイティブデータタイプ、複数の命令、複数のレジスタアーキテクチャ、複数のアドレッシングモード、メモリアーキテクチャ、割込みおよび例外処理、および外部入力および出力(I/O)を含み得る。本明細書において、命令という用語は概して、プロセッサのデコーダが複数のマクロ命令をデコードした結果である複数のマイクロ命令または複数のマイクロオペレーション(マイクロオプ)とは対照的に、実行のためにプロセッサ(または、命令を、プロセッサにより処理されることになる1または複数の他の命令にトランスレート(例えば、スタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーションを用いて)、モーフィング、エミュレート、または変換する命令コンバータ)へ提供される複数の命令である複数のマクロ命令を指す。
ISAは、命令セットを実装するプロセッサの内部設計であるマイクロアーキテクチャとは区別される。複数の異なるマイクロアーキテクチャを有する複数のプロセッサは、共通の命令セットを共有し得る。例えばIntel(登録商標)Core(商標)プロセッサおよびカリフォルニア州サニーベールのAdvanced Micro Devices,Inc.が製造する複数のプロセッサは、x86命令セットのほぼ同一である複数のバージョン(より新しいバージョンにおいてはいくつかの拡張が追加された)を実装するが、複数の異なる内部設計を有する。例えば、ISAの同じレジスタアーキテクチャは、複数の専用の物理レジスタ、レジスタリネーミングメカニズムを用いる1または複数の動的に割り当てられた物理レジスタ、その他を含む複数の周知の技術を用いて複数の異なるやり方で複数の異なるマイクロアーキテクチャにおいて実装され得る。
現代の複数のプロセッサコアは概して、それらの性能の効率性を向上させるべくマルチスレッディングをサポートしている。例えば、複数のIntel(登録商標)Xeon(商標))コアは現在、2ウェイ同時マルチスレッディング(SMT)を提供している。1つのコア当たりのスレッドの数を増やすことにより、複数のキーサーバアプリケーションに対してより高い性能をもたらすことが出来る。しかし、SMTスレッドの数を増やす(2から4以上へ)のは、非常に複雑で、コストがかかり、誤りが起こりがちである。
代替的なマルチスレッディングアプローチは、アプリケーションソフトウェアにより管理されるユーザレベルスレッドを実装することである。例えば、Microsoft(登録商標)システムは、ファイバと呼ばれるユーザレベルスレッドを管理するのに複数のソフトウェアメカニズムを用いる。ファイバまたは同様のアプローチを用いれば、アプリケーションは、第1のファイバが長いレイテンシーのイベント(例えば、I/O、ノンユーザイベント、セマフォ待機、その他)に出くわした場合に、第1のファイバから第2のファイバへ切り替えることが出来る。複数のファイバの管理および実行は、アプリケーションにより完全に処理され得、注意深く調整され得る。しかし、複数のファイバ(例えば、保存、復元、分岐処理)間での切り替えのペナルティのコストが高いので、並びに、短い、および長いレイテンシーのハードウェア機能停止イベントの両方にいつ切り替えるべきかを効率的にソフトウェアで決定するのには限界があるので、ファイバによるアプローチで得られる性能の向上は、かなり制限されている。
添付の複数の図面のうち複数の図面において、限定ではなく例として複数の実施形態が示されている。
一実施形態に係る、拡張レジスタセットを有する命令処理装置のブロック図である。 一実施形態に係る、拡張レジスタセットを有するレジスタアーキテクチャのブロック図である。 一実施形態に係る、複数のハイバコンテキストを格納するための複数のメモリ領域の一例を図示する。 一実施形態に係る、複数のハイバコンテキストを格納するための複数のバンクを含む拡張レジスタセットの一例を図示する。 一実施形態に係る複数のハイバコンテキストを格納するための複数のバンクを含む拡張レジスタセットの他の例を図示する。 一実施形態に係る、複数のハイバコンテキストを格納するための複数のパーティションに分割された複数のベクトルレジスタの一例を図示する。 複数のキャッシュミスを引き起こす可能性が高い命令を含むプログラムの一例を図示する。 複数のハイバを実行するための複数の状態交換命令を用いる一例を図示する。 一実施形態に従って実行される複数の処理を図示するフロー図である。 一実施形態に係る、ソース命令セットに含まれる複数のバイナリ命令をターゲット命令セット内の複数のバイナリ命令に変換するソフトウェア命令コンバータの利用を図示するブロック図である。 一実施形態に係る、インオーダおよびアウトオブオーダパイプラインのブロック図である。 一実施形態に係る、インオーダおよびアウトオブオーダコアのブロック図である。 一実施形態に係る、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図である。 一実施形態に係る、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図である。 一実施形態に係るプロセッサのブロック図である。 一実施形態係るシステムのブロック図である。 一実施形態に係る、第2のシステムのブロック図である。 本願発明の実施形態に係る第3のシステムのブロック図である。 一実施形態に係るシステムオンチップ(SoC)のブロック図である。
以下の説明において、数多くの特定的な詳細が示される。しかし、本願発明の複数の実施形態は、これらの特定的な詳細なしで実施され得ることが理解される。複数の他の例において、本説明の理解を曖昧にすることがないよう、周知の複数の回路、複数の構造、および複数の技術が詳細に示されていない。
本明細書に説明される複数の実施形態は、プロセッサに、適切なマイクロアーキテクチャに関するサポートにより、複数のユーザレベルスレッド間での即時の(サイクルペナルティが殆どない)切り替えを実行させる状態交換命令セット(例えば、SXCHG、SXCHGL、およびそれらの複数の変形例)を提供する。ISAに対する追加の変更は必要ない。これらのユーザレベルのスレッドは、以後「ハイバ」と呼ばれ、これらはハードウェアによりサポートされたファイバである。同命令セットによりソフトウェアは、複数のユーザモードの(リング−3)のレジスタのN個のバンクにレジスタコンテンツ(「レジスタ状態」とも呼ばれる)を保存および復元することにより即座にN個のハイバ間で切り替えることが可能となる。この切り替えは、オペレーティングシステムの関与なしで複数のアプリケーションにより制御され得る。複数のユーザモードのレジスタのこれらのN個のバンクは本明細書において、拡張レジスタセットと呼ばれる。Nという数は、マイクロアーキテクチャによりサポートされる、2、4、8、または何らかの数であり得る。
図1Aは、複数の命令を実行するよう動作可能な実行ユニット140を有する命令処理装置115の実施形態のブロック図である。いくつかの実施形態において、命令処理装置115は、プロセッサ、マルチコアプロセッサのプロセッサコア、または電子システムにおける処理要素であり得る。
デコーダ130は、より上位の複数のマシン命令または複数のマクロ命令の形態の入ってくる複数の命令を受信し、それらをデコードして、元の複数のより上位の命令を反映し、および/またはそれらから導出されるより下位の複数のマイクロオペレーション、複数のマイクロコードエントリーポイント、複数のマイクロ命令、または他のより下位の複数の命令若しくは複数の制御信号を生成する。より下位の複数の命令または複数の制御信号は、複数のより下位の(例えば、回路レベル、またはハードウェアレベルの)処理を介して、より上位の命令の処理を実装し得る。デコーダ130は、様々な異なるメカニズムを用いて実装され得る。複数の適したメカニズムの複数の例には、マイクロコード、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ(PLA)、当技術分野で公知である複数のデコーダを実装するよう用いられる複数の他のメカニズム、その他が含まれるが、これらに限定されない。
実行ユニット140は、デコーダ130に結合されている。実行ユニット140は、1または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または受信した複数の命令を反映する、若しくはそれらから導出される他の制御信号をデコーダ130から受信し得る。また実行ユニット140は、レジスタファイル170またはメモリ120から入力を受信し、それらへの出力を生成する。
説明を曖昧にすることを避けるべく、比較的シンプルな命令処理装置115が示され、説明されている。複数の他の実施形態が1より多くの実行ユニットを有し得ることは理解されよう。例えば、装置115は、例えば複数の演算ユニット、複数の演算ロジックユニット(ALU)、整数ユニット、浮動小数点ユニット、その他など複数の異なるタイプの実行ユニットを含み得る。複数の命令処理装置または複数のプロセッサのさらに複数の他の実施形態は、複数のコア、複数の論理プロセッサ、または複数の実行エンジンを有し得る。命令処理装置115の複数の実施形態は後に、図7A〜図13に関連して提供される。
一実施形態によると、メモリ120は、複数のハイバの複数のコンテキストを格納する。格納されている複数のハイバコンテキストは、複数のハイバのレジスタ状態を含む。アプリケーションの特定の命令が複数のハイバのうち1つの機能停止を引き起こし得ることをコンピュータシステム(例えば、コンパイラコードまたは他の最適化コードを実行しているプロセッサ、予測回路または最適化回路、その他)またはプログラマが予測した場合、実行ユニット140に、1つのハイバから他のハイバへ実行を切り替えさせるべく命令がアプリケーションに挿入される。
処理性能を向上させるべく、ハイバ切り替えがあった場合には、ハイバコンテキストは必ずしもメモリ120に格納されず、メモリ120から復元されない。一実施形態において、命令処理装置115は、メモリアクセスの頻度を減らすべくハイバコンテキストを一時的に格納するための「書き戻しキャッシュ」として拡張レジスタセット175を用い得る。ハイバコンテキストへの拡張レジスタセット175からのアクセスは、メモリ120からのアクセスよりもかなり速い。したがって、複数のハイバ間のコンテキスト切り替えの速度は、大幅に高められ得る。
しかし、複数のハイバコンテキストをメモリ120に常には格納せず復元しないことにより、メモリ120は最新のハイバコンテキストを有しないかもしれない。何らかの複数のアプリケーションまたは複数のスレッド(命令処理装置115の複数のコアまたは複数のプロセッサで同時に実行されている)によりメモリ120の古い情報がアクセスされるのを避けるべく、命令処理装置115は、ハイバコンテキストが格納されている複数のメモリ領域へのアクセスをトラッキングすべくスヌープ回路180を用いる。これらのメモリ領域のうちいずれかのメモリ領域のコンテンツが現在のレジスタコンテンツと一貫していない(つまり、異なる)場合はいつでも、複数の対応するメモリアドレスがマーク付けされたエリアとしてスヌープ回路180にマーク付けされる。マーク付けされたエリアと拡張レジスタセット175との間で格納された複数のコンテキストを同期させるために、マーク付けされたエリアから読み取られる、またはマーク付けされたエリアに書き込まれる場合、書き戻しイベント(例えば、マイクロコードトラップ)がトリガされる。このマイクロコードトラップにより現在のレジスタ状態(つまり、更新されたハイバコンテキスト)は、マーク付けされたエリアに書き込まれるようになり(何らかのアプリケーションまたはスレッドがエリアから読み取ろうとしている場合)、または、マーク付けされたエリアから複数のレジスタがリロードされるようになる(他のアプリケーションまたはスレッドがエリアに書き込みを行った場合)。
一実施形態において、命令処理装置115は、State Exchange(SXCHG)命令、およびその変形例などハイバ切り替え命令セットをサポートする。ハイバ切り替え命令セットは、ハイバ[I]のコンテキストがメモリ120に保存され、ハイバ[J]のコンテキストがメモリ120から復元されクリアされる基本的なSXCHG(I,J)を含む。ハイバ切り替え命令セットは、SXCHG(オペランドなし)、SXCHGL(SXCHGの簡易版)、SXCHG.u(無条件のSXCHG)、SXCHG.c(条件付きのSXCHG)、および<SXCHG.start−SXCHG.end>(ブロックSXCHG)、およびその他も含む。これらの命令は以下に詳細に説明される。
複数のハイバ切り替え命令について説明する前に、これらの命令をサポートする基礎となるレジスタアーキテクチャの実施形態を示すことは有用である。図1Bを参照して説明されるレジスタアーキテクチャは、x86、MMX(商標)、Streaming SIMD Extensions(SSE)、SSE2、SSE3、SSE4.1、およびSSE4.2命令、並びに、Advanced Vector Extensions(AVX)(AVX1およびAVX2)と呼ばれる追加のSIMD拡張セットを含む命令セットを実装する複数のIntel(登録商標)Core(商標)プロセッサに基づく。しかし、異なる複数のレジスタ長さ、異なる複数のレジスタタイプ、および/または異なる数のレジスタをサポートする異なるレジスタアーキテクチャも用いられ得ることが理解される。
図1Bは、本願発明の一実施形態に係るレジスタアーキテクチャ100のブロック図である。示される実施形態において、512ビット幅の32個のベクトルレジスタ110があり、これらのレジスタはzmm0〜zmm31として参照される。より下位の16個のzmmレジスタの下側の256ビットは、レジスタymm0〜16に重ねられている。下側の16個のzmmレジスタのより下位の128ビット(ymmレジスタのより下位の128ビット)は、レジスタxmm0〜15に重ねられている。示される実施形態において、それぞれ64ビットのサイズを有する8個の書き込みマスクレジスタ112(k0〜k7)がある。代替的な実施形態において、書き込みマスクレジスタ112は16ビットのサイズを有する。
示される実施形態において、拡張レジスタセット175は、本明細書において複数の拡張GPレジスタ125と呼ばれる16個の64ビットの汎用(GP)レジスタからなる4個のバンクを含む。実施形態において、これらは複数のメモリオペランドをアドレッシングする既存の複数のx86アドレッシングモードと共に用いられる。(各バンク内の)これらのレジスタは、RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP、および、R8〜R15という名称で参照される。また実施形態は、拡張レジスタセット175が複数の拡張RFLAGSレジスタ126、複数の拡張RIPレジスタ127、および複数の拡張MXCSRレジスタ128を含むことを示しており、これらの全ては4つのバンクを含む。
また実施形態は、MMXパックド整数フラットレジスタファイル150がエイリアシングされるスカラ浮動小数点(FP)スタックレジスタファイル(x87スタック)145を示している。示される実施形態において、x87スタックは、x87命令セット拡張を用いて32/64/80ビットの浮動小数点データに対して複数のスカラ浮動小数点演算を実行するために用いられる8つの要素のスタックであり、MMXレジスタは、64ビットのパックド整数データに対して演算を実行し、MMXレジスタとXMMレジスタとの間で実行されるいくつかの演算のために複数のオペランドを保持するために用いられる。
一実施形態において、拡張レジスタセット175は加えて、FPスタックレジスタファイル145の4つのバンク、および/または、ベクトルレジスタ110の4つのバンクを含み、それらのFPレジスタ状態および/またはベクトルレジスタ状態に対して最大4つまでのハイバの一時的な格納場所を提供し得る。
本願発明の代替的な実施形態は、幅のより広い、またはより狭い複数のレジスタ、および/またはより多くの、またはより少ないレジスタバンクを用い得る。加えて、本願発明の複数の代替的な実施形態は、より多くの、より少ない、または複数の異なるレジスタファイルおよびレジスタを用い得る。
図2Aは、一実施形態に係る、複数の基本的なSXCHG(I,J)命令に応答してプロセッサ(例えば、命令処理装置115)により実行される処理を示す図である。本実施形態において、メモリ120は、4つの領域を含むよう構成され、ここで、異なる複数の領域は、異なる複数のハイバの複数のコンテキストを格納するよう指定されている。基本的なSXCHG(I,J)は、どのハイバコンテキストが保存されることになるのかを示すソース(I)、および、どのハイバコンテキストが復元されることになるのかを示すデスティネーション(J)の2つのオペランドを有する。この命令に応答して、プロセッサは、レジスタの現在のコンテンツをメモリ120に保存する。一実施形態において、これらのレジスタは、複数のGPレジスタ(例えば、RAX、RBX、...、R15)、複数のベクトルレジスタ(例えば、zmm0〜31)、複数のフラグレジスタ(例えば、RFLAGS)、命令ポインタ(例えば、RIP)、MXCSR、およびこれらの何らかの組み合わせのうち1または複数を含む。これらのレジスタの現在のコンテンツは、メモリポインタレジスタ210(SMEM[I]により指し示される指定されたメモリ領域(領域[I]に保存される。現在のレジスタコンテンツを保存した後に、プロセッサは、上記の複数のレジスタを他のメモリ領域(メモリポインタレジスタSMEM[J]により指し示される領域[J])からロードし、このメモリ領域(領域[J])をクリア(つまりゼロ設定)する。この処理の結果として、プロセッサは、1つの命令フローハイバ[I]から切り替えて、他の命令フローハイバ[J]を実行する。
1つのシナリオにおいて、ハイバ[J]は、プロセッサに、メモリ領域に格納されたレジスタコンテンツを用いて前の命令フロー(つまり、ハイバ[I])を実行するよう切り替え戻させる命令SXCHG(J,I)を含み得る。SXCHG(J,I)に応答して、プロセッサはSMEM[J]により指し示されるメモリ領域(領域[J])のレジスタ状態を保存し、SMEM[I]により指し示されるメモリ領域(領域[I])からレジスタをロードし、このメモリ領域(領域[I])をクリア(ゼロ設定)する。
図2Aの例は、メモリ領域[0]、領域[1]、領域[2]、および領域[3]を示す。SXCHG(0,2)を実行することにより、(SMEM[0]により指し示される)領領域[0]にレジスタコンテンツが保存され、(SMEM[2]により指し示される)領域[2]からレジスタコンテンツが復元されることになる。
ユーザレベルのコンテキスト切り替えの速度を向上させるべく、レジスタ状態は、メモリの代わりに拡張レジスタセット(例えば、図1Aおよび1Bの拡張レジスタセット175)に保存され、拡張レジスタセットから復元され得る。メモリロケーションの物理レジスタへのマッピングは、メモリリネームと呼ばれることもある。
図2Bは、拡張レジスタセット175の実施形態を示す。本実施形態において、セット175内の各レジスタは、バンク0、バンク1、バンク2、およびバンク3の4つのバンクを有する。向上した性能でSXCHG命令をサポートするマイクロアーキテクチャは、例えば、各バンク内のGPレジスタが64ビット幅である4つのバンクなど、複数のバンクを有し得る。図2Bの実施形態において、所与のバンク内のレジスタは、例えば、RAX.0、RAX.1、RAX.2、RAX.3、など、元の名称にバンクインデックスが付されてリネームされている。プロセッサが2つのハイバコンテキスト間で切り替えを行う場合、長い一連のメモリ保存処理およびメモリ復元処理の代わりに、プロセッサは、ポインタ(例えば、現在のバンク(CB)レジスタ220のコンテンツ)を1つのレジスタバンクから他のレジスタバンクへ変更しさえすればよい。一実施形態において、デコーダは、コンテキスト切り替えに応じて複数の命令により参照されるレジスタの名称を変更し得る(例えば、RAX.0からRAX.3)。レジスタリネーミングを実行する進化したアウトオブオーダプロセッサは、容易にリネームポインタを切り替え得る。結果として、プロセッサのフロントエンドがSXCHGを予測する場合、ハイバ切り替えは、ほぼゼロサイクルで迅速に実行され得る。
SXCHG命令の一実施形態は、オペランドを何ら有さない。ソースインデックス(例えば、インデックスI)を供給する代わりに、命令は、プロセッサが実行している現在アクティブなハイバのバンクを識別するCBレジスタ220を用いる。SXCHG命令に続いて(例えば、書き戻しイベントが生じた場合)、プロセッサは、SMEM[CB]により指し示されるメモリ領域に現在のレジスタ状態を保存する。図2Bの例において、CB=0であり、このことは、プロセッサがレジスタ状態をSMEM[0]に保存することを意味している。拡張レジスタセット175のバンク0のレジスタ状態は、例えば実行がハイバ[0]に切り替え戻された場合など将来的な使用のためにバンク0に留まっていなければならない。
さらにSXCHG命令はデスティネーションインデックスを必要としない。代わりに、プロセッサは複数のハイバのそれぞれのためのマスクビットを含むマスクレジスタ230を用いる。図2Bの例において、各ハイバは、関連するマスクビットを有する。関連するマスクビットが所定の値(例えば、ゼロ)を有する場合、対応するハイバは非アクティブ化され、このハイバには切り替えが行われない。さもなくば(例えば、マスクビット値が1の場合)、対応するハイバは、アクティブである(現在実行されている)か、またはスリープ状態である(実行されるのを待っている)。SXCHGの実行に応じて、プロセッサはラウンドロビンまたは同様のポリシーを用いて、スリープ状態にある次のハイバに切り替え、同ハイバをアクティブ化する。図2Bの例において、ハイバ[1]のマスクビットがゼロであるので、プロセッサはCB=0からCB=2へ切り替える。
図2Cは、拡張レジスタセット175の実施形態をさらに詳細に示す。本実施形態において、拡張レジスタセット175は、4つのバンクを含み、各バンクは、zmm0〜31、複数のGPレジスタ、RFLAGS、およびRIPを含む。上記にて説明したように、マスクレジスタ230は、対応するものが非アクティブ化されているかを示す各バンクのマスクビットを含み、CBレジスタ220は、現在アクティブなバンクを指し示す。同じバンク内の複数のレジスタの幅は図2Cにおいて同じに見えるが、同じバンク内の複数の異なるレジスタは、同じ幅を有していても有していなくてもよいことが理解される。複数の代替的な実施形態において、拡張レジスタセット175は、より多くの、若しくはより少ないレジスタ、および/または、より多くの、若しくはより少ない数のバンクを含み得る。
一実施形態において、SXCHG命令は複数の変形例を有する。SXCHG.uは、次のハイバへの無条件の切り替えを引き起こす命令である。SXCHG.cは、マイクロアーキテクチャのランタイムの決定に基づき、次のハイバへの切り替えを引き起こす命令である。一実施形態において、決定を行うマイクロアーキテクチャは、頻繁に見逃される複数のロードに関して命令ポインタをトラッキングするフロントエンド回路(例えば、分岐予測ユニット)であり得る。複数のハードウェアパラメータに基づき、マイクロアーキテクチャは、切り替えを実行するための条件が満たされたか、および、切り替えが実行されるのであれば、切り替えを実施する実行時点を決定し得る。例えば、マイクロアーキテクチャはプリフェッチキャッシュミスまたは複数の他の長いレイテンシーのイベントに応じて切り替えを行うことを決定し得る。SXCHG.startおよびSXCHG.endは、あらゆる命令がSXCHGコンテキスト切り替えを有する候補となり得る、命令からなるブロックの境界をマーク付けする命令ペアである。これは、同命令ブロック内のあらゆる命令の前にSXCHG.cを有することと同じ作用を有する。SXCHG.startおよびSXCHG.endはそれぞれ、命令ブロックの始まりと終わりとをマーク付けする。そのようなマーク付けを用いて、マイクロアーキテクチャは自由に、異なる複数のハイバを実行する複数の命令から選択し得る。
一実施形態において、SXCHG命令およびその複数の変形例は、SXCHGLと呼ばれる「簡易」バージョンを有する。SXCHGL命令に応答して、プロセッサは、メモリにハイバコンテキストを保存せず、復元しない。代わりに、プロセッサは、複数のベクトルレジスタおよび/または複数の浮動小数点レジスタなどオンダイの利用されていないレジスタにハイバコンテキストを保存し復元する。一実施形態において、これらの利用されていないレジスタは、複数のベクトルレジスタ(例えば、zmm0〜31、zmm16〜31、または複数のzmmレジスタの何らかの利用されていない部分)である。一実施形態において、複数のzmmレジスタの一部はさらに、ベクトルを格納するために用いられ得(例えば、xmm0〜15)、複数のzmmレジスタの残りは、ハイバコンテキストを格納するために用いられ得る。これらの利用されていないレジスタ(または一部)は、複数のハイバのコンテキストを格納するために、複数のパーティション(例えば、SXCHGの4つのメモリ領域に対応する4つのパーティション)に分割され得る。加えて、SXCHGと同様に、SXCHGL命令も、SXCHGL.u、SXCHGL.c、SXCHGL.start、およびSXCHGL.endなど複数の変形例を有し、これらの使用はSXCHGの複数の対応するものと類似している。
一実施形態において、複数のSXCHG命令に応答して保存されるコンテキストは、zmmレジスタ状態を含み、複数のSXCHGL命令に応答して保存されるコンテキストは、xmmレジスタ状態を含む(しかし、zmmレジスタ状態を含まない)。したがって、複数のSXCHGL命令に関して、zmm0〜15が4つのハイバのxmm状態を格納するために用いられ得、zmm16〜31は、同じ4つのハイバの他のレジスタの状態(例えば、複数のGPレジスタ、複数のフラグレジスタ、命令ポインタ、その他)を格納するために用いられ得る。図3は、4つのハイバの複数のコンテキストを格納するために4つのパーティションに分割されたベクトルレジスタ(zmm16〜31)の一部310の実施形態を示しており、各パーティションは、拡張レジスタセット175のバンクに対応する。CBレジスタ220は、拡張レジスタセット175の現在アクティブなバンク、および、複数のベクトルレジスタの一部310の対応するパーティションを指し示すポインタを提供する。
複数のzmmレジスタから/への複数のレジスタの直接的な保存/復元によるSXCHGL命令の実行は遅くなり得る。効率的な実施を可能とすべく、複数のzmmレジスタから/へレジスタを保存および復元する代わりに、複数のバンクを含む拡張レジスタセット(例えば、図1Aおよび1Bの拡張レジスタセット175)は、SXCHGと同様のやり方で「書き戻しキャッシュ」として用いられ得る。SXCHGと同様に、CBレジスタは、現在アクティブなバンクを指し示すべくSXCHGLによって用いられ得、複数のマスクビットを含むマスクレジスタは、対応するバンクがもはや用いられていない(つまり、非アクティブ化された)かを示すために用いられ得る。複数のハイバの全てがマスキングされている(例えば、複数のゼロの対応するマスクビットを有する)場合、SXCHGLは、ノーオペレーション処理となる。
結果として、プロセッサは複数のハイバから効率的にコード実行し得る。フロントエンドが正確にSXCHGLを予測した場合、プロセッサは、複数のハイバ間をパイプラインのフラッシュなしで非常に速く切り替え得る。
一実施形態において、図1Aのスヌープ回路180と同様のスヌープメカニズムが、複数のハイバコンテキストが格納された複数のzmmレジスタへのアクセスをトラッキングするために用いられ得る。zmmレジスタに格納されたハイバコンテキストが拡張レジスタセット175の対応するコンテンツと一貫していない(つまり、異なる)場合はいつでも、zmmレジスタはマーク付けされる。一実施形態において、このスヌープメカニズムは、zmmレジスタのそれぞれのグローバルな状態と関連付けられた状態ビットとして実装され得る。状態ビットは、最新の更新されたハイバコンテキストがどこにあるのかを示す。最新の更新が複数のzmmレジスタで行われたのであれば(例えば、XRESTORE処理の後)、第1SXCHGL命令の実行が、マイクロコードシーケンスの実行を引き起こす書き戻しイベントをトリガする。マイクロコードシーケンスは、最新の更新を、zmm空間から拡張レジスタセット175へコピーする。最新の更新が拡張レジスタセット175において行われ、プロセッサがベクトル命令の実行を開始するのであれば(例えば、XSAVE処理の後)、マイクロコードは、最新の更新を拡張レジスタセット175からzmm空間へコピーする。
以下の説明において、SXCHGまたは「状態交換命令」について言及された場合、その説明は、SXCHGおよびSXCHGLの両方に当てはまるものと理解される。
図4Aは、上記にて説明されたSXCHG命令を用い得るコードセグメント410の一例、またはその複数の変形例のうち1つを図示する。コードセグメント410は、バイナリサーチ(「Bsearch」と呼ばれる)を実施し得る。バイナリサーチの間、多数のキャッシュミスが命令420において生じることが予期される(temp=A[mid])。図4Bは、それぞれがハイバを表す2つのコードセグメントfoo0およびfoo1により同じバイナリサーチを実行する一例を図示する。コードセグメントのそれぞれは、多くのキャッシュミスが生じることが予期される(temp=A[mid])命令(430または431)の後にSXCHG.u命令を含む。したがって、プロセッサがfoo0において命令430を実行した直後に、プロセッサは、予期されるキャッシュミスイベントの間にfoo1への無条件の切り替えを実行する。命令430に実際にキャッシュミスが生じた場合、コンテキスト切り替えによりプロセッサは、foo1において他の有用な作業に関わることが可能となる。同様に、命令431に実際にキャッシュミスが生じた場合、コンテキスト切り替えによりプロセッサは、foo0において他の有用な作業に関わることが可能となる。キャッシュミスが生じない場合、コンテキスト切り替えによるペナルティは最小である。これは、foo0およびfoo1のコンテキストが両方とも、拡張レジスタセットに格納され、迅速に保存および復元され得るからである。
一実施形態において、SXCHG命令(例えば、図4BのSXCHG.u命令)が、プログラマにより追加され得る。代替的な実施形態において、SXCHG命令がコンパイラにより追加され得る。コンパイラはスタティックコンパイラまたはジャストインタイムコンパイラであり得る。コンパイラは、SXCHG命令を実行しているプロセッサと同じハードウェアプラットフォームに、または異なるハードウェアプラットフォームに位置し得る。なお、SXCHGの配置およびSXCHGの実行には、オペレーティングシステムは関与しない。
図5は、一実施形態に係る2つのハイバコンテキストを交換するための方法500のブロックフロー図である。方法500は、プロセッサ(例えば、図1Aの命令処理装置115)が、拡張レジスタセットの第1バンクに格納された第1コンテキストを用いて、第1ユーザレベルスレッド(例えば、ハイバ)を実行することにより開始する(ブロック510)。第1スレッドの実行の間、プロセッサは、第1スレッドおよび第2スレッドの複数のコンテキストを交換するための命令を受信する(ブロック520)。ここで、第2スレッドは他のユーザレベルスレッド(例えば、ハイバ)であり、拡張レジスタセットの第2バンクに保存された第2コンテキストを有する。命令に応答して、プロセッサは、現在アクティブなバンクとして第1バンクを現在指し示すレジスタポインタを第2バンクに変更する(ブロック530)。プロセッサはその後、第2バンクに格納された第2コンテキストを用いて第2スレッドを実行する(ブロック540)。
様々な複数の実施形態において、図5の方法は、汎用プロセッサ、特定用途向けプロセッサ(例えば、グラフィックプロセッサまたはデジタル信号プロセッサ)、または、他のタイプのデジタルロジックデバイス若しくは命令処理装置により実行され得る。いくつかの実施形態において、図5の方法は、図7A〜図13の命令処理装置により実行され得る。さらに、図1Aの命令処理装置115、および、図7A〜図13に示されるプロセッサ、装置、またはシステムが、図5の方法のものと同じ、同様、または異なる複数の処理および複数の方法の複数の実施形態を実施し得る。
いくつかの実施形態において、図1Aの命令処理装置115は、ソース命令セットからターゲット命令セットに命令を変換する命令コンバータと協働して動作し得る。例えば、命令コンバータは、命令を、コアにより処理されることになる他の1または複数の命令にトランスレート(例えば、スタティックバイナリトランスレーション、ダイナミックコンパイルを含むダイナミックバイナリトランスレーション)、モーフィング、エミュレート、または変換し得る。命令コンバータは、ソフトウェア、ハードウェア、ファームウェア、またはこれらの組み合わせにおいて実装され得る。命令コンバータは、プロセッサ上、プロセッサ上ではない、または一部がプロセッサ上で一部がプロセッサ上ではないかもしれない。
図6は、本願発明の複数の実施形態に係るソフトウェア命令コンバータの利用を対比するブロック図である。示される実施形態において、命令コンバータはソフトウェア命令コンバータであるが、代替的に、命令コンバータは、ソフトウェア、ファームウェア、ハードウェア、またはこれらの様々な組み合わせで実装されてもよい。図6は、少なくとも1つのx86命令セットコアを有するプロセッサ616によりネイティブに実行され得るx86バイナリコード606を生成するx86コンパイラ604を用いてコンパイルされ得る高水準言語602のプログラムを示す。少なくとも1つのx86命令セットコアを有するプロセッサ616は、少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じ結果を得るべく、(1)Intel x86命令セットコアの命令セットのかなりの部分、または、(2)少なくとも1つのx86命令セットコアを備えるIntelプロセッサで実行されることを目的とする複数のアプリケーションの複数のオブジェクトコードバージョンまたは他のソフトウェアを互換性を有した状態で実行する、または処理することにより、少なくとも1つのx86命令セットコアを備えるIntelプロセッサと実質的に同じである複数の機能を実行出来る何らかのプロセッサを表す。x86コンパイラ604は、少なくとも1つのx86命令セットコアを有するプロセッサ616で追加のリンケージ処理あり、またはなしで実行され得るx86バイナリコード606(例えばオブジェクトコード)を生成するよう動作可能なコンパイラを表す。同様に、図6は、少なくとも1つのx86命令セットコアを有さないプロセッサ614(例えば、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セットを実行する、および/またはカリフォルニア州サニーベールのARM HoldingsのARM命令セットを実行する複数のコアを有するプロセッサ)によってネイティブに実行され得る、代替的な命令セットバイナリコード610を生成する代替的な命令セットコンパイラ608を用いてコンパイルされ得る高水準言語602のプログラムを示す。命令コンバータ612は、x86バイナリコード606を、x86命令セットコアを有さないプロセッサ614によってネイティブに実行され得るコードに変換するために用いられる。この変換されたコードは、このような変換が可能な命令コンバータの製造は難しいため、代替的な命令セットバイナリコード610と同じとなる可能性は低いが、しかし、変換されたコードは、一般的な演算を達成し、代替的な命令セットからの複数の命令からなる。したがって、命令コンバータ612は、エミュレート、シミュレーションまたは任意の他の処理を介して、プロセッサ若しくはx86命令セットプロセッサまたはコアを有さない他の電子デバイスにx86バイナリコード606を実行させるソフトウェア、ファームウェア、ハードウェアまたはこれらの組み合わせを表す。
例示的な複数のコアアーキテクチャ インオーダおよびアウトオブオーダコアのブロック図 図7Aは、本願発明の複数の実施形態に係る、例示的なインオーダパイプラインと、例示的なレジスタリネーミング・アウトオブオーダ発行/実行パイプラインとの両方を示すブロック図である。図7Bは、本願発明の複数の実施形態に係るプロセッサに含められる、インオーダアーキテクチャコアの例示的な実施形態と、例示的なレジスタリネーミング・アウトオブオーダ発行/実行アーキテクチャコアとの両方を示すブロック図である。図7Aおよび7Bの実線で示される四角は、インオーダパイプラインおよびインオーダコアを示し、破線で示される四角の任意選択的な追加は、レジスタリネーミング・アウトオブオーダ発行/実行パイプラインおよびコアを示す。インオーダの態様は、アウトオブオーダの態様のサブセットであるので、アウトオブオーダの態様について説明する。
図7Aにおいて、プロセッサパイプライン700は、フェッチステージ702、長さデコードステージ704、デコードステージ706、割り当てステージ708、リネームステージ710、スケジューリング(配布または発行としても知られる)ステージ712、レジスタ読み取り/メモリ読み取りステージ714、実行ステージ716、書き戻し/メモリ書き込みステージ718、例外処理ステージ722、およびコミットステージ724を含む。
図7Bは、実行エンジンユニット750に結合されたフロントエンドユニット730を含み、フロントエンドユニット730と実行エンジンユニット750との両方がメモリユニット770に結合されたプロセッサコア790を示す。コア790は、縮小命令セットコンピューティング(RISC)コア、複合命令セットコンピューティング(CISC)コア、超長命令語(VLIW)コア、または、ハイブリッドまたは代替的なコアタイプであり得る。さらに他のオプションとして、コア790は、例えば、ネットワークまたは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィック処理ユニット(GPGPU)コア、グラフィックコアなど特定用途向けコアであり得る。
フロントエンドユニット730は、分岐予測ユニット732を含み、分岐予測ユニット732は、命令キャッシュユニット734に結合され、命令キャッシュユニット734は、命令トランスレーションルックアサイドバッファ(TLB)736に結合され、TLB736は、命令フェッチユニット738に結合され、命令フェッチユニット738は、デコードユニット740に結合されている。複数のデコードユニット740(またはデコーダ)は、命令をデコードし得、元の命令からデコードされ、または、元の命令を反映し、または、元の命令から導出される1または複数のマイクロオペレーション、マイクロコードエントリーポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成し得る。デコードユニット740は、様々な異なるメカニズムを用いて実装され得る。複数の適したメカニズムの例としては、複数のルックアップテーブル、複数のハードウェア実装、複数のプログラマブルロジックアレイ(PLA)、複数のマイクロコード読み取り専用メモリ(ROM)、その他などが含まれるがこれらに限定されない。一実施形態において、コア790は、複数の特定のマクロ命令のためのマイクロコードを(例えば、デコードユニット740内に、または、フロントエンドユニット730内に)格納するマイクロコードROMまたは他の媒体を含む。デコードユニット740は、実行エンジンユニット750内のリネーム/割り当てユニット752に結合されている。
実行エンジンユニット750は、リタイヤユニット754と1または複数のスケジューラユニット756からなるセットとに結合されたリネーム/割り当てユニット752を含む。スケジューラユニット756は、複数の予約ステーション、中央命令ウィンドウ、その他などを含む、任意の数の複数の異なるスケジューラを表す。スケジューラユニット756は、物理レジスタファイルユニット758に結合されている。複数の物理レジスタファイルユニット758のそれぞれは、互いに異なるもの同士が互いに異なる1または複数のデータタイプを格納する1または複数の物理レジスタファイルを表す。そのようなデータタイプには、スカラ整数、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、状態(例えば、次に実行される命令のアドレスである命令ポインタ)、その他などが含まれる。一実施形態において、物理レジスタファイルユニット758は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを備える。これらのレジスタユニットは、複数のアーキテクチャベクトルレジスタ、複数のベクトルマスクレジスタ、および複数の汎用レジスタを提供し得る。レジスタリネーミングおよびアウトオブオーダ実行が実装され得る様々なやり方(例えば、リオーダバッファおよびリタイヤレジスタファイルを用いて、未来のファイル(future file)、履歴バッファ(history buffer)、およびリタイヤレジスタファイルを用いて、複数のレジスタマップおよび複数のレジスタのプールを用いて、その他)を示すべく、物理レジスタファイルユニット758にはリタイヤユニット754が重ねられている。リタイヤユニット754および物理レジスタファイルユニット758は、実行クラスタ760が結合されている。実行クラスタ760は、1または複数の実行ユニット762からなるセット、および1または複数のメモリアクセスユニット764からなるセットを含む。複数の実行ユニット762は様々な処理(例えば、シフト、加算、減算、乗算)を、様々なタイプのデータ(例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点)に対して実行し得る。いくつかの実施形態には、複数の特定の機能、または複数の機能からなる複数のセットのための専用の複数の実行ユニットが含まれ得るが、複数の他の実施形態において、全ての機能を全てが実行する1つだけの実行ユニット、または複数の実行ユニットが含まれ得る。特定の実施形態において、複数の特定のタイプのデータ/複数の処理に対して複数の別個のパイプライン(例えば、それぞれが自身のスケジューラユニット、物理レジスタファイルユニット、および/または実行クラスタを有する、スカラ整数パイプライン、スカラ浮動小数点/パックド整数/パックド浮動小数点/ベクトル整数/ベクトル浮動小数点パイプライン、および/または、メモリアクセスパイプライン、並びに、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット764を有する複数の特定の実施形態が実施される)が生成されるので、スケジューラユニット756、物理レジスタファイルユニット758、および実行クラスタ760は、複数あり得るものとして示されている。また、複数の別個のパイプラインが用いられる場合、これらのパイプラインのうち1または複数は、アウトオブオーダ発行/実行であり得、残りがインオーダであり得ることを理解されたい。
複数のメモリアクセスユニット764からなるセットは、メモリユニット770に結合され、メモリユニット770は、データキャッシュユニット774に結合されたデータTLBユニット772を含む。データキャッシュユニット774は、レベル2(L2)キャッシュユニット776に結合されている。例示的な一実施形態において、複数のメモリアクセスユニット764は、ロードユニット、格納アドレスユニット、および、格納データユニットを含み得る。これらはそれぞれ、メモリユニット770内のデータTLBユニット772に結合されている。命令キャッシュユニット734はさらに、メモリユニット770内のレベル2(L2)キャッシュユニット776に結合されている。L2キャッシュユニット776は、1または複数の他のレベルのキャッシュに、および、さらにはメインメモリに結合されている。
例として、例示的なレジスタリネーミング・アウトオブオーダ発行/実行コアアーキテクチャは、以下のようにパイプライン700を実装し得る。1)命令フェッチ738が、フェッチおよび長さデコードステージ702、704を実行する。2)デコードユニット740が、デコードステージ706を実行する。3)リネーム/割り当てユニット752が、割り当てステージ708およびリネームステージ710を実行する。4)スケジューラユニット756がスケジュールステージ712を実行する。5)物理レジスタファイルユニット758およびメモリユニット770が、レジスタ読み取り/メモリ読み取りステージ714を実行する。実行クラスタ760が実行ステージ716を実行する。6)メモリユニット770および物理レジスタファイルユニット758が、書き戻し/メモリ書き込みステージ718を実行する。7)様々なユニットが例外処理ステージ722に関わり得る。8)リタイヤユニット754および物理レジスタファイルユニット758が、コミットステージ724を実行する。
コア790は、本明細書に説明される命令を含む1または複数の命令セット(例えば、x86命令セット(より新しいバージョンではいくつかの拡張が追加された)、カリフォルニア州サニーベールのMIPS TechnologiesのMIPS命令セット、カリフォルニア州サニーベールのARM HoldingsのARM命令セット(NEONなど任意選択的な追加の拡張を含む)をサポートし得る。一実施形態において、コア790は、パックドデータ命令セットの拡張(例えば、SSE、AVX1、AVX2、その他)をサポートするロジックを含み、これにより、多くのマルチメディアアプリケーションにより用いられる処理を、パックドデータを用いて実行することが可能になる。
コアは、マルチスレッディング(複数の処理または複数のスレッドからなる2またはそれより多くの並列セットを実行)をサポートし得、このことを様々なやり方で行い得ることを理解されたい。それら様々なやり方には、タイムスライスドマルチスレッディング、同時のマルチスレッディング(単一の物理コアは、同物理コアが同時にマルチスレッディングを行っている複数のスレッドのそれぞれに対して論理コアを提供する)、または、これらの組み合わせ(例えば、Intel(登録商標)Hyperthreading技術のように、タイムスライスドフェッチおよびデコード、並びにその後の同時のマルチスレッディング)が含まれる。
アウトオブオーダ実行に関して、レジスタリネーミングを説明するが、レジスタリネーミングは、インオーダアーキテクチャで用いられ得ることを理解されたい。また、プロセッサの示される実施形態は、別個の命令およびデータキャッシュユニット734/774、並びに共有されるL2キャッシュユニット776も含むが、代替的な実施形態において、例えば、レベル1(L1)内部キャッシュ、または複数レベルの内部キャッシュなど複数の命令およびデータの両方に関して単一の内部キャッシュが用いられ得る。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび/またはプロセッサの外部にある外部キャッシュとの組み合わせを含み得る。代替的に、キャッシュの全てが、コアおよび/またはプロセッサの外部にあり得る。
特定の例示的なインオーダコアアーキテクチャ 図8A〜図8Bは、コアがチップ内の(同じタイプおよび/または複数の異なるタイプの複数の他のコアを含む)いくつかのロジックブロックのうちの1つであり得る、より特定的かつ例示的なインオーダコアアーキテクチャのブロック図を示す。複数のロジックブロックは、アプリケーションに応じて、何らかの一定の機能ロジック、複数のメモリI/Oインタフェース、および他の必要なI/Oロジックを有する高帯域幅相互接続ネットワーク(例えば、リングネットワーク)を介して通信を行う。
図8Aは、本願発明の複数の実施形態に係る、シングルプロセッサコアと、そのオンダイ相互接続ネットワーク802への接続と、そのレベル2(L2)キャッシュのローカルなサブセット804とを示すブロック図である。一実施形態において、命令デコーダ800は、パックドデータ命令セットの拡張を含むx86命令セットをサポートする。L1キャッシュ806は、キャッシュメモリ、並びに複数のスカラおよびベクトルユニットへの低レイテンシーの複数のアクセスを可能とする。(設計を単純化すべく)一実施形態において、スカラユニット808およびベクトルユニット810は複数の別個のレジスタセット(それぞれ、複数のスカラレジスタ812および複数のベクトルレジスタ814)を用い、それらの間で転送されるデータはメモリに書き込まれ、その後、レベル1(L1)キャッシュ806から再度読み取られるが、本願発明の複数の代替的な実施形態において、異なるアプローチが用いられ得る(例えば、単一のレジスタセットが用いられる、または、書き込まれ再度読み取られることなくデータが2つのレジスタファイル間で転送されることを可能とする通信パスが含まれる)。
L2キャッシュのローカルなサブセット804は、1つのプロセッサコアあたり1つである複数の別個のローカルなサブセットへ分割されるグローバルなL2キャッシュの一部である。各プロセッサコアは、自身のL2キャッシュのローカルなサブセット804への直接的なアクセスパスを有する。プロセッサコアにより読み取られるデータは、自身のL2キャッシュサブセット804に格納され、それぞれ自身のローカルなL2キャッシュサブセットにアクセスしている複数の他のプロセッサコアと並行して迅速にアクセスされ得る。プロセッサコアにより書き込まれるデータは、自身のL2キャッシュサブセット804に格納され、必要であれば複数の他のサブセットからフラッシュされる。リングネットワークは、共有されるデータの一貫性を確保する。リングネットワークは、複数のプロセッサコア、複数のL2キャッシュ、および複数の他のロジックブロックなどのエージェントがチップ内で互いに通信を行えるよう双方向性である。各リングデータパスは、1方向あたり、1012ビット幅である。
図8Bは、本願発明の複数の実施形態に係る、図8Aのプロセッサコアの一部の拡大図である。図8Bは、L1キャッシュ804のL1データキャッシュ806A部分、並びに、ベクトルユニット810および複数のベクトルレジスタ814に関するより細かな詳細を含む。詳細には、ベクトルユニット810は、整数、単精度浮動、および倍精度浮動命令のうち1または複数を実行する16幅のベクトル処理ユニット(VPU)である(16幅ALU828を参照されたい)。VPUはスウィズルユニット820により複数のレジスタ入力のスウィズルをサポートし、数値変換ユニット822A〜Bにより数値変換をサポートし、複製ユニット824によりメモリ入力の複製をサポートする。書き込みマスクレジスタ826は、結果として得られるベクトル書き込みの予測を可能とする。
集積メモリコントローラおよびグラフィックを有するプロセッサ 図9は、本願発明の複数の実施形態に係る、1より多くのコアを有し得、集積メモリコントローラを有し得、および、集積グラフィックロジックを有し得るプロセッサ900のブロック図である。図9の実線で示される四角は、単一のコア902A、システムエージェント910、1または複数のバスコントローラユニット916からなるセットを含むプロセッサ900を示す。破線で示される四角は任意選択的に追加されるものを含む、つまり、複数のコア902A〜N、システムエージェントユニット910内の1または複数の集積メモリコントローラユニット914からなるセット、および特定用途向けロジック908を含む代替的なプロセッサ900を示す。
したがって、プロセッサ900の複数の異なる実装には、1)特定用途向けロジック908が(1または複数のコアを含み得る)集積グラフィックおよび/または科学用途向け(スループット)ロジックであり、コア902A〜Nが1または複数の汎用コア(例えば、複数の汎用インオーダコア、複数の汎用アウトオブオーダコア、これら2つの組み合わせ)であるCPU、2)コア902A〜Nがグラフィックおよび/または科学用途(スループット)を主な目的とする多数の特定用途向けコアであるコプロセッサ、および3)コア902A〜Nが多数の汎用インオーダコアであるコプロセッサが含まれ得る。したがって、プロセッサ900は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU(汎用グラフィック処理ユニット)、高スループットのメニーインテグレーテッドコア(MIC)コプロセッサ(30またはそれより多くのコアを含む)、組み込みプロセッサなど、汎用プロセッサ、コプロセッサ、または特定用途向けプロセッサであり得る。プロセッサは、1または複数のチップ上で実装され得る。プロセッサ900は、例えば、BiCMOS、CMOS、若しくはNMOSなどの複数の処理技術のうちいずれかを用いて1または複数の基板の一部であり得、および/またはそれら基板上で実装され得る。
メモリ階層は、複数のコア内の1または複数のレベルのキャッシュ、1または複数の共有キャッシュユニット906からなるセット、および、複数の集積メモリコントローラユニット914からなるセットに結合された外部メモリ(図示せず)を含む。複数の共有キャッシュユニット906からなるセットは、レベル2(L2)、レベル3(L3),レベル4(L4),または他のレベルのキャッシュ、ラストレベルキャッシュ(LLC)、および/またはこれらの組み合わせなどの1または複数の中間レベルのキャッシュを含み得る。一実施形態において、リングベースの相互接続ユニット912が集積グラフィックロジック908、複数の共有キャッシュユニット906からなるセット、およびシステムエージェントユニット910/集積メモリコントローラユニット914を相互接続するが、代替的な実施形態において、そのような複数のユニットを相互接続するための任意の数の複数の周知の技術が用いられ得る。一実施形態において、1または複数のキャッシュユニット906とコア902A〜Nとの間で一貫性が維持される。
いくつかの実施形態において、コア902A〜Nのうち1または複数は、マルチスレッディングを行うことが出来る。システムエージェント910は、コア902A〜Nを調整し、動作させる複数のコンポーネントを含む。システムエージェントユニット910は、例えば、電力制御ユニット(PCU)およびディスプレイユニットを含み得る。PCUは、コア902A〜Nおよび集積グラフィックロジック908の電力状態を管理するために必要なロジックまたは複数のコンポーネントであり得、または、それらを含み得る。ディスプレイユニットは、1または複数の外部接続されたディスプレイを駆動するためのものである。
コア902A〜Nは、アーキテクチャ命令セットに関して同種または異種であってもよい。つまり、コア902A〜Nのうち2またはそれより多くは同じ命令セットを実行可能であり、その他は、同命令セットのサブセット、または異なる命令セットのみを実行可能であり得る。
例示的なコンピュータアーキテクチャ 図10〜13は、複数の例示的なコンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドPC、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、グラフィックデバイス、ビデオゲーム機器、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレーヤ、ハンドヘルドデバイス、および様々な他の電子デバイスに関して当技術分野で公知の複数の他のシステム設計および構成も適している。一般的に、本明細書において開示されるプロセッサおよび/または他の実行ロジックを組み込み可能な、非常に多種多様なシステムまたは電子デバイスが概して適している。
図10は、本願発明の一実施形態に係るシステム1000のブロック図を示す。システム1000は、コントローラハブ1020に結合された1または複数のプロセッサ1010、1015を含み得る。一実施形態において、コントローラハブ1020は、グラフィックメモリコントローラハブ(GMCH)1090および入出力ハブ(IOH)1050(複数の別個のチップ上にあり得る)を含む。GMCH1090は、複数のメモリ1040およびコプロセッサ1045が結合されたメモリおよびグラフィックコントローラを含む。IOH1050は、入出力(I/O)デバイス1060をGMCH1090に結合する。代替的に、メモリおよびグラフィックコントローラのうち一方または両方は、(本明細書で説明されるように)プロセッサ内で集積され、メモリ1040およびコプロセッサ1045は、プロセッサ1010、および、IOH1050を備える単一のチップ内のコントローラハブ1020へ直接結合されている。
追加のプロセッサ1015は任意選択的に用いられるので、図10において破線で示されている。各プロセッサ1010、1015は、本明細書において説明されるプロセッサコアのうち1または複数を含み得、プロセッサ900の何らかのバージョンであり得る。
メモリ1040は、例えば、ダイナミックランダムアクセスメモリ(DRAM)、相変化メモリ(PCM)、またはこれら2つの組み合わせであり得る。少なくとも1つの実施形態において、コントローラハブ1020は、フロントサイドバス(FSB)などのマルチドロップバス、QuickPath Interconnect(QPI)などのポイントツーポイントインタフェース、または同様の接続1095を介してプロセッサ1010、1015と通信を行う。
一実施形態において、コプロセッサ1045は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサなど特定用途向けプロセッサである。一実施形態において、コントローラハブ1020は、集積グラフィックアクセラレータを含み得る。
アーキテクチャ的特性、マイクロアーキテクチャ的特性、熱的特性、電力消費特性などを含む様々な利点に関して、物理リソース1010、1015間では様々な差があり得る。
一実施形態において、プロセッサ1010は、一般的なタイプの複数のデータ処理動作を制御する複数の命令を実行する。複数の命令には複数のコプロセッサ命令が組み込まれ得る。プロセッサ1010は、取り付けられたコプロセッサ1045により実行されるべきタイプのものとしてこれらのコプロセッサ命令を認識する。したがって、プロセッサ1010は、コプロセッサバスまたは他の相互接続上でこれらのコプロセッサ命令(または複数のコプロセッサ命令を表す複数の制御信号)をコプロセッサ1045へ発行する。コプロセッサ1045は受信した複数のコプロセッサ命令を受け付け、実行する。
図11は、本願発明の実施形態に係る、より特定的かつ例示的な第1のシステム1100のブロック図である。図11に示すようにマルチプロセッサシステム1100は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続1150を介して結合された第1プロセッサ1170および第2プロセッサ1180を含む。プロセッサ1170、1180のそれぞれは、プロセッサ900の何らかのバージョンであり得る。本願発明の一実施形態において、プロセッサ1170、1180はそれぞれ、プロセッサ1010、1015であり、コプロセッサ1138は、コプロセッサ1045である。他の実施形態において、プロセッサ1170、1180はそれぞれ、プロセッサ1010、および、コプロセッサ1045である。
プロセッサ1170、1180はそれぞれ、集積メモリコントローラ(IMC)ユニット1172、1182を含むものとして示されている。また、プロセッサ1170は自身のバスコントローラユニットの一部としてポイントツーポイント(P−P)インタフェース1176、1178を含み、同様に、第2プロセッサ1180は、P−Pインタフェース1186、1188を含む。プロセッサ1170、1180は、P−Pインタフェース回路1178、1188を用いてポイントツーポイント(P−P)インタフェース1150を介して情報を交換し得る。図11に示されるように、IMC1172、1182は、複数のプロセッサを、複数のそれぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る複数のそれぞれのメモリ、つまり、メモリ1132およびメモリ1134に結合する。
プロセッサ1170、1180はそれぞれ、ポイントツーポイントインタフェース回路1176、1194、1186、1198を用いて個別のP−Pインタフェース1152、1154を介してチップセット1190と情報を交換し得る。チップセット1190は任意選択的に、高性能インタフェース1139を介してコプロセッサ1138と情報を交換し得る。一実施形態において、コプロセッサ1138は、例えば、高スループットMICプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィックプロセッサ、GPGPU、組み込みプロセッサなど特定用途向けプロセッサである。
共有キャッシュ(図示せず)は、プロセッサが低電力モードに入った場合に、片方または両方のプロセッサのローカルキャッシュ情報が共有キャッシュに格納され得るよう、いずれかのプロセッサに含まれる、または、両方のプロセッサの外ではあるが、P−P相互接続を介してプロセッサと接続される。
チップセット1190は、インタフェース1196を介して第1バス1116と結合され得る。一実施形態において、第1バス1116はPeripheral Component Interconnect(PCI)バス、若しくはPCI Expressバスなどのバス、または他の第3世代のI/O相互接続バスであり得る。ただし、本願発明の範囲はそのように限定されない。
図11に示されるように、第1バス1116を第2バス1120へ結合するバスブリッジ1118と併せて、様々なI/Oデバイス1114が第1バス1116へ結合され得る。一実施形態において、複数のコプロセッサ、複数の高スループットMICプロセッサ、複数のGPGPU、複数のアクセラレータ(例えば、複数のグラフィックアクセラレータ、または、複数のデジタル信号処理(DSP)ユニットなど)、複数のフィールドプログラマブルゲートアレイ、または何らかの他のプロセッサなど1または複数の追加のプロセッサ1115が第1バス1116に結合されている。一実施形態において、第2バス1120は、low pin count(LPC)バスであり得る。一実施形態において、例えば、キーボードおよび/またはマウス1122、複数の通信デバイス1127、および、命令/コードおよびデータ1130を含み得るディスクドライブまたは他の大容量記憶デバイスなどの記憶ユニット1128を含む様々なデバイスが第2バス1120に結合され得る。さらに、オーディオI/O1124が、第2バス1120に結合され得る。なお、複数の他のアーキテクチャを用いることも可能である。例えば、図11のポイントツーポイントアーキテクチャの代わりに、システムはマルチドロップバス、または他のそのようなアーキテクチャを実装し得る。
図12は、本願発明の実施形態に係る、より特定的かつ例示的な第2のシステム1200のブロック図である。図11および12において同様の要素には同様の参照番号が付与され、図12の他の態様を曖昧にしないよう図11の特定の態様は図12において省略されている。
図12は、プロセッサ1170、1180がそれぞれ、集積メモリおよびI/O制御ロジック(「CL」)1172、1182を含み得ることを示す。したがって、CL1172、1182は、集積メモリコントローラユニットを含み、I/O制御ロジックを含む。図12は、メモリ1132、1134がCL1172、1182に結合されていることだけでなく、複数のI/Oデバイス1214が制御ロジック1172、1182に結合されていることも示す。複数のレガシーI/Oデバイス1215は、チップセット1190に結合されている。
図13は、本願発明の実施形態に係るSoC1300のブロック図を示す。図9と同様の要素には同様の参照番号が付与される。また、破線で示される四角は、より進化したSoCにおける任意選択的な特徴である。図13において、相互接続ユニット1302は、1または複数のコア202A〜Nからなるセットおよび共有キャッシュユニット906を含むアプリケーションプロセッサ1310と、システムエージェントユニット910と、バスコントローラユニット916と、集積メモリコントローラユニット914と、集積グラフィックロジック、画像プロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る1または複数のコプロセッサ1320からなるセットと、スタティックランダムアクセスメモリ(SRAM)ユニット1330と、ダイレクトメモリアクセス(DMA)ユニット1332と、1または複数の外部ディスプレイに結合するためディスプレイユニット1340とに結合されている。一実施形態において、コプロセッサ1320は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、GPGPU、高スループットMICプロセッサ、組み込みプロセッサなどの特定用途向けプロセッサを含む。
本明細書で開示する複数のメカニズムの複数の実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような複数の実装アプローチの組み合わせにより実施されてもよい。本願発明の複数の実施形態は、少なくとも1つのプロセッサ、記憶システム(揮発性、若しくは不揮発性のメモリ、および/または複数の記憶素子を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスを備える複数のプログラム可能なシステムで実行される複数のコンピュータプログラムまたはプログラムコードとして実施されてもよい。
図11に示されるコード1130などのプログラムコードは、本明細書で説明される複数の機能を実行し、出力情報を生成する複数の入力命令に適用されてもよい。出力情報は、公知の方式で、1または複数の出力デバイスに適用されてもよい。本明細書の目的において、プロセッシングシステムは、例えば、デジタル信号プロセッサ(DSP)、マイクロコントローラ、特定用途向け集積回路(ASIC)、またはマイクロプロセッサなどのプロセッサを有する何らかのシステムを含む。
プログラムコードは、プロセッシングシステムと通信を行う高水準の手続き型プログラミング言語またはオブジェクト指向のプログラミング言語で実施されてもよい。またプログラムコードは、所望される場合、アセンブリ言語またはマシン言語で実施されてもよい。事実、本明細書で説明される複数のメカニズムは、何らかの特定のプログラミング言語に限定されない。いずれの場合であっても、言語はコンパイラ型言語またはインタープリタ型言語であってもよい。
少なくとも1つの実施形態の1または複数の態様は、マシンによって読み取られると当該マシンに本明細書で説明される複数の技術を実施するロジックを作成させる、プロセッサ内の様々なロジックを表すマシン可読媒体に格納された複数の代表的な命令によって実装されてもよい。「IPコア」として知られるそのような表現は、有形のマシン可読媒体に格納され、ロジックまたはプロセッサを実際に作成する製造マシンにロードされるべく様々な顧客または製造施設に提供されてもよい。
そのようなマシン可読記憶媒体には、これらに限定されるわけではないが、マシンまたはデバイスによって製造または形成される、ハードディスク、フロッピー(登録商標)ディスク、光ディスク、コンパクトディスク読み取り専用メモリ(CD−ROM)、コンパクトディスクリライタブル(CD−RW)、および光磁気ディスクなどを含む他の何らかのタイプのディスク、読み取り専用メモリ(ROM)などの半導体デバイス、ダイナミックランダムアクセスメモリ(DRAM)などのランダムアクセスメモリ(RAM)、スタティックランダムアクセスメモリ(SRAM)、消去可能プログラム可能読み取り専用メモリ(EPROM)、フラッシュメモリ、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)、相変化メモリ(PCM)、磁気または光学式カード、または、複数の電子命令を格納するのに適した他の何らかのタイプの媒体などの記憶媒体を含む複数の物品の非一時的な有形構造を含み得る。
したがって、本願発明の複数の実施形態は、本明細書で説明される複数の構造、複数の回路、複数の装置、複数のプロセッサ、および/または複数のシステム機能を定める、Hardware Description Language(HDL)などの複数の命令を保持する、または設計データを保持する非一時的な有形のマシン可読媒体も含む。そのような複数の実施形態は、プログラム製品とも呼ばれ得る。
特定の例示的な複数の実施形態が説明され、添付の複数の図面において示されてきたが、そのような複数の実施形態は単に例示的であり、幅広い本願発明を限定するものではないこと、および本開示の検討により当業者は様々な他の修正例を思い付くので、本願発明は、示され説明された特定の複数の構造および複数の構成に限定されないことが理解されるべきである。成長が速く、更なる進歩が容易には予知出来ない本技術分野のような技術領域において、開示された複数の実施形態は容易に、本開示の複数の原理、または添付の複数の請求項の態様から逸脱することなく、技術進歩を可能とすることにより促されるように構成および詳細において修正可能であり得る。

Claims (22)

  1. 装置であり、
    前記装置は、
    複数のバンクに区分けされた拡張レジスタセットと、
    前記複数のバンクのうち現在アクティブであるバンクを指し示すポインタを提供する現在のバンクレジスタと、
    前記拡張レジスタセットおよび前記現在のバンクレジスタに結合されている実行回路と
    を備え、
    前記実行回路は、第1スレッドと第2スレッドとを含む2つのユーザレベルスレッドの複数のコンテキストを交換するための命令を受信し、
    前記第1スレッドは、前記複数のバンクのうち第1バンクに保存された第1コンテキストを有し、
    前記第2スレッドは、前記複数のバンクのうち第2バンクに保存された第2コンテキストを有し、
    前記実行回路は、
    前記命令に応答して前記第1バンクから前記第2バンクへ前記ポインタを変更し、
    前記第2バンクに格納された前記第2コンテキストを用いて前記第2スレッドを実行する、
    装置。
  2. 前記複数のコンテキストのコピーは、前記拡張レジスタセットの前記複数のバンクに対応する複数のメモリ領域に格納される、請求項1に記載の装置。
  3. 前記複数のメモリ領域へのアクセスをトラッキングするスヌープ回路であり、前記アクセスが検出された場合に、前記複数のメモリ領域の一のエリアと前記拡張レジスタセットの対応するバンクとの間で前記複数のコンテキストを同期させるためのイベントをトリガする前記スヌープ回路をさらに備える、請求項2に記載の装置。
  4. 複数のパーティションに分割された複数のベクトルレジスタをさらに備え、
    前記複数のコンテキストのコピーは、前記拡張レジスタセットの前記複数のバンクに対応する前記複数のパーティションに格納される、請求項1から3のいずれか一項に記載の装置。
  5. 前記複数のベクトルレジスタのそれぞれは、所与のコンテキストの最新のコピーが前記複数のベクトルレジスタまたは前記拡張レジスタセットに格納されているかを示す、自身に関連付けられた1または複数の状態ビットを有する、請求項4に記載の装置。
  6. 所与のユーザレベルスレッドにより参照されるレジスタを前記拡張レジスタセットの対応するバンクにマッピングする前記実行回路に結合されたデコーダ回路をさらに備える、請求項1から5のいずれか一項に記載の装置。
  7. 前記実行回路は、前記命令に応答して、無条件に前記第2コンテキストに切り替える、請求項1から6のいずれか一項に記載の装置。
  8. 前記第2コンテキストに切り替えるための条件が満たされたかを決定する、前記実行回路に結合されたフロントエンド回路をさらに備える、請求項1から7のいずれか一項に記載の装置。
  9. 前記命令は、複数の命令を含む命令ブロックの境界をマーク付けする命令ペアのうち一方であり、
    前記命令ブロック内の各命令は、コンテキスト切り替えの候補である、請求項1から8のいずれか一項に記載の装置。
  10. 前記実行回路に結合されたマスクレジスタをさらに備え、
    前記マスクレジスタは複数のマスクビットを有し、
    各マスクビットは、前記複数のバンクのうち1つに関連付けられ、前記複数のバンクのうち前記1つがコンテキスト切り替えを非アクティブ化されたかを示す、請求項1から9のいずれか一項に記載の装置。
  11. プロセッサにより、拡張レジスタセットの複数のバンクのうち、第1バンクに格納される第1コンテキストを用いて、ユーザレベルスレッドである第1スレッドを実行する段階と、
    前記プロセッサにより、前記第1スレッド、および、前記拡張レジスタセットの前記複数のバンクのうち第2バンクに保存された第2コンテキストを有する他のユーザレベルスレッドである第2スレッドの複数のコンテキストを交換するための命令を受信する段階と、
    前記命令に応答して、現在アクティブなバンクとして前記第1バンクを指し示すレジスタポインタを、前記第2バンクへ変更する段階と、
    前記プロセッサにより、前記第2バンクに格納された前記第2コンテキストを用いて、前記第2スレッドを実行する段階と
    を備える、方法。
  12. 前記複数のコンテキストのコピーは、前記拡張レジスタセットの前記複数のバンクに対応する複数のメモリ領域に格納される、請求項11に記載の方法。
  13. 前記複数のメモリ領域へのアクセスをトラッキングする段階と、
    前記アクセスが検出された場合に、前記複数のメモリ領域の一のエリアと、前記拡張レジスタセットの対応するバンクとの間で前記複数のコンテキストを同期させるためのイベントをトリガする段階と
    をさらに備える、請求項12に記載の方法。
  14. 前記複数のコンテキストのコピーは、前記拡張レジスタセットの前記複数のバンクに対応する複数のベクトルレジスタの複数のパーティションに格納される、請求項11から13のいずれか一項に記載の方法。
  15. 前記複数のベクトルレジスタのそれぞれは、所与のコンテキストの最新のコピーが前記複数のベクトルレジスタまたは前記拡張レジスタセットに格納されているかを示す、自身に関連付けられた1または複数の状態ビットを有する、請求項14に記載の方法。
  16. 前記命令を実行する段階は、前記第2コンテキストへの切り替えを無条件に引き起こす、請求項11から15のいずれか一項に記載の方法。
  17. 前記命令の実行は、前記第2コンテキストに切り替えるための条件が満たされたかの決定を引き起こす、請求項11から16のいずれか一項に記載の方法。
  18. 前記命令は、複数の命令を含む命令ブロックの境界をマーク付けする命令ペアのうち一方であり、
    前記命令ブロック内の各命令は、コンテキスト切り替えの候補である、請求項11から17のいずれか一項に記載の方法。
  19. オペレーティングシステムの関与なしで前記命令を実行する段階をさらに備える、請求項11から18のいずれか一項に記載の方法。
  20. システムであり、
    前記システムは、
    メモリと、
    前記メモリに結合されたプロセッサと
    を備え、
    前記プロセッサは、
    複数のバンクに区分けされた拡張レジスタセットと、
    前記複数のバンクのうち現在アクティブであるバンクを指し示すポインタを提供する現在のバンクレジスタと、
    前記拡張レジスタセットおよび前記現在のバンクレジスタに結合された実行回路と
    を有し、
    前記実行回路は、
    第1スレッドと第2スレッドとを含む2つのユーザレベルスレッドの複数のコンテキストを交換するための命令を受信し、
    前記第1スレッドは、前記複数のバンクのうち第1バンクに保存された第1コンテキストを有し、
    前記第2スレッドは、前記複数のバンクのうち第2バンクに保存された第2コンテキストを有し、
    前記実行回路は、
    前記命令に応答して前記第1バンクから前記第2バンクへ前記ポインタを変更し、
    前記第2バンクに格納された前記第2コンテキストを用いて前記第2スレッドを実行する、
    システム。
  21. 前記複数のコンテキストのコピーは、前記拡張レジスタセットの前記複数のバンクに対応する前記メモリの複数のメモリ領域に格納される、請求項20に記載のシステム。
  22. 複数のパーティションに分割された複数のベクトルレジスタをさらに備え、
    前記複数のコンテキストのコピーは、前記拡張レジスタセットの前記複数のバンクに対応する前記複数のパーティションに格納される、請求項20または21に記載のシステム。
JP2015534474A 2012-09-28 2013-06-24 装置、方法、およびシステム Expired - Fee Related JP6143872B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/630,124 2012-09-28
US13/630,124 US20140095847A1 (en) 2012-09-28 2012-09-28 Instruction and highly efficient micro-architecture to enable instant context switch for user-level threading
PCT/US2013/047401 WO2014051771A1 (en) 2012-09-28 2013-06-24 A new instruction and highly efficient micro-architecture to enable instant context switch for user-level threading

Publications (2)

Publication Number Publication Date
JP2015534188A true JP2015534188A (ja) 2015-11-26
JP6143872B2 JP6143872B2 (ja) 2017-06-07

Family

ID=50386392

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015534474A Expired - Fee Related JP6143872B2 (ja) 2012-09-28 2013-06-24 装置、方法、およびシステム

Country Status (7)

Country Link
US (1) US20140095847A1 (ja)
JP (1) JP6143872B2 (ja)
KR (1) KR101771825B1 (ja)
CN (1) CN104603795B (ja)
DE (1) DE112013003731T5 (ja)
GB (1) GB2519254A (ja)
WO (1) WO2014051771A1 (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021503126A (ja) * 2017-11-14 2021-02-04 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation メモリ・ポインタを変更することによるコンテキスト切り替えを提供するコンピュータ・プログラム、コンピュータ・システム、およびコンピュータ実装方法
US11579806B2 (en) 2017-11-14 2023-02-14 International Business Machines Corporation Portions of configuration state registers in-memory

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9898291B2 (en) 2011-04-07 2018-02-20 Via Technologies, Inc. Microprocessor with arm and X86 instruction length decoders
US9645822B2 (en) 2011-04-07 2017-05-09 Via Technologies, Inc Conditional store instructions in an out-of-order execution microprocessor
US9274795B2 (en) 2011-04-07 2016-03-01 Via Technologies, Inc. Conditional non-branch instruction prediction
US9336180B2 (en) * 2011-04-07 2016-05-10 Via Technologies, Inc. Microprocessor that makes 64-bit general purpose registers available in MSR address space while operating in non-64-bit mode
US9317288B2 (en) 2011-04-07 2016-04-19 Via Technologies, Inc. Multi-core microprocessor that performs x86 ISA and ARM ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US8880851B2 (en) 2011-04-07 2014-11-04 Via Technologies, Inc. Microprocessor that performs X86 ISA and arm ISA machine language program instructions by hardware translation into microinstructions executed by common execution pipeline
US9378019B2 (en) 2011-04-07 2016-06-28 Via Technologies, Inc. Conditional load instructions in an out-of-order execution microprocessor
US9292470B2 (en) * 2011-04-07 2016-03-22 Via Technologies, Inc. Microprocessor that enables ARM ISA program to access 64-bit general purpose registers written by x86 ISA program
US9244686B2 (en) 2011-04-07 2016-01-26 Via Technologies, Inc. Microprocessor that translates conditional load/store instructions into variable number of microinstructions
US9501276B2 (en) * 2012-12-31 2016-11-22 Intel Corporation Instructions and logic to vectorize conditional loops
CN104461758B (zh) * 2014-11-10 2017-08-25 中国航天科技集团公司第九研究院第七七一研究所 一种容忍cache缺失快速清空流水线的异常处理方法及其处理结构
US9952867B2 (en) * 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
GB2540937B (en) * 2015-07-30 2019-04-03 Advanced Risc Mach Ltd Graphics processing systems
US9946566B2 (en) * 2015-09-28 2018-04-17 Intel Corporation Method and apparatus for light-weight virtualization contexts
US10761983B2 (en) * 2017-11-14 2020-09-01 International Business Machines Corporation Memory based configuration state registers
US10558366B2 (en) 2017-11-14 2020-02-11 International Business Machines Corporation Automatic pinning of units of memory
US10761751B2 (en) 2017-11-14 2020-09-01 International Business Machines Corporation Configuration state registers grouped based on functional affinity
US10901738B2 (en) 2017-11-14 2021-01-26 International Business Machines Corporation Bulk store and load operations of configuration state registers
US10664181B2 (en) 2017-11-14 2020-05-26 International Business Machines Corporation Protecting in-memory configuration state registers
US10552070B2 (en) * 2017-11-14 2020-02-04 International Business Machines Corporation Separation of memory-based configuration state registers based on groups
US10635602B2 (en) * 2017-11-14 2020-04-28 International Business Machines Corporation Address translation prior to receiving a storage reference using the address to be translated
US10698686B2 (en) * 2017-11-14 2020-06-30 International Business Machines Corporation Configurable architectural placement control
US10642757B2 (en) 2017-11-14 2020-05-05 International Business Machines Corporation Single call to perform pin and unpin operations
US11811401B2 (en) 2019-08-14 2023-11-07 Google Llc Dual-mode operation of application specific integrated circuits
CN111857831B (zh) * 2020-06-11 2021-07-20 成都海光微电子技术有限公司 一种存储体冲突优化方法、并行处理器及电子设备
CN112463327B (zh) * 2020-11-25 2023-01-31 海光信息技术股份有限公司 逻辑线程快速切换的方法、装置、cpu芯片及服务器
US11545209B2 (en) * 2021-05-28 2023-01-03 Micron Technology, Inc. Power savings mode toggling to prevent bias temperature instability

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07141208A (ja) * 1993-11-15 1995-06-02 Sony Corp マルチタスク処理装置
JPH09212371A (ja) * 1996-02-07 1997-08-15 Nec Corp レジスタ退避及び復元システム
JP2002533807A (ja) * 1998-12-22 2002-10-08 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 割込み/ソフトウエア制御スレッド処理
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
JP2006092042A (ja) * 2004-09-21 2006-04-06 Sanyo Electric Co Ltd 情報処理装置及びコンテキスト切り替え方法

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5920710A (en) * 1996-11-18 1999-07-06 Advanced Micro Devices, Inc. Apparatus and method for modifying status bits in a reorder buffer with a large speculative state
US20020103847A1 (en) * 2001-02-01 2002-08-01 Hanan Potash Efficient mechanism for inter-thread communication within a multi-threaded computer system
US7853778B2 (en) * 2001-12-20 2010-12-14 Intel Corporation Load/move and duplicate instructions for a processor
US9189230B2 (en) * 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US7827551B2 (en) * 2005-09-21 2010-11-02 Intel Corporation Real-time threading service for partitioned multiprocessor systems
US7461275B2 (en) * 2005-09-30 2008-12-02 Intel Corporation Dynamic core swapping
US8689215B2 (en) * 2006-12-19 2014-04-01 Intel Corporation Structured exception handling for application-managed thread units
US7933759B2 (en) * 2008-03-28 2011-04-26 Microsoft Corporation Predicate checking for distributed systems
US20100312991A1 (en) * 2008-05-08 2010-12-09 Mips Technologies, Inc. Microprocessor with Compact Instruction Set Architecture
US20110055495A1 (en) * 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8490113B2 (en) * 2011-06-24 2013-07-16 International Business Machines Corporation Messaging in a parallel computer using remote direct memory access (‘RDMA’)

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07141208A (ja) * 1993-11-15 1995-06-02 Sony Corp マルチタスク処理装置
JPH09212371A (ja) * 1996-02-07 1997-08-15 Nec Corp レジスタ退避及び復元システム
JP2002533807A (ja) * 1998-12-22 2002-10-08 コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ 割込み/ソフトウエア制御スレッド処理
JP2004220070A (ja) * 2003-01-09 2004-08-05 Japan Science & Technology Agency コンテキスト切り替え方法及び装置、中央演算装置、コンテキスト切り替えプログラム及びそれを記憶したコンピュータ読み取り可能な記憶媒体
JP2006092042A (ja) * 2004-09-21 2006-04-06 Sanyo Electric Co Ltd 情報処理装置及びコンテキスト切り替え方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2021503126A (ja) * 2017-11-14 2021-02-04 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation メモリ・ポインタを変更することによるコンテキスト切り替えを提供するコンピュータ・プログラム、コンピュータ・システム、およびコンピュータ実装方法
US11579806B2 (en) 2017-11-14 2023-02-14 International Business Machines Corporation Portions of configuration state registers in-memory
JP7249717B2 (ja) 2017-11-14 2023-03-31 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ・ポインタを変更することによるコンテキスト切り替えを提供するコンピュータ・プログラム、コンピュータ・システム、およびコンピュータ実装方法

Also Published As

Publication number Publication date
US20140095847A1 (en) 2014-04-03
JP6143872B2 (ja) 2017-06-07
CN104603795B (zh) 2018-11-06
KR20150030274A (ko) 2015-03-19
GB2519254A (en) 2015-04-15
KR101771825B1 (ko) 2017-08-25
WO2014051771A1 (en) 2014-04-03
GB201500863D0 (en) 2015-03-04
DE112013003731T5 (de) 2015-05-21
CN104603795A (zh) 2015-05-06

Similar Documents

Publication Publication Date Title
JP6143872B2 (ja) 装置、方法、およびシステム
US10503505B2 (en) Read and write masks update instruction for vectorization of recursive computations over independent data
US11243768B2 (en) Mechanism for saving and retrieving micro-architecture context
US9411739B2 (en) System, method and apparatus for improving transactional memory (TM) throughput using TM region indicators
JP6340097B2 (ja) リードマスク及びライトマスクにより制御されるベクトル移動命令
US10678541B2 (en) Processors having fully-connected interconnects shared by vector conflict instructions and permute instructions
US10127039B2 (en) Extension of CPU context-state management for micro-architecture state
JP5985526B2 (ja) システムコールのためのロバスト且つ高性能な命令
US20170286118A1 (en) Processors, methods, systems, and instructions to fetch data to indicated cache level with guaranteed completion
US20150134932A1 (en) Structure access processors, methods, systems, and instructions
US11354128B2 (en) Optimized mode transitions through predicting target state
US10579378B2 (en) Instructions for manipulating a multi-bit predicate register for predicating instruction sequences
US10761979B2 (en) Bit check processors, methods, systems, and instructions to check a bit with an indicated check bit value
CN110554887A (zh) 间接存储器提取器
US9880839B2 (en) Instruction that performs a scatter write
CN112148106A (zh) 用于处理器的混合预留站的系统、装置和方法
WO2019133091A1 (en) Apparatus and method for vectored machine check bank reporting
CN115858022A (zh) 集群化解码管线的可缩放切换点控制电路系统

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20160519

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20160531

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20160830

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20161028

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20161130

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20170411

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170509

R150 Certificate of patent or registration of utility model

Ref document number: 6143872

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees