JP5180285B2 - プロセッサにおいて実行ステージに先立って命令を実行するためのシステムおよび方法 - Google Patents

プロセッサにおいて実行ステージに先立って命令を実行するためのシステムおよび方法 Download PDF

Info

Publication number
JP5180285B2
JP5180285B2 JP2010501186A JP2010501186A JP5180285B2 JP 5180285 B2 JP5180285 B2 JP 5180285B2 JP 2010501186 A JP2010501186 A JP 2010501186A JP 2010501186 A JP2010501186 A JP 2010501186A JP 5180285 B2 JP5180285 B2 JP 5180285B2
Authority
JP
Japan
Prior art keywords
instruction
stage
execution
pipeline
processor
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.)
Expired - Fee Related
Application number
JP2010501186A
Other languages
English (en)
Other versions
JP2010522940A (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.)
Qualcomm Inc
Original Assignee
Qualcomm 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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of JP2010522940A publication Critical patent/JP2010522940A/ja
Application granted granted Critical
Publication of JP5180285B2 publication Critical patent/JP5180285B2/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/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/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3856Reordering of instructions, e.g. using queues or age tags
    • 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/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/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

Landscapes

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

Description

本発明は、一般にコンピュータシステムに関し、特にプロセッサにおいて実行ステージに先立って命令を実行するための方法およびシステムに関する。
プロセッサ・パイプラインは多くのステージから構成さており、各ステージは命令の実行および処理に関連する機能を行なう。各ステージはパイプステージまたはパイプセグメントと称される。これらステージはパイプラインを形成するために相互に接続される。命令はパイプラインの一端に入り、他端で終了する。それら命令は、パイプラインステージそれぞれを通してストリームに連続して流れる。これらステージは、いくつかのステージがいくつかの命令を同時に処理することができるように配置される。異なるパイプラインステージで同時に複数の命令を処理することは、プロセッサが一度に1つの命令のみを処理する場合よりも命令を速く処理することを可能にし、これによりプロセッサの実行速度を改善する。
命令の処理は最初のパイプラインステージの期間中に命令をフェッチすることから始まる。その後、その命令はプロセッサ内の後続するステージに受け継がれ、それらステージによって処理される。命令が各ステージにおいて処理されるにつれ、様々な機能がその命令に対して行なわれるかもしれない。命令の典型的な処理は、その命令をフェッチすること、その命令をデコードすること、その命令を識別すること、その命令を実行すること、その結果を記録することなどを含み得る。
命令を処理している間、プロセッサは命令の実行が遅れることを経験するかもしれない。これらの遅れはプロセッサが遭遇するハザードによって引き起こされ得る。当業者が認識しているように、パイプラインプロセッサ内で遭遇されうる3つのタイプのハザード、リソースハザード(構造ハザードとも称される)、データハザード、制御ハザードがある。これら3つのすべてのハザードは命令の実行を遅らせる。リソースハザードは、命令によって必要とされるハードウェアが利用可能でない時に存在する。典型的には、これは、複数の命令が同じリソースの使用を要求する時に生じる。データハザードは、命令に関係する情報が収集されるかまたは識別される時に発生する。データハザードには、リード・アフター・ライト(WAW)ハザードと、ライト・アフター・ライト(RAW)ハザードと、ライト・アフター・リード(WAR)ハザードとが含まれる。制御ハザードは、ある命令がプログラムカウンターを変更する時に発生する。
いくつかのプロセッサでは、ハザードに遭遇した時、遅れた命令はホールディング・ステージの中に保持され得る。例えば、遅れた命令に関連する情報が収集されるかまたは確認される間、命令はホールディング・ステージの中に保持され得る。その情報が利用可能になった後しばらくして、その命令はホールディング・ステージから放出され、後続するステージに移される。パイプライン内の後のステージのうちの1つでは、命令は、実行ステージによって最終的に処理される。命令が実行ステージの期間中に実行された後、その命令実行の結果はプロセッサによって収集され格納される。
一般にいくつかのプロセッサでは、命令がパイプライン・ハザードによる遅れを経験する場合、その命令は実行ステージに達するのが遅れ、これによってその命令の実行が遅れる。リソースハザードの場合のように、たとえ命令を実行するのに必要な情報のいくつかあるいは全てが利用可能な場合であっても、プロセッサは、その命令を実行するために利用できるリソースを有さないかもしれない。実行ステージに先立って命令の実行を遅らせることは、プロセッサの全体の処理効率に影響を与えそれを低下させるかもしれない。
従って、ストールした命令を、プロセッサ内の実行ステージに先立つ、命令実行以外の機能を持つパイプラインステージにおいて、部分的にあるいは全体的に実行することができるプロセッサを所有する必要がこの業界には存在する。パイプライン中で実行ステージに先立って命令を部分的にあるいは全体的に実行することは、その命令の実行をスピードアップするとともに、プロセッサがより効率的にそのリソースを利用することを可能にし、これにより、プロセッサの効率を増加させる。本明細書の開示はこの必要性を認識し、そのようなプロセッサを開示する。
命令実行以外の一次機能を持つパイプラインステージで、ストールした命令を部分的に実行する方法が開示される。この方法は、第1の命令をホールディング・ステージにロードする。この方法は、パイプライン・ハザードに遭遇した場合に第1の命令をストールし、第1の命令を部分的に実行する。この方法は、さらに、第1の命令を実行ステージにロードし、実行ステージにおいて第1の命令の実行を完了する。
他の実施形態では、命令実行以外の一次機能を持つパイプラインステージにおいて、ストールした命令を全体的に実行する方法が開示される。この方法は、第1の命令をホールディング・ステージにロードする。この方法は、パイプライン・ハザードに遭遇した場合に第1の命令をストールし、第1の命令を全体的に実行する。この方法は、さらに、第1の命令の実行の結果をライトする。
パイプラインプロセッサが開示される。このパイプラインプロセッサは、第1の命令を受け取るように構成されたホールディング・ステージを有しており、このホールディング・ステージは実行ステージに結合されている。このホールディング・ステージは、パイプライン・ハザードに遭遇した場合に第1の命令をストールするように構成されており、このホールディング・ステージは、さらに、実行論理回路を具備する。この実行論理回路は第1の命令を部分的に実行するかまたは全体的に実行するように構成されている。実行ステージは、さらに、実行ユニットを具備し、この実行ユニットは部分的に実行された第1の命令を実行するように構成されている。
本発明のさらなる特徴および利点のみならず、本発明のより完全な理解は、以下の詳細な説明および添付図面から明らかになろう。
図1は、本発明の実施形態を使用したプロセッサの高レベルロジックハードウェアブロック図を示す。 図2は図1のプロセッサ内のCPUのより詳細なブロック図を示す。 図3は、図1のプロセッサによって実行される典型的な命令のグループを示す。 図4は、図3の典型的な命令のグループが図1のプロセッサの様々なステージを通って実行される場合のタイミング図を示す。 図5は、図1のプロセッサによって実行される別の典型的な命令のグループを示す。 図6は、図5の典型的な命令のグループが図1のプロセッサの様々なステージを通って実行される場合のタイミング図を示す。
添付の図面に関して以下に述べる詳細な説明は本発明の様々な実施形態の説明として意図されたものであり、本発明が実施される実施形態だけを表わすように意図されてものではない。詳細な説明は、本発明についての完全な理解を提供する目的で特定の詳細を含んでいる。しかしながら、本発明がこれらの特定の詳細なしで実施し得ることは当業者にとって明白であろう。いくつかの実例では、よく知られた構造およびコンポーネントは本発明の概念を不明瞭にしないようにするためにブロック図の形で示されている。略語および他の記述的な用語は単に便宜と明瞭さのために使用されてもよく、発明の範囲を制限するように意図されていない。
図1は、以下に説明されるような実施形態を利用するスーパースカラープロセッサ100についての高レベル図を示す。プロセッサ100は、専用高速バス104を介して命令キャッシュ106に結合された中央処理装置(CPU)102を有する。命令キャッシュ106は汎用バス110を介してメモリ108にも結合される。CPU102は、下位パイプライン(lower pipeline)160および165に結合された上位パイプライン(upper pipeline)150を有する。CPU102は、メモリ114から命令キャッシュ106への命令のローディングを制御する。一旦命令キャッシュ106に命令がロードされると、CPU102は高速バス104を介してそれら命令にアクセスすることができる。命令は命令キャッシュ106から上位パイプライン150の中へフェッチされる。命令が上位パイプライン150で処理された後、それら命令はさらなる処理のために下位パイプライン160または165に送られる。
命令は順番に上位パイプラインに入り、より効率的な処理のために下位パイプライン160または165に再配列(rearrange)されるかもしれない。下位パイプライン160および165内の命令の再配置は、図2−6の考察でより詳しく説明される。上位パイプライン150において命令に対して行なわれるいくつかの典型的な処理機能は、命令をフェッチすること、命令を整列させること、命令をデコードすることなどを含む。下位パイプライン160および165内では、命令処理は、命令を追跡すること(tracking)、命令を実行すること、命令結果を記録することなどを含む。
下位パイプライン160および165は、算術論理演算ユニット、浮動小数点ユニット、ストアユニット、ロードユニット、などのような様々な実行ユニット(EU)130を含み得る。例えば、算術論理演算ユニットを持つEU130は、整数の加算、減算、単純乗算、ビット単位の論理演算(例えばAND、NOT、OR、XOR)、ビットシフトなどのような広範囲の算術機能を実行し得る。代わりに、EU130は、ロード、リード、またはライトを行なうロードユニット、またはストアユニットを有してもよい。プロセッサ100の効率を増加させるために、下位パイプライン160および165はある機能を行なうために組織化(organize)されていてもよい。例えば、下位パイプライン160は算術機能を行なうEU群130を含み得、一方、下位パイプライン165はロード/ストア機能を行なうEU群130を含み得る。ある機能性を別個の下位パイプライン160または165へ分離することによって、二重のEU群130は必要でなくなり得る。もう一つの実施形態では、下位パイプライン160および165は同様のEU群130を含んでいてもよく、このことは、プロセッサが同じプロセッサ・サイクルの期間中に各下位パイプライン160および165内において複数の命令に対する同様の処理機能を行なうことを許可する。また別の実施形態では、命令を処理する1つの下位パイプラインのみがあってもよい。本明細書に提示される発明概念は1つ以上の下位パイプラインを備えたプロセッサに適用され得る。
当業者が理解しているように、パイプラインステージは、命令を保持するように設計されたレジスタのグループまたはレジスタから成り得る。命令が特定のステージに入る場合、プロセッサは、そのステージにリンクされたレジスタのグループまたはレジスタにその命令をロードする。各ステージには、命令に応じてある演算(operation)を行い得る論理回路が関係づけられてもよい。論理回路がその意図した演算を行なった後、その命令は次の連続するステージに受け継がれる。
図2はCPU102のより詳細なブロック図を示す。上位パイプライン150はフェッチ論理回路202を有しており、このフェッチ論理回路202は、デコードステージ204に結合されるフェッチステージ203に結合される。下位パイプライン160または165内では、ホールディング・ステージ210は実行ステージ220に結合されており、この実行ステージ220は書き込み(write-back)ステージ230に結合される。ホールディング・ステージ210は書き込みステージ230に直接結合されてもよい。下位パイプライン160および165の書き込みステージ230それぞれはバス170によってレジスタファイル235に結合される。ホールディング・ステージ210は実行論理回路240に結合され、またEU群130は実行ステージ220に結合される。
命令は上位パイプライン150のトップから下位パイプライン160および165を通って流れる。上位パイプライン150内では、フェッチステージ203は、命令キャッシュ106から命令を決定し続いてフェッチするためにフェッチ論理202を使用する。命令キャッシュ106では、命令はキャッシュ・ラインとして知られているセクションにグループ化される。各キャッシュ・ラインは複数の命令を含み得る。その結果、一度にいくつかの命令が命令キャッシュ106からフェッチされデコードされ得る。命令がフェッチ論理202によってフェッチされた後、それら命令はデコードステージ204へ送られる。
デコードステージ204では、命令がデコードされてその命令の正体(identity)と任意の起こりえる命令依存性(instruction dependencies)(つまりデータハザード)が決定される。デコード論理回路(デコード論理回路は図示の簡単化のために示されてない)によってデコードステージ204の期間中に取得または識別された情報は、さらなる処理のために下位パイプライン160または165のどちらがその命令を受け取るかをプロセッサが決定することを可能にする。以前に述べたように、下位パイプライン160は算術機能を取り扱うように設計されてもよく、一方、下位パイプライン165はロード/ストア機能を取り扱うように設計されてもよい。図2の実施形態では、たとえそれらが処理する命令が機能的に異なるかもしれないとしても、下位パイプライン160および165は同様の演算ブロック(operational blocks)を含んでいる。
実例となる例においては、命令は、2つのレジスタの内容同士を乗算し、その結果を第3のレジスタに格納する乗算命令として識別されるかもしれない。識別処理はデコードステージ204の期間中に発生し得る。さらにデコードステージ204の期間中には、その乗算命令に関する起こりえるデータハザードも確認されるかもしれない。この例では、乗算命令は、その命令のオペランドの一方または両方が利用可能ではないかもしれない(つまり、2つのレジスタの内容がまだ決定されないかもしれない)ということをプロセッサ100が確認した状態で、下位パイプライン160に送られるかもしれない。
一旦命令がデコードステージ204を通って下位パイプライン160または165のどちらかに渡ると、プロセッサ100は、その命令がその実行を終えてその結果が書き込まれるまで、その命令の処理を監視し続ける。命令が実行を終えていくとき、その結果はバス170上に送信され、プロセッサ100は、後の命令の実行を促進するためにその情報を使用し得る。
プロセッサが命令の監視に使用し得る1つの技術は、命令を「スコアボード化(scoreboarding)」することとして参照される。当業者は、命令スコアボードを使用して命令を追跡(track)することは、プロセッサが、任意の命令依存性のみならず命令を追跡することを可能にすることを理解する。命令がデコードステージ204において識別された後、その命令のためのエントリが命令スコアボード内に生成される。そのエントリは、エントリ番号若しくは他の命令識別子と、命令機能(すなわち、乗算、加算、ロード、ストア、など)と、その命令が現在配置されている下位パイプライン内のステージと、その命令が有する任意の依存性とを含み得る。一旦命令が下位パイプライン160あるいは165において実行を終了すれば、その命令エントリは除去される。
命令が下位パイプライン160または165に入っていくときに、それらは最初にホールディング・ステージ210において処理される。命令は、1つ以上のハザードが解決するのを待つために、1つ以上のプロセッサ・サイクルの間ホールディング・ステージ210内に保持され得る。1つの典型的な実施形態では、ホールディング・ステージは予約(reservation)ステージであってもよい。代替の実施形態では、ホールディング・ステージは命令キューであってもよい。当業者は、予約ステージを通って処理される命令はリオーダされ得、それにより、古い命令がデータハザードに遭遇する場合に若い命令がその古い命令をバイパスするのを可能にすることを理解する。これに対し、命令キューは、命令のリオーダを可能にしないかもしれない。命令キューは先入れ先出し方式で命令を処理する。したがって、もし命令キュー内の最も古い命令がデータハザードによる遅れを経験するならば、続く若い命令も遅れに遭遇し、最も古い命令が去るまで命令キューに残るであろう。ホールディング・ステージ210の主な目的は、ハザードに遭遇した時に、予約ステージまたは命令キューのいずれかを使って、命令の一時的な保持場所をプロセッサ100に提供することである。
ハザードが解決するのを待っている命令はストールした命令としても参照されうる。ストールした命令を予約ステージに一時的に保持することは、後続の命令がそのストールした命令をバイパスし、下位パイプライン160および165を通って移動し続けることを可能にする。ストールした命令をバイパスすることは、プロセッサがその処理リソースをより効率的に使用することを可能にする。予約ステージなしでは、パイプライン・ハザードが解決されるまで、下位パイプライン160あるいは165を通る命令の流れはブロックされるかもしれない。
1つの実施形態では、ホールディング・ステージ210は、単一の命令を保持することができるレジスタを有する予約ステージであってよい。また別の実施形態では、予約ステージは、複数の命令を保持することができる1組のレジスタであってもよい。どれだけの数の命令が予約ステージ内に保持され得るかを決める場合には、保持される命令の数は、プロセッサ100によって経験されるあらゆる起こりえる性能劣化のみならず、必要とされる追加のハードウェアの量ともバランスをとらなくてはならない。
プロセッサ100は、ストールした命令をそれがホールディング・ステージ210にある間、監視し続ける。ストールした命令に関連したパイプライン・ハザードが解決されたことをプロセッサが一旦決定すると、プロセッサ100は、その命令を下位パイプライン160または165の処理ストリーム中に放出する。もしその命令の全てのデータハザードが解決される(つまり、その命令がその全てのオペランドを有する)ならば、その命令はホールディング・ステージ210から実行ステージ220に移される。実行ステージ220内では、その命令はEU群130によって実行される。命令が実行された後、その結果は、その命令が書き込みステージにある場合に書き込み論理回路(図示の簡単化のために示されてない)によってレジスタファイル235に書き込まれる。
命令または複数の命令が下位パイプライン160または165内のホールディング・ステージ210内に保持されて間に、実行論理回路240はそれら命令のうちのいくつかあるいは全てを実行し得る。1つの実施形態では、実行論理回路240は、EU群130内に存在する論理回路の部分集合(subset)を含む。実行論理回路240によって行い得る実行可能な機能を伴った命令は、実行ステージ220への到達に先立って、実行論理回路240によって全体的にまたは部分的に実行され得る。ホールディング・ステージ210においての命令の部分的な実行からの結果は、プロセッサ100によって保存され実行ステージ220に受け継がれ得る。命令がホールディング・ステージ210において全体的にあるいは完全に実行された時、命令実行からの結果は、書き込みステージ230によってレジスタファイル235に直接的に書き込んでもよい。この処理は、図3−6の後続の考察の中でより詳細に説明される。
典型的な実施形態では、実行論理回路240は、論理左シフト(LSL)演算を実行する論理回路を含んでいてもよい。この実施形態では、実行論理回路240は、下位パイプライン160または165のEU130内にも存在する論理回路の複製を含む。EU130のみならずEU130と実行論理回路240の双方にLSL演算を実行する論理回路を有することによって、プロセッサ100は、ホールディング・ステージ210または実行ステージ220のいずれかにおいてLSL演算を伴った命令を実行し得、これによりプロセッサ100の処理効率が増加される。
実行論理回路240においてどの機能をサポートするかを決定する場合には、必要とされる追加のスペースと、電力および放熱と、実行時間の量と、特定の命令の頻度とを考慮してもよい。以前に説明した実施形態では、LSL命令は、実行ステージ220に先立ってLSL命令を実行することによって節約されるプロセッサ・サイクルの数が、プロセッサ100によって経験されるかもしれないあらゆる性能インパクトよりも勝るように、頻繁に実行されるようにしてもよい。代替の実施形態では、加算、減算、論理演算などのような他の機能が、実行論理回路240に実装されてもよい。
図3は、本発明の1つの実施形態を利用するプロセッサ100によって処理される命令300の典型的なグループを示す。この例の目的のために、実行論理回路240は論理左シフト(LSL)回路を含む。図4は、上位パイプライン150および下位パイプライン165のステージを通って処理される命令300のグループを示すタイミング図400を示す。タイミング図400は、Y軸404に沿ったプロセッサ・サイクル402と、X軸406に沿ったプロセッサ100のステージ(203、204、210、220および230)を示す。タイミング図400は下位パイプライン160を通って流れる命令300のグループを示すが、命令300のグループは下位パイプライン160を通って流れてもよい。さらに、図4に示されたホールディング・ステージ210は予約ステージあるいは命令キューのいずれであってもよい。命令300のグループの処理の説明においては、予約ステージがホールディング・ステージ210の例として使用される
図3に示されるように、複合(compound)命令B、CおよびDは、複数の実行可能なオペレーションを有する。複合命令Bは、LSLオペレーション302およびADDオペレーション303から構成される。複合命令BのLSLオペレーション302は、レジスタ5(R5)を2だけ論理的に左にシフト(LSL)する。ADDオペレーション303は、(2だけ論理的にシフトされた後の)R5とレジスタ1(R1)との加算であって、その結果がレジスタ4(R4)に書き込まれる加算を含む。複合命令CはADDオペレーション305のみならずLSLオペレーション304も有する。LSLオペレーション304は、レジスタ7(R7)に定義された値によるR5のLSLを含み、ADDオペレーション305は、R5とR1との加算であって、結果がレジスタ6(R6)に書き込まれる加算である。命令DはLSLオペレーション306とSUBオペレーション307とを有する。命令DのLSLオペレーション306は、R7の内容を2だけ論理的に左にシフトする。命令DのSUBオペレーション307は、R4の値からR7の値を引き、レジスタ8(R8)に結果を格納する。
図4を参照すると、命令Aがプロセッサ100によって処理される最初の命令である。命令Aは、プロセッサ・サイクル1で命令フェッチステージ203にフェッチされる。プロセッサ・サイクル2では、複合命令Bがフェッチ論理202によってフェッチされ、命令フェッチステージ203にロードされる一方、命令Aはデコードステージ204へ送られ。プロセッサ・サイクル3では、命令Aは下位パイプライン160の予約ステージへ送られる。この実施形態では、予約ステージは2つまでの命令を保持し得る。
さらに、プロセッサ・サイクル3の期間中では、複合命令Cが命令フェッチステージ203によってフェッチされる一方、複合命令Bがデコードステージ204でデコードされる。命令Bがデコードされた後、プロセッサ100は、命令Bが、命令Aの実行からまだ決定されない情報(つまりR1の値)に対する依存性(つまりデータハザード)を有する複合命令であることを決定する。命令Aは依存性を有さないので、命令Aは予約ステージに1プロセッサ・サイクル(プロセッサ・サイクル3)だけ維持されるであろう。
プロセッサ・サイクル4では、複合命令Bが予約ステージにロードされる一方、命令Aは実行ステージ220において実行される。命令Bは、そのオペランドの依存性が解決される(つまり、命令Aの実行の後にR1の値が決定される)まで、予約ステージに保持されるであろう。この例においては、プロセッサ100が書き込みステージ230の期間中に命令Aの結果をレジスタファイル235に書き込んだ時、R1の値は次のプロセッサ・サイクル(プロセッサ・サイクル5)において利用可能である。プロセッサ・サイクル4の期間中に、複合命令Dは命令フェッチステージ203によってフェッチされ、複合命令Cはデコードステージ204において処理される。複合命令Cがデコードステージ204においてデコードされた後、プロセッサ100は、複合命令Cが論理左シフト機能を含む複合命令であり、命令A(つまりR1の値)に対する依存性を有するということを、識別する。
複合命令Bがプロセッサ・サイクル4の期間中に予約ステージにある間、実行論理回路240はLSLオペレーション302を実行し得る。したがって、複合命令Bは、予約ステージに保持されている間に、実行論理回路240によって部分的に実行され得る。以前に説明したように、実行論理回路240は、LSLオペレーション(この例では、2だけ論理左シフトの命令)を実行する論理回路を含み得る。プロセッサの効率は、そうでなければオペレーションを行なわないストールサイクルの期間中に必要なオペレーションを実行することによって増加する。予約ステージの実行論理回路240無しでは、複合命令Bは、その実行を完了するために実行ステージ220において2つのプロセッサ・サイクルを必要とするであろう(つまりLSLオペレーション302を行うための1サイクルと、ADDオペレーション303を行なうための1サイクル)。この例において、LSLオペレーション302の実行からの結果はプロセッサ100によって保存され、そして、複合命令Bが実行ステージ220に送られる時に(プロセッサ・サイクル6において)、結果もまた送られる。LSLオペレーション302を実行するために実行論理回路240を使用することは、複合命令Bが実行ステージ220に達した時にプロセッサ100がADDオペレーション303を1プロセッサ・サイクルで実行することを可能にする。したがって、実行ステージにおいて複合命令Bを実行するのに必要な処理時間は、1プロセッサ・サイクルだけ削減される。更に、この実施形態は、複合命令の別の一部に対する依存性が存在している状態、その複合命令の一部が実行されることを可能にする。
以前に言及したように、命令Aは実行を終え、その結果はプロセッサ・サイクル5において書き込みステージ230の期間中にレジスタファイル235に書き込まれる。その結果は、複合命令Bがプロセッサ・サイクル5において予約ステージにある間に、その複合命令Bに提供される。複合命令Bは、次のプロセッサ・サイクル(プロセッサ・サイクル6)において実行ステージ220に放出されよう。複合命令Cはプロセッサ・サイクル5の期間中に予約ステージにロードされる。プロセッサ100は、複合命令Cも、プロセッサ・サイクル5において現在利用可能であるR1に格納された値を必要とすることを、決定する。したがって、複合命令Cは、もはやオペランド有効性に基づくいかなるデータハザードも有しておらず、もし実行ステージ220が次のプロセッサ・サイクル(プロセッサ・サイクル6)の期間中に利用可能であるならば、実行ステージ220に放出されるであろう。しかしながら、複合命令Bが最初に実行ステージ220へ放出され、これにより、複合命令Cは、リソースコンフリクト(実行ステージ220は命令Bによって専有されている)に起因するストールを経験し、複合命令Cは、複合命令Bが書き込みステージに送られる(プロセッサ・サイクル7)まで、予約ステージに維持される。
複合命令Cがプロセッサ・サイクル5の期間中に予約ステージにおいてストールされている間に、実行論理回路240はLSL機能304を実行し得る。プロセッサ100は、プロセッサ・サイクル5の開始時に、R7の内容を実行論理回路240にロードし得る。プロセッサ・サイクル5の期間中に、実行論理回路240はLSL機能304を実行し得る。LSLオペレーション304の実行からの結果はプロセッサ100によって保存され、そして、複合命令Cが実行ステージ220に送られる時に(プロセッサ・サイクル7において)、結果もまた送られる。予約ステージの実行論理回路240無しでは、複合命令Cは、その実行を完了するために実行ステージ220において2つのプロセッサ・サイクルを必要とするであろう(つまりLSLオペレーション304を行うための1サイクルと、ADDオペレーション305を行なうための1サイクル)。LSLオペレーション304を実行するために実行論理回路240を使用することは、複合命令Cが実行ステージ220に達した時にプロセッサ100がADDオペレーション305を1プロセッサ・サイクルで実行することを可能にする。したがって、実行ステージにおいて複合命令Cを実行するのに必要な処理時間は、1プロセッサ・サイクルだけ削減される。
プロセッサ・サイクル5においては、複合命令Dはデコードステージ204において処理され、また命令Eは命令フェッチステージ203によってフェッチされる。複合命令Dがデコードされた後、プロセッサ100は、複合命令Dが2つの実行可能なオペレーション、LSLオペレーション306およびSUBオペレーション307を有する複合命令であることを、識別する。プロセッサ100は、複合命令Dが複合命令Bに対する依存性を有することをさらに識別する(つまり、複合命令Dは、実行するために決定されるべきR4の値を必要とする)。複合命令Dにとってのデータハザードが解決された(つまり、R4の結果は利用可能となった)後、複合命令Dは、さらなる実行のために、放出されそして実行ステージ220に送られよう。
プロセッサ・サイクル6では、リソースハザードが解決され、複合命令Cは予約ステージを去り、プロセッサ・サイクル7において実行ステージ220へ送られよう。さらに、プロセッサ・サイクル6の期間中には、複合命令Dは予約ステージにロードされ、命令Eはデコードステージ204において処理され、また命令Fは命令フェッチステージ203によってフェッチされる。複合命令Dはプロセッサ・サイクル7の期間中は予約ステージ内に保持され続ける。その理由は、R4の値は、複合命令Bが実行し終え、その結果が書き込みステージの期間中にレジスタファイル235に書き込まれるまで(プロセッサ・サイクル7)、書き込まれないからである。
しかしながら、プロセッサ100は複合命令Dが実行可能なLSLオペレーションを含むことを識別しているので、プロセッサ100は、プロセッサ・サイクル6の開始時にR7の値を実行論理回路240にロードする。プロセッサ・サイクル6の期間中に、実行論理回路240はLSLオペレーション306を実行する。その結果は保存され、複合命令Dがプロセッサ・サイクル8において実行ステージ220へ送られる時に複合命令Dと一緒に送られる。プロセッサ・サイクル7の後、R4に対する依存性がすでに解決され、また実行ステージ220が利用可能である(つまり、リソースハザードによるストールがない)ので、プロセッサ100は、予約ステージから実行ステージ220に命令Dを放出する。プロセッサ・サイクル8では複合命令Dが実行され、その結果は、プロセッサ・サイクル9において書き込みステージ230の期間中にレジスタファイル235に書き込まれる。予約ステージにおいてLSL機能306を実行することによって、R4の依存性は、実行ステージ220において複合命令Dの実行に影響を与えない。
命令Eがプロセッサ・サイクル6においてデコードされた後、プロセッサ100は、その命令がオペランド利用可能性に基づくどんな依存性(つまりデータハザード)も持っていないと識別する。命令Eはプロセッサ・サイクル7において予約ステージへ送られる。プロセッサ・サイクル7の期間中に、命令Dは予約ステージを去り、また命令Eは、追加のサイクルの間、予約ステージ内に維持される。以前に考察されたように、たとえ命令Eがそのオペランドのすべてを有したとしても、命令Eは、その実行が開始できる前に、実行ステージ220が利用可能になるのを待つ。命令EはLSLオペレーションを有していないので、実行論理回路240(この例では単にLSLオペレーションを実行する)は、実行ステージ220に先立って命令Eを実行するためには使用されないかもしれない。
命令Fは、プロセッサ・サイクル6の期間中に命令キャッシュ106から命令フェッチステージ203にフェッチされる。プロセッサ・サイクル7では、命令Fはデコードステージ204において処理される。命令Fは、プロセッサ・サイクル8の期間中にさらなる処理のために下位パイプ160の予約ステージへ送られる。先行する命令(命令DおよびE)が実行ステージ220および書き込みステージ230においてそれぞれ処理されている間、命令Fは予約ステージに2つのプロセッサ・サイクル(プロセッサ・サイクル8、9)の間維持される。命令FはORR命令であり、実行論理回路240はLSL回路を含んでいるので、命令Fのための実行ステージ220に先立った実行は行なわれない。結果として、命令Fはプロセッサ・サイクル10において実行され、その結果は、プロセッサ・サイクル11において書き込みステージ230の期間中にレジスタファイル235に書き込まれる。
もし命令キューが前の例に記述された命令300のグループを処理するために予約ステージの代わりに使用されれば、結果は正確に同じになるであろう。結果は同じになるのは、命令300のグループは予約ステージにおいて処理された後にリオーダされないからである。したがって、命令300のグループは、それら命令が実行ステージ220に実行される時に、アウト・オブ・オーダー(out of order)で実行されない。
図5は、本発明の実施形態を利用するプロセッサ100によって処理される命令500の別の典型的なグループを示す。図6は、プロセッサ100の上位パイプライン150および下位パイプライン160の種々のステージを通って流れる命令500のグループのタイミング図600を示す。タイミング図600は、Y軸604に沿ったプロセッサ・サイクル602と、X軸606に沿ったプロセッサ100のステージ(203、204、210、220および230)を示す。タイミング図600は下位パイプライン160を通って流れる命令500のグループを示すが、もし下位パイプライン165が命令500のグループを処理可能であるならば、命令500のグループは下位パイプライン165を通って流れることもできる。さらに、図6に示されたホールディング・ステージ210は予約ステージあるいは命令キューのいずれであってもよい。実例の容易さのために、予約ステージが命令500のグループを処理するために使用される。
図5に示されるように、複合命令B1およびC1は、複数の実行可能なオペレーションを有する。複合命令B1はLSLオペレーション502およびADDオペレーション503を有する。LSLオペレーション502は、R5に対する2だけの論理左シフト(LSL)であり、ADDオペレーション503は、(2だけ論理的に左にシフトされた後の)R5とR1との加算であり、その結果はR6に格納される。複合命令C1はLSLオペレーション504およびADDオペレーション505を有する。LSL機能504は、R7に定義された値だけR5を論理的に左にシフトし、ADD機能505は、(R7の値だけ論理的に左にシフトされた後の)R5とR1との加算であり、その結果はR4に格納される。
タイミング図600を参照すると、命令A1はプロセッサ・サイクル1の期間中にフェッチ論理回路を使用して、命令フェッチステージ203によって命令キャッシュ106からフェッチされる。プロセッサ・サイクル2では、複合命令B1が命令フェッチステージ203によってフェッチされる一方、命令A1は処理のためにデコードステージ204へ送られる。命令A1がデコードされた後、プロセッサ100は、命令A1がいかなる依存性も持っておらず、オペランド利用可能に基づいた依存性解決のために予約ステージに保持されないであろうことを、識別する。
プロセッサ・サイクル3では、命令A1は下位パイプライン160の予約ステージへ送られる。命令A1は依存性がないので(つまり、そのオペランドは識別され、またリソースコンフリクトがない)、命令A1は、プロセッサ・サイクル4において実行ステージ220へ送られる前に、予約ステージに1プロセッサ・サイクルだけ(プロセッサ・サイクル3)維持されるであろう。プロセッサ・サイクル3の期間中では、複合命令C1が命令フェッチステージ203によってフェッチされる一方、複合命令B1はデコードステージ204においてデコードされる。命令B1がデコードステージ204の期間中にデコードされた後、プロセッサ100は、複合命令B1が2つの実行可能なオペレーション(502および503)を有する複合命令であり、そのうちの1つは2だけの論理左シフト(LSL機能502)であると、識別する。さらに、プロセッサ100は、複合命令B1が命令A1に対する依存性を有すること(つまり、R1の値は複合命令B1の実行を完了するために必要である)を識別する。
プロセッサ・サイクル4では、複合命令B1が予約ステージに入る一方、命令A1は実行ステージ220において実行される。複合命令B1は、オペランド利用可能(つまりデータハザード)に基づくストールに遭遇し、R1の値が利用可能になるまで、予約ステージ内に保持されるであろう。この例においては、命令A1が実行し終え、その結果がプロセッサ・サイクル5において書き込みステージ230の期間中にレジスタファイル235に書き込まれるまでは、R1の値は利用可能でない。複合命令B1が予約ステージにある間、複合命令B1は部分的に実行され得る。LSL機能502は、プロセッサ・サイクル4の期間中に実行論理回路240によって実行され得る。LSLオペレーション502の実行からの結果はプロセッサ100によって保存され、複合命令B1が実行ステージ220に送られる時に(プロセッサ・サイクル6)、その結果もまた送られる。複合命令B1の残るADD機能503は、実行ステージ220の期間中に実行されるであろう。
プロセッサ・サイクル4の期間中に、命令D1は命令フェッチステージ203によってフェッチされ、また複合命令C1はデコードステージ204において処理される。複合命令C1がプロセッサ・サイクル4においてデコードステージ204の期間中にデコードされた後、プロセッサ100は、複合命令C1が2つの実行可能なオペレーション、LSLオペレーション504およびADDオペレーション505を含む複合命令であることを、識別する。プロセッサ100は、さらに複合命令C1のADDオペレーション505が、複合命令C1が予約ステージを去ることができる前に解決されなければならない値R1に対する依存性を有することを、識別する。
命令A1は実行を終え、命令A1がプロセッサ・サイクル5において書き込みステージ230にある間に、その結果はレジスタファイル235に書き込まれる。複合命令B1が予約ステージ内に保持されている間に、命令A1の結果は複合命令B1へ送られる。複合命令B1がその結果を受け取った後、複合命令B1は、次のプロセッサ・サイクル(プロセッサ・サイクル6)において実行ステージ220に放出されるであろう。複合命令C1はプロセッサ・サイクル5の期間中予約ステージにおいて処理され続けられる。プロセッサ100は、R1の値が今利用可能であるので、複合命令C1についての依存性はプロセッサ・サイクル5において解決されていることを、決定する。しかしながら、複合命令C1は、複合命令B1が最初に放出されることによって発生するリソースハザードにより、プロセッサ・サイクル6において実行ステージ220に放出されないであろう。プロセッサ・サイクル5の期間中に、複合命令C1は部分的に実行され得る。複合命令C1のLSLオペレーション504は実行論理回路240によって実行される。LSLオペレーション504の実行からの結果はプロセッサ100によって保存され、複合命令C1が実行ステージ220に送られる時(プロセッサ・サイクル7)に、その結果もまた送られる。実行論理回路240はADD機能を実行するのに必要な論理回路を含んでいないので、複合命令C1の他のADDオペレーション505は、次のプロセッサ・サイクル(プロセッサ・サイクル7)の期間中に実行ステージ220において実行されるであろう。
プロセッサ・サイクル5では、命令D1はデコードステージ204において処理され、また命令E1は命令フェッチステージ203によってフェッチされる。命令D1がデコードされた後、プロセッサ100は、命令D1が依存性を持っておらずLSLオペレーションを含んでいないことを、識別する。したがって、命令D1は、オペランド依存性(つまりデータハザード)のために、予約ステージ内に保持されないであろう。
プロセッサ・サイクル6では、複合命令B1は実行ステージ220において実行される。本発明の1つの局面を利用して、プロセッサは、プロセッサ・サイクル4において実行論理回路240によるLSLオペレーション502の先行する実行により、複合命令B1の実行を1つのプロセッサ・サイクルにおいて完了する。LSLオペレーション502を実行するために実行論理回路240を使用することは、実行ステージ220において複合命令B1を実行するための処理時間を1プロセッサ・サイクルだけ削減する。更に、この実施形態は、複合命令の別の一部に対する依存性が存在している状態、その複合命令の一部が実行されることを可能にする。
複合命令C1は、プロセッサ・サイクル6の期間中に実行ステージ220に進むことはできない(つまり、複合命令B1が現在プロセッサ・サイクル6において実行ステージ220にあるからである)。さらに、プロセッサ・サイクル6では、命令D1は予約ステージへ送られる。たとえ命令D1がオペランド利用可能性に基づく依存性を持っていなくても、命令D1は、リソースハザード(複合命令C1はプロセッサ・サイクル7において実行ステージ220を使用している)に遭遇し、プロセッサ・サイクル8まで実行ステージ220に放出されないであろう。命令D1はLSLオペレーションを有しておらず、したがって、実行論理回路240は実行ステージ220に先立って命令D1を部分的にあるいは全体的に実行しないかもしれない。
命令E1はデコードステージ204において処理され、命令F1はプロセッサ・サイクル6の期間中にフェッチステージ203によってフェッチされる。命令E1は、R2の内容を2だけ論理的に左にシフトし、その結果がR3に格納される1つの実行可能なLSLオペレーションを有する。命令E1はLSLオペレーションだけを有しているので、命令E1は予約ステージにおいて実行論理回路240によって全体的にもしくは完全に実行され得る。タイミング図400に示されるように、予約ステージにいる間、命令E1はリソースハザードを経験する。
本発明の代替の実施形態では、プロセッサ100は、命令E1が完全に実行論理回路240によって実行されるのを許可するために、命令E1を故意に予約ステージにストールし得る。この実例では、プロセッサ100は、故意にLSL命令を遅らせることによって、プロセッサ100が別の命令のために実行ステージ220を解放し得ることを決定してもよく、それにより、その処理効率を増加させる。
プロセッサ・サイクル7の期間では、複合命令B1の実行の結果は、書き込みステージ230の期間中にレジスタファイル235に書き込まれる。複合命令B1が実行ステージ220を去り、複合命令C1が実行ステージ220に入る。命令D1は、複合命令C1が現在そこにあるので、実行ステージ220に入ることができない。その結果、命令D1はリソースコンフリクトによりプロセッサ・サイクル7において予約ステージ内で待ち続ける。プロセッサ・サイクル7の期間中に命令F1はデコードステージ204において処理され、命令E1は予約ステージにおいて命令D1に加わる。命令E1が予約ステージ220にある間、プロセッサ100は、プロセッサ・サイクル7の期間中にLSLオペレーション507を実行するために実行論理回路240を使用する。
プロセッサ・サイクル8の期間中では、複合命令C1の実行の結果は、書き込みステージ230においてレジスタファイル235に書き込まれる。命令D1は実行ステージ220に入り、また命令F1は予約ステージに入る。プロセッサ・サイクル8の期間中では、命令E1は、実行論理回路240によって全体的に実行される。実行論理回路240が命令E1を全体的に実行したので、実行ステージ220に入らずにその結果がレジスタファイル235に書き込まれ得る。この実例では、命令E1の実行の結果は、プロセッサ・サイクル9の期間中に書き込みステージ230によってレジスタファイル235に書き込まれる。あるいは、もしプロセッサが、予約ステージからの直接的なレジスタファイル235の書込みを可能にするバイパス・メカニズムを有していないならば、その命令は実行ステージ220にロードされてもよい。命令はその実行をすべて完了しているので、その命令は書き込みステージに送られ、そこでその結果がレジスタファイル235に書き込まれ得る。
この実例となる例では、命令E1はその実行を完了し、その結果は、命令D1が実行し終える前に、書き込まれる。その結果は予約ステージによって書き込みステージ230に直接書き込まれ、それが今度はその結果をレジスタファイル235に書き込む。命令E1を実行ステージ220において実行する代わりに命令E1を実行するために実行論理回路240を利用することは、処理時間を節約する。命令E1の結果はプロセッサ・サイクル8の後に利用可能であり、実行のためにこの情報を必要とするあらゆる後続の命令に送り戻され得る。命令500の典型的なグループを処理するために既知の技術を利用すると(それらが予約ステージにある間にそれら命令を実行することを含まない)、命令E1からの結果は、命令D1が実行ステージ220に入った後の4つのプロセッサ・サイクルまで利用できないであろう。3つのプロセッサ・サイクルが命令D1を実行するために必要とされ、さらに2つのプロセッサ・サイクルが複合命令E1を実行するために必要とされる。
図6のタイミング図600を参照すると、命令D1はプロセッサ・サイクル9において実行し続け、プロセッサ・サイクル10において実行を終える。命令D1の結果は、プロセッサ・サイクル11の期間で書き込みステージ230の期間中にレジスタファイル235に書き込まれる。さらに、プロセッサ・サイクル11においては、命令F1は実行ステージに入り、命令F1のための結果は、プロセッサ・サイクル12において書き込みステージ230の期間中にレジスタファイル235に書き込まれる。
以前に説明されたように、様々な実施形態で説明されるような概念は単一のパイプラインプロセッサの中で実現され得る。あるいは、これらの概念は、2つ以上の下位パイプラインを有するプロセッサに適用され得る。プロセッサ100中の実行論理回路240は、デコードステージ204の後且つ実行ステージ220に先立って命令を処理するパイプライン中の任意のステージとインタフェースし得る。以前に述べたように、もし後のパイプライン・ハザードに遭遇するかもしれないことをプロセッサ100が予測したならば、プロセッサ100は、ホールディング・ステージ210において部分的にあるいは全体的に実行することができる命令を故意にストールしてもよい。ホールディング・ステージ210内の命令を遅らせることは、実行論理回路240が命令を部分的にあるいは全体的に実行することを可能にし、それにより、後続の命令のための処理リソースを解放する。
本明細書における開示に関連して示された様々な実例となる論理ブロック、モジュール、回路、要素、および/またはコンポーネントは、汎用プロセッサ、デジタル信号プロセサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラム可能ゲート・アレイ(FPGA)若しくは他のプログラマブル・ロジック・コンポーネント、ディスクリートゲート若しくはトランジスタロジック、ディスクリートハードウェアコンポーネント、または、本明細書に開示された機能を実行するように設計された上記何れかの組み合わせを用いて実現又は実行され得る。汎用プロセッサはマイクロプロセッサであってもよいが、代わりに、従来のプロセッサ、コントローラ、マイクロコントローラ、又はステートマシンであってもよい。プロセッサは、例えばDSPとマイクロプロセッサとの組み合わせ、複数のマイクロプロセッサ、DSPコアに接続された1つ又は複数のマイクロプロセッサ、又はこのような任意の構成である計算要素の組み合わせとして実現することも可能である。
特定の実施形態を本明細書において例証し説明したが、当業者は、同じ目的を達成するために意図されたあらゆる構成が、示された特定の実施形態の代わりに用い得、本発明が他の環境で他の応用を有することを理解する。この出願は、本発明のいかなる適応品あるいは変形例もカバーするように意図される。次のクレームは、発明の範囲を本明細書に記述された特定の実施形態に制限するように意図されたものではない。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
[1]ストールした命令をパイプラインプロセッサ内の[命令実行以外の一次機能を有する]ホールディング・ステージにおいて部分的に実行する方法であって、
第1の命令をホールディング・ステージにロードすることと、
前記第1の命令を当該命令がパイプライン・ハザードに遭遇した時に前記ホールディング・ステージにおいてストールし、前記第1の命令を前記ホールディング・ステージにおいて実行することと、
前記第1の命令を実行ステージにロードすることと、
前記第1の命令の実行を前記実行ステージにおいて完了することとを具備する方法。
[2]前記第1の命令は、当該命令が前記ホールディング・ステージにある時に実行論理回路によって実行される[1]記載の方法。
[3]前記ホールディング・ステージは、予約ステージである[1]記載の方法。
[4]前記ホールディング・ステージは、命令キューである[1]記載の方法。
[5]前記パイプライン・ハザードは、リソースハザードである[1]記載の方法。
[6]前記パイプライン・ハザードは、データハザードである[1]記載の方法。
[7]前記第1の命令は、複合命令である[1]記載の方法。
[8]ストールした命令をパイプラインプロセッサ内の命令実行以外の一次機能を有するパイプラインステージにおいて全体的に実行する方法であって、
第1の命令をホールディング・ステージにロードすることと、
前記第1の命令を、当該命令がパイプライン・ハザードに遭遇した時に前記ホールディング・ステージにおいてストールし、前記第1の命令を前記ホールディング・ステージにおいて全体的に実行することと、
前記第1の命令の実行の結果を書き込むこととを具備する方法。
[9]前記第1の命令の実行は、前記第1の命令が前記ホールディング・ステージにある時に、実行論理回路によって行なわれる[8]記載の方法。
[10]前記ホールディング・ステージは、予約ステージである[8]記載の方法。
[11]前記ホールディング・ステージは、命令キューである[8]記載の方法。
[12]前記結果はレジスタファイルに書き込まれる[8]記載の方法。
[13]前記ハザードは、リソースハザードである[8]記載の方法。
[14]前記ハザードは、データハザードである[8]記載の方法。
[15]前記第1の命令は、算術命令または論理演算を含む[8]記載の方法。
[16]パイプラインプロセッサであって、
第1の命令を受け取るように構成されたホールディング・ステージと、
前記ホールディング・ステージに結合される実行ステージとを具備し、
前記ホールディング・ステージは、パイプライン・ハザードに遭遇した時に前記第1の命令をストールするように構成され、前記ホールディング・ステージは、実行論理回路をさらに具備し、前記実行論理回路は、前記第1の命令を部分的に実行または全体的に実行するように構成され、前記実行ユニットは、前記部分的に実行される第1の命令を実行するように構成されている、パイプラインプロセッサ。
[17]前記第1の命令は複合命令である[16]記載のパイプラインプロセッサ。
[18]前記実行論理回路は、算術演算または論理演算を実行する[16]記載のパイプラインプロセッサ。
[19]前記パイプライン・ハザードは、リソースハザードである[16]記載のパイプラインプロセッサ。
[20]前記パイプライン・ハザードは、データハザードである[16]記載のパイプラインプロセッサ。
[21]前記ホールディング・ステージは、予約ステージである[16]記載のパイプラインプロセッサ。
[22]前記ホールディング・ステージは、命令キューである[16]記載のパイプラインプロセッサ。
[23]レジスタファイルをさらに具備し、前記第1の命令の実行の結果は前記レジスタファイルに書き込まれる[16]記載のパイプラインプロセッサ。

Claims (16)

  1. パイプラインのホールディング・ステージであって前記パイプラインの実行ステージに先立つホールディング・ステージに、複合命令をロードすることと、
    前記複合命令を当該複合命令がパイプライン・ハザードに遭遇したことに応答して前記ホールディング・ステージにおいてストールすることと、
    前記複合命令が前記ホールディング・ステージにおいてストールされている間に前記複合命令を実行論理回路によって実行して結果を生成することと、
    前記複合命令の実行後、前記パイプライン・ハザードが解消されるまで前記複合命令を前記ホールディング・ステージに保持することとを具備する方法。
  2. 前記パイプライン・ハザードは、リソースハザードである請求項1記載の方法。
  3. 前記パイプライン・ハザードは、データハザードである請求項1記載の方法。
  4. 前記複合命令は第1の実行可能なオペレーションと第2の実行可能なオペレーションとを備える請求項1記載の方法。
  5. 前記ホールディング・ステージは、前記複合命令を含む命令のリオーダ実行に適用される予約ステージを備える請求項1記載の方法。
  6. 前記第2の実行可能なオペレーションの実行は、前記第1の実行可能なオペレーションの結果に依存する請求項4記載の方法。
  7. 前記実行論理回路は、前記複合命令に対するシフト演算を行うことによって前記複合命令を実行する請求項1記載の方法。
  8. 書き込みステージの期間中に、結果をレジスタファイルに書き込むことをさらに具備する請求項1記載の方法。
  9. パイプラインプロセッサであって、
    パイプラインの実行ステージに先立つホールディング・ステージを具備し、前記ホールディング・ステージは、
    第1の実行可能なオペレーションと第2の実行可能なオペレーションとを備える複合命令であって前記第2の実行可能なオペレーションの実行が前記第1の実行可能なオペレーションの結果に依存する複合命令を受信し、
    前記複合命令を、パイプライン・ハザードに遭遇することに応答してストールし、
    前記複合命令が前記ホールディング・ステージにおいてストールされている間に前記第1の実行可能なオペレーションを実行論理回路によって実行し、
    前記第1の実行可能なオペレーションの実行後、前記パイプライン・ハザードが解消されるまで前記複合命令を保持するように構成されている、パイプラインプロセッサ。
  10. 前記パイプライン・ハザードは、リソースハザードである請求項9記載のパイプラインプロセッサ。
  11. 前記パイプライン・ハザードは、データハザードである請求項9記載のパイプラインプロセッサ。
  12. 前記実行ステージは、前記第1の実行可能なオペレーションの結果と前記第2の実行可能なオペレーションとを受信し、前記第1の実行可能なオペレーションの結果に基づいて前記第2の実行可能なオペレーションを実行するように構成される請求項9記載のパイプラインプロセッサ。
  13. 書き込みステージをさらに具備し、前記第1の実行可能なオペレーションの結果と前記第2の実行可能なオペレーションの結果がレジスタファイルに書き込まれる請求項12記載のパイプラインプロセッサ。
  14. 前記ホールディング・ステージは、前記複合命令を含む命令のリオーダ実行に適用される予約ステージを備える請求項9記載のパイプラインプロセッサ。
  15. プロセッサによって実行される場合に前記プロセッサに、
    パイプラインのホールディング・ステージであって前記パイプラインの実行ステージに先立つホールディング・ステージに、複合命令をロードすることと
    前記複合命令を、当該複合命令がパイプライン・ハザードに遭遇したことに応答して前記ホールディング・ステージにおいてストールすることと
    前記複合命令が前記ホールディング・ステージにおいてストールされている間に前記複合命令を実行論理回路によって実行して結果を生成することと、
    前記複合命令の実行後、前記パイプライン・ハザードが解消されるまで前記複合命令を前記ホールディング・ステージに保持することとを実行させるため命令群を備えるコンピュータ読み取り可能な記憶媒体。
  16. パイプラインプロセッサであって、
    第1の実行可能なオペレーションと第2の実行可能なオペレーションとを備える複合命令であって前記第2の実行可能なオペレーションの実行が前記第1の実行可能なオペレーションの結果に依存する複合命令を受信する手段と、
    前記複合命令を、パイプライン・ハザードに遭遇することに応答してストールする手段と、
    前記複合命令が前記ホールディング・ステージにおいてストールされている間に前記第1の実行可能なオペレーションを実行論理回路によって実行する手段と、
    前記第1の実行可能なオペレーションの実行後、前記パイプライン・ハザードが解消されるまで前記複合命令を前記ホールディング・ステージに保持する手段とを具備するパイプラインプロセッサ。
JP2010501186A 2007-03-28 2008-03-26 プロセッサにおいて実行ステージに先立って命令を実行するためのシステムおよび方法 Expired - Fee Related JP5180285B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/692,685 US8127114B2 (en) 2007-03-28 2007-03-28 System and method for executing instructions prior to an execution stage in a processor
US11/692,685 2007-03-28
PCT/US2008/058246 WO2008118949A1 (en) 2007-03-28 2008-03-26 A system and method for executing instructions prior to an execution stage in a processor

Publications (2)

Publication Number Publication Date
JP2010522940A JP2010522940A (ja) 2010-07-08
JP5180285B2 true JP5180285B2 (ja) 2013-04-10

Family

ID=39540664

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010501186A Expired - Fee Related JP5180285B2 (ja) 2007-03-28 2008-03-26 プロセッサにおいて実行ステージに先立って命令を実行するためのシステムおよび方法

Country Status (6)

Country Link
US (1) US8127114B2 (ja)
EP (1) EP2142988A1 (ja)
JP (1) JP5180285B2 (ja)
KR (1) KR101119612B1 (ja)
CN (1) CN101647000B (ja)
WO (1) WO2008118949A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101711388B1 (ko) 2013-01-28 2017-03-02 삼성전자주식회사 파이프라인에서 블럭을 스케줄하는 컴파일 방법 및 장치
US9250916B2 (en) * 2013-03-12 2016-02-02 International Business Machines Corporation Chaining between exposed vector pipelines
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US11645083B2 (en) * 2013-08-23 2023-05-09 Texas Instruments Incorporated Processor having adaptive pipeline with latency reduction logic that selectively executes instructions to reduce latency
US10942748B2 (en) 2015-07-16 2021-03-09 Nxp B.V. Method and system for processing interrupts with shadow units in a microcontroller
US10592246B2 (en) * 2017-07-12 2020-03-17 International Business Machines Corporation Low latency execution of floating-point record form instructions
CN110806899B (zh) * 2019-11-01 2021-08-24 西安微电子技术研究所 一种基于指令扩展的流水线紧耦合加速器接口结构

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6453235A (en) * 1988-05-25 1989-03-01 Nec Corp Risc type microprocessor
WO1995016955A1 (en) 1993-12-15 1995-06-22 Silicon Graphics, Inc. Load latency of zero for floating point load instructions using a load data queue
US5675758A (en) * 1994-11-15 1997-10-07 Advanced Micro Devices, Inc. Processor having primary integer execution unit and supplemental integer execution unit for performing out-of-order add and move operations
JP3183844B2 (ja) * 1996-03-29 2001-07-09 松下電器産業株式会社 可変パイプライン段数のデータ処理装置
WO1998002818A1 (en) * 1996-07-16 1998-01-22 Advanced Micro Devices, Inc. A data memory unit configured to store data in one clock cycle and method for operating same
JP3199035B2 (ja) * 1998-09-25 2001-08-13 日本電気株式会社 プロセッサ及びその実行制御方法
JP3204390B2 (ja) * 1998-09-29 2001-09-04 エヌイーシーマイクロシステム株式会社 マイクロコンピュータ
US20040193845A1 (en) * 2003-03-24 2004-09-30 Sun Microsystems, Inc. Stall technique to facilitate atomicity in processor execution of helper set
WO2004097626A2 (en) 2003-04-28 2004-11-11 Koninklijke Philips Electronics N.V. Parallel processing system
US7475222B2 (en) * 2004-04-07 2009-01-06 Sandbridge Technologies, Inc. Multi-threaded processor having compound instruction and operation formats

Also Published As

Publication number Publication date
US20080244234A1 (en) 2008-10-02
CN101647000A (zh) 2010-02-10
EP2142988A1 (en) 2010-01-13
KR20090132633A (ko) 2009-12-30
JP2010522940A (ja) 2010-07-08
KR101119612B1 (ko) 2012-03-22
CN101647000B (zh) 2014-12-10
WO2008118949A1 (en) 2008-10-02
US8127114B2 (en) 2012-02-28

Similar Documents

Publication Publication Date Title
US7793079B2 (en) Method and system for expanding a conditional instruction into a unconditional instruction and a select instruction
JP5431308B2 (ja) システムおよびパイプラインプロセッサにおける条件命令実行の加速のためのローカル条件コードレジスタの使用方法
JP5180285B2 (ja) プロセッサにおいて実行ステージに先立って命令を実行するためのシステムおよび方法
JP2597811B2 (ja) データ処理システム
JP4856646B2 (ja) 連続フロープロセッサパイプライン
JP5209933B2 (ja) データ処理装置
US7454598B2 (en) Controlling out of order execution pipelines issue tagging
US20060259742A1 (en) Controlling out of order execution pipelines using pipeline skew parameters
WO2015153121A1 (en) A data processing apparatus and method for executing a stream of instructions out of order with respect to original program order
US10649780B2 (en) Data processing apparatus and method for executing a stream of instructions out of order with respect to original program order
JP2004501471A (ja) 投機的な実行を用いたアウトオブオーダー・プロセッサにおける精密な例外を配達する機構
JP2004342087A (ja) 一連の処理命令をパイプライン処理する方法及び装置
US11182168B2 (en) Post completion execution in an out-of-order processor design
EP0753172A1 (en) Processing system and method of operation
US20080229080A1 (en) Arithmetic processing unit
CN110515656B (zh) 一种casp指令的执行方法、微处理器及计算机设备
CN101706715B (zh) 指令调度装置和方法
JP7102840B2 (ja) プロセッサコア、命令制御方法、プログラム
US7490226B2 (en) Method using vector component comprising first and second bits to regulate movement of dependent instructions in a microprocessor
JP2000099328A (ja) プロセッサ及びその実行制御方法
Shah Single Issue Instruction Dispatcher Based on Tomasulo’s Algorithm

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120731

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121031

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130110

R150 Certificate of patent or registration of utility model

Ref document number: 5180285

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

LAPS Cancellation because of no payment of annual fees