JP5168277B2 - 命令制御装置及び制御方法 - Google Patents

命令制御装置及び制御方法 Download PDF

Info

Publication number
JP5168277B2
JP5168277B2 JP2009520194A JP2009520194A JP5168277B2 JP 5168277 B2 JP5168277 B2 JP 5168277B2 JP 2009520194 A JP2009520194 A JP 2009520194A JP 2009520194 A JP2009520194 A JP 2009520194A JP 5168277 B2 JP5168277 B2 JP 5168277B2
Authority
JP
Japan
Prior art keywords
instruction
buffer
pointer
thread
decoded
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
JP2009520194A
Other languages
English (en)
Other versions
JPWO2008155840A1 (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 JPWO2008155840A1 publication Critical patent/JPWO2008155840A1/ja
Application granted granted Critical
Publication of JP5168277B2 publication Critical patent/JP5168277B2/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
    • 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
    • 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/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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • G06F9/38585Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification

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)

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つのスレッドの命令がデコードできるだけである。ここで、命令の中には、同一スレッド中で先行命令との同時実行が禁止されたものがある。このように、何らかの要因により命令の処理が実行できない状態となることをストールと呼ぶ。また、そのストールを引き起こした要因のことをストール要因と呼ぶ。
従来、ストールすることが確認された命令については、必要な条件が整ってストール要因が解消されるまでデコード部にそのまま留め置かれる。
図4は、シングルスレッディングタイプの命令制御装置において、命令のデコード部でのストールが発生した様子を示す概念図である。
この図4の例では、命令フェッチ部501による1回のフェッチで8個の命令が命令バッファ502に取り込まれる。命令バッファ502は、デコード前の命令が8個、スレッド中の処理順と同じ順序で保持される複数のエントリ(IBR:Instruction BuffeR)502aを有している。
命令バッファ502は、IBR502aに格納されている命令を、順次に4個、デコード部503に投入する。デコード部503は、これら投入されて来る命令が1個ずつ格納される4個のレジスタ(IWR:Instruction Word Register)503aを備えており、4個の命令が順次に各IWR503aに格納される。そして、デコード部503では、これら格納された4個の命令のデコードが順次に行われる。そして、デコード部503は、デコード済みの4個の命令を後段の実行部に引き渡す。このとき、命令の中に、上記のように直ぐには実行できずストールすることが確認された命令があった場合には、実行部への引渡しはその命令の前までで止まってしまう。図4の例では、デコードされた4個の命令のうち3番目の命令についてストールすることが確認されており、実行部への引渡しが2番目の命令までで止まっている。
SMT機能を有する命令制御装置において、あるスレッドの命令がデコード部でストールしてしまうと、デコード部が、1つのスレッドの命令に占有されてしまい、他のスレッドの命令のデコードが出来なくなってしまう。
ここで、単一スレッドのプログラムを処理するシングルスレッディングタイプの命令制御装置についてであるが、ストールすることが確認された命令を所定のメモリ内に移してデコード部を後続命令に明け渡し、そのストールすることが確認された命令については先行命令の実行結果が得られた後に実行するという技術が提案されている(例えば、特許文献1参照。)。この技術によれば、上記のアウト・オブ・オーダ実行が滞りなく行われる。しかし、この技術をSMT機能を有する命令制御装置に適用しても、ストールすることが確認された命令と同じスレッドの後続の命令は、そのストールすることが確認された命令についてストール要因が解消されコミットが終了するまでコミット待ちとなってしまうので、一時的にデコード部の占有が回避されても、いずれ、そのスレッドの命令によるデコード部の占有が起きてしまう。
また、1つのスレッドの命令についてストールすることが確認された場合に、その命令を無効化してデコード部を他のスレッドに明け渡し、その命令についてはストールが解消された後に改めてフェッチからやり直すという技術が提案されている(例えば、特許文献2参照。)。
図5は、1つのスレッドの命令についてストールすることが確認された場合に、その命令を無効化してデコード部を他のスレッドに明け渡す技術を示す概念図である。
この図5の例では、命令フェッチ部511によって、2種類のスレッドの命令が8個ずつ交互に命令バッファ512に取り込まれ、命令バッファ512によって、4個ずつ交互にデコード部513に投入される。そして、デコード部513でのデコード時に、あるスレッドにおける4個の命令のうちの1つがストールすることが確認された場合には、デコード部513において、その命令とそのスレッド中での後続の命令とが無効化される。その結果、デコード部513での占有が解消されて、別のスレッドの命令のデコードが可能となる。また、無効化されたスレッドの命令については、命令フェッチ部511による取込みからやり直される。
特開平7−271582号公報 特開2001−356903号公報
しかしながら、上記の特許文献2に記載の技術では、ストールすることが確認された命令については改めてフェッチからやり直すことになるので、その命令について一旦行われたフェッチが無駄になっていしまい、命令制御装置における処理の効率が低下してしまうという問題がある。
本発明は、上記事情に鑑み、命令を効率良く処理することができる命令制御装置及び制御方法を提供することを目的とする。
上記目的を達成する本発明の命令制御装置は、
複数命令を有するスレッドから命令を取得する命令フェッチ部と、
上記取得された命令を保持する命令バッファと、
上記命令バッファから出力された命令を保持して解読する命令デコード部と、
上記解読された命令を実行する命令実行部と、
上記命令バッファに保持された命令を上記命令デコード部に投入する場合において、上記命令バッファに保持された命令に先行する命令が上記命令実行部を使用中であるときには、上記命令デコード部が保持する命令と上記命令デコード部が保持する命令の後続命令を無効化するとともに、上記命令デコード部が保持する命令と上記命令デコード部が保持する命令の後続命令とを上記命令バッファに再度保持させる命令投入制御部とを有することを特徴とする。
この本発明の命令制御装置によれば、上記命令実行部が先行する命令によって使用中のときに、上記命令デコード部が保持する命令以後の命令が無効化される。このため、他の実行可能な命令に上記命令デコード部を明け渡すことが可能となる。また、一旦無効化された命令については、上記命令バッファで再度保持されることから、上記スレッドからの命令の入手の手間等が無駄にはならず効率的である。つまり、この本発明の命令制御装置によれば、命令を効率良く処理することができる。
また、本発明の命令制御装置において、
「上記命令フェッチ部は、複数の上記スレッドから命令を取得し、
上記命令バッファは、上記取得された複数のスレッドに含まれる命令を保持し、
上記命令デコード部は、上記複数のスレッドのうちいずれか1つのスレッドに属する命令を保持し、
上記命令投入制御部が、上記命令バッファに再度保持させた上記スレッドに属する上記命令デコード部が保持する命令と上記命令デコード部が保持する命令の後続命令を上記命令デコード部に再投入する場合には、上記スレッドとは異なるスレッドに属する命令を上記命令デコード部に保持することを特徴とする」という形態は好ましい形態である。
この好ましい形態の命令制御装置によれば、複数のスレッドの命令を処理するに当たり、1つのスレッドについて上記命令バッファで命令が再度保持される場合には、他のスレッドの命令に上記命令デコード部が明渡されるので、複数のスレッドの命令を効率的に処理することができる。
この複数のスレッドの命令を処理する好ましい形態の命令制御装置において、
「上記命令デコード部は、上記スレッドとは異なるスレッドに属する命令を上記命令投入制御部が保持していない場合には、上記命令投入制御部に上記再投入を求めずに、上記再投入の対象となる命令を保持する」という形態はさらに好ましい形態である。
このさらに好ましい形態の命令制御装置によれば、上記命令デコード部を明け渡すべき他のスレッドが存在しない場合や、他のスレッドにおいて処理すべき命令が存在しない場合等といった、上記命令デコード部に命令を留めておいても差し支えない場合には、上記命令デコード部に再投入の対象となる命令が有効に保持されるので不要な再投入が回避され、一層効率的に命令を処理することができる。
また、本発明の命令制御装置において、
「上記命令投入制御部は、上記再投入の対象となる命令が実行可能であることを表す情報を有し、上記命令デコード部から上記再投入を求められた場合に、上記情報情報に基づいて上記再投入を行う」という形態も好ましい形態である。
この好ましい形態の命令制御装置によれば、上記再投入の対象となる命令が実行可能であることが上記情報を介して上記命令投入制御部に伝えられるので、その命令投入制御部が、適切なタイミングで再投入を行うことができる。
また、本発明の命令制御装置において、
「上記命令投入制御部は、上記命令デコード部へ投入する上記命令を保持する命令投入バッファを有し、上記命令投入バッファに保持されている命令が全て上記命令デコード部によりデコードされた場合には、上記命令投入バッファを開放する」という形態も好ましい。
この好ましい形態の命令制御装置によれば、上記命令投入バッファが適宜に開放されるので、その命令投入バッファを繰返しスムースに利用することができ、一層効率的に命令を処理することができる。
また、本発明の命令制御装置において、
「上記命令デコード部は、上記解読した命令が実行可能な条件は整っていないと判断した場合には、上記命令投入制御部に対して、上記命令の後続命令の再投入を求める」という形態も好ましい形態である。
この好ましい形態の命令制御装置によれば、上記命令について実行可能な条件が整っていないか否かについてが、命令の処理が確実に把握される上記命令デコード部において判断されるので、上記命令投入制御部への再投入の求めが誤り無く行われることとなる。
また、上記目的を達成する本発明の命令制御方法は、
命令を保持する命令バッファ部と、上記命令バッファ部から出力された命令を保持し解読する命令デコード部と、解読された命令を実行する命令実行部を有する命令制御装置の命令制御方法において、
上記命令バッファに保持された命令を上記命令デコード部に投入する場合において、上記命令バッファに保持された命令に先行する命令が上記命令実行部を使用中か否かを判断し、
上記命令バッファに保持された命令に先行する命令が上記命令実行部を使用中であるときには、上記命令デコード部が保持する上記命令と上記命令デコード部が保持する命令の後続命令を無効化し、
上記命令デコード部が保持する命令と上記命令デコード部が保持する命令の後続命令を上記命令バッファに再度保持させることを特徴とする。
この本発明の命令制御方法によれば、上記の命令制御装置と同様に命令を効率良く処理することができる。
本発明によれば、命令を効率良く処理することができる命令制御装置及び制御方法を得ることができる。
スーパースカラにおけるアウト・オブ・オーダ実行を示す概念図である。 SMT機能の一例を概念的に示す図である。 SMT機能の一例を示す図2とは別の概念図である。 シングルスレッディングタイプの命令制御装置において、命令のデコード部でのストールが発生した様子を示す概念図である。 1つのスレッドの命令についてストールすることが確認された場合に、その命令を無効化してデコード部を他のスレッドに明け渡す技術を示す概念図である。 命令制御装置の一実施形態であるCPU10を示すハードウェア構成図である。 図6のCPU10におけるストール命令に係わる処理を示す概念図である。 図6のCPU10を、ストール命令に係わる処理について説明するために一部を簡略化し、一部を機能ブロックで示した図である。 命令のフェッチから、デコード部109への命令の投入までの処理の流れを示す概念図である。 各IBR104aに対応付けられているバッファ情報を示す図である。 シングルスレッディングタイプのCPUで実行されるプリゼンテーションを説明するための説明図である。 本実施形態のCPU10で実行されるプリゼンテーションを説明するための説明図である。 デコード部109においてストールすることが確認された場合の処理の流れを示す概念図である。 デコード部109においてストールすることが確認された場合の処理の流れを、IWR109a内に格納される命令の遷移で示す図である。 Dリバース指示回路を示す図である。 Dリバースが実行されたときの、CPU10における各ポインタの制御の流れを示す概念図である。 保存用ポインタ253の内容の生成を、具体的な数値例を使って表形式で示す図である。 ストールの発生から再度のプリゼンテーションとデコードが行われるまでの処理の流れを示すフローチャートである。 不在検出回路を示す図である。 ストールの発生からストール要因に対する監視を経て再度のプリゼンテーションの実行に至る処理を示すフローチャートである。 1回のデコードでDリリースされる4個の命令が2つのIBR109aに跨ってしまう場合におけるIBR109aの開放を説明するための説明図である。 CSE127において、レジスタの更新が、イン・オーダ実行により行われる仕組みを示す概念図である。 命令の処理の効率化とは別の効果が得られる状況を説明する図である。 スループットの向上という別の効果図について説明する図である。
以下図面を参照して命令制御装置の一実施形態について説明する。
図6は、命令制御装置の一実施形態であるCPU10を示すハードウェア構成図である。
この図6に示す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に引き渡す。
デコードステージ(ステップ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における本実施形態としての特徴は、このようなストール命令に係る処理にある。以下、この点に注目して説明を続ける。
図7は、図6のCPU10におけるストール命令に係わる処理を示す概念図である。
この図7の例では、ステップS201からステップS204までの間に、スレッド0に属する命令とスレッド1に属する命令とが交互に4個ずつデコードされる。ここで、この図7の例では、ステップS203で処理されるスレッド0の4個の命令のうちのいずれかがストール命令となっている。本実施形態のCPU10では、このストール命令以降の命令が、図7に示すように、デコード後に、上記の命令バッファ104において、ステップS201で処理される先行の命令のコミットが終了して必要なオペランドが得られ実行可能な条件が整うまで保持される。そして、条件が整うと、ストール命令以降の命令については、再度デコードからやり直される。
ここで、本実施形態のCPU10では、回路構成が複雑で回路規模が大きいデコード部109は、図6に示すように1つだけしか備えられておらず、CPU10は、2種類のスレッド間でこのデコード部109が共通に使用される構成になっている。
本実施形態では、一方のスレッドの命令がストール命令であっても、そのストール命令以降の命令が命令バッファ104で、実行可能な条件が整うまで保持されるので、デコード部109はそのストール命令が属するスレッドから開放され、もう一方のスレッドに明け渡される。これにより、図7に示すように、スレッド0での処理が滞っても、スレッド1での命令が滞りなく処理される。
以下、このストール命令に係わる処理について、図6の説明と一部重複する部分があるが詳細に説明する。
図8は、図6のCPU10を、ストール命令に係わる処理について説明するために一部を簡略化し、一部を機能ブロックで示した図である。
尚、この図8では、図6のブロックと一対一に対応する構成要素については図6と同じ番号を付して示している。
CPU10は、スレッド0用プログラムカウンタ101_0とスレッド1用プログラムカウンタ101_1との2つのプログラムカウンタを備えており、これら2つのプログラムカウンタから、命令のフェッチを実行する旨の指示が交互に出される。
命令フェッチ部102は、2つのプログラムカウンタからの指示に応じて、図6の命令1次キャッシュ103を介して命令を、命令バッファ109に取り込む。
命令バッファ104は、この取り込まれた命令を保持するとともに、その保持した命令をデコード部109へ投入する。デコード部109は、投入された命令をデコードし、さらに、デコード済みの命令について実行可能な条件が整っているか否か、即ち、その命令がストールするか否かを確認する。
デコード部109は、条件が整っている命令については後段のリザベーションステーション210に渡し、条件が整っていないストール命令以降の命令については無効化する。これにより、デコード部109は解放され、新たなデコードが可能となる。また、本実施形態では、無効化された命令については、ストール要因が解消された後でデコード部109から命令バッファ109に再投入が要求される。ここで、この図8では、図6に示す4種類のリザベーションステーションが簡略化されて1つのボックスで示されている。
図9は、命令のフェッチから、デコード部109への命令の投入までの処理の流れを示す概念図である。
本実施形態では、命令は、命令フェッチ部102によって2種類のスレッドについて交互に8個ずつ命令バッファ104に取り込まれ、命令バッファ104によってデコード部109に4個ずつ投入される。デコード部109では、そのデコード部109が有する4つのレジスタである第0段から第3段までのIWR109aそれぞれに命令が格納される。また、IWR109aへの格納は、第0段のIWR109aから順番に行われる。ここで、命令バッファ104からデコード部109の4つのIWR109aへの命令の投入を、プリゼンテーションと呼ぶ。
以下、命令フェッチ部102によるフェッチから、命令バッファ104によるプリゼンテーションまでの処理について、さらに、詳細に説明する。
本実施形態では、命令バッファ104は、各々8個の命令を格納可能なIBR104aを、第0段から7段目までの計8段備えており、フェッチの度に、各IBR104aに8個の命令が、各スレッド中の処理順で格納される。ここで、フェッチの際には、命令は、第0段から7段目までのIBR104aに次のようなバッファ情報で定義付けられた順番で格納される。
図10は、各IBR104aに対応付けられているバッファ情報を示す図である。
この図10に示すように、各IBR104aには、そのIBR104aが命令の現在の格納先として割り当てられているか否かを示すVALID情報I1、次のフェッチで命令の格納先として割り当てられるIBR104aの段数を示すNEXT_SEQ_IBR情報I2、命令フェッチ部102から命令1次キャッシュ103に対して次のフェッチ対象の命令が要求されているか否かを示すNEXT_SEQ_VALID情報I3、現在格納されている命令がそのIBR104aについてなされた最新のフェッチの結果であるか否かを示すSTATUS_VALID情報I4が対応付けられている。
フェッチされた8個の命令は、命令の格納先として割り当てられていることがVALID情報I1で示されているIBR104aに格納される。さらに、格納後には、そのIBR104aのSTATUS_VALID情報I4が、現在格納されている命令がそのIBR104aについてなされた最新のフェッチの結果であることを示す内容に更新される。また、次の命令フェッチが発行されると、そのIBR番号がIBR104aのNEXT_SEQ_IBR情報I2が示す段数に格納され、IBR104aにおけるVALID情報I1が更新される。
上記の4つの情報のうち、特に、VALID情報I1とNEXT_SEQ_IBR情報I2とNEXT_SEQ_VALID情報I3によって、8段分のIBR104aへの命令の格納順が定義される。また、STATUS_VALID情報I4によって、現在格納されている命令がそのIBR104aにとっての最新の情報であることが確認される。
次に、プリゼンテーションについて説明する。
ここで、本実施形態のCPU10は、2種類のスレッドの命令を同時に処理するSMT機能を備えた命令制御装置であるが、以下では、まず、説明の簡単化のために、まず、1種類のスレッドの命令を処理するシングルスレッディングタイプのCPUにおけるプリゼンテーションについて説明する。
図11は、シングルスレッディングタイプのCPUで実行されるプリゼンテーションを説明するための説明図である。
プリゼンテーションは、プログラムの処理順、即ち、命令フェッチ部601によってフェッチされた順番で、命令バッファ602からデコード部603の4つのIWR603aに対して行われる。このような順番どおりのプリゼンテーションを可能とするために、この図11に示すポインタ604が使われる。
ポインタ604には、次のような3つの情報が記載されている。
即ち、今回のプリゼンテーションの対象となる命令を最初に取り出すIBR104aの段数を示すE_CURRENT_IBR情報I5と、そのIBR104aに続いて命令が取り出されるIBR104aの段数を示すE_NEXT_SEQ_IBR情報I6と、今回のプリゼンテーションの対象となる4個の命令のうち先頭の命令がIBR中にフェッチ順に並んでいる8個の命令のうちの何番目の命令であるかを示すE_NSI_CTR情報I7との3つの情報が記載されている。
命令バッファ602は、プリゼンテーションの際にはポインタ604を参照し、E_CURRENT_IBR情報I5が示す段数のIBR104a中の8個の命令のうち、E_NSI_CTR情報I7が示す命令から数えて4個分の命令を、第0段から第3段までの4つのIWR603aのうちの第0段のIWR603aから順次に格納していく。
また、E_CURRENT_IBR情報I5が示す段数のIBR104a中の8個の命令が最後までIWR603aに格納された時点で、E_CURRENT_IBR情報I5の内容が、E_NEXT_SEQ_IBR情報I6の内容に更新され、E_NSI_CTR情報I7が示す番数に「4」が加算される。さらに、E_NEXT_SEQ_IBR情報I6の内容が、上記の更新後のE_CURRENT_IBR情報I5が示す段数のIBR104aに続いて命令が取り出されるIBR104aの段数に更新される。
このようなポインタ604を参照したプリゼンテーションにより、命令バッファ602は、フェッチ順に4個の命令を取り出して4個のIWR603aに順次に格納することができる。
次に、2種類のスレッドの命令を同時に処理するSMT機能を備えた本実施形態のCPU10におけるプリゼンテーションについて説明する。
図12は、本実施形態のCPU10で実行されるプリゼンテーションを説明するための説明図である。
この図12に示すように、図11に示すポインタ604と同等なポインタが、2種類のスレッドそれぞれについて備えられている。即ち、スレッド0用ポインタ251と、スレッド1用ポインタ252とが備えられている。尚、本実施形態では、後述の再度のプリゼンテーションの際に使われる、今回の命令の取り出しに参照されたポインタを保存する保存用ポインタ253も備えられている。
スレッド0用ポインタ251には、今回スレッド0の命令を最初に取り出すIBR104aの段数を示すTH0_CURRENT_IBR情報I8と、スレッド0の命令をそのIBR104aに続いて取り出すIBR104aの段数を示すTH0_NEXT_SEQ_IBR情報I9と、今回取り出すスレッド0の先頭の命令が何番目の命令であるかを示すTH0_NSI_CTR情報I10との3つの情報が記載されている。
また、スレッド1用ポインタ252には、今回スレッド1の命令を最初に取り出すIBR104aの段数を示すTH1_CURRENT_IBR情報I11と、スレッド1の命令をそのIBR104aに続いて取り出すIBR104aの段数を示すTH1_NEXT_SEQ_IBR情報I12と、今回取り出すスレッド1の先頭の命令が何番目の命令であるかを示すTH1_NSI_CTR情報I13との3つの情報が記載されている。
また、保存用ポインタ253には、先頭の命令を取り出したIBR104aの段数を示すD_TH_CURRENT_IBR情報I14と、そのIBR104aに続いて命令を取り出すIBRの段数を形式的に示すD_TH_NEXT_SEQ_IBR情報I15と、取り出した先頭の命令が何番目の命令であるかを示すD_TH_NSI_CTR情報I16との3つの情報が記載されている。
さらに、本実施形態では、スレッド0とスレッド1との2種類のスレッドのうち、今回のプリゼンテーションの対象となるスレッドの番号が格納される対象スレッド指示部254が備えられている。また、後述の再度のプリゼンテーションの対象となるスレッドの番号が格納される再プリゼンテーション対象スレッド指示部255も備えられている。
プリゼンテーションの際には、まず、2つのポインタのうち、対象スレッド指示部254に格納されている番号のスレッドのポインタが選択される。また、このときの対象スレッド指示部254に格納されている番号が、再プリゼンテーション対象スレッド指示部255にコピーされ、上記の選択されたポインタ内の3つの情報が、保存用ポインタ253内の3つの情報としてコピーされる。
次に、命令バッファ104は、選択されたポインタを参照し、そのポインタ中の情報が示す段数のIBR中の8個の命令のうち、そのポインタ中の情報が示す命令を含む4個の命令を、第0段から第3段までの4つのIWR603aのうちの第0段のIWR603aから順次に格納していく。そして、プリゼンテーションの後には、そのポインタ中の3つの情報を適宜に更新する。
再プリゼンテーションの際の、再プリゼンテーション対象スレッド指示部255および保存用ポインタ253の働きについては後述する。
このような各スレッドに対応するポインタを参照したプリゼンテーションにより、命令バッファ104は、フェッチ順に4個の命令を取り出して4個のIWR109aに順次に格納することができる。
このように、デコード部109の4個のIWR109aに命令が格納されると、デコード部109において各命令のデコードが行われ、さらにデコード済みの各命令について、実行可能な条件が整わずにストールしてしまうか否かが確認される。そして、デコード部109は、実行可能な条件が整っておりストールしない有効な命令については後段のリザベーションステーション210に渡し、条件が整っていないストール命令以降の命令については無効化する。
図13は、デコード部109においてストールすることが確認された場合の処理の流れを示す概念図である。
この図13の例では、命令バッファ104から、スレッド0についてプリゼンテーションが行われ、そのスレッド0中の4個の命令がデコード部109の4つのIWR109aに格納されている。そして、デコード後に、第2段のIWR109a内の命令についてストールすることが確認され、その命令と、後続する第3段のIWR109a内の命令とが無効化される。
無効化された命令については、ストールすることが確認された時点で、デコード部109から、命令バッファ104に対して、ストール要因が解消された後で再度のプリゼンテーションを行うように要求が出される。ストール要因解消後の再度のプリゼンテーションを要求することを、以下、Dリバースと呼ぶ。
一方、ストールすることが確認されない有効な第0段のIWR109a内の命令と、第1段のIWR109a内の命令とは、リザベーションステーション210に引き渡される。命令が有効でリザベーションステーション210に引き渡すことを、以下、Dリリースと呼ぶ。
本実施形態では、デコード部109においてストールすることが確認された場合には、そのストールすることが確認された命令(ストール命令)以降の命令の無効化と上記のDリリースによって、デコード部109が開放される。そして、その開放されたデコード部109が、ストール命令が属するスレッド(図13の例ではスレッド0)とは別のスレッド(図13の例ではスレッド1)の命令のデコードに、ストール要因が解消されるまで利用され続ける。
図14は、デコード部109においてストールすることが確認された場合の処理の流れを、IWR109a内に格納される命令の遷移で示す図である。
この図14の例では、あるサイクルにおいて、スレッド0についてプリゼンテーションが行われ、その際に、第2段のIWR109a内の命令Cがストールし、命令バッファ104に対してDリバースが行われている。その結果、このサイクルにおいて、第2段のIWR109a内の命令Cと、後続の第3段のIWR109a内の命令Dとが無効化される。同時に、第0段のIWR109a内の命令Aおよび第1段のIWR109a内の命令Bについては有効な命令なのでDリリースされて、リザベーションステーション210に渡される。この無効化とDリリースにより、このサイクルにおいてデコード部109は開放される。
次のサイクルでは、上記の開放されたデコード部109に対してスレッド1についてのプリゼンテーションが行われている。そして、このサイクルでデコード部109にプリゼンテーションされたスレッド1の4個の命令a,b,c,dについてはいずれも有効であって、全てDリリースされて、リザベーションステーション210に渡されている。
このように、本実施形態では、デコード部109において一方のスレッドの命令についてストールすることが確認された場合には上記の無効化とDリリースによってデコード部109が開放されて、デコード部109が他方のスレッドに明け渡される。これにより、このCPU10において、2種類のスレッドの命令が滞りなく効率的に処理されることとなる。
ところで、デコード部109におけるストールは、同一スレッドの複数の命令について発生する場合がある。ここで、本実施形態では、ストール命令以降の命令が全て無効化されるので、ストールが複数の命令について発生した場合であっても、Dリバースは、それら複数の命令のうち、段数が最も若いIWR109a内の命令についてのみ行われれば足りる。そこで、本実施形態では、デコード部109に、ストールが複数の命令について発生した場合に、段数が最も若いIWR109a内の命令についてのDリバースの実行を指示するDリバース指示回路が備えられている。
図15は、Dリバース指示回路を示す図である。
この図15に示すDリバース指示回路109_1は、プリゼンテーションされた命令についてストールが生じることを検出する、各々がIWR109aに接続された4個のストール検出回路109_1aを備えている。各ストール検出回路109_1aは、対応するIWR109a内の命令について、実行資源が足りない、あるいは、その命令が同一スレッド中で先行する他の命令との同時実行が禁止されたシンク属性の命令である等といったストール要因の存在を確認し、ストール要因の存在が確認された場合に「1」を出力する。
なお、異なるスレッドで共有する実行資源が足りない場合は、ストール要因となるが、これによるDリバース指示は行わない。これは、仮に共有の実行資源が足りなくてDリバースを行ってしまうと、Dリバース後別のスレッドが命令デコードをするときにちょうどその共有資源が開放されて使用してしまい、次のサイクルで共有資源が足りずに同じスレッドが再びDリバースを繰り返すことが起こりうるからである。
さらに、この図15に示すDリバース指示回路109_1は、第1段のIWR109aに接続されたストール検出回路109_1aが、ストール要因の存在を確認した検出回路の中で段数が最も若いIWR109aに接続されたものであった場合に「1」を出力する第1の演算子109_1bを備えている。さらに、Dリバース指示回路109_1は、第2段のIWR109aに接続されたストール検出回路109_1aが、ストール要因の存在を確認した検出回路の中で段数が最も若いIWR109aに接続されたものであった場合に「1」を出力する第2の演算子109_1cと、第3段のIWR109aに接続されたストール検出回路109_1aが、ストール要因の存在を確認した検出回路の中で段数が最も若いIWR109aに接続されたものであった場合に「1」を出力する第3の演算子109_1dとを備えている。
このDリバース指示回路109_1により、ストール要因を有する命令のうち、段数が最も若いIWR109a内の命令が第0段のIWR109a内の命令である場合には、第0段のIWR109aに接続されたストール検出回路109_1aのみから「1」が出力され、この「1」が、第0段のIWR109a内の命令に対するDリバースの実行を指示するD0_REVERSE信号S0として、そのD0_REVERSE信号S0用の信号線に出力される。また、段数が最も若いIWR109a内の命令が第1段のIWR109a内の命令である場合には、第1の演算子109_1bのみから出力される「1」が、第1段のIWR109a内の命令に対するDリバースの実行を指示するD1_REVERSE信号S1として、そのD1_REVERSE信号S1用の信号線に出力される。また、段数が最も若いIWR109a内の命令が第2段のIWR109a内の命令である場合には、第2の演算子109_1cのみから出力される「1」が、第2段のIWR109a内の命令に対するDリバースの実行を指示するD2_REVERSE信号S2として、そのD2_REVERSE信号S2用の信号線に出力される。また、段数が最も若いIWR109a内の命令が第3段のIWR109a内の命令である場合には、第3の演算子109_1cのみから出力される「1」が、第3段のIWR109a内の命令に対するDリバースの実行を指示するD3_REVERSE信号S3として、そのD3_REVERSE信号S3用の信号線に出力される。
本実施形態では、このDリバース指示回路109_1により、ストールすることが複数の命令について確認された場合に、段数が最も若いIWR109a内の命令についてのDリバースの実行が指示される。
次に、Dリバースが実行されたときの、CPU10における各ポインタの制御について説明する。
図16は、Dリバースが実行されたときの、CPU10における各ポインタの制御の流れを示す概念図である。
この図16には、上記の図12に示したスレッド0用ポインタ251、スレッド1用ポインタ252、保存用ポインタ253、および対象スレッド指示部254が、デコード部109への命令の投入を制御する役割も担っている命令バッファ104に備えられている様子が示されている。さらに、本実施形態では、命令バッファ104に、Dリバースが実行されたときの再度のプリゼンテーションの際に参照されるDリバース用ポインタ256が備えられている。
また、上記の図12に示した再プリゼンテーション対象スレッド指示部255は、この図16に示すようにデコード部109に備えられている。
上記の図12を参照して説明した通常のプリゼンテーションのときには、プリゼンテーションの度に、スレッド0用ポインタ251あるいはスレッド1用ポインタ252が更新される。さらに、対象スレッド指示部254が指示するスレッド用のポインタの更新前の内容が保存用ポインタ253にコピーされ、このときの対象スレッド指示部254の指示内容が再プリゼンテーション対象スレッド指示部255にコピーされる。
ここで、Dリバースが実行されたときには、Dリバース用ポインタ256の内容が、保存用ポインタ253の内容を使って次のように生成される。
図17は、保存用ポインタ253の内容の生成を、具体的な数値例を使って表形式で示す図である。
この図17の例では、プリゼンテーションされたスレッド0の4個の命令のうち、第2段のIWR109a内の命令についてDリバースが実行されている。
まず、スレッド0の4個の命令のプリゼンテーション時には、対象スレッド指示部254に格納されているスレッドの番号は「0」である。このときに参照されるスレッド0用ポインタ251におけるTH0_CURRENT_IBR情報I8、TH0_NSI_CTR情報I10、およびTH0_NEXT_SEQ_IBR情報I9が、この図17の例では、それぞれ「1」,「5」,「3」となっている。これら3つの情報が参照されることで、命令バッファ104における第0段から第7段までのIBR104aのうち第1段のIBR104a中の5番目の命令から8番目の命令までの4個がプリゼンテーションされる。そして、プリゼンテーション後にスレッド0用ポインタ251の内容が次回のプリゼンテーション用に「3」,「1」,「5」に更新される。また、更新前の内容が保存用ポインタ253に保存され、対象スレッド指示部254に格納されていたスレッドの番号「0」が再プリゼンテーション対象スレッド指示部255にコピーされる。
ここで、上記のD2_REVERSE信号S2用の信号線に、「1」がD2_REVERSE信号S2として出力され、その結果、プリゼンテーションされた4個の命令のうち第2段のIWR109a内の命令についてDリバースが実行されると、保存用ポインタ253に保存されているそのプリゼンテーション時のスレッド0用ポインタ251の内容から、Dリバース用ポインタ256の内容が生成される。この図17の例では、Dリバースが実行されたのが、第2段のIWR109a内の命令であるので、上記の第1段のIBR104a中の5番目から数えて3個目に相当する7番目の命令についてDリバースが実行されたことになる。本実施形態では、デコード部109において、このDリバースが実行された命令以降の命令が無効化されるので、再度のプリゼンテーションでは、このDリバースが実行された命令が先頭となる。つまり、Dリバース用ポインタ256におけるCURRENT_IBR情報、NSI_CTR情報、およびNEXT_SEQ_IBR情報が、この図17に示すように、それぞれ「1」,「7」,「3」となる。
このようにDリバース用ポインタ256の内容が生成されると、図16に示すように、再プリゼンテーション対象スレッド指示部255が指示する、Dリバース実行時にコピーされたスレッド用のポインタの内容が、その生成されたDリバース用ポインタ256の内容に更新される。この更新されたポインタの内容は、再度のプリゼンテーションが実行されてそのスレッドについての処理が再開されるまで維持される。そして、Dリバース後に、ストール要因が解消されると、それまで維持されていた上記のポインタの内容に基づいてプリゼンテーションが行われる。
以上、説明した、ストールの発生から再度のプリゼンテーションの実行までの処理の流れを、フローチャートにまとめる。
図18は、ストールの発生から再度のプリゼンテーションとデコードが行われるまでの処理の流れを示すフローチャートである。
まず、デコード部109でストールが検出されると(ステップS301)、ストールすることが確認された命令以降の命令がデコード部109で無効化されて、その命令についてのDリバースが実行される(ステップS302)。続いて、上述したDリバース用ポインタ256の内容の生成と、ストールすることが確認された命令が属するスレッド用のポインタの更新が実行される(ステップS303)。本実施形態では、ここまでの処理が、1サイクルで実行される。
ここで、Dリバースが実行されたサイクルと同じサイクルで、例えば先行命令のコミットが終了して必要なオペランドが得られた等というように、ストール要因が解消されたと仮定する。本実施形態では、この場合、上記のステップS301からステップS303までの処理が実行されたサイクルの次のサイクルでは、ストールすることが確認された命令が属するスレッドとは別のスレッドに対する処理に優先して、ストールすることが確認された命令が属するスレッドについての再度のプリゼンテーションが実行される(ステップS304)。そして、その再度のプリゼンテーション(ステップS304)の次のサイクルで、ストールすることが確認された命令以降の命令がデコードされる(ステップS305)。
この図18のフローチャートが示す処理は、ストール要因が最短で解消されたと仮定したときの処理であり、このような仮定以外の場合には、Dリバースが実行された後のサイクルでは、ストール要因が解消されるまで、ストールすることが確認された命令が属するスレッドとは別のスレッドにデコード部109が明け渡されて、このスレッドに対する処理が優先的に実行される。
ここで、CPU10で実行されるプログラムによっては、上記のようにストールが発生したときにストールすることが確認された命令が属するスレッドとは別のスレッドの処理を優先的に実行しようとしても、その別のスレッドが、CPU10において実行されていないアイドル状態にあったり、あるいは、その別のスレッドの命令がフェッチされておらず処理可能な命令が無い状態にあったりして、優先すべき対象が存在しないことがある。本実施形態では、このような場合には、上述した、ストール命令以降の命令の無効化およびDリバースの実行が止められ、ストール命令以降の命令がデコード部109のIWR109a内にそのまま留め置かれる。本実施形態では、このような処理を可能とするために、優先すべき対象の不在を検出する不在検出回路が備えられている。
図19は、不在検出回路を示す図である。
この図19に示すように、本実施形態では、現在処理中のスレッドとは別のスレッドがアイドル状態にある場合には、そのことがOSから通知される。また、現在処理中のスレッドとは別のスレッドについて命令がフェッチされておらず処理可能な命令が無い状態にある場合には、そのことが命令バッファ104から通知される。
図19に示す不在検出回路257は、上記の2種類の通知のうち、何れか一方の通知があった場合に「1」を出力するOR演算子257aと、このOR演算子257aが「1」を出力した場合に、ストール命令以降の命令の無効化およびDリバースの実行の抑止要件があることをデコード部109に通知する通知回路257bとを備えている。この不在検出回路257から上記の抑止要件があることを通知されると、ストール命令以降の命令が、デコード部109にそのまま留め置かれることとなる。
このような抑止要件がなく、ストール命令以降の命令の無効化およびDリバースが実行されて、それらの命令が属するスレッドとは別のスレッドにデコード部109が明け渡されたときには、その別のスレッドの命令の処理が優先的に行われるとともに、命令バッファ104において、ストール要因に対する監視が行われる。そして、ストール要因が解消した旨の情報が得られると、命令バッファ104は、ストール命令が属するスレッドについて上述した再度のプリゼンテーションを行う。
図20は、ストールの発生からストール要因に対する監視を経て再度のプリゼンテーションの実行に至る処理を示すフローチャートである。
実行資源が確保できない、あるいは、シンク属性の命令についてオペランドが得られていないといったストール要因のために命令についてストールすることが確認され、その命令についてDリバースが実行されると(ステップS401)、命令バッファ109においてストール要因に対する監視が行われる(ステップS402)。この監視は、実行資源として使われるレジスタの空き状況やオペランドが格納されるレジスタの内容を毎サイクル確認することによって行われる。そして、この監視において、ストール要因が継続している旨の情報が得られた場合には(ステップS402におけるYES判定)、命令バッファ109は、ストールしていない他のスレッドの命令のプリゼンテーションを行う(ステップS403)。一方、ストール要因が解消している旨の情報が得られた場合には(ステップS402におけるNO判定)、命令バッファ109は、ストールしていたスレッドの命令について再度のプリゼンテーションを行う(ステップS404)。
次に、命令バッファ109のIBR109aの開放について説明する。
本実施形態では、命令バッファ109のIBR109aは、IBR109a中の8個の命令全てについてデコード部109でDリリースされた時点で、それら8個の命令が消去されて開放される。ストールの発生が無ければ、IBR109a中の8個の命令はデコード部109における1回のデコードで4個ずつDリリースされるので、2回のデコードが終了した時点でIBR109aが開放されることとなる。
ここで、ストールの発生に伴う中途半端な位置からの再度のプリゼンテーションがあると、1回のデコードでDリリースされる4個の命令が2つのIBR109aに跨ってしまうことがある。本実施形態では、このような場合に、IBR109aを効率的に開放するために、次のような工夫が施されている。
図21は、1回のデコードでDリリースされる4個の命令が2つのIBR109aに跨ってしまう場合におけるIBR109aの開放を説明するための説明図である。
この図21の例では、第1段のIBR109a中の5番目の命令から数えて4個の命令がデコード部109にプリゼンテーションされる。ここで、第1段のIBR109a中の命令は3個めに相当する7番目の命令で尽きるので、上記のポインタで示される次に命令が取り出されるIBR109aの段数に従って、その段数のIBR109a中の0番目の命令が4個めの命令としてプリゼンテーションされる。図21の例では、保存用ポインタ253のD_TH_NEXT_SEQ_IBR情報I15が示すように、次に命令が取り出されるIBR109aの段数は「3」であり、第3段のIBR109a中の0番目の命令が4個めの命令としてプリゼンテーションされている。
プリゼンテーションされた4個の命令は、第0段から第3段までの4つのIWR109aに順次に格納され、この格納された順番にデコードされてDリリースされる。このとき、図21の例では、第2段のIWR109a内の命令がDリリースされた時点で、命令バッファ104の第1段のIBR104a中の全ての命令についてDリリースされたことになる。本実施形態では、このように、IBR104a開放の条件が揃った場合には、すべてのIWRの命令デコードの終了を待たずにそのIBR104aの開放が行われる。図21の例では、第2段のIWR109a内の命令がDリリースされた時点で、第1段のIBR104aの開放が行われることとなる。本実施形態では、このような開放方法により処理の効率化が図られている。
以上、説明したように、本実施形態のCPU10では、デコード部109で命令についてストールすることが確認された場合には、同一スレッド中でストール命令以降の命令が無効化されることで、デコード部109が、他のスレッドに明け渡される。そして、ストール命令が属するスレッドについては、ストール要因の解消後に、プリゼンテーションから再開される。このような処理により、図8のCPU10における、リザベーションステーション210への命令の投入までの処理が2種類のスレッドについてスムーズに行われることとなる。
以下、図8を参照して、CPU10における、リザベーションステーション210への命令投入以降の処理について説明する。
デコード部109は、上述したように、デコード済みの命令に対して、「0」から「63」のIIDを、各スレッドでのデコード順に割り振る。そして、デコード済みの命令をIIDと共にリザベーションステーション210に渡す。また、本実施形態では、CSE12は、上述したように、スレッド0用の32個エントリ群127_0と、スレッド1用の32個のエントリ群127_1とを有している。そして、デコード部109は、デコード済みの命令をリザベーションステーション210に渡す際には、CSE127における、デコード対象の命令が属するスレッド用のエントリ群における空きエントリに、デコード対象の命令に割り振ったIIDをセットする。
リザベーションステーション210は、実行に必要な入力データが揃った命令のうち格納されている古い命令から、順次に実行パイプライン220に投入する。
実行パイプライン220それぞれは、図6に示す6種類の演算器それぞれに相当する。そして、実行パイプライン220での実行が終了すると、実行結果がレジスタ更新バッファ230に格納される。このレジスタ更新バッファ230は、図6に示すGUB115およびFUB117に相当する。また、実行パイプライン220での実行終了時には、CSE127に向けて実行完了通知が送られる。この実行完了通知には、その実行完了通知に対応する命令のIIDと、その命令のコミットに必要なコミット情報とが記載されている。CSE127は、実行完了通知が送られてくると、CSE127が有する64個のエントリのうち、実行完了通知に記載のIIDと同じIIDがセットされているエントリに、その実行完了通知に記載のコミット情報を格納する。
また、CSE127は、各エントリ群127_0,127_1に格納されている各命令に対応するコミット情報に従ったレジスタの更新を、イン・オーダ実行により、スレッド中の処理順に従って行う命令コミット部127_3を有している。
図22は、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は、図8に示すように、その命令が属するスレッドに対応するプログラムカウンタおよびコントロールレジスタを更新する。さらに、命令コミット部127_3は、図6のGPR114やFPR116に相当する、スレッド毎に設けられているレジスタ240_0,240_1のうち、コミット対象の命令が属するスレッドに対応するレジスタを更新するようにレジスタ更新バッファ230に指示を出す。さらに、上記のCSE127に保持されているそのコミット対象の命令が消去される。。
以上、説明したように、本実施形態のCPU10では、デコード部109で命令についてストールすることが確認された場合には、デコード部109が、他のスレッドに明け渡されることで処理の円滑化と効率化とが図られている。
ところで、ここまで、SMT機能を有するCPU10における複数スレッドの命令の処理を、上記のDリバースや再度のプリゼンテーションの実行等といった工夫によって効率的に行うことについて説明してきた。
ここで、このような工夫によれば、複数スレッドの命令の処理の効率化に加えて、後述の別の効果をも得ることができる。また、この別の効果については、本実施形態のようなSMT機能を有するCPU10だけでなく、シングルスレッディングタイプのCPUでも得ることができる。以下、この別の効果について、説明を簡単なものとするために、シングルスレッディングタイプのCPUでの処理を例に挙げて説明する。
まず、この別の効果がどのような状況で得られるかについて説明する。
図23は、命令の処理の効率化とは別の効果が得られる状況を説明する図である。
CPUで処理される命令の中には、デコード時に複数の命令部分に分解され、複数サイクルかけてデコードされるマルチフロー命令と呼ばれる命令がある。図23の例では、図中1つめのサイクル(ステップS451)で、デコード部301の4個のIWR301aに格納された4つの命令A,B,C,Dのうち、第2段のIWR301aに格納された命令Cが、2フロータイプのマルチフロー命令となっている。ここで、この命令に後続する命令Dが先行命令のDリリースが終了するまでデコードできない。第2段のIWR301aに格納された命令Cはデコードに2サイクルを要するので、図23に示すように後続の命令Dがストールしてしまう。続く2つめのサイクル(ステップS452)では、命令Cの2サイクルめのデコードが行われて後続の命令Dのストールが続き、3つめのサイクル(ステップS453)で、ようやく後続の命令DがDリリースされて実行が開始される。
ここで、この図23に示す3つのサイクルそれぞれにおけるデコード数を見ると、1つめのサイクル(ステップS452)では3つ、2つめのサイクル(ステップS452)では1つ、3つめのサイクル(ステップS452)では1つとなる。このように、この図23に示す例では、1つしか命令がデコードされないサイクルが連続して2サイクル続くこととなり、デコードについてのスループットが低い。
そこで、このような状況に、上記のDリバースや再度のプリゼンテーションの実行等といった工夫を次のように活用することで、デコードについてのスループットが向上するという、SMT機能の命令の処理の効率化とは別の効果を得ることができる。
図24は、スループットの向上という別の効果図について説明する図である。
この図24の例でも、上記の図23と同様に、命令バッファ401の4個のIWR401aに格納された4つの命令A,B,C,Dのうち、第2段のIWR401aに格納された命令Cが2フロータイプのマルチフロー命令である。
ここで、この図24の例では、1つめのサイクル(ステップS461)でシンク属性の命令Dについて、先行命令がマルチフロー命令であることからストールが発生することが確認されると、直ちにその命令Dが無効化され、不図示の命令バッファに対してデコード部401から、この命令DについてDリバースが実行される。続く2つめのサイクル(ステップS462)では、命令Cの2サイクルめのデコードが行われる。そして、この2つめのサイクル(ステップS462)において命令Dのストール要因が解消されるので、次の3つめのサイクル(ステップS463)では、命令D以降の4個の命令D,E,F,Gが、4個のIWR401aに格納されてデコードが行われる。この図24に示す3つのサイクルそれぞれにおけるデコード数を見ると、1つめのサイクル(ステップS452)では3つ、2つめのサイクル(ステップS452)では1つ、3つめのサイクル(ステップS452)では4つとなる。
上記の図23の例のように、Dリバースや再度のプリゼンテーションの実行等が行われないときには、ストール命令がデコードされる際は、その命令しかデコードされないのに対し、この図24に示す例のように、Dリバースや再度のプリゼンテーションの実行等が行われると、ストール命令がデコードされる際は、その命令以降の命令もデコードされることになるのでスループット向上の効果が得られることとなる。
また、ここまでシングルスレッディングタイプのCPUの処理を例に挙げて、マルチフロー命令を処理する際のスループット向上の効果について説明したが、このような効果は、SMT機能を有するCPUでマルチフロー命令を処理する際にも同様に得ることができる。
尚、上記では、SMT機能を有するCPUとして、2種類のスレッドの命令を同時に処理するCPU10を例示したが、SMT機能を有するCPUは、例えば3種類のスレッドの命令を同時に処理するもの等であっても良い。

Claims (6)

  1. 複数命令を有するスレッドから命令を取得する命令フェッチ部と、
    複数のエントリーを有し、前記取得された命令を前記複数のエントリーのうちいずれかのエントリーに保管する命令バッファと、
    前記命令バッファから出力された命令を保持し、その保持した命令を解読する命令デコード部と、
    前記複数のエントリーのうち、前記命令デコード部によって解読される命令を保管している1つのエントリーを示すポインタ値を保管するバッファポインタと、
    前記ポインタ値をバックアップのために保管するバックアップポインタと、
    前記解読された命令を実行する命令実行部と、
    前記バッファポインタと前記バックアップポインタとを制御する命令投入制御部とを有し、
    前記命令投入制御部は、前記命令デコード部によって解読された解読済み命令がストール要因を有している場合、前記バックアップポインタに保管されているポインタ値に基づいて、前記バッファポインタに保管されているポインタ値を、前記命令バッファ内の、前記ストール要因を有している解読済み命令の解読前の命令が保管されているエントリーを示すポインタ値に更新し、前記命令デコード部が保持している、前記解読済み命令および該解読済み命令に後続する後続命令を無効化するとともに、前記命令バッファに、保管中の命令を保管し続けさせ、さらに、
    前記命令投入制御部は、前記解読済み命令の前記ストール要因が解消した場合、前記バッファポインタに保管されている更新後のポインタ値に基づいて、前記命令デコード部に、前記命令バッファが保管し続けている命令を解読させる
    ことを特徴とする命令制御装置。
  2. 前記命令フェッチ部は、複数のスレッドから命令を取得し、
    前記命令バッファは、前記取得された前記複数のスレッドに含まれる命令を保管し、
    前記バッファポインタは、前記複数のスレッドそれぞれ毎に備えられており、各バッファポインタは、前記複数のエントリーのうち、対応したスレッドから取得され前記命令デコード部によって解読される命令を保管している1つのエントリーを示すポインタ値を保管し、
    前記命令投入制御部は、前記解読済み命令がストール要因を有している場合、該ストール要因を有している該解読済み命令が取得されたスレッドに対応した前記バッファポインタに保管されている前記ポインタ値を、前記バックアップポインタに保管されているポインタ値に基づいて、前記命令バッファ内の、前記ストール要因を有している解読済み命令の解読前の命令が保管されているエントリーを示すポインタ値に更新し、前記命令デコード部が保持する前記解読済み命令と前記後続命令とを無効化するとともに、前記命令バッファに、その更新後のポインタ値に対応した前記保管中の命令を保管し続けさせるとともに、該ストール要因を有している該解読済み命令が取得されたスレッドとは異なるスレッドに対応した前記バッファポインタに保管されている前記ポインタ値に基づいて、前記命令デコード部に、該異なるスレッドから取得された命令を解読させ、さらに、
    前記命令投入制御部は、前記解読済み命令の前記ストール要因が解消した場合、該解読済み命令が取得されたスレッドに対応した前記バッファポインタに保管されている前記更新後のポインタ値に基づいて、前記命令デコード部に、該命令バッファが保管し続けている命令を解読させる
    ことを特徴とする請求項1記載の命令制御装置。
  3. 前記命令投入制御部は、前記ストール要因を有している前記解読済み命令が属するスレッドとは異なるスレッドに属する命令を前記命令バッファが保管していない場合には、前記命令デコード部が保持する前記解読済み命令と前記後続命令とを無効化せずに該命令デコード部にそのまま留め置く
    ことを特徴とする請求項2記載の命令制御装置。
  4. 前記命令投入制御部は、前記命令バッファが保管し続けている命令が実行可能であるか否かを表す情報を有し、前記解読済み命令の前記ストール要因が解消した場合、前記命令デコード部に、該命令バッファが保管し続けている命令を前記情報に基づいて解読させる
    ことを特徴とする請求項1から3のうちいずれか1項に記載の命令制御装置。
  5. 前記命令投入制御部は、前記命令バッファが保管し続けている命令のうち前記ストール要因を有している命令の該ストール要因が、前記命令バッファが保管し続けている命令のうち前記ストール要因を有している命令に先行する命令が、解読に複数サイクルを要するマルチフロー命令であることに起因したものである場合、該マルチフロー命令の解読が完了するサイクルの次のサイクルで、該ストール要因を有している命令と、前記命令バッファが保管し続けている命令のうち該ストール要因を有している命令の後続命令とを前記命令デコード部に解読させる
    ことを特徴とする請求項1から4のうちいずれか1項に記載の命令制御装置。
  6. 複数のエントリーを有する命令バッファと、前記複数のエントリーのうち、命令デコード部によって解読される命令を保管している1つのエントリーを示すポインタ値を保管するバッファポインタと、前記ポインタ値をバックアップのために保管するバックアップポインタと、前記バッファポインタと前記バックアップポインタとを制御する命令投入制御部とを有する命令制御装置の制御方法において、
    複数命令を有するスレッドから命令を取得し、
    前記取得された命令を、前記命令バッファの前記複数のエントリーのうちいずれかのエントリーに保管し、
    前記命令バッファから出力された命令を前記命令デコード部に保持し、
    前記命令デコード部に保持されている命令を解読する制御方法であって、
    前記命令投入制御部は、前記命令デコード部によって解読された解読済み命令がストール要因を有している場合、前記バックアップポインタに保管されているポインタ値に基づいて、前記バッファポインタに保管されているポインタ値を、前記命令バッファ内の、前記ストール要因を有している解読済み命令の解読前の命令が保管されているエントリーを示すポインタ値に更新し、前記命令デコード部が保持している、前記解読済み命令および該解読済み命令に後続する後続命令を無効化するとともに、前記命令バッファに、保管中の命令を保管し続けさせ、さらに、
    前記命令投入制御部は、前記解読済み命令の前記ストール要因が解消した場合、前記バッファポインタに保管されている更新後のポインタ値に基づいて、前記命令デコード部に、前記命令バッファが保管し続けている命令を解読させる
    ことを特徴とする制御方法。
JP2009520194A 2007-06-20 2007-06-20 命令制御装置及び制御方法 Expired - Fee Related JP5168277B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2007/062426 WO2008155840A1 (ja) 2007-06-20 2007-06-20 命令制御装置及び命令制御方法

Publications (2)

Publication Number Publication Date
JPWO2008155840A1 JPWO2008155840A1 (ja) 2010-08-26
JP5168277B2 true JP5168277B2 (ja) 2013-03-21

Family

ID=40156006

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009520194A Expired - Fee Related JP5168277B2 (ja) 2007-06-20 2007-06-20 命令制御装置及び制御方法

Country Status (6)

Country Link
US (1) US20100100709A1 (ja)
EP (1) EP2169539A4 (ja)
JP (1) JP5168277B2 (ja)
KR (1) KR101122180B1 (ja)
CN (1) CN101689109A (ja)
WO (1) WO2008155840A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7392942B2 (ja) 2017-07-07 2023-12-06 ダイキン工業株式会社 振動センサおよび圧電素子

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10346173B2 (en) 2011-03-07 2019-07-09 Oracle International Corporation Multi-threaded instruction buffer design
US8984511B2 (en) * 2012-03-29 2015-03-17 Advanced Micro Devices, Inc. Visibility ordering in a memory model for a unified computing system
US10095518B2 (en) * 2015-11-16 2018-10-09 Arm Limited Allowing deletion of a dispatched instruction from an instruction queue when sufficient processor resources are predicted for that instruction

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6016542A (en) * 1997-12-31 2000-01-18 Intel Corporation Detecting long latency pipeline stalls for thread switching
JP2003516570A (ja) * 1999-12-09 2003-05-13 インテル・コーポレーション マルチスレッド・プロセッサ内の複数のスレッドに入り、出る方法と装置
US20060206692A1 (en) * 2005-02-04 2006-09-14 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
JP2006343872A (ja) * 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法
JP2008530655A (ja) * 2005-02-04 2008-08-07 ミップス テクノロジーズ インコーポレイテッド マルチスレッディングマイクロプロセッサ内の分岐型スレッドスケジューラ

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW353732B (en) * 1994-03-31 1999-03-01 Ibm Processing system and method of operation
TW260765B (ja) * 1994-03-31 1995-10-21 Ibm
US5933627A (en) * 1996-07-01 1999-08-03 Sun Microsystems Thread switch on blocked load or store using instruction thread field
US6609193B1 (en) * 1999-12-30 2003-08-19 Intel Corporation Method and apparatus for multi-thread pipelined instruction decoder
US6694425B1 (en) * 2000-05-04 2004-02-17 International Business Machines Corporation Selective flush of shared and other pipeline stages in a multithread processor
JP3564445B2 (ja) * 2001-09-20 2004-09-08 松下電器産業株式会社 プロセッサ、コンパイル装置及びコンパイル方法
JP3769249B2 (ja) * 2002-06-27 2006-04-19 富士通株式会社 命令処理装置および命令処理方法
JP3727324B2 (ja) * 2004-04-26 2005-12-14 松下電器産業株式会社 プロセッサ及びコンパイル装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6016542A (en) * 1997-12-31 2000-01-18 Intel Corporation Detecting long latency pipeline stalls for thread switching
JP2003516570A (ja) * 1999-12-09 2003-05-13 インテル・コーポレーション マルチスレッド・プロセッサ内の複数のスレッドに入り、出る方法と装置
US20060206692A1 (en) * 2005-02-04 2006-09-14 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
JP2008530655A (ja) * 2005-02-04 2008-08-07 ミップス テクノロジーズ インコーポレイテッド マルチスレッディングマイクロプロセッサ内の分岐型スレッドスケジューラ
JP2006343872A (ja) * 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNG200501050010; 薄井 弘之: 'Responsive Multithreaded Processorの命令供給機構' 情報処理学会論文誌 第45巻 No.SIG11(ACS7) , 200410 *
JPN6012043091; 薄井 弘之: 'Responsive Multithreaded Processorの命令供給機構' 情報処理学会論文誌 第45巻 No.SIG11(ACS7) , 200410 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP7392942B2 (ja) 2017-07-07 2023-12-06 ダイキン工業株式会社 振動センサおよび圧電素子

Also Published As

Publication number Publication date
KR101122180B1 (ko) 2012-03-20
JPWO2008155840A1 (ja) 2010-08-26
CN101689109A (zh) 2010-03-31
US20100100709A1 (en) 2010-04-22
EP2169539A1 (en) 2010-03-31
EP2169539A4 (en) 2010-12-29
KR20100007972A (ko) 2010-01-22
WO2008155840A1 (ja) 2008-12-24

Similar Documents

Publication Publication Date Title
US11275590B2 (en) Device and processing architecture for resolving execution pipeline dependencies without requiring no operation instructions in the instruction memory
KR101148495B1 (ko) 파이프라인 프로세서에서 조건 명령 실행을 촉진시키기 위해 로컬 조건 코드 레지스터를 이용하기 위한 방법 및 장치
JP4610593B2 (ja) デュアルスレッドプロセッサ
TWI423123B (zh) 用於推測性指令之無效的通用分支系統、其方法、其識別器與其電腦可讀取儲存媒體
US7624253B2 (en) Determining register availability for register renaming
US20060149931A1 (en) Runahead execution in a central processing unit
JP4327008B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP5168277B2 (ja) 命令制御装置及び制御方法
US6934828B2 (en) Decoupling floating point linear address
JP5155655B2 (ja) マイクロプロセッサ出力ポート、及び、そこから提供された命令の制御
JP3816845B2 (ja) プロセッサ及び命令制御方法
JP5115555B2 (ja) 演算処理装置
JP3800533B2 (ja) プログラムカウンタ制御方法及びプロセッサ
JP3839755B2 (ja) 命令制御方法及びプロセッサ
JP5093237B2 (ja) 命令処理装置
US11194577B2 (en) Instruction issue according to in-order or out-of-order execution modes
US20220075624A1 (en) Alternate path for branch prediction redirect
US20160283233A1 (en) Computer systems and methods for context switching
US20040128488A1 (en) Strand switching algorithm to avoid strand starvation
US10552156B2 (en) Processing operation issue control
JPH04220722A (ja) パイプライン処理装置
JP3971780B2 (ja) 命令制御方法
JP2024040922A (ja) 演算処理装置、演算処理方法及び情報処理装置
JP2000339185A (ja) スーパースカラプロセッサ

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110808

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120821

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121002

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20121127

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121210

LAPS Cancellation because of no payment of annual fees