JP5201140B2 - 同時マルチスレッドの命令完了制御装置 - Google Patents

同時マルチスレッドの命令完了制御装置 Download PDF

Info

Publication number
JP5201140B2
JP5201140B2 JP2009520145A JP2009520145A JP5201140B2 JP 5201140 B2 JP5201140 B2 JP 5201140B2 JP 2009520145 A JP2009520145 A JP 2009520145A JP 2009520145 A JP2009520145 A JP 2009520145A JP 5201140 B2 JP5201140 B2 JP 5201140B2
Authority
JP
Japan
Prior art keywords
thread
entry
completion
cse
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
JP2009520145A
Other languages
English (en)
Other versions
JPWO2008155804A1 (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 JPWO2008155804A1 publication Critical patent/JPWO2008155804A1/ja
Application granted granted Critical
Publication of JP5201140B2 publication Critical patent/JP5201140B2/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, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/507Low-level

Description

本発明は、複数のスレッドを同時に処理するCPUにおける命令完了制御装置に関する。
CPUの処理を高速に行う手段として、従来から様々な技術が使用されてきた。その手段として用いられてきた方法としてパイプライン処理、さらに、並列に処理を行うスーパースカラ方式ある。また、プログラム命令の順番通りに実行を行わず、入力データが揃った命令から実行を行う、アウト・オブ・オーダー実行方式がある。
しかし、これらの方式を用いたとしても、走行しているプログラムの種類などにもよるが、キャッシュミスが発生したときには、データが来るまでCPUは何も処理できない時間が存在している。また、CPUが動作している場合でも、さまざまな場所で動作していない回路が多く存在している。
例えば、プログラムの順番通りに命令を完了してプログラマブルな資源(アーキテクチャレジスタやメモリなど、ソフトから見えるハードウェア資源)の更新(解放等)を行う場合に、最も古い命令の実行が完了していない状態であれば、命令の実行が完了するのを待つことになり、その間は、資源の更新はできない状態となる。また、使用されていないリソースが存在している状況や、使用しているリソースであっても十分にリソースを使用しきれてはいない状況が存在する。
このCPUが動作していない状況を少しでも減らすために、単一のプログラムを走行するのではなくて複数のプログラムを走行することで改善するマルチスレッド方式がとられている。複数のプログラムを走行するマルチスレッド方式は、CPUのプログラマブルな資源を複数組用意しておくことでソフトウェアから見ると見掛け上は複数のCPUに見えるために、複数のプログラムを実行することが可能となる構造である。
このマルチスレッドの方法の1つとしてVMT(Vertical Multi Threading)方式がある。この方式は、CPUの実行スピードに比べてメモリのアクセス時間が大幅に遅いことに着目している。CPUは、1つのプログラムしか走行することはできないが、走行しているプログラムがキャッシュミスして長時間待つことが明らかな場合には、別のプログラムに切り替えて走行させることが可能となる。キャッシュミスしたときにCPUは別のプログラムに切り替えて走行するために、CPUが何もしない状態を減らすことが可能である。また、VMT方式での回路量については、プログラマブルな資源はスレッド数分を用意しなければならないが1つのプログラムが基本的に動作する回路についての変更はないので、追加する回路量も少なくて実現可能である。
しかし、キャッシュミスなどによって長時間待つ場合は、この方式でも解決できるが、通常状態で動作しているときには、さまざまな場所で動作していない回路やすべてのリソースを使用するのは難しい状態には変わらない。これらの回路やリソースを少しでも動作させるために、同時にプログラムを走行することで、CPUの動作率を向上することが可能となる。この複数のプログラムを同時に走行する方式を同時マルチスレッド方式(SMT(Simultaneous Multi Threading)方式)と呼ぶ。
同時マルチスレッド方式の場合は、複数のスレッドが同時に動作するために、あるスレッドが停止していても、他のスレッドが動作することが可能となるためにCPU全体でみたときの動作率は向上し、リソースの使用率についても向上する。しかし、複数のスレッドに対応するために、各機能の回路を単純にスレッド分追加したりすると回路量が膨大に増加してしまい、動作周波数の向上も難しくなり、また、回路量が増加するということは制御方法も複雑になることが予想される。
複数のスレッドが同時マルチスレッド方式で動作したときに、命令の完了判別と資源の更新の制御を行うCSEの同時マルチスレッドに対応した構成と制御を実現するに際し、単一スレッドのみで動作していたときから比べて、増加する回路量をなるべく少なくすることと、動作周波数を維持もしくは向上できるようなCSEの構成と命令の完了判別と資源の更新の制御を行う必要がある。
特許文献1には、CSE(Commit Stack Entryの動作が記載されている。特許文献2には、マルチスレッドプロセッサにおけるサスペンド命令の実行の処理の技術が開示されている。特許文献3においては、SMTシステムにおいて、出来る限り高速に新しい命令グループをディスパッチするための技術が開示されている。
特開2000−20306号公報(特許第3469469号) 特表2005−514698号公報 特開2004−326738号公報
本発明の課題は、同時マルチスレッド方式を採用したシステム用に構成されたCSEを提供することである。
本発明の情報処理装置は、命令の実行をパイプラインでアウト・オブ・オーダーで行い、イン・オーダーで命令の実行を完了する情報処理装置において、完了処理と、完了した命令のプログラマブルな資源の更新の制御を行なうために、命令の実行完了に伴う資源更新までの制御を行うためのデータを格納するエントリの記憶領域を備え、各エントリを、同時に実行されるスレッドの数分の、各スレッドに対応する連続領域に分けて格納するコミットスタックエントリ(CSE)手段と、該CSE手段のエントリの中から、完了判別の対象となるエントリのスレッドを1つ選択するスレッド選択手段と、該スレッド選択手段によって選択されたスレッドに対応するCSE手段のエントリの中から、未解放のエントリであり、かつ、最も古いエントリを先頭にして、完了判別の対象となるエントリのコピーを取得する完了対象エントリ手段と、該完了対象エントリ手段のエントリに対して、完了判別を行い、該エントリの命令のプログラマブルな資源の更新を行なう完了判別手段と資源の更新手段を備えることを特徴とする。
本発明の実施形態で考える情報処理装置の全体構成を示すブロック図である。 本発明の実施形態の概略を説明する図である。 本発明の実施形態のより詳しいブロック図である。 CSEのエントリの構成を示す図である。 命令デコーダから資源の更新までのパイプラインを示す図である。 CSEのエントリの選択からエントリ解放までの動作を説明する図(その1)である。 ポインタレジスタの構成例を示す図である。 CSEのエントリの選択からエントリ解放までの動作を説明する図(その2)である。 パイプラインをクリアする信号が発行されたときの処理のフロー図である。 スレッド選択回路の選択方法の処理フローを示す図である。 スレッド選択回路の回路図である。 クリア信号発生時とエントリが空の場合のスレッドの選択方法を説明する図である。 クリア信号発生時とエントリが空のスレッドの場合のスレッドの選択回路である。 実行待ち状態レジスタの構成図である。 実行待ち状態レジスタのセット方法を説明する図である。 実行待ち状態レジスタセット・リセット回路の回路図である。 実行待ち状態レジスタを用いたスレッド選択方法を示す図である。 実行待ち状態レジスタのスレッド選択回路の回路図である。 CSEのエントリの割り当て方を示す図(その1)である。 CSEのエントリの割り当て方を示す図(その2)である。 動作しているスレッドが3スレッド以上のときのスレッド選択方法の構成を示す図(その1)である。 動作しているスレッドが3スレッド以上のときのスレッド選択方法の構成を示す図(その2)である。 選択スレッド番号管理レジスタの動作を示す図(その1)である。 選択スレッド番号管理レジスタの動作を示す図(その2)である。 3スレッド以上のスレッド選択回路でのスレッド選択方法を示す図である。 選択スレッド番号管理レジスタのエントリ0と1のスレッド選択方法を示す図(その1)である。 選択スレッド番号管理レジスタのエントリ0と1のスレッド選択方法を示す図(その2)である。
単一スレッドのみでしか動作しないときのCSEの構成は、イン・オーダーでデコードされた命令について、デコード時に割り当てられた命令識別子に従ってCSEのエントリに格納していく。CSEのエントリから未解放の最も古いエントリの番号を示すポインタの番号と、完了判別で完了することが決定したエントリ数から、未解放の最も古いエントリを先頭にして、1サイクルで完了できる最大数分のエントリを完了対象エントリにコピーして、完了対象エントリのみに対して完了判別を行い、完了したエントリのみプログラマブルな資源の更新を行う制御を行っていた。
本発明の実施形態に従えば、複数のスレッドが同時マルチスレッドで動作するときには、CSEのエントリは外部から送られてくる、動作しているスレッドを示す信号から、動作しているスレッド数を得、動作しているスレッド数分にCSEのエントリを分割してエントリを構成することで、CSEのエントリに複数のスレッドが同時に有効となることを可能とする。CSEのエントリを分割してエントリを構成するときには、1つのスレッドに対して連続したCSEのエントリの番号で構成するようにエントリを割り当て、割り当てられた全てのスレッドに対して、スレッドの未解放のエントリで最も古いエントリの番号を示すポインタレジスタを備える。
CSEのエントリには、複数のスレッドが同時に有効となるが、完了対象エントリの命令の完了判別とプログラマブルな資源の更新の制御については、1サイクルで同時に1つのスレッドのみが可能であることとする。命令の完了判別とプログラマブルな資源の更新は、異なるパイプラインにあたるので、同じタイミングで見たときには、それぞれ異なるスレッドを処理することが可能である。完了判別の次の処理が資源の更新の制御にあたるので、完了判別を行ったスレッドが次サイクルのプログラマブルな資源の更新のスレッドになる。
完了対象エントリに格納されるエントリのスレッドを1つのスレッドにするためには、CSEのエントリから選択されるエントリを1つのスレッドのエントリとすることで可能となる。このために、動作しているスレッド分、あるポインタレジスタから1つのスレッドのポインタを毎サイクル選択するスレッド選択回路を備え、選択されたスレッドのポインタを用いて、CSEのエントリからスレッドを選択することで、1つのスレッドのみのエントリを選択することが可能となる。さらに、選択されたCSEのエントリは、完了判別で完了したエントリ数とスレッドの番号から、さらにエントリの選択を行い、選択されたエントリが完了対象エントリに格納される。毎サイクル完了対象エントリに格納するスレッドを選択することで、1つのスレッドが完了対象エントリに留まることがないために、毎サイクル異なったスレッドに対して、完了判別を行うことが可能となる。
スレッド選択回路は、外部から送られてくる動作しているスレッドを示す信号から、動作していないスレッドの情報を得ることで、スレッド選択回路では動作していないスレッドが完了対象のスレッドに選択されることがないことを保証して動作する。
毎サイクル完了対象エントリのスレッドを選択するスレッド選択回路は、完了対象エントリに格納しても完了することができない原因があるスレッドに対しては、スレッド選択回路で選択しないようにする。このようにすることで、完了対象エントリに格納されることがなくなるために、完了対象エントリの完了判別で完了することができないサイクルを少なくすることが可能となる。
スレッド別に分かれているパイプラインをクリアする信号が発行されたときに、スレッド選択回路は、クリア信号を発行したスレッドには、完了対象エントリのスレッドに選択しないようにする。また、動作しているスレッドについて、CSEのエントリが1つも有効でない状態であるスレッドが存在するときは、動作している他のスレッドのどれか1つでもCSEのエントリが1つでも有効である場合には、スレッド選択回路は、CSEのエントリが1つも有効でないスレッドには、完了対象エントリのスレッドに選択しないようにする。さらに、動作しているスレッドごとに未解放の最も古いエントリの実行待ち状態を監視する機能を備え、実行待ち状態のスレッドが存在する場合には、スレッド選択回路は、実行待ち状態のスレッドには、完了対象エントリのスレッドに選択しないようにする。そして、スレッド選択回路で、スレッドを選択する要因が1つもない場合には、スレッド選択回路で選択されていない時間が最も長いスレッドを選択するように完了対象エントリのスレッドを選択する。
図1は、本発明の実施形態による情報処理装置の全体構成を示すブロック図である。
1次命令キャッシュ10からフェッチされた命令は、命令バッファ11に入力される。命令バッファ11に格納された命令は、命令デコーダ12でデコードされる。そして、命令デコーダ12でによる命令のデコードの結果にしたがって、アドレス演算用リザベーションステーション13、固定小数点演算用リザベーションステーション14、浮動小数点演算用リザベーションステーション15、分岐命令用リザベーションステーション16に命令が送られる。また、デコードされた全ての命令は、CSE17に送られてCSE17にエントリを生成する。
アドレス演算用リザベーションステーション13にしたがって命令が実行される場合には、オペランドアドレス生成器18において、命令のオペランドのアドレス演算が行なわれる。実行された命令がロード命令の場合には、1次データキャッシュ19からデータの読み出しが行なわれる。読み出されたデータは、その種類によって、固定小数点更新バッファ21あるいは、浮動小数点更新バッファ24に格納される。命令が完了したときに、固定少数点バッファ21から固定小数点レジスタ22に、浮動小数点更新バッファ24から浮動小数点レジスタ25にデータの書き込みを行う。
固定小数点演算用リザベーションステーション14に従って命令が実行される場合には、演算器20に演算対象のデータが与えられ、演算結果が固定小数点更新バッファ21に書き込まれ、また命令が完了したときに固定小数点バッファ21からのデータが固定小数点レジスタ22に書き込まれる。
浮動小数点演算用リザベーションステーション15に従って命令が実行される場合には、演算器23に演算対象のデータが与えられ、演算結果が浮動小数点更新バッファ24に書き込まれ、命令が完了したときに浮動小数点バッファ24からのデータが浮動小数点レジスタ25に書き込まれる。
分岐命令用リザベーションステーション16によって命令が実行される場合には、命令の分岐先の情報が出力され、ネクストプログラムカウンタ26と、命令フェッチアドレス生成器29と、分岐予測機構28に命令分岐先情報が与えられる。
CSE17において、命令完了処理がすんだ場合には、その命令の情報がネクストプログラムカウンタ26とプログラムカウンタ27に与えられて、各カウンタの内容が更新される。また、固定小数点レジスタ22や浮動小数点レジスタなどのプログラマブルな資源の更新も行う。
プログラムカウンタ27の値は、命令フェッチアドレス生成器29に与えられる。命令フェッチアドレス生成器29は、1次命令キャッシュ10にフェッチすべき命令のアドレスを与える。
図2は、本実施形態の概略を説明する図である。
エントリ選択回路37は、CSE17から、命令完了を判定すべきエントリを選択する。エントリの選択に当たっては、スレッド選択回路36、ポインタレジスタ選択回路35からの信号及び完了対象のスレッドを示す完了対象スレッドIDと、完了判定部39からの信号を用いる。スレッド選択回路36は、完了を判定する命令のスレッドを選択する回路であり、選択結果は、ポインタレジスタ選択回路35、エントリ選択回路37、完了対象エントリ38に与えられる。完了対象エントリ38は、エントリ選択回路37で選択されたCSE17のエントリのコピーを格納する。また、完了対象エントリのみではなく、完了対象スレッドIDも完了対象エントリ38に格納される。完了対象エントリ38に格納された命令は、完了判定部39において、完了判定される。完了判定部39で完了したと判定された命令のスレッドのプログラマブルな資源については、更新が行なわれる。プログラマブルな資源の特定は、完了対象スレッドIDから得られる資源の更新スレッドIDによってなされる。また、完了判定部39の完了判定終了情報は、エントリ選択回路37に入力され、別のエントリの選択の契機とされる。図1について更に説明すると、命令フェッチを行うために、命令フェッチアドレス生成器29で選択された命令アドレスに対して命令フェッチリクエストを発行して、1次命令キャッシュ10からフェッチしてきた命令を命令バッファ11に格納する。命令バッファ11からプログラムの順番通りに命令デコーダ12に命令の供給を行い、命令デコーダ12はプログラムの順番通りに命令のデコードを行う。命令デコーダ12は、デコードする命令の種類に従って、命令の実行を制御する主記憶オペランドアドレス生成用リザベーションステーション(RSA:Reservation Station for Address generate)13、固定小数点演算用リザベーションステーション(RSE:Reservation Station for Execute)14、浮動小数点演算用リザベーションステーション(RSF:Reservation Station for Floating)15、分岐命令用リザベーションステーション(RSBR:Reservation Station for BRanch)16に必要なエントリを作成する。また、全てのデコードされた命令に対して、命令の完了を制御するコミットスタックエントリ(CSE:Commit Stack Entry)17にエントリを作成する。
デコードされた命令がRSA13、RSE14、RSF15にエントリを作成する場合には、固定小数点更新バッファ(GUB:General Update Buffer)21と浮動小数点更新バッファ(FUB:Floating Update Buffer)24に対応するレジスタリネームを行うことで、命令のアウト・オブ・オーダー実行を行うことが可能となり、実行結果はGUB21、FUB24に格納される。リザベーションステーションから、アウト・オブ・オーダーで実行された命令は、CSE17の制御によりプログラムの順番通りに命令の完了を行い、完了した命令に対してのみ、固定小数点レジスタ22や浮動小数点レジスタ25やプログラムカウンタ(PC27、NEXT_PC26)などのプログラマブルな資源の更新を行う。
図3は、本実施形態のより詳しいブロック図である。
命令デコーダ12でデコードされた命令は、アドレス演算用リザベーションステーション13、固定小数点演算用リザベーションステーション14、浮動小数点演算用リザベーションステーション15、分岐命令用リザベーションステーション16において実行される。命令の実行によって、実行完了した命令の識別子と共に、実行完了報告が生成され、実行完了エントリ選択回路47、完了対象エントリ選択回路46に与えられる。また、命令デコーダ12から命令識別子選択回路40に命令識別子が与えられ、命令識別子選択回路40で選択された命令識別子が生成エントリ選択回路41と、アドレス演算用リザベーションステーション13、固定小数点演算用リザベーションステーション14、浮動小数点演算用リザベーションステーション15、分岐命令用リザベーションステーション16それぞれに与えられる。
生成エントリ選択回路41は、命令デコーダ12でデコードされた命令の実行の完了を待つため、CSE17にエントリを作るためのエントリの選択を行なう。実行完了エントリ選択回路47は、実行完了報告の命令識別子から、実行完了したCSE17のエントリを選択する。解放エントリ選択回路42は、完了判別部39において命令の実行が完了したと判断され、CSE17から解放するエントリを選択する。完了対象エントリ選択回路46は、スレッド選択回路36とポインタ選択回路A44の信号から、完了判別を行なう対象命令が格納されているCSE17のエントリを選択する。完了対象エントリ選択回路46によって読み出されたエントリのコピーは、完了対象エントリ45に格納され、完了判別部39において、完了判別される。完了判別結果は、完了対象エントリ選択回路46、解放エントリ選択回路42に入力される。また、完了対象エントリ45の情報は、ポインタ選択回路B43に入力し、ポインタ選択回路B43によるポインタ選択結果が解放エントリ選択回路42のエントリ選択に使用される。また、完了対象エントリ45に格納されたエントリに対応する完了対象スレッドIDは、資源の更新スレッドIDとなり、完了判別部39において完了したと判別された命令に対応するスレッドのプログラマブルな資源の特定に使われる。完了判別部39で完了したと判別された命令については、対応するプログラマブルな資源が更新される。
以下、2つのスレッド(スレッド0と1)が動作していて、CSEのエントリは全部でNエントリ(実施例では、Nは奇数)の場合について説明する。スレッド数については、2つ以上のスレッドでも可能であるし、CSEのエントリについてもスレッド数以上のエントリを備えていれば実現可能である。
図4は、CSEのエントリの構成を示す図である。
CSEのエントリは、外部から送られてくる動作しているスレッドを示す信号から単一スレッドで動作しているか否かを判断し、動作しているスレッド数の情報を得ることで、動作しているスレッド数分にCSEのエントリを分割して構成される。このときに、CSEのエントリを動作しているスレッド数分に分割するときには、1つのスレッドに対して連続したCSEのエントリの番号で構成するようにエントリを割り当て、割り当てられた全てのスレッドに対して、スレッドの未解放のエントリで最も古いエントリの番号を示すポインタレジスタに、初期値となる番号を格納する。
2つのスレッド(スレッド0と1)が動作する場合は、CSEのエントリは図4の右下の図のように分割して構成される。スレッド0のCSEのエントリ領域は、0番〜(N−1)/2番、スレッド1のCSEのエントリ領域は、(N+1)/2番〜N番に割り当てられる。そして、ポインタレジスタの初期値として、スレッド0には0が格納され、スレッド1には、(N+1)/2が格納される。ポインタレジスタの値は、割り当てられた領域内の番号のみを示すように制御される。すなわち、スレッド0の(N−1)/2番の次のポインタレジスタは0番となり、スレッド1のN番の次のポインタレジスタは(N+1)/2番となる。単一のスレッドで動作するときには、CSEのエントリすべてを、動作しているスレッドに割り当てる。単一スレッドで動作するときには、スレッド0と1の両方ともポインタレジスタの初期値として0が格納される。
通常走行中に動作するスレッド数を変更する場合には、動作している全てのスレッドからクリア信号を発行して、全てのスレッドのパイプラインとCSEなどのワークレジスタとして使用しているリソースをクリアしてから、スレッド数が変更される。スレッド数が変更された場合には、CSEのエントリは、外部から送られてくる、動作しているスレッドを示す信号に従って構成を変更する。
図5は、命令デコーダから資源の更新までのパイプラインを示す図である。
命令をデコードするステージを命令デコードステージ、次のサイクルでCSEのエントリに格納するステージをエントリ格納ステージ、CSEのエントリからエントリを選択して完了対象エントリに選択されたCSEのエントリのコピーを格納するステージをエントリ選択ステージ、完了対象エントリに対して完了判別を行うステージを完了判別ステージ、プログラマブルな資源の更新を行うステージを資源の更新ステージとする。そして、エントリ選択ステージの1サイクルの前で、完了対象エントリに格納するスレッドを選択するので、エントリ選択ステージの1サイクル前のステージをスレッド選択ステージとする。スレッド選択ステージで選択されたスレッドIDが、次サイクルではエントリ選択ステージ、その次サイクルでは完了判別ステージ、その次サイクルでは資源の更新ステージのスレッドIDを指すことになる。命令デコードから最短で命令を完了して資源の更新を行うときには、エントリ格納ステージとスレッド選択ステージは同じサイクルとなる。
命令デコーダは、1サイクルで同時に1つのスレッドのみをデコードする。命令デコーダは、デコードする命令に対して、CSEのエントリの番号を示す命令識別子を割り当てる。命令識別子は、外部から送られてくる動作しているスレッドを示す信号から、動作しているスレッド数の情報を得ることで、動作しているスレッド分の命令識別子を備えている。このスレッド分の命令識別子では、CSEのエントリの分割に合わせた領域となり、スレッドごとに割り当てられる命令識別子の領域とポインタレジスタの領域は、同じ領域になるように制御される。デコードされた命令は、命令識別子の値が示す番号のCSEのエントリに、デコードした命令の実行完了に伴う資源更新までの制御を行うためのデータを格納する。格納されたエントリは、エントリが有効であることを示すVALID信号がオンとなる。
図6〜図8は、CSEのエントリの選択からエントリ解放までの動作を説明する図である。
図6において、図3と同じ構成要素には、同じ参照符号を付す。
1サイクルで同時に完了判別を行うスレッドは、1つのスレッドのみである。完了対象エントリ45に、1つのスレッドのみのCSEのエントリから選択されたエントリのコピーを格納することで、1サイクルで同時に完了可能な最大数のエントリを完了することが可能となる。
完了対象エントリ45に1サイクルで同時に完了可能な最大数のエントリを1つのスレッドにして格納するためには、CSEのエントリから選択するときに必要なポインタレジスタ(図7参照)を1つのスレッドに対して選択しておくことで、CSEのエントリから1つのスレッドのエントリのみを選択することが可能となる。CSEのエントリは1つのスレッドに割り当てられている領域が連続した番号で構成されているために、スレッドのポインタレジスタを使用することで、連続したエントリを選択することが可能となる。
CSEのエントリから1つのスレッドを選択するためのスレッド選択回路36を備えることで、スレッド選択回路36で選択されたNEXT完了対象エントリスレッドID50から、ポインタ選択回路A44でポインタレジスタを選択することが可能となる。ポインタ選択回路A44で選択されたポインタは、CSEのエントリ選択回路17+46で、完了対象エントリ45の最大数分のエントリと、1サイクルで同時に完了可能な最大数分とを加算したエントリ数が選択されたポインタが指すエントリを先頭にして、連続したエントリを選択することが可能である。
図7は、ポインタレジスタの構成例を示す図である。
図7では、ポインタレジスタを陽に示している。ポインタ選択回路A44、B43に与えられるポインタ値は、ポインタレジスタスレッド0(80)と、ポインタレジスタスレッド1(81)に格納されたポインタ値を使う。ポインタレジスタスレッド0(80)とポインタレジスタスレッド1(81)には、ポインタ更新回路51からのポインタ値が格納される。ポインタレジスタスレッド0(80)には、スレッド0に対するポインタ値、ポインタレジスタスレッド1(81)には、スレッド1に対するポインタ値が格納される。ポインタ選択回路A44とポインタ選択回路B43は、スレッド0とスレッド1のいずれかのポインタ値を選択する。ポインタ選択回路B43は、解放エントリのポインタを選択するが、これは、完了対象エントリスレッドIDを取得することによって行なう。完了対象エントリスレッドIDは、ポインタレジスタスレッド0(80)、ポインタレジスタスレッド1(81)に与えられ、新たなポインタ値をポインタ更新回路51から読み込ませる。また、完了対象エントリスレッドIDは、完了判別部39に与えられ、そのIDのスレッドの命令の完了判別を行なうと共に、完了判別が終わった時点で、ポインタ更新回路51に、完了判別が終わった命令のポインタを与える。ポインタ更新回路51には、更に、ポインタ選択回路B43からの解放エントリポインタが与えられ、次の解放エントリポインタの演算に使用される。ポインタ選択回路A44は、命令完了判別を行なうエントリをCSEから取得するためのポインタの選択を行なうが、これは、NEXT完了対象エントリスレッドID(次に、命令完了対象となるエントリのスレッドID)を取得して、スレッドの選択を行なう。
図8に、完了対象エントリ選択回路の動作フローを示す。完了対象エントリ選択回路46では、完了対象エントリ45のスレッドIDとNEXT完了対象エントリスレッドID50が一致する場合には(ステップS10)、そのサイクルで完了したエントリ数をCSEのエントリ選択回路17+46で選択されたエントリの先頭から加算したエントリを先頭にして(ステップS11)、完了対象エントリ45の最大数分のエントリを選択する(ステップS13)。完了対象エントリ45のスレッドIDとNEXT完了対象エントリスレッドID50が一致しない場合には(ステップS10)、CSEのエントリ選択回路17+46で選択されたエントリの先頭(ステップS12)から完了対象エントリ45の最大数分のエントリを選択する。S11あるいはS12の処理に続き、完了対象エントリ選択回路46で、選択されたエントリのコピーが完了対象エントリ45に格納される(ステップS13)。
完了対象エントリ45で完了判別を行い、完了したと判別されたエントリについては、完了対象エントリ45のスレッドIDを用いてポインタレジスタをポインタ選択回路B43で選択する。そして、ポインタ更新回路51で、選択されたポインタレジスタに完了したエントリ数分の加算を行って、ポインタレジスタを更新する。
完了対象エントリ45のスレッドIDは、次サイクルでは資源の更新スレッドIDとなり、完了したエントリは、資源の更新スレッドIDのスレッドのプログラマブルな資源の更新を行う。
プログラマブルな資源の更新と同じサイクルで、完了したCSEのエントリの解放を行う。完了判別のサイクルで完了したと判別されたエントリの数をエントリ完了数とすると、完了対象エントリのスレッドIDによりポインタ選択回路B43で選択されたポインタに対し、資源の更新のサイクルでエントリ完了数が指定される。解放エントリポインタから解放エントリ選択回路42で選択されたCSEのエントリについて、VALID信号をリセットすることでエントリは無効となる。このとき、ポインタレジスタが更新される前の値を解放エントリポインタとしてとっておく。
図9に、パイプラインをクリアする信号が発行されたときの処理のフロー図を示す。
スレッド別に分かれているパイプラインをクリアする信号がパイプライン機構から発行されたとき、クリアする信号を発生したスレッドのCSEのエントリをリセットすることで(ステップS15)、パイプラインをクリアする信号を発行したスレッドのCSEのエントリは全て無効となる。パイプラインをクリアする信号を発生したスレッドのスレッドIDがNEXT完了対象エントリのスレッドIDのときには(ステップS16)、完了対象エントリにVALIDを格納しないことで、パイプラインをクリアする信号を発生したスレッドの完了判別を行わない。一方、スレッドがパイプラインをクリアする信号を発生したスレッドではない場合には、完了対象エントリにスレッドを格納して次サイクルで完了判別を行う。
クリアする信号を発生したスレッドが完了対象エントリのスレッドのときには(ステップS17YES)、そのスレッドの完了判別を行わない。一方、スレッドがクリアする信号を発生したスレッドではない場合には(ステップS17NO)、スレッドの完了判別を行う。続いて、パイプラインをクリアする信号を発生したスレッドのポインタレジスタをポインタ更新回路によって、初期値にして更新する(ステップS18)。
図10に、スレッド選択回路の選択方法の処理フローを示す。
スレッド選択回路の選択には、大きく分けて3段階の選択がある。この選択のいずれかに当てはまると、次サイクルのNEXT完了対象エントリスレッドIDとなるNEW_NEXT完了対象エントリスレッドIDが決定する。3段階の選択に全て当てはまらない場合には、NEXT完了対象エントリスレッドIDによって示されるスレッドに対する反対スレッドのスレッドIDを、NEW_NEXT完了対象エントリスレッドIDにする。
スレッド選択回路は、まず、ステップS20において、単一スレッドで処理しているか、マルチスレッドで処理しているかを判断する。ステップS20の判断がYesの場合には、単一スレッドで動作しているスレッドを選択し、NEW_NEXT完了対象エントリスレッドIDを決定する。
ステップS20の判断がNoの場合には、ステップS21において、現在のスレッドについて、クリア信号が発せられているか、あるいは、CSEのエントリが空か否かを判断する。ステップS21の判断がYesの場合には、クリア信号、あるいは、エントリ空状態のスレッドとは異なる(スレッドが2つの場合には、反対側の)スレッドを選択し、NEW_NEXT完了対象エントリスレッドIDを決定する。ステップS21の判断がNoの場合には、ステップS22において、現在のスレッドが実行待ち状態のスレッドであるか否かを判断する。
ステップS22の判断がYesの場合には、実行待ち状態であるスレッドと異なる(2スレッドの場合には、反対側)のスレッドを選択し、NEW_NEXT完了対象エントリスレッドIDを決定する。ステップS22の判断がNoの場合には、NEXT完了対象エントリスレッドIDと異なる(2スレッドの場合反対の)スレッドを選択し、NEW_NEXT完了対象エントリスレッドIDを決定する。
図11に、スレッド選択回路の回路図を示す。
最も優先度が高い選択は、動作しているスレッドが単一のスレッド動作している場合に、NEW_NEXT完了対象エントリスレッドIDを単一で動作しているスレッドIDにすることである。
図11の+THREAD_0_ONLY_ACTIVEと+THREAD_1_ONLY_ACTIVEは、それぞれ単一スレッドで動作していることを示す信号である。図11に示される回路は、+THREAD_0_ONLY_ACTIVEあるいは+THREAD_1_ONLY_ACTIVEがオンになっていると、オンになっているスレッドを選択する。なお、+THREAD_0_ONLY_ACTIVEと+THREAD_1_ONLY_ACTIVEとの2つの信号が同時にオンになることはない。
+WINDOW_SET_THREAD_IDは、2つのスレッドを0と1で判別する信号である。この信号は、現在のスレッドとは反対のスレッドを選択するように、論理が反転されてOR回路60に入力されている。+CLEAR_PIPLINE_OR_CSE_EMPTY_THREAD_0は、スレッド0のパイプラインをクリアする信号が発生している場合、あるいは、CSEのエントリが空の場合にオンとなる信号である。+TOQ_COMP_WAIT_THREAD_0は、スレッド0のCSEの未解放エントリで最も古いエントリが実行待ち状態になっている場合にオンになる信号である。これらの信号は、OR回路60に入力され、これらの信号がオンの場合には、スレッド1を選択する信号のトリガとなる。
+CLEAR_PIPELINE_OR_CSE_EMPTY_THREAD_1は、スレッド1のパイプラインをクリアする信号が発生している場合、あるいは、CSEのエントリが空の場合にオンとなる信号である。+TOQ_COMP_WAIT_THREAD_1は、スレッド1のCSEの未解放エントリで最も古い命令が実行待ち状態になっている場合にオンになる信号である。これらの信号は、OR回路61に入力され、これらの信号がオンの場合には、スレッド0を選択する信号のトリガとなる。
OR回路60、61の出力は、AND回路62、63に入力し、AND回路63の出力が反転されて、AND回路64に入力する。AND回路64の、0または1の出力が、次に処理すべきスレッドのスレッド番号(0あるいは1)である、+NEXT_WINDOW_SET_THREAD_IDとなる。
図12は、クリア信号発生時とエントリが空の場合の、スレッドの選択方法を説明する図である。
命令処理動作が単一のスレッドでない場合、すなわち、2つのスレッドが動作している場合には、2段階目の選択として、次の2つの事象が発生した場合が優先して選択される。
1つ目の事象は、スレッド別に分かれているパイプラインをクリアする信号が発行されたときである(スレッド0、1のクリア信号が発生)。この場合には、クリア信号を発行したスレッドと反対のスレッドにNEW_NEXT完了対象エントリスレッドIDを選択する(スレッド0でクリア信号発生ならスレッド1を選択、スレッド1でクリア信号発生ならスレッド0を選択する)。2つのスレッドのクリア信号が同時に発行された場合、NEW_NEXT完了対象エントリスレッドIDはスレッド0を選択する。
2つ目の事象は、動作している2つのスレッドの1つのスレッドのCSEのエントリが1つも有効でない状態である。この場合、もう1つのスレッドのCSEのエントリに1つでも有効であるエントリが存在する場合には、CSEのエントリが1つも有効でないスレッドと反対のスレッドにNEW_NEXT完了対象エントリスレッドIDを選択する。両スレッドのCSEのエントリに1つも有効なエントリがない場合には、この回路では、スレッドを選択することができないようにする。1つ目の事象と2つ目の事象で異なるスレッドが同時に発生した場合、NEW_NEXT完了対象エントリスレッドIDはスレッド0を選択する。
図13に、クリア信号発生時とエントリが空のスレッドの場合の、スレッドの選択回路を示す。
クリア信号を示すのが、+CLEAR_PIPELINE_THREAD_0と1であり、CSEのエントリが1つも有効でない状態を示すのが、+CSE_EMPTY_THREAD_0と1である。エントリが1つも有効でない状態の場合には、反対側のスレッドのエントリが1つも有効でない信号がオフのときに+CLEAR_PIPLINE_OR_CSE_EMPTY_THREAD_0, あるいは、_1がオンとなる。。クリア信号とエントリが1つも有効でない状態のOR信号出力が図11の回路につながり、スレッドを選択する。図13の出力は、それぞれ、スレッド0と、1について、パイプラインクリア信号が発行されているか、CSEのトンリが無効となっている場合を示す信号である。
図14は、実行待ち状態レジスタの構成図である。
3段階目の選択(図10における3段階目)については、次の事象が発生しているか否かでNEXT完了対象エントリのスレッドが選択される。未解放の最も古いエントリの実行待ち状態を監視する機能をスレッド選択回路が備え、実行待ち状態のスレッドが存在する場合には、実行待ち状態のスレッドと反対のスレッドにNEW_NEXT完了対象エントリスレッドIDをスレッド選択回路が選択する。
スレッド0と1それぞれに実行待ち状態レジスタセット回路が設けられる。スレッド0と1の実行待ち状態レジスタセット回路は、それぞれの実行待ち状態レジスタリセット回路からのリセット信号を受け、実行待ち状態レジスタをリセットする。スレッド0と1の実行待ち状態レジスタは、完了判別部からの信号に従って、それぞれのスレッドの実行待ち状態レジスタセット回路によって実行待ち命令に関する情報が設定される。実行待ち状態レジスタには、命令の実行待ちになっている場合に、レジスタに実行待ち命令に関する情報がセットされ、命令の実行待ち状態が解除されると、リセットされる。スレッド選択回路は、各スレッドの実行待ち状態レジスタの内容を読んで、スレッド選択を行なう。
図15は、実行待ち状態レジスタのセット方法を説明する図である。
完了対象エントリに対して完了判別を行ったときに、完了対象エントリの先頭のエントリが有効であるが完了判別で完了出来る場合には、プログラマブルな資源の更新をする。完了判別で完了出来ないが、命令が実行待ちではない場合には、次サイクルに移り、新しい完了対象エントリの先頭エントリの完了判別を行う。完了判別で完了できない場合の要因が命令の実行待ち状態であるときには、どの実行待ちであるかを示す情報が実行待ち状態レジスタセット回路から実行待ち状態レジスタに格納される。この実行待ち状態レジスタは、スレッドごとに備えられる。一度実行待ち状態レジスタに実行待ち命令の情報が格納された場合には、実行待ち状態レジスタリセット回路からのリセット信号が発行されるまで、実行待ち状態レジスタが実行待ち命令の情報を保持し続ける。
実行待ち状態レジスタリセット回路からは、3つの事象が発生した場合にリセット信号が発行される。
1つ目の事象は、実行待ち状態レジスタに格納された実行待ち要因の実行が完了した場合であり、この場合にリセット信号が出力され、実行待ち状態レジスタをリセットすることが可能となる。命令の実行が完了した場合には、実行完了報告と命令識別子をCSEに送り、命令識別子が示すエントリの番号に従って実行完了報告をCSEのエントリに格納する。このときに、スレッドごとにあるポインタレジスタの番号と実行完了したときに送られてくる命令識別子が一致した場合には、実行が完了した命令が、スレッドの未解放で最も古いエントリを示すことになるので、実行待ち状態レジスタリセット回路からリセット信号を発行して、実行待ち状態レジスタに格納しないようにする。2つ目の事象は、パイプラインをクリアする信号が発行された場合である。このときにも、クリア信号を発行したスレッドの実行待ち状態レジスタリセット回路からリセット信号を発行する。3つ目の事象は、一定間隔のサイクルで、すべてのスレッドの実行待ち状態レジスタリセット回路から同時にリセット信号を発行する場合である。
実行待ち状態レジスタリセット回路からリセット信号を発行したタイミングで、実行待ち状態レジスタセット回路からセット信号も発行された場合には、リセット信号を優先して実行待ち状態レジスタをリセットする。
図16は、実行待ち状態レジスタセット・リセット回路の回路図である。
図16の回路図は、スレッド0の演算実行待ち状態を表す回路である。この回路は、回路図の下側のセット回路と上側のリセット回路に分かれている。セット側の回路は、完了対象エントリの先頭のエントリが有効であることを示す信号+TOQ_WINDOW_VALID、完了対象エントリのスレッドIDがスレッド0を示している+TOQ_WINDOW_THREAD_ID_0、完了対象エントリの先頭のエントリが演算命令であることを示す信号+TOQ_WINDOW_EU_USEが全てオンの状態であり、完了対象エントリの先頭のエントリの演算実行が完了したことを示す信号+TOQ_WINDOW_EU_COMPがオフのときに、完了対象エントリの先頭のエントリが演算実行待ちであることを示す信号を出力する。また、実行待ち状態レジスタに実行待ち命令の情報がセットされていることを示す信号+TOQ_EU_COMP_WAIT_THREAD_0は実行待ち状態レジスタを再セットするために、完了対象エントリが実行待ちであることを示している信号とORされ、両信号がORされた信号がセット信号となる。
リセット側の回路は、出力がオンとなる要因の種類が3つある。1つ目は、ポインタレジスタを示す信号+OUT_PTR_THREAD_0と、命令の実行が完了したエントリの命令識別子を示す信号+EU_COMP_IIDの一致がとれ、命令の実行が完了したことを示す命令完了報告を示す信号+EU_COMPがオンになっているときである。2つ目は、クリア信号を示す信号+CLEAR_PIPELINE_TREAD_0がオンになったときである。3つ目は、一定間隔のサイクルで、すべてのスレッドの実行待ち状態レジスタリセット回路から同時にリセット信号を発行することを示す信号+RESET_COMP_WAIT_BY_TIMERがオンになったときである。この3つの条件のどれか1つでも成立した場合には、実行待ちレジスタの命令の演算待ちには、その命令の演算待ちスレッドを命令完了判別対象スレッドにセットしないように信号+SET_TOQ_EU_COMP_WAIT_THREAD_0が生成される。これと同様の回路が、スレッド1にもあり、さらに、分岐命令待ち状態、ロード/ストア命令待ち状態についても同様の回路を備えている。
図17は、実行待ち状態レジスタを用いたスレッド選択方法を示す図である。
実行待ち状態レジスタが有効な状態であるときに、反対スレッドの実行待ち状態レジスタが有効でない状態であるか、反対スレッドのCSEのエントリが1つでも有効な場合であり、パイプラインをクリアする信号がスレッドに関係なく、発行されていない場合に、実行待ち状態レジスタが有効な状態であるスレッドと反対のスレッドに、NEW_NEXT完了対象エントリスレッドIDを選択する。両スレッドの実行待ち状態レジスタが有効な状態であるときには、この回路では、スレッドを選択することができないようにする。
すなわち、一方のスレッドの実行待ち状態レジスタを例に取ると、スレッド0の実行待ち状態レジスタが有効か否かを判断し、有効でない場合には、スレッド選択を行なわず、有効な場合には、スレッド1の実行待ち状態レジスタが有効か否かを判断する。有効な場合には、スレッド選択を行なわず、無効な場合には、スレッド1のCSEのエントリが有効か否かを判断する。無効な場合には、スレッド選択を行なわない。有効な場合には、スレッド0と1からのクリア信号が発行されているか否かを判断する。発行されている場合には、スレッド選択を行なわない。発行されていないばあには、スレッド1を選択し、新しいNEXT完了対象エントリのスレッドIDを発行する。スレッド1の実行待ち状態レジスタについても同様である。
図18は、実行待ち状態レジスタのスレッド選択回路の回路図である。
実行待ち状態レジスタの信号で演算の実行待ちを示している信号+TOQ_EU_COMP_WAIT_THREAD_0と1(スレッド0と1それぞれについて)、分岐命令の実行待ちを示している信号+TOQ_BR_COMP_WAIT_THREAD_0と1(スレッド0と1それぞれについて)、ロード/ストア命令の実行待ちを示している信号+TOQ_FCH_COMP_WAIT_THREAD_0と1(スレッド0と1それぞれについて)の一方のスレッドについて、どれか1つでもオン状態であり、反対スレッド(スレッド0に対するスレッド1、スレッド1に対するスレッド0)の実行待ち状態レジスタの信号(上記、+TOQ_EU_COMP_WAIT_THREAD_0と1、+TOQ_BR_COMP_WAIT_THREAD_0と1、+TOQ_FCH_COMP_WAIT_THREAD_0と1)が1つもオンでなくて、反対スレッドのCSEのエントリが空状態であることを示す信号+CSE_EMPTY_THREAD_0と1がオフであり、さらに、クリアする信号を示す信号+CLEAR_PIPELILE_THREAD_0と1の両方ともオフであるときに成立した信号+TOQ_COMP_WAIT_THREAD_0と1が、命令実行待ちとなっているか否かを示す信号であり、図11の回路につながり、スレッドを選択する。
図10、図11に戻って説明をすると、NEXT完了対象エントリスレッドIDを選択するための事象のどれにも該当しない場合には、NEXT完了対象エントリスレッドIDによって示されるスレッドとは反対のスレッドを示すNEW_NEXT完了対象エントリスレッドIDを選択する。図11の回路では、NEXT完了対象エントリスレッドIDを示す信号+WINDOW_SET_THREAD_IDの極性を反対にした信号をスレッド0側のOR信号(OR回路60の入力)に加えることで、全ての条件が成立しない場合には、NEW_NEXT完了対象エントリスレッドIDは、NEXT完了対象エントリスレッドIDの反対スレッドに選択される。
次に、動作するスレッドが3スレッド以上の場合の、CSEのエントリの構成とスレッド選択方法を示す。
図19、及び、図20に、CSEのエントリの割り当て方を示す。
CSEの全エントリ数をNエントリ、動作しているスレッド数をMスレッドとする。スレッド番号は0番からS番(M−1)とすると、図19の表のような式で各スレッド番号に対応するCSEエントリの領域が割り当てられることが可能となる。また、スレッド番号ごとに備えられたポインタレジスタの初期値を表の1番右側に示す。例として、図19に、CSEの全エントリ数を100エントリ、動作しているスレッド数を5スレッドにした場合のCSEの構成を示す。このような方法をとることで、動作しているスレッド数がいくつであっても、スレッド数に対応するエントリ割り当てを行なえ、いずれのスレッド数にも対応することが可能となる。
図21及び図22に、動作しているスレッドが3スレッド以上のときのスレッド選択方法の構成を示す。
スレッド選択回路70で選択されたスレッドの、順番を管理する、選択スレッド番号管理レジスタ71を備える。このレジスタの構成を図21に示す。CSEの各スレッドのエントリ数は、動作しているスレッド数で決められ、各スレッドのエントリには、それぞれスレッド番号を格納している。選択スレッド番号管理レジスタ71のエントリ0に格納されているスレッド番号が、最も長い時間スレッド選択回路で選択されていないスレッドになり、その次に選択されていないスレッド番号がエントリ1に格納されている。このように、エントリ番号が小さいほど、スレッド選択回路で選択されていない時間が長いスレッド番号が格納されている。1番大きいエントリ番号の選択スレッド番号管理レジスタ71のエントリには、最後にスレッド選択回路で選択されたスレッド番号が格納されていることになる。
図23及び図24に、選択スレッド番号管理レジスタの動作を示す。
例として、動作するスレッド数が5スレッドのときを用いて説明する。
このときに、選択スレッド番号管理レジスタは、エントリ0からエントリ4で構成される。ある時点で、選択スレッド番号管理レジスタのエントリ0にスレッド3、エントリ1にスレッド0、エントリ2にスレッド2、エントリ3にスレッド4、エントリ4にスレッド5が格納されている。図23では、スレッド選択回路で、スレッド3が選択されたときを示している。このときに、選択スレッド番号管理レジスタでは、選択されたスレッド3が、最新に選択されたスレッドを格納するエントリ4に格納され、エントリ1から4まで格納されていたスレッド番号が、1つずつ小さいエントリ番号にシフトして格納される。すなわち、スレッド選択回路でスレッド3を選択した後のサイクルでの、選択スレッド番号管理レジスタは、エントリ0にスレッド0、エントリ1にスレッド2、エントリ2にスレッド4、エントリ3にスレッド1、エントリ4にスレッド0が格納されることになる。また、図24では、スレッド選択回路で、スレッド2が選択されたときに、選択スレッド番号管理レジスタは、選択されたスレッド2がエントリ4に格納される。選択されたスレッド2はエントリ2に格納されていたために、エントリ0と1に格納しているスレッド番号については、このサイクルでは移動することはない。エントリ3と4に格納されていたスレッド番号が、1つずつ小さいエントリ番号に格納される。
すなわち、スレッド選択回路でスレッド2を選択した後のサイクルでの選択スレッド番号管理レジスタは、エントリ0にスレッド3、エントリ1にスレッド0、エントリ2にスレッド4、エントリ3にスレッド1、エントリ4にスレッド2が格納されることになる。
図25に、3スレッド以上のスレッド選択回路でのスレッド選択方法を示す。
スレッド選択方法は、スレッド選択回路で選択されていない時間が最も長いスレッド番号を優先して選択することが可能となるようにする。選択スレッド番号管理レジスタのエントリ0には、スレッド選択回路で選択されていない時間が最も長いスレッド番号が格納されている。選択スレッド番号管理レジスタのエントリ0のスレッド番号から順番に見ていくことでスレッドを選択することになる。
ステップS30で、エントリ0のスレッドIDのスレッドを選択したか否かを判断する。ステップS30の判断がYesの場合には、エントリ0のスレッドIDを選択し、ステップS34に進む。ステップS30の判断がNoの場合には、ステップS31において、エントリ1のスレッドIDのスレッド選択か否かを判断する。ステップS31の判断がYesの場合には、エントリ1のスレッドIDを選択し、ステップS34に進む。ステップS31以降、エントリの数だけ、そのエントリが選択されたか否かを判断し、ステップS32において、エントリ(S−1)のスレッドIDのスレッド選択か否かを判断する。ステップS32の判断がYesの場合には、エントリ(S−1)のスレッドIDを選択し、ステップS34に進む。ステップS32の判断がNoの場合には、ステップS33で、エントリSnoスレッドIDを選択し、ステップS34において、選択したスレッドのIDをNEW_NEXT完了対象エントリスレッドIDとする。
図26及び図27に、選択スレッド番号管理レジスタのエントリ0と1のスレッド選択方法を示す。
エントリ0のスレッド番号のCSEのエントリが空でなく、エントリ0のスレッド番号のクリア信号が発生していない状態であり、エントリ0のスレッド番号の実行待ち状態レジスタが有効でなければ、エントリ0のスレッド番号をNEW_NEXT完了対象エントリスレッドIDとする。エントリ0のスレッド番号のCSEのエントリが空、もしくは、エントリ0のスレッド番号のクリア信号が発生した場合には、エントリ0以外のスレッド番号のCSEのエントリが全て空の場合、もしくは、エントリ0以外のスレッド番号のクリア信号が全て発生している状態である場合にも、エントリ0のスレッド番号をNEW_NEXT完了対象エントリスレッドIDとする。エントリ0のスレッド番号のCSEのエントリが空、もしくは、エントリ0のスレッド番号のクリア信号が発生した場合に、エントリ0以外のスレッド番号のCSEのエントリが有効、もしくは、エントリ0以外のスレッド番号のクリア信号が発生していない状態の場合には、エントリ1のスレッド番号の状態を見ることになる。
また、エントリ0のスレッド番号の実行待ち状態レジスタが有効な場合、エントリ0のスレッド番号以外のスレッドの実行待ち状態レジスタが全て有効な場合には、エントリ0のスレッド番号をNEW_NEXT完了対象エントリスレッドIDとする。エントリ0のスレッド番号の実行待ち状態レジスタが有効な場合で、エントリ0のスレッド番号以外のスレッドの実行待ち状態レジスタが有効でないスレッドがある場合には、実行待ち状態レジスタが有効でないスレッドのCSEのエントリが全て空、もしくは、クリア信号が全て発生している場合には、エントリ0のスレッド番号をNEW_NEXT完了対象エントリスレッドIDとし、そうでない場合には、エントリ1のスレッド番号の状態を見ることになる。
図26において、ステップS40において、エントリ0のスレッドIDのCSEのエントリが空、若しくは、クリア信号が発生しているか否かを判断する。ステップS40の判断がNoの場合には、ステップS43において、エントリ0のスレッドIDの実行待ちレジスタが有効か否かを判断する。ステップS43の判断がNoの場合には、ステップS46に進む。ステップS43の判断がYesの場合には、ステップS44において、エントリ0のスレッドID以外の実行待ちレジスタが全て有効か否かを判断する。ステップS44の判断がYesの場合には、ステップS46に進む。ステップS44の判断がNoの場合には、ステップS45に進む。ステップS45では、有効でないスレッドのCSEのエントリが全て空、若しくは、クリア信号が全て発生しているか否かを判断する。ステップS45の判断がYesの場合には、ステップS46に進む。ステップS45の判断がNoの場合には、ステップS42に進み、エントリ1のスレッドIDを対象にして選択するかを判断する。ステップS40の判断がYesの場合には、ステップS41において、エントリ0のスレッドID以外のCSEのエントリが空、若しくは、クリア信号が全て発生しているか否かを判断する。ステップS41の判断がYesの場合には、ステップS46に進む。ステップS41の判断がNoの場合には、ステップS42に進む。ステップS46では、エントリ0のスレッドIDを選択し、ステップS47において、選択したスレッドIDをNEW_NEXT完了対象エントリスレッドIDとして出力する。 図27は、図26のステップS42以降の処理を示す。ステップS51において、エントリ1のスレッドIDのCSEのエントリが空、若しくは、クリア信号が発生しているか否かを判断する。ステップS51の判断がNoの場合には、ステップS54において、エントリ1のスレッドIDの実行待ちレジスタが有効か否かを判断する。ステップS54の判断がNoの場合には、ステップS57に進む。ステップS54の判断がYesの場合には、ステップS55において、エントリ0、1のスレッドID以外の実行待ちレジスタが全て有効か否かを判断する。ステップS55の判断がYesの場合には、ステップS57に進む。ステップS55の判断がNoの場合には、ステップS56に進む。ステップS56では、有効でないスレッドのCSEのエントリが全て空、若しくは、クリア信号が全て発生しているか否かを判断する。ステップS56の判断がYesの場合には、ステップS57に進む。ステップS56の判断がNoの場合には、ステップS53に進み、エントリ2のスレッドIDを対象にして選択するかを判断する。ステップS51の判断がYesの場合には、ステップS52において、エントリ0、1のスレッドID以外のCSEのエントリが空、若しくは、クリア信号が全て発生しているか否かを判断する。ステップS52の判断がYesの場合には、ステップS57に進む。ステップS52の判断がNoの場合には、ステップS53に進む。ステップS57では、エントリ1のスレッドIDを選択し、ステップS58において、選択したスレッドIDをNEW_NEXT完了対象エントリスレッドIDとして出力する。
以下、スレッド数がもっと多くなっても、同様の処理をステップS53の部分に継ぎ足していくのみである。

Claims (10)

  1. プログラムに記載された順序に関らず実行が可能な命令から命令を実行し、前記プログラムに記載された順序で実行した命令を完了するプロセッサにおいて、
    前記プロセッサが同時に実行しているスレッドの数を検出するスレッド数検出手段と、
    前記プロセッサが同時に実行しているスレッドに含まれる命令の完了処理と、前記命令を完了する完了処理に伴うプログラマブルな資源更新までの制御を行うためのデータを、各スレッドに一対一に対応し、前記スレッド数検出手段検出する、前記プロセッサが同時に実行しているスレッドの数分の連続領域に分けられた複数のエントリに格納するコミットスタックエントリ(CSE)手段と、
    前記CSE手段が有する複数のエントリの中から、完了判別の対象となるエントリのスレッドを1つ選択するスレッド選択手段と、
    前記スレッド選択手段選択たスレッドに対応するCSE手段のエントリの中から、未解放のエントリであり、かつ、最も古いエントリを先頭にして、完了判別の対象となるエントリを取得する完了対象エントリ手段と、
    前記完了対象エントリ手段が取得したエントリに対して完了判別を行い、完了判別を行ったエントリが保持する命令のプログラマブルな資源の更新を行なう完了判別手段と、
    を備えることを特徴とするプロセッサ
  2. 前記CSE手段は、スレッドの未解放のエントリで最も古いエントリの番号を示すポインタレジスタを、前記プロセッサが同時に実行可能なスレッドの数分備える請求項1に記載のプロセッサ
  3. 前記完了判別の対象として取得されるエントリの数は、前記プロセッサが1マシンサイクルで同時に完了判別可能な最大数であることを特徴とする請求項1に記載のプロセッサ
  4. 前記CSE手段は、前記プロセッサが単一のスレッドのみを実行している場合には、実行中のスレッドに対し、全てのエントリを割り当てて格納することを特徴とする請求項1に記載のプロセッサ
  5. 前記プロセッサはさらに、
    前記プロセッサが有するパイプラインにクリア信号が発行された場合に、クリア信号が発行されたパイプラインに対応するスレッドの、前記CSE手段のエントリをリセットするリセット手段と、
    クリア信号が発行されたスレッドと、前記完了対象エントリ手段に格納されているエントリのスレッドとが一致する場合に、前記完了対象エントリ手段のエントリを無効化するエントリ無効化手段と、
    前記完了対象エントリ手段のエントリが無効化された際に、完了判別処理を無効化する完了判別処理無効化手段と、
    クリア信号が発行されたスレッドに対し、前記スレッド選択手段に、スレッドごとに割り当てられている前記CSE手段の記憶領域の先頭位置を選択させる初期化手段と、
    を備えることを特徴とする請求項1に記載のプロセッサ
  6. 前記プロセッサはさらに、
    クリア信号が発行されたスレッドと、前記完了対象エントリ手段にCSEのエントリのコピーを格納しようとしているスレッドが一致する場合に、前記完了対象エントリ手段のエントリにCSEのエントリのコピーを格納することを無効化する手段、
    を備えることを特徴とする請求項5に記載のプロセッサ
  7. 前記スレッド選択手段は、動作していないスレッドを選択しないことを特徴とする請求項1に記載のプロセッサ
  8. 前記プロセッサはさらに、
    実行待ち状態であるために完了判別が完了できないエントリについて、実行待ちである要因を格納し、実行が完了するまで保持する、スレッドごとに設けられたレジスタ手段を
    備えることを特徴とする請求項1に記載のプロセッサ
  9. 前記プロセッサはさらに、
    対応するパイプラインにクリア信号が発行されたスレッドの前記レジスタ手段をクリアする第1のクリア手段と、
    一定間隔のサイクルで、全ての前記レジスタ手段をクリアする第2のクリア手段と、
    を備えることを特徴とする請求項8に記載のプロセッサ
  10. 前記スレッド選択手段は、実行待ち状態が有効なスレッドは選択しないことを特徴とする請求項8に記載のプロセッサ
JP2009520145A 2007-06-20 2007-06-20 同時マルチスレッドの命令完了制御装置 Expired - Fee Related JP5201140B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2007/000662 WO2008155804A1 (ja) 2007-06-20 2007-06-20 同時マルチスレッドの命令完了制御装置

Publications (2)

Publication Number Publication Date
JPWO2008155804A1 JPWO2008155804A1 (ja) 2010-08-26
JP5201140B2 true JP5201140B2 (ja) 2013-06-05

Family

ID=40155969

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009520145A Expired - Fee Related JP5201140B2 (ja) 2007-06-20 2007-06-20 同時マルチスレッドの命令完了制御装置

Country Status (4)

Country Link
US (1) US20100095305A1 (ja)
EP (1) EP2159691B1 (ja)
JP (1) JP5201140B2 (ja)
WO (1) WO2008155804A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8166146B2 (en) * 2008-09-29 2012-04-24 International Business Machines Corporation Providing improved message handling performance in computer systems utilizing shared network devices
US9477521B2 (en) 2014-05-29 2016-10-25 Netapp, Inc. Method and system for scheduling repetitive tasks in O(1)
US9304702B2 (en) 2014-05-29 2016-04-05 Netapp, Inc. System and method for parallelized performance data collection in a computing system
US9256477B2 (en) * 2014-05-29 2016-02-09 Netapp, Inc. Lockless waterfall thread communication
CN105592400A (zh) * 2014-10-24 2016-05-18 中兴通讯股份有限公司 一种应用专有节点的注册方法、通信方法和节点
CN108093380B (zh) * 2016-11-22 2022-11-08 中兴通讯股份有限公司 注册状态的确定方法、装置及系统、cse
JP7225745B2 (ja) 2018-12-06 2023-02-21 富士通株式会社 演算処理装置および演算処理装置の制御方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
JP2003241961A (ja) * 2002-02-19 2003-08-29 Fujitsu Ltd マルチスレッドプロセッサにおける共有レジスタファイル制御方式
US20040210743A1 (en) * 2003-04-21 2004-10-21 International Business Machines Corporation Dynamically shared group completion table between multiple threads
US20050138333A1 (en) * 2003-12-19 2005-06-23 Samra Nicholas G. Thread switching mechanism
JP2006039815A (ja) * 2004-07-26 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサおよびレジスタ制御方法
JP2006343872A (ja) * 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
GB0013336D0 (en) * 2000-06-01 2000-07-26 Sgs Thomson Microelectronics Forming an executable program
FI116166B (fi) * 2002-06-20 2005-09-30 Nokia Corp Menetelmä ja järjestelmä sovellusistuntojen suorittamiseksi elektroniikkalaitteessa, ja elektroniikkalaite
US7890734B2 (en) * 2004-06-30 2011-02-15 Open Computing Trust I & II Mechanism for selecting instructions for execution in a multithreaded processor
JP2006059068A (ja) * 2004-08-19 2006-03-02 Matsushita Electric Ind Co Ltd プロセッサ装置
KR100806274B1 (ko) * 2005-12-06 2008-02-22 한국전자통신연구원 멀티 쓰레디드 프로세서 기반의 병렬 시스템을 위한 적응형실행 방법
US8407715B2 (en) * 2007-04-30 2013-03-26 National Tsing Hua University Live range sensitive context switch procedure comprising a plurality of register sets associated with usage frequencies and live set information of tasks

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6357016B1 (en) * 1999-12-09 2002-03-12 Intel Corporation Method and apparatus for disabling a clock signal within a multithreaded processor
JP2003241961A (ja) * 2002-02-19 2003-08-29 Fujitsu Ltd マルチスレッドプロセッサにおける共有レジスタファイル制御方式
US20040210743A1 (en) * 2003-04-21 2004-10-21 International Business Machines Corporation Dynamically shared group completion table between multiple threads
US20050138333A1 (en) * 2003-12-19 2005-06-23 Samra Nicholas G. Thread switching mechanism
JP2006039815A (ja) * 2004-07-26 2006-02-09 Fujitsu Ltd マルチスレッドプロセッサおよびレジスタ制御方法
JP2006343872A (ja) * 2005-06-07 2006-12-21 Keio Gijuku マルチスレッド中央演算装置および同時マルチスレッディング制御方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
CSNJ200510023033; 佐々木 博敏: '同時マルチスレッディング(SMT)技術を用いたマルチスレッド並列キュープロセッサのハードウェア設計' 第66回(平成16年)全国大会講演論文集(1) アーキテクチャ ソフトウェア科学・工学 , 20040311, pp.1-65 - 1-66 *
JPN6012053503; 佐々木 博敏: '同時マルチスレッディング(SMT)技術を用いたマルチスレッド並列キュープロセッサのハードウェア設計' 第66回(平成16年)全国大会講演論文集(1) アーキテクチャ ソフトウェア科学・工学 , 20040311, pp.1-65 - 1-66 *

Also Published As

Publication number Publication date
WO2008155804A1 (ja) 2008-12-24
JPWO2008155804A1 (ja) 2010-08-26
EP2159691A4 (en) 2010-10-13
EP2159691B1 (en) 2013-08-28
EP2159691A1 (en) 2010-03-03
US20100095305A1 (en) 2010-04-15

Similar Documents

Publication Publication Date Title
JP5104863B2 (ja) 演算処理装置及び演算処理装置の制御方法
JP3716415B2 (ja) 同時マルチスレッドのための分割分岐履歴テーブルおよびカウント・キャッシュ
JP4287799B2 (ja) プロセッサシステムおよびスレッド切り替え制御方法
JP4610593B2 (ja) デュアルスレッドプロセッサ
US7269712B2 (en) Thread selection for fetching instructions for pipeline multi-threaded processor
JP5201140B2 (ja) 同時マルチスレッドの命令完了制御装置
JP5548037B2 (ja) 命令発行制御装置及び方法
JP3716414B2 (ja) 同時マルチスレッド化プロセッサ
JP2005182825A5 (ja)
CN103842959A (zh) 在计算机系统中维持操作数活性信息
JP4956891B2 (ja) 演算処理装置,情報処理装置および演算処理装置の制御方法
JP2004326748A (ja) 例外条件を解消するために同時マルチスレッド・プロセッサでディスパッチ・フラッシュを使用する方法
JP2015122063A (ja) マルチスレッディングを支援するための演算ユニット、それを含むプロセッサ及びプロセッサの動作方法
CN110402434B (zh) 缓存未命中线程平衡
US20100100709A1 (en) Instruction control apparatus and instruction control method
JP2020119504A (ja) 分岐予測器
JP5104862B2 (ja) 命令実行制御装置及び命令実行制御方法
US20170139706A1 (en) Optimizing thread selection at fetch, select, and commit stages of processor core pipeline
KR102639414B1 (ko) 멀티스레딩 프로세서 및 이의 동작 방법
JP6477248B2 (ja) 演算処理装置及び演算処理装置の処理方法
JP2023540036A (ja) 分岐予測リダイレクトのための代替パス
JP2014059665A (ja) マイクロコンピュータ及びマイクロコンピュータにおける命令処理方法

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120717

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120910

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20121016

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20121214

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130128

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

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

Free format text: PAYMENT UNTIL: 20160222

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees