(57)【要約】【課題】ソフトウェアブレークポイントの対象をコアごとに設定することを可能とすること。【解決手段】本発明の一つの実施形態によれば、情報処理装置は、メモリと、キャッシュデータメモリを備えるキャッシュシステムと、前記メモリおよびキャッシュデータメモリを共有する複数のコアと、を備える。前記キャッシュシステムは、デバッガが、コアを指定するブレーク指示子を前記キャッシュデータメモリのラインに格納可能である。また、前記キャッシュシステムは、リード要求されたアドレスに対応するラインに前記ブレーク指示子が格納されている場合には、要求元のコアと前記ブレーク指示子が指定するコアとが一致するか否かを判定し、双方が一致するとき、前記要求元のコアにブレーク命令を返し、双方が一致しないとき、前記リード要求されたデータを返す。【選択図】図１０
2014182562.tif 000002
【特許請求の範囲】
【請求項１】
メモリと、キャッシュデータメモリを備えるキャッシュシステムと、前記メモリおよびキャッシュデータメモリを共有する複数のコアと、
を備え、
前記キャッシュシステムは、
デバッガから、コアを指定するブレーク指示子を前記キャッシュデータメモリのラインに格納可能であり、
リード要求されたアドレスに対応するラインに前記ブレーク指示子が格納されている場合には、要求元のコアと前記ブレーク指示子が指定するコアとが一致するか否かを判定し、双方が一致するとき、前記要求元のコアにブレーク命令を返し、双方が一致しないとき、前記リード要求されたデータを返す、
ことを特徴とする情報処理装置。
【請求項２】
前記キャッシュデータメモリは、ライン毎に複数の単位データをキャッシュし、
前記ブレーク指示子は、単位データを指定する情報を含み、
前記キャッシュシステムは、前記要求元のコアと前記ブレーク指示子が指定するコアとが一致するとき、前記リード要求された複数の単位データを、当該複数の単位データのうちの前記ブレーク指示子が指定する単位データをブレーク命令に置き換えて前記要求元のコアに返す、
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記キャッシュシステムは、複数ウェイのラインを管理し、同一のアドレスに対応するラインであって前記ブレーク指示子が格納されるラインおよび前記メモリ内のデータが格納されるラインを夫々異なるウェイに格納可能であって、
前記要求元のコアと前記ブレーク指示子が指定するコアとが一致し、かつ、前記ブレーク指示子が格納されたラインとは別に前記リード要求されたアドレスに対応するラインであって前記メモリ内のデータが格納されるラインが存在するとき、当該ラインから前記複数の単位データを取得する、
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記キャッシュシステムは、タグメモリをさらに備え、
前記タグメモリは、デバッガが設定する、ブレークポイントの対象となるデータを含むか否かを示すデバッグフラグを記憶し、
前記キャッシュシステムは、前記デバッグフラグに応じて前記複数の単位データを取得するか否かを判定する、
ことを特徴とする請求項２または請求項３に記載の情報処理装置。
【請求項５】
メモリと、キャッシュデータメモリを備えるキャッシュシステムと、前記メモリおよびキャッシュデータメモリを共有する複数のコアと、を備える情報処理装置のデバッグ方法であって、
前記情報処理装置が、コアを指定するブレーク指示子を前記キャッシュデータメモリのラインに格納する操作をデバッガから受け付けるステップと、
前記コアのうちの１つが、アドレスを指定して前記メモリにリード要求するステップと、
前記キャッシュシステムが、リード要求されたアドレスに対応するラインに前記ブレーク指示子が格納されている場合には、要求元のコアと前記ブレーク指示子が指定するコアとが一致するか否かを判定するステップと、
前記キャッシュシステムが、前記要求元のコアと前記ブレーク指示子が指定するコアとが一致するとき、前記要求元のコアにブレーク命令を返し、前記要求元のコアと前記ブレーク指示子が指定するコアとが一致するとき、前記リード要求されたデータを返す、ステップと、
を備えることを特徴とするデバッグ方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、情報処理装置およびデバッグ方法に関する。
【背景技術】
【０００２】
ソフトウェア開発時のデバッグ作業において、プログラムの指定箇所に到達した時点で実行をストップさせる機能が良く用いられる。この指定箇所は、ブレークポイントと呼ばれる。ブレークポイントは、ハードウェアで実装される場合（ハードウェアブレークポイント）と、ソフトウェアで実装される場合（ソフトウェアブレークポイント）とがある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００４−１０３０２４号公報
【特許文献２】特開平８−３０５６０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ハードウェアブレークポイントによれば、コア毎に個別のブレークポイントを設定することが可能であるが、設定可能な数が限られる。一方、ソフトウェアブレークポイントは、指定箇所の命令を実行をストップさせる特別な命令に置き換えることで実現される。しかしながら、ソフトウェアブレークポイントによれば、メモリ上の命令が書き換えられる。したがって、ソフトウェアの実行対象の情報処理装置が複数のプロセッサコア（以降、コア）を有し、かつ、それらのコアがメモリ空間を共有している場合、どのコアが該当の命令を実行しても、ソフトウェアの実行がストップされる。即ち、ソフトウェアブレークポイントによれば、該当の命令をブレークポイントの対象とするか否かをコア毎に切り替えることができない。
【０００５】
本発明の一つの実施形態は、ソフトウェアブレークポイントの対象をコアごとに設定することが可能な情報処理装置およびデバッグ方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一つの実施形態によれば、情報処理装置は、メモリと、キャッシュデータメモリを備えるキャッシュシステムと、前記メモリおよびキャッシュデータメモリを共有する複数のコアと、を備える。前記キャッシュシステムは、デバッガが、コアを指定するブレーク指示子を前記キャッシュデータメモリのラインに格納可能である。また、前記キャッシュシステムは、リード要求されたアドレスに対応するラインに前記ブレーク指示子が格納されている場合には、要求元のコアと前記ブレーク指示子が指定するコアとが一致するか否かを判定し、双方が一致するとき、前記要求元のコアにブレーク命令を返し、双方が一致しないとき、前記リード要求されたデータを返す。
【図面の簡単な説明】
【０００７】
【図１】図１は、本発明の第１の実施形態の情報処理装置の構成を示す図である。
【図２】図２は、共有キャッシュの内部構成を示す図である。
【図３】図３は、キャッシュタグメモリのフォーマットを示す図である。
【図４】図４は、キャッシュデータメモリのフォーマットを説明するための図である。
【図５】図５は、キャッシュデータメモリのフォーマットを説明するための図である。
【図６】図６は、キャッシュデータメモリのフォーマットを説明するための図である。
【図７】図７は、第１の実施形態のタグリード・比較部の内部構成を示す図である。
【図８】図８は、第１の実施形態のチェック・選択部の動作を説明するフローチャートである。
【図９】図９は、データアクセス部の内部構成を示す図である。
【図１０】図１０は、第１の実施形態のディストリビュータの内部構成を示す図である。
【図１１】図１１は、マスク情報生成部の内部構成を示す図である。
【図１２】図１２は、データバッファの構成を示す図である。
【図１３】図１３は、デバッグ命令生成部の内部構成を示す図である。
【図１４】図１４は、第２の実施形態のチェック・選択部の動作を説明するフローチャートである。
【図１５】図１５は、第２の実施形態のディストリビュータの内部構成を示す図である。
【発明を実施するための形態】
【０００８】
以下に添付図面を参照して、実施形態にかかる情報処理装置およびデバッグ方法を詳細に説明する。なお、これらの実施形態により本発明が限定されるものではない。
【０００９】
（第１の実施形態）
図１は、第１の実施形態の情報処理装置の構成図である。情報処理装置１は、マルチコアプロセッサ１００と、共有キャッシュ（キャッシュシステム）１０１と、メモリ１０２とを備えている。情報処理装置１は、例えば、撮像装置または携帯電話等に実装される組み込みコンピュータに該当する。情報処理装置１は、ひとつのチップにより実現されてもよいし、複数のチップにより実現されてもよい。
【００１０】
マルチコアプロセッサ１００は、複数のコアを備えている。図１のマルチコアプロセッサ１００は、４つのコア＃０〜＃３を備えている。共有キャッシュ１０１は、メモリ１０２に接続されている。コア＃０〜コア＃３は、夫々共有キャッシュ１０１に接続され、メモリ空間を共有する。
【００１１】
コア＃０〜＃３は、情報処理装置１の外部から、デバッガ２が接続される。デバッガ２は、コア＃０〜＃３を介して共有キャッシュ１０１およびメモリ１０２にアクセスすることが可能である。デバッガ２は、例えば、情報処理装置１に接続するためのインタフェース装置と当該インタフェース装置を利用することができるデバッグプログラムを実行するパーソナルコンピュータとの協働により実現される。
【００１２】
図２は、共有キャッシュ１０１の内部構成図である。共有キャッシュ１０１は、アービタ１１０と、タグリード・比較部１１１と、キャッシュタグメモリ１１２と、データアクセス部１１３と、キャッシュデータメモリ１１４と、リフィル・ライトバック部１１５とを備えている。コア＃０〜＃３からのアクセスリクエストはアービタ１１０に入力される。アービタは、入力されたアクセスリクエストのうちの１つを選択し、選択したアクセスリクエストが備えるアドレス（アクセス先のアドレス）をタグリード・比較部１１１に入力する。タグリード・比較部１１１は、キャッシュタグメモリ１１２を参照し、参照結果とリクエストされたアドレスとを用いてキャッシュミス／キャッシュヒットを判定する。タグリード・比較部１１１は、キャッシュヒット時には、データアクセス部１１３を介してキャッシュデータメモリ１１４にアクセスする。キャッシュミス時には、リフィル・ライトバック部がメモリ１０２に対してアクセスを行う。なお、第１の実施形態においては、キャッシュメモリ１１４は複数のwayを有し、共有キャッシュ１０１は複数のwayを管理する。
【００１３】
なお、実施形態では、コア＃０〜＃３はリードを要求するアクセスリクエスト（リードリクエスト）を出力する場合について説明する。
【００１４】
図３は、キャッシュタグメモリ１１２のフォーマットを示す図である。本発明の実施形態によれば、キャッシュタグメモリ１１２には、キャッシュライン毎に、タグデータ(Tag)と、キャッシュラインが書き換え済みであるか否かを示すフラグ(Dirty:D)と、キャッシュラインが有効かどうかを示すフラグ(Valid:V)と、ソフトウェアブレークポイントが設定されているか否かを示すフラグ(Debug:Db)とが記録される。なお、WriteThrough方式のキャッシュが採用される場合には、Dフラグはキャッシュタグメモリ１１２に具備されない。
【００１５】
図４〜図６は、本発明の実施形態のキャッシュデータメモリ１１４のフォーマットを説明するための図である。ここでは、キャッシュデータメモリ１１４には、４つの命令（単位データ）からなる命令列がキャッシュライン毎に格納されるものとする。キャッシュデータメモリ１１４は、ライン幅が128bitであり、4つのwayを有し、4MBのサイズを有する具備するものとする。また、個々の命令は32bitのサイズを有し、１つの命令列は128bitのサイズを有するものとする。図４は、キャッシュデータメモリ１１４に格納される通常の命令列の例を示している。図４の命令列３００は、MOV(データ移動)、MUL(乗算)、SUB(減算)、およびADD(加算)の4つの命令をこの順番で有している。
【００１６】
共有キャッシュ１０１は、デバッガ２によってブレーク指示子をキャッシュデータメモリ１１４のキャッシュラインに格納可能である。ブレーク指示子は、ブレークポイントの対象とするコアを指定する。また、共有キャッシュ１０１は、デバッガ２によって、キャッシュタグメモリ１１２にDbフラグが設定可能である。プログラマは、ブレークポイントを設定する際には、ブレークポイントの対象の命令列３００が格納されているアドレスに対応するキャッシュラインにブレーク指示子を格納するとともに、対応するタグデータのDbフラグに「1」をセットする。
【００１７】
図５は、ブレーク指示子の例を示す図である。ブレーク指示子列３０１は、夫々32bitのサイズを有する４つのブレーク指示子３０２を備えている。ブレーク指示子３０２は、配列の順番に応じて、命令列３００が備える命令に夫々対応する。即ち、ブレーク指示子３０２は、その格納されている位置により、１つのキャッシュラインに格納されている複数の命令のうちのブレークポイントの対象命令を指定する。
【００１８】
また、ブレーク指示子３０２は、ブレークポイントの対象とするコアを指定する。ここでは、ブレーク指示子３０２は、LSB（least  significant  bit）からのビット数でブレークポイントの対象コアの番号を示すこととする。即ち、コア＃０が対象である場合には、ブレーク指示子３０２はLSBに「1」の値を有し、コア＃ｎが対象である場合には、ブレーク指示子３０２はLSBからｎビット目に「1」の値を有する。どのコアも対象では無い場合には、ブレーク指示子３０２は全て「0」の値を有する。図５のブレーク指示子列３０１は、先頭から三番目の命令についてコア＃１をブレークポイントの対象とすることを示している。
【００１９】
共有キャッシュ１０１は、ブレークポイントの対象のコアからリード要求されたアドレスに対応するキャッシュラインにブレーク指示子列３０１が格納されている場合には、ブレーク指示子列３０１とリード要求された命令列３００とに基づいて、BREAK(デバッグ割り込みを発生させる命令)を含む命令列を生成する。図６は、BREAKを含む命令列を示す図である。図６の命令列３０３には、３番目のフィールドにBREAKが格納され、その他のフィールドには図４に示した命令列３００と同様の命令が格納されている。なお、以降、BREAKを含まない通常の命令列を第１の命令列３００、BREAKを含む命令列を第２の命令列３０３と表記することとする。
【００２０】
図７は、第１の実施形態のタグリード・比較部１１１の内部構成図である。タグリード・比較部１１１は、バッファ１２０と、バッファ１２１と、比較部１２２と、チェック・選択部１２３とを備えている。バッファ１２０は、アービタ１１０からのアドレスを格納する。バッファ１２１は、アドレスに含まれるタグメモリアクセスアドレス（入力されたアドレスの下位桁）を用いてキャッシュタグメモリ１１２から読み出した4way分のタグデータ（Tag）をway毎に格納する。比較部１２２は、バッファ１２０に格納されたアドレスの上位桁とバッファ１２１に格納されたway毎のタグデータとを比較して、キャッシュヒット／ミスの判定を行う。判定結果はチェック・選択部１２３に入力される。チェック・選択部１２３は、何れか１つのwayにてキャッシュヒットした場合には、キャッシュヒットしたway番号を指定したデータメモリリクエストをデータアクセス部１１３に出力する。全てのwayにおいてキャッシュミスした場合には、チェック・選択部１２３は、所定のルールに基づいてリフィル対象のwayを選択し、選択したway番号の指定を含むリフィル／ライトバックリクエストをリフィル・ライトバック部１１５に出力する。なお、全てのwayにおいてキャッシュミスした場合には、チェック・選択部１２３は、Dbフラグが「1」となっているwayは選択しないものとする。また、チェック・選択部１２３は、Dbフラグが「1」の場合には、リフィルリクエストをリフィル・ライトバック部１１５に出力する。なお、Dbフラグが「1」の場合に出力されるリフィルリクエストを、デバッグリフィルリクエストと表記する。
【００２１】
図８は、第１の実施形態のチェック・選択部１２３の動作を説明するフローチャートである。
まず、チェック・選択部１２３は、ループインデックスNの値を「0」で初期化する（Ｓ１）。そして、チェック・選択部１２３は、wayNから読み出されたタグデータがバッファ１２０に格納されたアドレスの上位桁と一致し、かつ、wayNのVフラグが「1(有効)」であるか否かを判定する（Ｓ２）。Ｓ２がＮｏの場合、チェック・選択部１２３は、Nの値がway数から１減算された値よりも小さいか否かを判定する（Ｓ３）。Ｓ３がＮｏの場合、チェック・選択部１２３は、Nの値を１インクリメントし（Ｓ４）、Ｓ２の判定処理を再び実行する。Ｓ３がＹｅｓの場合、チェック・選択部１２３は、リフィル／ライトバックリクエストをリフィル・ライトバック部１１５に出力し（Ｓ５）、動作を終了する。なお、リフィル／ライトバックリクエストは、ライトバック対象wayの指定および要求元のコアを特定するコア番号を含む。
【００２２】
Ｓ２がＹｅｓの場合、チェック・選択部１２３は、wayNのDbフラグが「1」であるか否かを判定する（Ｓ６）。wayNのDbフラグが「0」である場合（Ｓ６、Ｎｏ）、チェック・選択部１２３は、対応するキャッシュラインに対して通常のリードを行うためのデータメモリリクエストをデータアクセス部１１３に出力し（Ｓ７）、動作を終了する。なお、データメモリリクエストは、wayNの指定および要求元のコアを特定するコア番号を含む。
【００２３】
wayNのDbフラグが「1」である場合（Ｓ６、Ｙｅｓ）、チェック・選択部１２３は、wayNのキャッシュラインに対応するリフィルデータをメモリ１０２から読み出すためのデバッグリフィルリクエストをリフィル・ライトバック部１１５に出力する（Ｓ８）。ここで、デバッグリフィルリクエストは、要求元のコアを特定するコア番号を含む。
【００２４】
Ｓ８に続いて、チェック・選択部１２３は、キャッシュデータメモリ１１４の対応するキャッシュラインに格納されているブレーク指示子列３０１を読み出すためのデータメモリリクエストをデータアクセス部１１３に出力し（Ｓ９）、動作を終了する。
【００２５】
以降、ブレーク指示子列３０１を読み出す動作をデバッグリードと表記することがある。また、命令列３００をキャッシュデータメモリ１１４から読み出す動作をノーマルリードと表記することがある。また、デバッグリードおよびノーマルリードを総称して、データメモリリードと表記することがある。なお、ノーマルリードおよびデバッグリードのためのデータメモリリクエストとは、フォーマット上の差異があってもよいし、なくてもよい。
【００２６】
リフィル・ライトバック部１１５は、リフィル／ライトバックリクエストを受信した場合には、データアクセス部１１３を介して読み出したライトバックデータをメモリ１０２に書き込む。その後、リフィル・ライトバック部１１５は、メモリ１０２から読み出したリフィルデータをデータアクセス部１１３を介してキャッシュデータメモリ１１４に書き込む。また、デバッグリフィルリクエストを受信した場合には、リフィル・ライトバック部１１５は、メモリ１０２から読み出したリフィルデータをデータアクセス部１１３に渡す。デバッグリフィルリクエストに応じて読み出されたリフィルデータは、デバッグリードにより読み出された第１の命令列３００とともに、データアクセス部１１３において第２の命令列３０３の生成に用いられる。なお、リフィル・ライトバック部１１５は、リフィルデータをデータアクセス部１１３に送る際には、リフィルデータとともに要求元のコアを特定するコア番号を送る。
【００２７】
図９は、データアクセス部１１３の内部構成図である。データアクセス部１１３は、アービタ１３０と、ディストリビュータ１３１とを備えている。
アービタ１３０は、タグリード・比較部１１１からノーマルリードおよびデバッグリードのためのデータメモリリクエストを受信する。また、アービタ１３０は、ライトバックデータを読み出すリクエストをリフィル・ライトバック部１１５から受信する。また、アービタ１３０は、リフィルデータをリフィル・ライトバック部１１５から受信する。アービタ１３０は、受信した内容を調停して１つ選択し、選択した内容に応じたアクセスをキャッシュデータメモリ１１４に対して実行する。なお、アービタ１３０は、リフィル／ライトバックリクエストに応じたリフィルデータをキャッシュデータメモリ１１４に書き込み、デバッグリフィルリクエストに応じたリフィルデータをキャッシュデータメモリ１１４に書き込まない。リフィルデータがリフィル／ライトバックリクエストに応じたものかデバッグリフィルリクエストに応じたものかをアービタ１３０が判断する機構は、特定の機構に限定されない。
【００２８】
データメモリリードによってキャッシュデータメモリ１１４から読み出されたデータ（以降、リードデータ）は、ディストリビュータ１３１に入力される。なお、リードデータは、実データ（ここでは第１の命令列３００またはブレーク指示子列３０１）のほかに、コア番号、VフラグおよびDbフラグを含む。また、リフィル／ライトバックリクエストまたはデバッグリフィルリクエストに応じたリフィルデータは、ディストリビュータ１３１にも入力される。
【００２９】
図１０は、第１の実施形態のディストリビュータ１３１の内部構成図である。ディストリビュータ１３１は、マスク情報生成部１４０と、デバッグ命令生成部１４１と、第１の選択部１４２と、第２の選択部１４３と、データバッファ１４４とを備えている。
【００３０】
リードデータは、第１の選択部１４２およびマスク情報生成部１４０に入力される。マスク情報生成部１４０は、入力されたリードデータに基づいてマスク情報を生成する。マスク情報生成部１４０は、生成したマスク情報を第１の選択部１４２に入力する。リードデータのDbフラグの値は、選択部１４２において選択信号として使用される。第１の選択部１４２は、Dbフラグが「0(N)」である場合には、リードデータを選択し、Dbフラグが「1(Y)」である場合には、マスク情報を選択する。そして、第１の選択部１４２は、選択した内容をデータバッファ１４４に出力する。
【００３１】
図１１は、マスク情報生成部１４０の内部構成図である。なお、マスク情報生成部１４０の出力は、マスク情報生成部１４０にブレーク指示子列３０１が入力されたときのみ、第１の選択部１４２により選択される。ここでは、４つのマスク情報生成部１４０にブレーク指示子列３０１が入力される場合について説明する。夫々のマスク情報生成部１４０は、ブレーク指示子列３０１のうちの３２＊Ｎbit目から３２＊（Ｎ＋１）bit目までを処理するものとする。ただし、Ｎは０から３までの整数である。すなわち、1〜32bit、33〜64bit、65〜95bit、96〜128bit目のデータが、４つのマスク情報生成部１４０で並列に処理される。夫々のマスタ情報生成部１４０によって処理されたデータは、元のブレーク指示子列３０１に応じた順番で結合され、第１の選択部１４２に入力される。
【００３２】
マスク情報生成部１４０は、判定部１５０と、第３の選択部１５１とを備えている。判定部１５０は、各々のブレーク指示子３０２が要求元のコアを指定しているか否かを判定する。ここでは、ブレーク指示子３０２は32bitのサイズを有するので、判定部１５０は、ブレーク指示子列３０１の先頭から32bitずつデータを取得する。そして、判定部１５０は、取得したデータのうちのリードデータに含まれるコア番号に対応する位置の値によって、そのブレーク指示子３０２が要求元のコアを指定しているか否かを判定する。
【００３３】
ブレーク指示子３０２毎の判定結果は第３の選択部１５１の選択信号として用いられる。ブレーク指示子３０２が要求元のコアを指定している場合、第３の選択部１５１は「0xffffffff」を選択する。ブレーク指示子３０２が要求元のコアを指定していない場合、第３の選択部１５１は「0x00000000」を選択して、出力する。例えば、図５に示すブレーク指示子列３０１から生成されるマスク情報は、要求元のコアがコア１である場合、0x00000000,0x00000000,0xffffffff,0x00000000となり、また、要求元のコアがコア１以外のコアである場合、0x00000000,0x00000000,0x00000000,0x00000000となる。
【００３４】
図１２は、データバッファ１４４の構成図である。データバッファ１４４は、データ領域１６０と、Vフラグ領域１６１と、Dbフラグ領域１６２とを含む。データ領域１６０には、リードデータの第１の命令列３００またはマスク情報が格納される。Vフラグ領域１６１には、データ領域１６０に格納されている値が有効であるか否かを示すVフラグが格納される。Dbフラグ領域１６２には、リードデータに含まれるDbフラグの値が格納される。Dbフラグが「1」である場合には、Vフラグに「0(無効)」がセットされ、Dbフラグが「0」である場合には、Vフラグに「1(有効)」がセットされる。Vフラグが有効である場合には、要求元のコアがデータ領域１６０に格納されているデータを読み出すことが可能であり、当該Vフラグが無効である場合には、要求元のコアが領域１６０に格納されているデータを読み出すことが不可能である。
【００３５】
リフィルデータは、第２の選択部１４３およびデバッグ命令生成部１４１に入力される。ここで、リフィルデータは、第１の命令列３００の形式を有する。デバッグ命令生成部１４１は、リフィルデータを構成する命令のうちのブレーク指示子が指定する命令をBREAKに置き換えて出力する。換言すると、デバッグ命令生成部１４１は、リフィルデータをそのまま透過するかまたはデータバッファ１４４のマスク情報とリフィルデータを用いて第２の命令列３０３を生成する。デバッグ命令生成部１４１の出力は、第２の選択部１４３に入力される。選択部１４３は、データバッファ１４４に格納されているDbフラグの値を選択信号として使用する。選択部１４３は、Dbフラグが「0(N)」である場合には、リフィルデータを選択し、Dbフラグが「1(Y)」である場合には、デバッグ命令生成部１４１から入力された値（第１の命令列３００または第２の命令列３０３）を選択する。そして、第２の選択部１４３は、選択した内容をデータバッファ１４４に出力する。
【００３６】
図１３は、デバッグ命令生成部１４１の内部構成図である。なお、デバッグ命令生成部１４１の出力は、Dbフラグが「1」の場合（即ち、データ領域１６０にマスク情報が格納されている場合）においてのみ、第２の選択部１４３により選択される。ここでは、データ領域１６０にマスク情報が格納されているものとして説明する。また、４つのデバッグ命令生成部１４１がディストリビュータ１３１に具備され、夫々のデバッグ命令生成部１４１は、リフィルデータおよびマスク情報のうちの３２＊Ｎbit目から３２＊（Ｎ＋１）bit目までを処理するものとする。ただし、Ｎは０から３までの整数である。夫々のデバッグ命令生成部１４１によって処理されて出力されたデータは、元のリフィルデータにおける位置に応じた順番で結合されて第２の選択部１４３に入力される。
【００３７】
デバッグ命令生成部１４１は、Not回路１７０と、第１のAnd回路１７１と、第２のAnd回路１７２と、Or回路１７３とを備えている。Not回路１７０および第２のAnd回路１７２には、データバッファ１４４のマスク情報が入力される。Not回路１７０は、マスク情報の否定を出力する。第１のAnd回路１７１は、リフィルデータとNot回路１７０の出力との論理積を出力する。即ち、マスク情報が0xffffffffである場合には、第１のAnd回路１７１は、0x00000000を出力する。また、マスク情報が0x00000000である場合には、第１のAnd回路１７１は、リフィルデータの命令をそのまま透過する。第２のAnd回路１７２は、BREAKとマスク情報との論理積を出力する。即ち、マスク情報が0xffffffffである場合には、第２のAnd回路１７２はBREAKを出力する。また、マスク情報が0x00000000である場合には、第２のAnd回路１７２は0x00000000を出力する。Or回路１７３は、第１のAnd回路１７１の出力と第２のAnd回路１７２の出力との論理和を出力する。即ち、Or回路１７３は、マスク情報が0xffffffffを含む場合には、第１の命令列３００を構成する命令のうちの0xffffffffのマスク情報が示す命令をBREAKに置き換えた第２の命令列３０３を出力する。デバッグ命令生成部１４１は以上のように構成されるので、４つのデバッグ命令生成部１４１は協働して、マスク情報が0x00000000,0x00000000,0x00000000,0x00000000である場合には、第１の命令列３００を透過する。
【００３８】
なお、データバッファ１４４は、第２の選択部１４３から入力されるデータ対するDbフラグを「0」にクリアし、Vフラグを「1(有効)」にセットする。
【００３９】
次に、ディストリビュータ１３１の動作について説明する。ノーマルリードに応じたリードデータは、Dbフラグが「0」であるので、第１の選択部１４２を透過してデータバッファ１４４に格納される。また、Dbフラグが「0」であるので、Vフラグには「1」がセットされる。Vフラグに「1」がセットされているため、要求元のコアがそのリードデータを読み出して実行することが可能となる。
【００４０】
リフィル／ライトバックリクエストに応じたリフィルデータは、Dbフラグが「0」であるので、第２の選択部１４３を透過してデータバッファ１４４に格納される。リフィルデータのDbフラグが「0」であるので、Dbフラグには「0」がセットされ、Vフラグには「1」がセットされる。Vフラグに「1」がセットされているため、要求元のコアがそのリフィルデータを読み出して実行することが可能となる。
【００４１】
デバッグリードに応じたリードデータは、マスク情報生成部１４０によりマスク情報に変換されてデータバッファ１４４に格納される。リードデータに含まれるDbフラグの値が「1」であるので、Vフラグには「0」がセットされる。Vフラグが「0」であるため、マスク情報は要求元のコアには読み出されない。その後、デバッグリフィルリクエストに応じたリフィルデータがディストリビュータ１３１に入力される。リフィルデータおよびデータバッファ１４４のマスク情報がデバッグ命令生成部１４１に入力され、デバッグ命令生成部１４１によりリフィルデータが透過されるかまたは第２の命令列３０３が生成される。なお、デバッグリードによるリードデータがデバッグリフィルリクエストに応じたリフィルデータよりも早くディストリビュータ１３１に入力されるのは、リフィルの動作にキャッシュデータメモリ１１４へのアクセスよりも時間がかかるメモリ１０２へのアクセスが含まれるためである。デバッグ命令生成部１４１から出力された第１の命令列３００または第２の命令列３０３は、データバッファ１４４に格納される。その際に、出力された命令列はDbフラグが「0」にクリアされてVフラグに「1」がセットされるため、要求元のコアが格納された第１の命令列３００または第２の命令列３０３を読み出して実行することが可能となる。
【００４２】
以上述べたように、ディストリビュータ１３１は、リードリクエストされたアドレスに対応するキャッシュラインにブレーク指示子３０２が格納されている場合には、マスク情報生成部１４０において、要求元のコアとブレーク指示子３０２が指定するコアとが一致するか否かを判定する。そして、ディストリビュータ１３１は、デバッグ命令生成部１４１において、要求元のコアとブレーク指示子３０２が指定するコアとが一致するとき、要求元のコアにBREAKを返し、双方が一致しないとき、リードリクエストされた命令を返す。その結果、第１の実施形態によれば、情報処理装置１は、Dbフラグを含むブレーク指示子３０２をキャッシュデータメモリ１１４に格納することにより、デバッガ２を介する入力操作に基づいて、要求元のコア毎に命令をBREAKに置き換える／置き換えないをハードウェア機構によって切り替えることができる。即ち、プログラマがソフトウェアブレークポイントの対象をコアごとに設定することが可能となる。
【００４３】
第１の実施形態によれば、情報処理装置１は、要求元のコアに応じて命令をBREAKに置き換える／置き換えないを情報処理装置１が切り替えるため、ブレークポイントの度にデバッガ２と情報処理装置１との間の通信を不要とすることができる。また、ブレークポイントの度に全コアが停止されることを不要とすることができる。
【００４４】
また、第１の実施形態によれば、情報処理装置１はブレークポイントの対象とするコア情報を、専用のハードウェアではなく、キャッシュデータメモリ１１４に記憶している。キャッシュデータメモリ１１４は、ヒット率を向上させるために多くのキャッシュラインを備えて構成されるため、一度に設定できるブレークポイントの数が多い。また、共有キャッシュ１０１のメモリ構成は、第１の実施形態が適用される場合にキャッシュタグメモリ１１２にDbフラグが追加されるだけであるので、共有キャッシュ１０１内のメモリの面積の増加は小さくて済む。
【００４５】
また、第１の実施形態によれば、ディストリビュータ１３１は、デバッグ命令生成部１４１において、複数の命令を有する第１の命令列３００を、ブレーク指示子３０２が指定する命令をBREAKに置き換えて第２の命令列３０３を生成する。そして、ディストリビュータ１３１は、生成した第２の命令列３０３を要求元のコアに返す。その結果、１つのキャッシュラインに複数の命令が格納される場合であっても、所望の命令にブレークポイントを設定することが可能となる。なお、第１の実施形態では、キャッシュラインに複数の命令が格納される場合について説明したが、キャッシュラインに格納されるデータは命令だけに限定されない。キャッシュラインに、命令以外の単位サイズのデータが複数格納されるようにしてもよい。
【００４６】
また、第１の実施形態によれば、チェック・選択部１２３は、Dbフラグに応じて第１の命令列３００をメモリ１０２から取得するか否かを判定する。その結果、情報処理装置１は、キャッシュタグメモリ１１２を参照する段階でメモリ１０２から第１の命令列３００を取得するか否かを決定することができるので、キャッシュデータメモリ１１４を参照してからメモリ１０２から第１の命令列３００を取得する場合に比べて動作が高速になる。
【００４７】
（第２の実施形態）
第１の実施形態は、ブレークポイントの対象となる命令列を、リフィルの動作によりメモリから読み出す。これに対し、第２の実施形態は、ブレークポイントの対象となる命令列がキャッシュされている場合に、当該命令列が格納されているwayとは異なるwayに当該命令列をブレークポイントの対象に指定するブレーク指示子列を格納する。これにより、ブレークポイントの対象となる命令列をメモリではなくキャッシュデータメモリから取得することが可能となるので、コアがアクセスリクエストを発行してから当該コアにBREAKを返すまでの時間が第１の実施形態よりも短縮される。
【００４８】
第２の実施形態の情報処理装置について説明する。第２の実施形態の情報処理装置は、チェック・選択部およびディストリビュータの機能が第１の実施形態と異なる。ここでは、チェック・選択部およびディストリビュータについてのみ説明し、重複する説明を省略する。なお、第２の実施形態のチェック・選択部およびディストリビュータに、夫々、符号１２４、符号１３２を付して、第１の実施形態の構成要素と区別する。
【００４９】
共有キャッシュ１０１は、同一のアドレスに対応するキャッシュラインであってブレーク指示子列３０１が格納されるキャッシュラインおよび命令列３００が格納されるキャッシュラインを夫々異なるwayに格納可能である。したがって、プログラマは、ブレークポイントを設定する際に、ブレークポイントの対象の命令列３００が格納されているアドレスに対応するキャッシュラインがキャッシュデータメモリ１１４に存在する場合には、そのキャッシュラインとは異なるwayのキャッシュラインに、ブレーク指示子列３０１を格納することができる。ブレークポイントの対象の命令列３００が格納されているアドレスに対応するタグデータは、実際の命令列３００がキャッシュされているキャッシュラインに対応するものと、ブレーク指示子列３０１が格納されているキャッシュラインに対応するものとが存在する。プログラマは、ブレーク指示子列３０１が格納されているキャッシュラインに対応するタグデータのDbフラグに「1」をセットする。
【００５０】
このため、チェック・選択部１２４は、Dbフラグが「1」となっているタグデータについてキャッシュヒットすると同時に、Dbフラグが「0」となっているタグデータについてキャッシュヒットする場合がある。Dbフラグが「1」または「0」となっているタグデータの両方においてキャッシュヒットした場合には、チェック・選択部１２４は、双方のキャッシュラインからデータ（１つはブレーク指示子列３０１であり、１つはリードリクエストされた第１の命令列３００）を取得するために、データメモリリクエストを２回出力する。
【００５１】
図１４は、第２の実施形態のチェック・選択部１２４の動作を説明するフローチャートである。
まず、チェック・選択部１２４は、ループインデックスNの値を「0」で初期化する（Ｓ１１）。そして、チェック・選択部１２４は、wayNから読み出されたタグデータがバッファ１２０に格納されたアドレスの上位桁と一致し、かつ、wayNのVフラグが「1(有効)」であって、かつ、wayNのDbフラグが「0」であるか否かを判定する（Ｓ１２）。Ｓ１２がＮｏの場合、チェック・選択部１２４は、Nの値がway数から１減算された値よりも小さいか否かを判定する（Ｓ１３）。Ｓ１３がＮｏの場合、チェック・選択部１２４は、Nの値を１インクリメントし（Ｓ１４）、ステップＳ１２の判定処理を再び実行する。
【００５２】
Ｓ１２がＹｅｓの場合、チェック・選択部１２４は、変数Hitに「1」をセットし、変数Hwayにその時点のループインデックスNの値をセットする（Ｓ１５）。そして、チェック・選択部１２４は、ループインデックスNの値を「0」で初期化する（Ｓ１６）。Ｓ１３がＹｅｓの場合、チェック・選択部１２４は、変数Hitに「0」をセットし（Ｓ１７）、Ｓ１６の処理を実行する。
【００５３】
Ｓ１６の処理の後、チェック・選択部１２４は、wayNから読み出されたタグデータがバッファ１２０に格納されたアドレスの上位桁と一致し、かつ、wayNのVフラグが「1(有効)」であって、かつ、wayNのDbフラグが「1」であるか否かを判定する（Ｓ１８）。Ｓ１８がＮｏの場合、チェック・選択部１２４は、Nの値がwayの数から１減算された値よりも小さいか否かを判定する（Ｓ１９）。
【００５４】
Ｓ１９がＮｏの場合、チェック・選択部１２４は、Nの値を１インクリメントし（Ｓ２０）、ステップＳ１８の判定処理を再び実行する。一方、Ｓ１９がＹｅｓの場合、チェック・選択部１２４は、変数Hitが「1」であるか否かを判定する（Ｓ２１）。変数Hitが「1」である場合（Ｓ２１、Ｙｅｓ）、チェック・選択部１２４は、変数Hwayにセットされた番号のwayを指定してデータメモリリクエストを出力し（Ｓ２２）、動作を終了する。変数Hitが「0」である場合（Ｓ２１、Ｎｏ）、チェック・選択部１２４は、リフィル／ライトバックリクエストを出力し（Ｓ２３）、動作を終了する。
【００５５】
Ｓ１８がＹｅｓの場合、チェック・選択部１２４は、キャッシュデータメモリ１１４の対応するキャッシュラインに格納されているブレーク指示子列３０１を読み出すデバッグリードのためのデータメモリリクエストを出力する（Ｓ２４）。そして、チェック・選択部１２４は、変数Hitが「1」であるか否かを判定する（Ｓ２５）。変数Hitが「1」である場合（Ｓ２５、Ｙｅｓ）、チェック・選択部１２４は、キャッシュデータメモリ１１４から第１の命令列３００を取得するために、変数Hwayにセットされた番号のwayを指定してデータメモリリクエストを出力し（Ｓ２６）、動作を終了する。変数Hitが「0」である場合（Ｓ２５、Ｎｏ）、チェック・選択部１２４は、第１の実施形態と同じくメモリ１０２から第１の命令列３００を取得するために、wayNを指定したデバッグリフィルリクエストを出力し（Ｓ２７）、動作を終了する。
【００５６】
図１５は、第２の実施形態のディストリビュータ１３２の内部構成図である。ディストリビュータ１３２は、分岐部１８０と、第１の選択部１８１と、マスク情報生成部１４０と、デバッグ命令生成部１４１と、第２の選択部１４３と、データバッファ１４４とを備えている。
【００５７】
リードデータは、分岐部１８０に入力される。分岐部１８０は、リードデータに含まれるDbフラグが「1(Y)」であるか否かを判断する。Dbフラグが「1(Y)」である場合には、分岐部１８０はリードデータをマスク情報生成部１４０に入力する。マスク情報生成部１４０は、入力されたリードデータに基づいて生成したマスク情報をデータバッファ１４４に出力する。
【００５８】
分岐部１８０は、Dbフラグが「0(N)」である場合、即ちリードデータが第１の命令列３００である場合には、リードデータを選択部１８１に入力する。また、リフィルデータ、即ちメモリ１０２から読み出された第１の命令列３００が選択部１８１に入力される。選択部１８１は、入力された２つのデータのうちの最後に入力されたデータを選択する。選択されたデータは、選択部１４３およびデバッグ命令生成部１４１に入力される。デバッグ命令生成部１４１は、入力されたデータをそのまま透過するかまたはデータバッファ１４４のマスク情報と入力されたデータとを用いて第２の命令列３０３を生成する。デバッグ命令生成部１４１の出力は、第２の選択部１４３に入力される。第２の選択部１４３は、データバッファ１４４に格納されているDbフラグの値に基づいて選択したデータを、データバッファ１４４に格納する。
【００５９】
ディストリビュータ１３２の動作について説明する。ノーマルリードに応じたリードデータは、Dbフラグが「0」であるので、分岐部１８０を介して第１の選択部１８１に入力される。リフィルデータの入力はないので、第１の選択部１８１は、リードデータを出力する。また、Dbフラグが「0」であるので、リードデータは、第２の選択部１４３で選択される。リードデータは、Vフラグに「1」がセットされ、データバッファ１４４に格納される。Vフラグに「1」がセットされるので、要求元のコアは、データバッファ１４４からそのリードデータを読み出して実行することが可能となる。
【００６０】
デバッグリードに応じたリードデータは、マスク情報生成部１４０によりマスク情報に変換されてデータバッファ１４４に格納される。Dbフラグが「1」であるので、Vフラグには「0」がセットされる。Vフラグが「0」であるため、データバッファ１４４に格納されたマスク情報は要求元のコアには読み出されない。
【００６１】
その後、第１の命令列３００として、デバッグリフィルリクエストに応じたリフィルデータまたはブレーク指示子列３０１が格納されていたwayとは別のwayに対するデータメモリリクエストに応じたリードデータがディストリビュータ１３２に入力される。
【００６２】
デバッグリフィルリクエストに応じたリフィルデータが入力された場合は、当該リフィルデータが第１の選択部１８１によって選択される。ブレーク指示子列３０１が格納されていたwayとは別のwayに対するデータメモリリクエストに応じたリードデータが入力された場合は、当該リードデータが第１の選択部１８１によって選択される。そして、デバッグ命令生成部１４１に入力されたデータは、そのまま透過されるか第２の命令列３０３に変換される。デバッグ命令生成部１４１から出力された第１の命令列３００または第２の命令列３０３は、データバッファ１４４に格納される。その際に、Dbフラグが「0」にクリアされてVフラグに「1」がセットされるため、要求元のコアが格納された第１の命令列３００または第２の命令列３０３を読み出して実行することが可能となる。
【００６３】
リフィル／ライトバックリクエストに応じたリフィルデータは、データメモリリードに応じたリードデータの入力がないので、第１の選択部１８１によって選択される。Dbフラグが「0」であるので、当該リフィルデータはデータバッファ１４４に格納される。Dbフラグが「0」であるので、データバッファ１４４のVフラグには「1」がセットされる。Vフラグに「1」がセットされるため、要求元のコアがそのリフィルデータを読み出して実行することが可能となる。
【００６４】
第２の実施形態によれば、ブレークポイントの対象となる命令列をキャッシュデータメモリから取得することが可能となる。よって、コアがアクセスリクエストを発行してから当該コアにBREAKを返すまでの時間が第１の実施形態よりも短縮される。また、第２の実施形態によれば、ブレーク指示子３０２が要求元のコアを指定していない場合、リードリクエストされた第１の命令列３００はキャッシュデータメモリ１１４から読み出される。したがって、ブレークポイントの対象ではないコアが要求元である場合に、第１の命令列３００を要求元のコアに返す処理が第１の実施形態に比して高速になる。
【００６５】
第１および第２の実施形態によれば、共有キャッシュ１０１がコアを指定するブレーク指示子３０２を設定可能であり、共有キャッシュ１０１は、リードリクエストされたコアとブレーク指示子３０２が指定するコアとの比較に応じてコア毎にBREAKを返すか返さないかを切り替えるので、ソフトウェアブレークポイントの対象をコアごとに設定することが可能となる。
【００６６】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【００６７】
１  情報処理装置、２  デバッガ、１００  マルチコアプロセッサ、１０１  共有キャッシュ、１０２  メモリ、１１０  アービタ、１１１  タグリード・比較部、１１２  キャッシュタグメモリ、１１３  データアクセス部、１１４  キャッシュデータメモリ、１１５  リフィル・ライトバック部、１２３，１２４  チェック・選択部、１３１，１３２  ディストリビュータ、１４０  マスク情報生成部、１４１  デバッグ命令生成部、３００  第１の命令列、３０１  ブレーク指示子列、３０２  ブレーク指示子、３０３  第２の命令列。
【図１】
2014182562.tif 000003
【図２】
2014182562.tif 000004
【図３】
2014182562.tif 000005
【図４】
2014182562.tif 000006
【図５】
2014182562.tif 000007
【図６】
2014182562.tif 000008
【図７】
2014182562.tif 000009
【図８】
2014182562.tif 000010
【図９】
2014182562.tif 000011
【図１０】
2014182562.tif 000012
【図１１】
2014182562.tif 000013
【図１２】
2014182562.tif 000014
【図１３】
2014182562.tif 000015
【図１４】
2014182562.tif 000016
【図１５】
2014182562.tif 000017