データ処理システムのプロセッサにおいてアプリケーションコードをデバッグするための方法であって、前記プロセッサのハードウェアユニットにおいて命令を受け取るステップであって、前記命令は、前記データ処理システムのメモリにおいて前記命令がアクセスしようとしているターゲットメモリアドレスを有する、ステップと、前記ハードウェアユニットに関連付けられたコンテントアドレッサブルメモリCAMを、前記ターゲットメモリアドレスに対応した前記CAMにおけるエントリに関してサーチするステップと、前記ターゲットメモリアドレスに対応した前記CAMにおけるエントリが見つかったことに応答して、前記エントリにおける情報が前記受け取られた命令を関連ある命令として識別するかどうかを判断するステップと、前記エントリにおける情報が前記受け取られた命令を関連ある命令として識別したことに応答して、例外を発生し、前記例外を例外ハンドラ又はデバッガアプリケーションの1つに送るステップと、を含む、方法。前記CAMをサーチするステップは、前記ターゲットメモリアドレスが提示するメモリアドレスの範囲に対応した開始アドレス及び長さを有するエントリに関して前記CAMにおけるエントリをサーチするステップを含む、請求項1に記載の方法。前記エントリにおける情報が前記受け取られた命令を関連ある命令として識別するかどうかを判断するステップは、前記受け取られた命令のタイプを決定するステップと、前記受け取られた命令のタイプが、例外を発生すべき命令のタイプであるということを前記エントリにおける値が表わすかどうかを判断するステップと、前記受け取られた命令のタイプが、例外を発生すべき命令のタイプであるということを前記エントリにおける値が表わすことに応答して、前記受け取られた命令が関連ある命令であるということを決定するステップと、を含む、請求項1に記載の方法。前記受け取られた命令のタイプがロード命令又はストア命令の1つであり、ロード命令又はストア命令のどちらが関連ある命令であるかどうかを前記エントリにおける値が表わす、請求項1に記載の方法。前記CAMにおけるエントリは、デバッグのためにモニタされる前記メモリにおけるアドレスの範囲を識別するためにデバッガアプリケーションによって作成される、請求項1に記載の方法。前記例外ハンドラは、前記例外のときに特定の変数の状態を記録することによって、アプリケーションコード実行中に前記特定の変数が修正されようとしている前記アプリケーションコードにおける場所を決定する、請求項1に記載の方法。前記例外ハンドラは、前記受け取られた命令が変数のターゲットアドレスを操作するかどうかをチェックすることによって、前記受け取られた命令が前記変数のターゲットアドレスをアクセスしようとする前に保護同期オブジェクトが他のスレッドによって獲得されてしまっても、競合状態をチェックし、前記受け取られた命令が変数のターゲットアドレスをアクセスしようとする前に他のスレッドが前記変数に対する保護同期オブジェクトを獲得していた場合、前記受け取られた命令が前記変数のターゲットアドレスを操作しないときには競合状態は存在しない、請求項1に記載の方法。前記プロセッサは、複数個のCAMを、前記プロセッサによってサポートされる実行の各スレッドに対して1つずつ維持する、請求項1に記載の方法。前記CAMにおけるエントリは、開始アドレス、長さ、及び関連ある命令のタイプを識別する1つ又は複数個のビットを含み、前記1つ又は複数個のビットを所定の値にセットすることは、対応するタイプの命令が例外を発生すべき関連ある命令であるということを表わす、請求項1に記載の方法。前記例外ハンドラは、前記受け取られた命令が、対応する同期オブジェクトを獲得せずに変数のターゲットアドレスを操作するかどうかをチェックする、請求項1に記載の方法。コンテントアドレッサブルメモリCAMを有するハードウェアユニットを含むプロセッサと、前記プロセッサに結合されたメモリと、を含み、前記プロセッサは請求項1乃至10のいずれかに記載のステップを遂行するように構成される、データ処理システム。コンピュータ記録可能媒体に記録されたコンピュータプログラムであって、コンピュータにおいて実行されるとき、前記コンピュータに請求項1乃至10のいずれかに記載のステップを遂行させる、コンピュータプログラム。本発明の目的は、データ処理システムのプロセッサにおいて、アプリケーションコードをデバッグするための方法を提供することにある。本方法は、プロセッサのハードウェアユニットにおいて命令を受け取るステップを含み、その命令は、それがアクセスしようとしているターゲットメモリアドレスを有する。更に、その方法は、ハードウェアユニットに関連したコンテントアドレッサブルメモリCAMを、ターゲットメモリアドレスを含むアドレスの範囲を指定するそのCAMにおけるエントリに関してサーチするステップを含む。更に、その方法は、ターゲットメモリアドレスを含むアドレスの範囲を指定するそのCAMにおけるエントリを見つけたことに応答して、そのエントリにおける情報が命令を関連ある命令として識別するかどうかを判断するステップを含む。更に、その方法は、エントリがその命令を関連ある命令として識別したことに応答して、例外を発生し、その例外を例外ハンドラ又はデバッガアプリケーションの1つに送るステップを含む。更に、その方法は、プログラムにおける種々のスレッド間で共用される変数を含むアドレスの範囲を、プログラマがそのハードウェアに関連したCAMにロードするステップを含む。更に、その方法は本発明の実施例に従って、アプリケーションスレッドを実行するすべてのハードウェアスレッドのCAMをセットするステップを含む。しかる後、プログラムは実行され、スレッドがCAMにおける指定された範囲における変数をアクセスする場合、アプリケーションが、その変数をアクセスする前に、必要な同期構成体を獲得したことをデバッガが確認する。保護のない変数へのアクセスは、従来のデバッギングにおいて検知することが難しい同期バグの可能性がある。別の実施例では、コンピュータ可読プログラムとしてコンピュータ使用可能媒体又は可読媒体に格納され得るコンピュータプログラムが提供される。コンピュータ可読プログラムは、コンピューティング装置において実行されるとき、そのコンピューティング装置に、方法の実施例に関して上述された種々のオペレーション及びそれらオペレーションの組み合わせを遂行させる。更に別の実施例では、システム/装置が提供される。そのシステム/装置は、1つ又は複数個のプロセッサ及びその1つ又は複数個のプロセッサに結合されたメモリを含み得る。メモリは、1つ又は複数個のプロセッサによって実行されるときに方法の実施例に関して上述された種々のオペレーション及びそれらのオペレーションの組み合わせを、前記1つ又は複数個のプロセッサに遂行させる命令を含み得る。本発明のこれらの及び他の特徴並びに利点は、本発明の実施例に関する下記の詳細な説明において記述されるし、その説明から見て当業者には明らかであろう。本実施例は、マルチスレッドコンピュータコードに対してデバッグサポートを施すための機構を提供する。本実施例の機構は、アプリケーションがメモリにおけるいくつもの範囲へのメモリアクセスを追跡することを可能にするハードウェアサポートを提供する。そのハードウェアサポートは、アプリケーションによって又はアプリケーションを制御するデバッガによってセットされ得るコンテントアドレッサブルメモリCAM構造を含む。CAM構造における各エントリは、モニタされているメモリ範囲の開始アドレスを指定する開始アドレスを有する。更にそのエントリは長さフィールドを含み、その長さフィールドは、そのエントリに対応したモニタされるメモリの範囲のサイズを指定する長さフィールド、開始アドレス及び長さによって定義されるメモリの範囲に対するメモリストア及びメモリロードの検知をそれぞれ可能にするストアビット即ち、Sビット及びロードビット即ち、Lビットを含む。ハードウェアレベルでは、プロセッサが、実行中のスレッド内におけるメモリへのすべてのアクセスをチェックする。メモリアクセスのアドレスがCAMにおけるエントリの1つと適合する場合、即ち、そのアドレスが、CAMにおけるエントリに対応するメモリの範囲内にある場合、ハードウェアは例外を送出する。例外は、スタック上のスレッドの状態を格納させ、ソフトウェアで例外処理ルーチンへ実行をジャンプさせる。メモリアクセスがストアであり、対応するSビットが所定値、例えば、1にセットされているとき、その対応するアドレスがCAMエントリの1つによって決定された範囲にある場合、CAMにおけるエントリへのアクセスのアドレスの適合が生じる。メモリアクセスがロードであり且つ対応するLビットが所定値、例えば、1にセットされているCAMエントリの1つよって決定された範囲に、その対応するアドレスがある場合、適合が生じる。Sビット又はLビットが所定値にセットされてない場合、例えば、Sビット又はLビットが0にセットされ且つアクセスがそれぞれストア又はロードである場合、適合は無視される。アプリケーションをデバッグするためには、アプリケーション又はそのアプリケーションを制御するデバッガが、モニタされるべきメモリ範囲をCAMエントリの1つにセットされ、モニタされた範囲へのすべてのメモリアクセスの際に発生された例外を処理するために、例外ハンドラが提供され得る。例えば、例外の時にその特定の変数の状態とパフォーマンスカウンタ等によって発生され得るような他の実行パラメータとを記録することにより、アプリケーションのコードにおけるどこの特定の変数が実行中に修正されるかを決定するために、例外ハンドラが使用され得る。CAM構造は、実行拡張を生じ得る如何なるパフォーマンスオーバヘッドもない複数個のメモリ範囲をハードウェアが同時にモニタすることを可能にする。マルチスレッドアプリケーションをデバッグするためには、アプリケーション又はデバッガは、保護同期オブジェクト、例えば、ロックがアクセスに先立って別のスレッドにより得られているとき、受け取られた命令が変数のメモリアドレスに対してストア又はロードを行なうかどうかをチェックするように例外ハンドラをセットし得る。そのチェックの結果が否定的である場合、これは競合状態又は共用変数へのデーモニックアクセスの一例である。それは一般的ではあり、マルチスレッドアプリケーションにおいてバグを見つけることが難しい。保護同期オブジェクトがアクセスの前に得られている場合、競合状態又は共用変数へのデーモニックアクセスは遭遇していない。バグを見つけ難い他のタイプのものは、デバッグ例外の発生にサポートを提供するために、及びデバッグを目的としてトレース情報を収集するに適した例外ハンドラへの実行のブランチにサポートを提供するために、実施例のハードウェア機構を使用して見つかり得る。実施例の機構は、多くの様々なタイプのデータ処理システム及びプロセッサのアーキテクチャにおいて使用し得る。その実施例は、シングルプロセッサの順次処理アーキテクチャ及び複数プロセッサのマルチスレッドデータ処理システムアーキテクチャの両方において使用され、コンピュータプログラムのデバッグに対してハードウェアサポートを提供する。しかし、この説明のために、実施例の機構が具現化されるデータ処理システムは、マルチスレッドハードウェアを提供するマルチプロセッサ又は、マルチコアデータ処理システムであると仮定する。しかし、実施例及び本発明がそのようなものに限定されないことは明らかである。当業者には明らかなように、本発明は、システム、方法、又はコンピュータプログラムとして具体化され得る。従って、本発明は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例ファームウェア、駐在ソフトウェア、マイクロコード等を含む、又は本明細書では一般的に回路、モジュール、又はシステムと呼ばれ得るソフトウェア及びハードウェア態様を結合した実施例の形態を取り得る。更に、本発明は、任意の実体的な表現媒体においてコンピュータ使用可能プログラムコードで具現化されたコンピュータプログラムの形態を取り得る。1つ又は複数個のコンピュータ使用可能媒体又はコンピュータ可読媒体の任意の組合せが利用し得る。例えば、コンピュータ使用可能媒体又はコンピュータ可読媒体は、例えば、電子的、磁気的、光学的、電磁気的、赤外線もしくは半導体システム、装置、デバイス、或いは伝播媒体であってもよいが、それらに限定されない。コンピュータ可読媒体の更に特殊な例完全無欠でないリストは、下記のもの、即ち、1つ又は複数個のワイヤ有する電気的接続線、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM、リードオンリメモリROM、消去可能プログラマブルリードオンリメモリEPROM又はフラッシュメモリ、光ファイバ、ポータブルコンパクトディスクリードオンリメモリCDROM、光学的記憶装置、インターネットもしくはイントラネットをサポートするような伝送媒体、或いは磁気記憶装置を含むであろう。プログラムは、例えば、用紙又は他の媒体の光学的スキャンによって電子的に捕捉され、しかる後、コンパイルされ、解釈され、或いは、必要な場合に適切な方法で処理され、しかる後、コンピュータメモリに格納され得るので、コンピュータ使用可能媒体又はコンピュータ可読媒体は、用紙又はプログラムが印刷される他の適切な媒体であってもよい。本明細書の記載において、コンピュータ使用可能媒体又はコンピュータ可読媒体は、命令実行システム、装置、又はデバイスによって、或いはそれに関連して使用するのためのプログラムを含み、格納し、伝送し、伝播し、又は搬送し得る任意の媒体であってもよい。コンピュータ使用可能媒体は、ベースバンドにおいて又は搬送波の一部として具体化されたコンピュータ使用可能プログラムコードを備えた伝播データ信号を含み得る。コンピュータ使用可能プログラムコードは、無線、有線、光ファイバケーブル、無線周波RF等を含むが、それらに限定されない任意の適切な媒体も使用して伝送することが可能である。本発明のオペレーションを実行するためのコンピュータプログラムコードは、Java商標、Smalltalk商標、C等のようなオブジェクト指向プログラミング言語、及びCプログラミング言語又は同様のプログラミング言語のような通常の手続き型プログラミング言語を含む1つ又は複数個のプログラミング言語の任意の組み合せで書くことが可能である。プログラムコードは、ユーザのコンピュータにおいて全体的に、ユーザのコンピュータにおいて部分的に、スタンドアロンパッケージソフトとしてユーザのコンピュータにおいて部分的に及びリモートコンピュータにおいて部分的に、或いはリモートコンピュータ又はサーバにおいて全体的に実行することが可能である。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワークLAN又は広域ネットワークWANを含む任意のタイプのネットワークを介してユーザのコンピュータに接続され得るし、その接続は、外部コンピュータに例えば、インターネットサービスプロバイダを使用してインターネットを介して行なうことが可能である。更に、プログラムコードは、サーバ又はリモートコンピュータにおけるコンピュータ可読記憶媒体上に具現化され、記憶及び/又は実行のためにネットワークを介してリモートコンピュータ又はユーザのコンピュータのコンピュータ可読記憶媒体にダウンロードされてもよい。更に、コンピューティングシステム又はデータ処理システムのいずれも、リモートコンピューティングシステム又はデータ処理システムからネットワークを介してプログラムコードをダウンロードした後、コンピュータ可読記憶媒体にそのプログラムコードを格納し得る。本実施例は、本発明に従って、方法、装置システム、及びコンピュータプログラムのフローチャート及び/又はブロック図に関連して以下で説明される。フローチャート及び/又はブロック図の各ブロック、並びに、フローチャート及び/又はブロック図におけるブロックの組み合せは、コンピュータプログラム命令によって具現化することができる。これらのコンピュータプログラム命令は、汎用コンピュータ、特殊目的コンピュータ、又はマシンを生産する他のプログラム可能データ処理装置のプロセッサに提供され、従って、そのコンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令は、フローチャート及び/またはブロック図のブロックにおいて指定された機能/行為を具現化するための手段を形成する。これらのコンピュータプログラム命令は、コンピュータ可読媒体に格納され、特定の態様で機能するようにコンピュータ又は他のプログラム可能データ処理装置を指示し得る。従って、コンピュータ可読媒体に格納された命令は、フローチャート、ブロック図のブロックにおいて指定された機能/行為を具現化する命令手段を含む製品を産出する。コンピュータプログラム命令は、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び/又はブロック図のブロックにおいて指定された機能/行為を具現化するためのプロセスを提供するよう、コンピュータ利用のプロセスを創出する一連の動作ステップをコンピュータ又は他のプログラム可能データ処理装置において遂行させるためにコンピュータ又は他のプログラム可能データ処理装置上にロードされ得る。図面におけるフローチャート及びブロック図は、本発明の種々の実施例に従ってシステム、方法及びコンピュータプログラムの可能な実施態様のアーキテクチャ、機能、及びオペレーションを表わす。これに関して、フローチャートまたはブロック図における各ブロックは、モジュール、セグメント、又はコード部分を表わし、そのコード部分は、指定された論理的機能を具現化するための1つ又は複数個の実行可能な命令を含む。或る別の実施態様では、ブロックに示された機能は図面に記載された順序を外れて生じ得るということに留意されたい。例えば、順次態様で示された2つのブロックが実際には実質的に同時に実行されることがあり、或いは、それらのブロックは関連する機能に依存して逆の順序で実行されることがある。更に、ブロック図及び/又はフローチャートの各ブロック、並びにブロック図及び/又はフローチャートにおけるブロックの組み合せは、指定された機能又は行為、或いは特殊目的ハードウェア及びコンピュータ命令の組み合せを遂行する特殊目的のハードウェアベースのシステムによって具現化されてもよいということも留意されたい。図1を参照すると、機能ユニット及びレジスタを示すデュアルスレッドプロセッサ設計の例示的ブロック図が実施例に従って示される。プロセッサ100は、例えば、デュアルスレッドデータ処理システムアーキテクチャにおける1つ又は複数個の処理装置として具現化され得る。即ち、プロセッサ100は、複数個のスレッドの同時実行をサポートする1つまたは複数個のプロセッサコアを含み得る。例えば、プロセッサ100は、単一スレッドモードにおいても操作され得るデュアルスレッド同時マルチスレッドSMTを備えた単一集積回路スーパースカラマイクロプロセッサを含み得る。従って、以下で更に検討されるように、プロセッサ100は、種々のユニット、レジスタ、バッファ、メモリ、及び他のセクションを含み、それらのすべては集積回路によって形成される。本明細書では説明目的のために特定のプロセッサアーキテクチャ及び特定のマルチスレッド機能に対して言及されるが、実施例の機構は、任意のレベルのマルチスレッド、例えば、デュアルスレッド、クワッドスレッド等をサポートする任意のプロセッサアーキテクチャに適用可能であるということは明らかであろう。図1に示されるように、命令フェッチユニットIFU102は命令キャッシュ104に接続している。命令キャッシュ104は、実行される多数のプログラムスレッドに対する命令を保持する。命令キャッシュ104は、更にレベル2L2キャッシュ/メモリ106に対するインターフェースも有する。IFU102は、命令アドレスに従って命令キャッシュ104からの命令を要求し、命令デコードユニット108に命令を送る。実施例では、IFU102は、同時に2個までのスレッドに対して命令キャッシュ104から複数個の命令を要求し得る。命令デコードユニット108は、同時に2個までのスレッドに対する複数個の命令をデコードし、デコードされた命令を命令シーケンサユニットISU109に送る。プロセッサ100は、ISU109からのデコードされた命令を受け取る送出キュー110を含み得る。命令は、適切な実行ユニットへのディスパッチを待つ間、送出キュー110に格納される。アウトオブオーダプロセッサがインオーダ態様で作動するために、ISU109は、各命令間の疑似従属関係を素早く使って選択的に命令を送出し得る。命令がリードアフタライトのような従属関係でデータを生じない場合、ISU109は、前のターゲット命令プロデューサとも呼ばれるを指すために、1つの命令につき1つの付加的ソースオペランドコンシューマとも呼ばれるを付加し得る。送出キュー110は、それがプロデューサを送出する場合、送出のためにコンシューマをウェイクアップし得る。疑似従属関係を導入することによって、一連の従属命令が作成され得るし、その後、それらの命令は単にインオーダ態様で送出され得る。ISU109は、その付加されたコンシューマを命令スケジューリングのために使用し、命令は、それが実行されるとき、その付加された従属関係からのデータを実際には使用しない。一旦ISU109が任意の必要な疑似従属関係を選択的に付加すると、その後は、送出キュー110が継承して各スレッドに対して順序どおりに命令を送出し、各スレッドに対する命令をプロセッサの実行ユニット112、114、116、118、120、122、124、126、及び128に出力又は送出する。実施例では、プロセッサの実行ユニットは、ブランチユニット112、ロード/ストアユニットLSUA114及びLSUB116、固定小数点実行ユニットFXUA118及びFXUB120、浮動小数点実行ユニットFPUA122及びFPUB124、並びに、ベクトルマルチメディア拡張ユニットVMXA126及びVMXB128を含み得る。実行ユニット112、114、116、118、120、122、124、126、及び128は両方のスレッドをわたって完全に共用され、それは、実行ユニット112、114、116、118、120、122、124、126、及び128が一方又は両方のスレッドから命令を受け取り得るということを意味する。プロセッサは、設計済みレジスタファイルARFとも呼ばれ得る多数のレジスタセット130、132、134、136、138、140、142、144、及び146を含む。ARFは、一旦命令が実行を完了すると、完成したデータが保存されるファイルである。ARF130、132、134、136、138、140、142、144、及び146は、2つのスレッドの各々に対して及び命令のタイプによって別々にデータを、即ち、汎用レジスタGPR130及び132、浮動小数点レジスタFPR134及び136、特殊目的レジスタSPR138及び140、並びにベクトルレジスタVR144及び146に格納し得る。完成したデータをタイプによって及びスレッドによって別々に格納することは、命令を処理している間のプロセッサ競合を減らすことに役立つ。プロセッサは、更に、命令ポインタ、スタックポインタ、又はプロセッサステータスワードのような、一方又は両方のスレッドに関連して使用され得るプログラム状態を保持する共用の特殊目的レジスタSPR142のセットを含む。実行ユニット112、114、116、118、120、122、124、126、及び128が、単純化された内部バス構成体149を介してARF130、132、134、136、138、140、142、144、及び146に接続される。浮動小数点命令を実行するために、FPUA122及びFPUB124は、1つの命令を実行するために必要な命令データが完全である場合、又はそのデータがパイプラインにおけるフラッシングのポイントを通った場合、命令を実行するために必要な入力データであるレジスタソースオペランド情報をFPR134及び136から検索する。完全なデータは、一旦命令が実行を完了すると実行ユニットによって生成されるデータであり、ARF130、132、134、136、138、140、142、144、及び146のようなARFに格納される。不完全なデータは、命令が実行を完了していない命令実行中に生成されたデータである。FPUA122及びFPUB124は、各実行中の命令がどのスレッドに属するかに従ってそれらのデータを入力する。例えば、FPUA122、FPUB124、FPR134、及び136がスレッド特有のものであるので、FPUA122はFPR134に完成したデータを入力し、FPUB124はFPR136に完成したデータを入力する。命令の実行中、FPUA122及びFPUB124は、その命令がパイプラインにおけるフラッシングのポイントを通過したとき、それらの宛先レジスタオペランドデータ又はその命令の実行中に発生された命令データをFPR134及び136に出力する。命令の実行中、FXUA118、FXUB120、LSUA114及びLSUB116は、その命令がパイプラインにおけるフラッシングのポイントを通過したとき、それらの宛先レジスタオペランドデータ又はその命令の実行中に発生された命令データをGPR130及び132に出力する。命令のサブセットの実行中、FXUA118、FXUB120、及びブランチユニット112は、その命令がパイプラインにおけるフラッシングのポイントを通過したとき、それらの宛先レジスタオペランドデータをSPR138、140、及び142に出力する。SPR138及び140に格納された命令ポインタ、スタックポインタ、又はプロセッサステータスワードのようなプログラム状態は、スレッド優先順位152をISU109に表示する。命令の実行中、その命令がパイプラインにおいけるフラッシングのポイントを通過したとき、VMXA126及びVMXB128は、それらの宛先レジスタオペランドデータをVR144及び146に出力する。データキャッシュ150は、それと、プロセッサからのデータを受領してそれをレベル2キャッシュ/メモリ106を直接書き込む非キャッシュ可能ユニット図示されてないとを関連付け得る。この方法では、非キャッシュ可能ユニットは、キャッシュするための記憶装置を必要とするコヒーレンスプロトコルを回避する。命令キャッシュ104から入力され、命令デコードユニット108によってデコードされた命令に応答して、ISU109は、その命令を選択的に送出キュー110にディスパッチし、しかる後、命令タイプ及びスレッドに関しては実行ユニット112、114、116、118、120、122、124、126、及び128上にディスパッチする。一方、実行ユニット112、114、116、118、120、122、124、126、及び128は、特定のクラス又はタイプの命令のうちの1つ又は複数個の命令を実行する。例えば、FXUA118及びFXUB120は、レジスタソースオペランドに関して、加算、減算、AND、OR、及びXORのような固定小数点の数学的演算を実行する。FPUA122及びFPUB124は、レジスタソースオペランドに関して、浮動小数点の乗算及び除算のような浮動小数点の数学的演算を実行する。LSUA114及びLSUB116は、データキャッシュ150と、ARF130、132、134、及び136との間でオペランドデータを移動させるロードアンドストア命令を実行する。VMXA126及びVMXB128は、複数個のデータを含む単一の命令オペレーションを実行する。ブランチユニット112は、命令キャッシュ104からの命令を要求するようにIFU102によって使用される命令アドレスを修正することにより、プログラムを介して実行のフローを条件付で変更するブランチ命令を実行する。命令完了ユニット154は、実行ユニット112、114、116、118、120、122、124、126、及び128において実行される命令がそれらのオペランド結果をARF130、132、134、136、138、140、142、144、及び146に書き込むことを終了したときを決定するために、内部バス構造149をモニタする。ブランチユニット112、FXUA118、FXUB120、LSUA114及びLSUB116によって実行される命令は、実行のために同じサイクル数を必要とするが、FPUA122、FPUB124、VMXA126、及びVMXB128によって実行される命令は、実行のために可変の及び更に大きいサイクル数を必要とする。従って、グループ化され且つ同時に実行を開始した命令が必ずしも同時に実行を終了するとは限らない。1つの命令の完了は、その命令が実行ユニット112、114、116、118、120、122、124、126、又は128の1つにおける実行を終了しつつあり、フラッシングのポイントを通過してしまい、命令が順序どおりに完了しなければならないのですべてのそれ以前の命令が設計済み状態で既に更新されてしまったということを意味する。従って、その命令は今や完了し、設計済み状態を更新する準備ができている。それは、その命令が完了してしまったので、データの最終的状態の更新を意味する。その設計済み状態は、単に順序どおりに更新され得るだけである。即ち、命令は、順序どおりに完了しなければならず、完成したデータは、各命令が完了するときに更新されなければならない。命令完了ユニット154は命令の完了をモニタし、更なる情報グループが実行ユニット112、114、116、118、120、122、124、126、及び128にディスパッチされ得るということをISU109に通知する制御情報156をISU109に送る。ISU109は、ディスパッチユニットへのパイプラインに更なる命令をもたらすスロットルとして働くディスパッチ信号をIFU102及び命令デコードユニット108に送り、それが更なるデコードされた命令を受け取る準備ができていることを表わす。プロセッサ100は、単一スレッドモードでも操作され得るデュアルスレッド同時マルチスレッディングSMTを備えた単一集積回路スーパスカラマイクロプロセッサに関する1つの詳細な説明を提供するが、本実施例はそのようなマイクロプロセッサに限定されない。即ち、本実施例は、パイプライン技術を使用する任意のタイプのプロセッサにおいて具現化され得る。図1に示されたアーキテクチャでは、1つ又は複数個のロード/ストアユニット114及び116が本実施例の機構を具現化するためのハードウェアコンテントアドレッサブルメモリCAM構造及びロジックを含むように拡張され得る。コンテントアドレッサブルメモリCAMは、サーチ集中アプリケーションのためのアルゴリズム手法よりもはるかに高速の特別タイプのハードウェア検索エンジンである。CAMは、サーチ操作が単一のプロセッサクロックサイクルで完了することを可能にする追加比較回路を備えた一般的な半導体メモリ、通常、SRAMで構成される。CAMに関する更なる情報に関しては、IEEEJournalofSolidStateCircuitsVol41No3pp712727March2006におけるContentAddressableMemoryCircuitsandArchitecturesATutorialandSurveyと題したPagiamtzis氏他による論文を参照されたい。ロード/ストアユニットのロジック及びそれのCAM構造は、デバック情報の収集を促進するためには例外を発生しなければならないロード/ストアオペレーションがターゲットとするメインメモリのようなメモリの範囲を定義するようにアプリケーション、デバッガ等によって構成し得る。プロセッサは、デバッガ又はアプリケーションが、例えば、或る範囲に関してCAM構造をロードするために、CAM構造にアクセスすること並びに対応するS及びLビットをセットすることを可能にするために、特別の命令によって補強される。更に、その命令は、デバッグが起こっていないときには、エネルギを節約するためにアプリケーションがCAMをすべてオフにすることを可能にする。アプリケーション又はデバッガは、そのメモリの範囲の開始アドレスと、そのメモリの範囲の長さと、そのメモリの範囲に対するロード、ストア、或いは、ロード及びストアが、例外ハンドラ又はデバッガアプリケーションによる処理のための例外を発生するためのものであるかどうかと、を指定するエントリをCAM構造において作成する。この情報はCAM構造におけるエントリに格納され、アクセスオペレーションのアドレスがCAM構造におけるエントリの1つにより指定された範囲以内にあるかどうかを判断するためにアクセスオペレーションのアドレスに基づいてサーチ可能である。その判断の結果が肯定的であり、アクセスオペレーションが、例外を発生するアクセスオペレーションであるとして表わされるものである場合、その例外は、デバッグ情報を収集するために及び/又はアプリケーションの実際のデバッグを行うために例外ハンドラ又はデバッガのいずれかによって発生され、処理され得る。これは、アプリケーションがマルチスレッドアプリケーションであってもなくても行われ得る。例外ハンドラ又はデバッガは、競合状態又は共用変数へのデーモニックアクセスのようなマルチスレッドアプリケーションにおけるバグを見つけるのが困難であるものを識別するように構成され得る。例えば、競合状態又はデーモニックアクセスをチェックするために、例外ハンドラ又はデバッガは、アクセスオペレーションを提示したスレッドがアクセスオペレーションを試みる前にアクセスオペレーションにおけるアドレスによって指定されたメモリロケーションにおけるロックを捕捉したかどうかを知るためにチェックし得る。その捕捉の結果が肯定的である場合、デバッガ又は例外ハンドラは如何なるアクションも遂行し得ず、代わりに、アプリケーションが実行を再開することを可能にし得る。しかし、そのアクセスオペレーションを試みたスレッドがメモリロケーションに対して最初にロックを捕捉しなかった場合、デバッガ又は例外ハンドラは、アプリケーションの実行を引き継ぎ、アプリケーションコードにおける潜在的なバグを識別する分析において使用するためにデバッグまたはトレース情報を検索し得る。アクセスオペレーションが例外を発生するアクセスオペレーションであるとして表わされないアクセスオペレーションである場合、又は、アクセスオペレーションのアドレスが、CAMにおけるエントリによって定義されたメモリの範囲の1つ内ではない場合、そのアクセスオペレーションは例外を発生せずに行なわれ得る。図2は、1つの実施例に従ってロード/ストアユニットの例示的ブロック図を示す。図2に示されるように、ロード/ストアユニット230は、1つ又は複数個のCAMエントリ及びサーチロジック249を有するコンテントアドレッサブルメモリCAMを含むように拡張されている。各CAMエントリは、開始アドレス242、長さ244、ストアビットSビット246、及びロードビットLビット248を含む。開始アドレス242及び長さ244は、CAM240を使ってモニタされるべきメモリのアドレスの範囲を定義する。開始アドレス242及び長さ244は、特定の実施態様に依存して、有効アドレス、仮想アドレス、実アドレス又は物理アドレス等によって指定され得る。Sビット246及びLビット248は、対応する開始アドレス242及び長さ244によって指定されたメモリのアドレス範囲をターゲットとするストア命令/オペレーション及びロード命令/オペレーションの一方又は両方がモニタされるべきであるかどうか、即ち、例外処理を必要とする例外を発生すべきであるかどうかを指定する。或る実施態様では、プロセッサアーキテクチャにおいて実行中のすべてのスレッドによって実行されるロード/ストア命令を処理するために、単一のCAM構造240が使用され得るということを留意されたい。それとは別に、CAM構造240がスレッドコンテキストに関連付けられるように、スレッドの各々に対して個別のCAM構造240が提供されてもよい。従って、ロード/ストアユニット230は、複数個のCAM構造240を、プロセッサにおいて実行される各スレッドに対して1つずつ有し得る。或いは、複数個のロード/ストアユニット230を有するアーキテクチャでは、各ロード/ストアユニット230は、それらが扱うスレッドの各々に対して1つまたは複数個のCAM構造240を持ってもよい。各スレッドに対して1つずつとする複数個のCAM構造240の場合、CAM構造240は、特定のスレッドのスレッドコンテキスト情報において指定され得るスレッドに対応する。アプリケーション又はデバッガの280は、メモリの或るアドレス範囲がモニタされ、或る命令、例えば、メモリのモニタされたアドレス範囲をターゲットとするストア及び/又はロード命令がモニタされるように、CAM240においてエントリを生成し得る。実施例の機構によっては、必ずしも、モニタされたメモリのすべての部分がモニタされる必要がないということは明らかであろう。それと対照的に、実施例の機構は、アプリケーション又はデバッガ280がメモリの個々の部分、即ち、メモリの個々のアドレス範囲をターゲットとすることを可能にするので、ターゲットとされたトレーシング及びデバッギングが遂行され得る。例えば、CAMにおけるエントリは、特定の変数に対応するメモリのアドレス範囲に関連付けられ得るし、従って、実施例の機構はこの変数に関してアプリケーションコードの実行をトレース及びデバッグするために使用され得る。CAM240のサーチロジック249は、同じプロセッササイクルにおいてCAM240内のすべてのエントリを素早くサーチして、入力アドレスに適合するエントリがあるかどうかを判断するために使用される。詳しく云えば、送出キュー210が命令220をロード/ストアユニット230に送出したことに応答して、サーチロジック249は、命令220に関連した入力アドレス222を受け取る。命令220は、ロード命令又はストア命令のいずれであってもよい。命令220及びそれの入力アドレス222を受け取ったことに応答して、サーチロジック249は、その入力アドレスがCAM240におけるエントリのアドレス範囲内にあるかどうかを判断するために、CAM240における各エントリの開始アドレス242及び長さ244によって指定されたアドレス範囲をサーチする。その判断の結果が肯定的である場合、適合したエントリのSビット246及びLビット248の状態が決定され、ロード命令又はストア命令220の命令コードと比較される。その命令がストア命令であることを命令220の命令コードが表わし、対応する適合したCAMエントリのSビット246が所定の値例えば、1にセットされている場合、CAM240のロジックは例外250を発生し得る。同様に、その命令がロード命令であることを命令220の命令コードが表わし、対応する適合したCAMエントリのLビット248が所定値例えば、1にセットされている場合、CAM240のロジックは例外250を発生し得る。その命令がロード命令又はストア命令であり、対応するSビット246又はLビット248が所定値にセットされてない場合、例外は発生されず、その命令の実行は単にロード/ストアユニット230を通して正規の態様で継続する。CAM240におけるエントリに対するこのチェックはロード/ストア命令220を提示する各スレッドに対して行なわれるということを留意されたい。従って、複数個のスレッドがプロセッサにおいて実行され得るし、各スレッドは、ロード/ストア命令220が関連あるアドレス範囲をターゲットとし、関連ある命令であるかどうかを判断するために上述の態様でその対応するCAM構造によってチェックされる。従って、従来技術では必要とされたスレッドごとにモニタリングを順次化する必要がなく、複数個のスレッドを実質的に同時にモニタすることが可能である。更に、CAM構造240は、メモリの個々のアドレス範囲がターゲットにされること、及び個々の命令のタイプ、例えば、ロード、ストアの一方又はロード、ストアの両方がターゲットにされることを可能にする。例外250がCAM240によって発生される場合、その例外は例外ハンドラ260に提供され得る。それとは別に、例外は、個別の例外ハンドラ260を持つのではなくアプリケーション又はデバッガの280に直接送られてもよい。例外ハンドラ260又はアプリケーション/デバッガ280は、実行中のアプリケーションの代わりに例外を受け取るように予め登録されていてもよい。これは、UNIX商標のptraceシステムコール又はUNIXシステム及びUNIX系システムの信号処理機構のような伝統的なオペレーティングシステム技術を使用して行うことが可能である。オペレーティングシステムは、現在の技術において行われるように、例外を適切なエンティティデバッガ又はアプリケーションに伝え、適切なコードハンドラーにおいて処理させる責任がある。アプリケーションコードの実行は、例外250が発生される場合に例外ハンドラ260又はアプリケーション/デバッガ280にブランチし、しかる後、トレースデータ構造270においてトレース/デバッグ情報を収集するように操作し得る。アプリケーション/デバッガ280は、分析を行ってアプリケーションコードにおける潜在的なバグを識別するようにトレースデータ構造270において操作してもよい。例えば、アプリケーション/デバッガ280は、複数個のスレッドが、メモリの同じアドレス範囲をほぼ同時にアクセスすることによって、潜在的な競合状態又はデーモニックアクセスを識別し得る。競合状態又はデーモニックアクセスは、データが破損され得るか、或いは他のスレッドがそのデータを使用すること又は種々の方法でそれを修正することを試みているとき、1つのスレッドがそのデータを修正したためにそのデータをアクセスしようとする1つ又は複数個のスレッドにとって正しくないものにされることがあるので、アプリケーションコードの実行時に重大問題を引き起こすことがある。例えば、第1のスレッドは以下のタイプのものであってもよい。Lockv1Unlock第2のスレッドは以下のタイプのものであってもよい。V2デーモニック変数アクセス第1スレッドに入る前に、V3である場合、v4v5v6はすべて出口後において起こり得る。第2スレッドへのエントリ前に、v2である場合、同じことが真である。更に、第2スレッドへのエントリ前に、v3である場合、v5及びv6の両方とも起こり得る。従って、その可能性がある場合、第1及び第2のスレッドの同時実行によって、vが第1及び第2スレッドの両方において同じ値であるとき、競合状態またはデーモニックアクセスが生じる。それをアクセスしようとする前に、スレッド2がメモリロケーションにおけるロックを得ていないという点で、そのような競合状態又はデーモニックアクセスがスレッド2に関して検出され得る。これは簡単な例であるが、それは起こり得る問題点を示している。マルチスレッドアプリケーションにおいて生じる実際のエラーは、一般的にはこれよりもっと複雑であろうが、実施例のCAM構造及び例外処理を使用して同様に検出され得る。アプリケーション/デバッガ280は、トレースデータ構造270において格納されたトレース情報に関するアプリケーション/デバッガ280によって行なわれた分析の結果を詳述したデバッガ出力290を提供し得る。例えば、アプリケーション/デバッガ280は、起こり得る競合状態又はスレッドによるデーモニックアクセスを識別し、関連するスレッドを識別し、競合状態/デーモニックアクセス等を生じさせた命令を識別し得る。種々のタイプのデバッガ出力290が、トレースデータ構造270において収集されたトレース情報、及びアプリケーション/デバッガ280によって行なわれた分析に基づいて提供され得る。図3は、ロード及び/又はストア命令が、スレッドに関係なく、関連あるメモリのアドレス範囲をアクセスしようとするとき、例外をトリガするためにコンテントアドレッサブルメモリCAMを使用することに関連して1つの実施例によりロード/ストアユニットの例示オペレーションを概説するフローチャートである。図3におけるオペレーションは、CAM構造がロード/ストアユニットに存在し、デバッガに関連あるメモリのアドレス範囲を指定する1つ又は複数個のエントリで占められているものと仮定する。上述のように、デバッガは、そのデバッガに関連するメモリのアドレス範囲を識別するためにCAM構造にエントリを書込み得るし、そのデバッガに関連ある命令のタイプに対して適切なSビット及び/又はLビットをセットし得る。デバッガは、上述したようにCAM構造によって発生された例外を処理するためのシステムに登録されてもよい。図3に示されるように、オペレーションは、ロード又はストア命令をロード/ストアユニットにおいて受け取ることによって開始するステップ310。そのロード又はストア命令において指定されたアドレスがCAMにおけるエントリの1つによって定義されたアドレス範囲内にあるかどうかを判断するために、その指定されたアドレスに対してルックアップオペレーション又は、サーチオペレーションがCAMにおいて遂行されるステップ320。適合するエントリがあるかどうかに関して判断が行われるステップ330。その判断結果が肯定的である場合、適合するエントリのSビット及びLビットのセッティングに基づいて、例外を発生すべきか否かに関して判断が行われるステップ340。例えば、上述したように、命令がストアであって、Sビットがセットされている場合、又は命令がロードであって、Lビットがセットされている場合、例外が発生され得る。そうでない場合、例外は発生されない。例外が発生されるべき場合には例外が発生され、例外ハンドラ又はデバッガに送られるステップ350。そのロード又はストア命令を送出したスレッドの状態がスタックに格納されステップ360、その例外を発生したスレッドに関してデバッグ又はトレース情報が集められるステップ370。しかる後、その例外が、例外ハンドラ又はデバッガのいずれかによって処理されるステップ380。例えば、例外ハンドラは、集められたデバッグ/トレース情報を分析し、競合状態又はデーモニックアクセスが生じたことが検知されたかどうかを判断し得る。そのような状態を検知し得る1つの方法は、ロード又はストア命令を送出したスレッドがCAMにおける対応エントリのアドレス範囲に関してロックを獲得したか、或いはロード又はストア命令におけるアドレスによって識別された特定のメモリロケーションを獲得したかを、少なくともそのメモリロケーションにおいてロード又はストアを行なおうとする前に、判断することである。そのロックが得られなかった場合、競合状態又はデーモニックアクセスが生じたかもしれない。従って、実施例は、アプリケーションコードのデバッグを支援するためのCAM構造を提供するハードウェア機構を提供する。本実施例の機構は、マルチスレッドアプリケーションコードのデバッグの支援に対して特によく適する。それは、プロセッサがメモリの或るアドレス範囲をアクセスしようとするときにはいつも、そのアクセスを試みる特定のスレッドに無関係に、特定のスレッドコンテキストに関連した1つ又は複数個のCAM構造が例外を発生するために提供されるためである。このように、複数個の同時に作動するスレッドが、関連ある特定のアドレス範囲に関して及び関連ある特定の命令タイプに関して、同時にモニタされ得る。本実施例は、メモリの或るアドレス範囲に対するロード及び/又はストアをモニタするためにプロセッサのロード/ストアユニットに設けられるCAM構造に関して説明されているが、本実施例がそのようなものに限定されないことは明らかであろう。むしろ、同様のCAM構造はプロセッサにおいて実行されつつある種々のタイプの命令をモニタするために、同様のCAM構造がプロセッサの他の機能的ユニットに設けることも可能である。例えば、種々のタイプの命令をモニタするために及びデバッグ又はトレース情報を生成する対応の例外を発生するために、同様のCAM構造が図1におけるブランチユニット112、浮動小数点ユニット122又は124等に設けることが可能である。重要な概念は、関連あるメモリのアドレス範囲及び関連ある命令のタイプを指定するためにハードウェアCAM構造を使用すること、及び関連ある命令が関連あるアドレス範囲をターゲットとするとき、どのスレッドが命令を実行しているかに関係なく、例外を発生することである。上述したように、本実施例は、全体的にハードウェアの実施例、全体的にソフトウェアの実施例、又はハードウェア要素及びソフトウェア要素の両方を含む実施例の形態をとり得る。或る実施例では、その実施例の機構が、ファームウェア、駐在ソフトウェア、マイクロコード等を含むが、それに限定されないソフトウェア又はプログラムコードで具現化される。プログラムコードを格納及び/又は実行するに適したデータ処理システムは、システムバスを介してメモリエレメントに直接的に又は間接的に結合された少なくとも1つのプロセッサを含むであろう。メモリエレメントは、プログラムコードの実際の実行中に使用されるローカルメモリ、大容量記憶装置、及び、実行中にコードが大容量記憶装置から検索されなければならない回数を減らすために少なくとも幾つかのプログラムコードの一時的記憶装置を提供するキャッシュメモリを含み得る。入出力装置、即ち、I/O装置キーボード、ディスプレイ、ポインティングデバイス等を含むが、それに限定されないは、システムに直接に又は介在するI/Oコントローラを介して結合され得る。ネットワークアダプタも、データ処理システムが、介在する専用又は公衆ネットワークを介して他のデータ処理システム又は遠隔のプリンタもしくは記憶装置に結合されることを可能にするために、そのシステムに結合され得る。モデム、ケーブルモデム、及びイーサネットカードは、数少ない現在利用可能なタイプのネットワークアダプタである。本発明に関する記述は、図解及び説明を目的に提示されており、全網羅的であること又は開示された形体の発明に限定されることを意図するものではない。多くの修正及び変更が当業者には明らかであろう。実施例は、本発明の原理、実用的な応用例を最もよく説明するために、及び期待される特定の用途に適する種々の修正を伴う種々の実施例に関しても当業者が本発明を理解することを可能にするために選定され、記述された。