JP5136553B2 - 演算処理装置及び演算処理装置の制御方法 - Google Patents

演算処理装置及び演算処理装置の制御方法 Download PDF

Info

Publication number
JP5136553B2
JP5136553B2 JP2009520199A JP2009520199A JP5136553B2 JP 5136553 B2 JP5136553 B2 JP 5136553B2 JP 2009520199 A JP2009520199 A JP 2009520199A JP 2009520199 A JP2009520199 A JP 2009520199A JP 5136553 B2 JP5136553 B2 JP 5136553B2
Authority
JP
Japan
Prior art keywords
thread
instruction
event
completion
arithmetic processing
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.)
Active
Application number
JP2009520199A
Other languages
English (en)
Other versions
JPWO2008155845A1 (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 JPWO2008155845A1 publication Critical patent/JPWO2008155845A1/ja
Application granted granted Critical
Publication of JP5136553B2 publication Critical patent/JP5136553B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, 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
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/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
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Description

本発明は、複数の命令を有する複数のスレッドを実行するための演算処理装置に関し、特に、キャッシュメモリおよび演算器等の資源を共有する複数のスレッドが同時に実行されるような同時マルチスレッディング(通常、SMT(Simultaneous Multi-Threading)と略記される)の機能を備えた演算処理装置に関する。
同時マルチスレッディングの機能を備えた演算処理装置、例えばプロセッサにおいては、命令実行数等の各種のイベントを各スレッドごとに測定することができると共に、プロセッサの性能指標の1つとして複数のスレッドでプログラムの1つの命令の完了に要したクロックサイクル数の平均値(通常、CPI(Cycle Per Instructions)と略記される)を分析できることが望まれている。
従来は、プロセッサにより複数のスレッドを実行する場合、シングルスレッド方式のシングルスレッドプロセッサを使用して、クロックサイクルごとに1つのスレッドの命令を順番に実行していた。このシングルスレッドプロセッサは、1次命令キャッシュメモリからの命令を命令デコーダに送出する。そして、命令デコーダによりデコードされた全ての命令をコミットスタックエントリ(通常、CSE(Commit Stack Entry)と略記される)に登録し、これと同時にアウトオブオーダの実行制御を行う各々のリザベーションステーション(通常、RS(Reservation Station)と略記される)に登録する。RSのプライオリティサイクルで命令の実行が可能となった命令を、バッファサイクルでレジスタを読み出すことで演算器に投入して、演算実行サイクルで演算を実行する。
この演算の実行結果は、レジスタ更新サイクルで更新バッファに格納されて命令完了(コミット(Commit))処理を待ち、CSEで演算実行完了、1次データキャッシュメモリからのデータ転送完了、分岐予測機構からの分岐判定完了等の報告を受けてインオーダでコミット処理を行う。そして、レジスタ書き込みサイクルで更新バッファからのレジスタへの書き込み、プログラムカウンタ(通常、PC(Program Counter)と略記される)および次のプログラムカウンタ(NEXT PC)の更新等を行う。シングルスレッドプロセッサでは、通常、命令実行数等のイベントの発生状況や資源の使用頻度を動的に測定する機能を有するイベント測定(通常、PA(Performance Analysis)と略記される)回路が設けられている。このイベント測定回路は、プロセッサの各部から送られたイベントの種類をソフトウェアで選択し、選択されたイベントをカウントして蓄積する。蓄積されたイベントは、測定終了後にソフトウェアで読み出され、イベントの組み合わせに基づいてプロセッサの性能評価に使うことができる。従来のシングルスレッドプロセッサでは、1つのスレッドの命令をCSEに登録し、クロックサイクルごとにCSEの先頭のエントリを示すポインタ選択回路で選択されている1つのスレッドの命令完了候補を命令完了対象レジスタに登録して、コミット処理を行うようにしている。
プロセッサの性能指標の一つとして、プログラムの1つの命令の完了に要したクロックサイクル数の平均値を示すCPI(Cycle Per Instruction)の値が挙げられる。このCPIの値は実行命令数でサイクル数を割ることによって求められる。CPIの値をコミット処理の観点から見ると、同時クロックサイクルでの命令完了の数、例えば4命令同時コミット処理ができる場合、CPIは、命令完了なし(0end-op)、1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)の命令完了イベントの各々に対して測定されたサイクル数を実行命令数で割った値の積算結果となる。特に0end-opとなる場合は、インオーダのコミット処理において先頭命令(通常、TOQ(Top Of Queue)と略記される)のコミット処理ができなかったことを示す。この場合、後続の命令のコミット処理もできなくなるので、0end-opの測定とその要因の演算実行完了待ち(EU-comp-wait)、分岐判定完了待ち(BR-comp-wait)、キャッシュメモリからのデータ待ち(FCH-comp-wait)、コミットスタックエントリに登録がない状態(CSE-empty)等を測定することは重要である。これらのCPIの要因および0end-opの要因は、全て命令完了対象レジスタからイベントとして取得することが可能である。また、0end-opの要因は、必ずクロックサイクルごとに1つの要因に絞ってイベント取得がなされる。シングルスレッドプロセッサでは1つのスレッドしかないため、1つのスレッドの命令完了対象レジスタから送出されるイベントをイベント測定回路で測定して要因を積算することによって、CPIの要因の測定が容易に行えるようになっていた。
ところで、プロセッサの命令実行に必要なキャッシュメモリ、パイプライン、演算器等の資源の使用効率を向上させプロセッサの性能を最大限に引き出すために、マルチスレッディングという技術が一般に知られている。マルチスレッディングには、代表的に、同時に複数のスレッドを実行する機能を有する同時マルチスレッディング(SMT)方式が含まれる。この同時マルチスレッディング方式では、2つ以上の複数のスレッドが同時に実行され、各々のスレッドのコミットスタックエントリに命令が登録される。シングルスレッドのように1つまたは複数のスレッドに絞った命令完了対象レジスタに、スレッド選択回路にて例えばクロックサイクルごとに交互に選択されたスレッドの命令完了候補のエントリをコミットスタックエントリからコピーすることによって、コミット処理が行われ、各々のスレッドのイベント測定回路で性能測定が行われる。
この同時マルチスレッディング方式では、前述のシングルスレッド方式の場合と同様に、CPIの要因である命令完了なし(0end-op)、1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)や、命令完了なし(0end-op)の要因をスレッドごとにイベント測定を行えることが望まれる。コミットスタックエントリには複数のスレッドが登録されているが、命令完了対象レジスタには、スレッド選択回路によってクロックサイクルごとに選択され一部のスレッドに絞られた命令完了対象レジスタの命令完了候補のみ登録される。よって、命令完了対象レジスタは、一部に絞られたスレッドのコミット処理のみを行う。そして、選択されたスレッドのイベントは、命令完了対象レジスタからイベント測定回路へ送出される。しかしながら、この場合、選択されなかったスレッドからのイベント測定を行うことはできない。同時マルチスレッディング方式においても、前述のシングルスレッド方式の場合と同様にスレッドごとのCPIの分析を正確に行うために、全てのスレッドのイベントを同時に測定することが必要になる(第1の問題点)。
また一方で、同時マルチスレッディング方式では、複数のスレッドからなるコアにおいて、複数のスレッドを合わせたときのCPIの分析を行うことが望まれる。この同時マルチスレッディング方式では、複数のスレッドを実行することにより、1つのスレッドのみで実行する場合よりもコアの使用効率を向上させることができるようになる。一例として、全てのスレッドが命令コミットなしであるクロックサイクルは、コアの処理としても命令コミットなしであるが、1つのスレッドが命令コミットなしとなっているクロックサイクルで、他のスレッドが例えば4命令同時コミットであれば、コアの処理としては4命令同時コミットとなる。ここでは、複数のスレッドからなるコアのCPI分析を行うためのイベント測定回路において、1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)は、スレッドごとに独立しているので正しく測定することができるが、命令完了なし(0end-op)は、命令完了対象レジスタに登録されていないときも測定してしまう。それゆえに、このような測定方法では、コア内の複数のスレッドを合わせた処理のCPIの分析を正確に行うことはできない。よって、同時マルチスレッディング方式においては、複数のスレッドからなるコアに関しても、全てのスレッドのCPIの分析を正確に行うために、命令完了なし(0end-op)のイベント測定を正しく行うことが必要になる(第2の問題点)。
ここで、参考のため、従来のマルチスレッディング方式のプロセッサに関連した下記の特許文献1および特許文献2を先行技術文献として呈示する。
特許文献1においては、プロセッサによってサポートされる複数の各並行スレッドごとに独立したパフォーマンス監視をサポートするパフォーマンス・モニタを備えたパフォーマンス監視システムが開示されている。
しかしながら、特許文献1では、例えば2つの並行スレッドの各々の活動状態と非活動状態とが入れ替わるタイミングが異なるようなVMT(Vertical Multi-Threading)方式によって2つの並行スレッドが実行される。それゆえに、同時マルチスレッディング方式のように2つの並行スレッドが同時に実行されることはないので、上記のような問題点が発生することはない。
特許文献2においては、マルチスレッドプロセッサ内の命令スレッドを選択する際の命令スレッド間の選択を変更する装置および方法が開示されている。しかしながら、特許文献2では、同時マルチスレッディング方式のプロセッサの構成および動作に関しては一切言及していない。
したがって、特許文献1および特許文献2のいずれによっても、従来の同時マルチスレッディング方式により発生する問題点に対処することはできない。
特開平10−275100号公報 特開2004−326765号公報
なお、従来のシングルスレッドプロセッサの構成、および同時マルチスレッディング方式の問題点に関しては、後に図面を参照して詳述する。
本発明の目的は、複数のスレッドが同時に実行されるような同時マルチスレッディング方式において、スレッドごとのCPIの分析を正確に行うために、選択されなかったスレッドからのイベントを含む全てのイベントの測定を正しく行うと共に、複数のスレッドからなるコアに関して、命令が完了できなかった要因のイベントの測定を正しく行うことができるような演算処理装置を提供することにある。
上記目的を達成するために、本発明の第1の態様は、命令の実行による各種のイベントを測定するイベント測定回路と、実行した命令の完了を制御するコミットスタックエントリとを備え、複数の命令を有するスレッドを実行する複数のスレッド実行部と、上記スレッド実行部が実行することにより、上記コミットスタックエントリに格納された完了候補の命令を格納すると共に、上記スレッドに含まれる命令の完了処理を行う命令完了対象レジスタと、上記命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、上記命令の命令完了イベントを、上記命令に対応するスレッド実行部が備えるイベント測定回路に送信するスレッド選択手段とを有する演算処理装置を提供する。
好ましくは、本発明の第1の態様に係る演算処理装置において、上記スレッド選択手段は、上記スレッド実行部が実行したのにも関わらず、上記命令完了対象レジスタに上記スレッド実行部が実行した命令が格納されなかった場合に、上記命令が完了できなかったことを示す命令未完了イベントを、上記命令に対応するスレッド実行部が備えるイベント測定回路に送信するようになっている。
さらに、好ましくは、本発明の第1の態様に係る演算処理装置は、命令の完了処理で先頭の命令が完了できなかったときのみ要因を保持するレジスタを全てのスレッド分備え、上記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントと、他のスレッドの先頭の命令が完了できなかったときのみ要因を保持するレジスタに格納されている要因のイベントとをスレッドごとの上記イベント測定回路に同時に送ることによって、全てのスレッドの先頭の命令が完了できなかった要因を測定することが可能である。
さらに、好ましくは、本発明の第1の態様に係る演算処理装置において、上記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントと、他のスレッドの先頭の命令が完了できなかったときのみ要因を保持するレジスタに格納されている要因のイベントとを生成する回路が、複数の論理素子の組み合わせにより構成される。
また一方で、本発明の第2の態様は、複数のスレッドからなるコアが有する命令の実行による各種のイベントを測定するイベント測定回路と、実行した命令の完了を制御するコミットスタックエントリとを備え、複数の命令を有するコア内の複数のスレッドを実行する複数のスレッド実行部と、上記スレッド実行部が実行することにより、上記コミットスタックエントリに格納された完了候補の命令を格納すると共に、1つに絞られたスレッドに含まれる命令の完了処理を行う命令完了対象レジスタと、上記命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、上記命令の命令完了イベントを、上記命令に対応するスレッド実行部が備えるイベント測定回路に送信するスレッド選択手段とを有する演算処理装置を提供する。
好ましくは、本発明の第2の態様に係る演算処理装置において、上記スレッド選択手段は、上記スレッド実行部が実行したのにも関わらず、上記命令完了対象レジスタに上記スレッド実行部が実行した命令が格納されなかった場合に、上記命令が完了できなかったことを示す命令未完了イベントを、上記命令に対応するスレッド実行部が備えるイベント測定回路に送信しないようになっている。
さらに、好ましくは、本発明の第2の態様に係る演算処理装置は、命令の完了処理で先頭の命令が完了できなかったときのみ要因を保持するレジスタを全てのスレッド分備え、上記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントを上記イベント測定回路に送ることによって、当該スレッドの先頭の命令が完了できなかった要因を測定することが可能である。
さらに、好ましくは、本発明の第2の態様に係る演算処理装置において、上記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントを生成する回路が、複数の論理素子の組み合わせにより構成される。
また一方で、本発明の第3の態様に係る演算処理装置は、命令の実行による各種のイベントを測定する第1のイベント測定回路と、実行した命令の完了を制御する第1のコミットスタックエントリとを備え、複数の命令を有するスレッドを実行する複数の第1のスレッド実行部と、上記第1のスレッド実行部が実行することにより、上記第1のコミットスタックエントリに格納された完了候補の命令を格納すると共に、上記スレッドに含まれる命令の完了処理を行う第1の命令完了対象レジスタと、上記第1の命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、上記命令の命令完了イベントを、上記命令に対応する第1のスレッド実行部が備える第1のイベント測定回路に送信する第1のスレッド選択手段とを有する。
さらに、本発明の第3の態様に係る演算処理装置は、複数のスレッドからなるコアが有する命令の実行による各種のイベントを測定する第2のイベント測定回路と、実行した命令の完了を制御する第2のコミットスタックエントリとを備え、複数の命令を有するコア内の複数のスレッドを実行する複数の第2のスレッド実行部と、上記第2のスレッド実行部が実行することにより、上記第2のコミットスタックエントリに格納された完了候補の命令を格納すると共に、1つに絞られたスレッドに含まれる命令の完了処理を行う第2の命令完了対象レジスタと、上記第2の命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、上記命令の命令完了イベントを、上記命令に対応する第2のスレッド実行部が備える第2のイベント測定回路に送信する第2のスレッド選択手段とを有する。
好ましくは、本発明の第3の態様に係る演算処理装置において、上記第1のスレッド選択手段は、上記第1のスレッド実行部が実行したのにも関わらず、上記第1の命令完了対象レジスタに上記第1のスレッド実行部が実行した命令が格納されなかった場合に、上記命令が完了できなかったことを示す命令未完了イベントを、上記命令に対応する第1のスレッド実行部が備える第1のイベント測定回路に送信し、また一方で、上記第2のスレッド選択手段は、上記第2のスレッド実行部が実行したのにも関わらず、上記第2の命令完了対象レジスタに上記第2のスレッド実行部が実行した命令が格納されなかった場合に、上記命令が完了できなかったことを示す命令未完了イベントを、上記命令に対応する第2のスレッド実行部が備える第2のイベント測定回路に送信しないようになっている。
要約すれば、本発明の第1の態様に係る演算処理装置によれば、複数のスレッドにより同時マルチスレッディング等が実行される場合、命令完了処理時に命令完了対象レジスタに格納されているスレッドの命令完了イベントが、スレッドごとのイベント測定回路にて測定されると共に、命令完了対象レジスタに格納されなかったスレッドに関しても命令が完了できなかったことを示すイベントが、スレッドごとのイベント測定回路にて測定され、全てのスレッドに対して同時に全てのイベントが測定されることになるので、スレッドごとのCPIの分析を正確に行ってプロセッサの適切な性能評価を行うことが可能になる。
さらに、本発明の第2の態様に係る演算処理装置によれば、複数のスレッドからなるコアにより同時マルチスレッディング等が実行される場合、1つのスレッドに絞られた命令完了対象レジスタに格納されている命令完了イベントが、選択された1つのスレッドのイベント測定回路でのみ測定され、選択されなかった他のスレッドのイベント測定回路では、命令が完了できなかったことを示すイベントが測定されないので、複数のスレッドからなるコアに関して、命令が完了できなかった要因のイベントの測定を正しく行ってCPIの分析を正確に行うことが可能になる。
さらに、本発明の第3の態様に係る演算処理装置によれば、全てのスレッドに対して同時に全てのイベントを測定することが可能になると共に、複数のスレッドからなるコアに対して命令が完了できなかった要因のイベントを測定することが可能になる。
本発明を、添付の図面を参照して以下に説明する。ここで、
図1は、従来のシングルスレッドプロセッサの全体的な構成を示すブロック図、 図2は、シングルスレッド方式のパイプラインを示す図、 図3は、シングルスレッド方式のコミット制御部の構成を示すブロック図、 図4は、シングルスレッド方式のCPIの要因を示す図、 図5は、一般のスーパースカラ・アウトオブオーダー処理を示す流れ図、 図6は、同時マルチスレッディング方式を概念的に示す図、 図7は、同時マルチスレッディング方式による処理を示す流れ図、 図8は、本発明に係る同時マルチスレッディング方式のコミット制御部(スレッド測定)の構成を示すブロック図、 図9は、コアの命令コミット数の見え方を示す図、 図10は、各々のスレッドのCPIの要因を示す図、 図11は、本発明に係る同時マルチスレッディング方式のコミット制御部(コア測定)の構成を示すブロック図、 図12は、コアのCPIの要因を示す図、 図13は、本発明に係る同時マルチスレッディングプロセッサの全体的な構成を示すブロック図、 図14は、同時マルチスレッディング方式のパイプラインを示す図、 図15は、1つのスレッドの0end-op生成回路の一例を示す回路図、 図16は、本発明のコミット制御部におけるイベント生成回路の構成を示すブロック図、 図17は、CSEウィンドウとTOQ-comp-waitとの関係を概念的に示す図、 図18は、TOQ-comp-waitへのセットとリセットのタイミングを示すタイミングチャート、 図19は、1つのスレッドのCSE-priority-wait生成回路の一例を示す回路図、そして 図20は、コアの0end-op生成回路の一例を示す回路図である。
まず、本発明の実施例に係るSMT(同時マルチスレッディング)の機能を有する演算処理装置の構成および動作を説明する前に、従来のシングルスレッドプロセッサの構成、および同時マルチスレッディング方式の問題点を、添付の図面(図1〜図7)を参照して詳述する。
図1は、従来のシングルスレッドプロセッサの全体的な構成を示すブロック図であり、図2は、シングルスレッド方式のパイプラインを示す図である。なお、これ以降、前述した構成要素と同様のものに関しては、同一の参照番号を付して表すこととする。
図1の従来のシングルスレッドプロセッサにおいては、各種の命令およびデータの演算処理を行う演算処理部1と、演算処理部1の各部の動作を統括的に制御する制御部4と、演算処理部1による演算処理を実行するためのプログラムおよび関連するデータを格納する記憶部6とが設けられている。
ここで、演算処理部1は、命令フェッチアドレスを生成する命令フェッチアドレス生成器10と、命令フェッチアドレス生成器10から送出される命令を一時的に記憶する1次命令キャッシュメモリ12と、1次命令キャッシュメモリ12から送出される命令をデコードする命令デコーダ13とを有している。
さらに、演算処理部1は、命令デコーダ13によりデコードされた全ての命令を登録するコミットスタックエントリ(CSE)2と、これらの命令を一時的に保持する各種のリザベーションステーション(RS)とを有している。このリザベーションステーションは、例えば、命令のアドレスを一時的に保持するRSA(Reservation Station for Address Generator)14、データの固定小数点演算用のRSE(Reservation Station for Execute)15、データの浮動小数点演算用のRSF(Reservation Station for Execute)16、および分岐命令用のRSBR(Reservation Station for Branch)17を含む。
さらに、演算処理部1は、RSA14から送出される命令のアドレスを演算処理するオペランドアドレス生成器18および1次データキャッシュメモリ19と、RSE15から送出されるデータの固定小数点演算を実行するための演算器20、固定小数点更新バッファ21および固定小数点レジスタ22と、RSF16から送出されるデータの浮動小数点演算を実行するための演算器23、浮動小数点更新バッファ24および浮動小数点レジスタ25と、RSBR17から送出される分岐命令の分岐判定を行う分岐予測機構11とを有している。
さらに、演算処理部1は、現在の複数のスレッドの命令をカウントするプログラムカウンタ(PC)26と、次の複数のスレッドの命令をカウントする次のプログラムカウンタ(NEXT PC)27とを有している。
図1のシングルスレッドプロセッサにより複数のスレッドを実行する場合、従来は、図2に示すように、クロックサイクル(時間軸(t))ごとに1つのスレッドの命令を順番に実行していた。このシングルスレッドプロセッサは、まず、1次命令キャッシュメモリ12からの命令を命令デコーダ13に送出する。つぎに、デコード(D)サイクルでインオーダでデコードする。そして、命令デコーダ13によりデコードされた全ての命令をコミットスタックエントリ(CSE)2に登録し、これと同時にアウトオブオーダの命令実行制御を行う各々のRSに登録する。RSのプライオリティ(P)サイクルで命令実行が可能となった命令を、バッファ(B)サイクルでレジスタ(例えば、固定小数点レジスタ22や浮動小数点レジスタ25)を読み出しアウトオブオーダで演算器20、23に投入して、演算実行(X)サイクルで演算実行する。
この演算の実行結果は、レジスタ更新(U)サイクルで更新バッファ(例えば、固定小数点更新バッファ21や浮動小数点更新バッファ24)に格納されて命令完了(コミット処理)を待ち、CSE2で演算実行完了、1次データキャッシュメモリ19からのデータ転送完了、分岐予測機構11からの分岐判定完了等の報告を受けてインオーダでコミット処理を行う。そして、レジスタ書き込み(W)サイクルで更新バッファからのレジスタへの書き込み、プログラムカウンタ(PC)および次のプログラムカウンタ(NEXT PC)の更新等を行う。シングルスレッドプロセッサでは、通常、命令実行数等のイベントの発生状況や資源の使用頻度を動的に測定する機能を有するイベント測定(PA)回路3が設けられている。このイベント測定回路3は、シングルスレッドプロセッサの各部から送られたイベントの種類をソフトウェアで選択し、選択されたイベントをカウントして蓄積する。蓄積されたイベントは、測定終了後にソフトウェアで読み出され、イベントの組み合わせに基づいてプロセッサの性能評価に使うことができる。
図3は、シングルスレッド方式のコミット制御部の構成を示すブロック図である。ここでは、図1の制御部4に含まれるコミット制御部40の構成を簡略化して示す。
図3のコミット制御部40では、1つのスレッドの命令がCSE2に登録される。さらに、図3のコミット制御部40では、クロックサイクルごとにCSE2の先頭のエントリを示す解放エントリ選択回路41と、クロックサイクルごとにCSE2の実行完了イベントのエントリを示す実行完了エントリ選択回路46とが設けられている。さらに、図3のコミット制御部40では、命令完了イベントを有するスレッドを選択する命令完了対象レジスタ選択回路(CSEウィンドウ選択回路43)と、選択されたスレッドの命令完了イベントを登録する命令完了対象レジスタ(CSEウィンドウ44)とが設けられている。RSA14、RSE15、RSF16およびRSBR17による演算を実行したときの実行結果(実行ブロック47)は、実行完了報告ブロック48から実行完了エントリ選択回路46に通知される。
従来のシングルスレッドプロセッサでは、1つのスレッドの命令がCSE2に登録され、かつ、クロックサイクルごとにCSE2の先頭のエントリを示すポインタ回路42により選択されている1つのスレッドの命令完了候補が命令完了対象レジスタ(CSEウィンドウ44)に登録されることによって、コミット処理が行われる。CSE2に登録されているデータに関して、コミット処理が完了しているか否かを判別するための完了判別ブロック45が設けられている。イベント測定(PA)回路3は、CSEウィンドウ44から送出されるイベントを測定してCPIの要因を求める。
図4は、シングルスレッド方式のCPIの要因を示す図である。プロセッサの性能指標の一つとして使用されるCPIの値は実行命令数でサイクル数を割ることによって求められる。CPIの値をコミット処理の観点から見ると、同時クロックサイクルでの命令完了の数、例えば4命令同時コミット処理ができる場合、CPIは、命令完了なし(0end-op)、1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)の命令完了イベントの各々に対して測定されたサイクル数を実行命令数で割った値の積算結果となる。特に0end-opとなる場合は、インオーダのコミット処理において先頭命令(TOQ)のコミット処理ができなかったことを示す。この場合、後続の命令のコミット処理もできなくなるので、0end-opの測定とその要因の演算実行完了待ち(EU-comp-wait)、分岐判定完了待ち(BR-comp-wait)、キャッシュメモリからのデータ待ち(FCH-comp-wait)(いずれもcomp-waitに属する)、CSEに登録がない状態(CSE-empty)等を測定することは重要である。これらのCPIの要因および0end-opの要因は、全て命令完了対象レジスタ(CSEウィンドウ44)からイベントとして取得することが可能である。また、0end-opの要因は、必ずクロックサイクルごとに1つの要因に絞ってイベント取得がなされる。シングルスレッドプロセッサでは1つのスレッドしかないため、1つのスレッドの命令完了対象レジスタから送出されるイベントをイベント測定回路で測定して要因を積算することによって、CPIの要因の測定が可能である。
図5は、一般のスーパースカラ・アウトオブオーダー処理を示す流れ図、図6は、同時マルチスレッディング方式を概念的に示す図、そして、図7は、同時マルチスレッディング方式による処理を示す流れ図である。
図5のスーパースカラ・アウトオブオーダー処理においては、複数の命令フェッチサイクル100、複数命令デコード(D)サイクル101、および複数命令のコミット(W)104が、インオーダで処理される。また一方で、複数命令デコード(D)サイクル101でデコードされた複数の命令が、アウトオブオーダで個別に実行される(複数の実行サイクル102−1、102−2、102−3および102−4)。この複数の実行サイクル102−1〜102−4を実行する際に、コミット待ち103−1、103−2および103−3が発生する。このコミット待ちの発生をできる限り少なくするために、同時に複数のスレッド(実行サイクル)を実行する機能を有する同時マルチスレッディング(SMT)方式が採用されている。この同時マルチスレッディング方式では、2つ以上の複数のスレッドが同時に実行され、各々のスレッドのCSEに命令が登録される。シングルスレッドのように1つまたは複数のスレッドに絞った命令完了対象レジスタ(CSEウィンドウ)に、クロックサイクルごとに交互に選択されたスレッドの命令完了候補のエントリをCSEからコピーすることによって、コミット処理が行われ、各々のスレッドのイベント測定回路で性能測定が行われる。
このSMT方式では、図6の時間軸(t)と演算処理並列度(DP)との関係で示されるブロックMPから明らかなように、クロックサイクルごとに複数のスレッド(例えばスレッドA、スレッドB)が同時に実行される。
さらに、図7のSMT方式による処理では、スレッドAの命令フェッチサイクル110、デコードサイクル111、実行サイクル112およびコミットサイクル113と、スレッドBの命令フェッチサイクル120、デコードサイクル121、実行サイクル122およびコミットサイクル123とが同時に実行される。ここで、同じスレッドのコミットは追い抜くことができないが、異なるスレッドのコミットは追い抜くことができる点に注意すべきである。
図6および図7に示したようなSMT方式では、複数のスレッドがCSEに登録されているが、命令完了対象レジスタには、スレッド選択回路によってクロックサイクルごとに選択された命令完了対象レジスタの命令完了候補のみ登録される。よって、命令完了対象レジスタは、選択されたスレッドのコミット処理のみを行う。そして、選択されたスレッドのイベントは、命令完了対象レジスタからイベント測定回路へ送出される。しかしながら、前述のように、選択されなかったスレッドからのイベント測定を行うことはできない。同時マルチスレッディング方式においても、スレッドごとのCPIの分析を正確に行うために、全てのスレッドのイベントを同時に測定することが必要になる(第1の不都合な事態)。
また一方で、上記のSMT方式では、複数のスレッドからなるコアにおいて、複数のスレッドを合わせたときのCPIの分析を行うことが望まれる。この同時マルチスレッディング方式では、複数のスレッドを実行することにより、1つのスレッドだけで実行する場合よりもコアの使用効率を向上させることができるようになる。この場合、複数のスレッドからなるコアのCPI分析を行うためのイベント測定回路において、1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)は、スレッドごとに独立しているので正しく測定することができるが、命令完了なし(0end-op)は、1つに絞られた命令完了対象レジスタに登録されていないときも測定してしまう。それゆえに、このような測定方法では、コア内の複数のスレッドを合わせた処理のCPIの分析を正確に行うことはできない。よって、同時マルチスレッディング方式においては、複数のスレッドからなるコアに関しても、全てのスレッドのCPIの分析を正確に行うために、命令完了なし(0end-op)のイベント測定を正しく行うことが必要になる(第2の不都合な事態)。
ついで、上記のような第1および第2の不都合な事態に対処するために考え出された本発明の実施例に係るSMT方式の演算処理装置の構成および動作を、添付図面(図8〜図20)を参照しながら詳述する。
図8は、SMT方式のコミット制御部(スレッド測定)の構成を示すブロック図、図9は、コアの命令コミット数の見え方を示す図、そして、図10は、各々のスレッドのCPIの要因を示す図である。ここでは、後述の図13の制御部4Mに含まれるコミット制御部40MSの構成を簡略化して示す。
図8のコミット制御部40MSの構成は、前述の図3のシングルスレッド方式のコミット制御部40の構成と概ね同じである。
ただし、図8のSMT方式のコミット制御部40MSでは、図3のシングルスレッド方式のコミット制御部40の場合と異なり、CSE2−1、2−2がスレッド(例えば、スレッド0、スレッド1)ごとに分離され、スレッド選択回路49で選択されたスレッドの命令完了候補に対して、CSEウィンドウ44にてコミット処理が行われる。CSE2−1、2−2に登録された命令は、クロックサイクルごとにスレッド選択回路49で選択されたスレッドの次にコミットされる命令完了候補の4命令がCSEウィンドウ43にコピーされる。完了判別ブロック45におけるコミット処理の判断に関しては、実行が完了したか、先の命令がコミット処理済みか、または、同時にコミット処理可能であるかを判断して、CSEウィンドウでクロックサイクルごとに最大4命令同時にコミット処理が行われる(図9参照)。イベント測定(PA)回路3−1、3−2は、CSEウィンドウ44から送出される選択されたスレッドに関するイベントを測定すると共に、CSE2−1、2−2のいずれか一方から送出される選択されなかったスレッドに関するイベントも測定する。
上記の第1の不都合な事態に対処するために、スレッド選択回路49により選択されたスレッドは、CSEウィンドウ44から命令完了なし(0end-op)、1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)のイベント測定を行い、選択されなかったスレッドは、命令完了なし(0end-op)として各々のスレッドのイベント測定回路3−1、3−2で測定するようにしている。これによって、選択されたスレッドに対しても、選択されなかったスレッドに対しても、同時に各々のスレッドのイベント測定回路3−1、3−2でイベントを測定することができる。
また一方で、スレッド選択回路49により選択されたスレッドに関しては、CSEウィンドウ44に格納されている演算実行完了待ち(EU-comp-wait)、分岐判定完了待ち(BR-comp-wait)、およびキャッシュメモリからのデータ待ち(FCH-comp-wait)(いずれもcomp-waitに属する)のイベントをイベント測定回路3−1、3−2で測定して、0end-opの要因を測定する。選択されなかったスレッドに関しては、TOQのコミット処理ができなかったときのみその要因である演算実行完了待ち(EU-comp-wait)、分岐判定完了待ち(BR-comp-wait)、およびキャッシュメモリからのデータ待ち(FCH-comp-wait)のイベントを保持するTOQ-comp-waitレジスタを全スレッド分備えることによって、選択されなかったスレッドもTOQ-comp-waitレジスタから0end-opの要因をイベント測定回路3−1、3−2で測定することができる。0end-opの要因を全てのスレッドで同時にスレッドごとにイベント測定回路3−1、3−2で測定することが可能である。
イベント測定回路3−1、3−2で得られるスレッドの実行命令数で、スレッドのCPIの要因である命令完了なし(0end-op)、1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)の値のそれぞれを割った値を、それぞれのスレッドごとに積算することによって、図10のようなCPIのグラフが、スレッドごとに全てのスレッドで得られる。また、スレッドごとの各々の0end-opの要因である演算実行完了待ち(EU-comp-wait)、分岐判定完了待ち(BR-comp-wait)、キャッシュメモリからのデータ待ち(FCH-comp-wait)、そのスレッドが選択されていない状態(CSE-priority-wait)、CSEに登録がない状態(CSE-empty)等をスレッドの実行命令数で割った値をスレッドごとに積算することによって、全てのスレッドの0end-opのグラフが得られる。
図10の各々のスレッドに関するCPIの要因の分析をさらに詳しく説明する。CPIは、命令完了なし(0end-op)、1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)がその構成要素になる。0end-opは、TOQのコミット処理ができなかったことを示し、1end-op、2end-op、3end-op、および4end-opは、それぞれ、TOQから1命令、2命令、3命令および4命令が同時にコミット処理されたことを示す。スレッド選択回路で選択されたスレッドは、CSEウィンドウから0end-op、1end-op、2end-op、3end-op、および4end-opのイベント測定をし、選択されなかったスレッドは、0end-opとして各々のスレッドのイベント測定回路で測定することによって、選択されたスレッドも、選択されなかったスレッドも同時に各スレッドのイベント測定回路でイベントを測定することができる。
イベント測定回路で得られるスレッドの実行命令数で、スレッドのCPIの要因0end-op、1end-op、2end-op、3end-op、および4end-opの値のそれぞれを割った値を、それぞれのスレッドごとに積算することによって、前述の図10のようなCPIのグラフが、スレッドごとに全てのスレッドで得られる。また一方で、スレッドごとの各々の0end-op要因EU-comp-wait、BR-comp-wait、FCH-comp-wait等をスレッドの実行命令数で割った値をスレッドごとに積算することで、全てのスレッドの0end-opのグラフが得られる。
図11は、SMT方式のコミット制御部(コア測定)の構成を示すブロック図であり、図12は、コアのCPIの要因を示す図である。
図11のコミット制御部40MC(コア測定)の構成は、前述の図8のコミット制御部40MS(スレッド測定)の構成と概ね同じである。
ただし、図11のSMT方式のコミット制御部40MCでは、図8のSMT方式のコミット制御部40MSの場合と異なり、CSE2−3、2−3がスレッド(例えば、スレッド0、スレッド1)ごとに分離されているが、あくまでも1つのコア2−5として構成されている。CSE2−3、2−4からなるコア2−5に登録された命令は、クロックサイクルごとにスレッド選択回路49で選択されたスレッドの次にコミットされる命令完了候補の4命令がCSEウィンドウ44にコピーされる。完了判別ブロック45におけるコミット処理の判断に関しては、実行が完了したか、先の命令がコミット処理済みか、または、同時にコミット処理可能であるかを判断して、CSEウィンドウでクロックサイクルごとに最大4命令同時にコミット処理が行われる。
上記の第2の不都合な事態に対処するために、スレッド選択回路49で1つのスレッドに絞って CSEウィンドウ44に登録し、1つのスレッドに絞って選択されたスレッドのみのコミット処理を行う構成としたときに、CSEウィンドウ44にて選択されたスレッドに対応するコミット処理のイベントを測定することで可能になる。例えば図9に示すように、全てのスレッドが命令コミットなしであるクロックサイクルは、コアの処理としても命令コミットなしであるが、1つのスレッドが命令コミットなしとなっているクロックサイクルで、他のスレッドが例えば4命令同時コミットであれば、コアの処理としては4命令同時コミットとなる。
コアの1命令コミット、2命令同時コミット、3命令同時コミット、および4命令同時コミットに関しては、命令コミット処理は必ずCSEウィンドウ44上で行われるので、第1の不都合な事態の解決手段としてのスレッドごとの1命令同時完了(1end-op)、2命令同時完了(2end-op)、3命令同時完了(3end-op)、および4命令同時完了(4end-op)が得られれば、全てのスレッドを積算することで算出することができる。また一方で、コアの命令コミットなしに関しては、第1の不都合な事態の解決手段としてのスレッドごとの命令完了なし(0end-op)では、CSEウィンドウ44に登録されないときにもイベント測定が行われているので、そのまま用いることができない。よって、新たにCSEウィンドウ44に登録されたときだけ命令コミットなしであることをイベントにて測定し、全てのスレッドを積算して算出する。この処理は、Core-0end-opと呼ばれる。
また一方で、コアの命令コミットなしのときの詳細要因も同様に、第1の不都合な事態の解決手段としてのスレッドごとの EU-comp-wait、BR-comp-wait、FCH-comp-wait、およびCSE-emptyをそのまま用いることができず、新たにCSEウィンドウに登録されたスレッドのみがイベント測定を行うようにして(図11参照)、全てのスレッドの総和をとって算出する。これらの処理は、それぞれ、Core-EU-comp-wait、Core-BR-comp-wait、Core-FCH-comp-wait、およびCore-CSE-emptyと呼ばれる。これらのイベントを積算して、全てのスレッドの実行命令数の積算値で割ることによって、図12のようにコアのCPIのグラフが得られる。ここでは、前述の図9の場合と異なり、そのスレッドが選択されていない状態(CSE-priority-wait)は、Core-0end-opの要因として存在しない点に注意すべきである。
図12のコアに関するCPIの要因の分析をさらに詳しく説明する。ここでは、Core-0end-opとCore-1end-op、Core-2end-op、Core-3end-op、およびCore-4end-opで分析したグラフと、Core-0end-opで分析したグラフが示されている。1つのCSEウィンドウ44にて選択されたスレッドのイベント測定回路でのみCSEウィンドウ44に登録されたCPIの要因であるCore-0end-op、Core-1end-op、Core-2end-op、Core-3end-op、およびCore-4end-opや、Core-0end-opの要因であるCore-EU-comp-wait、Core-BR-comp-wait、Core-FCH-comp-wait、およびCore-CSE-emptyが測定される。
イベント測定回路で得られる各々のスレッドの実行命令数を積算したもので、スレッドのCPIの要因であるCore-0end-op、1end-op、2end-op、3end-op、および4end-opの値のそれぞれを割った値を、全ての要因に対して全てのスレッドで積算することによって、前述の図12のようなコアのCPIのグラフが得られる。また一方で、スレッドごとの各々のCore-0end-opの要因であるCore-EU-comp-wait、Core-BR-comp-wait、Core-FCH-comp-wait、およびCore-CSE-emptyを、全てのスレッドの実行命令数の積算値で割った値を積算することによって、コアのCore-0end-opのグラフが得られる。
ここで、前述の図8のSMT方式のコミット制御部(スレッド測定)と、前述の図11のSMT方式のコミット制御部(コア測定)とを1つの回路に実装することによって、全てのスレッドに対して同時に全てのイベントを測定することが可能になると共に、複数のスレッドからなるコアに対して命令が完了できなかった要因のイベントを測定することが可能になる。
図13は、本発明に係る同時マルチスレッディングプロセッサ(SMT方式のプロセッサ)の全体的な構成を示すブロック図であり、図14は、同時マルチスレッディング方式のパイプラインを示す図である。
図13のSMT方式のプロセッサの構成は、前述の図1のシングルスレッド方式のプロセッサの構成と概ね同じである。
ただし、図13における2つのスレッドのSMT方式のプロセッサでは、図1のシングルスレッドプロセッサの場合と異なり、演算処理部1Mは、2つのスレッドに対して、CSE2−1、2−2、固定小数点レジスタ22−1、22−2、固定小数点レジスタ25−1、25−2、プログラムカウンタ(PC)26−1、26−2、次のプログラムカウンタ(NEXT PC)27−1,27−2、およびイベント測定(PA)回路3−1、3−2をスレッドごとに具備している。その他の資源(構成要素)は全てのスレッドに対して共通で利用するか、または、クロックサイクルごとに占有スレッドを切り替えて利用するようになっている。
図13のSMT方式のプロセッサにより同時に複数のスレッドを実行する場合、図14に示すように、1次命令キャッシュメモリ12からアドレスの命令を命令デコーダ13に送出する。つぎに、同一スレッドの命令を最大4命令同時にインオーダでデコードする。そして、命令デコーダ13によりデコードされた全ての命令を、コミット処理を行うCSE2−1、2−2にスレッドごとに登録し、これと同時にアウトオブオーダの命令実行制御を行うRSに登録する。RSにて命令実行が可能となった命令をアウトオブオーダで演算器20、23に投入する。
この演算の実行結果は、更新バッファ(例えば、固定小数点更新バッファ21や浮動小数点更新バッファ24)に格納される。CSE2−1、2−2は、演算実行完了、1次データキャッシュメモリ19からのデータ転送完了、分岐予測機構11からの分岐判定完了等の報告を受けてインオーダで同一スレッドを最大4命令同時にコミット処理し、更新バッファからレジスタ(例えば、固定小数点レジスタ22−1、22−2や浮動小数点レジスタ25−1、25−2)に格納し、各々のスレッドのプログラムカウンタの更新等を行う。イベント測定を行うためのイベント測定回路3−1、3−2は、プロセッサの各部からのイベントを測定する回路であり、スレッドごとに2スレッド分持ち、スレッドごとに別々のイベントを測定することができる。
図14にSMT方式のパイプラインを示す。SMT方式では、スレッドごとに時間軸(t)で見た場合にシングルスレッドと同様の動作を行う。例えば、スレッド0のキャッシュミス($miss)が起こった場合、シングルスレッドでは後続の全ての命令のコミット処理が停止してしまう。しかしながら、SMT方式ではスレッド1の命令のコミット処理ができるので、2つのスレッドを交互に利用することによってコミット処理部の動作率を高めることが可能になる。ここで、同一スレッドのコミット(ロード命令、演算命令)は追い抜くことができないが、異なるスレッドの実行やコミット処理は追い抜くことができる点に注意すべきである。
図15は、1つのスレッドの0end-op生成回路の一例を示す回路図である。ここでは、1つのスレッドの0end-op生成回路は、AND素子50およびOR素子51からなる複数の論理素子により構成される。
図15の1つのスレッドの0end-op生成回路においては、CSEウィンドウのスレッド番号(Thread-ID)が0であって(すなわち、スレッド0にプライオリティが付与されており)、かつ、先頭命令が完了(TOQ-commit)できなかった場合、または、Thread-IDが1(すなわち、スレッド1にプライオリティが付与されている)でスレッド0が選択されていない場合に、スレッド0のコミット処理が完了できなかったことを示す0end-opイベントが生成される。このようにして生成された0end-opイベントは、スレッドごとのイベント測定回路で測定される。より具体的には、0end-opイベントの構成要素は、演算実行完了待ち(EU-comp-wait)、分岐判定完了待ち(BR-comp-wait)、キャッシュメモリからのデータ待ち(FCH-comp-wait)等の実行完了条件がそろっていない状態、そのスレッドが選択されていない状態(CSE-priority-wait)、またはCSEに登録がない状態(CSE-empty)に分類することができる。
図16は、本発明のコミット制御部におけるイベント生成回路の構成を示すブロック図、図17は、CSEウィンドウとTOQ-comp-waitとの関係を概念的に示す図、そして、図18は、TOQ-comp-waitへのセットとリセットのタイミングを示すタイミングチャートである。図16では、図8のコミット制御部に含まれるイベント生成回路の具体例が例示されている。
図16のイベント生成回路は、各々のスレッドに関して、複数の論理素子により構成される。例えば、スレッド0側のイベント生成回路は、2つのAND素子54−1、55−1と、1つのOR素子56−1により構成される。ここで、一方のAND素子54−1は、スレッド0が選択されていないために命令が完了できなかったことを示すイベントを、スレッド番号44Nを用いて検出する機能を有しており、他方のAND素子55−1は、スレッド0が選択されているにもかかわらず何らかの原因で命令が完了できなかったことを示すイベントを検出する機能を有している。また一方で、スレッド1側のイベント生成回路は、2つのAND素子54−2、55−2と、1つのOR素子56−2により構成される。ここで、一方のAND素子55−2は、スレッド1が選択されていないために命令が完了できなかったことを示すイベントを、スレッド番号44Nを用いて検出する機能を有しており、他方のAND素子54−2は、スレッド1が選択されているにもかかわらず何らかの原因で命令が完了できなかったことを示すイベントを検出する機能を有している。
図16のイベント生成回路において、各々の実行完了条件がそろっていない状態(comp-wait)は、各々のスレッドのイベント測定回路3−1、3−2にイベントを送ることによって測定することができる。CSEウィンドウ44の先頭の命令が実行完了待ちでコミット処理ができなかった場合、先頭命令の実行完了待ちイベントであるEU-comp-wait、BR-comp-wait、またはFCH-comp-waitが、各々のスレッドのTOQ-comp-waitレジスタ52、53に格納され(図17参照)、実行完了待ちがなくなるまで保持される。
TOQ-comp-waitへのセットとリセットのタイミングを図18のタイミングチャートに示す。図18のタイミングチャートにおいて、1つ目および3つ目のクロックサイクルでは、スレッド0が選択されているときにスレッド0の実行完了条件がそろっていない状態(スレッド0のTOQ-comp-waitレジスタにフラグ1が立っているセット状態)にあることが示されている。また一方で、2つ目のクロックサイクルでは、スレッド1が選択されているためにスレッド0の実行完了条件がそろっていない状態(スレッド0のTOQ-comp-waitレジスタにフラグ1が立っているセット状態)にあることが示されている。
さらに、4つ目のクロックサイクルでは、スレッド1が選択されているときにスレッド0の実行完了条件がそろっている状態(スレッド0のTOQ-comp-waitレジスタにフラグ0が立っているリセット状態)にあることが示されている。上記の1つ目〜4つ目のクロックサイクルでは、スレッド0において実行完了待ちの状態になっている。最終的に、5つ目のクロックサイクルでは、スレッド0が選択されているときにスレッド0の実行完了条件がそろっている状態になり、コミット処理が完了したことが示されている。
図19は、1つのスレッドのCSE-priority-wait生成回路の一例を示す回路図である。ここでは、1つのスレッドのCSE-priority-wait生成回路は、1つのAND素子57からなる論理素子により構成される。
CSE-priority-waitは、実行完了待ちの状態(comp-wait)でもなく、CSEに登録がない状態(CSE-empty)でもないのに、スレッド選択回路で選択されなかったためにコミット処理ができないという要素である。本実施例では、図19のようなCSE-priority-wait回路をイベント測定回路に実装することによって、スレッド0のCSE-priority-waitを生成することができる。CSEウィンドウのスレッド番号(Thread-ID)が1であって、かつ、実行完了待ちの状態(comp-wait thread0)でなく、さらに、CSEが空の状態(CSE-empty thread0)でないときに、スレッド0のpriority_wait thread0が測定される。ここで、CSE-emptyは、CSEの情報に基づいて測定することができる。
図20は、コアの0end-op生成回路の一例を示す回路図である。ここでは、コアの0end-op生成回路は、2つのAND素子58、59からなる複数の論理素子により構成される。
本実施例では、図20のようなコアの0end-op生成回路をイベント測定回路に実装することによって、コアのスレッド0の0end-opを生成することができる。先頭命令のコミット処理が実行完了可能な状態(TOQ-comp)でなく、かつ、スレッド番号が0のときに、スレッド0のCore-0end-opが生成されて測定される。スレッド番号が1のときには、スレッド1のCore-0end-opが生成されて測定される。これらのイベントは、スレッドごとのイベント測定回路で測定される。

Claims (6)

  1. 複数の命令を有する第1のスレッドを実行する第1のスレッド実行部と、
    複数の命令を有する第2のスレッドを実行する第2のスレッド実行部と、
    前記第1のスレッド実行部が実行したスレッドにより発生したイベントを測定する第1のイベント測定回路と、
    前記第2のスレッド実行部が実行したスレッドにより発生したイベントを測定する第2のイベント測定回路と、
    前記第1のスレッド実行部と前記第2のスレッド実行部がそれぞれ実行した命令を、実行された命令が含まれるスレッド毎に格納するコミットスタックエントリと、
    前記第1のスレッド実行部と前記第2のスレッド実行部のいずれかが実行した命令を完了させる場合、前記コミットスタックエントリにスレッド毎に格納された命令のうち、完了対象の命令が含まれるスレッドを選択するとともに、前記完了対象の命令の完了イベントを前記イベント測定回路に出力するスレッド選択部と、
    前記スレッド選択部が選択したスレッドに含まれる完了対象の命令を保持する完了対象命令レジスタと、
    前記スレッド選択部が選択しなかったスレッドの先頭命令が完了できなかった要因を保持する要因保持レジスタと、
    前記完了対象命令レジスタに保持された、前記スレッド選択部が選択したスレッドの先頭命令が完了できなかったことに起因して生成される第1のイベントを選択して前記第1のイベント測定回路に出力する第1のイベント選択部と、
    前記要因保持レジスタに保持された、前記スレッド選択部が選択しなかったスレッドの先頭命令が完了できなかったことに起因して生成される第2のイベントを選択して前記第2のイベント測定回路に出力する第2のイベント選択部を有することを特徴とする演算処理装置。
  2. 前記第1のイベント選択部が選択した第1のイベントの前記第1のイベント測定回路への出力と、前記第2のイベント選択部が選択した第2のイベントの前記第2のイベント測定回路への出力は、同時に行われることを特徴とする請求項1記載の演算処理装置。
  3. 前記スレッド選択部は、
    前記完了対象の命令が含まれるスレッドをクロックサイクル毎に選択することを特徴とする請求項1記載の演算処理装置。
  4. 各完了対象の命令の完了イベントに要したクロックサイクル数を、スレッドに含まれる実行された命令数で割った値を、全ての完了対象の命令の完了イベントについて積算することにより、プログラムに含まれる命令の完了に要したクロックサイクル数の平均値の分析が行われることを特徴とする請求項1記載の演算処理装置。
  5. 第1のプロセッサコア部と第2のプロセッサコア部を有する演算処理装置において、
    前記第1のプロセッサコア部は、
    前記第1のスレッド実行部と第1のイベント測定回路を有し、
    前記第2のプロセッサコア部は、
    前記第2のスレッド実行部と第2のイベント測定回路を有することを特徴とする請求項1記載の演算処理装置。
  6. 演算処理装置の制御方法において、
    前記演算処理装置が有する第1のスレッド実行部が、複数の命令を有する第1のスレッドを実行し、
    前記演算処理装置が有する第2のスレッド実行部が、複数の命令を有する第2のスレッドを実行し、
    前記演算処理装置が有する第1のイベント測定回路が、前記第1のスレッド実行部が実行したスレッドにより発生したイベントを測定し、
    前記演算処理装置が有する第2のイベント測定回路が、前記第2のスレッド実行部が実行したスレッドにより発生したイベントを測定し、
    前記演算処理装置が有するコミットスタックエントリが、前記第1のスレッド実行部と前記第2のスレッド実行部がそれぞれ実行した命令を、実行された命令が含まれるスレッド毎に格納し、
    前記第1のスレッド実行部と前記第2のスレッド実行部のいずれかが実行した命令を完了させる場合、前記演算処理装置が有するスレッド選択部が、前記コミットスタックエントリにスレッド毎に格納された命令のうち、完了対象の命令が含まれるスレッドを選択するとともに、前記完了対象の命令の完了イベントを前記イベント測定回路に出力し、
    前記演算処理装置が有する完了対象命令レジスタが、前記スレッド選択部が選択したスレッドに含まれる完了対象の命令を保持し、
    前記演算処理装置が有する要因保持レジスタが、前記スレッド選択部が選択しなかったスレッドの先頭命令が完了できなかった要因を保持し、
    前記演算処理装置が有する第1のイベント選択部が、前記完了対象命令レジスタに保持された、前記スレッド選択部が選択したスレッドの先頭命令が完了できなかったことに起因して生成される第1のイベントを選択して前記第1のイベント測定回路に出力し、
    前記演算処理装置が有する第2のイベント選択部が、前記要因保持レジスタに保持された、前記スレッド選択部が選択しなかったスレッドの先頭命令が完了できなかったことに起因して生成される第2のイベントを選択して前記第2のイベント測定回路に出力することを特徴とする演算処理装置の制御方法。
JP2009520199A 2007-06-20 2007-06-20 演算処理装置及び演算処理装置の制御方法 Active JP5136553B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2007/062445 WO2008155845A1 (ja) 2007-06-20 2007-06-20 演算処理装置

Publications (2)

Publication Number Publication Date
JPWO2008155845A1 JPWO2008155845A1 (ja) 2010-08-26
JP5136553B2 true JP5136553B2 (ja) 2013-02-06

Family

ID=40156011

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009520199A Active JP5136553B2 (ja) 2007-06-20 2007-06-20 演算処理装置及び演算処理装置の制御方法

Country Status (4)

Country Link
US (1) US8001362B2 (ja)
EP (1) EP2159685B1 (ja)
JP (1) JP5136553B2 (ja)
WO (1) WO2008155845A1 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2489708B (en) * 2011-04-05 2020-04-15 Advanced Risc Mach Ltd Thread selection for multithreaded processing
US10977075B2 (en) * 2019-04-10 2021-04-13 Mentor Graphics Corporation Performance profiling for a multithreaded processor

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10275100A (ja) * 1997-03-11 1998-10-13 Internatl Business Mach Corp <Ibm> マルチスレッド・プロセッサ内でパフォーマンスを監視する方法およびシステム
JP2006040174A (ja) * 2004-07-29 2006-02-09 Fujitsu Ltd 命令リトライ検証機能付き情報処理装置および命令リトライ検証方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6076157A (en) * 1997-10-23 2000-06-13 International Business Machines Corporation Method and apparatus to force a thread switch in a multithreaded processor
US6052709A (en) * 1997-12-23 2000-04-18 Bright Light Technologies, Inc. Apparatus and method for controlling delivery of unsolicited electronic mail
US6535905B1 (en) * 1999-04-29 2003-03-18 Intel Corporation Method and apparatus for thread switching within a multithreaded processor
JP3512678B2 (ja) 1999-05-27 2004-03-31 富士通株式会社 キャッシュメモリ制御装置および計算機システム
US6791367B2 (en) * 2002-03-19 2004-09-14 Broadcom Corporation Hardware and software programmable fuses for memory repair
US7472258B2 (en) * 2003-04-21 2008-12-30 International Business Machines Corporation Dynamically shared group completion table between multiple threads
US7657893B2 (en) * 2003-04-23 2010-02-02 International Business Machines Corporation Accounting method and logic for determining per-thread processor resource utilization in a simultaneous multi-threaded (SMT) processor
US7360062B2 (en) 2003-04-25 2008-04-15 International Business Machines Corporation Method and apparatus for selecting an instruction thread for processing in a multi-thread processor
US20050138333A1 (en) * 2003-12-19 2005-06-23 Samra Nicholas G. Thread switching mechanism
US20050183065A1 (en) * 2004-02-13 2005-08-18 Wolczko Mario I. Performance counters in a multi-threaded processor
JP2005284749A (ja) * 2004-03-30 2005-10-13 Kyushu Univ 並列処理コンピュータ
JP4327008B2 (ja) * 2004-04-21 2009-09-09 富士通株式会社 演算処理装置及び演算処理装置の制御方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10275100A (ja) * 1997-03-11 1998-10-13 Internatl Business Mach Corp <Ibm> マルチスレッド・プロセッサ内でパフォーマンスを監視する方法およびシステム
JP2006040174A (ja) * 2004-07-29 2006-02-09 Fujitsu Ltd 命令リトライ検証機能付き情報処理装置および命令リトライ検証方法

Also Published As

Publication number Publication date
US20100088491A1 (en) 2010-04-08
EP2159685B1 (en) 2013-08-21
JPWO2008155845A1 (ja) 2010-08-26
US8001362B2 (en) 2011-08-16
WO2008155845A1 (ja) 2008-12-24
EP2159685A4 (en) 2010-12-08
EP2159685A1 (en) 2010-03-03

Similar Documents

Publication Publication Date Title
KR101994636B1 (ko) 데이터 처리장치의 추적
US8990597B2 (en) Instruction for enabling a processor wait state
US10296346B2 (en) Parallelized execution of instruction sequences based on pre-monitoring
US7895421B2 (en) Mechanism for using performance counters to identify reasons and delay times for instructions that are stalled during retirement
US9720695B2 (en) System for providing trace data in a data processor having a pipelined architecture
US8285973B2 (en) Thread completion rate controlled scheduling
US10209998B2 (en) Multi-threading processor and a scheduling method thereof
US9348595B1 (en) Run-time code parallelization with continuous monitoring of repetitive instruction sequences
US10628160B2 (en) Selective poisoning of data during runahead
US9952871B2 (en) Controlling execution of instructions for a processing pipeline having first out-of order execution circuitry and second execution circuitry
EP3238039A1 (en) Run-time code parallelization with monitoring of repetitive instruction sequences
US10169187B2 (en) Processor core having a saturating event counter for making performance measurements
JP5136553B2 (ja) 演算処理装置及び演算処理装置の制御方法
US9619361B2 (en) Performance profiling apparatus and performance profiling method
EP3278212A1 (en) Parallelized execution of instruction sequences based on premonitoring
US10613859B2 (en) Triple-pass execution using a retire queue having a functional unit to independently execute long latency instructions and dependent instructions
US10296350B2 (en) Parallelized execution of instruction sequences
US20160179536A1 (en) Early termination of segment monitoring in run-time code parallelization
US7913067B2 (en) Method and system for overlapping execution of instructions through non-uniform execution pipelines in an in-order processor
US6490653B1 (en) Method and system for optimally issuing dependent instructions based on speculative L2 cache hit in a data processing system
JP6477248B2 (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: 20120918

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

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

R150 Certificate of patent or registration of utility model

Ref document number: 5136553

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

Year of fee payment: 3