JPWO2008155839A1 - 命令処理装置 - Google Patents

命令処理装置 Download PDF

Info

Publication number
JPWO2008155839A1
JPWO2008155839A1 JP2009520193A JP2009520193A JPWO2008155839A1 JP WO2008155839 A1 JPWO2008155839 A1 JP WO2008155839A1 JP 2009520193 A JP2009520193 A JP 2009520193A JP 2009520193 A JP2009520193 A JP 2009520193A JP WO2008155839 A1 JPWO2008155839 A1 JP WO2008155839A1
Authority
JP
Japan
Prior art keywords
instruction
thread
unit
instructions
execution
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
JP2009520193A
Other languages
English (en)
Other versions
JP5093237B2 (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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2008155839A1 publication Critical patent/JPWO2008155839A1/ja
Application granted granted Critical
Publication of JP5093237B2 publication Critical patent/JP5093237B2/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
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • 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/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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

Landscapes

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

Abstract

本発明は、一時には1つのスレッドについて複数の命令を同時に保持してその保持している命令を解読するデコード部109と、デコード部109で解読された命令の処理を実行する、互いに異なるスレッドに属する複数の命令それぞれが表す処理を同時に実行可能な実行パイプライン220と、デコード部109によって解読済の命令を受け取り実行パイプライン220に渡す、その解読済の命令が、シンク属性の命令である場合には、その命令が実行可能な条件が整うまで保持した後で実行パイプライン220に渡すリザベーションステーション210と、デコード部109よりも前に簡易な解読によってその命令がシンク属性の命令であるか否かを確認するプリデコード部108と、シンク属性の命令よりも後続の命令についてはデコード部109への投入を中断して保持する命令バッファ104とを備えた。

Description

本発明は、処理を表す命令の連なりからなるスレッドを複数同時に実行する同時マルチスレッディング機能を備えた命令処理装置に関する。
処理を表す命令は、CPUに代表される命令処理装置の内部において、命令の取込み(フェッチ)、命令の解読(デコード)、命令の実行、実行結果の確定(コミット)等といった一連の段階を経て処理される。従来、命令処理装置におけるこのような各段階の処理を高速化するために、パイプラインと呼ばれる処理機構がある。パイプラインでは、フェッチやデコード等といった各段階の処理が、各々独立の小機構で行われる。これにより、例えばある命令の実行と同時並行に別の命令を実行すること等が可能となり、命令処理装置における処理が高速化される。
近年では、このようなパイプラインを複数備え、一層の処理の高速化が図られたスーパースカラと呼ばれる処理機構が一般化しつつある。そして、このスーパースカラにおける処理のさらなる高速化を実現する機能として、アウト・オブ・オーダ実行と呼ばれる機能がある。
図1は、スーパースカラにおけるアウト・オブ・オーダ実行を示す概念図である。
この図1には、スーパースカラにおけるアウト・オブ・オーダ実行の一例が示されている。
図1の例では、4つの命令が処理されている。各命令は、フェッチ(ステップS501)、デコード(ステップS502)、実行(ステップS503)、およびコミット(ステップS504)という4段階を経て処理される。ここで、フェッチ(ステップS501)、デコード(ステップS502)、およびコミット(ステップS504)は、4つの命令に対して、プログラム上での処理順で処理を実行するイン・オーダ実行によって行われる。そして、命令の実行(ステップS503)が、プログラム上での処理順によらずに実行するアウト・オブ・オーダ実行によって行われる。
4つの命令は、プログラム上での処理順でフェッチ(ステップS501)されてデコード(ステップS502)された後、その処理順にはよらず、実行(ステップS501)に必要な計算データ等(オペランド)が得られたものから実行(ステップS503)にうつされる。図1の例では、4つの命令についてオペランドが同時に得られ、各命令が互いに同時にスタートしている。
このように、アウト・オブ・オーダ実行によれば、複数の命令をプログラム上での処理順によらず同時並行に処理することができるので、命令処理装置における処理が高速化される。
実行(ステップS503)後には、4つの命令についてのコミット(ステップS504)がイン・オーダ実行によってプログラム上での処理順で行われる。この処理順での先行命令よりも先に実行(ステップS503)が終了した後続命令は、先行命令の実行(ステップS503)が終了するまでコミット待ちの状態となる。図1の例では、4つの命令に対する実行(ステップS503)が、4段に分けて図示されており、図中で上段のもの程プログラム上での処理順が早い。この図1の例では、最上段に図示され処理順が最も早い命令の実行(ステップS503)に最も時間がかかっているため、他の3つの命令についてはコミット待ちとなっている。
ところで、近年、命令処理装置で処理されるプログラムの多くは、一連の複数の命令からなり互いに同時並行に実行することが可能な処理単位(スレッド)を複数組み合わせて構成されている。
命令処理装置の多くは、命令を実行するために複数の演算器を備えている。そして、命令実行の際には、多くの場合、各サイクルにおいてそれら複数の演算器のうちの一部しか使用されないため、演算器の稼働率にはかなりの余裕がある。
そこで、演算器の稼働率を向上させる技術として、各サイクルにおいて、あるスレッドについては不使用となった演算器を別のスレッドに割り当てて複数のスレッドの命令を同時並行に処理する同時マルチスレッディング(SMT:Simultaneous Multi Threading)機能という技術が提案されている。
図2は、SMT機能の一例を概念的に示す図である。
この図2では、スレッドAおよびスレッドBという2種類のスレッドに属する命令がSMT機能で実行される様子が示されている。図2における縦軸方向に並ぶ4つの升それぞれは、命令処理装置において命令の実行を行う演算器を表わしており、各升に記載されている「A」および「B」の文字は、それぞれ、その升に対応する演算器で実行される命令が属するスレッド種類を示している。
また、横軸には命令処理装置におけるクロックサイクルが示されている。図2の例では、第1サイクル(ステップS511)では、上段の2個の演算器でスレッドAの命令が実行され下段の2個の演算器でスレッドBの命令が実行されている。第2サイクル(ステップS512)では、最上段と最下段の2個の演算器でスレッドAの命令が実行され中段の2個の演算器でスレッドBの命令が実行されている。また、第3サイクル(ステップS513)では、上側の3個の演算器でスレッドAの命令が実行され最下段の1個の演算器でスレッドBの命令が実行されている。
このように、SMT機能では、複数のスレッドの命令が各サイクルに同時並行で実行される。
図3は、SMT機能の一例を示す図2とは別の概念図である。
この図3の例では、スレッドAおよびスレッドBという2種類のスレッドに属する命令が交互にフェッチされデコードされた後、実行については、各命令の実行に必要なオペランドや演算器が得られた場合に、図2に示したように2種類のスレッド間で、命令の実行が同時並行で行われる。図3の例では、図中で斜線で示したタイミングT1において、2種類のスレッド間で、命令の実行が同時並行で行われている。
さらに、コミットについては、同一種類のスレッド間では、先行命令のコミットが全て終了するまで後続命令のコミットを行うことができないが、異なる種類のスレッド間では、先行命令のコミットの終了を待たずに後続命令のコミットが行われる。図3の例では、スレッドAについてフェッチされた命令のコミットの終了を待たずに、スレッドBについてフェッチされた命令のコミットが行われている。
以上、図2および図3を参照して説明したように、SMT機能によれば、複数種類のスレッド間で命令の実行が互いに同時並行で実行でき、異なる種類のスレッド間では、先行命令のコミットの終了を待たずに後続命令のコミットを行うことができるので、命令処理装置の処理効率の向上が図られる。
このようなSMT機能を備えた命令処理装置では、複数種類のスレッド間における命令の同時並行での実行を可能とするために、プログラム上でアクセスが指示されるいわゆるプログラム可視の構成要素がスレッド数分備えられている。一方で、演算器やデコード部については複数種類のスレッド間で共通に使用されることが多い。上述したように演算器については、複数の演算器を複数種類のスレッド間で振り分けて使用されるので、各演算器をスレッド数分備えなくても複数種類のスレッド間における命令の同時並行での実行が可能である。しかし、デコード部については、回路構成が複雑で回路規模が大きいために、上記の演算器とは異なり1つしか備えられないことが多い。この場合、デコード部は、複数種類のスレッド間で共通に使用されることとなり、一度には1つのスレッドの命令がデコードできるだけである。ここで、命令の中には、同一スレッド中での先行命令との同時実行が禁止されたものがある。従来、デコードされた命令が、そのような同時実行禁止の命令であった場合、その命令は、実行可能になるまでデコード部に留め置かれる。その結果、デコード部が、同時実行禁止の命令が属するスレッドに占有されてしまい、他のスレッドについてのデコードが実行出来なくなってしまう。
ここで、単一スレッドのプログラムを処理するシングルスレッディングタイプの命令処理装置についてであるが、同時実行禁止の命令を、デコード後に、所定のメモリ内に移してデコード部を後続命令に明け渡し、その同時実行禁止の命令については先行命令の実行結果が得られた後に実行するという技術が提案されている(例えば、特許文献1参照。)。この技術によれば、上記のアウト・オブ・オーダ実行が滞りなく行われる。しかし、この技術をSMT機能を有する命令処理装置に適用しても、同時実行禁止の命令と同じスレッドの後続の命令は、その命令についてコミットが終了するまでコミット待ちとなってしまうので、一時的にデコード部の占有が回避されても、いずれ、そのスレッドの命令によるデコード部の占有が起きてしまう。
また、1つのスレッドの命令が同時実行禁止の命令であった場合に、デコード後の同時実行禁止の命令を無効化してデコード部を他のスレッドに明け渡し、その同時実行禁止の命令についてはフェッチからやり直すという技術も提案されている(例えば、特許文献2参照。)。
特開平7−271582号公報 特開2001−356903号公報
しかしながら、上記の特許文献2に記載の技術では、同時実行禁止の命令については改めてフェッチからやり直すことになるので、その命令について一旦行われたフェッチやデコードが無駄になっていしまい、命令処理装置における処理の効率が低下してしまうという問題がある。
本発明は、上記事情に鑑み、命令を効率良く処理することができる命令処理装置を提供することを目的とする。
上記目的を達成する本発明の命令処理装置は、
複数の命令列を有するスレッドのうち、所定数の命令を同時にデコードするデコード部と、
上記デコード部が解読した命令を実行する命令実行部と、
上記デコード部が解読する命令が、所定の禁止条件により上記スレッドにおいて先行する他の命令との同時実行が禁止されるか否かを判定するプリデコード部と、
上記デコード部が解読した命令が、上記判定により同時実行が禁止される場合には、上記禁止が解除されるまで当その命令を保持する命令保持部と、
上記デコード部が解読した命令が、上記判定により同時実行が禁止される場合には、上記解読した命令の後続命令を上記デコード部に投入せずに保持する命令投入部とを有することを特徴とする。
ここで、本発明の命令処理装置において、
「上記命令投入部が、上記デコード部に命令を投入せずに保持した場合には、その命令が属するスレッドとは別のスレッドから入手した命令を上記デコード部に投入するものである」という形態は典型的な形態である。
この本発明の命令処理装置によれば、解読済の命令が同一スレッド中で先行する他の命令との同時実行が禁止される命令である場合には、その命令が上記命令保持部で保持され、同一スレッド中での後続命令については上記デコード部に投入されずに保持される。これにより、例えば、その同時実行が禁止される命令によって上記デコード部が占有されて、他のスレッドの命令の解読が阻害されるといった事態が回避される。また、上記後続命令については、上記命令投入部で保持されるので、その後続の命令に対する入手処理が無駄にならず効率的である。つまり、この本発明の命令処理装置によれば、命令を効率良く処理することができる。
また、本発明の命令処理装置において、
「上記命令投入部が、上記同時実行が禁止される命令よりも上記スレッド中で後続の命令について上記デコード部に投入せずに保持している場合に、その同時実行が禁止される命令が実行可能な条件が整ったことを表す情報を入手してその保持している命令について上記デコード部への投入を再開するものである」という形態は好ましい形態である。
この好ましい形態の命令処理装置によれば、上記後続命令についての投入の再開を、上記情報を手掛かりにすることで一層確実に行うことができる。
また、本発明の命令処理装置において、
「上記プリデコード部が、命令に、上記同時実行が禁止される命令であるか否かを表すフラグを付すものであり、
上記命令投入部が、上記フラグが付された命令を上記デコード部への投入用に、スレッド毎に、スレッド中の順序と同じ順序で積んでおく命令バッファ部分を備え、その命令バッファ部分に積まれている命令を、積まれている順に上記デコード部へ投入する、上記フラグが上記同時実行が禁止される命令であることを示している命令の後の命令については投入せずに保持するものである」という形態も好ましい形態である。
この好ましい形態の命令処理装置によれば、上記前解読部によって命令に付されるフラグを手掛かりにすることで、上記所定タイプの命令の後続の命令についての投入を一層確実に中断することができる。
また、本発明の命令処理装置において、
「上記命令保持部が、上記同時実行が禁止される命令を複数保持していてそれら複数の命令について実行可能な条件が同時に整った場合には、それら複数の命令のうち先に保持した命令を先に上記実行部に渡すものである」という形態も好ましい。
上述したように、本発明の命令処理装置では、あるスレッドについて、上記命令保持部に同時に保持される、上記同時実行が禁止される命令の数は1つである。しかし、複数のスレッドについて、この上記同時実行が禁止される命令が命令保持部に保持される可能性はある。この好ましい形態の命令処理装置によれば、このような場合、上記複数の命令について実行可能な条件が同時に整ったときには、先に保持した命令から優先的に上記実行部に渡される。これにより、あるスレッドにおける上記所定タイプの命令が命令保持部にいつまでも残されるといった不具合が確実に回避されることになる。
本発明によれば、命令を効率良く処理することができる命令処理装置を得ることができる。
スーパースカラにおけるアウト・オブ・オーダ実行を示す概念図である。 SMT機能の一例を概念的に示す図である。 SMT機能の一例を示す図2とは別の概念図である。 命令処理装置の一実施形態であるCPUを示すハードウェア構成図である。 図4のCPU10におけるシンク属性の命令に係わる処理を示す概念図である。 図4のCPU10を、シンク属性の命令に係わる処理について説明するために一部を簡略化し、一部を機能ブロックで示した図である。 命令バッファ104が、シンク属性の命令までデコード部109へ投入し、後続の命令については投入を中断し保持する様子を示す図である。 リザベーションステーションが有するエントリの詳細を示す図である。 CSE127において、レジスタの更新が、イン・オーダ実行により行われる仕組みを示す概念図である。 非オールデストタイプの命令について、シンクフラグのリセットが可能か否かをチェックするためのチェック回路を示す図である。 調停回路を示す図である。 リードポートが2個備えられた例を示す図である。 本実施形態において、リードポートが1個備えられている様子を示す図である。 オールデストタイプの命令について、シンクフラグのリセットが可能か否かをチェックするためのチェック回路を示す図である。
以下図面を参照して命令処理装置の一実施形態について説明する。
図4は、命令処理装置の一実施形態であるCPUを示すハードウェア構成図である。
この図4に示すCPU10は、2種類のスレッドの命令を同時に処理するSMT機能を有する命令処理装置であり、このCPU10では、次の7つのステージの処理が順次に行われる。即ち、2種類のスレッドの命令を交互にイン・オーダ実行でフェッチするフェッチステージ(ステップS101)、フェッチされた命令が表している処理をイン・オーダ実行でデコードするデコードステージ(ステップS102)、デコードされた命令を、その命令の処理の実行に要する演算器に接続されている後述のリザベーションステーションにイン・オーダ実行で格納し、その格納した命令を演算器にアウト・オブ・オーダ実行で引き渡すディスパッチステージ(ステップS103)、リザベーションステーションに格納された命令の実行に必要なオペランドをレジスタからアウト・オブ・オーダ実行で読み出すレジスタ読出しステージ(ステップS104)、リザベーションステーションに格納された命令をレジスタから読み出されたオペランドを使ってアウト・オブ・オーダ実行で実行する実行ステージ(ステップS105)、CPU10外のメモリへの実行結果の記録等をアウト・オブ・オーダ実行で行うメモリステージ(ステップS106)、および、実行結果に従ってオペランド格納用のレジスタ等を更新してその実行結果をプログラムから可視の状態にするコミットをイン・オーダ実行で行うコミットステージ(ステップS107)という7つのステージの処理が順次に行われる。
以下、各ステージについて詳しく説明する。
フェッチステージ(ステップS101)では、2種類のスレッド(スレッド0,スレッド1)それぞれについて用意されている2つのプログラムカウンタ101が、各スレッドの記載順で何番目の命令を取り込むかを指示する。そして、各プログラムカウンタ101が命令の取込み(フェッチ)を指示するタイミングで、命令フェッチ部102が、命令1次キャッシュ103からその指示された命令を命令バッファ104に取り込む。2つのプログラムカウンタ101は交互に動作し、1度のフェッチでは、いずれか一方のプログラムカウンタ101が、対応するスレッドの命令の取込みを指示する。また、本実施形態では、1回のフェッチで、8個の命令の取込みがイン・オーダ実行によりスレッド中の処理順で行われる。ここで、イン・オーダ実行による処理順がスレッド中での命令の記載順から分岐する場合がある。このCPU10は、このような分岐の有無、および、スレッド中における分岐先を予測する分岐予測部105を備えている。そして、命令フェッチ部102は、その分岐予測部105の予測結果を参照してフェッチを行う。
ここで、本実施形態のCPU10で実行されるプログラムは、不図示の外部メモリに格納されている。そして、CPU10は、このCPU10に内蔵され2次キャッシュ106に接続されたシステムバスインタフェース107を介してその外部メモリ等と接続されている。プログラムカウンタ101が命令のフェッチを指示すると、命令フェッチ部102が、分岐予測部105の予測結果を参照して命令1次キャッシュ103に8個の命令を要求する。すると、要求された8個の命令が、外部メモリから、システムバスインタフェース107と2次キャッシュ106とを経由して命令1次キャッシュ103に入力され、命令1次キャッシュ103がそれらの命令を命令バッファ104に引き渡す。このとき、本実施形態では、その引渡しに当たって、プリデコード部108が各命令に対して簡易的なデコード(プリデコード)を施す。そして、プリデコード部108は、命令バッファ104に引き渡される各命令に、そのプリデコードによる後述する結果を表すフラグを付す。
デコードステージ(ステップS102)では、命令バッファ104が、命令フェッチ部102によって取り込まれ保持している8個の命令のうち4個の命令をデコード部109にイン・オーダ実行で投入する。デコード部109は、投入された4個の命令それぞれをイン・オーダ実行でデコードする。また、デコードの際には、各命令に対して、命令識別子(IID:Instruction IDentification)として「0」から「63」の番号が、各スレッドについてデコード順に割り振られる。ここで、本実施形態では、スレッド0の命令がデコードされる際には、「0」から「31」のIIDが割り振られ、スレッド1の命令がデコードされる際には、「32」から「63」のIIDが割り振られる。このとき、デコード部109は、スレッド0用に32個、スレッド1用に32個の合計64個のエントリを有する後述のコミットスタックエントリ(CSE)127の、デコード対象の命令が属するエントリ群における空きエントリに、デコード対象の命令に割り振ったIIDをセットする。
デコード部109が、各々IIDが割り振られたデコード済みの4個の命令それぞれについて、各命令の処理の実行に要する演算器を決定する。そして、デコード済みの各命令を、その命令の処理の実行に要する演算器に接続されているリザベーションステーションにイン・オーダ実行で格納する。
リザベーションステーションは、複数のデコード済みの命令を保持し、ディスパッチステージ(ステップS103)では、各命令をアウト・オブ・オーダ実行で演算器に引き渡す。即ち、リザベーションステーションは、スレッド中の処理順に係わり無く、処理の実行に必要なオペランドと演算器とが確保された命令から演算器に引き渡す。このとき、引渡し可能な命令が複数存在する場合には、それら複数の命令のうち先にデコードされた命令から演算器に引き渡す。本実施形態のCPU10には、次の4種類のリザベーションステーションが備えられている。即ち、アドレス生成用リザベーションステーション(RSA:Reservation Station for Address generation)110、整数演算用リザベーションステーション(RSE:Reservation Station for fix point Execution)111、浮動小数点演算用リザベーションステーション(RSF:Reservation Station for Floating point)112、および、分岐用リザベーションステーション(RSBR:Reservation Station for BRanch)113の4種類のリザベーションステーションが備えられている。ここで、RSA110とRSE111とRSF112とは、それぞれ対応する演算器に、オペランド格納用のレジスタを介して接続されている。これに対し、RSBR113は、上記の分岐予測部105に接続されており、分岐予測部105での予測結果の確定待ちや、予測失敗の場合の命令の再フェッチ指示等を行う役割を担っている。
レジスタ読出しステージ(ステップS104)では、レジスタ内のオペランドがアウト・オブ・オーダ実行で読み出される。即ち、スレッド中の処理順に係わり無く、命令を演算器に引き渡したリザベーションステーションに接続されているレジスタ内のオペランドが読み出され、対応する演算器に渡される。CPU10には、整数系レジスタ(GPR:General Purpose Register)114と浮動小数点系レジスタ(FPR:Floating Point Register)116との2種類のレジスタが備えられている。ここで、GPR114およびFPR116は、両方ともプログラム可視のレジスタであり、スレッド0とスレッド1とのそれぞれについて備えられている。また、GPR114およびFPR116それぞれには、命令の実行結果を各レジスタの更新のときまで保持するバッファが接続されている。GPR114には、整数系レジスタ更新バッファ(GUB:GPR Update Buffer)115が接続され、FPR116には、浮動小数点系レジスタ更新バッファ(FPR:FPR Update Buffer)116が接続されている。
アドレス生成および整数演算は、整数のオペランドを使って行われるので、GPR114は上記のRSA110とRSE111とに接続されている。また、本実施形態では、GPR114の更新前の段階のGUB115に保持されているオペランドを使った整数演算も許可されているので、このGUB115もRSA110とRSE111とに接続されている。また、浮動小数点演算は、浮動小数点形式のオペランドを使って行われるので、FPR116は上記のRSF112に接続されている。また、本実施形態では、FUB117に保持されているオペランドを使った浮動小数点演算も許可されているので、FUB117もRSF112に接続されている。
また、本実施形態のCPU10には、2つのアドレス生成演算器(EAGAとEAGB:Effective Address Generation units A and B)118,119、2つの整数演算器(EXAとEXB)120,121、および、2つの浮動小数点演算器(FLAとFLB)122,123が備えられている。そして、GPR114とGUB115は、整数のオペランドを使うEAGA118とEAGB119とEXA120とEXB121とに接続されており、FPR116とFUB117は、浮動小数点形式のオペランドを使うFLA122とFLB123とに接続されている。
実行ステージ(ステップS105)では、演算器によって命令の実行がアウト・オブ・オーダ実行で行われる。即ち、スレッド中の処理順に係わり無く、上記の複数種類の演算器のうち、リザベーションステーションから命令が渡され、レジスタから演算に必要なオペランドが渡された演算器が、その渡された命令の処理を、その渡されたオペランドを使って実行する。また、実行ステージ(ステップS105)では、ある演算器の実行中に、別の演算器に命令とオペランドの引渡しが行われたときには、それらの演算器が同時並行に処理を実行する。
この実行ステージ(ステップS105)では、EAGA118に、RSA110からアドレス生成処理の命令が渡され、GPR114から整数のオペランドが渡されると、EAGA118は、その整数のオペランドを使ってアドレス生成処理を実行する。また、EXA120に、RSE111から整数演算処理の命令が渡され、GPR114から整数のオペランドが渡されると、EXA120は、その整数のオペランドを使って整数演算処理を実行し、FLA122に、RSF112から浮動小数点演算処理の命令が渡され、FPR116から浮動小数点形式のオペランドが渡されると、FLA122は、その浮動小数点形式のオペランドを使って浮動小数点演算処理を実行する。
EAGA118およびEAGB119の実行結果は、システムバスインタフェース107を介した外部メモリへのアクセスに使われるので、これらの演算器は、外部メモリからのデータの読出し口であるフェッチポート124と、書込み口であるストアポート125とに接続されている。EXA120とEXB121の実行結果は、GPR114を更新するための中継バッファGUB115に接続され、さらにメモリの更新のための中間バッファの役割を果たす上記のストアポート125に接続される。また、FLA122とFLB123の実行結果は、FPR116を更新するための中間バッファFUB117に接続され、さらにメモリの更新のための中間バッファの役割を果たす上記のストアポート125に接続される。
メモリステージ(ステップS106)では、実行結果の外部メモリへの記録等といった外部メモリへのアクセスがアウト・オブ・オーダ実行で行われる。即ち、そのようなアクセスを要する処理の命令が複数あった場合、スレッド中の処理順に係わり無く実行結果が得られた順でアクセスが行われる。このメモリステージ(ステップS106)では、アクセスは、データ1次キャッシュ126、2次キャッシュ106、およびシステムバスインタフェース107を介して、フェッチポート124やストアポート125によって行われる。また、外部メモリへのアクセスが終了すると、フェッチポート124やストアポート125からCSE127に不図示の接続線を介して実行完了通知が送られる。
また、EXA120、EXB121、FLA122、およびFLB123は、煩雑さを避けるために図示が省略された接続線でCSE127に接続されている。そして、各演算器で実行される処理が、外部メモリへのアクセスを必要とせず各演算器での実行の終了をもって完了する処理である場合には、実行の終了時に各演算器からCSE127に実行完了通知が送られる。
コミットステージ(ステップS107)では、CSE127が、GPR114、FPR116、プログラムカウンタ101、および、CPU10において上述した処理以外の他の処理に使われるオペランドを保持するコントロールレジスタ128を、イン・オーダ実行で次のように更新する。上記の演算器等からCSE127に送られてくる実行完了通知には、その実行完了通知に対応する命令のIIDと、その命令の終了後の更新対象のレジスタ等といった実行結果の確定(コミット)に必要な情報(コミット情報)とが記載されている。CSE127は、実行完了通知が送られてくると、CSE127が有する64個のエントリのうち、実行完了通知に記載のIIDと同じIIDがセットされているエントリに、その実行完了通知に記載のコミット情報を格納する。そして、既に格納されている各命令に対応するコミット情報に従ったレジスタの更新を、イン・オーダ実行により、スレッド中の処理順に従って行う。また、このコミットが終了すると、上記のリザベーションステーションに保持されていた、そのコミットに対応する命令が消去される。
CPU10は、概略、このように構成され、以上に説明した7つのステージに沿って動作する。
ところで、CPU10で実行される命令の中には、スレッド中で先行する命令の処理の実行結果をオペランドとして使用するために、同一スレッド中で先行する他の命令との同時実行が禁止された命令(シンク属性の命令)がある。CPU10における本実施形態としての特徴は、このシンク属性の命令に係わる処理にある。以下、この点に注目して説明を続ける。
図5は、図4のCPU10におけるシンク属性の命令に係わる処理を示す概念図である。
この図5には、ステップS201からステップS206までの間に、スレッド0に属する3つの命令とスレッド1に属する3つの命令とが交互にフェッチされ、各ステップでフェッチされた命令が処理される様子が示されている。ここで、この図5の例では、ステップS203でフェッチされるスレッド0の2つ目の命令がシンク属性の命令となっている。本実施形態のCPU10では、このシンク属性の命令は、図5に示すように、デコード後に、上記のリザベーションステーションにおいて、ステップS201で処理される先行の命令のコミットが終了して必要なオペランドが得られるまで保持される。
さらに、本実施形態のCPU10では、上記のフェッチステージ(ステップS101)において、プリデコード部108が、命令バッファ104に引き渡される各命令に対してプリデコードを施すことにより、その命令がシンク属性の命令であるか否かを判定しその命令にその判定結果を表すフラグ(シンクフラグ)を付す。そして、命令バッファ104は、渡された命令に付されたシンクフラグがシンク属性であることを示していた場合に、同一スレッド中でのそのシンク属性の命令に後続する命令のデコード部109への投入を中断してそれら後続の命令を保持する。この図5の例では、ステップS205以降に処理されるスレッド0の命令が命令バッファ104で保持されることとなる。
ここで、本実施形態のCPU10では、回路構成が複雑で回路規模が大きいデコード部109は、図4に示すように1つだけしか備えられておらず、CPU10は、2種類のスレッド間でこのデコード部109が共通に使用される構成になっている。
しかしながら、本実施形態では、一方のスレッドの命令がシンク属性の命令であっても、そのシンク属性の命令がリザベーションステーションで保持され、後続の命令が命令バッファ104で保持されるので、デコード部109がそのシンク属性の命令が属するスレッドから開放され、もう一方のスレッドに明け渡される。これにより、図5に示すように、スレッド0での処理が滞っても、スレッド1での命令が滞りなく処理される。
以下、このシンク属性の命令に係わる処理について、図4の説明と一部重複する部分があるが詳細に説明する。
図6は、図4のCPU10を、シンク属性の命令に係わる処理について説明するために一部を簡略化し、一部を機能ブロックで示した図である。
尚、この図6では、図4のブロックと一対一に対応する構成要素については図4と同じ番号を付して示している。
CPU10は、スレッド0用プログラムカウンタ101_0とスレッド1用プログラムカウンタ101_1との2つのプログラムカウンタを備えており、これら2つのプログラムカウンタから、命令のフェッチを実行する旨の指示が交互に出される。
命令フェッチ102は、2つのプログラムカウンタからの指示に応じて、図4の命令1次キャッシュ103を介して命令を、命令バッファ109に取り込む。このとき、プリデコード部108が、各命令がシンク属性の命令であるか否かを判定し、各命令にその判定結果を示すシンクフラグを添付する。
命令バッファ104は、この取り込まれた命令のデコード部109への投入を制御する役割も兼ねており、同一スレッドの命令について、シンク属性の命令まではデコード部109へ投入するが、そのシンク属性の命令に後続する命令については投入を中断し保持する。
図7は、命令バッファ104が、シンク属性の命令までデコード部109へ投入し、後続の命令については投入を中断し保持する様子を示す図である。
この図7に示すように、命令バッファ104は、デコード前の命令が8個、スレッド中の処理順と同じ順序で保持されるエントリ104aを複数段有している。
上述したように、命令フェッチ部102による1回のフェッチで8個の命令が取り込まれる。そして、それらの命令が取り込まれる際には、プリデコード部108によって上記のプリデコードが実行され、各命令にシンク属性か否かを示すフラグが付される。各命令のフラグは、命令バッファ104が各エントリ毎に有するフラグ格納部104bに、8個の命令とフラグとが一対一に対応付けられて格納される。
命令バッファ104は、エントリ104aに格納されている命令を、順次に4個、デコード部109に投入する。このとき、投入対象の命令の中に、シンク属性を示すフラグが付されたものがあった場合には、そのスレッドについてはその命令までで投入を中断し、後続する命令をエントリ104a中に保持する。図7の例では、あるスレッドについて、4個の命令をデコード部109に投入する際に、2番目の命令にシンク属性を示すフラグが付されており、3番目以降の命令の投入が中断されている。デコード部109は、1回のデコードで4個の命令のデコードが可能であるが、図7の例のように、命令の投入が途中で中断された場合には、投入された分だけデコードを行う。
図6に戻って、説明を続ける。
デコード部109は、デコード済みの命令を、その命令がシンク属性であるか否かに関わらずリザベーションステーション210に渡す。
ここで、デコード部109は、上述したように、デコード済みの命令に対して、「0」から「63」のIIDを、各スレッドでのデコード順に割り振る。そして、デコード済みの命令をIIDと共にリザベーションステーション210に渡す。また、本実施形態では、CSE12は、上述したように、スレッド0用の32個のエントリ群127_0と、スレッド1用の32個のエントリ群127_1とを有している。そして、デコード部109は、デコード済みの命令をリザベーションステーション210に渡す際には、CSE127における、デコード対象の命令が属するスレッド用のエントリ群における空きエントリに、デコード対象の命令に割り振ったIIDをセットする。
ここで、この図6では、図4に示す4種類のリザベーションステーションが簡略化されて1つのボックスで示されている。リザベーションステーションは、デコード済みの命令が1個ずつ格納されるエントリを複数備えている。
図8は、リザベーションステーションが有するエントリの詳細を示す図である。
リザベーションステーションのエントリの構造は、図4に示す4種類のリザベーションステーションの間で共通であり、この図8では、図4に示すRSE111とRSA110とを代表例としてエントリの構造が示されている。
図8に示すように、各エントリは、そのエントリに記載されている情報が有効な情報であるか否かを示すバリッドタグ110a,111aと、デコード済みの命令が格納される命令タグ110b,111bと、その命令タグに格納されている命令が後述のオールデストタイプの命令であるか否かを示すオールデストタグ110c,111cと、命令タグに格納されている命令がシンク属性の命令であって同一スレッド中の先行命令のコミット待ちというシンク状態にあるか否かを示す上記のシンクフラグが格納されているシンクタグ110d,111dと、命令タグに格納されている命令に割り振られたIIDを示すIIDタグ110e,111eと、命令タグに格納されている命令が属するスレッドの種類を示すスレッドタグ110f,111fとを有している。
また、各エントリの内容は、そのエントリに対応する命令のコミットが終了した時点で消去される。
図8の例では、シンク属性の命令の一例として、SPARC−V9アーキテクチャで定義されるrd命令とmembar命令とが示されている。rd命令は、プロセッサの状態を示す情報を格納するレジスタであるPSTAT(Processor STATe)レジスタの内容を読み出す命令であって、先行する命令のコミットが終了してPSTATの内容が確定してから実行が可能となる命令である。rd命令は、実行にあたっては整数演算器が使用されるので、デコード後は、図8に示すように、整数演算器に接続されているRSE111に格納される。
また、membar命令は、このmembar命令に先行するメモリアクセスする全ての命令を、membar命令に続く後続命令が追い抜いて処理を行わないように順序性を守るための命令である。このmembar命令は、アドレス生成用リザベーションステーションRSA110内で最も古い命令(オールデスト)となってから実行されるオールデストタイプの命令である。membar命令は、実行にあたってはアドレス生成演算器が使用されるので、デコード後は、図8に示すように、アドレス生成演算器に接続されているRSA110に格納される。
再び、図6に戻って説明を続ける。
リザベーションステーション210は、シンクタグ110c,111d内のシンクフラグを確認し、シンクフラグがシンク状態が解消されていることを示している場合には、その命令は、シンク属性ではないか、あるいは、シンク属性であってもシンク状態が解消されて実行可能となっていることを意味するので、その命令が、そのリザベーションステーションに対応する実行パイプライン220に投入される。
また、その命令が、オールデストタイプの命令である場合には、シンクフラグがシンク状態を示している命令で、オールデストタイプであれば先行命令が存在しているとき、リザベーションステーション210に保持され、上述したように、同一スレッド中で後続する命令については命令バッファ104に保持される。同一スレッド中で先行する命令がリザベーションステーション210内に存在しない場合に限り、そのリザベーションステーションに対応する実行パイプライン220に投入される。
また、その命令が、オールデストタイプの命令である場合には、同一スレッド中で先行する命令がリザベーションステーション210内に存在しない場合に限り、そのリザベーションステーションに対応する実行パイプライン220に投入される。シンクフラグがシンク状態を示している命令、および、シンクフラグがシンク状態が解消されていることを示していてもオールデストタイプであって先行命令が存在している命令は、リザベーションステーション210に保持され、上述したように、同一スレッド中で後続する命令については命令バッファ104に保持される。
図6の実行パイプライン220それぞれは、図4に示す6種類の演算器それぞれに相当する。そして、実行パイプライン220での実行が終了すると、実行結果がレジスタ更新バッファ230に格納される。このレジスタ更新バッファ230は、図4に示すGUB115およびFUB117に相当する。また、実行パイプライン220での実行終了時には、CSE127に向けて実行完了通知が送られる。上述したように実行完了通知には、その実行完了通知に対応する命令のIIDと、その命令のコミットに必要なコミット情報とが記載されている。CSE127は、実行完了通知が送られてくると、CSE127が有する64個のエントリのうち、実行完了通知に記載のIIDと同じIIDがセットされているエントリに、その実行完了通知に記載のコミット情報を格納する。
また、CSE127は、各エントリ群127_0,127_1に格納されている各命令に対応するコミット情報に従ったレジスタの更新を、イン・オーダ実行により、スレッド中の処理順に従って行う命令コミット部127_3を有している。
図9は、CSE127において、レジスタの更新が、イン・オーダ実行により行われる仕組みを示す概念図である。
CSE127が有する上記の命令コミット部127_3は、スレッド0において次にコミットするべき命令のIIDが記載されるスレッド0用アウトポインタ127_3aと、スレッド1において次にコミットするべき命令のIIDが記載されるスレッド1用アウトポインタ127_3bと、実際にコミットする命令を決定するCSE−ウィンドウ127_3cとを有している。
CSE−ウィンドウ127_3cは、スレッド0用アウトポインタ127_3aのIIDがセットされているエントリと、スレッド1用アウトポインタ127_3bのIIDがセットされているエントリとのうちいずれかを選んで、上記のコミット情報が格納されているエントリに対応する命令をコミット対象に決定する。両方のエントリにコミット情報が格納されている場合には、基本的にコミット対象のスレッドを交互に切り替える。
このようにコミット対象の命令が決定されると、命令コミット部127_3は、図6に示すように、その命令が属するスレッドに対応するプログラムカウンタおよびコントロールレジスタを更新する。さらに、命令コミット部127_3は、図4のGPR114やFPR116に相当する、スレッド毎に設けられているレジスタ240_0,240_1のうち、コミット対象の命令が属するスレッドに対応するレジスタを更新するようにレジスタ更新バッファ230に指示を出す。さらに、CSE127の各エントリ群127_0,127_1に保持されているそのコミット対象の命令が消去される。
CSE−ウィンドウ127_3cは、スレッド0用アウトポインタ127_3aのIIDがセットされているエントリと、スレッド1用アウトポインタ127_3bのIIDがセットされているエントリとのうち、上記のコミット情報が格納されているエントリに対応する命令をコミット対象に決定する。また、両方のエントリにコミット情報が格納されている場合には、IIDが古い方の命令をコミット対象に決定する。
このようにコミット対象の命令が決定されると、命令コミット部127_3は、図6に示すように、その命令が属するスレッドに対応するプログラムカウンタおよびコントロールレジスタを更新する。さらに、命令コミット部127_3は、図4のGPR114やFPR116に相当する、スレッド毎に設けられているレジスタ240_0,240_1のうち、コミット対象の命令が属するスレッドに対応するレジスタを更新するようにレジスタ更新バッファ230に指示を出す。さらに、上記のリザベーションステーション210に保持されているそのコミット対象の命令が消去される。
本実施形態では、シンク状態のシンクフラグを有する命令について、そのシンクフラグのリセットが可能かどうか、CSE127によるこのようなコミットが終了する度にチェックされる。このチェックは、スレッド0とスレッド1それぞれについて行われ、シンクフラグのリセットが可能であれば、そのシンクフラグがリセットされる。
ここで、本実施形態では、シンクフラグのリセットが可能か否かのチェックするためのチェック回路が設けられているが、そのチェック回路が、例えば上記のmembar命令のようなオールデストタイプの命令と、rd命令のような非オールデストタイプ命令とで異なっている。
以下では、まず、非オールデストタイプの命令についてのチェック回路を、リザベーションステーション210のうち、図4のRSE111を代表例に挙げて、RSE111に保持されている非オールデストタイプの命令についてのチェック回路について説明する。
図10は、非オールデストタイプの命令について、シンクフラグのリセットが可能か否かをチェックするためのチェック回路を示す図である。
本実施形態では、あるスレッドにおいてシンク属性の命令がリザベーションステーションに投入された場合、そのスレッド中の後続の命令についてはリザベーションステーションへの投入が中断される。従って、リザベーションステーションには、シンク属性の命令は必ず1個しか投入されないこととなる。そこで、この図10に示すチェック回路111_1では、まず、チェック対象のスレッドについて、現在シンクフラグがシンク状態を示している1つの命令のIIDが選択される。チェック回路111_1は、この1つの命令のIIDを選択するIID選択回路111_1aを備えている。
IID選択回路111_1aは、各エントリについて、図8に示すバリッドタグ111aの内容と、シンクタグ111dの内容と、IIDタグ111eの内容と、スレッドタグ111fが示すスレッドがチェック対象のスレッドであるか否かとのANDを求めるAND演算子と、各エントリのAND演算子の結果のORを求めるOR演算子とで構成されている。このIID選択回路111_1aによって、チェック対象のスレッドに属し、エントリの内容が有効で、現在シンクフラグがシンク状態にあることを示している1つの命令のIIDが求められる。
そして、この図10に示すチェック回路111_1では、IID選択回路111_1aで得られたIIDが、CSE127におけるそのスレッド用のアウトポインタに記載されている、次にコミットするべき命令のIIDとマッチしているか否かが、マッチ確認回路111_1bにおいて確認される。マッチ確認回路111_1bからは、両者がマッチした場合、即ち、そのIIDの命令に同一スレッド中で先行する命令のコミットが終了しており、そのIIDの命令の実行が可能となっている場合に「1」が出力される。
ここで、上記のIID選択回路111_1aでは、「0」のIIDに対応するエントリが無効であるにも係わらず、シンク状態にある命令のIIDとして「0」のIIDが選択されてしまう可能性がある。このとき、アウトポインタに記載されているIIDが「0」であったとすると、無効なIIDが次にコミットするべき命令のIIDとマッチしていると確認されてしまう。
そこで、この図10に示すチェック回路111_1には、このような事態を避けるため、シンク状態にある命令に対応するエントリが有効であることを確認するエントリ有効性確認回路111_1cが備えられている。このエントリ有効性確認回路111_1cは、各エントリについて、図8に示すバリッドタグ111aの内容と、シンクタグ111dの内容と、スレッドタグ111fが示すスレッドがチェック対象のスレッドであるか否かとのANDを求めるAND演算子と、各エントリのAND演算子の結果のORを求めるOR演算子とで構成されている。このエントリ有効性確認回路111_1cによって、チェック対象のスレッドに、エントリの内容が有効で、現在シンクフラグがシンク状態にある1つの命令が確かに存在することが確認される。エントリ有効性確認回路111_1cからは、そのような命令が確かに存在する場合に「1」が出力される。
そして、この図10に示すチェック回路111_1には、マッチ確認回路111_1bの確認結果と、エントリ有効性確認回路111_1cの確認結果のANDを求める、リセット決定用AND演算子111_1dが備えられている。そして、両者の確認結果がともに「1」であった場合に、リセット決定用AND演算子111_1dから「1」が出力される。
本実施形態では、このリセット決定用AND演算子111_1dから「1」が出力された場合に、RSE111内の、チェック対象のスレッドに係る全エントリのシンクフラグのリセットが可能であると決定される。
ここで、本実施形態では、シンクフラグのリセットが可能であるか否かが、スレッド0とスレッド1それぞれについてチェックされる。そのため、これら2種類のスレッドについて同時にシンクフラグのリセットが可能であると決定される場合がある。そこで、本実施形態では、このような場合に、どちらのスレッドのシンクフラグからリセットするかを決定する調停回路が設けられている。
図11は、調停回路を示す図である。
この図11に示す調停回路111_2には、スレッド0についてシンクフラグのリセットが可能であり、かつ、スレッド1についてシンクフラグのリセットが可能である場合に、調停を要することを表す値「1」を出力する第1の演算子111_2aと、調停を要しスレッド1に対応するエントリがRSE111内で最も古い場合に「1」を出力する第2の演算子111_2bと、調停を要しスレッド0に対応するエントリがRSE111内で最も古い場合に「1」を出力する第3の演算子111_2cと、スレッド0のシンクフラグがリセット可能となっており第3の演算子111_2cが「1」を出力した場合にスレッド0のシンクフラグのリセットを決定する第4の演算子111_2dと、スレッド1のシンクフラグがリセット可能となっており第2の演算子111_2bが「1」を出力した場合にスレッド1のシンクフラグのリセットを決定する第5の演算子111_2eとを備えている。この調停回路111_2により、調停を要する場合には、RSE111内で古い方のスレッドからシンクフラグのリセットが決定されることとなる。また、この調停回路111_2では、調停を要しない場合には、必ずリセット対象となっているスレッドについてシンクフラグのリセットが決定されることとなる。
このように、調停回路111_2でリセット対象のスレッドが決定されると、同時に、命令バッファ104に対して、そのスレッドについてのデコード部109への命令の投入の再開が指示される。
ところで、ここに説明したRSE111におけシンクフラグのリセットと命令の投入の再開のプロセスは、上記のrd命令に適用される。上述したようにrd命令では、プロセッサの状態を示す情報を格納するレジスタであるPSTATレジスタの内容が読み出される。ここで、CPU10では、PSTATレジスタは、2種類のスレッドそれぞれについて設けられている。
ここで、本実施形態とは異なり、図11に示す調停回路111_2が備えられていない場合、上記のように2種類のスレッドが同時にシンクフラグのリセット対象となったときの2つのrd命令の実行に対応する最も単純な方法は、PSTATレジスタからデータを読み出すリードポートをスレッド数分すなわち2個備えることである。
図12は、リードポートが2個備えられた例を示す図である。
この図12の例では、スレッド0用のPSTATレジスタ501とスレッド1用のPSTATレジスタ502との2つのPSTATレジスタが設けられており、それぞれのPSTATレジスタについて、スレッド0用のリードポート503とスレッド1用のリードポート504とが設けられている。PSTATレジスタは、複数のレジスタ部分で構成されており、各リードポートは、各スレッドのrd命令の実行時には、rd命令中で指定されているリードアドレスに対応するレジスタ部分のデータの読出しを、図12に示すように各々独立に実行する。ここで、このようなリードポートは回路規模が大きく、この図12に示すようにリードポートをスレッド数分設けてしまうとCPU全体における回路規模の増大を招いてしまう。
しかしながら、本実施形態では、図11に示す調停回路111_2が備えられており、1回に実行されるrd命令は、2種類のスレッドのうちのいずれか一方のみである。そこで、本実施形態では、リードポートの数を1つに抑えて、その1つのリードポートが2種類のスレッドについて共通に使用されるようになっている。
図13は、本実施形態において、リードポートが1個備えられている様子を示す図である。
この図13に示すように、本実施形態では、まず、PSTATレジスタ250における複数のレジスタ部分251それぞれが、スレッド0用のレジスタ部分251_0とスレッド1用のレジスタ部分251_1とで構成されている。そして、このPSTATレジスタ250に対して、1個のリードポート260が備えられている。
本実施形態では、RSE111においてスレッド0のrd命令とスレッド1のrd命令とが同時にシンクフラグのリセット対象となった場合、図11に示す調停回路111_2において、いずれか一方のスレッドのrd命令について、シンクフラグのリセットが決定される。その後このrd命令では、図4に示す整数演算器で上記のリードアドレスが求められ、そのリードアドレスがリードポート260に入力される。また、PSTATレジスタ250では、各レジスタ部分251_1において、アクセス可能なレジスタ部分として、図11に示す調停回路111_2において決定されたスレッドに対応するレジスタ部分が選択される。そして、リードポート260が、入力されたリードアドレスのデータを要求すると、そのリードアドレスに対応し、調停回路111_2で決定されたスレッドに対応するレジスタ部分のデータが送られる。本実施形態では、このような構成により、リードポート260が1個で済み、CPU10全体の回路規模の増大が抑えられている。
次に、オールデストタイプの命令についてのチェック回路を、リザベーションステーション210のうち、図4のRSA110に保持されているオールデストタイプの命令をチェックするための回路を代表例に挙げて説明する。
図14は、オールデストタイプの命令について、シンクフラグのリセットが可能か否かをチェックするためのチェック回路を示す図である。
オールデストタイプの命令は、同一スレッドの中でその命令が、リザベーションステーション内で最も古い命令(オールデスト)となってから実行されるものである。
そこで、図14に示すチェック回路110_1では、オールデストタイプの命令が、RSA110内に格納されている命令のうち、同一スレッド中でのオールデストになっているか否かが確認され、オールデストになっている場合に、その命令のシンクフラグをリセット対象に決定する。
この図14に示すチェック回路110_1は、まず、チェック対象のスレッドについて、リザベーションステーション内でのオールデストのエントリを求めるオールデストエントリ取得回路110_1aを有している。そして、このチェック回路110_1は、各エントリについて、そのエントリがオールデストであるか否かと、図8に示すオールデストタグ110cの内容と、シンクタグ110dの内容と、バリッドタグ111aの内容とのANDを求めるAND演算子110_1bと、各エントリのAND演算子の結果のORを求めるOR演算子110_1cとをさらに備えている。このチェック回路110_1によって、チェック対象のスレッドに、シンク状態のオールデストタイプの命令があって、現在、その命令がRSA110内でオールデストになっており、シンクフラグがリセット可能な状態にあることが確認される。本実施形態では、このような確認がなされた場合に、RSA110内の、チェック対象のスレッドに係る全エントリのシンクフラグのリセットが可能であると決定される。
このようにRSA110についてシンクフラグのリセット対象のスレッドが決定されると、シンクフラグのリセット後に、そのスレッドに属するシンク状態にあった命令が演算器に投入され実行にうつされることとなる。同時に、命令バッファ104に対して、そのスレッドについてのデコード部109への命令の投入の再開が指示される。
以上、説明したように、本実施形態のCPU10によれば、シンク属性の命令についてはリザベーションステーション210で保持され、同一スレッド中での後続の命令についてはデコード部109への投入が中断される。これにより、例えば、デコード部109が占有されて、他のスレッドの命令のデコードが阻害されるといった事態が回避される。また、あるスレッドについて、シンク属性の命令に後続する命令のデコード部109への投入が中断されるので、それら後続の命令がコミット待ちとなることでそれら後続の命令にデコード部109が占有されて、他のスレッドの命令のデコードが阻害されるといった事態も回避される。また、それら後続の命令については、デコード部109への投入が中断された後、命令バッファ104で保持されるので、その後続の命令に対するフェッチが無駄にならず効率的である。つまり、この本実施形態のCPU10によれば、命令を効率良く処理することができる。
尚、上記では、SMT機能を有するCPUとして、2種類のスレッドの命令を同時に処理するCPU10を例示したが、SMT機能を有するCPUは、例えば3種類のスレッドの命令を同時に処理するもの等であっても良い。

Claims (5)

  1. 複数の命令列を有するスレッドのうち、所定数の命令を同時にデコードするデコード部と、
    前記デコード部が解読した命令を実行する命令実行部と、
    前記デコード部が解読する命令が、所定の禁止条件により前記スレッドにおいて先行する他の命令との同時実行が禁止されるか否かを判定するプリデコード部と、
    前記デコード部が解読した命令が、前記判定により同時実行が禁止される場合には、前記禁止が解除されるまで当該命令を保持する命令保持部と、
    前記デコード部が解読した命令が、前記判定により同時実行が禁止される場合には、前記解読した命令の後続命令を前記デコード部に投入せずに保持する命令投入部とを有することを特徴とする命令処理装置。
  2. 前記命令投入部が、前記デコード部に命令を投入せずに保持した場合には、その命令が属するスレッドとは別のスレッドから入手した命令を前記デコード部に投入するものであることを特徴とする請求項1記載の命令処理装置。
  3. 前記命令投入部が、前記同時実行が禁止される命令よりも前記スレッド中で後続の命令について前記デコード部に投入せずに保持している場合に、該同時実行が禁止される命令が実行可能な条件が整ったことを表す情報を入手してその保持している命令について前記デコード部への投入を再開するものであることを特徴とする請求項1または2記載の命令処理装置。
  4. 前記プリデコード部が、命令に、前記同時実行が禁止される命令であるか否かを表すフラグを付すものであり、
    前記命令投入部が、前記フラグが付された命令を前記デコード部への投入用に、スレッド毎に、スレッド中の順序と同じ順序で積んでおく命令バッファ部分を備え、該命令バッファ部分に積まれている命令を、積まれている順に前記デコード部へ投入する、前記フラグが前記同時実行が禁止される命令であることを示している命令の後の命令については投入せずに保持するものであることを特徴とする請求項1から3のうちいずれか1項記載の命令処理装置。
  5. 前記命令保持部が、前記同時実行が禁止される命令を複数保持していてそれら複数の命令について実行可能な条件が同時に整った場合には、それら複数の命令のうち先に保持した命令を先に前記実行部に渡すものであることを特徴とする請求項1から4のうちいずれか1項記載の命令処理装置。
JP2009520193A 2007-06-20 2007-06-20 命令処理装置 Expired - Fee Related JP5093237B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2007/062425 WO2008155839A1 (ja) 2007-06-20 2007-06-20 命令処理装置

Publications (2)

Publication Number Publication Date
JPWO2008155839A1 true JPWO2008155839A1 (ja) 2010-08-26
JP5093237B2 JP5093237B2 (ja) 2012-12-12

Family

ID=40156005

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009520193A Expired - Fee Related JP5093237B2 (ja) 2007-06-20 2007-06-20 命令処理装置

Country Status (4)

Country Link
US (1) US20100106945A1 (ja)
EP (1) EP2169538A4 (ja)
JP (1) JP5093237B2 (ja)
WO (1) WO2008155839A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8984511B2 (en) * 2012-03-29 2015-03-17 Advanced Micro Devices, Inc. Visibility ordering in a memory model for a unified computing system
CN110825440B (zh) * 2018-08-10 2023-04-14 昆仑芯(北京)科技有限公司 指令执行方法和装置

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2908598B2 (ja) * 1991-06-06 1999-06-21 松下電器産業株式会社 情報処理装置
US5337415A (en) * 1992-12-04 1994-08-09 Hewlett-Packard Company Predecoding instructions for supercalar dependency indicating simultaneous execution for increased operating frequency
JPH07175649A (ja) * 1993-12-16 1995-07-14 Nippon Steel Corp プロセッサ
TW353732B (en) * 1994-03-31 1999-03-01 Ibm Processing system and method of operation
TW260765B (ja) * 1994-03-31 1995-10-21 Ibm
US6694425B1 (en) * 2000-05-04 2004-02-17 International Business Machines Corporation Selective flush of shared and other pipeline stages in a multithread processor
US7310722B2 (en) * 2003-12-18 2007-12-18 Nvidia Corporation Across-thread out of order instruction dispatch in a multithreaded graphics processor
WO2005121948A1 (en) * 2004-06-02 2005-12-22 Sun Microsystems, Inc. Method and apparatus for enforcing membar instruction semantics in an execute-ahead processor
US7237094B2 (en) * 2004-10-14 2007-06-26 International Business Machines Corporation Instruction group formation and mechanism for SMT dispatch
US7664936B2 (en) * 2005-02-04 2010-02-16 Mips Technologies, Inc. Prioritizing thread selection partly based on stall likelihood providing status information of instruction operand register usage at pipeline stages
US7254697B2 (en) * 2005-02-11 2007-08-07 International Business Machines Corporation Method and apparatus for dynamic modification of microprocessor instruction group at dispatch
US7266674B2 (en) * 2005-02-24 2007-09-04 Microsoft Corporation Programmable delayed dispatch in a multi-threaded pipeline
WO2006134693A1 (ja) * 2005-06-15 2006-12-21 Matsushita Electric Industrial Co., Ltd. プロセッサ

Also Published As

Publication number Publication date
EP2169538A4 (en) 2010-12-01
WO2008155839A1 (ja) 2008-12-24
US20100106945A1 (en) 2010-04-29
JP5093237B2 (ja) 2012-12-12
EP2169538A1 (en) 2010-03-31

Similar Documents

Publication Publication Date Title
US7734897B2 (en) Allocation of memory access operations to memory access capable pipelines in a superscalar data processing apparatus and method having a plurality of execution threads
US7721076B2 (en) Tracking an oldest processor event using information stored in a register and queue entry
US7111126B2 (en) Apparatus and method for loading data values
US6119223A (en) Map unit having rapid misprediction recovery
EP1886216B1 (en) Controlling out of order execution pipelines using skew parameters
US7711934B2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
WO1998025196A2 (en) Dynamic branch prediction for branch instructions with multiple targets
US6981131B2 (en) Early condition code evaluation at pipeline stages generating pass signals for controlling coprocessor pipeline executing same conditional instruction
US20060259741A1 (en) Controlling out of order execution pipelines issue tagging
US20080005544A1 (en) Method and apparatus for partitioned pipelined execution of multiple execution threads
US7454596B2 (en) Method and apparatus for partitioned pipelined fetching of multiple execution threads
US20100306513A1 (en) Processor Core and Method for Managing Program Counter Redirection in an Out-of-Order Processor Pipeline
EP0778519B1 (en) Multiple instruction dispatch system for pipelined microprocessor without branch breaks
US20100100709A1 (en) Instruction control apparatus and instruction control method
JP5115555B2 (ja) 演算処理装置
JP5093237B2 (ja) 命令処理装置
US20100031011A1 (en) Method and apparatus for optimized method of bht banking and multiple updates
JP7409208B2 (ja) 演算処理装置
US20070043930A1 (en) Performance of a data processing apparatus
US9823931B2 (en) Queued instruction re-dispatch after runahead
US20040128476A1 (en) Scheme to simplify instruction buffer logic supporting multiple strands
WO2007084202A2 (en) Processor core and method for managing branch misprediction in an out-of-order processor pipeline
US6718460B1 (en) Mechanism for error handling in a computer system
JPWO2012132214A1 (ja) プロセッサ及びその命令処理方法
US20040128488A1 (en) Strand switching algorithm to avoid strand starvation

Legal Events

Date Code Title Description
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: 20120821

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120903

R150 Certificate of patent or registration of utility model

Ref document number: 5093237

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150928

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees