JP2012512490A - 共有された命令ストリームを伴うコプロセッサユニット - Google Patents

共有された命令ストリームを伴うコプロセッサユニット Download PDF

Info

Publication number
JP2012512490A
JP2012512490A JP2011542254A JP2011542254A JP2012512490A JP 2012512490 A JP2012512490 A JP 2012512490A JP 2011542254 A JP2011542254 A JP 2011542254A JP 2011542254 A JP2011542254 A JP 2011542254A JP 2012512490 A JP2012512490 A JP 2012512490A
Authority
JP
Japan
Prior art keywords
unit
coprocessor
processor
instructions
series
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
JP2011542254A
Other languages
English (en)
Other versions
JP5676470B2 (ja
JP2012512490A5 (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.)
Advanced Micro Devices Inc
Original Assignee
Advanced Micro Devices Inc
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 Advanced Micro Devices Inc filed Critical Advanced Micro Devices Inc
Publication of JP2012512490A publication Critical patent/JP2012512490A/ja
Publication of JP2012512490A5 publication Critical patent/JP2012512490A5/ja
Application granted granted Critical
Publication of JP5676470B2 publication Critical patent/JP5676470B2/ja
Active 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • 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/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/30Providing cache or TLB in specific location of a processing system
    • G06F2212/301In special purpose processing node, e.g. vector processor

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)

Abstract

【解決手段】
プロセッサユニット及びコプロセッサユニットが開示される。1つの実施形態では、プロセッサユニットは、命令ストリーム内の一連の命令を受信しそして一連の命令をコプロセッサユニットへ供給する機能ユニットを含む。コプロセッサユニットは、命令を実行し、そして一連の命令に対応する一連の実行結果の、プロセッサユニットの機能ユニットへの送信を開始する。プロセッサ機能ユニットは、パケットベースのプロトコルを実装している共有バス回路を介してコプロセッサユニットに結合されていてよい。プロセッサユニット及びコプロセッサユニットは、システムメモリのコヒーレントビューを共有してよい。種々の実施形態において、機能ユニットは、コプロセッサユニット内に配置される翻訳ルックアサイドバッファ(TLB)内のエントリを変更することができ、コプロセッサユニット上等で実行中のスレッドをレジューム及びサスペンドすることができる。
【選択図】図3

Description

この発明は、概してコンピュータ処理に関し、更に特定的には命令ストリームを共有するプロセッサユニット及びコプロセッサユニット上で命令を実行することに関する。
コプロセッサユニット上で命令を実行するための種々の技術が開示される。
1つの実施形態では、コプロセッサユニットに結合される第1のプロセッサ機能ユニットを含む装置が開示される。1つの実施形態では、第1のプロセッサ機能ユニットは、スケジューラユニットから、第1の命令ストリーム内の第1の一連の命令を受信し、そして第1の一連の命令をコプロセッサユニットへ供給するように構成される。次いで、第1のプロセッサ機能ユニットは、コプロセッサユニットから、第1の一連の命令に対応する第1の一連の実行結果を受信するように構成され、ここでは、コプロセッサユニットが第1の一連の実行結果の送信を開始する。特定の実施形態においては、装置は、第1のプロセッサ機能ユニットをコプロセッサユニットに結合すると共にパケットベースのプロトコルを実装する共有バス回路を含む。幾つかの実施形態では、パケットベースのプロトコルは、ハイパートランスポートプロトコル又はPCIエクスプレスプロトコルである。他の実施形態においては、第1のプロセッサ機能ユニットは、コプロセッサユニット内に配置される翻訳ルックアサイドバッファ(TLB)内のエントリを変更するように構成される。
他の実施形態では、プロセッサインタフェースユニット及び処理コアを含むコプロセッサユニットが開示される。プロセッサインタフェースユニットは、コンパニオンプロセッサユニット内のコプロセッサインタフェースユニットから命令を受信するように構成され、ここでは、命令は、コンパニオンプロセッサユニットによって共有される命令ストリームからのものである。処理コアは、受信した命令を実行して、第1の一連の実行結果を生成すると共にプロセッサインタフェースユニットを介してのコンパニオンプロセッサユニットへの第1の一連の実行結果の伝達を開始するように構成される。特定の実施形態においては、処理コアは、TLBを含み、そしてコンパニオンプロセッサ上で実行中のオペレーティングシステムへプロセッサインタフェースを介してページフォールトの表示を送信し、オペレーティングシステムがページフォールトを使用可能にしたことの表示をプロセッサインタフェースを介して受信するように構成される。種々の実施形態において、処理コアはページテーブルウォークを実行するように構成される。幾つかの実施形態では、コプロセッサは、メモリのコヒーレントビューをコンパニオンプロセッサユニットと共有する。
他の実施形態では、コプロセッサユニット及びコンパニオンプロセッサユニットを含むコンピュータシステムによって実行可能なプログラム命令を記憶している有形的コンピュータ可読メモリ媒体が開示される。記憶されているプログラム命令は、各々が第1の一連のオプコードの1つを有する第1の一連のプログラム命令を含み、ここでは、第1の一連のプログラム命令は、コンパニオンプロセッサユニット内の1つ以上の機能ユニットによって実行可能である。記憶されているプログラム命令はまた、各々が第2の一連のオプコードの1つを有する第2の一連のプログラム命令を含み、ここでは、第2の一連のプログラム命令は、コプロセッサユニット内で実行可能である。コンパニオンプロセッサユニットは、第2の一連のプログラム命令内のプログラム命令を受信することに応答して、コプロセッサユニットに結合されているコンパニオンプロセッサユニットのコプロセッサインタフェースユニットへそれらの命令を供給するように構成される。コプロセッサインタフェースユニットは、第2の一連の命令内のプログラム命令を伝達すると共に伝達された命令の実行結果のコプロセッサユニット開始の送信を次いで受信するように構成される。
以下の詳細な説明は添付の図面を参照しており、これを簡単に説明しておく。
図1はコンピュータシステムの1つの実施形態のブロック図である。
図2はプロセッサユニット及び1つ以上のコプロセッサユニットを含むプロセッササブシステムの1つの実施形態のブロック図である。
図3はコプロセッサインタフェースユニットを含むプロセッサユニットの1つの実施形態のブロック図である。
図4はコプロセッサユニットの1つの実施形態のブロック図である。
図5はコプロセッサインタフェースの1つの実施形態のブロック図である。
図6Aはコプロセッサユニットの種々の実施形態のブロック図(その1)である。 図6Bはコプロセッサユニットの種々の実施形態のブロック図(その2)である。 図6Cはコプロセッサユニットの種々の実施形態のブロック図(その3)である。 図6Dはコプロセッサユニットの種々の実施形態のブロック図(その4)である。
図7はコプロセッサインタフェースを介してコプロセッサ上で命令を実行するための方法の1つの実施形態のフローチャートである。
図8はコプロセッサ上でスレッドを切り換えるための方法の1つの実施形態のフローチャートである。
図9は仮想アドレス空間を用いるコプロセッサユニットによって実施される方法の1つの実施形態のフローチャートである。
図10は第1のプロセッサ機能ユニットによって実施される方法の1つの実施形態のフローチャートである。
図11はコプロセッサユニットによって実施される方法の1つの実施形態のフローチャートである。
図12はコンピュータ可読媒体の1つの実施形態のブロック図である。
本明細書は「1つの実施形態」又は「実施形態」への参照を含む。「1つの実施形態において」又は「実施形態において」の語句の出現は、必ずしも同一の実施形態を参照しない。特定の特徴、構成、又は特性は、本開示と合致する任意の適切な様態で組み合わされてよい。
用語集。以下の幾つかの段落は、本開示(添付の特許請求の範囲を含む)において見出される用語に対する定義及び/又は文脈を提供する。
「備える、備えた(comprising)。」この用語は非制約的(open-ended)である。添付の特許請求の範囲において用いられるように、この用語は追加的な構成及びステップを排除しない。「第1のプロセッサ機能ユニット…を備えた装置」と記載している請求項を考える。当該請求項は、追加的な構成要素(例えば第2のプロセッサ機能ユニット、キャッシュ、等)を含むということから当該装置を除外しない。
「コンピュータシステム。」この用語は、当該分野においてその普通の且つ認められている意味を有し、各々が1つ以上のプロセッサユニット及びメモリを含む互いに動作している1つ以上の計算デバイスを含む。
「構成される、構成された(configured)。」ここで用いられるように、この用語は、ハードウエア又はソフトウエアの特定の一片が、動作させられるときに特定の単一又は複数のタスクを実行するように配置されていることを意味する。従って、タスクAを実行するように「構成される」コンピュータシステムは、そのコンピュータシステムがそのコンピュータシステムの動作の間にタスクAを実行し若しくは実行するために用いられ得る回路、メモリ内に記憶されるプログラム命令、又は他の構造を含んでいることを意味する。同様に、タスクBを実行するによう「構成される」コンピュータプログラムは、コンピュータシステムによって実行される場合にタスクBを実行する命令を含む。
「ソフトウエア。」この用語は、当該分野においてその普通の且つ認められている意味を有し、任意の形態のコンピュータプログラムを含み、プログラムは、コンピュータシステムの動作を指示する命令のセット(sets of instructions)を含む。
「ソフトウエアアプリケーション。」この用語は広義にソフトウエアのインスタンス(instance)を参照する。コンピュータバックアッププログラムは、ある種のソフトウエアアプリケーションである。「ソフトウエアアプリケーション」の用語はまた、オペレーティングシステム上で実行中のプログラムに加えてオペレーティングシステムを含む。
「プロセッサユニット。」この用語は、当該分野においてその普通の且つ認められている意味を有し、プログラム命令を実行するように構成される任意の回路(例えば中央処理ユニット(CPU))を少なくとも含む。ここで用いられるように、プロセッサユニットは、「主」プロセッサユニット又はコプロセッサユニットを参照する。コプロセッサユニットと連携して動作する主プロセッサユニットは、「ホスト」又は「コンパニオン」プロセッサユニットと称されることがある。プロセッサユニットは、単一のダイ上に1つ以上の処理「コア」を有していてよい。加えて、プロセッサユニットは、多重ダイにわたって分散されていてよい。
「処理コア(Processing core)。」この用語は、当該分野においてその普通の且つ認められている意味を有し、プロセッサユニット内の複数の処理回路の1つ(例えばCPU)を含む。例えば、プロセッサコアは、多重コア(チップレベル多重プロセッサ)デバイスの1つのコアを参照してよい。
「コプロセッサユニット。」この用語は、コンパニオンプロセッサの機能を補完するために用いられる任意のプロセッサユニットを広く参照する。命令ストリームをコンパニオンプロセッサと共有するコプロセッサユニットは、コンパニオンプロセッサの命令ストリームから分離される命令ストリームを受信するアクセレレータユニットとは異なる。
「命令(Instruction)。」この用語は、当該分野においてその普通の且つ認められている意味を有し、動作の幾つかのセット(some set of operations)を実行するようにプロセッサユニット又はコアに指示する一連のビット(a set of bits)を少なくとも含む。命令は、種々の実施形態において、命令識別子(例えばオプコード(opcodes))、即時データ(immediate data)(例えばオペランド)、アドレス、等を含み得る。
「命令ストリーム。」この用語は、プロセッサユニット又はコアへ供給される時系列に連続した(consecutive-in-time)命令のシーケンス(例えばソフトウエアアプリケーションからの)を表していてよい。命令ストリームは、アドレス空間内で連続する(consecutive)命令の他に、何らかの元の順序に対して順序外で実行される命令をも含むことができる。
「実行結果(Execution results)。」この用語は、プロセッサユニット又はコアが実行中の命令の結果として生じる状態における任意の変化を広く参照する。例えば、実行結果は、結果値(resultant value)(例えば加算の合計)、状態/完了通知、例外の表示(例えばページフォールトを表示するフラグ)、指令(command)(例えば処理ユニットに実行中のスレッドをサスペンドするように伝えること)、等を含んでいてよい。
「スケジューラユニット(Scheduler unit)。」この用語は、実行のための命令を準備するプロセッサユニット又はコア内の回路を広く参照する(例えば、プロセッサユニット又はコア内での実行のための命令をフェッチし(fetches)、復号化し、及び/又はスケジューリングする回路、あるいはプロセッサユニット又はコア内の適切な機能ユニットに命令を指示する回路)。
「機能ユニット。」この用語は、当該分野においてその普通の且つ認められている意味を有し、命令を実行し又は命令がその利益のために実行されることを生じさせるプロセッサユニット又はコア内の任意の回路を広く参照する。プロセッサユニット又はコアは、各々が特定の機能(例えば固定小数点演算命令、浮動小数点演算命令、ロード/ストア命令、等)を専ら実行する多重機能ユニットを含んでいてよい。「機能ユニット」は、例えば、実行結果のコプロセッサ開始の送信を受信し、そして命令をリタイヤする(retires)回路を含む。
「共有バス回路(Shared bus circuit)。」この用語は、3つ以上のデバイスによって共有されるバス回路を参照する。従って、共有バス回路は、2つのデバイスの間にある「点対点(point-to-point)」バスとは異なる。
「メモリアクセスデバイス。」この用語は、1つ以上の処理ユニットがメモリにアクセスすることを可能にする回路(典型的にはディスクリートチップ)を広く参照する。
「スレッド(Thread)。」ここで用いられるように、この用語は、プログラムの他の側面とは独立して実行され得るプログラムの一部を参照する。
「多重スレッドにされた(Multithreaded)。」この用語は、多重スレッドの同時的な実行を支持するプロセッサユニット又はコアの能力を参照する。
「対応するスレッド(Corresponding thread)。」この用語は、異なるプロセッサユニット又はコア上で実行中の関連するスレッドを広く参照する。例えば、プロセッサ上で実行中のスレッドが、他のプロセッサ上で実行を開始するスレッドを起動する場合、これらのスレッドの各々は、他方に対して「対応する」ものとして説明される。互いに通信している一方で異なるプロセッサユニット又はコア上で実行中のスレッドもまた、「対応するスレッド」であり得る。
「レジューム(Resume)。」この用語は、多重スレッドにされたプロセッサ又はコア上のスレッドの実行を再起動する作用を参照する。
「サスペンド(Suspend)。」この用語は、多重スレッドにされたプロセッサ又はコア上のスレッドの実行を停止する作用を参照する。
「翻訳ルックアサイドバッファ(Translation Lookaside Buffer)(TLB)。」この用語は、当該分野においてその普通の且つ認められている意味を有し、仮想アドレスの物理アドレスへの翻訳を記憶しているキャッシュ(cache)を含む。
「ページテーブルウォーク(Page table walk)。」この用語は、当該分野においてその普通の且つ認められている意味を有し、TLB内での翻訳を探す(locate)ことができなかった後にメモリ内の物理アドレスへの仮想アドレスの翻訳を調べる(looking up)プロセスを含む。
次に図1を参照すると、コンピュータシステム100の1つの実施形態が図示されている。本開示は、コンピュータシステム内に含まれるプロセッサユニット及びコプロセッサユニットの種々の実施形態を説明する。開示されるコンピュータシステムは、任意の適切な種類の計算デバイスであってよい。図示されるように、コンピュータシステム100は、相互接続160(例えばシステムバス)を介してメモリ120と単一又は複数のI/Oインタフェース140とに結合されるプロセッササブシステム180を含む。単一又は複数のI/Oインタフェース140は1つ以上のI/Oデバイス150に結合される。コンピュータシステム100は任意の様々な種類のデバイスであってよく、限定はされないが、パーソナルコンピュータシステム、デスクトップコンピュータ、ラップトップ若しくはノートブックコンピュータ、メインフレームコンピュータシステム、ハンドヘルドコンピュータ、ワークステーション、ネットワークコンピュータ、消費者デバイス、例えば携帯電話機、ページャ(pager)、又はパーソナルデータアシスタント(PDA)を含む。コンピュータシステム100はまた、記憶デバイス、スイッチ、モデム、ルータ、等のような任意の種類のネットワークされた周辺デバイスを含んでいてよい。便宜上、図1には単一のコンピュータシステム100が示されているが、システム100は、一緒に動作する2つ以上のコンピュータシステムとして実装されてもよい。
プロセッササブシステム180は、1つ以上のプロセッサ又は処理ユニットを含んでいてよい。例えば、プロセッササブシステム180は、1つ以上のコプロセッサユニットに結合される1つ以上のプロセッサユニットを含んでいてよい。コンピュータシステム100の種々の実施形態においては、プロセッササブシステム180の多重インスタンスが相互接続160に結合されていてよい。種々の実施形態においては、プロセッササブシステム180(又は180内の各プロセッサユニット)は、キャッシュ又は他の形態のオンボードメモリを含んでいてよい。プロセッササブシステム180は、以下の図2と併せて更に詳細に下記で説明される。
メモリ120はプロセッササブシステム180によって使用可能である。メモリ120は、ハードディスクストレージ、フロッピディスクストレージ、リムーバルディスクストレージ、フラッシュメモリ、ランダムアクセスメモリ(RAM−SRAM、EDO_RAM、SDRAM、DDR_SDRAM、ラムバス(Rambus)(登録商標)RAM、等)、ROM(PROM、EEPROM、等)その他の種々の物理メモリ媒体を用いて実装することができる。コンピュータシステム100内のメモリはメモリ120に限定されない。むしろ、コンピュータシステム100は、種々の種類/位置のメモリを含む「メモリサブシステム」を有するものと言うことができる。例えば、コンピュータシステム100のメモリサブシステムは、1つの実施形態においては、メモリ120、プロセッササブシステム180内のキャッシュメモリ、及びI/Oデバイス150のストレージ(例えばハードドライブ、ストレージアレイ、等)を含んでいてよい。従って、「メモリサブシステム」の語句は、コンピュータシステム100内で可能な様々な種類のメモリ媒体を代表する。幾つかの実施形態においては、メモリサブシステムはプロセッササブシステム180によって実行可能なプログラム命令を記憶する。
I/Oインタフェース140は、種々の実施形態に従って他のデバイスと結合し且つ通信するように構成される様々な種類のインタフェースの任意のものであってよい。1つの実施形態では、I/Oインタフェース140は、フロントサイドバスから1つ以上のバックサイドバスへのブリッジチップである。I/Oインタフェース140は、1つ以上の対応するバス又は他のインタフェースを介して1つ以上のI/Oデバイス150に結合されていてよい。I/Oデバイスの例は、ストレージデバイス(ハードドライブ、光学ドライブ、リムーバブルフラッシュドライブ、ストレージアレイ、SAN、又はそれらに関連する制御器)、又は他のデバイス(例えばグラフィックス、ユーザインタフェースデバイス、等)を含む。1つの実施形態では、コンピュータシステム100は、ネットワークインタフェースデバイスを介してネットワークに結合される。
次に図2を参照すると、プロセッササブシステム180の1つの実施形態が示されている。図示されるように、プロセッササブシステム180は、プロセッサユニット220と、コプロセッサユニット260A及び260Bと、メモリ制御器280とを含み、これらは全て相互接続240(例えば点対点又は共有バス回路)を介して互いに結合されている。1つの実施形態では、プロセッサユニット220及びコプロセッサユニット260は同じダイ上に配置されていてよい。他の実施形態においては、プロセッサユニット220及びコプロセッサユニット260は別々のダイ上に配置されていてよい。コプロセッサユニット260B及びメモリ制御器280は、プロセッササブシステム180の全ての実施形態がこれらのブロックを含む必要がないことを示すために、破線で示されている(サブシステム180の他の構成要素が必須であると言っているわけではない)。例えば、プロセッサユニット220は単一のコプロセッサユニット(例えば260A)のみに結合されていてよく、代替的には、ユニット220は多重コプロセッサユニット(例えば260A及び260B)に結合されていてもよい。他の実施形態では、追加的なコプロセッサユニットが可能である。種々の実施形態において、プロセッサユニット220及びコプロセッサユニット260は共通のメモリ制御器280を共有していてよい。メモリ制御器280は、例えば、主システムメモリ(例えばメモリ120)へアクセスするように構成され得る。他の実施形態においては、各プロセッサユニット220及びコプロセッサユニット260は、それぞれのメモリ制御器に結合されていてよい。
1つの実施形態においては、プロセッサユニット220は、1つ以上の実行ユニットを含み得る汎用プロセッサユニット(例えば中央処理ユニット(CPU))である。あるいは、ユニット220はグラフィックスプロセッサのような専用プロセッサであってよい。1つの実施形態においては、プロセッサユニット220は、メモリ制御器280を用いてメモリ120からフェッチされた命令を実行するように構成される。ユニット220のアーキテクチャは種々の特徴を有していてよく、例えば、パイプライン化されたものであってよい。他の実施形態では、プロセッサユニット220は、多重スレッドを同時に実行するための多重スレッド化されたアーキテクチャを実装していてよい。プロセッサユニット220は、限定はしないが、特定用途命令の他、オペレーティングシステム命令を実行することができる。これらの命令は、単なる一例としては仮想メモリを含む任意の数の特徴の実装を可能にし得る。
図2に示されるように、プロセッサユニット220はコンパニオンプロセッサとして1つ以上のコプロセッサユニット260に結合されていてよく、ユニット220が命令をコプロセッサユニット260へ供給することを可能にしている。コンパニオンプロセッサユニット220からコプロセッサユニット260へ供給される命令は、共通の命令ストリーム内にあってよい(即ち、ユニット220は実行すべき命令をフェッチして、それらフェッチされた命令の特定の命令を実行のためにユニット260へ供給する)。プロセッサユニット220から単一又は複数のコプロセッサユニット260へ供給される特定の命令は、単一又は複数のコプロセッサユニット260の動作を制御するためにプロセッサユニット220内の機能ユニットによって生成される「制御」命令であってよい。プロセッサユニット220は、図3と共に以下に更に詳細に説明される。
コプロセッサユニット260A及び260Bは、プロセッサユニット220の作業を実行することを支援するために用いられてよい。プロセッサユニット220と同様に、コプロセッサユニット260は、いかなる特定の機能又はアーキテクチャにも限定されない。種々の実施形態において、コプロセッサユニット260A及び260Bは、汎用プロセッサ又は専用プロセッサ(例えばグラフィックスプロセッサユニット(GPU)、ビデオ復号化プロセッサ、暗号化プロセッサ、キューマネージャ(queue managers)、等)であってよい。1つの実施形態では、コプロセッサユニット260は、フィールドプログラマブルゲートアレイ(FPGA)として実装されてよい。幾つかの実施形態では、コプロセッサユニット260はパイプライン化されていてよい。コプロセッサユニット260は、幾つかの実施形態では、マルチスレッド化されたアーキテクチャを用いる。種々の実施形態において、コプロセッサユニット260は、ユニット220から受信された特定の命令を実行するために、マイクロコード命令を実行するように構成されていてよい。特定の実施形態においては、コプロセッサユニット260は、仮想メモリの使用によって支持されてよい。コプロセッサユニット260は、図4と共に以下に更に詳細に説明される。
相互接続240は、1つの実施形態においては、プロセッサユニット220をコプロセッサユニット260に結合する共有バス回路である。1つの実施形態では、相互接続240は、ハイパートランスポート(Hyper Transport)又はPCIエクスプレス(PCI-Express)のようなパケットベースのプロトコルを介してプロセッサユニット220がコプロセッサユニット260と通信することを可能にする「仮想トンネル(virtual tunnel)」を実装していてよい。幾つかの実施形態では、相互接続240はフロントサイドバスであってよい。1つの実施形態では、コプロセッサユニット260は、ノースブリッジ型(Northbridge-type)デバイスを介してプロセッサユニット220と結合されていてよい。
1つの実施形態では、メモリ制御器280は、プロセッサユニット220及び/又はコプロセッサユニット260がメモリ(例えばメモリ120)へアクセスするためのインタフェースを提供するように構成される。メモリ制御器280は、例えば、命令をフェッチし又はデータをロード及びストアするために用いられてよい。1つの実施形態では、プロセッサユニット220は、メモリ制御器280を用いて、プロセッサユニット220又はコプロセッサユニット260内での実行のための命令をフェッチすることができる。他の実施形態では、コプロセッサユニット260がメモリ制御器280を用いてそれ自身の命令又はデータをフェッチしてよい。
特定の実施形態においては、プロセッサユニット220及びコプロセッサユニット260は、共有メモリ(例えばメモリ120)に対するコヒーレンス(coherence)を達成するように構成され、共有メモリ内においては、プロセッサユニット220及び/又はコプロセッサユニット260は、それらのそれぞれのプロセッサ内にストアされているキャッシュされたエントリを変更する(例えば無効にし又は更新する)。1つの実施形態では、プロセッサユニット220及びコプロセッサユニット260は「スヌーピング(snooping)」プロトコルを実装しており、スヌーピングプロトコルにおいては、各プロセッサがメモリバス(例えば相互接続160)を監視して、キャッシュされたエントリを無効にし/更新するかどうかを決定する。代替的な実施形態においては、プロセッサユニット220及びコプロセッサユニット260は、キャッシュされたエントリがいつ無効にされ又は更新されるべきかを互いに表示する。幾つかの実施形態では、プロセッサユニット220及びコプロセッサユニット260は、仮想メモリのコヒーレントビュー(coherent view)を共有するように構成される。例えば、プロセッサユニット220及びコプロセッサユニット260は、プロセッサの1つ(例えばプロセッサユニット220)上で実行中のオペレーティングシステムによって作成される共通ページテーブルに対して個別のTLBを維持することができる。
次に図3を参照すると、プロセッサユニット220が示されている。プロセッサユニット220は、1つ以上のコプロセッサユニット260に結合されていてよいコンパニオンプロセッサの1つの実施形態である。図示されるように、プロセッサユニット220は、スケジューラユニット310と、固定小数点ユニット320A及び浮動小数点ユニット320Bと、ロードストアユニット(LSU)330と、コプロセッサインタフェースユニット350と、リタイヤメントユニット(retirement unit)360とを含む。図示される実施形態においては、スケジューラユニット310はプロセッサユニット220内の命令キャッシュ340に結合されているが、他の実施形態は命令キャッシュ340を含まないかもしれない。同様に、LSU330は図3に示されるデータキャッシュ345に結合されている。ユニット220の他の実施形態はキャッシュ345を含まないかもしれない。種々の実施形態において、プロセッサユニット220は1つ以上の機能ユニットを含む。尚、図3に示される機能ユニット320、330、及び350は例示的なものであって、従って種々の実施形態においてプロセッサユニット220内に含まれていないことがある。種々の実施形態において、プロセッサユニット220は、単一の機能ユニット320又は複数の機能ユニット320(図示されるような)を含んでいてよい。幾つかの実施形態では、プロセッサユニット220は複数のコプロセッサインタフェースユニット350を含んでいてよく、この場合、各コプロセッサインタフェースユニット350は1つ以上のコプロセッサユニット260に結合される。1つの実施形態では、コプロセッサインタフェースユニット350は、プロセッサユニット220に対して外部に配置されていてよい。
プロセッサユニット220は、複数のスレッド(例えば4スレッド)を実行するように構成されるマルチスレッド化されたプロセッサユニットであってよい。種々のスレッドの命令は、スケジューラユニット310を介して実行のためにユニット320、330、又は350へ発送される。以下に説明されるように、コプロセッサインタフェースユニット350は、それが受信する命令を実行のためにコプロセッサユニット260へ供給し、次いで実行結果のコプロセッサ開始の送信(coprocessor-initiated transmission)を受信するように構成される。利用可能な場合には、ユニット320、330、及び350は実行結果をリタイヤメントユニット360へ供給する。
スケジューラユニット310は、後続のブロック内での実行のために命令を準備するため、命令をフェッチしそして復号化する論理を含んでいてよい。1つの実施形態では、スケジューラユニット310は、命令キャッシュ340からの命令をフェッチする論理を含んでいてよい。スケジューラユニット310はまた、命令キャッシュミス(instruction cache misses)及び、仮想命令フェッチアドレスの物理アドレスへの翻訳(translation)を処理する論理を実装していてよい(例えば、スケジューラユニット310は、命令翻訳ルックアサイドバッファ(Instruction Translation Lookaside Buffer)(ITLB)又は、ページテーブルウォークを実行するハードウエアを含んでいてよい)。幾つかの実施形態では、スケジューラユニット310は、復号化された命令を命令内の情報に基いてユニット320、330、及び350へ経路付けてよい。例えば、スケジューラユニット310は、命令内の動作コード(オプコード(opcode))に基づいて命令をコプロセッサインタフェース350へ経路付けてよい。種々の実施形態において、スケジューラユニット310は種々のスケジューリング技術を実装していてよい。例えば1つの実施形態では、スケジューラユニット310は、命令を待ち行列に入れてよく(may queue)、そしてそれらを順序外実行(out-of-order execution)(OoOE)アルゴリズムを用いてスケジューリングしてよい。加えて幾つかの実施形態では、スケジューラユニット310は、ブランチの結末(branch outcome)を予測し且つ/又は目標アドレスをフェッチする論理を含んでいてよい。
固定小数点ユニット320A及び浮動小数点ユニット320Bは、プロセッサユニット220の1つの実施形態において存在し得る機能ユニットの単なる典型にすぎない。これらのユニットは、様々な種類の命令に対して実行し且つ結果を生成する論理を含んでいてよい。例えば、種々の命令が算術的な、論理的な、又はシフトの動作を実行することができる。種々の実施形態において、ユニット320は、そのような動作を実行するための1つ以上の算術論理ユニット(ALU)を含んでいてよい。
ロードストアユニット330は、ロード命令及びストア命令を実行するための倫理を含む。1つの実施形態では、ロードストアユニット330は、データキャッシュ345へデータをロードすること及びストアすることを処理する論理を含んでいてよい。特定の実施形態においては、ロードストアユニット330は、データキャッシュミス及び、仮想アドレスの物理アドレスへの翻訳を処理する論理を実装していてよい(例えば、ロードストアユニット330は、データ翻訳ルックアサイドバッファ(DTLB)又は、ページテーブルウォークを実行するハードウエアを含んでいてよい)。
コプロセッサインタフェースユニット350は、命令352を1つ以上のコプロセッサユニット260へ供給すると共に対応する実行結果354を受信する機能ユニットである。種々の実施形態において、命令352は、ユニット350によって受信される命令(例えばユニット310から)の他に、ユニット350によって生成される指令/命令を含んでいてよい。例えば、コプロセッサインタフェースユニット350は、スケジューラユニット310からの命令ストリームに付随する一連の命令352を受信することができ、そして一連の命令352をコプロセッサユニット260へ供給することができ、コプロセッサユニット260において一連の実行結果354が生成される。この例では、プロセッサユニット220の命令ストリームからの命令をコプロセッサユニット260が実行している。加えて、コプロセッサインタフェースユニット350は、プロセッサユニット220の命令ストリームの一部ではないコプロセッサユニット260への命令又は指令352を供給することができる。そのような命令/指令は、プロセッサユニット220に対するコプロセッサユニット260の動作及び/又は同期を制御するための他、任意の他の適切な目的のために用いられてよい。いずれにしても、一旦コプロセッサユニット260が一連の実行結果354を生成したならば、コプロセッサインタフェースユニット350が一連の実行結果354を受信する。1つの実施形態では、ユニット350は実行結果354をリタイヤメントユニット360へ供給する。コプロセッサインタフェースユニット350は、図5と共に以下に更に詳細に説明される。
1つの実施形態においては、リタイヤメントユニット360は、ユニット320、330、及び350から受信される実行結果をリタイヤさせるための論理を含んでいる。幾つかの実施形態では、リタイヤメントユニット360は、状態情報を記憶するために1つ以上のレジスタバンク(register banks)に結合されていてよく(又は1つ以上のレジスタバンクを物理的に含んでいてよく)、この場合、リタイヤメントユニット360は、実行結果が受信されるときにレジスタ内の状態情報を更新してよい。1つの実施形態では、この状態情報は、実行中のスレッドを識別するデータ(例えばスレッドID)又は実行中のスレッドの対応するプロセスを識別するデータ(例えばプロセスID)を含んでいてよい。他の実施形態では、状態情報は、1つ以上のコプロセッサユニット260上で実行中のスレッドの状態情報を含んでいてよい。種々の実施形態において、リタイヤメントユニット360は、一連の命令をそれらが順序外実行(OoOE)の後に受信されるときに待ち行列に入れそしてそれらをリタイヤメントの間に再順序付ける論理を含んでいてよい。他の実施形態においては、リタイヤメントユニット360は、種々の命令の実行の間にスローされた例外(exceptions thrown)(例えばページフォールト例外(page fault exception))を処理するためのトラップ論理(trap logic)を含んでいてよい。
次に図4を参照すると、コプロセッサユニット260が示されている。コプロセッサユニット260は、相互接続240を介してプロセッサユニット220と結合され得るコプロセッサユニットの1つの実施形態である。1つの実施形態では、相互接続240は、周辺デバイス又は特別の機能を実行する処理回路を制御する個別のバスであってよい。図示されるように、コプロセッサユニット260は、相互接続430を介して互いに結合されるコンパニオンプロセッサインタフェース420及び処理コア440を含む。1つの例示的な実施形態では、処理コア440は、機能ユニット442及びレジスタバンク444を含んでいてよい。他の実施形態では、処理コア440は、メモリ制御器280に結合されると共にキャッシュ446を含んでいてよい。コンパニオンプロセッサインタフェース420は、命令352を受信しそして実行結果354をプロセッサユニット220のコプロセッサインタフェースユニット350へ送信するように構成される。レジスタバンク444及びキャッシュ446並びにメモリ制御器280への接続は破線で示されており、コプロセッサユニット260が種々の様態で実装され得ることを表示している(例えば幾つかの実施形態では、所望に応じて種々のブロックが含まれあるいは除外されてよい)。尚、コプロセッサユニット260は単一の処理コア440及び単一の機能ユニット442を含むように図示されているが、コプロセッサユニット260は、種々の実施形態において、複数の処理コア440及び/又は複数の機能ユニット442を含んでいてよい。他の実施形態においては、コプロセッサユニット260は、追加的なコプロセッサユニットに付随していてよい。
コンパニオンプロセッサインタフェース420は、コプロセッサユニット260とプロセッサユニット220のコプロセッサインタフェースユニット350との間でのインタフェースである。1つの実施形態では、コンパニオンプロセッサインタフェース420は、受信した命令352を実行前に命令キュー内に記憶しそしてそれらを命令が次いで実行される処理コア440へ転送するように構成されていてよい。他の実施形態においては、コンパニオンプロセッサインタフェース420は、実行結果354を処理コア440による生成の後に他のキュー内へ記憶するように構成されていてよく、そして実行結果354をコプロセッサインタフェースユニット350へ送信してよい。1つの実施形態では、コンパニオンプロセッサインタフェース420は、コプロセッサインタフェースユニット350を介して実行結果354に対する要求を送信しているプロセッサユニット220に応答して、実行結果354をコプロセッサインタフェースユニット350へ送信してよい。代替的な実施形態においては、コンパニオンプロセッサインタフェース420は、実行結果が利用可能であることを条件として、即ち送信を開始するための明示的な命令をプロセッサユニット220から受信することなしに、実行結果354の送信を開始してよい。
処理コア440は、1つ以上の機能ユニット442を用いて命令352を実行し実行結果354を生成するように構成されている。命令352は、複雑さが変化することがあり、また種々の実行要求を有しているであろう。1つの実施形態では、処理コア440は、メモリ又はレジスタアクセスを必要としない命令352(例えば即時データ(immediate data)のみを含む命令)を実行してよい。他の実施形態では、処理コア440は、命令352を実行するときにレジスタバンク444にアクセスしてよい。幾つかの実施形態において、処理コア440は、メモリ制御器280を用いてオンボードキャッシュ又はメモリ120にアクセスする命令(例えばロード/ストア命令のようなアドレス情報を含む命令)を実行してよい。幾つかの実施形態では、処理コア440は、メモリ120へアクセスするときに仮想アドレスを物理アドレスへ翻訳してよい。
処理コア440は、種々のソースからの命令を実行することができる。1つの実施形態では、処理コア440は、プロセッサユニット220によってもたらされる命令352のみを実行してよい。他の実施形態においては、処理コア440は、プロセッサユニット220からの最初の一連の命令352を受信した後の追加的な命令をフェッチしてよい。種々の実施形態において、処理コア440は、実行前の命令352からマイクロコード命令を生成してよい。
上述したように、命令352は、1つの実施形態では、プロセッサユニット220の命令ストリームの一部である一連の命令を含んでいてよい。コプロセッサユニット260へ供給される命令は、例えば、それらがユニット260内で(例えば特定の機能ユニット442上で)実行可能であることを指定するコプロセッサオプコードを含んでいてよい。他の実施形態においては、命令352は、コプロセッサユニット260の実行を制御するユニット350によって生成される命令/指令(即ちプロセッサユニット220の命令ストリームに付随しない命令)であってよい。例えば1つの実施形態では、そのような指令は、プロセッサユニット220とコプロセッサユニット260の通信(例えばコンパニオンプロセッサインタフェース420の調整の側面)を制御するために実行可能であってよい。他の実施形態においては、これらの指令は、記憶されているデータ(例えばレジスタバンク444又はキャッシュ446内に)を変更すること(即ち更新し又は無効にすること)、メモリアクセスを管理すること(例えばTLB内の翻訳を更新し又は無効にすること)、実行中スレッドの状態情報(例えば拡張された保存指令(EXSAVE))を保存すること、等のような種々の動作を実行するように処理コア440に命令してよい。
実行結果354は、命令352を実行することの結果として生成される種々の情報の任意のものを含んでいてよい。1つの実施形態では、実行結果354は、生成された結果値を含んでいてよい(例えば一連の暗号化命令は一連の暗号化されたデータを生成してよい)。他の実施形態においては、実行結果354は、状態/完了通知情報(例えば処理コア440上で実行中の特定のスレッドの完了を表示する)を含んでいてよい。他の実施形態においては、実行結果354は、例外又はフォールト情報(例えばページフォールト表示)を含んでいてよい。幾つかの実施形態では、実行結果354は、コプロセッサインタフェースユニット350の動作を制御するための指令(例えばプロセッサユニット220及びコプロセッサユニット260の通信を制御する指令)を含んでいてよい。
コプロセッサユニット260の種々の実施形態は、図6A〜6Dと共に以下に更に詳細に説明される。
次に図5を参照すると、コプロセッサインタフェースユニット350が示されている。コプロセッサインタフェースユニット350は、プロセッサユニット220をコプロセッサユニット260に結合するためのコプロセッサインタフェースユニットの1つの実施形態である。図示されるように、コプロセッサインタフェースユニット350は、スケジューラインタフェースユニット510と、経路付けインタフェースユニット520と、リタイヤメントインタフェースユニット530と、コプロセッサ指令ユニット540と、レジスタバンク550とを含む。経路付けインタフェースユニット520は、図示される実施形態においては、経路付けテーブル524を含む。ユニット350の種々の実施形態において、レジスタバンク550及び/又は経路付けテーブル524は、それらのそれぞれの破線によって示されるように含まれていてよい(又は含まれていなくてよい)。
上述したように、コプロセッサインタフェースユニット350は、プロセッサユニット220の命令ストリームからの命令をコプロセッサユニット260へ供給するように構成される。1つの実施形態では、コプロセッサインタフェースユニット350は、スケジューラインタフェースユニット510を介して命令を受信し、そして経路付けインタフェースユニット520を介してコプロセッサユニット260へ命令352を送信する。一旦コプロセッサユニット260が命令を実行したら、経路付けインタフェースユニット520が実行結果354を受信し、次いでコプロセッサインタフェースユニット350は、リタイヤメントインタフェースユニット530を介してリタイヤメントユニット360へ実行結果を供給する。
経路付けインタフェースユニット520は、1つの実施形態では、バストラフィック(例えば命令/指令352及び実行結果354)を生成し且つ相互接続240を介して受信するインタフェースである。幾つかの実施形態では、経路付けインタフェースユニット520は、ハイパートランスポート(Hyper Transport)、PCIエクスプレス(PCI Express)、クイックパス(Quick Path)、等のようなパケットベースの通信プロトコルを用いる。特定の実施形態においては、経路付けインタフェースユニット520は、経路付け情報を経路付けテーブル524内に記憶してよく、経路付けテーブル524は、多重コプロセッサユニット260に対するソースアドレス情報及び宛先アドレス情報を記憶することができる。
コプロセッサ指令ユニット540は、1つの実施形態では、プロセッサユニット220の命令ストリームの一部ではない命令/指令を生成するように構成される。例えば、コプロセッサ指令ユニット540は、図4に関連して上述したようなコプロセッサユニット260の動作を制御する指令を生成してよい。幾つかの実施形態では、コプロセッサ指令ユニット540は、相互接続240及び/又はコンパニオンプロセッサインタフェース420の動作を制御する指令(例えばハイパートランスポート通信パラメータ等を調節する指令)を生成してよい。種々の実施形態において、コプロセッサ指令ユニット540は、外部表示、例えばスケジューラユニット310、リタイヤメントユニット360、等に応答して指令を生成してよい。他の実施形態においては、コプロセッサ指令ユニット540は、指令を生成するかどうかを決定するために、スケジューラインタフェースユニット510及び/又はリタイヤメントインタフェースユニット530に関連するトラフィックを解析することができる。
種々の実施形態において、コプロセッサインタフェースユニット350は、ユニット350の種々の動作に関連する情報を記憶するレジスタバンク550を含んでいる。例えばコプロセッサインタフェースユニット350は、対応するコプロセッサスレッドを有しているプロセッサユニット220上のスレッドに関連する情報を記憶してよい。幾つかの実施形態では、コプロセッサインタフェースユニット350は、実行中のコプロセッサスレッドに関連する情報、特定の一連の命令352に対する完了状態情報、等のような種々のコプロセッサユニット260に関連する情報を維持する。
種々の実施形態において、コプロセッサインタフェースユニット350は、特定のコプロセッサユニット260(例えばCPUIDツリー内の)の種々の能力/機能性に関する情報(例えばレジスタバンク550及び/又はメモリ120内の)を維持する。幾つかの実施形態では、コプロセッサインタフェースユニット350はまた、プロセッサユニット220の命令ストリームからの任意の命令が、無効の様態にある(in an invalid manner)コプロセッサユニット260を参照すること(例えば存在しないコプロセッサユニット260を参照すること、コプロセッサユニット260の利用可能でない特徴を参照すること、等)を試みる場合に、例外をスローする(throw an exception)ように構成されていてもよい。
次に図6A〜6Dを参照すると、コプロセッサユニット260の種々の実施形態を表す一連のブロック図が示されている。
図6Aは多重スレッド化された処理コアを実装しているコプロセッサユニット260の1つの実施形態を示している。図示されるように、コプロセッサユニット260は、相互接続430を介して結合されるコンパニオンプロセッサインタフェース420及び処理コア440を含む。1つの実施形態では、処理コア440は、機能ユニット610A、機能ユニット610B、及びレジスタバンク620を含む。幾つかの実施形態では、各機能ユニット610は、所与のスレッドに対する命令352を実行しそして対応する一連の実行結果354を生成するように構成される。特定の実施形態においては、レジスタバンク620は、特定のスレッドを示す情報(例えばスレッド識別、プロセス識別PID、コンテクスト識別CID、等)を記憶してよい。コプロセッサユニット260は多重機能ユニット610を伴う単一の処理コア440を有するように示されているが、コプロセッサユニット260は、他の実施形態では、複数の機能ユニット610を含む複数の処理コア440を含む。
上述したように、プロセッサユニット220上で実行中のスレッドは、コプロセッサユニット260上で実行中の特定のスレッドを呼び出し(invoke)且つ/又はそのスレッドと通信してよい。例えば1つの実施形態では、単一のコプロセッサスレッドのみが単一の対応するプロセッサスレッドとペアにされてよい。他の実施形態においては、多重コプロセッサスレッドが単一の対応するプロセッサスレッドとペアにされてよい。幾つかの実施形態において、単一のプロセッサスレッドは、多重機能ユニット610及び/又は多重コプロセッサユニット260上で実行中の対応する複数のコプロセッサスレッドとペアにされてよい。
種々の実施形態において、コプロセッサインタフェースユニット350は、対応するコプロセッサスレッドの実行を制御する命令/指令を供給する(例えばコプロセッサ指令ユニット540によって生成される命令/指令を介して)。例えばこれらの命令/指令は、コプロセッサユニット260上で実行中のスレッドをサスペンドし又はコプロセッサユニット260上で先行して実行中のスレッドの実行をレジュームする指示(directives)を含んでいてよい。種々の実施形態において、プロセッサユニット220上で実行中のオペレーティングシステムは、命令352を用いて新たなコプロセッサスレッドを初期化する。幾つかの実施形態では、命令352はコンテクストスイッチを実行するための指令を含んでいてよく、コンテクストスイッチにおいては、コプロセッサユニット260は、実行中のスレッドをサスペンドしそして他の非実行中スレッドに切り換える。そのような場合には、コプロセッサユニット260は、実行中のスレッドの状態を保存し且つ非実行中のスレッドの状態を復元するための命令を実行してよい(例えばEXSAVE命令を用いて)。特定の実施形態においては、コプロセッサユニット260は、実行中のスレッドの記憶されている状態をレジスタバンク620からメモリ120へ転送する。1つの実施形態では、コプロセッサユニット260は、メモリ120へ直接的にアクセスして状態情報を記憶しまた検索する(retrieve)ことができる。他の実施形態では、コプロセッサユニット260は、プロセッサユニット220を介して状態情報を記憶しまた検索してよい。スレッド切り換えのための方法は、図8と共に以下に更に詳細に説明される。
幾つかの実施形態では、コプロセッサユニット260は、実行結果354を通して、対応するプロセッサスレッドの実行を制御してよい。1つの実施形態では、実行結果354は、対応するプロセッサスレッドをレジュームし且つ/又はサスペンドするために用いられる完了状態情報を含んでいてよい(例えばプロセッサスレッドは対応する実行中コプロセッサスレッドの未決の完了(pending completion)をブロックしてよい)。他の実施形態においては、実行結果354は、プロセッサスレッドをレジュームし且つ/又はサスペンドするための明示的な指令(explicit commands)を含んでいてよい(例えばプロセッサユニット220上でコンテクストスイッチを実行する場合に)。
図6Bはマイクロコード命令を実行中のコプロセッサユニット260の1つの実施形態を示している。図示されるように、コプロセッサユニット260は、相互接続430を介して結合されるコンパニオンプロセッサインタフェース420及び処理コア440を含む。図示される実施形態では、処理コア440は、マイクロコードアセンブラ630及び機能ユニット610を含む。一般的に、マイクロコードアセンブラ630は、一連の命令(例えば命令352)を受信しそして機能ユニット610上で実行可能な対応する一連のマイクロコード命令を生成するように構成される。マイクロコードアセンブラ630は、それが種々の実施形態においてコプロセッサユニット260内に含まれていてよい(又は含まれていなくてよい)ことを示すために、破線で示されている。例えばマイクロコードアセンブラ630は、プロセッサユニット220の命令ストリームから生成されるマイクロコードを命令352が含むように、プロセッサユニット220内(例えばコプロセッサインタフェース350内)に配置されてよい。
図6Cは仮想メモリを実装しているコプロセッサユニット260の1つの実施形態を示している。図示されるように、コプロセッサユニット260は、相互接続430を介して結合されるコンパニオンプロセッサインタフェース420及び処理コア440を含む。図示される実施形態では、処理コア440は、フェッチユニット640と、機能ユニット610と、ロードストアユニット(LSU)650と、メモリ管理ユニット(MMU)660とを含む。追加的に、フェッチユニット640及びLSU650は、それぞれ、命令翻訳ルックアサイドバッファ(ITLB)642及びデータ翻訳ルックアサイドバッファ(DTLB)652を含む。種々の実施形態において、ブロックの他の組み合わせが実装されて(実装されなくて)よく、例えばフェッチユニット640及び/又はLSU650は省略されてよく、ITLB642及びDTLB652とは対照的に単一のTLBが用いられてよく、等々である。
種々の実施形態において、コプロセッサユニット260は、追加的な情報をフェッチすることによって又はロード/ストア命令を実行することによってメモリにアクセスするように構成されていてよい。1つの実施形態では、フェッチユニット640及びLSU650は、それぞれITLB642及びDTLB652内にキャッシュされた仮想メモリ翻訳を検索する。適切なTLB内で翻訳が見つからない場合に、メモリ管理ユニット(MMU)660は、幾つかの実施形態では、翻訳に対するページテーブルウォークを実行するように構成される。特定の実施形態においては、MMU660は、ページテーブルウォークを実行するのに先立ちその時点でのページテーブルのメモリアドレスを得るために、CR3レジスタ662を参照する。翻訳がページテーブル内に見つからない場合には、MMU660は、幾つかの実施形態では、プロセッサユニット220上で実行中のオペレーティングシステムに対してページフォールト例外をスロー(throws)する。メモリにアクセスすると共にページテーブルウォークを実行するための方法は、図9と共に以下に更に詳細に説明される。
上述したように、プロセッサユニット220及びコプロセッサユニット260は、種々の実施形態において、メモリのコヒーレントビューを維持するように構成される。従って、命令352及び実行結果354は、メモリコヒーレンスを管理する指令を含んでいてよい。1つの実施形態では、命令352は、ITLB642及びDTLB652内にキャッシュされた翻訳のようなキャッシュされたデータを変更する(例えば更新する/無効にする)ための指令を含んでいてよい。他の実施形態においては、命令352は、CR3レジスタ662を更新するための指令を含んでいてよい。同様に、種々の実施形態において、実行結果354は、プロセッサユニット220内(例えば命令キャッシュ340、データキャッシュ345、任意のTLB、等の範囲内)にキャッシュされたデータを更新し又は無効にするための指令を含んでいてよい。
図6Dはグラフィックスエンジンを実装しているコプロセッサユニット260の1つの実施形態を示している。図示されるように、コプロセッサユニット260は、相互接続430を介して結合されるコンパニオンプロセッサインタフェース420及び処理コア440を含む。追加的に、処理コア440は、グラフィカルフロントエンド670及びメモリ管理ユニット(MMU)660を含む。図示される実施形態においては、グラフィカルフロントエンド670はグラフィカルバックエンド692に結合され、グラフィカルバックエンド692は次いでディスプレイユニット694に結合される。破線で示されるように、MMU660は、メモリ120(例えばメモリ制御器280を介して)及び/又はローカルメモリ682にアクセスすることができる。処理コア440はグラフィカルフロントエンド670を含む一方で、1つの実施形態においては、処理コア440はグラフィカルバックエンド692を含んでいてよい。代替的には、グラフィカルバックエンド692は、どこか別の場所(例えばグラフィックスカード又はディスプレイユニット694内)にあってよい。
種々の実施形態において、コプロセッサユニット260は、プロセッサユニット220の命令ストリームからの専用のグラフィカル命令を実行する。一般的に、グラフィカルフロントエンド670は、画像描画(image rendering)に先立って生じる種々のグラフィカル動作、例えば多角形生成(polygon generation)、照明効果、又は当該分野において知られる他のグラフィカル動作を実行する。幾つかの実施形態では、グラフィカルフロントエンド670は、対応するグラフィカルバックエンド692に対するグラフィカル命令を生成する命令アセンブラ672を含んでいてよい。
次に図7を参照すると、方法700のフローチャートが示されている。方法700は、コプロセッサユニット260上で命令を実行するためにプロセッサユニット220によって実施される方法の1つの実施形態である。方法700はステップ710で開始し、プロセッサユニット220が一連の命令をフェッチし、復号化し、そしてスケジューリングする。このとき、スケジューラユニット310は、種々の実施形態において、命令を復号化してそれらをそれらのそれぞれの機能ユニット(例えばユニット320、330、及び350)へ経路付ける。1つの実施形態では、命令がコプロセッサ命令に関連する特定のオプコードを含む場合、スケジューラユニット310は、命令をコプロセッサインタフェースユニット350へ経路付ける。代替的な実施形態においては、メモリアドレスの特定の範囲、PID、等のような他の基準に基いて、命令が経路付けられてよい。ステップ720では、コプロセッサインタフェースユニット350が一連の命令352をコプロセッサユニット260へ送信する(例えばハイパートランスポートプロトコル又はPCIエクスプレスプロトコルを用い、コプロセッサユニット260に結合されるノースブリッジ型デバイスを介して)。ここで、コプロセッサユニット260は命令352を実行して対応する一連の実行結果354を生成する。コプロセッサインタフェースユニット350は、ステップ730において、コプロセッサユニットが開始した送信を介して実行結果354を受信し、そしてステップ740において、例えばリタイヤメントユニット360を介して対応する命令をリタイヤさせる。種々の実施形態において、リタイヤメントユニット360は、実行結果354の結果値を記憶しそして任意のスローされた例外を処理してよい。
次に図8を参照すると、方法800のフローチャートが示されている。方法800は、コプロセッサユニット260上でスレッドを切り換える方法の1つの実施形態である。例えばステップ810〜840は、プロセッサユニット220上で実行中のプロセッサスレッドが新たなスレッドを初期化し又はコプロセッサユニット260上にある既存のスレッドの実行をレジュームする場合に実行されてよい。プロセッサスレッドが新たな/既存のスレッドの未決の完了をサスペンドする場合には、プロセッサスレッドをレジュームするために、ステップ850〜860が実行されてよい。尚、方法800は、種々の実施形態において様々な様態で実施されてよい(例えば方法800は、ステップ850〜860を実行することを含んでいなくてよく、図示しない追加的なステップを含んでいてよい等々である)。
方法800はステップ810で開始し、ステップ810では、プロセッサユニット220上で実行中のスレッドが、対応するコプロセッサスレッドの使用を要求する。1つの実施形態では、実行中のプロセッサスレッドは、オペレーティングシステムに対して例外をスローして新たな又は既存のスレッドをスケジューリングすることによって、この要求を表示する。
ステップ820では、利用可能なコプロセッサ資源が存在するかどうかをプロセッサユニット220が決定する。1つの実施形態では、プロセッサユニット220は、コプロセッサインタフェースユニット350内(例えばレジスタバンク550内)の情報にアクセスすることによって、この利用可能性を決定する。他の実施形態では、プロセッサユニット220は、コプロセッサ指令を介してコプロセッサユニット260に問い合わせる(queries)。コプロセッサ資源が利用可能である場合には、方法はステップ840へ進む。そうでない場合には、方法はステップ830へ進む。
ステップ830では、プロセッサユニット220は、実行中のコプロセッサスレッドをサスペンドするようにコプロセッサユニット260に指示する。種々の実施形態において、コプロセッサユニット260は、例えば状態をメモリ120内に直接記憶することによって、又は状態をプロセッサユニット220へ記憶のために送信することによって、サスペンドされている最中のスレッドの状態情報を記憶してよい。
ステップ840では、プロセッサユニット220のオペレーティングシステムは、コプロセッサユニット260上での実行のために要求されたスレッドをスケジューリングする。要求されたスレッドが既に実行中であった場合には、コプロセッサユニット260は、そのスレッドに関連する任意の以前の状態情報をロードしてよい。
要求されたコプロセッサスレッドの実行が一旦完了すると、コプロセッサユニット260は、この完了を示す実行結果354を生成してよい。ステップ850においてプロセッサスレッドがブロックした場合(即ちコプロセッサスレッドの未決の完了をプロセッサスレッドがブロックした場合)には、プロセッサユニット220は、ステップ860において、そのプロセッサスレッドの実行をレジュームする。尚、幾つかの実施形態では、コプロセッサユニット260は、プロセッサスレッドをレジュームするようにオペレーティングシステムに直接的に指示してよい(例えば対応するコプロセッサスレッドの実行を完了する場合に例外をスローすることによって)。
次に図9を参照すると、方法900のフローチャートが示されている。方法900は、仮想アドレス空間を用いるコプロセッサユニット260によって実施される方法の1つの実施形態である。
方法900はステップ910で開始し、ステップ910では、仮想アドレスを物理アドレスへ翻訳するための要求をコプロセッサユニット260が作成する。例えばコプロセッサユニット260は、命令をフェッチし又はメモリにアクセスするときに仮想メモリ翻訳を実行してよい。
ステップ920では、コプロセッサTLB(例えばITLB642又はDTLB652)内で仮想アドレスがヒットする(即ち存在する)かどうかをコプロセッサユニット260が決定する。TLB内で仮想アドレスがヒットする場合には、ステップ930で翻訳を用いて対応する物理アドレスが決定される。一方、TLB内で仮想アドレスがミスする場合には、方法900はステップ940へ進む。
ステップ940では、コプロセッサユニット260がページテーブルウォークを実行して(例えばMMU660を用いて)対応する翻訳を探し出す。ステップ950においてページテーブル内で仮想アドレスがヒットする場合には、コプロセッサユニット260は、ステップ960において、TLB内の翻訳をロードすると共に対応する物理アドレスを決定してよい。一方、ステップ950においてページテーブル内で仮想アドレスがミスする場合には、方法900はステップ970へ進む。
ステップ970では、コプロセッサユニット260がプロセッサユニット220へページフォールトの信号を送る。1つの実施形態では、コプロセッサユニット260は、プロセッサユニット220上で実行中のオペレーティングシステムによって使い易い(serviceable)ページフォールト例外を含む実行結果354を生成する。幾つかの実施形態では、コプロセッサインタフェースユニット350は、オペレーティングシステムがいつページフォールトを使用可能にした(has serviced)かをコプロセッサユニット260へ通知してよい(例えばコプロセッサ指令ユニット540によって生成される指令を介して)。
次に図10を参照すると、方法1000のフローチャートが示されている。方法1000は、第1のプロセッサ機能ユニット(例えばコプロセッサインタフェースユニット350)によって実施される方法の1つの実施形態である。ステップ1010では、第1のプロセッサ機能ユニットは、スケジューラユニット310からの第1の命令ストリーム内の第1の一連の命令(例えば命令352)を受信する。ステップ1020では、第1のプロセッサ機能ユニットは、第1の一連の命令をコプロセッサユニット(例えばユニット260)へ供給する。次いでコプロセッサユニット260は、命令352を実行して対応する一連の実行結果354を生成してよい。ステップ1030では、第1のプロセッサ機能ユニットは、第1の一連の命令に対応する第1の一連の実行結果(例えば実行結果354)を、送信を開始したコプロセッサユニット260から受信する。
次に図11を参照すると、方法1100のフローチャートが示されている。方法1100は、コプロセッサユニット260によって実施される方法の1つの実施形態である。ステップ1110では、コプロセッサユニット260は、コンパニオンプロセッサインタフェースユニット(例えばコンパニオンプロセッサインタフェース420)で、コンパニオンプロセッサユニット(例えばプロセッサユニット220)内のコプロセッサインタフェースユニット(例えばコプロセッサインタフェースユニット350)からの命令352を受信する。ステップ1120では、コプロセッサユニット260は、受信した命令352を処理コア440上で実行して第1の一連の実行結果354を生成する。ステップ1130では、コプロセッサユニット260は、コンパニオンプロセッサインタフェース(例えばコンパニオンプロセッサインタフェース420)を介してのコンパニオンプロセッサユニット(例えばプロセッサユニット220)への第1の一連の実行結果354の伝達を開始する。
次に図12を参照すると、コンピュータ可読媒体1210が示されている。コンピュータ可読媒体1210は、プロセッサユニット220及びコプロセッサユニット260を含むコンピュータシステム100によって実行可能な命令を記憶している製品の1つの実施形態である。図示されるように、コンピュータ可読媒体1210は、プロセッサユニット220内の1つ以上の機能ユニットによって実行可能な一連のプロセッサ命令1221と、コプロセッサユニット260によって実行される一連のコプロセッサ命令1222とを含む。図示される実施形態においては、セット1221内の各プロセッサ命令1231はプロセッサオプコードビット1241を含み、そしてセット1222内のコプロセッサ命令1232の各々はコプロセッサオプコードビット1242を含む。種々の実施形態において、命令1231及び1232はアドレスビット1244及び/又は即時データ1246を含んでいてよい。(言うまでもなく、図示されている以外の命令1231及び1232の配列が可能である。例えば、全ての命令が即時データ又はアドレスビットを必ずしも含む必要はない。
スケジューラユニット310は、種々の基準を用いて命令をスケジューリング/経路付けしてよい。1つの実施形態では、スケジューラ310は、オプコードビットに基き命令を経路付ける(例えばプロセッサ命令1231はプロセッサオプコードビット1241を含みまたコプロセッサ命令1232はコプロセッサオプコードビット1242を含む)。他の実施形態においては、スケジューラユニット310は、アドレスビットに基き命令を経路付ける(例えば特定のアドレスがプロセッサ命令に付随している一方で他のものがコプロセッサ命令に付随している)。他の実施形態では、スケジューラ310は、プログラム1220内の命令の順序等のような他の基準に基いて命令を実行のためにスケジューリングする。
コンピュータ可読媒体1210は、実行の間に用いられるプログラム命令及び/又はデータを記憶する様々な媒体の任意のものを含んでいてよい。1つの実施形態では、コンピュータ可読媒体1210は、コンピュータシステム100のメモリサブシステムの種々の部分を含み得る有形的コンピュータ可読メモリ媒体のような製品であってよい。他の実施形態においては、有形的コンピュータ可読媒体1210は、磁気媒体(例えばディスク)又は光学的媒体(例えばCD、DVD、及び関連する技術、等)のような記憶媒体又はメモリ媒体を含んでいてよい。有形的コンピュータ可読媒体1210は、揮発性メモリ又は不揮発性メモリのいずれであってもよい。例えば、有形的コンピュータ可読媒体1210は、SDRAM、DDR_SDRAM、RDRAM、SRAM、フラッシュメモリ、及び様々な種類のROM、等であってよい(限定はしない)。例えば図1は、有形的コンピュータ記憶媒体(例えばメモリ120)を含んでおり、有形的コンピュータ記憶媒体は、プロセッサユニット220又はコプロセッサユニット260で実行可能なプログラム命令をそれぞれ記憶するために使用可能である。
他の実施形態においては、コンピュータ可読媒体1210は、有線、ワイヤレス又はその両方であるかにかかわらず通信媒体、リンク、及び/又はシステム(例えばケーブル、ネットワーク、等)を介して伝達される電気的、電磁気的、又は光学的な信号のような信号上での命令及び/又はデータを記憶/符号化し得る非有形的媒体である。そのような信号は、前述の説明に従って実施又は実装される命令及び/又はデータを搬送することができる。例えばコンピュータシステム100上で実行可能な命令は、様々な種類のコンピュータネットワークを介して伝達されてよい。
特定の実施形態が上述のように説明されてきたが、特定の特徴に関して単一の実施形態のみが説明されているとしても、上述の実施形態は本開示の範囲を限定することを意図したものではない。開示において提供される特徴の例は、特に記述がない限り制限的であるよりもむしろ例示的であることが意図されている。以上の説明は、この開示の利益を享受する当業者にとって明らかであるような変更、修正、及び均等なものに及ぶことが意図されている。
本開示の範囲は、ここに対処される課題のいずれか又は全部を軽減するか否かにかかわらず、ここに開示される任意の特徴若しくは特徴の組み合わせ(明示的であろうとなかろうと)又はそれらの任意の一般化を含む。従って、そのような特徴の任意の組み合わせに対して、この出願(又はそれに対して優先権を主張する出願)の手続の間に新たな請求項が作成されるかもしれない。特に、添付の特許請求の範囲に関連して、従属請求項からの特徴は独立請求項の特徴と組み合わされるかもしれず、また、それぞれの独立請求項からの特徴は、単に添付の特許請求の範囲に列挙されている特定の組み合わせだけでなく任意の適切な様態で組み合わされるかもしれない。

Claims (20)

  1. 第1の命令ストリーム内の第1の一連の命令をスケジューラユニットから受信し、前記第1の一連の命令をコプロセッサユニットへ供給し、前記第1の一連の命令に対応する第1の一連の実行結果を前記コプロセッサユニットから受信するように構成される第1のプロセッサ機能ユニットを備えた装置であって、
    前記第1の一連の実行結果の送信が前記コプロセッサユニットによって開始される装置。
  2. 前記第1のプロセッサ機能ユニット及び前記スケジューラユニットを含むプロセッサユニットと、
    前記コプロセッサユニットと、を更に備えた請求項1の装置。
  3. 前記第1の命令ストリーム内の第2の一連の命令を前記スケジューラユニットから受信するように構成される第2のプロセッサ機能ユニットを更に備え、
    前記第2のプロセッサ機能ユニットは1つ以上の実行動作を実行して前記第2の一連の命令に対応する第2の一連の命令結果を生成するように更に構成されている請求項1の装置。
  4. 前記装置は前記プロセッサユニット及び前記コプロセッサユニットを含むコンピュータシステムである請求項2の装置。
  5. 前記第1のプロセッサ機能ユニットを前記コプロセッサユニットに結合する共有バス回路であってパケットベースのプロトコルを実装するように構成される共有バス回路と、
    前記共有バス回路に結合されるメモリアクセスデバイスと、を更に備えた請求項2の装置。
  6. 前記パケットベースのプロトコルはハイパートランスポートプロトコル、PCIエクスプレスプロトコルのいずれかである請求項5の装置。
  7. 前記コプロセッサユニットを含む複数のコプロセッサユニットを更に備え、
    前記第1のプロセッサ機能ユニットは、前記複数のコプロセッサの種々のコプロセッサに複数の一連の命令を供給し、前記複数のコプロセッサの種々のコプロセッサから対応する複数の一連の実行結果を受信するように構成され、
    前記第1のプロセッサ機能ユニットは、経路付け情報を維持すると共に前記複数の一連の命令を前記経路付け情報に基いて前記複数のコプロセッサの種々のコプロセッサへ経路付けるように更に構成されている請求項1の装置。
  8. 前記第1のプロセッサ機能ユニットは前記コプロセッサユニット内に配置される翻訳ルックアサイドバッファ(TLB)内のエントリを変更するように構成されている請求項1の装置。
  9. 前記第1のプロセッサ機能ユニットは、
    前記コプロセッサユニットからのページフォールトの表示を受信し、
    前記ページフォールトを前記装置のオペレーティングシステムに通知し、
    前記オペレーティングシステムが前記ページフォールトを使用可能にしたことを前記コプロセッサユニットに示すように更に構成されている請求項1の装置。
  10. 前記第1のプロセッサ機能ユニット及び前記スケジューラユニットを含むマルチスレッド化されたプロセッサを更に備え、
    前記コプロセッサユニットは前記プロセッサユニット上で実行中の対応するスレッドを有するスレッドを実行するように構成されている請求項1の装置。
  11. 前記第1のプロセッサ機能ユニットは前記コプロセッサユニット上で実行中のスレッドをレジューム及びサスペンドするように構成されている請求項1の装置。
  12. 前記装置は前記第1のプロセッサ機能ユニット及びリタイヤメントユニットを含むプロセッサユニットを備えたコンピュータシステムであり、
    前記リタイヤメントユニットは前記第1の一連の実行結果を用いて前記第1の一連の命令をリタイヤさせるように構成されている請求項1の装置。
  13. 前記第1のプロセッサ機能ユニットは前記コプロセッサユニット上で実行中のスレッドの実行状態を前記コプロセッサユニットで保存するように構成されている請求項1の装置。
  14. コンパニオンプロセッサユニット内のコプロセッサインタフェースユニットから、前記コンパニオンプロセッサユニットによって共有される命令ストリームからの命令を受信するように構成されるコンパニオンプロセッサインタフェースユニットと、
    前記受信した命令を実行して第1の一連の実行結果を生成すると共に前記コンパニオンプロセッサインタフェースユニットを介しての前記コンパニオンプロセッサユニットへの前記第1の一連の実行結果の伝達を開始するように構成される処理コアとを備えたコプロセッサユニット。
  15. 前記処理コアは翻訳ルックアサイドバッファ(TLB)を含み、前記処理コアは、
    前記コンパニオンプロセッサユニット上で実行中のオペレーティングシステムへ前記コンパニオンプロセッサインタフェースユニットを介してページフォールトの表示を送信し、
    前記オペレーティングシステムが前記ページフォールトを使用可能にしたことの表示を前記コンパニオンプロセッサインタフェースユニットを介して受信するように構成されている請求項14のコプロセッサユニット。
  16. 前記コプロセッサユニットはキャッシュを含み、前記コンパニオンプロセッサユニットは前記コプロセッサユニットの前記キャッシュ内のエントリを変更するように更に構成されている請求項14のコプロセッサユニット。
  17. 前記処理コアはページテーブルウォークを実行するように構成されている請求項14のコプロセッサユニット。
  18. 前記コプロセッサユニットは前記コンパニオンプロセッサユニット上で実行中のスレッドをサスペンド及びレジュームするように構成されている請求項14のコプロセッサユニット。
  19. 前記コプロセッサユニットは前記受信した命令を実施するためのマイクロコード命令を生成するように構成されている請求項14のコプロセッサユニット。
  20. コンパニオンプロセッサユニット及びコプロセッサユニットを含むコンピュータシステムによって実行可能なプログラム命令を記憶している有形的コンピュータ可読メモリ媒体であって、前記記憶されているプログラム命令は、
    各々が第1の一連のオプコードの1つを有し、前記コンパニオンプロセッサユニット内の1つ以上の機能ユニットによって実行可能な第1の一連のプログラム命令と、
    各々が第2の一連のオプコードの1つを有し、前記コプロセッサユニット内で実行可能な第2の一連のプログラム命令とを備えており、
    前記コンパニオンプロセッサユニットは、前記第2の一連のプログラム命令内のプログラム命令を受信することに応答して、前記コプロセッサユニットに結合されている前記コンパニオンプロセッサユニットのコプロセッサインタフェースユニットへそれらの命令を供給するように構成され、
    前記コプロセッサインタフェースユニットは、前記第2の一連のプログラム命令内のプログラム命令を伝達すると共に前記伝達された命令の実行結果のコプロセッサユニット開始の送信を次いで受信するように構成されている有形的コンピュータ可読メモリ媒体。
JP2011542254A 2008-12-17 2009-12-10 共有された命令ストリームを伴うコプロセッサユニット Active JP5676470B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/337,159 US7930519B2 (en) 2008-12-17 2008-12-17 Processor with coprocessor interfacing functional unit for forwarding result from coprocessor to retirement unit
US12/337,159 2008-12-17
PCT/US2009/067409 WO2010077751A2 (en) 2008-12-17 2009-12-10 Coprocessor unit with shared instruction stream

Publications (3)

Publication Number Publication Date
JP2012512490A true JP2012512490A (ja) 2012-05-31
JP2012512490A5 JP2012512490A5 (ja) 2013-01-17
JP5676470B2 JP5676470B2 (ja) 2015-02-25

Family

ID=41820594

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011542254A Active JP5676470B2 (ja) 2008-12-17 2009-12-10 共有された命令ストリームを伴うコプロセッサユニット

Country Status (6)

Country Link
US (1) US7930519B2 (ja)
EP (1) EP2374060B1 (ja)
JP (1) JP5676470B2 (ja)
KR (1) KR101507096B1 (ja)
CN (1) CN102282540B (ja)
WO (1) WO2010077751A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017224342A (ja) * 2012-09-27 2017-12-21 インテル・コーポレーション プロセッサ及び装置

Families Citing this family (43)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7391865B2 (en) 1999-09-20 2008-06-24 Security First Corporation Secure data parser method and system
AU2005299317A1 (en) 2004-10-25 2006-05-04 Security First Corp. Secure data parser method and system
US8538015B2 (en) * 2007-03-28 2013-09-17 Intel Corporation Flexible architecture and instruction for advanced encryption standard (AES)
JP4868012B2 (ja) * 2009-03-09 2012-02-01 日本電気株式会社 コンピュータシステム、コンピュータシステムの制御方法、及びプログラム
CN106230872A (zh) 2009-11-25 2016-12-14 安全第公司 对移动中数据进行保护的系统和方法
JP4809497B2 (ja) * 2010-02-25 2011-11-09 ファナック株式会社 複数の独立したシーケンスプログラムを並列実行するプログラマブルコントローラ
WO2011123699A2 (en) * 2010-03-31 2011-10-06 Orsini Rick L Systems and methods for securing data in motion
CA2800809A1 (en) 2010-05-28 2011-12-01 Lawrence A. Laurich Accelerator system for use with secure data storage
US9304774B2 (en) 2011-02-04 2016-04-05 Qualcomm Incorporated Processor with a coprocessor having early access to not-yet issued instructions
US8683175B2 (en) * 2011-03-15 2014-03-25 International Business Machines Corporation Seamless interface for multi-threaded core accelerators
US20120236010A1 (en) * 2011-03-15 2012-09-20 Boris Ginzburg Page Fault Handling Mechanism
US9405550B2 (en) 2011-03-31 2016-08-02 International Business Machines Corporation Methods for the transmission of accelerator commands and corresponding command structure to remote hardware accelerator engines over an interconnect link
US9633407B2 (en) * 2011-07-29 2017-04-25 Intel Corporation CPU/GPU synchronization mechanism
SE537552C2 (sv) * 2011-12-21 2015-06-09 Mediatek Sweden Ab Digital signalprocessor
WO2013101216A1 (en) * 2011-12-30 2013-07-04 Intel Corporation Cache coprocessing unit
US9075623B2 (en) * 2012-01-18 2015-07-07 International Business Machines Corporation External auxiliary execution unit interface for format conversion of instruction from issue unit to off-chip auxiliary execution unit
EP2831693B1 (en) * 2012-03-30 2018-06-13 Intel Corporation Apparatus and method for accelerating operations in a processor which uses shared virtual memory
US9141556B2 (en) 2012-08-18 2015-09-22 Qualcomm Technologies, Inc. System translation look-aside buffer with request-based allocation and prefetching
US9594594B2 (en) * 2012-10-18 2017-03-14 Advanced Micro Devices, Inc. Media hardware resource allocation
TWI477121B (zh) * 2012-12-28 2015-03-11 Askey Computer Corp 多級模組擴充系統及多級模組通訊方法
US9417873B2 (en) 2012-12-28 2016-08-16 Intel Corporation Apparatus and method for a hybrid latency-throughput processor
US20140189333A1 (en) * 2012-12-28 2014-07-03 Oren Ben-Kiki Apparatus and method for task-switchable synchronous hardware accelerators
US10140129B2 (en) 2012-12-28 2018-11-27 Intel Corporation Processing core having shared front end unit
US9361116B2 (en) 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US10346195B2 (en) 2012-12-29 2019-07-09 Intel Corporation Apparatus and method for invocation of a multi threaded accelerator
US20140201408A1 (en) * 2013-01-17 2014-07-17 Xockets IP, LLC Offload processor modules for connection to system memory, and corresponding methods and systems
US10203958B2 (en) * 2013-07-15 2019-02-12 Texas Instruments Incorporated Streaming engine with stream metadata saving for context switching
USRE49652E1 (en) 2013-12-16 2023-09-12 Qualcomm Incorporated Power saving techniques in computing devices
US9535490B2 (en) * 2013-12-16 2017-01-03 Qualcomm Incorporated Power saving techniques in computing devices
CN104301253A (zh) * 2014-10-21 2015-01-21 合肥星服信息科技有限责任公司 线程池和共享池组合优化大负荷通讯服务器
US11449452B2 (en) * 2015-05-21 2022-09-20 Goldman Sachs & Co. LLC General-purpose parallel computing architecture
CN106325819B (zh) * 2015-06-17 2019-08-02 华为技术有限公司 计算机指令处理方法、协处理器和系统
US9727944B2 (en) * 2015-06-22 2017-08-08 Apple Inc. GPU instruction storage
GB2544994A (en) * 2015-12-02 2017-06-07 Swarm64 As Data processing
US10037229B2 (en) * 2016-05-11 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions
CN109314103B (zh) 2016-06-30 2023-08-15 英特尔公司 用于远程现场可编程门阵列处理的方法和装置
US20180150125A1 (en) * 2016-11-28 2018-05-31 Qualcomm Incorporated Wifi memory power minimization
KR102235803B1 (ko) * 2017-03-31 2021-04-06 삼성전자주식회사 반도체 장치
US10437739B2 (en) * 2017-09-26 2019-10-08 Intel Corporation Low-latency accelerator
CN108196849A (zh) * 2018-01-12 2018-06-22 江苏华存电子科技有限公司 一种低延迟指令调度器
CN110618833B (zh) * 2018-06-19 2022-01-11 深圳大心电子科技有限公司 指令处理方法及存储控制器
US10776125B2 (en) 2018-12-05 2020-09-15 Apple Inc. Coprocessor memory ordering table
US10909054B2 (en) * 2019-04-26 2021-02-02 Samsung Electronics Co., Ltd. Method for status monitoring of acceleration kernels in a storage device and storage device employing the same

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003058368A (ja) * 2001-07-30 2003-02-28 Arm Ltd データ処理装置内でのコプロセッサ命令の取り扱い
US6754804B1 (en) * 2000-12-29 2004-06-22 Mips Technologies, Inc. Coprocessor interface transferring multiple instructions simultaneously along with issue path designation and/or issue order designation for the instructions
US20080059771A1 (en) * 2006-09-06 2008-03-06 Mips Technologies, Inc. Out-of-order processor having an in-order coprocessor, and applications thereof
JP2008538620A (ja) * 2005-01-25 2008-10-30 ルーシッド インフォメイション テクノロジー リミテッド モノリシック構成のシリコン・チップ上に多数のグラフィックス・コアを用いるグラフィック処理及び表示システム
US20080301408A1 (en) * 2007-05-31 2008-12-04 Uwe Kranich System comprising a plurality of processors and method of operating the same

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR920004414B1 (ko) * 1990-06-21 1992-06-04 삼성전자 주식회사 프로세서와 코프로세서의 프로세서간 통신방식
JP2987308B2 (ja) * 1995-04-28 1999-12-06 松下電器産業株式会社 情報処理装置
US5764939A (en) 1995-10-06 1998-06-09 Lsi Logic Corporation RISC processor having coprocessor for executing circular mask instruction
EP1291765B1 (en) * 1996-08-27 2009-12-30 Panasonic Corporation Multithreaded processor for processing multiple instruction streams independently of each other by flexibly controlling throughput in each instruction stream
JP3189727B2 (ja) * 1997-04-15 2001-07-16 日本電気株式会社 コプロセッサ内蔵パケット型メモリlsi、それを用いたメモリシステム及びそれらの制御方法
US5923893A (en) 1997-09-05 1999-07-13 Motorola, Inc. Method and apparatus for interfacing a processor to a coprocessor
US6557065B1 (en) 1999-12-20 2003-04-29 Intel Corporation CPU expandability bus
EP1139222A1 (en) * 2000-03-31 2001-10-04 Texas Instruments Incorporated Prefetch for TLB cache
US20020010848A1 (en) 2000-05-29 2002-01-24 Shoichi Kamano Data processing system
US7237090B1 (en) 2000-12-29 2007-06-26 Mips Technologies, Inc. Configurable out-of-order data transfer in a coprocessor interface
US6684305B1 (en) * 2001-04-24 2004-01-27 Advanced Micro Devices, Inc. Multiprocessor system implementing virtual memory using a shared memory, and a page replacement method for maintaining paged memory coherence
US7260424B2 (en) 2002-05-24 2007-08-21 Schmidt Dominik J Dynamically configured antenna for multiple frequencies and bandwidths
US20030225816A1 (en) * 2002-06-03 2003-12-04 Morrow Michael W. Architecture to support multiple concurrent threads of execution on an arm-compatible processor
US8090928B2 (en) 2002-06-28 2012-01-03 Intellectual Ventures I Llc Methods and apparatus for processing scalar and vector instructions
US7421694B2 (en) * 2003-02-18 2008-09-02 Microsoft Corporation Systems and methods for enhancing performance of a coprocessor
KR101130361B1 (ko) * 2003-02-18 2012-09-18 마이크로소프트 코포레이션 코프로세서 내의 연산을 스트림라인하는 방법
US7079147B2 (en) * 2003-05-14 2006-07-18 Lsi Logic Corporation System and method for cooperative operation of a processor and coprocessor
US8156307B2 (en) * 2007-08-20 2012-04-10 Convey Computer Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6754804B1 (en) * 2000-12-29 2004-06-22 Mips Technologies, Inc. Coprocessor interface transferring multiple instructions simultaneously along with issue path designation and/or issue order designation for the instructions
JP2003058368A (ja) * 2001-07-30 2003-02-28 Arm Ltd データ処理装置内でのコプロセッサ命令の取り扱い
JP2008538620A (ja) * 2005-01-25 2008-10-30 ルーシッド インフォメイション テクノロジー リミテッド モノリシック構成のシリコン・チップ上に多数のグラフィックス・コアを用いるグラフィック処理及び表示システム
US20080059771A1 (en) * 2006-09-06 2008-03-06 Mips Technologies, Inc. Out-of-order processor having an in-order coprocessor, and applications thereof
US20080301408A1 (en) * 2007-05-31 2008-12-04 Uwe Kranich System comprising a plurality of processors and method of operating the same

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2017224342A (ja) * 2012-09-27 2017-12-21 インテル・コーポレーション プロセッサ及び装置
US10901748B2 (en) 2012-09-27 2021-01-26 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US10963263B2 (en) 2012-09-27 2021-03-30 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US11494194B2 (en) 2012-09-27 2022-11-08 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions

Also Published As

Publication number Publication date
JP5676470B2 (ja) 2015-02-25
US7930519B2 (en) 2011-04-19
KR101507096B1 (ko) 2015-03-30
CN102282540A (zh) 2011-12-14
WO2010077751A3 (en) 2011-01-27
KR20110106368A (ko) 2011-09-28
CN102282540B (zh) 2015-07-01
WO2010077751A2 (en) 2010-07-08
US20100153686A1 (en) 2010-06-17
EP2374060B1 (en) 2018-08-22
EP2374060A2 (en) 2011-10-12

Similar Documents

Publication Publication Date Title
JP5676470B2 (ja) 共有された命令ストリームを伴うコプロセッサユニット
JP6708335B2 (ja) ユーザレベルの分岐及び結合を行うプロセッサ、方法、システム、及び命令
JP6507435B2 (ja) 命令エミュレーションプロセッサ、方法、およびシステム
US7752423B2 (en) Avoiding execution of instructions in a second processor by committing results obtained from speculative execution of the instructions in a first processor
EP2831693B1 (en) Apparatus and method for accelerating operations in a processor which uses shared virtual memory
US8479217B2 (en) Apparatus, system, and method for persistent user-level thread
KR102187912B1 (ko) 인터럽트들의 세트들을 구성하는 장치 및 방법
EP3716056A1 (en) Apparatus and method for program order queue (poq) to manage data dependencies in processor having multiple instruction queues
US8615644B2 (en) Processor with hardware thread control logic indicating disable status when instructions accessing shared resources are completed for safe shared resource condition
US9047079B2 (en) Indicating disabled thread to other threads when contending instructions complete execution to ensure safe shared resource condition
US10437638B2 (en) Method and apparatus for dynamically balancing task processing while maintaining task order
US11188341B2 (en) System, apparatus and method for symbolic store address generation for data-parallel processor
US9424190B2 (en) Data processing system operable in single and multi-thread modes and having multiple caches and method of operation
WO2014051818A1 (en) Enabling virtualization of a processor resource
US20170286301A1 (en) Method, system, and apparatus for a coherency task list to minimize cache snooping between cpu and fpga
US11941409B2 (en) Methods, systems, and apparatuses for a multiprocessor boot flow for a faster boot process
US20190205061A1 (en) Processor, method, and system for reducing latency in accessing remote registers
US9563432B2 (en) Dynamic configuration of processing pipeline based on determined type of fetched instruction
EP3547118B1 (en) Apparatus and method for processing efficient multicast operation
US20240020241A1 (en) Apparatus and method for address pre-translation to enhance direct memory access by hardware subsystems
JP2011081564A (ja) 制御装置、記憶装置、演算処理装置および制御方法
US20230205692A1 (en) Method and apparatus for leveraging simultaneous multithreading for bulk compute operations
US20240004808A1 (en) Optimized prioritization of memory accesses
Gerofi et al. Toward Operating System Assisted Hierarchical Memory Management for Heterogeneous Architectures

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121121

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20121121

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20131204

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20140304

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20140311

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20140521

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140919

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20140929

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: 20141202

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20141225

R150 Certificate of patent or registration of utility model

Ref document number: 5676470

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

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250