(57)【要約】  動作周波数を変更可能な複数のプロセッサを備える場合に、そのプロセッサ毎のクロックサイクルカウント値を共通の経過時刻に補正して、性能分析などを容易に行い得るようにすること。  プロセッサＩＤを取得するプロセッサＩＤ取得部２１と、クロック周波数の変更を検知するクロック周波数変更検知部２４と、その変更後のクロック周波数を設定するクロック周波数設定部１２と、その変更時のクロックサイクルカウント値を取得するクロックサイクルカウント値取得部２２と、変更検知時のクロック周波数及びクロックサイクルカウント値をプロセッサＩＤに対応付けして保持するクロック周波数変更履歴保持部２６と、この変更履歴情報に基づいてプロセッサ毎の仮想時刻を導出するクロックサイクルカウント値補正部２５とを備えている。
2010038459.tif 000002
【特許請求の範囲】
【請求項１】
マルチプロセッサを構築するプロセッサ毎の動作周波数の変更を検知する変更検知手段と、
前記動作周波数を変更した前記プロセッサの識別情報を取得する変更プロセッサ識別情報取得手段と、
前記動作周波数の変更後の当該動作周波数を取得する動作周波数取得手段と、
前記動作周波数に基づいてカウントする前記プロセッサ毎のクロックサイクルカウンタの該動作周波数の変更時における変更時カウント値を取得する変更時カンウント値取得手段と、
取得した前記動作周波数及び前記変更時カウント値を該当プロセッサの識別情報に対応付けして履歴情報として保持する変更履歴保持手段と、
前記識別情報に対応付けされている前記動作周波数及び前記変更時カウント値の前記履歴情報に基づいて前記プロセッサ毎の仮想時刻を導出する時刻導出手段と
を備えることを特徴とするマルチプロセッサのカウント値補正装置。
【請求項２】
前記時刻導出手段は、前記プロセッサ毎の前記変更時カウント値を対応する前記動作周波数により補正して、前記動作周波数の変更前後で共通の一定速度で増進する仮想時刻を導出することを特徴とする請求項１記載のマルチプロセッサのカウント値補正装置。
【請求項３】
前記時刻導出手段は、前記履歴情報における前記動作周波数の変更前までの期間内に増加した前記変更時カウント値の増加分を対応する前記動作周波数により補正して積算した後に、前記動作周波数の最終の変更後から導出対象のカウント値までに増加した増加分を対応する前記動作周波数により補正して積算することにより、前記プロセッサ毎の導出対象のカウント値までの仮想時刻を導出することを特徴とする請求項１又は２記載のマルチプロセッサのカウント値補正装置。
【請求項４】
何れか一つを基準プロセッサとするとともに他の何れか一つを対応プロセッサとして、当該プロセッサ間で予め決められている順序でやり取りすることにより、前記基準プロセッサ及び前記対応プロセッサにおける所定の順序カウント値を取得する順序カウント値取得手段と、
少なくとも前記対応プロセッサの識別情報を取得する対応プロセッサ識別情報取得手段と、
前記基準プロセッサ用の前記クロックサイクルカウンタのカウント値に対する前記対応プロセッサ用の前記クロックサイクルカウンタのカウント値のずれをリセットするのに必要な同期補正値を前記順序カウント値に基づいて導出する補正値導出手段と、
前記基準プロセッサのカウント値に対する前記対応プロセッサのカウント値のずれをリセットする前記同期補正値を該対応プロセッサの識別情報に対応させて保持する補正値保持手段と
を備えることを特徴とする請求項１、２又は３記載のマルチプロセッサのカウント値補正装置。
【請求項５】
前記順序カウント値取得手段は、前記基準プロセッサの第１順序カウント値Ａを取得した後に、前記対応プロセッサへの要求に応答して返送されてきた第２順序カウント値Ｂを取得するのに続けて再度前記基準プロセッサの第３順序カウント値Ｃを取得する順序処理を実行し、この後に、前記基準プロセッサと前記対応プロセッサを逆転した前記順序処理を実行して逆転第１〜第３順序カウント値ａ、ｂ、ｃを取得し、
前記補正値導出手段は、次式を用いて前記同期補正値ｄを算出し、
ｄ＝（Ｃ−ｃ）／４＋（Ａ−ａ）／４−（Ｂ−ｂ）／２
前記補正値保持手段は、算出した前記同期補正値ｄを前記対応プロセッサの前記識別情報に対応させて保持することを特徴とする請求項４記載のマルチプロセッサのカウント値補正装置。
【請求項６】
上記請求項１乃至５の何れか一つに記載のマルチプロセッサのカウント値補正装置を備えることを特徴とするマルチプロセッサ。
【請求項７】
マルチプロセッサを構築するプロセッサ毎の動作周波数の変更の有無を監視して、該プロセッサの動作周波数の変更を検知したとき、前記動作周波数に基づいてカウントする前記プロセッサ毎のクロックサイクルカウンタの該動作周波数の変更時における変更時カウント値、及び、当該変更時における前記動作周波数を該プロセッサの識別情報と共に取得して該識別情報に対応付けして履歴情報として保持し、当該識別情報に対応付けされている前記動作周波数及び前記変更時カウント値の前記履歴情報に基づいて前記プロセッサ毎の仮想時刻を導出することを特徴とするマルチプロセッサのカウント値補正方法。
【請求項８】
前記プロセッサ毎の前記変更時カウント値を対応する前記動作周波数により補正して、前記動作周波数の変更前後で共通の一定速度で増進する仮想時刻を導出することを特徴とする請求項７記載のマルチプロセッサのカウント値補正方法。
【請求項９】
前記履歴情報における前記動作周波数の変更前までの期間内に増加した前記変更時カウント値の増加分を対応する前記動作周波数により補正して積算した後に、前記動作周波数の最終の変更後から導出対象のカウント値までに増加した増加分を対応する前記動作周波数により補正して積算することにより、前記プロセッサ毎の導出対象のカウント値までの仮想時刻を導出することを特徴とする請求項７又は８記載のマルチプロセッサのカウント値補正方法。
【請求項１０】
何れか一つを基準プロセッサとするとともに他の何れか一つを対応プロセッサとして、当該プロセッサ間で予め決められている順序でやり取りすることにより、前記基準プロセッサ及び前記対応プロセッサにおける所定の順序カウント値を取得するとともに、少なくとも前記対応プロセッサの識別情報を取得した後に、
当該順序カウント値に基づいて前記基準プロセッサ用の前記クロックサイクルカウンタのカウント値に対する前記対応プロセッサ用の前記クロックサイクルカウンタのカウント値のずれをリセットするのに必要な同期補正値を導出して、該同期補正値を該当対応プロセッサの識別情報に対応させて保持することを特徴とする請求項７、８又は９記載のマルチプロセッサのカウント値補正方法。
【請求項１１】
前記順序カウント値として、前記基準プロセッサの第１順序カウント値Ａを取得した後に、前記対応プロセッサへの要求に応答して返送されてきた第２順序カウント値Ｂを取得するのに続けて再度前記基準プロセッサの第３順序カウント値Ｃを取得する順序処理を実行し、この後に、前記基準プロセッサと前記対応プロセッサを逆転した前記順序処理を実行して逆転第１〜第３順序カウント値ａ、ｂ、ｃを取得した後に、
次式を用いて前記同期補正値ｄを算出し、
ｄ＝（Ｃ−ｃ）／４＋（Ａ−ａ）／４−（Ｂ−ｂ）／２
該同期補正値ｄを前記対応プロセッサの前記識別情報に対応させて保持することを特徴とする請求項１０記載のマルチプロセッサのカウント値補正方法。
【請求項１２】
マルチプロセッサを搭載するコンピュータに読み込ませることにより、必要な情報をメモリ内に保持させつつ何れかのプロセッサが実行するステップとして、
プロセッサ毎の動作周波数の変更の有無を監視して該動作周波数の変更を検知する変更検知ステップと、
前記動作周波数を変更した該当プロセッサの識別情報を取得する変更プロセッサ識別情報取得ステップと、
前記動作周波数の変更後の当該動作周波数を取得する動作周波数取得ステップと、
前記動作周波数に基づいてカウントする前記プロセッサ毎のクロックサイクルカウンタの該動作周波数の変更時における変更時カウント値を取得する変更時カンウント値取得ステップと、
取得した前記動作周波数及び前記変更時カウント値を該当プロセッサの識別情報に対応付けして履歴情報として保持する変更履歴保持ステップと、
前記識別情報に対応付けされている前記動作周波数及び前記変更時カウント値の前記履歴情報に基づいて前記プロセッサ毎の仮想時刻を導出する時刻導出ステップと
を有することを特徴とするマルチプロセッサのカウント値補正プログラム。
【請求項１３】
前記時刻導出ステップでは、前記プロセッサ毎の前記変更時カウント値を対応する前記動作周波数により補正して、前記動作周波数の変更前後で共通の一定速度で増進する仮想時刻を導出することを特徴とする請求項１２記載のマルチプロセッサのカウント値補正プログラム。
【請求項１４】
前記時刻導出ステップでは、前記履歴情報における前記動作周波数の変更前までの期間内に増加した前記変更時カウント値の増加分を対応する前記動作周波数により補正して積算した後に、前記動作周波数の最終の変更後から導出対象のカウント値までに増加した増加分を対応する前記動作周波数により補正して積算することにより、前記プロセッサ毎の導出対象のカウント値までの仮想時刻を導出することを特徴とする請求項１２又は１３記載のマルチプロセッサのカウント値補正プログラム。
【請求項１５】
何れか一つを基準プロセッサとするとともに他の何れか一つを対応プロセッサとして、当該プロセッサ間で予め決められている順序でやり取りすることにより、前記基準プロセッサ及び前記対応プロセッサにおける所定の順序カウント値を取得する順序カウント値取得ステップと、
少なくとも前記対応プロセッサの識別情報を取得する対応プロセッサ識別情報取得ステップと、
前記順序カウント値に基づいて前記基準プロセッサ用の前記クロックサイクルカウンタのカウント値に対する前記対応プロセッサ用の前記クロックサイクルカウンタのカウント値のずれをリセットするのに必要な同期補正値を導出する補正値導出ステップと、
前記基準プロセッサのカウント値に対する前記対応プロセッサのカウント値のずれをリセットする前記同期補正値を該対応プロセッサの識別情報に対応させて保持する補正値保持ステップと
を有することを特徴とする請求項１２、１３又は１４記載のマルチプロセッサのカウント値補正プログラム。
【請求項１６】
前記順序カウント値取得ステップでは、前記基準プロセッサの第１順序カウント値Ａを取得した後に、前記対応プロセッサへの要求に応答して返送されてきた第２順序カウント値Ｂを取得するのに続けて再度前記基準プロセッサの第３順序カウント値Ｃを取得する順序処理を実行し、この後に、前記基準プロセッサと前記対応プロセッサを逆転した前記順序処理を実行して逆転第１〜第３順序カウント値ａ、ｂ、ｃを取得し、
前記補正値導出ステップでは、次式を用いて前記同期補正値ｄを算出し、
ｄ＝（Ｃ−ｃ）／４＋（Ａ−ａ）／４−（Ｂ−ｂ）／２
前記補正値保持ステップでは、算出した前記同期補正値ｄを前記対応プロセッサの前記識別情報に対応させて保持することを特徴とする請求項１５記載のマルチプロセッサのカウント値補正プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、マルチプロセッサのカウント値補正装置等に係り、詳しくは、独立又は協働して駆動する複数のプロセッサ毎のクロックサイクルカウント値を、例えば、マルチプロセッサの駆動状況を分析などする際に、容易に利用することができるように補正するマルチプロセッサのカウント値補正装置等に関する。
【背景技術】
【０００２】
従来、コンピュータプログラムのデバックや性能分析や最適化などを行う際には、そのプログラムの実行状況を追跡することが行われており、典型的には、そのプログラム中に該当箇所の実行を検知する実行プログラムを、明示的に加入したり、あるいは、プロセッサのブレークポイント機構等を実装するなどして埋め込む。【０００３】
その実行プログラムでは、例えば、実行中のプログラムのアドレスや変数の値に相当するレジスタやメモリの情報などのトレースデータを生成して所定の記録領域に保存することにより追跡可能にする処理が行われる。また、性能分析や処理時間計測を行う場合には、例えば、該当のプローブを通過した時点の時刻をトレースデータとして記録することにより分析可能にするのが典型的な処理である。【０００４】
このときの時刻データとしては、タイマやリアルタイムクロックデバイスから取得した時刻情報や、プロセッサが備えるクロックサイクルカウンタのカウント値を用いるのが一般的である。そのなかでも、ルーチン毎の実行時刻をサンプリングによらずに直接計測するなどの精細な時刻情報を要する場合には、クロックサイクルカウンタが用いられることが多い。【０００５】
このような追跡処理や性能分析や処理時間計測などを、複数のプロセッサを備えているマルチプロセッサで行う場合には、バスを介して情報のやり取りをすると、そのバス経由で取得することによる時刻データの遅延が無視できない。また、通常のマルチプロセッサでは、マイクロ秒以下の精度をもつデバイスが搭載されている訳ではないので分解能も十分でない。【０００６】
このことから、マルチプロセッサでは、プロセッサ間を主従の関係で固定することなく、プロセッサ毎の時刻データを同期させる方式が特許文献１で提案されている。この文献１には、選択した一部のプロセッサ毎に全てのプロセッサに向けて自分の時刻データを送ることにより、受信した他のプロセッサからの時刻データと自身の時刻データの差分の平均値を算出して時刻データの補正を行うことが記載されている。【０００７】
また、特許文献２には、通信ラインに接続されているターミナル間の時計を共通になるように補正する技術が記載されている。特許文献３には、通信ネットワークを介して接続されている情報処理装置の内部時計を同期させる技術が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平０１−１１４９６４号公報
【特許文献２】特開平０７−１６０３５８号公報
【特許文献３】特開２０００−２８５０３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、近年のマルチプロセッサにあっては、プロセッサのクロック周波数（動作周波数）を一定のまま駆動させるとは限られず、例えば、消費電力の低減等のために、プロセッサ毎に、所定の契機に適宜、クロック周波数を変更して駆動するものもある。【００１０】
このため、トレースデータとしては、このようにプロセッサ毎のクロック周波数が変更された時刻データであるクロックサイクルカウント値をそのまま記録したとしても、クロック周波数が異なればそのカウントレートが異なることから、例えば、追跡処理や性能分析や処理時間計測を行う際にそのまま利用することはできない。【００１１】
ところで、ルーチン１個の大きさは、ループの有無などにもよるが、小さい場合には１００命令にも満たない場合もあり、このような場合には、数百ＭＨｚ〜数ＧＨｚで動作するプロセッサでの実行時間は１マイクロ秒以下になり得る。【００１２】
その一方で、クロックサイクルカウンタは、プロセッサのクロックが進む都度増加するように動作するため、上記のような高精細な用途でも満足する分解能を備えている。また、クロックサイクルカウンタは、プロセッサのレジスタ等からカウント値を直接読み出すことから、読み出しに掛かる遅延としてもバス経由で接続されたデバイスよりは相当に小さい。例えば、インテル社製のＩＡ−３２アーキテクチャのプロセッサでは、クロックサイクルカウンタがタイムスタンプカウンタレジスタを読み出す命令（ＲＤＴＳＣ：Read Time Stamp Counter）を用いてその値を取得することができ、その読出時の遅延は数十サイクル程度である。【００１３】
そして、マルチプロセッサの場合には、通常、プロセッサ毎にクロックサイクルカウンタが用意されていることから、プロセッサの時刻カウンタとして、これを利用することが時刻データを共通化させるのには好ましい。【００１４】
しかるに、マルチプロセッサは、プロセッサが異なればそのカウンタの値も最初からずれている可能性もある。特に、マルチプロセッサが電源管理機能を搭載して消費電力や処理量の傾向に応じてプロセッサ毎の動作速度をクロック周波数の変更により変化させる場合には、同一マシン内であっても各々のクロック周波数で駆動しているときもある。【００１５】
このことから、マルチプロセッサでは、例えば、性能を拡大するために複数プロセッサを利用する等の目的でマルチスレッド化したアプリケーションプログラムを実行処理する場合には、その複数のプロセッサに跨って並行処理する。この場合には、その実行処理を行うプロセッサによって参照時計の時刻の進み方が異なることになるため、正確な計測が行えないことになる。また、ＯＳ（Operating System）のカーネルなどように並行処理を実行するプログラムの場合には、特定機能だけ処理が遅延するようなボトルネックがあるとシステム全体の性能が落ちる。【００１６】
すなわち、このようなプログラムでは、デバックや性能分析や最適化を行う際に、マルチプロセッサにおけるプロセッサ毎に、クロックサイクルカウンタにより計測する経過時刻を共通化することが必要である。【００１７】
この発明は、上述の事情に鑑みてなされたもので、マルチプロセッサがプロセッサ毎に動作周波数を変更可能な機能を備える場合に、そのプロセッサ毎のクロックサイクルカウント値を共通の経過時刻に補正して、追跡処理や性能分析や最適化処理などを容易に行い得るようにすることのできるマルチプロセッサのカウント値補正装置等を提供することを目的とする。
【課題を解決するための手段】
【００１８】
上記課題を解決するために、この発明の第１の構成は、マルチプロセッサのカウント値補正装置に係り、マルチプロセッサを構築するプロセッサ毎の動作周波数の変更を検知する変更検知手段と、前記動作周波数を変更した前記プロセッサの識別情報を取得する変更プロセッサ識別情報取得手段と、前記動作周波数の変更後の当該動作周波数を取得する動作周波数取得手段と、前記動作周波数に基づいてカウントする前記プロセッサ毎のクロックサイクルカウンタの該動作周波数の変更時における変更時カウント値を取得する変更時カンウント値取得手段と、取得した前記動作周波数及び前記変更時カウント値を該当プロセッサの識別情報に対応付けして履歴情報として保持する変更履歴保持手段と、前記識別情報に対応付けされている前記動作周波数及び前記変更時カウント値の前記履歴情報に基づいて前記プロセッサ毎の仮想時刻を導出する時刻導出手段とを備えることを特徴としている。【００１９】
また、この発明の第２の構成は、マルチプロセッサのカウント値補正方法に係り、マルチプロセッサを構築するプロセッサ毎の動作周波数の変更の有無を監視して、該プロセッサの動作周波数の変更を検知したとき、前記動作周波数に基づいてカウントする前記プロセッサ毎のクロックサイクルカウンタの該動作周波数の変更時における変更時カウント値、及び、当該変更時における前記動作周波数を該プロセッサの識別情報と共に取得して該識別情報に対応付けして履歴情報として保持し、当該識別情報に対応付けされている前記動作周波数及び前記変更時カウント値の前記履歴情報に基づいて前記プロセッサ毎の仮想時刻を導出することを特徴としている。【００２０】
また、この発明の第３の構成は、マルチプロセッサのカウント値補正プログラムに係り、マルチプロセッサを搭載するコンピュータに読み込ませることにより、必要な情報をメモリ内に保持させつつ何れかのプロセッサが実行するステップとして、プロセッサ毎の動作周波数の変更の有無を監視して該動作周波数の変更を検知する変更検知ステップと、前記動作周波数を変更した該当プロセッサの識別情報を取得する変更プロセッサ識別情報取得ステップと、前記動作周波数の変更後の当該動作周波数を取得する動作周波数取得ステップと、前記動作周波数に基づいてカウントする前記プロセッサ毎のクロックサイクルカウンタの該動作周波数の変更時における変更時カウント値を取得する変更時カンウント値取得ステップと、取得した前記動作周波数及び前記変更時カウント値を該当プロセッサの識別情報に対応付けして履歴情報として保持する変更履歴保持ステップと、前記識別情報に対応付けされている前記動作周波数及び前記変更時カウント値の前記履歴情報に基づいて前記プロセッサ毎の仮想時刻を導出する時刻導出ステップとを有することを特徴としている。
【発明の効果】
【００２１】
この発明の構成によれば、変更した動作周波数と共にその変更時のクロックサイクルカウント値を履歴情報としてプロセッサ毎に保持して、適宜、その履歴情報から仮想時刻を導出するので、分析等を行うプロセッサ毎のクロックサイクルカウント値を仮想時刻にして共通化することができる。したがって、マルチプロセッサにおけるプロセッサ毎のクロックサイクルカウント値を動作周波数の変更による影響のない仮想時刻にして、その仮想時刻を基準にして所望の分析等の処理を容易かつ効率よく行うことができる。
【図面の簡単な説明】
【００２２】
【図１】この発明の一実施形態に係るマルチプロセッサの電気的構成を概略示すブロック図である。
【図２】同実施形態で使用されるクロックサイクルカウント値を説明するグラフである。
【図３】同実施形態のマルチプロセッサの動作処理手順を示すフローチャートである。
【図４】同実施形態のマルチプロセッサの動作周波数とクロックサイクルカウント値の取得処理手順を示すフローチャートである。
【図５】同実施形態のマルチプロセッサの動作周波数とクロックサイクルカウント値の取得結果を示す概念図である。
【図６】同実施形態のマルチプロセッサのクロックサイクルカウント値の補正処理手順を示すフローチャートである。
【図７】同実施形態のマルチプロセッサのクロックサイクルカウント値の補正処理手順を示す図６に続くフローチャートである。
【図８】同実施形態に付加させることのできる装置に係るマルチプロセッサの電気的構成を概略示すブロック図である。
【図９】同装置で使用されるクロックサイクルカウント値とその処理結果を示す概念図である。
【図１０】同装置における基準プロセッサとしてのクロックサイクルカウント値の同期処理手順を示すフローチャートである。
【図１１】同装置における応答プロセッサとしてのクロックサイクルカウント値の同期処理手順を示すフローチャートである。
【図１２】同装置のマルチプロセッサの動作処理手順を示すフローチャートである。
【発明を実施するための形態】
【００２３】
動作周波数を変更可能なプロセッサを複数備えるマルチプロセッサが、プロセッサ毎の動作周波数の変更を検知する変更検知手段と、前記動作周波数を変更した前記プロセッサの識別情報を取得する変更プロセッサ識別情報取得手段と、前記動作周波数の変更後の当該動作周波数を取得する動作周波数取得手段と、前記動作周波数に基づいてカウントする前記プロセッサ毎のクロックサイクルカウンタの該動作周波数の変更時における変更時カウント値を取得する変更時カンウント値取得手段と、取得した前記動作周波数及び前記変更時カウント値を該当プロセッサの識別情報に対応付けして履歴情報として保持する変更履歴保持手段と、前記識別情報に対応付けされている前記動作周波数及び前記変更時カウント値の前記履歴情報に基づいて前記プロセッサ毎の仮想時刻を導出する時刻導出手段とを備えており、前記時刻導出手段は、前記プロセッサ毎の前記変更時カウント値を対応する前記動作周波数により補正して、前記動作周波数の変更前後で共通の一定速度で増進する仮想時刻を導出するように構成されている。
【００２４】
以下、この発明の最良の実施形態を図面に基づいて説明する。
【実施形態】
【００２５】
図１〜図７は、この発明に係るマルチプロセッサのカウント値補正プログラムをコンピュータに読み込ませて実行することによりマルチプロセッサのカウント値補正方法を実施する、マルチプロセッサのカウント値補正装置を搭載するマルチプロセッサの一実施形態を示す図である。図１はそのマルチプロセッサのカウント値補正装置の概略全体構成を示す概念構成図、図２はそのマルチプロセッサでプロセッサ毎に動作周波数を変更する場合のクロックサイクルカウント値を説明するグラフ、図３はそのマルチプロセッサが実行するプログラム中におけるプロセッサ毎のクロックサイクルカウント値の取得を説明するプローチャート、図４はそのマルチプロセッサのプロセッサが変更する動作周波数とその時のクロックサイクルカウント値の取得を説明するプローチャート、図５はその変更時の動作周波数とクロックサイクルカウント値の取得・保持を説明する概念図、図６及び図７はその異なる動作周波数でカウントされているクロックサイクルカウント値の補正処理を説明するフローチャートである。
【００２６】
図１において、マルチプロセッサ１００は、第１〜第ｎプロセッサ１０１〜１０ｎ（ｎは２以上の自然数）が、処理プログラム等を予め格納するＲＯＭ（Read Only Memory）１１１と、ワークエリアとして利用可能なＲＡＭ（Random Access Memory）１１２と共にバス１１３に共通接続されてコンピュータ内に搭載されている。この第１〜第ｎプロセッサ１０１〜１０ｎは、それぞれがプロセッサＩＤ保持部１１で保持するプロセッサＩＤ（identifier：識別情報）に基づいて互いに識別しつつ、個々の役割を単独で処理する、あるいは、それぞれに分担されている役割を並行処理して協働するマルチプロセッサとして機能するように構築されている。
【００２７】
この第１〜第ｎプロセッサ１０１〜１０ｎは、それぞれクロック周波数設定部１２内に予め設定されているクロック周波数（動作周波数）に応じた速度で同期を取りつつ駆動するように構築されており、そのクロック周波数に応じた速度のクロックサイクルカウント値をクロックサイクルカウント値保持部１３で計数・保持することにより同期を取る。すなわち、第１〜第ｎプロセッサ１０１〜１０ｎは、クロックサイクルカウント値保持部１３を内蔵することにより、バス１１３を介すことなく（遅延させることなく）直接そのクロックサイクルカウント値を取得することができる。このため、例えば、１００命令にも満たないルーチンを実行するような１マイクロ秒以下の実行時間を計数する高精細な用途でも満足する分解能を備えることができる。
【００２８】
さらに、第１〜第ｎプロセッサ１０１〜１０ｎは、消費電力の削減等を実現するために、ＲＯＭ１１１内の処理プログラムに基づくコンピュータ本体（第１〜第ｎプロセッサ１０１〜１０ｎ自身）からの指示・命令に応じて、駆動速度となるクロック周波数をそれぞれのクロック周波数設定部１２内に個別に変更・設定することができる。ここで、この実施形態では、ＲＯＭ１１１内に格納するプログラム自体をプログラム１１１と称して簡単に説明する。
【００２９】
例えば、図２に示すように、第１プロセッサ１０１は、１００ＭＨｚ、５０ＭＨｚ、１５０ＭＨｚと順次にクロック周波数を変更・設定（更新）して駆動している。これに対して、第２プロセッサ１０２は、２５ＭＨｚ、１００ＭＨｚ、１５０ＭＨｚと順次にクロック周波数を変更・設定して駆動している。この場合には、同一のタイミングＴ１であるのにも拘わらずに、第１プロセッサ１０１のクロックサイクルカウント値が１５０Ｍサイクル（Ｃ１）であるのに対して第２プロセッサ１０２のクロックサイクルカウント値は５０Ｍサイクル（Ｃ２）である。また、クロックサイクルカウント値として１５０Ｍサイクル（Ｃ１）を計数するのは、第１プロセッサ１０１がタイミングＴ１であるのに対して第２プロセッサ１０２がタイミングＴ２と異なるタイミングになる。
【００３０】
このことから、マルチプロセッサ１００は、第１〜第ｎプロセッサ１０１〜１０ｎ毎のクロックサイクルカウント値を、例えば、クロック周波数の変更に影響されることのないリアルタイムと同一速度で増進する経過時刻に補正した仮想時刻を導出することにより共通化する機能を備えている。これにより、マルチプロセッサ１００は、第１〜第ｎプロセッサ１０１〜１０ｎ毎に異なるクロック周波数でクロックサイクルカウント値がカウントされるために、ソフトウェアのデバックや性能分析や最適化などの処理を複雑化させることなく、その補正後の仮想時刻を単純利用する容易な処理を実現することができる。なお、この仮想時刻としては、一定速度に限るものではなく、例えば、第１プロセッサ１０１のクロックサイクルカウント値を基準にして共通に進行する経過時刻に補正してもよいが、現実の時間経過に補正するのが簡易であることから、後述するように本実施形態のように補正処理を行うのが好ましい。
【００３１】
具体的には、マルチプロセッサ１００は、第１〜第ｎプロセッサ１０１〜１０ｎが電源管理イベント等で実行するクロック周波数の変更を検知して、その時点でのクロックサイクルカウント値と変更後のクロック周波数を記録保持しておく。そして、このマルチプロセッサ１００は、その保持するクロックサイクルカウント値を第１〜第ｎプロセッサ１０１〜１０ｎ間で共通化する補正を行って積算することにより仮想時刻を算出（導出）することができる。例えば、図２に示す第１プロセッサ１０１では、０〜１００Ｍサイクルの間では１００ＭＨｚ（サイクル／秒）で動作していたので、一般的な現実の経過時刻としては、１００Ｍサイクル／１００ＭＨｚ＝１．０秒となって１．０秒だけ経過していることになる。同様に、１００〜１５０Ｍサイクルの間では、５０ＭＨｚで動作していたので、（１５０−１００）／５０＝１．０となって１．０秒経過していることになる。さらに、１５０〜３００Ｍサイクルの間では、１５０ＭＨｚで動作していたので、（３００−１５０）／１５０＝１．０となって１．０秒経過していることになる。このため、この場合には、これらを積算して合計で３．０秒経過していることなる。すなわち、マルチプロセッサ１００は、この補正処理を第１〜第ｎプロセッサ１０１〜１０ｎ毎のクロックサイクルカウント値にも同様に施して仮想時刻を算出することにより、クロックサイクルカウント値に対応する各種トレースデータの履歴を一般化・共通化して計測・分析などを容易化することができる。
【００３２】
例えば、マルチプロセッサ１００は、第１〜第ｎプロセッサ１０１〜１０ｎがプログラム１１１内に格納する性能計測用のソフトウェアの実行プローブ１１１ａを呼び出して実行する際に、そのクロックサイクルカウント値を共通化する補正処理を行って仮想時刻を導出する。すなわち、実行プローブ１１１ａの実行では、第１〜第ｎプロセッサ１０１〜１０ｎがクロックサイクルカウント値などのトレース用データを集めてＲＡＭ１１２内に確保されているトレースデータ蓄積部１１２ａ内に書き込んで蓄積保持することによって性能計測を行う。このときの実行プローブ１１１ａの実行では、その性能計測のソフトウェアをターゲットプログラムとして、第１〜第ｎプロセッサ１０１〜１０ｎが収集したトレース用データを仮想時刻に補正することにより、その性能計測を効率よく、また容易に行うことができる。
【００３３】
詳細には、マルチプロセッサ１００は、第１〜第ｎプロセッサ１０１〜１０ｎがＲＡＭ１１２を利用しつつ実行プローブ１１１ａを実行することにより、プロセッサＩＤ取得部２１、クロックサイクルカウント値取得部２２、クロック周波数変更部２３、クロック周波数変更検知部２４、及び、クロックサイクルカウント値補正部２５として機能するように構成されている。また、このマルチプロセッサ１００は、そのＲＡＭ１１２がクロック周波数変更履歴保持部２６として機能するように構成されている。
【００３４】
プロセッサＩＤ取得部２１は、所定の契機における指示・命令に基づいて、例えば、ターゲットプログラムの性能計測の実行時に、第１〜第ｎプロセッサ１０１〜１０ｎ毎のプロセッサＩＤ保持部１１からプロセッサＩＤをそれぞれ取り出して取得する。すなわち、このプロセッサＩＤ取得部２１がクロック周波数を変更したプロセッサのＩＤを取得する変更プロセッサ識別情報取得手段を構成する。
【００３５】
クロックサイクルカウント値取得部２２は、同様に、所定の契機における指示・命令に基づいて、例えば、第１〜第ｎプロセッサ１０１〜１０ｎにおけるクロック周波数の変更が後述のクロック周波数変更検知部２４により確認（検知）されたときに、その第１〜第ｎプロセッサ１０１〜１０ｎ毎のクロックサイクルカウント値保持部１３が計数保持するクロックサイクルカウント値を取り出して取得する。すなわち、このクロックサイクルカウント値取得部２２がクロック周波数（動作周波数）の変更を検知したときにクロックサイクルカウント値（変更時カウント値）を取得する変更時カンウント値取得手段を構成する。
【００３６】
クロック周波数変更部２３は、電源管理機構等からの指示などの所定の契機に応じて、第１〜第ｎプロセッサ１０１〜１０ｎ毎のクロック周波数設定部１２内に設定されているクロック周波数を変更して更新させる。
【００３７】
クロック周波数変更検知部２４は、第１〜第ｎプロセッサ１０１〜１０ｎ毎のクロック周波数設定部１２内に設定されているクロック周波数を参照・取得してその設定更新（クロック周波数変更部２３によるクロック周波数の書換）の有無を確認しクロック周波数の変更を検知する。すなわち、このクロック周波数変更検知部２４が変更後のクロック周波数（動作周波数）を取得する動作周波数取得手段を構成するとともに、クロック周波数（動作周波数）の変更を検知する変更検知手段も構成する。
【００３８】
クロック周波数変更履歴保持部２６は、クロック周波数変更検知部２４がクロック周波数の変更を検知したときに、取得するその変更後のクロック周波数と共に、クロックサイクルカウント値取得部２２が取得するクロックサイクルカウント値を該当する第１〜第ｎプロセッサ１０１〜１０ｎのプロセッサＩＤ毎に対応付けして変更履歴として記憶保持する。すなわち、このクロック周波数変更履歴保持部２６がクロック周波数の変更を検知したときのクロック周波数とクロックサイクルカウント値（変更時カウント値）をその変更毎に履歴情報として保持する変更履歴保持手段を構成する。
【００３９】
クロックサイクルカウント値補正部２５は、クロック周波数変更履歴保持部２６が蓄積保持する変更履歴情報（変更後のクロック周波数と変更時のクロックサイクルカウント値）から一定速度で増進する共通の仮想時刻を算出して、例えば、性能計測の実行処理に利用可能にＲＡＭ１１２内に一時的に記録保持する。すなわち、クロックサイクルカウント値補正部２５がクロック周波数や変更時カウント値の履歴情報に基づいて仮想時刻を導出する時刻導出手段を構成する。
【００４０】
これにより、マルチプロセッサ１００は、例えば、性能計測を実行する第１〜第ｎプロセッサ１０１〜１０ｎ毎に、変更後のクロック周波数と変更時のクロックサイクルカウント値をそのプロセッサＩＤ毎に対応付けして変更履歴情報として蓄積保持することができる。そして、第１〜第ｎプロセッサ１０１〜１０ｎ毎のクロックサイクルカウント値は、その変更履歴情報に基づいて、例えば、現実の時間経過と同一の一定速度で増進する仮想時刻に補正して共通化した後に性能計測に利用することができる。
【００４１】
次に、ターゲットプログラムの実行時の性能計測を図３、図４、図６、図７に示すフローチャートと図５に示す変更履歴情報の概念図を用いて説明する。
【００４２】
例えば、第１プロセッサ１０１が他の第２〜第ｎプロセッサ１０２〜１０ｎを協働させて実行処理するターゲットプログラムの性能計測を行う場合には、図３のフローチャートに従う処理が実行される。まずは、そのターゲットプログラムの実行途中に繰り返し、実行プローブ１１１ａにプログラム制御が移行する（ステップＳ１１）。この実行プローブ１１１ａによるプログラム制御では、クロック周波数の補正による仮想時刻の導出処理以外の性能計測に必要なトレースデータの収集・記録などを実行する（ステップＳ１２）。次いで、第１〜第ｎプロセッサ１０１〜１０ｎ毎に、プロセッサＩＤ取得部２１がプロセッサＩＤ保持部１１からプロセッサＩＤを取得するとともに（ステップＳ１３）、クロックサイクルカウント値取得部２２がクロックサイクルカウント値保持部１３からクロックサイクルカウント値を取得する（ステップＳ１４）。この後に、実行プローブ１１１ａは、その取得したクロックサイクルカウント値をプロセッサＩＤに対応付けしてトレースデータとしてトレースデータ蓄積部１１２ａ内に記憶保持させた後に（ステップＳ１５）、性能計測対象のターゲットプログラムにプログラム制御を移行してこの実行プログラムを終了する（ステップＳ１６）。ここで、以下では、実行プローブ１１１ａのプログラム制御を単に実行プローブ１１１ａと簡略化して説明する。
【００４３】
このとき、実行プローブ１１１ａは、第１〜第ｎプロセッサ１０１〜１０ｎが並行処理するその実行プログラム中には、図４のフローチャートに従う処理を実行する。まずは、第１〜第ｎプロセッサ１０１〜１０ｎ毎に、クロック周波数変更検知部２４がクロック周波数設定部１２に設定されているクロック周波数を参照することにより、先に取得したクロック周波数と比較してそのクロック周波数が変更されているか否かを、そのターゲットプログラムの実行途中に繰り返し確認する（ステップＳ２１）。そのクロック周波数の変更を検知できない場合には、そのままこの処理を終了して、実行プログラムによる性能計測対象のターゲットプログラムに戻る。一方、そのクロック周波数の変更を検知すると、プロセッサＩＤ取得部２１が該当プロセッサのプロセッサＩＤ保持部１１からプロセッサＩＤを取り出して取得する（ステップＳ２２）。次いで、クロックサイクルカウント値取得部２２がその該当プロセッサのクロックサイクルカウント値保持部１３に保持されているクロックサイクルカウント値を取り出して取得する（ステップＳ２３）。同時に、クロック周波数変更検知部２４がその該当プロセッサのクロック周波数設定部１２に設定されている変更後のクロック周波数を改めて取得する（ステップＳ２４）。この後に、クロック周波数変更履歴保持部２６が取得したクロック周波数とクロックサイクルカウント値をプロセッサＩＤに対応付けして変更履歴として先の変更履歴情報の末尾に追記して記憶保持した後に（ステップＳ２９）、この処理を終了して、実行プログラムによる性能計測対象のターゲットプログラムに戻る。
【００４４】
例えば、図２に示す第１、第２プロセッサ１０１、１０２のクロック周波数の変更履歴としては、図５に示すように、そのプロセッサＩＤ毎にクロックサイクルカウント値（CC）とクロック周波数（frequency）とがそれぞれ対応付けされてクロック周波数変更履歴保持部２６内に記憶保持される。
【００４５】
ここで、クロック周波数の変更を記録する処理としては、上述のように、実行プローブ１１１ａ内に構成する場合を一例として説明しているが、これに限らず、次のように構成することもできる。まず、実行プローブ及びターゲットプログラムとは別に、クロック周波数変更履歴を書き込むプログラムを、クロック周波数変更検知部２４の一部として用意しておく。次に、電源管理イベント等に起因する割り込みを契機として、クロック周波数変更検知部２４は、割り込まれたプロセッサのクロック周波数が変更されているか否か検査する。そのクロック周波数が変更されている場合には、上述の手順でクロック周波数変更履歴保持部２６へ該当プロセッサの変更履歴を書き込む。その書き込みが終わった後に、割り込み処理ルーチンを終了させて、通常のプログラムの実行に処理を戻す。このような構成を採用することにより、ターゲットプログラム及び実行プローブとは独立に、クロック周波数変更履歴の蓄積処理を実装することができる。
【００４６】
そして、ターゲットプログラムを実行処理するときの性能計測の分析を行う場合には、第１〜第ｎプロセッサ１０１〜１０ｎが単独又は協働して、その性能計測（分析）を効率よく、また、容易に行うために、実行プローブ１１１ａがトレースデータ蓄積部１１２ａ内にトレースデータとして記憶保持するクロックサイクルカウント値を補正して第１〜第ｎプロセッサ１０１〜１０ｎ間で共通の経過時刻となる仮想時刻を算出する導出処理を開始する。
【００４７】
例えば、実行プローブ１１１ａは、図６及び図７のフローチャートに従う処理を実行する。まずは、ＲＡＭ１１２内に準備する変数ｍをリセット（ｍ＝０）した後に（ステップＳ３１）、その変数ｍをインクリメント（ｍ＝ｍ＋１）して（ステップＳ３２）、トレースデータ蓄積部１１２ａ内にそのｍ番目のトレースデータが記憶保持されているか否かを確認する（ステップＳ３３）。
【００４８】
この当初のステップＳ３３では、性能計測分析の開始時には、少なくとも１つ以上のトレースデータが存在する。このことから、続けて、そのトレースデータ蓄積部１１２ａ内の最初のトレースデータのクロックサイクルカウント値とこれに対応付けされているプロセッサＩＤとを読み出してＲＡＭ１１２内に記憶保持する（ステップＳ３４）。
【００４９】
次いで、そのＲＡＭ１１２内に記憶保持されたトレースデータのプロセッサＩＤを確認・特定して（ステップＳ３５）、クロック周波数変更履歴保持部２６内に履歴情報としてそのプロセッサＩＤに対応付けされている未処理のうちで最も時刻の古いクロック周波数とクロックサイクルカウント値の最先変更履歴エントリを読み出してＲＡＭ１１２内に記憶保持する（ステップＳ３６）。
【００５０】
この後には、そのＲＡＭ１１２内に変更履歴エントリが記憶保持されたか否かを確認して（ステップＳ３７）、クロック周波数が変更されていないために変更履歴エントリを確認できない場合には、後述するように、そのままこの性能計測分析における終了処理を実行する。
【００５１】
一方、このステップＳ３７において、クロック周波数が少なくとも１回以上変更されていて変更履歴エントリを確認できた場合には、ＲＡＭ１１２内に保持する最先の変更履歴エントリのクロックサイクルカウント値（以下では、変更履歴カウント値ともいう）と、トレースデータのクロックサイクルカウント値（以下では、トレースデータカウント値ともいう）とを比較する（ステップＳ４１）。すなわち、ここでは、最も時刻の古い最初の変更履歴カウント値とトレースデータカウント値とを比較する（ステップＳ４１）。
【００５２】
このステップＳ４１において、最先の変更履歴カウント値がトレースデータカウント値よりも大きい場合には、そのトレースデータカウント値の取得時にはクロック周波数が変更されていないことから、後述するように、そのまま性能計測分析におけるこのトレースデータカウント値についての終了処理を実行する。
【００５３】
一方、このステップＳ４１において、最先の変更履歴カウント値がトレースデータカウント値よりも小さい場合には、そのトレースデータカウント値の取得前にクロック周波数が変更されていることから、続けて、その最先の変更履歴カウント値から変更前の変更履歴カウント値を減算する（ステップＳ４２）。すなわち、ここでは、最先の変更履歴カウント値から存在しない変更前の変更履歴カウント値なしを減算して増加分を算出する（ステップＳ４２）。この後には、その増加分の増加カウント値を変更前の、言い換えると、変更されていないクロック周波数、すなわち、予めクロック周波数設定部１２に設定されているデフォルトのクロック周波数を取得して除算することにより第１経過時刻を算出することができる（ステップＳ４３）。そして、その第１経過時刻をＲＡＭ１１２内の積算経過時刻に加算（積算）して記憶保持する（ステップＳ４４）。
【００５４】
次いで、先のステップＳ３６と同様に、クロック周波数変更履歴保持部２６内に履歴情報として同一のプロセッサＩＤに対応付けされている次のクロック周波数とクロックサイクルカウント値（後続変更履歴エントリ）を読み出してＲＡＭ１１２内に記憶保持する（ステップＳ４５）。
【００５５】
この後には、同様に、そのＲＡＭ１１２内に後続の変更履歴エントリが記憶保持されたか否かを確認して（ステップＳ４６）、最終のクロック周波数の変更までの補正処理が完了していて後続の変更履歴エントリを確認できない場合には、後述するように、そのまま性能計測分析におけるこのトレースデータカウント値についての終了処理を実行する。
【００５６】
一方、このステップＳ４６において、クロック周波数が続けて変更されていて後続の変更履歴エントリを確認できた場合には、ステップＳ４１に戻って、ＲＡＭ１１２内に保持する後続の変更履歴カウント値とトレースデータカウント値とを比較する。
【００５７】
この２回目のステップＳ４１においても、後続の変更履歴カウント値がトレースデータカウント値よりも大きい場合には、そのトレースデータカウント値の取得時にはそのクロック周波数の変更は行われていないことから、後述するように、そのままこの性能計測分析におけるこのトレースデータカウント値についての終了処理を実行する。
【００５８】
一方、この２回目のステップＳ４１においても、後続の変更履歴カウント値がトレースデータカウント値よりも小さい場合には、そのトレースデータカウント値の取得前にクロック周波数が再度変更されていることから、続けて同様の処理を実行する。すなわち、後続変更履歴カウント値から先の最先変更履歴カウント値を減算して増加分を算出し（ステップＳ４２）、その増加カウント値を変更前のクロック周波数で除算することにより第２経過時刻を算出し（ステップＳ４３）、その第２経過時刻をＲＡＭ１１２内の積算経過時刻（第１経過時刻）に加算（積算）して記憶保持する（ステップＳ４４）。
【００５９】
この後には、クロック周波数変更履歴保持部２６内から読み出していない後続変更履歴エントリが存在して、その後続変更履歴カウント値がトレースデータカウント値よりも小さく、そのトレースデータカウント値の取得前にクロック周波数が再度変更されている限り、これらステップＳ４１〜Ｓ４６を繰り返す。これにより、クロック周波数の変更時までの、言い換えると、最終の後続変更履歴カウント値までの増加分をその変更前のクロック周波数で除算した第ｋ−１経過時刻を加算して積算経過時刻を算出（導出）することができ、その積算経過時刻をＲＡＭ１１２内に記憶保持する。
【００６０】
一方、ステップＳ４１において、後続の変更履歴カウント値がトレースデータカウント値よりも大きく、そのトレースデータカウント値の取得後にクロック周波数が変更されていることを確認した場合には、このトレースデータカウント値についての終了処理に移行する。
【００６１】
この終了処理では、そのトレースデータカウント値から最終の後続変更履歴カウント値を減算して増加分を算出し（ステップＳ５１）、その増加カウント値を最終のクロック周波数で除算して最終の第ｋ経過時刻を算出した後に（ステップＳ５２）、この最終の第ｋ経過時刻をＲＡＭ１１２内の積算経過時刻に加算（積算）して記憶保持する（ステップＳ５３）。次いで、そのＲＡＭ１１２内に記憶保持する最初のトレースデータカウント値に応じた積算経過時刻を他の第２〜第ｎプロセッサ１０２〜１０ｎと共通の仮想時刻として、そのトレースデータカウント値と共にプロセッサＩＤに対応付けしてターゲットプログラムの性能計測（分析）に受け渡す（ステップＳ４３）。この後に、このトレースデータカウント値についての導出処理を終了して、ステップＳ３２に戻る。
【００６２】
この後には、変数ｍをインクリメント（ｍ＝ｍ＋１）することにより、トレースデータ蓄積部１１２ａ内に記憶保持するｍ個のトレースデータの全てについて、トレースデータカウント値に応じた積算経過時刻を算出して仮想時刻とする補正処理（ステップＳ３２〜Ｓ５４）を繰り返し行うことができ、その補正処理する対象のトレースデータのクロックサイクルカウント値がトレースデータ蓄積部１１２ａ内に存在せず、この補正処理の完了が確認できたときに（ステップＳ３３）一連の補正処理を終了する。
【００６３】
ところで、ステップＳ４６において、ＲＡＭ１１２内に後続変更履歴エントリを確認することができずに、クロック周波数の変更自体が終了していることを確認した場合には、この性能計測分析におけるそのトレースデータカウント値についての終了処理に移行する（ステップＳ５１〜Ｓ５４）。この終了処理では、同様に、そのトレースデータカウント値から最終の後続変更履歴カウント値までの増加分の増加カウント値を最終のクロック周波数で除算して算出した最終の第ｋ経過時刻を、ＲＡＭ１１２内の積算経過時刻に加算（積算）して仮想時刻とし、トレースデータカウント値と共にプロセッサＩＤに対応付けしてターゲットプログラムの性能計測（分析）に受け渡して、ステップＳ３２に戻る。
【００６４】
また、ステップＳ３７において、ＲＡＭ１１２内に最先の変更履歴エントリを確認できずに、クロック周波数の変更自体が行われていないプロセッサの場合には、予めクロック周波数設定部１２に設定されているクロック周波数を取得してＲＡＭ１１２内に記憶保持した後に（ステップＳ３８）、この性能計測分析における終了処理に移行する（ステップＳ５１〜Ｓ５４）。この終了処理では、同様に、そのトレースデータカウント値までの増加分の増加カウント値（トレースデータカウント値自体）をデフォルトのクロック周波数で除算して算出した仮想時刻を、そのトレースデータカウント値と共にプロセッサＩＤに対応付けしてターゲットプログラムの性能計測（分析）に受け渡して、ステップＳ３２に戻る。
【００６５】
このように、この実施形態によれば、変更後のクロック周波数と共にその変更時のクロックサイクルカウント値を履歴情報として取得・保持して、ターゲットプログラムの性能計測の分析等を行う際に使用するトレースデータカウント値（現実のタイミング）に応じた仮想時刻を算出・積算（導出）することができる。したがって、トレースデータカウント値は、第１〜第ｎプロセッサ１０１〜１０ｎの動作するクロック周波数から離れて、現実の時間経過と同一の一定速度で増進する仮想時刻に補正して共通化することができる。この結果、例えば、ターゲットプログラムの性能計測などを第１〜第ｎプロセッサ１０１〜１０ｎのクロック周波数の違いにより複雑化させることなく、簡易かつ容易に、また、効率よく処理することができる。
【００６６】
このトレースデータカウント値の補正処理は、ターゲットプログラム１１１の性能計測の実行処理中には、その第１〜第ｎプロセッサ１０１〜１０ｎのプロセッサＩＤと共に変更時のクロック周波数とクロックサイクルカウント値のみを取得して記憶保持する処理に留めているので、仮想時刻の算出に必要な変更時のクロック周波数とクロックサイクルカウント値の走査や演算処理が負担になってしまうことはなく、実行プローブ１１１ａを快適に実行させつつトレースデータなどをデータ収集することができる。
【００６７】
次に、図８〜図１２は、上述実施形態に付加させることのできる、マルチプロセッサのカウント値補正プログラムをコンピュータに読み込ませて実行することによりマルチプロセッサのカウント値補正方法を実施するマルチプロセッサのカウント値補正装置の一例を示す図である。ここで、このマルチプロセッサの一例は、上述の実施形態と略同様に構成されていることから、図面を流用して、同様な構成には同一の符号を付して特徴部分を説明する。図８はプロセッサ毎のクロックサイクルカウント値のカウント開始時期を同期させるカウント値補正装置の概略全体構成を示す概念構成図、図９はそのプロセッサ間でのやり取りとその処理結果を説明する概念図、図１０及び図１１はそのプロセッサ毎のクロックサイクルカウント値のカウント開始時期の同期処理を説明するフローチャート、図１２はそのプロセッサが実行するプログラム中におけるクロックサイクルカウント値の修正を説明するプローチャートである。
【００６８】
図８において、マルチプロセッサ２００は、上述実施形態でのマルチプロセッサ１００と同様に、第１〜第ｎプロセッサ１０１〜１０ｎが、ＲＯＭ１１１やＲＡＭ１１２と共にバス１１３に共通接続されてコンピュータ内に搭載されている。この第１〜第ｎプロセッサ１０１〜１０ｎは、それぞれのプロセッサＩＤ保持部１１内のプロセッサＩＤに基づいてマルチプロセッサとして機能する。また、第１〜第ｎプロセッサ１０１〜１０ｎは、クロック周波数設定部１２内に予め設定されているクロック周波数に応じた速度のカウント値をクロックサイクルカウント値保持部１３で計数・保持することにより同期を取る。すなわち、このマルチプロセッサ２００では、第１〜第ｎプロセッサ１０１〜１０ｎのそれぞれが上述実施形態のようにクロック周波数を変更することなく、固定のクロック周波数でクロックサイクルカウントを計数している。
【００６９】
このマルチプロセッサ２００は、上述実施形態と同様に、プロセッサＩＤ取得部２１とクロックサイクルカウント値取得部２２を備えており、性能計測を実行する際のトレースデータをＲＡＭ１２内のトレースデータ蓄積部１１２ａ内に蓄積保持する。
【００７０】
また、マルチプロセッサ２００は、第１〜第ｎプロセッサ１０１〜１０ｎがＲＡＭ１１２を利用しつつ実行プローブ１１１ａを実行することにより機能する、クロック差分計測部３１を備えるとともに、ＲＡＭ１１２が順序カウント値保持部３２とクロック差分保持部３３を構成している。このマルチプロセッサ２００は、これら各部を備えることにより、例えば、性能計測などを行う際に利用するクロックサイクルカウント値のカウント開始時期が同一タイミングになるようにリセットする同期処理を行って、第１〜第ｎプロセッサ１０１〜１０ｎ毎のトレース用データをより高精度に処理可能に補正する。
【００７１】
ここで、第１〜第ｎプロセッサ１０１〜１０ｎは、高精細には、それぞれ順次に起動して駆動を開始することから内蔵するクロックサイクルカウント値保持部１３のカウント開始もそれぞれ遅れることになる。例えば、図９に示すように、第１プロセッサ１０１が駆動を開始した後に第２プロセッサ１０２が駆動を開始する場合には、クロックサイクルカウント値保持部１３内のクロックサイクルカウント値のカウント開始タイミングに遅延分ｄだけのずれが生じている。
【００７２】
このことから、第１〜第ｎプロセッサ１０１〜１０ｎは、それぞれ他のプロセッサとクロックサイクルカウント値のカウント開始タイミングを一致させてそのクロックサイクルカウント値を信頼性高く、また容易に分析などに利用することができるようにする。
【００７３】
具体的には、第１〜第ｎプロセッサ１０１〜１０ｎは、実行プローブ１１１ａの制御の下、何れか一つを基準プロセッサにするとともに他の一つを協働相手の対応プロセッサとして、その間で所定の信号のやり取りすることにより、第１〜第ｎプロセッサ１０１〜１０ｎ間の起動タイミングによるクロックサイクルカウント値のずれをリセットする。例えば、実行プローブ１１１ａは、図９に示すように、基準プロセッサ１０１と応答プロセッサ１０２の間で所定の信号のやり取りをして、それぞれでのクロックサイクルカウント値を取得することにより、その間の起動タイミングによるクロックサイクルカウント値のずれをリセットする同期処理を次の手順により実行する。まずは、基準プロセッサ１０１が実行する実行プローブ１１１ａの制御の下、プロセッサＩＤ取得部２１がプロセッサＩＤ保持部１１内のプロセッサＩＤを取得して特定する。また、クロックサイクルカウント値取得部２２が、順序カウント値として、基準プロセッサ１０１の第１クロックサイクルカウント値Ａ、応答プロセッサ１０２の第２クロックサイクルカウント値Ｂ、基準プロセッサ１０１の第３クロックサイクルカウント値Ｃを順次に取得して、順序カウント値保持部３２内に記憶保持する。この後には、反対に、その応答プロセッサ１０２が実行する実行プローブ１１１ａの制御の下、同様の処理により、その応答プロセッサ１０２に基準プロセッサとして振舞って貰うのと並行して、基準プロセッサ１０１にも応答プロセッサとして応答させることによって、逆転順序カウント値として、順次に取得した第１〜第３クロックサイクルカウント値ａ、ｂ、ｃを順序カウント値保持部３２内に記憶保持する。すなわち、実行プローブ１１１ａは、基準プロセッサ１０１と対応プロセッサ１０２との間でやり取りさせて順序カウント値を取得する順序カウント値取得手段を構成している。
【００７４】
ところで、この基準プロセッサ１０１と応答プロセッサ１０２では、クロックサイクルカウント値保持部１３のカウント開始タイミングにずれがないと仮定すると、基準プロセッサ１０１が基準プロセッサとして機能する場合の所定信号のやり取りにおける往路と復路の伝送遅延Ｓを次式により算出することができ、
Ｓ＝（Ｃ＋Ａ）／２−Ｂ
逆に、基準プロセッサ１０１が応答プロセッサとして機能する場合の所定信号のやり取りにおける往路と復路の伝送遅延ｓは次式により算出することができる。
ｓ＝（ｃ＋ａ）／２−ｂ
【００７５】
この基準プロセッサ１０１と応答プロセッサ１０２間の伝送遅延Ｓ、ｓは、往路と復路毎での伝送速度が同様であることから相殺することができる。しかるに、実際には、クロックサイクルカウント値保持部１３のカウント開始タイミングにずれがある。このことから、その相殺の後には、その基準プロセッサ１０１と応答プロセッサ１０２におけるクロックサイクルカウント値保持部１３のカウント開始タイミングのずれに応じた遅延分のカウント値ｄを差分として算出することができ、そのカウント値ｄは次式で導出することができる。
ｄ＝Ｓ−ｓ＝（Ｃ−ｃ）／４＋（Ａ−ａ）／４−（Ｂ−ｂ）／２
【００７６】
そして、第１〜第ｎプロセッサ１０１〜１０ｎは、基準プロセッサと対応プロセッサとして動作することにより取得した順序カウント値保持部３２内のクロックサイクルカウント値Ａ〜Ｃ、ａ〜ｃを用いて、クロック差分計測部３１がクロックサイクルカウント値保持部１３のカウント開始タイミングのずれ（差分）であるカウント値ｄを基準プロセッサに対応する応答プロセッサ毎に導出する。そして、クロック差分保持部３３は、その応答プロセッサ毎のプロセッサＩＤとカウント値補正値ｄ（同期補正値）を、基準プロセッサのプロセッサＩＤと共に対応付けして記憶保持する。すなわち、クロック差分計測部３１が補正値導出手段を構成して、クロック差分保持部３３が補正値保持手段を構成する。
【００７７】
例えば、第１プロセッサ１０１は、図９に示すように、基準プロセッサとして応答プロセッサ１０２と協働するとき、第１クロックサイクルカウント値Ａ＝７５、第２クロックサイクルカウント値Ｂ＝１２５、第３クロックサイクルカウント値Ｃ＝２２５を取得し、また、その第２プロセッサ１０２に基準プロセッサとして動作してもらうことにより、第１クロックサイクルカウント値ａ＝２７５、第２クロックサイクルカウント値ｂ＝４２５、第３クロックサイクルカウント値ｃ＝４２５を取得して、順序カウント値保持部３２内に保持したとする。すると、クロック差分計測部３１は、これらカウント値Ａ〜Ｃ、ａ〜ｃを上記式に代入することにより、その応答プロセッサ１０２のクロックサイクルカウント値保持部１３のカウント開始タイミングのずれによるカウント値ｄ＝５０を算出（導出）して、クロック差分保持部３３がカウント値補正値ｄとして記憶保持する。これにより、基準プロセッサ１０１は、ターゲットプログラムの性能計測分析の実行時における自身のクロックサイクルカウント値ｔ１＝８２５はそのままトレースデータ蓄積部１１２ａ内に蓄積保持するのに対して、応答プロセッサ１０２のクロックサイクルカウント値ｔ２＝８７５にはクロック差分保持部３３内に記憶保持するカウント値補正値＝５０を遅延カウント値として加算してそのクロックサイクルカウント値ｔ２＝９２５をトレースデータ蓄積部１１２ａ内に蓄積保持する。この結果、第１、第２プロセッサ１０１、１０２は、協働する性能計測分析などでも処理時間を正確に修正して分析等を実行することができる。
【００７８】
次に、ターゲットプログラムの実行時の性能計測を図１０〜図１２に示すフローチャートを用いて説明する。
【００７９】
まず、ターゲットプログラムを実行処理するときの性能計測を行うときに、例えば、そのターゲットプログラムを第１プロセッサ１０１が他の第２〜第ｎプロセッサ１０２〜１０ｎを協働させて実行する場合には、その実行処理を開始する前に、言い換えると、プロセッサ１０１〜１０ｎのそれぞれが実行プローブ１１１ａの制御の下で駆動を開始する前に、その実行プローブ１１１ａは、第１プロセッサ１０１を基準プロセッサとして、応答プロセッサの第２〜第ｎプロセッサ１０２〜１０ｎ毎に図１０及び図１１に示す同期処理を実行する。なお、基準プロセッサ１０１での同期処理は図１０のフローチャートに示す一方、応答プロセッサ１０２での同期処理は図１１のフローチャートに示している。
【００８０】
詳細には、基準プロセッサ１０１は、まずは、ＲＡＭ１１２内に準備する変数ｐをリセット（ｐ＝０）する（ステップＳ１１０）。この後に、プロセッサＩＤ取得部２１がプロセッサＩＤ保持部１１内の自身のプロセッサＩＤを取得するとともに、クロックサイクルカウント値取得部２２がクロックサイクルカウント値保持部１３内で計数保持する第１クロックサイクルカウント値Ａを取得して、そのプロセッサＩＤに対応付けして順序カウント値保持部３２内に記憶保持する（ステップＳ１１１）。次いで、基準プロセッサ１０１は、応答プロセッサ１０２に第２クロックサイクルカウント値Ｂと共にプロセッサＩＤを取得して返送するように指示し（ステップＳ１１２）、そのクロックサイクルカウント値ＢとプロセッサＩＤが応答プロセッサ１０２から送られてくるまで待機する（ステップＳ１１３）。ここで、以下においても、各種情報は第１、第２プロセッサ１０１、１０２毎に内部処理して取得することから、同様に、プロセッサＩＤはプロセッサＩＤ取得部２１が第１、第２プロセッサ１０１、１０２毎のプロセッサＩＤ保持部１１から取得するとともに、クロックサイクルカウント値もクロックサイクルカウント値取得部２２がそれぞれのクロックサイクルカウント値保持部１３から取得することから、以下の説明においては、例えば、プロセッサＩＤを取得するなどと簡単に説明する。
【００８１】
一方、応答プロセッサ１０２は、基準プロセッサ１０１の処理と並行して、その基準プロセッサ１０１から第２クロックサイクルカウント値ＢとプロセッサＩＤを取得して返送することの指示が送られてくるのを待って（ステップＰ２１１）、その指示を確認すると、基準プロセッサ１０１と同様に、その第２クロックサイクルカウント値ＢとプロセッサＩＤを取得して基準プロセッサ１０１に送信し（ステップＰ２１２）、次の指示が基準プロセッサ１０１から送られてくるまで待機する（ステップＰ２１３）。
【００８２】
次いで、基準プロセッサ１０１は、応答プロセッサ１０２から送られてきた第２クロックサイクルカウント値ＢとプロセッサＩＤを受け取ると（ステップＳ１１３）、その第２クロックサイクルカウント値ＢとプロセッサＩＤを順序カウント値保持部３２内に対応付けして記憶保持した後に（ステップＳ１１４）、ステップＳ１１１と同様に、第３クロックサイクルカウント値ＣとプロセッサＩＤを取得して順序カウント値保持部３２内に対応付けして記憶保持する（ステップＳ１１５）。
【００８３】
この後に、基準プロセッサ１０１は、基準プロセッサとして動作してステップＳ１１１〜Ｓ１１５と同様の処理を実行する駆動指示を応答プロセッサ１０２に送信して（ステップＳ１１６）、その応答プロセッサ１０２から応答プロセッサとして動作することの指示が送られてくるのを待機する（ステップＳ１１７）。
【００８４】
一方、応答プロセッサ１０２は、基準プロセッサ１０１から基準プロセッサとして動作することの駆動指示を受け取ると（ステップＰ２１３）、第１クロックサイクルカウント値ａとプロセッサＩＤを取得して順序カウント値保持部３２内に対応付けして記憶保持した後に（ステップＰ２１４）、基準プロセッサ１０１に第２クロックサイクルカウント値ｂとプロセッサＩＤを取得して返送するように指示して（ステップＰ２１５）、その第２クロックサイクルカウント値ｂとプロセッサＩＤが基準プロセッサ１０１から送られてくるまで待機する（ステップＰ２１６）。
【００８５】
他方、基準プロセッサ１０１は、応答プロセッサ１０２から第２クロックサイクルカウント値ｂとプロセッサＩＤを取得して返送することの指示が送られてくるのを待って（ステップＳ１１７）、その指示を確認すると、その第２クロックサイクルカウント値ｂとプロセッサＩＤを取得して応答プロセッサ１０２に送信し（ステップＳ１１８）、その応答プロセッサ１０２から集めた第１〜第３クロックサイクルカウント値ａ〜ｃとプロセッサＩＤが送られてくるまで待機する（ステップＳ１１９）。
【００８６】
一方、応答プロセッサ１０２は、基準プロセッサ１０１から送られてきた第２クロックサイクルカウント値ｂとプロセッサＩＤを受け取ると（ステップＰ２１６）、その第２クロックサイクルカウント値ｂとプロセッサＩＤを順序カウント値保持部３２内に対応付けして記憶保持した後に（ステップＰ２１７）、第３クロックサイクルカウント値ｃとプロセッサＩＤを取得して順序カウント値保持部３２内に対応付けして記憶保持した後に（ステップＰ２１８）、これらの一連の第１〜第３クロックサイクルカウント値ａ〜ｃとプロセッサＩＤをそれぞれ対応付けして基準プロセッサ１０１に送信して（ステップＰ２１９）、この応答プロセッサとしての１回分の処理を完了する。
【００８７】
そして、基準プロセッサ１０１は、応答プロセッサ１０２から送信されてきた第１〜第３クロックサイクルカウント値ａ〜ｃとそれぞれのプロセッサＩＤを受け取ると（ステップＳ１１９）、取得・保持したクロックサイクルカウント値Ａ〜Ｃ、ａ〜ｃをプロセッサＩＤと記憶順により識別して、上記の式に代入することにより、協働する応答プロセッサ１０２に対するカウント値補正値ｄを算出してクロック差分保持部３３内にそのプロセッサＩＤに対応付けしてその導出回数ｐと共に記憶保持する（ステップＳ１２０）。
【００８８】
この後には、基準プロセッサ１０１は、ＲＡＭ１１２内の変数ｐをインクリメント（ｐ＝ｐ＋１）して、応答プロセッサ１０２に対するカウント値補正値ｄの導出回数ｐをカウントした後に（ステップＳ１２１）、その導出回数ｐが予め設定されている回数に達したか確認をして（ステップＳ１２２）、導出回数ｐが設定回数に達していない場合には、ステップＳ１１１に戻って同様の処理を繰り返す。
【００８９】
一方、その導出回数ｐが設定回数に達したことを確認した場合には、設定回数分のカウント値補正値ｄの平均値を算出して応答プロセッサ１０２に対する平均カウント値補正値ｄとしてクロック差分保持部３３内にそのプロセッサＩＤに対応付けして記憶保持して（ステップＳ１２３）、この基準プロセッサとしての一連の処理を完了する。
【００９０】
そして、ターゲットプログラムの性能計測を実行する際には、例えば、第１プロセッサ１０１では、図１２に示すように、実行プローブ１１１ａにプログラム制御が移行して（ステップＳ３１１）、上述した同期処理（ステップＳ１１０〜Ｓ１２３）を協働する第２〜第ｎプロセッサ１０２〜１０ｎ毎に実行した後に（ステップＳ３１２）、性能計測に必要なトレースデータの収集・記録などが実行される（ステップＳ３１３）。この後に、協働する第２〜第ｎプロセッサ１０２〜１０ｎのプロセッサＩＤをプロセッサＩＤ取得部２１がそれぞれのプロセッサＩＤ保持部１１から取り出して取得するとともに（ステップＳ３１４）、そのプロセッサＩＤに対応付けされてクロック差分保持部３３内に記憶保持されている平均カウント値補正値ｄを読み出して取得する（ステップＳ３１６）。これにより、性能計測に利用するために収集してトレースデータ蓄積部１１２ａ内にトレースデータとして記憶保持させたクロックサイクルカウント値は、そのプロセッサＩＤに対応する平均カウント値補正値ｄにより修正して、そのトレースデータ蓄積部１１２ａ内に記憶保持させることができ（ステップＳ３１７）、この後に、性能計測対象のターゲットプログラムにプログラム制御を移行してこの実行プログラムを終了する（ステップＳ３１８）。
【００９１】
このように、この付加装置によれば、第１〜第ｎプロセッサ１０１〜１０ｎ毎にカウント開始タイミングの一致するトレースデータカウント値に補正して共通化することができる。したがって、第１〜第ｎプロセッサ１０１〜１０ｎのクロックサイクルカウント値保持部１３の計数するカウント開始タイミングの違いにより正確性が低下してしまうことなく、ターゲットプログラムの性能計測の分析等を高精度に実行することができる。
【００９２】
以上で説明した付加装置は、単独で利用することができることはいうまでもないが、上述の第１実施形態と共に搭載する場合には、第１〜第ｎプロセッサ１０１〜１０ｎ毎に変更可能なクロック周波数でカウントするトレースデータカウント値を補正して共通化する仮想時刻を、さらに、そのカウント開始時刻を一致させることができ、より信頼性高くターゲットプログラムの性能計測の分析等を実行することができる。
【００９３】
このクロックサイクルカウント値のカウント開始タイミングの同期処理は、ターゲットプログラムの実行開始直後に限るものではなく、例えば、クロック周波数の変更が繰り返し行われると、本来なら無視できる程度の誤差が蓄積されて算出する仮想時刻に信頼性がなくなる可能性がある。このことから、予め設定されている間隔あるいは時刻毎に、又は、任意のタイミングの指示命令に応じて、第１〜第ｎプロセッサ１０１〜１０ｎのクロック周波数を一定値に固定して、上述の同期処理を実行することにより、導出する仮想時刻の信頼性低下をリセットすることができる。
【００９４】
以上、この発明の一実施形態を図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計の変更等があってもこの発明に含まれる。
【００９５】
例えば、上述の実施形態では、トレースデータカウント値毎に、クロック周波数の変更までのクロックサイクルカウント値の増加分から算出する経過時刻を積算する処理を繰り返すことにより仮想時刻を導出するようにしたが、これに限るものではない。例えば、先のトレースデータカウント値の補正処理における第ｎ経過時刻までの積算値を保持しておき、その第ｎ経過時刻までの積算値に、次に補正処理するトレースデータカウント値の増加分から算出する第ｎ＋１経過時刻を積算することにより、その仮想時刻となる積算経過時刻を導出するようにしてもよい。
【００９６】
また、上述の実施形態では、複数のプロセッサを搭載する場合に、クロック周波数の変更に影響されることのない仮想時刻を導出して経過時刻を共通化する場合について述べたが、これに限らない。例えば、一つのプロセッサを搭載する装置でも、そのクロック周波数の変更によりクロックサイクルカウント値の増加傾向が変化する場合にも適用することができ、そのクロックサイクルカウント値の経過時間を仮想時刻により一般化して、分析等を容易化することもできる。
【００９７】
また、上述の実施形態では、性能測定するターゲットプログラムを一例にして説明したが、これに限らず、例えば、統計計算に拠らずに、個別に処理時間等の共通化や基準時のリセットも行うことができるので、一般的なプログラムにも適用することができ、例えば、計算資源を効率的に活用する高性能なプログラムの作成にも活用することができる。
【産業上の利用可能性】
【００９８】
この発明は、マルチプロセッサ上で動作する、計算資源を効率的に活用する高性能プログラムに広く適用することができる。
【符号の説明】
【００９９】
１１    プロセッサＩＤ保持部
１２    クロック周波数設定部
１３    クロックサイクルカウント値保持部
２１    プロセッサＩＤ取得部（変更プロセッサ識別情報取得手段、対応プロセッサ識別情報取得手段）
２２    クロックサイクルカウント値取得部（変更時カンウント値取得手段）
２３    クロック周波数変更部
２４    クロック周波数変更検知部（変更検知手段、動作周波数取得手段）
２５    クロックサイクルカウント補正部（時刻導出手段）
２６    クロック周波数変更履歴保持部（変更履歴保持手段）
３１    クロック差分計測部（補正値導出手段）
３２    順序カウント値保持部
３３    クロック差分保持部（補正値保持手段）
１００、２００    マルチプロセッサ
１０１〜１０ｎ    第１〜第ｎプロセッサ
１０１    基準プロセッサ
１０２    応答プロセッサ
１１１    ＲＯＭ（ターゲットプログラム）
１１１ａ    実行プローブ（順序カウント値取得手段）
１１２    ＲＡＭ
１１２ａ    トレースデータ蓄積部
【図１】
2010038459.tif 000003
【図２】
2010038459.tif 000004
【図３】
2010038459.tif 000005
【図４】
2010038459.tif 000006
【図５】
2010038459.tif 000007
【図６】
2010038459.tif 000008
【図７】
2010038459.tif 000009
【図８】
2010038459.tif 000010
【図９】
2010038459.tif 000011
【図１０】
2010038459.tif 000012
【図１１】
2010038459.tif 000013
【図１２】
2010038459.tif 000014
【国際調査報告】
2010038459.tif 000015
2010038459.tif 000016
2010038459.tif 000017
2010038459.tif 000018