(57)【特許請求の範囲】
【請求項１】
プロセッサがコンピュータ・プログラムに関するソフトウェア・コードを実行する際、前記プロセッサを監視するためのシステムであって、
前記プロセッサに動作可能に接続されて第１のクロックによってクロックされ、前記プロセッサによって実行された命令に関する情報を前記プロセッサのプログラム・カウンタから収集するレジスタと、
前記レジスタに動作可能に接続されて前記第１のクロックに対して非同期の第２のクロックによってクロックされ、前記プログラム・カウンタの内容が変化する時に対してランダムな時に前記レジスタの内容をサンプリングするサンプラであって、前記レジスタに動作可能に接続されて前記第１のクロックとは独立の前記第２のクロックに応答して前記レジスタの内容をサンプリングするラッチを含む、サンプラと、
前記第１のクロックおよび前記第２のクロックとは独立の第３のクロックによってクロックされるホスト・コンピュータと、
前記ホスト・コンピュータと前記ラッチとの間に結合されるインターフェース・ユニットであって、前記第２のクロックと同期して前記ホスト・コンピュータからのサンプリング・コマンドを前記ラッチに通信して、前記ラッチによるサンプリングを開始し、それによって、前記インターフェース・ユニットによる前記サンプリング・コマンドの受信と前記ラッチへの前記サンプリング・コマンドの送信との間に本来的でランダムな遅延を挿入するように構成される、インターフェース・ユニットと
を含むことを特徴とするシステム。
【請求項２】
前記ホスト・コンピュータは、前記サンプルを受け取り、前記プロセッサによって実行された前記命令の統計レコードを提供する請求項１に記載のシステム。
【請求項３】
前記レジスタが前記ラッチによってサンプリングされている間、前記レジスタを不能にするように適合された論理をさらに含む請求項１に記載のシステム。
【請求項４】
前記ラッチの前記内容を受け取り、前記内容をユーザ装置に通信するように動作可能に接続されたシフト・レジスタをさらに含む請求項１または請求項３に記載のシステム。
【請求項５】
前記ラッチが、時々、前記プログラム・カウンタからの一続きのプロセッサ命令内容を前記レジスタからシーケンスで受け取るように制御される請求項４に記載のシステム。
【請求項６】
前記シフト・レジスタが、ＪＴＡＧポートにある請求項４に記載のシステム。
【請求項７】
プログラム・カウンタ内の命令を実行するための条件が満たされていないとき、前記レジスタを不能にする論理をさらに含む請求項１に記載のシステム。
【請求項８】
プロセッサがコンピュータ・プログラムに関するソフトウェア・コードを実行する際、前記プロセッサを監視するための方法であって、
前記プロセッサに動作可能に接続されて第１のクロックによってクロックされるレジスタにおいて、前記プロセッサによって実行された命令に関する情報を前記プロセッサのプログラム・カウンタから収集することと、
前記プロセッサの前記第１のクロックの動作と非同期に、第２のクロックを使用して、前記プログラム・カウンタの内容が変化する時に対してランダムな時に、前記レジスタの内容をサンプリングすることであって、前記レジスタに動作可能に接続されたラッチによって前記第１のクロックとは独立の前記第２のクロックに応答して前記レジスタの内容をサンプリングすることを含む、サンプリングすることと、
前記第１のクロックおよび前記第２のクロックとは独立の第３のクロックによってホスト・コンピュータをクロックすることと、
前記ホスト・コンピュータと前記ラッチの間で結合されたインターフェース・ユニットを使用し、前記第２のクロックと同期して前記ホスト・コンピュータから前記ラッチにサンプリング・コマンドを通信して、前記ラッチによるサンプリングを開始し、それによって、前記インターフェース・ユニットによる前記サンプリング・コマンドの受信と前記ラッチへの前記サンプリング・コマンドの送信との間に本来的でランダムな遅延を挿入することと
を含むことを特徴とする方法。
【請求項９】
前記サンプルを受け取り、前記プロセッサによって実行された前記命令の統計レコードを提供するように前記ホスト・コンピュータを動作させることをさらに含む請求項８に記載の方法。
【請求項１０】
実行されない命令に関して前記レジスタがサンプリングされている間、前記レジスタを不能にすることをさらに含む請求項８に記載の方法。
【請求項１１】
サンプリングすることが、前記ラッチの前記内容を受け取り、前記内容をユーザ装置に通信するように動作可能に接続されたシフト・レジスタに前記プログラム・カウンタ内容を渡すことを含む請求項１０に記載の方法。
【請求項１２】
前記シフト・レジスタが、ＪＴＡＧポートにある請求項１１に記載の方法。
【請求項１３】
前記ユーザ装置が、ホスト・コンピュータであり、前記ホスト・コンピュータが、捕捉されたプログラム・カウンタ命令内容の統計分析を生成するように動作させられる請求項１１に記載の方法。
【請求項１４】
前記ラッチを、少なくとも時々、前記プログラム・カウンタからの一続きのプロセッサ命令内容を前記レジスタからシーケンスで受け取るように制御することをさらに含む請求項１０に記載の方法。
【請求項１５】
プログラム・カウンタ内の命令を実行するための条件が満たされていないとき、前記レジスタを不能にすることをさらに含む請求項１０に記載の方法。
【発明の詳細な説明】
【０００１】    （発明の分野）
本発明は、プロセッサ上で実行されるコンピュータ・プログラム・コードの分析の分野に関する。詳細には、本発明は、プログラムの、詳細には、アプリケーション・プログラムの様々な命令および部分を実行するプロセッサによって占有される時間の非侵入式の監視およびプロファイリングに関する。
【０００２】    （発明の背景）
今日、プロセッサ、詳細には、マイクロプロセッサが、多種多様な用途において情報処理アプリケーションを行うのに使用されている。特に、今日、プロセッサが普及して中心的機能を果たしている１つの分野が、デジタル信号プロセッサ（ＤＳＰ）システムの分野である。そのようなシステムでは、音声信号またはビデオ信号、または医療遠隔測定入力または計測入力などの物理信号を表すデータがデジタル化され、様々なアルゴリズムにかけられて情報が抽出され、あるいは新しい情報または新しい信号が生成され、あるいは情報が伝送される。そのようなＤＳＰベースのシステムの動作を改良し、システムをより高速でより安価にすること等の市場圧力が常に存在する。より高い速度を達することにより、ハードウェアの改良に焦点が当てられることになるだけでなく、プロセッサ・ハードウェアのより効率的な利用を達することも焦点が当てられることになる。したがって、デジタル信号プロセッサ上で、または、実際、一般にプロセッサ上で実行されるアプリケーション・ソフトウェア（コンピュータ・プログラム）を開発するプロセスにおける１つのステップは、システムがソフトウェアによって動作させられる効率を評価して、プログラムのどの部分が最も多くの処理時間を消費し、したがって、その部分の改良がシステムのパフォーマンスを相当に向上させる可能性が最も高いかを判定しようと試みることである。
【０００３】  プログラム・コードのプロセッサ実行に関するパフォーマンス・データを収集するのに一般に使用される方法は、試験中のシステムに対して影響を与える。例えば、方法は、プログラム・コードの中に様々なポイントで区切り点命令を挿入して、プログラムの進行を区切り点ごとに測定できるようにすることを必要とする可能性がある。別の言い方をすれば、従来の手法は、プログラム・コンパイラおよびプログラム・アセンブラが（ユーザによって導入された指示を介して）、サブルーチンのすべてのエントリ・ポイントおよびエグジット・ポイントで計装コード（区切り点命令）を追加することを必要とする。この追加の計装コードを使用して、サブルーチンの、より一般的には、プロセスの）エントリに関するプロセッサのプログラム・カウンタの現行のカウントを捕捉することができる。エグジット時に、計装コードは、サブルーチンの（プロセスの）動作に関する様々な情報（例えば、サブルーチン（プロセス）が開始された回数、サブルーチンの中で経過した合計時間、サブルーチン通過の単一の最大時間、サブルーチン通過の単一の最小時間等）でレコードを更新する。この情報を使用して、ユーザは、どのルーチン（プロセス）がプロセス上で最も多くの時間を消費しているかに関して何らかの結論に達し、これにより、改良することでプログラム・パフォーマンスの相当な全体的向上がもたらされる可能性が最も高いサブルーチンを特定することができる。もちろん、１つの欠点は、「目標」プログラム・コードを変更しなければならないことであり、これは、計装コードを実行しているシステム・パフォーマンスが、計装していないコードを実行するシステム・パフォーマンスとは異なることである。ただし、試験を受けるプログラムのコードおよび自然なフローを変更することにより、本来的に、不正確なデータの生成がもたらされる。というのは、分析されるプログラムが、通常の使用時に存在する実際のプログラムではないからである。システムの製造バージョンのダイナミックスのいくらかが失われる可能性がある。この結果、特に最良のパフォーマンスに合せて入念に調整されている（すなわち、通常、「高度に調整されている」と言われる）システム上で、結果の不正確さにより、さらなる調整を必要とするシステムの部分に関する不正確な報告がもたらされる可能性がある。
【０００４】  さらに、これらのシステムのいくつかは、１００％のプロセッサ利用を得ようとする。そのような状況では、パフォーマンス・データを収集するためにプログラム・コードに追加の命令を挿入することにより、実際、システムが動作しなくなる可能性がある。
【０００５】  したがって、プログラム・コードを変更する（例えば、追加の命令が追加される）ことなしに、プロセスがプログラム・コードを実行する際、プロセッサの非侵入式監視を提供する方法および装置の必要性が存在する。
【０００６】    （発明の概要）
以上の必要性に対して、ランダム式にプロセッサのプログラム・カウンタを非侵入式にサンプリングする統計的プロファイリング方法の使用によって対応がなされ、利点が得られる。収集されたデータにより、システム開発者は、プロセッサ時間の各ルーチンの利用を分析（さらには視覚化）を行うことができ、したがって、開発者は、どのルーチンがプロセッサのパフォーマンスの大部分を消費しているかを特定し、それらのルーチンを最適化することができる。ランダム・サンプリングは、ＪＴＡＧポートとして知られる業界標準のポートを有する、プロセッサ上に、詳細には、ＤＳＰ上に一般に備えられているシフト・レジスタを利用して得られる。ＪＴＡＧポートは、従来、いわゆる境界スキャニング動作で使用するために提供される。
【０００７】  プログラム・カウンタ内容が変化する時刻に対してランダムなタイミング（すなわち、プロセッサ・コア・クロックとは独立のタイミング）でサンプリングが行われない場合、収集された情報は、あるプログラム・カウントまたはルーチンが実際よりも多い頻度で、または少ない頻度で実行されていると不正確に示す可能性がある。これは、サンプリングが、プログラム実行とどうにか同期しているときに生じる可能性がある。これを回避するため、本発明によるシステムは、通常、少なくとも、プロセッサ・コア・クロックとは独立したクロックを使用してプログラム・カウンタ内容のサンプリングを行う。
【０００８】  ランダム性の保証をより高くするため、２つの異なる方法を使用してランダム・サンプリングを行う。第１に、サンプリング・ポートでレジスタのために使用するクロックが、前段で説明したとおり、プロセッサを動作させるクロックとは独立に動作する。第２に、外部ホスト・コンピュータ（例えば、パーソナル・コンピュータまたはワークステーション）を使用して、いつプログラム・カウンタをサンプリングするかに関してサンプリング・ポートに知らせる。ホストからの信号は、サンプリング・ポートにおけるクロックとは非同期に確立される。このプロセスは、サンプリングするコマンドとサンプリングの開始の間にランダムな遅延を加える。サンプリングを行うコマンドは、規定の間隔を特定し、または規定の間隔中、継続して、次に別の間隔中、停止して、複数の逐次サンプルを可能にし、所望される場合、サンプリング・プロセスに「バースト性」の品質を与える。または、１回につき１つだけのサンプルをとることができる。
【０００９】  第１の態様によれば、本発明は、プロセッサがコンピュータ・プログラムに関するソフトウェア・コードを実行する際、プロセッサを監視するためのシステムに関わる。システムは、プロセッサによって実行された命令に関する情報を収集する、プロセッサに動作可能に接続されたレジスタと、プロセッサの動作とは非同期にレジスタの内容をサンプリングする、レジスタに動作可能に接続されたサンプラ（即ち、サンプル回路）とを含む。システムは、前記サンプルを受け取り、プロセッサによって実行された命令の統計レコードを提供するホスト・コンピュータを含むことが可能である。
【００１０】  第２の態様によれば、本発明は、プロセッサがコンピュータ・プログラムに関するソフトウェア・コードを実行する際、プロセッサを監視するためにシステムに関わり、プロセッサによって実行された命令に関する情報を収集するプロセッサに動作可能に接続されたレジスタと、プロセッサの動作とは非同期にレジスタの内容をサンプリングするレジスタに動作可能に接続されたサンプラと、レジスタの内容をサンプリングするサンプラの動作を開始するコマンドを発行するホスト・コンピュータとを含む。ホスト・コンピュータは、前記サンプルを受け取り、プロセッサによって実行された命令の統計レコードを提供することができる。
【００１１】  第３の態様によれば、本発明は、プロセッサがコンピュータ・プログラムに関するソフトウェア・コードを実行する際、プロセッサを監視するためのシステムに関わり、プロセッサが、第１のクロックによってクロックされ、前記第１のクロックによってやはりクロックされるプログラム・カウンタを含み、プログラム・カウンタに動作可能に接続され、第１のクロックによってクロックされ、不能（ｄｉｓａｂｌｅ）にされているとき以外、第１のクロックと同期にプログラム・カウンタの内容を受け取るレジスタと、レジスタに動作可能に接続されて、第１のクロックとは独立の第２のクロックに応答してレジスタ内容をサンプリングするラッチとを含む。また、レジスタがラッチによってサンプリングされている間、レジスタを不能にするように適合された論理を提供することも可能である。ラッチの内容を受け取り、その内容をユーザ装置に通信するように動作可能に接続されたシフト・レジスタが含まれることが可能である。また、第１のクロックおよび第２のクロックとは独立の第３のクロックによってクロックされるホスト・コンピュータ、およびホスト・コンピュータとラッチの間に結合され、ホスト・コンピュータからのサンプリング・コマンドをラッチに通信してラッチによるサンプリングを開始するインターフェース・ユニットも含まれることが可能である。インターフェース・ユニットは、第２のクロックと同期にサンプリングを行うコマンドをラッチに発行することができる。ラッチは、プログラム・カウンタからの一続きのプロセッサ命令内容をレジスタからシーケンスで受け取るように時々、制御することが可能である。また、好ましくは、ただし、オプションとして、プログラム・カウンタ内の命令を実行するための条件が満たされていないとき、レジスタを不能にする論理も含まれることが可能である。
【００１２】  さらに別の態様によれば、本発明は、プロセッサがコンピュータ・プログラムに関するソフトウェア・コードを実行する際、プロセッサを監視するための方法に関わり、プロセッサは、第１のクロックによってクロックされ、前記第１のクロックによってやはりクロックされるプログラム・カウンタを含み、実行されない命令に関する命令内容を捕捉しないことを除き、非侵入式に第１のクロックと同期してレジスタの中のプログラム・カウンタの命令内容を捕捉することと、第１のクロックとは独立の第２のクロックに応答してレジスタ内容をサンプリングすることとを含む。そのような方法は、レジスタがサンプリングされている間、レジスタを不能にすることをさらに含むことが可能である。サンプリングは、ラッチの内容を受け取り、その内容をユーザ装置に通信するように動作可能に接続されたシフト・レジスタにプログラム・カウンタ内容を渡すことを含むことが可能である。好ましくは、シフト・レジスタは、ＪＴＡＧポートにある。ユーザ装置は、ホスト・コンピュータであることが可能であり、ホスト・コンピュータを動作させて、捕捉されたプログラム・カウンタ命令内容の統計分析を生成することができる。オプションとして、方法は、第１のクロックおよび第２のクロックとは独立の第３のクロックによってホスト・コンピュータをクロックすること、およびホスト・コンピュータとラッチの間に結合されたインターフェース・ユニットを使用して、ホスト・コンピュータからのサンプリング・コマンドをラッチに通信して、ラッチによるサンプリングを開始することをさらに含むことが可能である。
【００１３】  また、方法は、インターフェース・ユニットが、第２のクロックと同期してサンプリングを行うコマンドをラッチに発行し、ラッチが、第２のクロックと第３のクロックの差、および処理遅延に関連する遅延の後、応答することを含むことも可能である。方法は、プログラム・カウンタからの一続きのプロセッサ命令内容をレジスタからシーケンスで受け取るように少なくとも時々、ラッチを制御することを含むことが可能である。また、方法は、プログラム・カウンタ内の命令を実行するための条件が満たされていないとき、レジスタを不能にすることを含むことも可能である。
【００１４】  さらに別の態様によれば、本発明は、プロセッサがコンピュータ・プログラムに関するソフトウェア・コードを実行する際、プログラム・カウンタを有するプロセッサを監視するための方法に関わり、プログラム・カウンタから、プロセッサによって実行された命令に関する情報を非侵入式に収集することと、プロセッサの動作とは非同期式に、収集された情報をサンプリングすることとを含む。この方法は、ＪＴＡＧポートにおけるシフト・レジスタを介してホスト・コンピュータにサンプルを提供することをさらに含むことが可能であり、次に、プロセッサによって実行された命令の統計レコードを提供するようにホスト・コンピュータを動作させることが可能である。
【００１５】  本発明は、添付の図面と合せて読むべき以下の詳細な説明からよりよく理解される。図面では、同様の参照番号が、同様の要素を指すものとする。アイテムは、一定の縮尺で描いたものではない。
【００１６】    （詳細な説明）
前述したとおり、プログラミングされたプロセッサの動作を監視し分析して、目標プログラム・コードの中に設定または実装される様々なルーチンおよびプロセスを実行する際にプロセッサによって占有される時間の統計プロファイルを作成することにより、コード最適化を可能にすることができる。この統計プロファイルを作成する１つのやり方は、プロセッサをランダムにサンプリングして、サンプリング時間にプロセッサがどの命令を実行しているかを判定することである。次に、その命令をプログラム・コードの中のその命令の場所に関連付け、タイミング・プロファイルを作成することができる。好都合なことに、ほとんどのプロセッサには、プログラム・カウンタ（ＰＣ）が含まれる。プログラム・カウンタは、実行中の命令のアドレス（メモリ内の）を含むレジスタである。このレジスタの内容は、プログラムの各命令がメモリから取り出される直前に自動的に増分されて、記憶された命令の逐次の実行を可能にする。プログラム制御下で、ＰＣの内容をポインタ・レジスタの内容で変更または交換して、サブルーチン呼出しおよびプログラム分岐を行うことも可能である。他の目的で一般に使用される機構を適合させて、相当なオーバーヘッドを生じさせることなく、プログラム・カウンタの統計サンプリングを可能にすることができる。この機構は、プロセッサ・チップに通常、組み込まれるいわゆるＪＴＡＧレジスタである。ＪＴＡＧは、ボードレベル試験のある問題に対する解決策を業界標準として確立し、普及させるために１９８５年に会合を開いたエレクトロニクス業界および半導体業界における２００を超える会員の団体であるＪｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐの略語である。１９９０年の解決策は、ＩＥＥＥ  Ｓｔｄ．１１４９〜１９９０、ＩＥＥＥ  Ｓｔａｎｄａｒｄ  Ｔｅｓｔ  Ａｃｃｅｓｓ  Ｐｏｒｔ  Ａｎｄ  Ｂｏｕｎｄａｒｙ−Ｓｃａｎ  Ａｒｃｈｉｔｅｃｔｕｒｅになった。すべてのＪＴＡＧ（すなわち、ＩＥＥＥ  Ｓｔｄ．１１４９．１）対応の装置は、試験命令および試験データを装置に逐次にロードすることができるようにし、その後の試験結果を装置から逐次に読み取ることができるようにするレジスタを含む。標準に適合するのに、構成要素は、ある基本的試験機能を有していなければならないが、標準により、設計者は、自身の独自の要件を満たす試験機能を追加できるようになる。
【００１７】  次に、プログラム・カウンタ（ＰＣ）１４を含む従来のシーケンサ１２を有するＤＳＰ１０などのプロセッサをブロック図で示す図１を参照する。レジスタ１６が、マイクロプロセッサのコア・クロックの各「刻み」ごとにＰＣ内容を収集し、またレジスタ１６に接続されたサンプラ（サンプル回路）１８が、プロセッサのコア・クロックの動作とは非同期にレジスタ１６の内容をサンプリングする。
【００１８】  より詳細には、レジスタ１６が、バス１７上でプログラム・カウンタ１４の内容をパラレル式に受け取る。クロック生成器１９からのマイクロプロセッサ・コア・クロック（ＣＣＬＫ）の各刻みごとに、ライン２２上でＤＩＳＡＢＬＥ信号がアサート（ａｓｓｅｒｔ）されない限り、ＰＣ内容がレジスタ１６の中にロードされる。レジスタ１６が読み取られる際（以下を参照）、内容が読み取られるまでレジスタの内容が変更されるのを防止するため、中止され、プロセッサによって実行されない命令に関して不能信号はアサートされる。中止される命令には、プログラム・コードの中に存在するが、実行が条件付きであり、実行を可能にするその条件が生じなかったときの命令が含まれる。
【００１９】  サンプラ１８は、第１のレジスタ、またはレジスタ１６に接続されて、レジスタの出力をバス２６上でパラレル式に受け取るラッチ２４を含む。サンプリング・ラッチ２４は、マイクロプロセッサ・コア・クロックＣＣＬＫとは別の独立して動作する試験クロック（ＴＣＬＫ）によってクッロクされる。ラッチ２４は、シフト・レジスタ２８によってパラレル式に読み取られ、レジスタの内容が、ライン３２上にシリアル式にシフトアウトされることが可能である。シフト・レジスタ２８は、ＪＴＡＧ  ＥＭＵＰＣシフト・レジスタであることが可能である。
【００２０】  ＴＣＬＫ信号は、ラッチ２４をクロックしてプログラム・カウントを含むレジスタ１６の内容を捕捉するだけでなく、ライン３６上に現れるＳＡＭＰＬＥ信号で表されるとおり、ＰＣがサンプリングされるとき、ライン２２上でＤＩＳＡＢＬＥ信号を生成して（論理３４を介して）レジスタ１６を不能にすることも行う。つまり、ＳＡＭＰＬＥ信号が提供されるとき、ＤＩＳＡＢＬＥ信号が生成されて、レジスタ１６がＣＣＬＫクロックに応答するのを止めさせ、レジスタ１６の中で捕捉されるＰＣ内容が、読み取ることができる前に変更されないことを確実にするようにする。必要な場合、単にタイミング問題を解決し、プロファイル・レジスタ１６がラッチ２４によってサンプリングされる前に不能にされることを確実にするだけのために、必要のない可能性があり、当分野の技術の範囲内の設計上の詳細と見なされるべき論理３４が提供される。論理３４は、入力としてＴＣＬＫ信号およびＳＡＭＰＬＥ信号を受け取るものとして示しているが、ＴＣＬＫ信号およびＳＡＭＰＬＥ信号を必要な入力と見なしてはならない。
【００２１】  図２を参照すると、プログラム・カウンタ捕捉レジスタ１６の動作をよりよく理解することができる。例として、任意の所与のクロック・サイクル中、第１の命令が取り出され、直前の取り出された命令が復号化され、次の先行する命令が、評価され、条件付きで実行されるパイプライン式プロセッサを考慮されたい。一続きの６つの命令、Ａ〜Ｆを想定する。命令Ａ〜Ｃは、ＮＯＰ（動作なし）命令であり、命令Ｄは、Ａにジャンプする命令であり、また命令ＥおよびＦは、条件が満たされず、したがって、遭遇したとき、実行されるべきではないものと想定する条件侍き命令ＣＯＮＤ１およびＣＯＮＤ２である。図２は、一続きのプロセッサ・クロック・サイクルのそれぞれに関して、取り出された命令のシーケンスを行４２に示し、復号化された命令のシーケンスを行４４に示し、見かけでは実行された命令のシーケンス４６、ならびに命令ＥおよびＦが中止されるためにもたらされるレジスタの内容のシーケンス４８を示している。したがって、この仮想の例では、時間の５０％で、プロセッサが、命令Ｄを実行しているものと予期されることが分かる。プロファイリング・レジスタ１６の統計的に有効なサンプリングが行われる場合、実際、命令Ｄが半分の時間、実行されていることが分かる。これは、命令Ｄを効率的に実行すること、またはプログラム・コードを変更して、別の命令、より高速に実行されるコードで元のコードを置き換えることができることに注意を向けるべきであるという結論に設計者を導くことになる。
【００２２】  ＪＴＡＧ  ＥＭＵＰＣレジスタ２８からの出力は、プロセッサによって実行されるすべての命令のシーケンスではない。そうではなく、出力のサンプリングであり、各プロセッサ・クロック・サイクルごとに複数のクロック・サイクルを必要とする命令のシリアル・ビット・ストリームを提供する。
【００２３】  任意の一まとまりの統計情報の有効性に関して重要なのは、収集されたサンプルの数である。ランダムに収集されたサンプルの数が増大するにつれ、サンプルから抽出される情報の正確さも高まる。このことは、デバッガが、サンプリングをランダムに保ちながらも、可能な限り高速にサンプルを収集することを確実にするのが望ましいことを示す。好ましくは、これは、プロセッサからサンプルの妥当なサイズの「バースト」（例えば、３２〜６４サンプル）を収集することによって達せられる。
【００２４】  図１の破線４０の下の装置をオプションとして使用して、バースト・サンプリングを可能にする、または別の仕方で、サンプリング動作のランダム性のより高い信頼性を確実にすることができる。パーソナル・コンピュータまたはワークステーションなどのホスト・コンピュータ４２が、通信リンクまたはバス４４（例えば、ＰＣＩまたはＩＳＡバス）を介してインサーキット・エミュレータ（ＩＣＥ）４６にコマンドを発行し、このコマンドは、インサーキット・エミュレータ４６が，ＳＡＭＰＬＥ信号をライン３６上で発行するようにさせるものである。インサーキット・エミュレータは、ホスト・コンピュータとＪＴＡＧポートの間でコマンド変換およびプロトコル変換を提供する従来の装置または回路である。また、インサーキット・エミュレータは、本明細書でＴＣＬＫクロックとラベル付けした、ＪＴＡＧシフト・レジスタおよび他のポート構成要素によって使用されるクロックを生成して、ＪＴＡＧポートに供給する。ホストは、ＩＣＥおよびサンプラ１８によって使用されるＴＣＬＫクロックとは非同期して独自の内部クロックで動作する。また、サンプラのＴＣＬＫクロックも、プロセッサ・クロックＣＣＬＫに関して非同期であり、独立である。したがって、ホスト・システムによるサンプリング・コマンドのアサートとＳＡＭＰＬＥ信号のアサートの間で本来的でランダムな遅延（クロック・サイクル間隔内）が存在する。
【００２５】  ホストは、通常、ある間隔中、サンプリングを求め、ある間隔中、待ち、次にある間隔中、再びサンプリングを行い、これらの間隔のそれぞれは、１つまたは複数の（必ずしも量が一様でない）プロセッサ・クロック・サイクルの継続時間を有する。
【００２６】  ＩＣＥを介してサンプリングされたプログラム・カウンタ内容をホストにフィードバックすることができ、ホストが、任意の従来の統計分析ソフトウェアまたはカスタムの統計分析ソフトウェアを実行して、サンプリングされたプログラム・カウントの分布を計算し、かつ／または表示することが可能である。所望される場合、示していないが、各サンプルにタイムスタンプを押して、経過時間統計を作成できるようにすることも可能である。
【００２７】  したがって、本発明が、プログラムの実行のダイナミックスを変更することなく、システムの速度を低下させることなく、またソース・レベルまたはマシン・コード・レベルのどちらでもプログラム・コードに対する変更を全く必要とすることなく、デジタル信号プロセッサなどのプロセッサ上におけるプログラム命令の実行を監視し、分析するための装置および方法を提供することが分かる。したがって、プログラム・コードのパフォーマンスを分析するため、プログラム・コードのコンパイルをやり直す、またはアセンブルをやり直す必要が全くない。また、プログラムのどこに、区切り点を挿入することが有益である可能性があるかを先験的に知っている必要もない。プログラム全体の動作が、統計的に監視され、したがって、先験的仮定は、全く必要ない。命令利用が非侵入式に追跡される。
【００２８】  したがって、本発明のいくつかの実施形態を示したが、これらの実施形態は、説明のために例としてだけ提示しており、限定するものではない。当分野の技術者には、開示した実施形態の変形形態、ならびに全く新しい実施形態が容易に考えられよう。そのような改変形態、変更形態、拡張形態、および追加形態は、本発明の趣旨および範囲の中にあるものとされ、本明細書で示唆されるものである。例えば、ホスト・コンピュータは、汎用コンピュータである必要はなく、例えば、専用試験システム、または限られた機能性の他の装置、またはハンドヘルド・プログラマブル計算機であることが可能である。ラッチとして説明した要素は、他の適切なタイプのレジスタであることが可能である。命令を１回に１つづつサンプリングすること、または一続きの複数の命令の連続でサンプリングすることが可能である。サンプリングは、ＪＴＡＧレジスタ以外の専用レジスタまたはその他のレジスタを介して実行することも可能である。これらは、当分野の技術者には考えられ、カバーされるものである本発明の主題の変形形態のいくつかに過ぎない。したがって、本発明は、頭記の特許請求の範囲および等価内容によってだけ限定されるものとする。
【図面の簡単な説明】
【図１】  本明細書で説明するとおり、ある部分はオプションであり、必要不可欠ではない本発明によるシステムを示すブロック図である。
【図２】  本発明によるサンプラが、プログラム・フローの中に条件付き命令が存在してプログラム・カウンタ捕捉レジスタを動作させ、実際に実行された命令だけを捕捉するようにする仕方を示す図である。
【図１】
0005356635.tif 000002
【図２】
0005356635.tif 000003