(57)【要約】  複数の命令を有するスレッドを実行するための演算処理装置が、命令の実行による各種のイベントを測定するイベント測定回路と、実行した命令の完了を制御するコミットスタックエントリとを備え、複数の命令を有するスレッドを実行する複数のスレッド実行部と、スレッド実行部が実行することにより、コミットスタックエントリに格納された完了候補の命令を格納すると共に、スレッドに含まれる命令の完了処理を行う命令完了対象レジスタと、命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、命令完了対象レジスタに格納された命令の命令完了イベントを、当該命令に対応するスレッド実行部が備えるイベント測定回路に送信するスレッド選択手段とを有する。
2008155845.tif 000002
【特許請求の範囲】
【請求項１】
命令の実行による各種のイベントを測定するイベント測定回路と、実行した命令の完了を制御するコミットスタックエントリとを備え、複数の命令を有するスレッドを実行する複数のスレッド実行部と、
前記スレッド実行部が実行することにより、前記コミットスタックエントリに格納された完了候補の命令を格納すると共に、前記スレッドに含まれる命令の完了処理を行う命令完了対象レジスタと、
前記命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、前記命令の命令完了イベントを、前記命令に対応するスレッド実行部が備えるイベント測定回路に送信するスレッド選択手段とを有することを特徴とする演算処理装置。
【請求項２】
前記スレッド選択手段は、前記スレッド実行部が実行したのにも関わらず、前記命令完了対象レジスタに前記スレッド実行部が実行した命令が格納されなかった場合に、前記命令が完了できなかったことを示す命令未完了イベントを、前記命令に対応するスレッド実行部が備えるイベント測定回路に送信することを特徴とする請求項１記載の演算処理装置。
【請求項３】
前記命令の完了処理で先頭の命令が完了できなかったときのみ要因を保持するレジスタを全てのスレッド分備え、前記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントと、他のスレッドの先頭の命令が完了できなかったときのみ要因を保持するレジスタに格納されている要因のイベントとをスレッドごとの前記イベント測定回路に同時に送ることによって、全てのスレッドの先頭の命令が完了できなかった要因を測定することが可能であることを特徴とする請求項２記載の演算処理装置。
【請求項４】
前記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントと、他のスレッドの先頭の命令が完了できなかったときのみ要因を保持するレジスタに格納されている要因のイベントとを生成する回路が、複数の論理素子の組み合わせにより構成されることを特徴とする請求項３記載の演算処理装置。
【請求項５】
スレッドごとの実行命令数でスレッドごとの命令完了イベントを割った値を、各々の前記スレッドの全ての命令完了イベントに関して積算することにより、プログラムの１つの命令の完了に要したクロックサイクル数の平均値の要因分析が行われることを特徴とする請求項１記載の演算処理装置。
【請求項６】
スレッドごとの実行命令数でスレッドごとの命令完了イベントを割った値を、各々の前記スレッドの全ての命令完了イベントに関して積算することにより、プログラムの１つの命令の完了に要したクロックサイクル数の平均値の要因分析が行われることを特徴とする請求項２記載の演算処理装置。
【請求項７】
複数のスレッドからなるコアが有する命令の実行による各種のイベントを測定するイベント測定回路と、実行した命令の完了を制御するコミットスタックエントリとを備え、複数の命令を有するコア内の複数のスレッドを実行する複数のスレッド実行部と、
前記スレッド実行部が実行することにより、前記コミットスタックエントリに格納された完了候補の命令を格納すると共に、１つに絞られたスレッドに含まれる命令の完了処理を行う命令完了対象レジスタと、
前記命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、前記命令の命令完了イベントを、前記命令に対応するスレッド実行部が備えるイベント測定回路に送信するスレッド選択手段とを有することを特徴とする演算処理装置。
【請求項８】
前記スレッド選択手段は、前記スレッド実行部が実行したのにも関わらず、前記命令完了対象レジスタに前記スレッド実行部が実行した命令が格納されなかった場合に、前記命令が完了できなかったことを示す命令未完了イベントを、前記命令に対応するスレッド実行部が備えるイベント測定回路に送信しないことを特徴とする請求項７記載の演算処理装置。
【請求項９】
前記命令の完了処理で先頭の命令が完了できなかったときのみ要因を保持するレジスタを全てのスレッド分備え、前記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントを前記イベント測定回路に送ることによって、当該スレッドの先頭の命令が完了できなかった要因を測定することが可能であることを特徴とする請求項８記載の演算処理装置。
【請求項１０】
前記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントを生成する回路が、複数の論理素子の組み合わせにより構成されることを特徴とする請求項９記載の演算処理装置。
【請求項１１】
全てのスレッドの実行命令数を積算した値で、各々のスレッドにおける各々の命令完了イベントをスレッドごとに割った値を、全てのスレッドの全ての命令完了イベントに関して積算することにより、複数のスレッドからなるコアでプログラムの１つの命令の完了に要したクロックサイクル数の平均値の要因が得られることを特徴とする請求項７記載の演算処理装置。
【請求項１２】
全てのスレッドの実行命令数を積算した値で、各々のスレッドにおける各々の命令完了イベントをスレッドごとに割った値を、全てのスレッドの全ての命令完了イベントに関して積算することにより、複数のスレッドからなるコアでプログラムの１つの命令の完了に要したクロックサイクル数の平均値の要因が得られることを特徴とする請求項８記載の演算処理装置。
【請求項１３】
命令の実行による各種のイベントを測定する第１のイベント測定回路と、実行した命令の完了を制御する第１のコミットスタックエントリとを備え、複数の命令を有するスレッドを実行する複数の第１のスレッド実行部と、
前記第１のスレッド実行部が実行することにより、前記第１のコミットスタックエントリに格納された完了候補の命令を格納すると共に、前記スレッドに含まれる命令の完了処理を行う第１の命令完了対象レジスタと、
前記第１の命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、前記命令の命令完了イベントを、前記命令に対応する第１のスレッド実行部が備える第１のイベント測定回路に送信する第１のスレッド選択手段とを有しており、
また一方で、複数のスレッドからなるコアが有する命令の実行による各種のイベントを測定する第２のイベント測定回路と、実行した命令の完了を制御する第２のコミットスタックエントリとを備え、複数の命令を有するコア内の複数のスレッドを実行する複数の第２のスレッド実行部と、
前記第２のスレッド実行部が実行することにより、前記第２のコミットスタックエントリに格納された完了候補の命令を格納すると共に、１つに絞られたスレッドに含まれる命令の完了処理を行う第２の命令完了対象レジスタと、
前記第２の命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、前記命令の命令完了イベントを、前記命令に対応する第２のスレッド実行部が備える第２のイベント測定回路に送信する第２のスレッド選択手段とを有することを特徴とする演算処理装置。
【請求項１４】
前記第１のスレッド選択手段は、前記第１のスレッド実行部が実行したのにも関わらず、前記第１の命令完了対象レジスタに前記第１のスレッド実行部が実行した命令が格納されなかった場合に、前記命令が完了できなかったことを示す命令未完了イベントを、前記命令に対応する第１のスレッド実行部が備える第１のイベント測定回路に送信し、
また一方で、前記第２のスレッド選択手段は、前記第２のスレッド実行部が実行したのにも関わらず、前記第２の命令完了対象レジスタに前記第２のスレッド実行部が実行した命令が格納されなかった場合に、前記命令が完了できなかったことを示す命令未完了イベントを、前記命令に対応する第２のスレッド実行部が備える第２のイベント測定回路に送信しないことを特徴とする請求項１３記載の演算処理装置。
【請求項１５】
複数のスレッドが有する命令が実行される場合、前記命令の完了処理で先頭の命令が完了できなかったときのみ要因を保持するレジスタを全てのスレッド分備え、前記第１の命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントと、他のスレッドの先頭の命令が完了できなかったときのみ要因を保持するレジスタに格納されている要因のイベントとをスレッドごとの前記第１のイベント測定回路に同時に送ることによって、全てのスレッドの先頭の命令が完了できなかった要因を測定することが可能であり、
また一方で、複数のスレッドからなるコアが有する命令が実行される場合、前記命令の完了処理で先頭の命令が完了できなかったときのみ要因を保持するレジスタを全てのスレッド分備え、前記第２の命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントを前記第２のイベント測定回路に送ることによって、当該スレッドの先頭の命令が完了できなかった要因を測定することが可能であることを特徴とする請求項１４記載の演算処理装置。
【請求項１６】
前記第１の命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントと、他のスレッドの先頭の命令が完了できなかったときのみ要因を保持するレジスタに格納されている要因のイベントとを生成する回路が、複数の論理素子の組み合わせにより構成され、
また一方で、前記第２の命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントを生成する回路が、複数の論理素子の組み合わせにより構成されることを特徴とする請求項１５記載の演算処理装置。
【請求項１７】
前記複数のスレッドが有する命令が実行される場合、スレッドごとの実行命令数でスレッドごとの命令完了イベントを割った値を、各々の前記スレッドの全ての命令完了イベントに関して積算することにより、プログラムの１つの命令の完了に要したクロックサイクル数の平均値の要因分析が行われ、
また一方で、前記複数のスレッドからなるコアが有する命令が実行される場合、全てのスレッドの実行命令数を積算した値で、各々のスレッドにおける各々の命令完了イベントをスレッドごとに割った値を、全てのスレッドの全ての命令完了イベントに関して積算することにより、複数のスレッドからなるコアでプログラムの１つの命令の完了に要したクロックサイクル数の平均値の要因が得られることを特徴とする請求項１３記載の演算処理装置。
【請求項１８】
前記複数のスレッドが有する命令が実行される場合、スレッドごとの実行命令数でスレッドごとの命令完了イベントを割った値を、各々の前記スレッドの全ての命令完了イベントに関して積算することにより、プログラムの１つの命令の完了に要したクロックサイクル数の平均値の要因分析が行われ、
また一方で、前記複数のスレッドからなるコアが有する命令が実行される場合、全てのスレッドの実行命令数を積算した値で、各々のスレッドにおける各々の命令完了イベントをスレッドごとに割った値を、全てのスレッドの全ての命令完了イベントに関して積算することにより、複数のスレッドからなるコアでプログラムの１つの命令の完了に要したクロックサイクル数の平均値の要因が得られることを特徴とする請求項１４記載の演算処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の命令を有する複数のスレッドを実行するための演算処理装置に関し、特に、キャッシュメモリおよび演算器等の資源を共有する複数のスレッドが同時に実行されるような同時マルチスレッディング（通常、ＳＭＴ（Simultaneous Multi-Threading）と略記される）の機能を備えた演算処理装置に関する。【０００２】
同時マルチスレッディングの機能を備えた演算処理装置、例えばプロセッサにおいては、命令実行数等の各種のイベントを各スレッドごとに測定することができると共に、プロセッサの性能指標の１つとして複数のスレッドでプログラムの１つの命令の完了に要したクロックサイクル数の平均値（通常、ＣＰＩ（Cycle Per Instructions）と略記される）を分析できることが望まれている。
【背景技術】
【０００３】
従来は、プロセッサにより複数のスレッドを実行する場合、シングルスレッド方式のシングルスレッドプロセッサを使用して、クロックサイクルごとに１つのスレッドの命令を順番に実行していた。このシングルスレッドプロセッサは、１次命令キャッシュメモリからの命令を命令デコーダに送出する。そして、命令デコーダによりデコードされた全ての命令をコミットスタックエントリ（通常、ＣＳＥ（Commit Stack Entry）と略記される）に登録し、これと同時にアウトオブオーダの実行制御を行う各々のリザベーションステーション（通常、ＲＳ（Reservation Station）と略記される）に登録する。ＲＳのプライオリティサイクルで命令の実行が可能となった命令を、バッファサイクルでレジスタを読み出すことで演算器に投入して、演算実行サイクルで演算を実行する。【０００４】
この演算の実行結果は、レジスタ更新サイクルで更新バッファに格納されて命令完了（コミット（Commit））処理を待ち、ＣＳＥで演算実行完了、１次データキャッシュメモリからのデータ転送完了、分岐予測機構からの分岐判定完了等の報告を受けてインオーダでコミット処理を行う。そして、レジスタ書き込みサイクルで更新バッファからのレジスタへの書き込み、プログラムカウンタ（通常、ＰＣ（Program Counter）と略記される）および次のプログラムカウンタ（ＮＥＸＴ  ＰＣ）の更新等を行う。シングルスレッドプロセッサでは、通常、命令実行数等のイベントの発生状況や資源の使用頻度を動的に測定する機能を有するイベント測定（通常、ＰＡ（Performance Analysis）と略記される）回路が設けられている。このイベント測定回路は、プロセッサの各部から送られたイベントの種類をソフトウェアで選択し、選択されたイベントをカウントして蓄積する。蓄積されたイベントは、測定終了後にソフトウェアで読み出され、イベントの組み合わせに基づいてプロセッサの性能評価に使うことができる。従来のシングルスレッドプロセッサでは、１つのスレッドの命令をＣＳＥに登録し、クロックサイクルごとにＣＳＥの先頭のエントリを示すポインタ選択回路で選択されている１つのスレッドの命令完了候補を命令完了対象レジスタに登録して、コミット処理を行うようにしている。【０００５】
プロセッサの性能指標の一つとして、プログラムの１つの命令の完了に要したクロックサイクル数の平均値を示すＣＰＩ（Cycle Per Instruction）の値が挙げられる。このＣＰＩの値は実行命令数でサイクル数を割ることによって求められる。ＣＰＩの値をコミット処理の観点から見ると、同時クロックサイクルでの命令完了の数、例えば４命令同時コミット処理ができる場合、ＣＰＩは、命令完了なし（0end-op）、１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）の命令完了イベントの各々に対して測定されたサイクル数を実行命令数で割った値の積算結果となる。特に0end-opとなる場合は、インオーダのコミット処理において先頭命令（通常、ＴＯＱ（Top Of Queue）と略記される）のコミット処理ができなかったことを示す。この場合、後続の命令のコミット処理もできなくなるので、0end-opの測定とその要因の演算実行完了待ち（EU-comp-wait）、分岐判定完了待ち（BR-comp-wait）、キャッシュメモリからのデータ待ち（FCH-comp-wait）、コミットスタックエントリに登録がない状態（CSE-empty）等を測定することは重要である。これらのＣＰＩの要因および0end-opの要因は、全て命令完了対象レジスタからイベントとして取得することが可能である。また、0end-opの要因は、必ずクロックサイクルごとに１つの要因に絞ってイベント取得がなされる。シングルスレッドプロセッサでは１つのスレッドしかないため、１つのスレッドの命令完了対象レジスタから送出されるイベントをイベント測定回路で測定して要因を積算することによって、ＣＰＩの要因の測定が容易に行えるようになっていた。【０００６】
ところで、プロセッサの命令実行に必要なキャッシュメモリ、パイプライン、演算器等の資源の使用効率を向上させプロセッサの性能を最大限に引き出すために、マルチスレッディングという技術が一般に知られている。マルチスレッディングには、代表的に、同時に複数のスレッドを実行する機能を有する同時マルチスレッディング（ＳＭＴ）方式が含まれる。この同時マルチスレッディング方式では、２つ以上の複数のスレッドが同時に実行され、各々のスレッドのコミットスタックエントリに命令が登録される。シングルスレッドのように１つまたは複数のスレッドに絞った命令完了対象レジスタに、スレッド選択回路にて例えばクロックサイクルごとに交互に選択されたスレッドの命令完了候補のエントリをコミットスタックエントリからコピーすることによって、コミット処理が行われ、各々のスレッドのイベント測定回路で性能測定が行われる。【０００７】
この同時マルチスレッディング方式では、前述のシングルスレッド方式の場合と同様に、ＣＰＩの要因である命令完了なし（0end-op）、１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）や、命令完了なし（0end-op）の要因をスレッドごとにイベント測定を行えることが望まれる。コミットスタックエントリには複数のスレッドが登録されているが、命令完了対象レジスタには、スレッド選択回路によってクロックサイクルごとに選択され一部のスレッドに絞られた命令完了対象レジスタの命令完了候補のみ登録される。よって、命令完了対象レジスタは、一部に絞られたスレッドのコミット処理のみを行う。そして、選択されたスレッドのイベントは、命令完了対象レジスタからイベント測定回路へ送出される。しかしながら、この場合、選択されなかったスレッドからのイベント測定を行うことはできない。同時マルチスレッディング方式においても、前述のシングルスレッド方式の場合と同様にスレッドごとのＣＰＩの分析を正確に行うために、全てのスレッドのイベントを同時に測定することが必要になる（第１の問題点）。【０００８】
また一方で、同時マルチスレッディング方式では、複数のスレッドからなるコアにおいて、複数のスレッドを合わせたときのＣＰＩの分析を行うことが望まれる。この同時マルチスレッディング方式では、複数のスレッドを実行することにより、１つのスレッドのみで実行する場合よりもコアの使用効率を向上させることができるようになる。一例として、全てのスレッドが命令コミットなしであるクロックサイクルは、コアの処理としても命令コミットなしであるが、１つのスレッドが命令コミットなしとなっているクロックサイクルで、他のスレッドが例えば４命令同時コミットであれば、コアの処理としては４命令同時コミットとなる。ここでは、複数のスレッドからなるコアのＣＰＩ分析を行うためのイベント測定回路において、１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）は、スレッドごとに独立しているので正しく測定することができるが、命令完了なし（0end-op）は、命令完了対象レジスタに登録されていないときも測定してしまう。それゆえに、このような測定方法では、コア内の複数のスレッドを合わせた処理のＣＰＩの分析を正確に行うことはできない。よって、同時マルチスレッディング方式においては、複数のスレッドからなるコアに関しても、全てのスレッドのＣＰＩの分析を正確に行うために、命令完了なし（0end-op）のイベント測定を正しく行うことが必要になる（第２の問題点）。【０００９】
ここで、参考のため、従来のマルチスレッディング方式のプロセッサに関連した下記の特許文献１および特許文献２を先行技術文献として呈示する。【００１０】
特許文献１においては、プロセッサによってサポートされる複数の各並行スレッドごとに独立したパフォーマンス監視をサポートするパフォーマンス・モニタを備えたパフォーマンス監視システムが開示されている。【００１１】
しかしながら、特許文献１では、例えば２つの並行スレッドの各々の活動状態と非活動状態とが入れ替わるタイミングが異なるようなＶＭＴ（Vertical Multi-Threading）方式によって２つの並行スレッドが実行される。それゆえに、同時マルチスレッディング方式のように２つの並行スレッドが同時に実行されることはないので、上記のような問題点が発生することはない。【００１２】
特許文献２においては、マルチスレッドプロセッサ内の命令スレッドを選択する際の命令スレッド間の選択を変更する装置および方法が開示されている。しかしながら、特許文献２では、同時マルチスレッディング方式のプロセッサの構成および動作に関しては一切言及していない。【００１３】
したがって、特許文献１および特許文献２のいずれによっても、従来の同時マルチスレッディング方式により発生する問題点に対処することはできない。【００１４】
【特許文献１】特開平１０−２７５１００号公報
【特許文献２】特開２００４−３２６７６５号公報
【００１５】
なお、従来のシングルスレッドプロセッサの構成、および同時マルチスレッディング方式の問題点に関しては、後に図面を参照して詳述する。
【発明の開示】
【００１６】
本発明の目的は、複数のスレッドが同時に実行されるような同時マルチスレッディング方式において、スレッドごとのＣＰＩの分析を正確に行うために、選択されなかったスレッドからのイベントを含む全てのイベントの測定を正しく行うと共に、複数のスレッドからなるコアに関して、命令が完了できなかった要因のイベントの測定を正しく行うことができるような演算処理装置を提供することにある。
【００１７】
上記目的を達成するために、本発明の第１の態様は、命令の実行による各種のイベントを測定するイベント測定回路と、実行した命令の完了を制御するコミットスタックエントリとを備え、複数の命令を有するスレッドを実行する複数のスレッド実行部と、上記スレッド実行部が実行することにより、上記コミットスタックエントリに格納された完了候補の命令を格納すると共に、上記スレッドに含まれる命令の完了処理を行う命令完了対象レジスタと、上記命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、上記命令の命令完了イベントを、上記命令に対応するスレッド実行部が備えるイベント測定回路に送信するスレッド選択手段とを有する演算処理装置を提供する。
【００１８】
好ましくは、本発明の第１の態様に係る演算処理装置において、上記スレッド選択手段は、上記スレッド実行部が実行したのにも関わらず、上記命令完了対象レジスタに上記スレッド実行部が実行した命令が格納されなかった場合に、上記命令が完了できなかったことを示す命令未完了イベントを、上記命令に対応するスレッド実行部が備えるイベント測定回路に送信するようになっている。
【００１９】
さらに、好ましくは、本発明の第１の態様に係る演算処理装置は、命令の完了処理で先頭の命令が完了できなかったときのみ要因を保持するレジスタを全てのスレッド分備え、上記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントと、他のスレッドの先頭の命令が完了できなかったときのみ要因を保持するレジスタに格納されている要因のイベントとをスレッドごとの上記イベント測定回路に同時に送ることによって、全てのスレッドの先頭の命令が完了できなかった要因を測定することが可能である。
【００２０】
さらに、好ましくは、本発明の第１の態様に係る演算処理装置において、上記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントと、他のスレッドの先頭の命令が完了できなかったときのみ要因を保持するレジスタに格納されている要因のイベントとを生成する回路が、複数の論理素子の組み合わせにより構成される。
【００２１】
また一方で、本発明の第２の態様は、複数のスレッドからなるコアが有する命令の実行による各種のイベントを測定するイベント測定回路と、実行した命令の完了を制御するコミットスタックエントリとを備え、複数の命令を有するコア内の複数のスレッドを実行する複数のスレッド実行部と、上記スレッド実行部が実行することにより、上記コミットスタックエントリに格納された完了候補の命令を格納すると共に、１つに絞られたスレッドに含まれる命令の完了処理を行う命令完了対象レジスタと、上記命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、上記命令の命令完了イベントを、上記命令に対応するスレッド実行部が備えるイベント測定回路に送信するスレッド選択手段とを有する演算処理装置を提供する。
【００２２】
好ましくは、本発明の第２の態様に係る演算処理装置において、上記スレッド選択手段は、上記スレッド実行部が実行したのにも関わらず、上記命令完了対象レジスタに上記スレッド実行部が実行した命令が格納されなかった場合に、上記命令が完了できなかったことを示す命令未完了イベントを、上記命令に対応するスレッド実行部が備えるイベント測定回路に送信しないようになっている。
【００２３】
さらに、好ましくは、本発明の第２の態様に係る演算処理装置は、命令の完了処理で先頭の命令が完了できなかったときのみ要因を保持するレジスタを全てのスレッド分備え、上記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントを上記イベント測定回路に送ることによって、当該スレッドの先頭の命令が完了できなかった要因を測定することが可能である。
【００２４】
さらに、好ましくは、本発明の第２の態様に係る演算処理装置において、上記命令完了対象レジスタに格納されているスレッドの先頭の命令が完了できなかった要因のイベントを生成する回路が、複数の論理素子の組み合わせにより構成される。
【００２５】
また一方で、本発明の第３の態様に係る演算処理装置は、命令の実行による各種のイベントを測定する第１のイベント測定回路と、実行した命令の完了を制御する第１のコミットスタックエントリとを備え、複数の命令を有するスレッドを実行する複数の第１のスレッド実行部と、上記第１のスレッド実行部が実行することにより、上記第１のコミットスタックエントリに格納された完了候補の命令を格納すると共に、上記スレッドに含まれる命令の完了処理を行う第１の命令完了対象レジスタと、上記第１の命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、上記命令の命令完了イベントを、上記命令に対応する第１のスレッド実行部が備える第１のイベント測定回路に送信する第１のスレッド選択手段とを有する。
【００２６】
さらに、本発明の第３の態様に係る演算処理装置は、複数のスレッドからなるコアが有する命令の実行による各種のイベントを測定する第２のイベント測定回路と、実行した命令の完了を制御する第２のコミットスタックエントリとを備え、複数の命令を有するコア内の複数のスレッドを実行する複数の第２のスレッド実行部と、上記第２のスレッド実行部が実行することにより、上記第２のコミットスタックエントリに格納された完了候補の命令を格納すると共に、１つに絞られたスレッドに含まれる命令の完了処理を行う第２の命令完了対象レジスタと、上記第２の命令完了対象レジスタに格納された命令の命令完了処理を行う場合は、上記命令の命令完了イベントを、上記命令に対応する第２のスレッド実行部が備える第２のイベント測定回路に送信する第２のスレッド選択手段とを有する。
【００２７】
好ましくは、本発明の第３の態様に係る演算処理装置において、上記第１のスレッド選択手段は、上記第１のスレッド実行部が実行したのにも関わらず、上記第１の命令完了対象レジスタに上記第１のスレッド実行部が実行した命令が格納されなかった場合に、上記命令が完了できなかったことを示す命令未完了イベントを、上記命令に対応する第１のスレッド実行部が備える第１のイベント測定回路に送信し、また一方で、上記第２のスレッド選択手段は、上記第２のスレッド実行部が実行したのにも関わらず、上記第２の命令完了対象レジスタに上記第２のスレッド実行部が実行した命令が格納されなかった場合に、上記命令が完了できなかったことを示す命令未完了イベントを、上記命令に対応する第２のスレッド実行部が備える第２のイベント測定回路に送信しないようになっている。
【００２８】
要約すれば、本発明の第１の態様に係る演算処理装置によれば、複数のスレッドにより同時マルチスレッディング等が実行される場合、命令完了処理時に命令完了対象レジスタに格納されているスレッドの命令完了イベントが、スレッドごとのイベント測定回路にて測定されると共に、命令完了対象レジスタに格納されなかったスレッドに関しても命令が完了できなかったことを示すイベントが、スレッドごとのイベント測定回路にて測定され、全てのスレッドに対して同時に全てのイベントが測定されることになるので、スレッドごとのＣＰＩの分析を正確に行ってプロセッサの適切な性能評価を行うことが可能になる。
【００２９】
さらに、本発明の第２の態様に係る演算処理装置によれば、複数のスレッドからなるコアにより同時マルチスレッディング等が実行される場合、１つのスレッドに絞られた命令完了対象レジスタに格納されている命令完了イベントが、選択された１つのスレッドのイベント測定回路でのみ測定され、選択されなかった他のスレッドのイベント測定回路では、命令が完了できなかったことを示すイベントが測定されないので、複数のスレッドからなるコアに関して、命令が完了できなかった要因のイベントの測定を正しく行ってＣＰＩの分析を正確に行うことが可能になる。
【００３０】
さらに、本発明の第３の態様に係る演算処理装置によれば、全てのスレッドに対して同時に全てのイベントを測定することが可能になると共に、複数のスレッドからなるコアに対して命令が完了できなかった要因のイベントを測定することが可能になる。
【図面の簡単な説明】
【００３１】
本発明を、添付の図面を参照して以下に説明する。ここで、
【図１】図１は、従来のシングルスレッドプロセッサの全体的な構成を示すブロック図、
【図２】図２は、シングルスレッド方式のパイプラインを示す図、
【図３】図３は、シングルスレッド方式のコミット制御部の構成を示すブロック図、
【図４】図４は、シングルスレッド方式のＣＰＩの要因を示す図、
【図５】図５は、一般のスーパースカラ・アウトオブオーダー処理を示す流れ図、
【図６】図６は、同時マルチスレッディング方式を概念的に示す図、
【図７】図７は、同時マルチスレッディング方式による処理を示す流れ図、
【図８】図８は、本発明に係る同時マルチスレッディング方式のコミット制御部（スレッド測定）の構成を示すブロック図、
【図９】図９は、コアの命令コミット数の見え方を示す図、
【図１０】図１０は、各々のスレッドのＣＰＩの要因を示す図、
【図１１】図１１は、本発明に係る同時マルチスレッディング方式のコミット制御部（コア測定）の構成を示すブロック図、
【図１２】図１２は、コアのＣＰＩの要因を示す図、
【図１３】図１３は、本発明に係る同時マルチスレッディングプロセッサの全体的な構成を示すブロック図、
【図１４】図１４は、同時マルチスレッディング方式のパイプラインを示す図、
【図１５】図１５は、１つのスレッドの０end-op生成回路の一例を示す回路図、
【図１６】図１６は、本発明のコミット制御部におけるイベント生成回路の構成を示すブロック図、
【図１７】図１７は、ＣＳＥウィンドウとTOQ-comp-waitとの関係を概念的に示す図、
【図１８】図１８は、TOQ-comp-waitへのセットとリセットのタイミングを示すタイミングチャート、
【図１９】図１９は、１つのスレッドのCSE-priority-wait生成回路の一例を示す回路図、そして
【図２０】図２０は、コアの０end-op生成回路の一例を示す回路図である。
【発明を実施するための最良の形態】
【００３２】
まず、本発明の実施例に係るＳＭＴ（同時マルチスレッディング）の機能を有する演算処理装置の構成および動作を説明する前に、従来のシングルスレッドプロセッサの構成、および同時マルチスレッディング方式の問題点を、添付の図面（図１〜図７）を参照して詳述する。【００３３】
図１は、従来のシングルスレッドプロセッサの全体的な構成を示すブロック図であり、図２は、シングルスレッド方式のパイプラインを示す図である。なお、これ以降、前述した構成要素と同様のものに関しては、同一の参照番号を付して表すこととする。
図１の従来のシングルスレッドプロセッサにおいては、各種の命令およびデータの演算処理を行う演算処理部１と、演算処理部１の各部の動作を統括的に制御する制御部４と、演算処理部１による演算処理を実行するためのプログラムおよび関連するデータを格納する記憶部６とが設けられている。【００３４】
ここで、演算処理部１は、命令フェッチアドレスを生成する命令フェッチアドレス生成器１０と、命令フェッチアドレス生成器１０から送出される命令を一時的に記憶する１次命令キャッシュメモリ１２と、１次命令キャッシュメモリ１２から送出される命令をデコードする命令デコーダ１３とを有している。【００３５】
さらに、演算処理部１は、命令デコーダ１３によりデコードされた全ての命令を登録するコミットスタックエントリ（ＣＳＥ）２と、これらの命令を一時的に保持する各種のリザベーションステーション（ＲＳ）とを有している。このリザベーションステーションは、例えば、命令のアドレスを一時的に保持するＲＳＡ（Reservation Station for Address Generator）１４、データの固定小数点演算用のＲＳＥ（Reservation Station for Execute）１５、データの浮動小数点演算用のＲＳＦ（Reservation Station for Execute）１６、および分岐命令用のＲＳＢＲ（Reservation Station for Branch）１７を含む。【００３６】
さらに、演算処理部１は、ＲＳＡ１４から送出される命令のアドレスを演算処理するオペランドアドレス生成器１８および１次データキャッシュメモリ１９と、ＲＳＥ１５から送出されるデータの固定小数点演算を実行するための演算器２０、固定小数点更新バッファ２１および固定小数点レジスタ２２と、ＲＳＦ１６から送出されるデータの浮動小数点演算を実行するための演算器２３、浮動小数点更新バッファ２４および浮動小数点レジスタ２５と、ＲＳＢＲ１７から送出される分岐命令の分岐判定を行う分岐予測機構１１とを有している。【００３７】
さらに、演算処理部１は、現在の複数のスレッドの命令をカウントするプログラムカウンタ（ＰＣ）２６と、次の複数のスレッドの命令をカウントする次のプログラムカウンタ（ＮＥＸＴ  ＰＣ）２７とを有している。【００３８】
図１のシングルスレッドプロセッサにより複数のスレッドを実行する場合、従来は、図２に示すように、クロックサイクル（時間軸（ｔ））ごとに１つのスレッドの命令を順番に実行していた。このシングルスレッドプロセッサは、まず、１次命令キャッシュメモリ１２からの命令を命令デコーダ１３に送出する。つぎに、デコード（Ｄ）サイクルでインオーダでデコードする。そして、命令デコーダ１３によりデコードされた全ての命令をコミットスタックエントリ（ＣＳＥ）２に登録し、これと同時にアウトオブオーダの命令実行制御を行う各々のＲＳに登録する。ＲＳのプライオリティ（Ｐ）サイクルで命令実行が可能となった命令を、バッファ（Ｂ）サイクルでレジスタ（例えば、固定小数点レジスタ２２や浮動小数点レジスタ２５）を読み出しアウトオブオーダで演算器２０、２３に投入して、演算実行（Ｘ）サイクルで演算実行する。【００３９】
この演算の実行結果は、レジスタ更新（Ｕ）サイクルで更新バッファ（例えば、固定小数点更新バッファ２１や浮動小数点更新バッファ２４）に格納されて命令完了（コミット処理）を待ち、ＣＳＥ２で演算実行完了、１次データキャッシュメモリ１９からのデータ転送完了、分岐予測機構１１からの分岐判定完了等の報告を受けてインオーダでコミット処理を行う。そして、レジスタ書き込み（Ｗ）サイクルで更新バッファからのレジスタへの書き込み、プログラムカウンタ（ＰＣ）および次のプログラムカウンタ（ＮＥＸＴ  ＰＣ）の更新等を行う。シングルスレッドプロセッサでは、通常、命令実行数等のイベントの発生状況や資源の使用頻度を動的に測定する機能を有するイベント測定（ＰＡ）回路３が設けられている。このイベント測定回路３は、シングルスレッドプロセッサの各部から送られたイベントの種類をソフトウェアで選択し、選択されたイベントをカウントして蓄積する。蓄積されたイベントは、測定終了後にソフトウェアで読み出され、イベントの組み合わせに基づいてプロセッサの性能評価に使うことができる。【００４０】
図３は、シングルスレッド方式のコミット制御部の構成を示すブロック図である。ここでは、図１の制御部４に含まれるコミット制御部４０の構成を簡略化して示す。
図３のコミット制御部４０では、１つのスレッドの命令がＣＳＥ２に登録される。さらに、図３のコミット制御部４０では、クロックサイクルごとにＣＳＥ２の先頭のエントリを示す解放エントリ選択回路４１と、クロックサイクルごとにＣＳＥ２の実行完了イベントのエントリを示す実行完了エントリ選択回路４６とが設けられている。さらに、図３のコミット制御部４０では、命令完了イベントを有するスレッドを選択する命令完了対象レジスタ選択回路（ＣＳＥウィンドウ選択回路４３）と、選択されたスレッドの命令完了イベントを登録する命令完了対象レジスタ（ＣＳＥウィンドウ４４）とが設けられている。ＲＳＡ１４、ＲＳＥ１５、ＲＳＦ１６およびＲＳＢＲ１７による演算を実行したときの実行結果（実行ブロック４７）は、実行完了報告ブロック４８から実行完了エントリ選択回路４６に通知される。【００４１】
従来のシングルスレッドプロセッサでは、１つのスレッドの命令がＣＳＥ２に登録され、かつ、クロックサイクルごとにＣＳＥ２の先頭のエントリを示すポインタ回路４２により選択されている１つのスレッドの命令完了候補が命令完了対象レジスタ（ＣＳＥウィンドウ４４）に登録されることによって、コミット処理が行われる。ＣＳＥ２に登録されているデータに関して、コミット処理が完了しているか否かを判別するための完了判別ブロック４５が設けられている。イベント測定（ＰＡ）回路３は、ＣＳＥウィンドウ４４から送出されるイベントを測定してＣＰＩの要因を求める。【００４２】
図４は、シングルスレッド方式のＣＰＩの要因を示す図である。プロセッサの性能指標の一つとして使用されるＣＰＩの値は実行命令数でサイクル数を割ることによって求められる。ＣＰＩの値をコミット処理の観点から見ると、同時クロックサイクルでの命令完了の数、例えば４命令同時コミット処理ができる場合、ＣＰＩは、命令完了なし（0end-op）、１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）の命令完了イベントの各々に対して測定されたサイクル数を実行命令数で割った値の積算結果となる。特に0end-opとなる場合は、インオーダのコミット処理において先頭命令（ＴＯＱ）のコミット処理ができなかったことを示す。この場合、後続の命令のコミット処理もできなくなるので、0end-opの測定とその要因の演算実行完了待ち（EU-comp-wait）、分岐判定完了待ち（BR-comp-wait）、キャッシュメモリからのデータ待ち（FCH-comp-wait）（いずれもcomp-waitに属する）、ＣＳＥに登録がない状態（CSE-empty）等を測定することは重要である。これらのＣＰＩの要因および0end-opの要因は、全て命令完了対象レジスタ（ＣＳＥウィンドウ４４）からイベントとして取得することが可能である。また、0end-opの要因は、必ずクロックサイクルごとに１つの要因に絞ってイベント取得がなされる。シングルスレッドプロセッサでは１つのスレッドしかないため、１つのスレッドの命令完了対象レジスタから送出されるイベントをイベント測定回路で測定して要因を積算することによって、ＣＰＩの要因の測定が可能である。【００４３】
図５は、一般のスーパースカラ・アウトオブオーダー処理を示す流れ図、図６は、同時マルチスレッディング方式を概念的に示す図、そして、図７は、同時マルチスレッディング方式による処理を示す流れ図である。【００４４】
図５のスーパースカラ・アウトオブオーダー処理においては、複数の命令フェッチサイクル１００、複数命令デコード（Ｄ）サイクル１０１、および複数命令のコミット（Ｗ）１０４が、インオーダで処理される。また一方で、複数命令デコード（Ｄ）サイクル１０１でデコードされた複数の命令が、アウトオブオーダで個別に実行される（複数の実行サイクル１０２−１、１０２−２、１０２−３および１０２−４）。この複数の実行サイクル１０２−１〜１０２−４を実行する際に、コミット待ち１０３−１、１０３−２および１０３−３が発生する。このコミット待ちの発生をできる限り少なくするために、同時に複数のスレッド（実行サイクル）を実行する機能を有する同時マルチスレッディング（ＳＭＴ）方式が採用されている。この同時マルチスレッディング方式では、２つ以上の複数のスレッドが同時に実行され、各々のスレッドのＣＳＥに命令が登録される。シングルスレッドのように１つまたは複数のスレッドに絞った命令完了対象レジスタ（ＣＳＥウィンドウ）に、クロックサイクルごとに交互に選択されたスレッドの命令完了候補のエントリをＣＳＥからコピーすることによって、コミット処理が行われ、各々のスレッドのイベント測定回路で性能測定が行われる。【００４５】
このＳＭＴ方式では、図６の時間軸（ｔ）と演算処理並列度（ＤＰ）との関係で示されるブロックＭＰから明らかなように、クロックサイクルごとに複数のスレッド（例えばスレッドＡ、スレッドＢ）が同時に実行される。【００４６】
さらに、図７のＳＭＴ方式による処理では、スレッドＡの命令フェッチサイクル１１０、デコードサイクル１１１、実行サイクル１１２およびコミットサイクル１１３と、スレッドＢの命令フェッチサイクル１２０、デコードサイクル１２１、実行サイクル１２２およびコミットサイクル１２３とが同時に実行される。ここで、同じスレッドのコミットは追い抜くことができないが、異なるスレッドのコミットは追い抜くことができる点に注意すべきである。【００４７】
図６および図７に示したようなＳＭＴ方式では、複数のスレッドがＣＳＥに登録されているが、命令完了対象レジスタには、スレッド選択回路によってクロックサイクルごとに選択された命令完了対象レジスタの命令完了候補のみ登録される。よって、命令完了対象レジスタは、選択されたスレッドのコミット処理のみを行う。そして、選択されたスレッドのイベントは、命令完了対象レジスタからイベント測定回路へ送出される。しかしながら、前述のように、選択されなかったスレッドからのイベント測定を行うことはできない。同時マルチスレッディング方式においても、スレッドごとのＣＰＩの分析を正確に行うために、全てのスレッドのイベントを同時に測定することが必要になる（第１の不都合な事態）。【００４８】
また一方で、上記のＳＭＴ方式では、複数のスレッドからなるコアにおいて、複数のスレッドを合わせたときのＣＰＩの分析を行うことが望まれる。この同時マルチスレッディング方式では、複数のスレッドを実行することにより、１つのスレッドだけで実行する場合よりもコアの使用効率を向上させることができるようになる。この場合、複数のスレッドからなるコアのＣＰＩ分析を行うためのイベント測定回路において、１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）は、スレッドごとに独立しているので正しく測定することができるが、命令完了なし（0end-op）は、１つに絞られた命令完了対象レジスタに登録されていないときも測定してしまう。それゆえに、このような測定方法では、コア内の複数のスレッドを合わせた処理のＣＰＩの分析を正確に行うことはできない。よって、同時マルチスレッディング方式においては、複数のスレッドからなるコアに関しても、全てのスレッドのＣＰＩの分析を正確に行うために、命令完了なし（0end-op）のイベント測定を正しく行うことが必要になる（第２の不都合な事態）。【００４９】
ついで、上記のような第１および第２の不都合な事態に対処するために考え出された本発明の実施例に係るＳＭＴ方式の演算処理装置の構成および動作を、添付図面（図８〜図２０）を参照しながら詳述する。【００５０】
図８は、ＳＭＴ方式のコミット制御部（スレッド測定）の構成を示すブロック図、図９は、コアの命令コミット数の見え方を示す図、そして、図１０は、各々のスレッドのＣＰＩの要因を示す図である。ここでは、後述の図１３の制御部４Ｍに含まれるコミット制御部４０ＭＳの構成を簡略化して示す。
図８のコミット制御部４０ＭＳの構成は、前述の図３のシングルスレッド方式のコミット制御部４０の構成と概ね同じである。【００５１】
ただし、図８のＳＭＴ方式のコミット制御部４０ＭＳでは、図３のシングルスレッド方式のコミット制御部４０の場合と異なり、ＣＳＥ２−１、２−２がスレッド（例えば、スレッド０、スレッド１）ごとに分離され、スレッド選択回路４９で選択されたスレッドの命令完了候補に対して、ＣＳＥウィンドウ４４にてコミット処理が行われる。ＣＳＥ２−１、２−２に登録された命令は、クロックサイクルごとにスレッド選択回路４９で選択されたスレッドの次にコミットされる命令完了候補の４命令がＣＳＥウィンドウ４３にコピーされる。完了判別ブロック４５におけるコミット処理の判断に関しては、実行が完了したか、先の命令がコミット処理済みか、または、同時にコミット処理可能であるかを判断して、ＣＳＥウィンドウでクロックサイクルごとに最大４命令同時にコミット処理が行われる（図９参照）。イベント測定（ＰＡ）回路３−１、３−２は、ＣＳＥウィンドウ４４から送出される選択されたスレッドに関するイベントを測定すると共に、ＣＳＥ２−１、２−２のいずれか一方から送出される選択されなかったスレッドに関するイベントも測定する。【００５２】
上記の第１の不都合な事態に対処するために、スレッド選択回路４９により選択されたスレッドは、ＣＳＥウィンドウ４４から命令完了なし（0end-op）、１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）のイベント測定を行い、選択されなかったスレッドは、命令完了なし（0end-op）として各々のスレッドのイベント測定回路３−１、３−２で測定するようにしている。これによって、選択されたスレッドに対しても、選択されなかったスレッドに対しても、同時に各々のスレッドのイベント測定回路３−１、３−２でイベントを測定することができる。【００５３】
また一方で、スレッド選択回路４９により選択されたスレッドに関しては、ＣＳＥウィンドウ４４に格納されている演算実行完了待ち（EU-comp-wait）、分岐判定完了待ち（BR-comp-wait）、およびキャッシュメモリからのデータ待ち（FCH-comp-wait）（いずれもcomp-waitに属する）のイベントをイベント測定回路３−１、３−２で測定して、0end-opの要因を測定する。選択されなかったスレッドに関しては、ＴＯＱのコミット処理ができなかったときのみその要因である演算実行完了待ち（EU-comp-wait）、分岐判定完了待ち（BR-comp-wait）、およびキャッシュメモリからのデータ待ち（FCH-comp-wait）のイベントを保持するTOQ-comp-waitレジスタを全スレッド分備えることによって、選択されなかったスレッドもTOQ-comp-waitレジスタから0end-opの要因をイベント測定回路３−１、３−２で測定することができる。0end-opの要因を全てのスレッドで同時にスレッドごとにイベント測定回路３−１、３−２で測定することが可能である。【００５４】
イベント測定回路３−１、３−２で得られるスレッドの実行命令数で、スレッドのＣＰＩの要因である命令完了なし（0end-op）、１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）の値のそれぞれを割った値を、それぞれのスレッドごとに積算することによって、図１０のようなＣＰＩのグラフが、スレッドごとに全てのスレッドで得られる。また、スレッドごとの各々の0end-opの要因である演算実行完了待ち（EU-comp-wait）、分岐判定完了待ち（BR-comp-wait）、キャッシュメモリからのデータ待ち（FCH-comp-wait）、そのスレッドが選択されていない状態（CSE-priority-wait）、ＣＳＥに登録がない状態（CSE-empty）等をスレッドの実行命令数で割った値をスレッドごとに積算することによって、全てのスレッドの0end-opのグラフが得られる。【００５５】
図１０の各々のスレッドに関するＣＰＩの要因の分析をさらに詳しく説明する。ＣＰＩは、命令完了なし（0end-op）、１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）がその構成要素になる。0end-opは、ＴＯＱのコミット処理ができなかったことを示し、1end-op、2end-op、3end-op、および4end-opは、それぞれ、ＴＯＱから１命令、２命令、３命令および４命令が同時にコミット処理されたことを示す。スレッド選択回路で選択されたスレッドは、ＣＳＥウィンドウから0end-op、1end-op、2end-op、3end-op、および4end-opのイベント測定をし、選択されなかったスレッドは、0end-opとして各々のスレッドのイベント測定回路で測定することによって、選択されたスレッドも、選択されなかったスレッドも同時に各スレッドのイベント測定回路でイベントを測定することができる。【００５６】
イベント測定回路で得られるスレッドの実行命令数で、スレッドのＣＰＩの要因0end-op、1end-op、2end-op、3end-op、および4end-opの値のそれぞれを割った値を、それぞれのスレッドごとに積算することによって、前述の図１０のようなＣＰＩのグラフが、スレッドごとに全てのスレッドで得られる。また一方で、スレッドごとの各々の0end-op要因EU-comp-wait、BR-comp-wait、FCH-comp-wait等をスレッドの実行命令数で割った値をスレッドごとに積算することで、全てのスレッドの0end-opのグラフが得られる。【００５７】
図１１は、ＳＭＴ方式のコミット制御部（コア測定）の構成を示すブロック図であり、図１２は、コアのＣＰＩの要因を示す図である。
図１１のコミット制御部４０ＭＣ（コア測定）の構成は、前述の図８のコミット制御部４０ＭＳ（スレッド測定）の構成と概ね同じである。【００５８】
ただし、図１１のＳＭＴ方式のコミット制御部４０ＭＣでは、図８のＳＭＴ方式のコミット制御部４０ＭＳの場合と異なり、ＣＳＥ２−３、２−３がスレッド（例えば、スレッド０、スレッド１）ごとに分離されているが、あくまでも１つのコア２−５として構成されている。ＣＳＥ２−３、２−４からなるコア２−５に登録された命令は、クロックサイクルごとにスレッド選択回路４９で選択されたスレッドの次にコミットされる命令完了候補の４命令がＣＳＥウィンドウ４４にコピーされる。完了判別ブロック４５におけるコミット処理の判断に関しては、実行が完了したか、先の命令がコミット処理済みか、または、同時にコミット処理可能であるかを判断して、ＣＳＥウィンドウでクロックサイクルごとに最大４命令同時にコミット処理が行われる。【００５９】
上記の第２の不都合な事態に対処するために、スレッド選択回路４９で１つのスレッドに絞って ＣＳＥウィンドウ４４に登録し、１つのスレッドに絞って選択されたスレッドのみのコミット処理を行う構成としたときに、ＣＳＥウィンドウ４４にて選択されたスレッドに対応するコミット処理のイベントを測定することで可能になる。例えば図９に示すように、全てのスレッドが命令コミットなしであるクロックサイクルは、コアの処理としても命令コミットなしであるが、１つのスレッドが命令コミットなしとなっているクロックサイクルで、他のスレッドが例えば４命令同時コミットであれば、コアの処理としては４命令同時コミットとなる。【００６０】
コアの１命令コミット、２命令同時コミット、３命令同時コミット、および４命令同時コミットに関しては、命令コミット処理は必ずＣＳＥウィンドウ４４上で行われるので、第１の不都合な事態の解決手段としてのスレッドごとの１命令同時完了（1end-op）、２命令同時完了（2end-op）、３命令同時完了（3end-op）、および４命令同時完了（4end-op）が得られれば、全てのスレッドを積算することで算出することができる。また一方で、コアの命令コミットなしに関しては、第１の不都合な事態の解決手段としてのスレッドごとの命令完了なし（0end-op）では、ＣＳＥウィンドウ４４に登録されないときにもイベント測定が行われているので、そのまま用いることができない。よって、新たにＣＳＥウィンドウ４４に登録されたときだけ命令コミットなしであることをイベントにて測定し、全てのスレッドを積算して算出する。この処理は、Core-0end-opと呼ばれる。【００６１】
また一方で、コアの命令コミットなしのときの詳細要因も同様に、第１の不都合な事態の解決手段としてのスレッドごとの EU-comp-wait、BR-comp-wait、FCH-comp-wait、およびCSE-emptyをそのまま用いることができず、新たにＣＳＥウィンドウに登録されたスレッドのみがイベント測定を行うようにして（図１１参照）、全てのスレッドの総和をとって算出する。これらの処理は、それぞれ、Core-EU-comp-wait、Core-BR-comp-wait、Core-FCH-comp-wait、およびCore-CSE-emptyと呼ばれる。これらのイベントを積算して、全てのスレッドの実行命令数の積算値で割ることによって、図１２のようにコアのＣＰＩのグラフが得られる。ここでは、前述の図９の場合と異なり、そのスレッドが選択されていない状態（CSE-priority-wait）は、Core-0end-opの要因として存在しない点に注意すべきである。【００６２】
図１２のコアに関するＣＰＩの要因の分析をさらに詳しく説明する。ここでは、Core-0end-opとCore-1end-op、Core-2end-op、Core-3end-op、およびCore-4end-opで分析したグラフと、Core-0end-opで分析したグラフが示されている。１つのＣＳＥウィンドウ４４にて選択されたスレッドのイベント測定回路でのみＣＳＥウィンドウ４４に登録されたＣＰＩの要因である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が測定される。【００６３】
イベント測定回路で得られる各々のスレッドの実行命令数を積算したもので、スレッドのＣＰＩの要因であるCore-0end-op、1end-op、2end-op、3end-op、および4end-opの値のそれぞれを割った値を、全ての要因に対して全てのスレッドで積算することによって、前述の図１２のようなコアのＣＰＩのグラフが得られる。また一方で、スレッドごとの各々のCore-0end-opの要因であるCore-EU-comp-wait、Core-BR-comp-wait、Core-FCH-comp-wait、およびCore-CSE-emptyを、全てのスレッドの実行命令数の積算値で割った値を積算することによって、コアのCore-0end-opのグラフが得られる。【００６４】
ここで、前述の図８のＳＭＴ方式のコミット制御部（スレッド測定）と、前述の図１１のＳＭＴ方式のコミット制御部（コア測定）とを１つの回路に実装することによって、全てのスレッドに対して同時に全てのイベントを測定することが可能になると共に、複数のスレッドからなるコアに対して命令が完了できなかった要因のイベントを測定することが可能になる。【００６５】
図１３は、本発明に係る同時マルチスレッディングプロセッサ（ＳＭＴ方式のプロセッサ）の全体的な構成を示すブロック図であり、図１４は、同時マルチスレッディング方式のパイプラインを示す図である。
図１３のＳＭＴ方式のプロセッサの構成は、前述の図１のシングルスレッド方式のプロセッサの構成と概ね同じである。【００６６】
ただし、図１３における２つのスレッドのＳＭＴ方式のプロセッサでは、図１のシングルスレッドプロセッサの場合と異なり、演算処理部１Ｍは、２つのスレッドに対して、ＣＳＥ２−１、２−２、固定小数点レジスタ２２−１、２２−２、固定小数点レジスタ２５−１、２５−２、プログラムカウンタ（ＰＣ）２６−１、２６−２、次のプログラムカウンタ（ＮＥＸＴ  ＰＣ）２７−１，２７−２、およびイベント測定（ＰＡ）回路３−１、３−２をスレッドごとに具備している。その他の資源（構成要素）は全てのスレッドに対して共通で利用するか、または、クロックサイクルごとに占有スレッドを切り替えて利用するようになっている。【００６７】
図１３のＳＭＴ方式のプロセッサにより同時に複数のスレッドを実行する場合、図１４に示すように、１次命令キャッシュメモリ１２からアドレスの命令を命令デコーダ１３に送出する。つぎに、同一スレッドの命令を最大４命令同時にインオーダでデコードする。そして、命令デコーダ１３によりデコードされた全ての命令を、コミット処理を行うＣＳＥ２−１、２−２にスレッドごとに登録し、これと同時にアウトオブオーダの命令実行制御を行うＲＳに登録する。ＲＳにて命令実行が可能となった命令をアウトオブオーダで演算器２０、２３に投入する。【００６８】
この演算の実行結果は、更新バッファ（例えば、固定小数点更新バッファ２１や浮動小数点更新バッファ２４）に格納される。ＣＳＥ２−１、２−２は、演算実行完了、１次データキャッシュメモリ１９からのデータ転送完了、分岐予測機構１１からの分岐判定完了等の報告を受けてインオーダで同一スレッドを最大４命令同時にコミット処理し、更新バッファからレジスタ（例えば、固定小数点レジスタ２２−１、２２−２や浮動小数点レジスタ２５−１、２５−２）に格納し、各々のスレッドのプログラムカウンタの更新等を行う。イベント測定を行うためのイベント測定回路３−１、３−２は、プロセッサの各部からのイベントを測定する回路であり、スレッドごとに２スレッド分持ち、スレッドごとに別々のイベントを測定することができる。【００６９】
図１４にＳＭＴ方式のパイプラインを示す。ＳＭＴ方式では、スレッドごとに時間軸（ｔ）で見た場合にシングルスレッドと同様の動作を行う。例えば、スレッド０のキャッシュミス（＄miss）が起こった場合、シングルスレッドでは後続の全ての命令のコミット処理が停止してしまう。しかしながら、ＳＭＴ方式ではスレッド１の命令のコミット処理ができるので、２つのスレッドを交互に利用することによってコミット処理部の動作率を高めることが可能になる。ここで、同一スレッドのコミット（ロード命令、演算命令）は追い抜くことができないが、異なるスレッドの実行やコミット処理は追い抜くことができる点に注意すべきである。【００７０】
図１５は、１つのスレッドの０end-op生成回路の一例を示す回路図である。ここでは、１つのスレッドの０end-op生成回路は、ＡＮＤ素子５０およびＯＲ素子５１からなる複数の論理素子により構成される。【００７１】
図１５の１つのスレッドの０end-op生成回路においては、ＣＳＥウィンドウのスレッド番号（Thread-ID）が０であって（すなわち、スレッド０にプライオリティが付与されており）、かつ、先頭命令が完了（TOQ-commit）できなかった場合、または、Thread-IDが１（すなわち、スレッド１にプライオリティが付与されている）でスレッド０が選択されていない場合に、スレッド０のコミット処理が完了できなかったことを示す0end-opイベントが生成される。このようにして生成された0end-opイベントは、スレッドごとのイベント測定回路で測定される。より具体的には、0end-opイベントの構成要素は、演算実行完了待ち（EU-comp-wait）、分岐判定完了待ち（BR-comp-wait）、キャッシュメモリからのデータ待ち（FCH-comp-wait）等の実行完了条件がそろっていない状態、そのスレッドが選択されていない状態（CSE-priority-wait）、またはＣＳＥに登録がない状態（CSE-empty）に分類することができる。【００７２】
図１６は、本発明のコミット制御部におけるイベント生成回路の構成を示すブロック図、図１７は、ＣＳＥウィンドウとTOQ-comp-waitとの関係を概念的に示す図、そして、図１８は、TOQ-comp-waitへのセットとリセットのタイミングを示すタイミングチャートである。図１６では、図８のコミット制御部に含まれるイベント生成回路の具体例が例示されている。【００７３】
図１６のイベント生成回路は、各々のスレッドに関して、複数の論理素子により構成される。例えば、スレッド０側のイベント生成回路は、２つのＡＮＤ素子５４−１、５５−１と、１つのＯＲ素子５６−１により構成される。ここで、一方のＡＮＤ素子５４−１は、スレッド０が選択されていないために命令が完了できなかったことを示すイベントを、スレッド番号４４Ｎを用いて検出する機能を有しており、他方のＡＮＤ素子５５−１は、スレッド０が選択されているにもかかわらず何らかの原因で命令が完了できなかったことを示すイベントを検出する機能を有している。また一方で、スレッド１側のイベント生成回路は、２つのＡＮＤ素子５４−２、５５−２と、１つのＯＲ素子５６−２により構成される。ここで、一方のＡＮＤ素子５５−２は、スレッド１が選択されていないために命令が完了できなかったことを示すイベントを、スレッド番号４４Ｎを用いて検出する機能を有しており、他方のＡＮＤ素子５４−２は、スレッド１が選択されているにもかかわらず何らかの原因で命令が完了できなかったことを示すイベントを検出する機能を有している。【００７４】
図１６のイベント生成回路において、各々の実行完了条件がそろっていない状態（comp-wait）は、各々のスレッドのイベント測定回路３−１、３−２にイベントを送ることによって測定することができる。ＣＳＥウィンドウ４４の先頭の命令が実行完了待ちでコミット処理ができなかった場合、先頭命令の実行完了待ちイベントであるEU-comp-wait、BR-comp-wait、またはFCH-comp-waitが、各々のスレッドのTOQ-comp-waitレジスタ５２、５３に格納され（図１７参照）、実行完了待ちがなくなるまで保持される。【００７５】
TOQ-comp-waitへのセットとリセットのタイミングを図１８のタイミングチャートに示す。図１８のタイミングチャートにおいて、１つ目および３つ目のクロックサイクルでは、スレッド０が選択されているときにスレッド０の実行完了条件がそろっていない状態（スレッド０のTOQ-comp-waitレジスタにフラグ１が立っているセット状態）にあることが示されている。また一方で、２つ目のクロックサイクルでは、スレッド１が選択されているためにスレッド０の実行完了条件がそろっていない状態（スレッド０のTOQ-comp-waitレジスタにフラグ１が立っているセット状態）にあることが示されている。【００７６】
さらに、４つ目のクロックサイクルでは、スレッド１が選択されているときにスレッド０の実行完了条件がそろっている状態（スレッド０のTOQ-comp-waitレジスタにフラグ０が立っているリセット状態）にあることが示されている。上記の１つ目〜４つ目のクロックサイクルでは、スレッド０において実行完了待ちの状態になっている。最終的に、５つ目のクロックサイクルでは、スレッド０が選択されているときにスレッド０の実行完了条件がそろっている状態になり、コミット処理が完了したことが示されている。【００７７】
図１９は、１つのスレッドのCSE-priority-wait生成回路の一例を示す回路図である。ここでは、１つのスレッドのCSE-priority-wait生成回路は、１つのＡＮＤ素子５７からなる論理素子により構成される。【００７８】
CSE-priority-waitは、実行完了待ちの状態（comp-wait）でもなく、ＣＳＥに登録がない状態（CSE-empty）でもないのに、スレッド選択回路で選択されなかったためにコミット処理ができないという要素である。本実施例では、図１９のようなCSE-priority-wait回路をイベント測定回路に実装することによって、スレッド０のCSE-priority-waitを生成することができる。ＣＳＥウィンドウのスレッド番号（Thread-ID）が１であって、かつ、実行完了待ちの状態（comp-wait thread0）でなく、さらに、ＣＳＥが空の状態（CSE-empty thread0）でないときに、スレッド０のpriority_wait thread0が測定される。ここで、CSE-emptyは、ＣＳＥの情報に基づいて測定することができる。【００７９】
図２０は、コアの０end-op生成回路の一例を示す回路図である。ここでは、コアの０end-op生成回路は、２つのＡＮＤ素子５８、５９からなる複数の論理素子により構成される。【００８０】
本実施例では、図２０のようなコアの０end-op生成回路をイベント測定回路に実装することによって、コアのスレッド０の０end-opを生成することができる。先頭命令のコミット処理が実行完了可能な状態（TOQ-comp）でなく、かつ、スレッド番号が０のときに、スレッド０のCore-0end-opが生成されて測定される。スレッド番号が１のときには、スレッド１のCore-0end-opが生成されて測定される。これらのイベントは、スレッドごとのイベント測定回路で測定される。
【図１】
2008155845.tif 000003
【図２】
2008155845.tif 000004
【図３】
2008155845.tif 000005
【図４】
2008155845.tif 000006
【図５】
2008155845.tif 000007
【図６】
2008155845.tif 000008
【図７】
2008155845.tif 000009
【図８】
2008155845.tif 000010
【図９】
2008155845.tif 000011
【図１０】
2008155845.tif 000012
【図１１】
2008155845.tif 000013
【図１２】
2008155845.tif 000014
【図１３】
2008155845.tif 000015
【図１４】
2008155845.tif 000016
【図１５】
2008155845.tif 000017
【図１６】
2008155845.tif 000018
【図１７】
2008155845.tif 000019
【図１８】
2008155845.tif 000020
【図１９】
2008155845.tif 000021
【図２０】
2008155845.tif 000022
【国際調査報告】
2008155845.tif 000023
2008155845.tif 000024
2008155845.tif 000025