(57)【要約】【課題】ハードウェアアーキテクチャを意識したハードウェア動作記述の作成を支援することができる情報処理装置を提供することを課題とする。【解決手段】情報処理装置は、プログラムを解析することにより、前記プログラム内のメモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスを取得し、前記メモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスとの対応を示す情報を生成する取得部（２０２）を有する。【選択図】図２
2019067227.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを解析することにより、前記プログラム内のメモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスを取得し、前記メモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスとの対応を示す情報を生成する取得部を有することを特徴とする情報処理装置。
【請求項２】
前記プログラムは、前記プログラムと前記プログラムのコンパイル前のソースコードとの対応を示すデバッグ情報を有し、
前記取得部は、前記デバッグ情報を基に、指定された前記ソースコード内の変数名のアクセスに対応する、前記メモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスを取得することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
さらに、前記メモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスとの対応を示す情報を基に、前記メモリアクセス命令が記憶されているメモリのアドレスを示す複数の第１の節点と、前記メモリアクセス命令によりアクセスされるメモリのアドレスを示す複数の第２の節点と、前記複数の第１の節点と前記複数の第２の節点との対応を示す複数の枝を有するグラフ構造を生成するグラフ生成部を有することを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記取得部は、前記メモリアクセス命令がメモリに対するリード命令とライト命令のいずれであるのかを示す情報を取得し、
前記グラフ生成部は、前記メモリアクセス命令がメモリに対するリード命令とライト命令のいずれであるのかを示す情報に応じた向きの枝を生成することを特徴とする請求項３に記載の情報処理装置。
【請求項５】
さらに、前記グラフ生成部により生成されたグラフ構造の前記複数の第１の節点のグループ化、前記複数の第２の節点のグループ化、又は、前記複数の第１の節点のグループ化と前記第２の節点のグループ化の両方を行うことにより、前記第１の節点の数、前記第２の節点の数、又は、前記第１の節点の数と前記第２の節点の数の両方を減らすグループ化部を有することを特徴とする請求項３又は４に記載の情報処理装置。
【請求項６】
前記グループ化部は、前記第１の節点と前記第２の節点の合計が指定節点数以下になるようにグループ化を行うことを特徴とする請求項５に記載の情報処理装置。
【請求項７】
前記グループ化部は、前記第１の節点と前記第２の節点の合計が指定節点数以下になるまで、複数種類のグループ化処理のうちで、グループ化処理により前記第１の節点と前記第２の節点の合計が減少する数が小さい方から順にグループ化処理を行うことを特徴とする請求項５又は６に記載の情報処理装置。
【請求項８】
前記取得部は、前記メモリアクセス命令が実行される時刻情報を取得し、
前記グループ化部は、前記時刻情報が連続するメモリアクセスに対応する前記第２の節点をグループ化することを特徴とする請求項５〜７のいずれか１項に記載の情報処理装置。
【請求項９】
前記プログラムは、前記プログラムと前記プログラムのコンパイル前のソースコードとの対応を示すデバッグ情報を有し、
前記グループ化部は、前記デバッグ情報を基に、前記ソースコード内の変数名毎に、前記複数の第２の節点をグループ化することを特徴とする請求項５〜８のいずれか１項に記載の情報処理装置。
【請求項１０】
前記プログラムは、前記プログラムと前記プログラムのコンパイル前のソースコードとの対応を示すデバッグ情報を有し、
前記グループ化部は、前記デバッグ情報を基に、前記ソースコード内のコードブロック毎に、前記複数の第１の節点をグループ化することを特徴とする請求項５〜９のいずれか１項に記載の情報処理装置。
【請求項１１】
さらに、前記プログラムのコンパイル前のソースコードを基に、前記グループ化部によりグループ化されたグラフ構造の第１の節点及び第２の節点に対して、前記ソースコードに対応する用語を割り当てる用語割り当て部を有することを特徴とする請求項５〜１０のいずれか１項に記載の情報処理装置。
【請求項１２】
前記用語割り当て部は、前記第１の節点に対して、前記ソースコード内の関数名又は行番号を含む用語を割り当て、前記第２の節点に対して、前記ソースコード内の変数名を含む用語を割り当てることを特徴とする請求項１１に記載の情報処理装置。
【請求項１３】
さらに、前記用語割り当て部により割り当てられたグラフ構造を出力する出力部を有することを特徴とする請求項１１又は１２に記載の情報処理装置。
【請求項１４】
取得部が、プログラムを解析することにより、前記プログラム内のメモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスを取得し、前記メモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスとの対応を示す情報を生成することを特徴とする情報処理方法。
【請求項１５】
対象プログラムを解析することにより、前記対象プログラム内のメモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスを取得し、
前記メモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスとの対応を示す情報を生成する、
処理をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法及びプログラムに関する。
【背景技術】
【０００２】
ターゲットコードを実行前にホストコードに変換するターゲットコード事前変換方法が知られている（特許文献１参照）。ターゲットコードは、分岐命令もしくは分岐命令からの流入が起こらない命令群の最小単位である基本ブロックに分割される。基本ブロックごとに、ターゲットコードの命令が解析され、レジスタからの読み込み命令、レジスタへの書き込み命令、メモリからの読み込み命令、メモリへの書き込み命令および算術論理命令が検出される。その場合には、当該命令に対応するノードや辺とするとともに、あるレジスタにロードされる値の、他のレジスタや直値あるいはメモリ内容との依存関係を表現した依存グラフが作成される。メモリ参照テーブルは、メモリへの読み書きアクセスがあった際に利用され、メモリ読み込み内容及びメモリ書き込み内容とアドレス値とを対応づける。依存グラフとメモリ参照テーブルが連携され、分岐命令の事前変換に際し、飛び先アドレスとして可能性のある全てのアドレス値がエントリポイントとしてリスト化される。
【０００３】
また、キャッシュメモリを有するコンピュータに対する高性能なオブジェクトプログラムを生成するコンパイル方法が知られている（特許文献２）。入力プログラム内のメモリ参照間で生じるキャッシュ競合の発生が検出される。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−１５９９３６号公報
【特許文献２】特開平７−８４７９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
プロセッサは、ソフトウェアの実行により処理を行うことができる。ソフトウェアの処理を高速化するために、その処理をハードウェアのＦＰＧＡ（field-programmable gate array）に行わせることができる。ＦＰＧＡを開発するためには、ハードウェア設計者が、ソフトウェアの処理内容を理解した上で、ハードウェアアーキテクチャを意識したハードウェア動作記述を作成する必要があり、容易ではない。
【０００６】
１つの側面では、本発明の目的は、ハードウェアアーキテクチャを意識したハードウェア動作記述の作成を支援することができる情報処理装置、情報処理方法及びプログラムを提供することである。
【課題を解決するための手段】
【０００７】
情報処理装置は、プログラムを解析することにより、前記プログラム内のメモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスを取得し、前記メモリアクセス命令が記憶されているメモリのアドレスと、前記メモリアクセス命令によりアクセスされるメモリのアドレスとの対応を示す情報を生成する取得部を有する。
【発明の効果】
【０００８】
１つの側面では、ハードウェアアーキテクチャを意識したハードウェア動作記述の作成を支援することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、本実施形態による情報処理装置のハードウェア構成例を示す図である。
【図２】図２は、コンパイラ、動的解析ツール、及びメモリアクセスデータ解析ツールの処理例を説明するための図である。
【図３】図３は、ソースファイルの例を示す図である。
【図４】図４は、メモリアクセスデータの例を示す図である。
【図５】図５（Ａ）はグラフ生成部により生成されるグラフ構造の例を示す図であり、図５（Ｂ）はグループ化部により生成されるグラフ構造の例を示す図である。
【図６】図６（Ａ）は命令アドレス節点のグループ化の例を説明するための図であり、図６（Ｂ）はメモリアドレス節点のグループ化の例を説明するための図である。
【図７】図７は、グループ化部及び用語割り当て部により生成されるグラフ構造の例を示す図である。
【図８】図８（Ａ）は共有メモリを有するアクセラレータの構成例を示す図であり、図８（Ｂ）はローカルメモリを有するアクセラレータの構成例を示す図である。
【図９】図９は、動的解析ツールの処理例を示すフローチャートである。
【図１０】図１０（Ａ）は第１のブレークポイントに処理が達したときの処理例を示すフローチャートであり、図１０（Ｂ）は第２のブレークポイントに処理が達したときの処理例を示すフローチャートである。
【図１１】図１１は、メモリアクセス監視領域にアクセスされたときの処理例を示すフローチャートである。
【図１２】図１２は、メモリアクセスデータ解析ツールの処理例を示すフローチャートである。
【発明を実施するための形態】
【００１０】
図１は、本実施形態による情報処理装置１００のハードウェア構成例を示す図である。情報処理装置１００は、コンピュータであり、バス１０１と、中央処理装置（ＣＰＵ）１０２と、リードオンリーメモリ（ＲＯＭ）１０３と、ランダムアクセスメモリ（ＲＡＭ）１０４と、ネットワークインターフェース１０５と、入力装置１０６と、出力装置１０７と、外部記憶装置１０８と、タイマ１０９を有する。
【００１１】
ＣＰＵ１０２は、データの処理又は演算を行うと共に、バス１０１を介して接続された各種構成要素を制御する。ＲＯＭ１０３は、起動プログラムを記憶する。ＣＰＵ１０２は、ＲＯＭ１０３内の起動プログラムを実行することにより起動する。外部記憶装置１０８は、図２のコンパイラ２０１、動的解析ツール２０２及びメモリアクセスデータ解析ツール２０３を含むプログラムを記憶する。ＣＰＵ１０２は、外部記憶装置１０８に記憶されているコンパイラ２０１、動的解析ツール２０２及びメモリアクセスデータ解析ツール２０３を含むプログラムをＲＡＭ１０４に展開して実行する。ＲＡＭ１０４は、プログラム及びデータを記憶する。外部記憶装置１０８は、例えばハードディスク記憶装置やＣＤ−ＲＯＭ等であり、電源を切っても記憶内容が消えない。ネットワークインターフェース１０５は、インターネット等のネットワークに接続するためのインターフェースである。入力装置１０６は、例えばキーボード及びマウス等であり、各種指定又は入力等を行うことができる。出力装置１０７は、ディスプレイ及びプリンタ等である。タイマ１０９は、時刻情報を生成する。
【００１２】
本実施形態は、コンピュータがプログラムを実行することによって実現することができる。また、上記のプログラムを記録したコンピュータ読み取り可能な記録媒体及び上記のプログラム等のコンピュータプログラムプロダクトも本発明の実施形態として適用することができる。記録媒体としては、例えばフレキシブルディスク、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、磁気テープ、不揮発性のメモリカード、ＲＯＭ等を用いることができる。
【００１３】
次に、アクセラレータについて説明する。プロセッサは、プログラムの実行により、種々の処理を行うことができる。プログラムの処理は、比較的低速である。大量のデータを高速に処理する必要がある場合、プロセッサが実行するプログラムの処理は、処理速度及び消費電力の面で、不利である。その場合、ＧＰＧＰＵ（General-purpose computing on graphics processing units）又はＦＰＧＡなどのアクセラレータを用いる。アクセラレータは、ハードウェアであり、処理速度及び消費電力の面で、優れている。設計者は、所望の処理を、処理内容及び処理目的に応じて、アクセラレータにより実行する処理と、プロセッサにより実行する処理に分ける。次に、設計者は、アクセラレータの処理を、ハードウェア設計用の記述言語（高位合成ツールを使用するのであれば例えばＣ言語）によるソースコードとして記述する。次に、設計者は、高位合成ツール等を用いて、そのソースコードを基にアクセラレータを開発することができる。
【００１４】
ＦＰＧＡでアクセラレータを実装する場合、ハードウェア回路開発に大きな工数がかかる。高位合成ツールを利用することで、抽象度の高い高級言語記述を用いて設計することができるため、ハードウェア回路開発の工数を削減できる。しかし、優れた回路を生成させるためには、設計者は、ハードウェアアーキテクチャを意識して、高位合成用の高級言語記述のソースコードを作成する必要がある。
【００１５】
一般の高級言語記述を、そのまま、高位合成ツールに与えると、多くの場合、性能の低い回路や、ＦＰＧＡに入りきらないほど巨大な回路が生成される、という課題が生じる。そのため、ハードウェア設計者が、アクセラレータにしたいソースコードの処理内容を理解した後に、ハードウェアアーキテクチャを意識した高級言語記述を、新たに書く必要がある。ハードウェア設計者がアクセラレータ対象処理のソースコードの処理内容を理解するのには、工数がかかる。アクセラレータ向きの高級言語記述のソースコードを作成するには、アクセラレータ対象処理のソースコードの理解度と、設計者のスキルレベルに依存する。そこで、本実施形態は、ハードウェアアーキテクチャを意識したソースコードの作成を支援することができる情報処理装置１００を提供することを目的とする。
【００１６】
図２は、情報処理装置１００が実行するコンパイラ２０１、動的解析ツール２０２、及びメモリアクセスデータ解析ツール２０３の処理例を説明するための図である。コンパイラ２０１、動的解析ツール２０２、及びメモリアクセスデータ解析ツール２０３は、コンピュータプログラムであり、情報処理装置１００内のＣＰＵ１０２により実行される。ソースファイル２１１、入力データファイル２１３及び解析場所指定ファイル２１４は、図１の外部記憶装置１０８に保存されている。ソースファイル２１１は、１個のファイルでもよいし、複数個に分割されたファイルでもよい。ソースファイル２１１は、もともとプロセッサ実行されていたプログラムに対応する高級言語記述のソースコードである。アクセラレータにしたい処理は、ソースファイル２１１の一部として含まれている。以下、情報処理装置１００の情報処理方法を説明する。
【００１７】
図３は、ソースファイル２１１の例を示す図である。ソースファイル２１１は、Ｃ言語により記述されたソースコードである。ソースファイル２１１の左端の番号は、ソースファイル２１１の行番号を示す。ソースファイル２１１は、第２１行の関数ｍａｉｎと、第３行の関数ｆｔ０１を有する。関数ｍａｉｎは、変数ｉ、ｉｎ及びｏｕｔを有する。変数ｉｎ及びｏｕｔは、配列変数である。関数ｆｔ０１は、変数ｊ、ｍｅｍ１及びｔ０を有する。変数ｍｅｍ１は、配列変数である。ソースファイル中の連続する行をコードブロックと呼ぶことにする。コードブロックは関数を小さな単位へ分割する。関数ｆｔ０１は、第８〜第１１行のｆｏｒ文の第１のコードブロック３０１と、第１２〜第１４行のｆｏｒ文の第２のコードブロック３０２と、第１５〜第１７行のｆｏｒ文の第３のコードブロック３０３とを有する。上記の３個のｆｏｒ文は、それぞれ、８回のループ処理を行う。コードブロック３０１、３０２及び３０３は、ループ処理を構成する範囲を１つのコードブロックとしている。図３で明記していないが、ループ処理に対応するコードブロックに含まれない連続行もコードブロックとする。図３では、第４行から第７行までを１つのコードブロックとする。第２２行から第２６行までは１つのコードブロックである。第２８行から第３０行までは１つのコードブロックである。
【００１８】
図２において、設計者は、ソースファイル２１１に対して、デバッグ情報の生成を指定したコンパイルを指示する。例えば、設計者は、ＧＣＣコンパイラを利用する場合、−ｇオプションを指定することにより、デバッグ情報の生成を指定することができる。ＣＰＵ１０２は、コンパイラ２０１の実行により、ソースファイル２１１をコンパイルし、デバッグ情報を含む実行可能ファイル２１２を生成する。そして、ＣＰＵ１０２は、実行可能ファイル２１２を外部記憶装置１０８に書き込む。実行可能ファイル２１２は、機械語のプログラムであり、ＣＰＵ１０２が実行可能なファイルである。デバッグ情報は、規格化されたフォーマットが存在し、例えば、ＤＷＡＲＦフォーマットである。例えば、図３のソースファイル２１１の第１０行のソースコードは、コンパイラ２０１により、実行可能ファイル２１２内のＲＡＭ（メモリ）１０４に対するリード命令（ロード命令）及びライト命令（ストア命令）を含む命令に変換される。リード命令及びライト命令は、ＲＡＭ１０４に対するメモリアクセス命令である。デバッグ情報は、メモリアクセス命令が記憶されているＲＡＭ１０４のアドレスを、ソースファイル２１１内のソースコード中の場所（ファイル名及び行番号）へ、対応付けができる情報を有する。実行可能ファイル２１２は、実行可能ファイル２１２と実行可能ファイル２１２のコンパイル前のソースファイル２１１との対応を示すデバッグ情報を有する。メモリアクセスデータ解析ツール２０３は、デバッグ情報を用いることにより、実行可能ファイル２１２内のメモリアクセス命令が記憶されているＲＡＭ１０４のアドレスから、そのメモリアクセス命令に対応するソースファイル２１１内のソースコードの場所（ソースファイル２１１のファイル名及び行番号）を取得することができる。また、メモリアクセスデータ解析ツール２０３は、静的に配置されたデータ領域（Ｃ言語では、ｓｔａｔｉｃ修飾子をつけて宣言された変数）のアドレスから、ソースファイル２１１内の変数名へ対応付けすることができる。
【００１９】
ＣＰＵ１０２は、動的解析ツール２０２の実行により、実行可能ファイル２１２、入力データファイル２１３及び解析場所指定ファイル２１４を入力し、メモリアクセスデータ２１５を生成する。入力データファイル２１３は、実行可能ファイル２１２の入力データを含むファイルであり、省略可能である。例えば、図３のソースファイル２１１の第２４行に、入力データが記述されている。解析場所指定ファイル２１４は、メモリアクセス解析を行いたいソースファイル２１１内の変数を指定するためのファイルである。解析場所指定ファイル２１４は、［ソースファイル２１１のファイル名、行番号、変数名］の一又は複数の組みを有する。例えば、［"ft01.c", 24, in］のように指定される。
【００２０】
図４は、メモリアクセスデータ２１５の例を示す図である。メモリアクセスデータ２１５は、時刻４０１と、命令アドレス４０２と、メモリアドレス４０３と、種別４０４の複数の組みを有する。命令アドレス４０２は、実行可能ファイル２１２内のメモリアクセス命令が記憶されているＲＡＭ１０４のアドレスである。メモリアドレス４０３は、実行可能ファイル２１２内のメモリアクセス命令によりアクセスされるＲＡＭ１０４のアドレスである。種別４０４は、実行可能ファイル２１２内のメモリアクセス命令がＲＡＭ１０４に対するリード命令Ｒとライト命令Ｗのいずれであるのかを示す情報である。時刻４０１は、実行可能ファイル２１２内のメモリアクセス命令が実行される時刻情報であり、実時刻である必要はなく、メモリアクセス命令が実行される順番を示すものであればよい。
【００２１】
ＣＰＵ１０２は、動的解析ツール２０２の実行により、実行可能ファイル２１２を解析することにより、解析場所指定ファイル２１４により指定されるソースファイル２１１内の変数名のアクセスに対応する、時刻４０１と、命令アドレス４０２と、メモリアドレス４０３と、種別４０４を取得し、メモリアクセスデータ２１５を生成する。メモリアクセスデータ２１５は、時刻４０１と、命令アドレス４０２と、メモリアドレス４０３と、種別４０４との対応を示す情報を有する。なお、時刻４０１と種別４０４は、省略可能である。なお、動的解析ツール２０２の処理の詳細は、後に、図９〜図１１を参照しながら説明する。
【００２２】
図２において、メモリアクセスデータ解析ツール２０３は、グラフ生成部２０４、グループ化部２０５、用語割り当て部２０６及び出力部２０７のモジュールを有する。ＣＰＵ１０２は、メモリアクセスデータ解析ツール２０３の実行により、ソースファイル２１１、実行可能ファイル２１２、メモリアクセスデータ２１５及び指定節点数Ｎを入力し、グラフ構造２１６を出力する。以下、グラフ生成部２０４、グループ化部２０５、用語割り当て部２０６及び出力部２０７の処理を説明する。
【００２３】
図５（Ａ）は、図２のグラフ生成部２０４により生成される初期状態のグラフ構造５００の例を示す図である。ＣＰＵ１０２は、グラフ生成部２０４の実行により、図４のメモリアクセスデータ２１５を基に、図５（Ａ）のグラフ構造５００を生成する。グラフ構造５００は、複数の命令アドレス節点５０１〜５０６と、複数のメモリアドレス節点５２１〜５２６と、複数の枝５１１〜５１６とを有する。６個の命令アドレス節点５０１〜５０６は、それぞれ、図４の６個の命令アドレス４０２を示す節点である。６個のメモリアドレス節点５２１〜５２６は、それぞれ、図４の６個のメモリアドレス４０３を示す節点である。６個の枝５１１〜５１６は、それぞれ、６個の命令アドレス節点５０１〜５０６と６個のメモリアドレス節点５２１〜５２６との対応を示す。また、６個の枝５１１〜５１６は、有向枝であり、それぞれ、図４の６個の種別４０４に応じた向きを有する。枝５１１、５１３及び５１５は、下のメモリアドレス節点から上の命令アドレス節点へ向かう枝であり、種別４０４がリード命令Ｒであることを示す。枝５１２、５１４及び５１６は、上の命令アドレス節点から下のメモリアドレス節点へ向かう枝であり、種別４０４がライト命令Ｗであることを示す。
【００２４】
図５（Ｂ）は、図２のグループ化部２０５により生成されるグラフ構造５３０の例を示す図である。ＣＰＵ１０２は、グループ化部２０５の実行により、図５（Ａ）のグラフ構造５００の複数の命令アドレス節点５０１〜５０６をグループ化（クラスタリング）することにより、命令アドレス節点の数を減らし、図５（Ｂ）の複数の命令アドレス節点５３１及び５３２を生成する。具体的には、ＣＰＵ１０２は、図５（Ａ）の同じ命令アドレス「０ｘ１２３０」を示す命令アドレス節点５０１，５０３，５０５をグループ化することにより、図５（Ｂ）の１個の命令アドレス「０ｘ１２３０」を示す命令アドレス節点５３１を生成する。また、ＣＰＵ１０２は、図５（Ａ）の同じ命令アドレス「０ｘ１２４０」を示す命令アドレス節点５０２，５０４，５０６をグループ化することにより、図５（Ｂ）の１個の命令アドレス「０ｘ１２４０」を示す命令アドレス節点５３２を生成する。
【００２５】
また、ＣＰＵ１０２は、グループ化部２０５の実行により、図５（Ａ）のグラフ構造５００の複数のメモリアドレス節点５２１〜５２６をグループ化することにより、メモリアドレス節点の数を減らし、図５（Ｂ）の複数のメモリアドレス節点５４１〜５４３を生成する。具体的には、ＣＰＵ１０２は、図５（Ａ）の同じメモリアドレス「０ｘ８０００」を示すメモリアドレス節点５２１及び５２２をグループ化することにより、図５（Ｂ）の１個のメモリアドレス「０ｘ８０００」を示すメモリアドレス節点５４１を生成する。また、ＣＰＵ１０２は、図５（Ａ）の同じメモリアドレス「０ｘ８００４」を示すメモリアドレス節点５２３及び５２４をグループ化することにより、図５（Ｂ）の１個のメモリアドレス「０ｘ８００４」を示すメモリアドレス節点５４２を生成する。また、ＣＰＵ１０２は、図５（Ａ）の同じメモリアドレス「０ｘ８００８」を示すメモリアドレス節点５２５及び５２６をグループ化することにより、図５（Ｂ）の１個のメモリアドレス「０ｘ８００８」を示すメモリアドレス節点５４３を生成する。
【００２６】
枝５１１は、メモリアドレス節点５４１から命令アドレス節点５３１へ向かう枝であり、リード命令Ｒを示す。枝５１２は、命令アドレス節点５３２からメモリアドレス節点５４１へ向かう枝であり、ライト命令Ｗを示す。枝５１３は、メモリアドレス節点５４２から命令アドレス節点５３１へ向かう枝であり、リード命令Ｒを示す。枝５１４は、命令アドレス節点５３２からメモリアドレス節点５４２へ向かう枝であり、ライト命令Ｗを示す。枝５１５は、メモリアドレス節点５４３から命令アドレス節点５３１へ向かう枝であり、リード命令Ｒを示す。枝５１６は、命令アドレス節点５３２からメモリアドレス節点５４３へ向かう枝であり、ライト命令Ｗを示す。
【００２７】
図６（Ａ）は、命令アドレス節点のグループ化の例を説明するための図である。ＣＰＵ１０２は、グループ化部２０５の実行により、グラフ構造６０１をグループ化し、グラフ構造６０２を生成する。グラフ構造６０１は、命令アドレス節点６１１〜６１４と、枝６２１〜６２４と、メモリアドレス節点６３１〜６３３を有する。枝６２１は、命令アドレス節点６１１からメモリアドレス節点６３１へ向かう枝であり、ライト命令Ｗを示す。枝６２２は、命令アドレス節点６１２からメモリアドレス節点６３２へ向かう枝であり、ライト命令Ｗを示す。枝６２３は、命令アドレス節点６１３からメモリアドレス節点６３３へ向かう枝であり、ライト命令Ｗを示す。枝６２４は、メモリアドレス節点６３３から命令アドレス節点６１４へ向かう枝であり、リード命令Ｒを示す。
【００２８】
グループ化部２０５は、グラフ構造６０１の２個の命令アドレス節点６１３及び６１４をグループ化し、グラフ構造６０２の１個の命令アドレス節点６１５を生成する。グラフ構造６０２は、命令アドレス節点６１１，６１２，６１５と、枝６２１〜６２４と、メモリアドレス節点６３１〜６３３を有する。枝６２３は、命令アドレス節点６１５からメモリアドレス節点６３３へ向かう枝であり、ライト命令Ｗを示す。枝６２４は、メモリアドレス節点６３３から命令アドレス節点６１５へ向かう枝であり、リード命令Ｒを示す。
【００２９】
図６（Ｂ）は、メモリアドレス節点のグループ化の例を説明するための図である。ＣＰＵ１０２は、グループ化部２０５の実行により、グラフ構造６０１をグループ化し、グラフ構造６０３を生成する。図６（Ｂ）のグラフ構造６０１は、図６（Ａ）のグラフ構造６０１と同じである。ＣＰＵ１０２は、グラフ構造６０１の２個のメモリアドレス節点６３１及び６３２をグループ化し、グラフ構造６０３の１個のメモリアドレス節点６３４を生成する。グラフ構造６０３は、命令アドレス節点６１１〜６１４と、枝６２１〜６２４と、メモリアドレス節点６３３及び６３４を有する。枝６２１は、命令アドレス節点６１１からメモリアドレス節点６３４に向かう枝であり、ライト命令Ｗを示す。枝６２２は、命令アドレス節点６１２からメモリアドレス節点６３４に向かう枝であり、ライト命令Ｗを示す。
【００３０】
次に、節点をグループ化する１０種類のグループ化処理の例を説明する。第１〜第６のグループ化処理は、図６（Ａ）のように、命令アドレス節点をグループ化する処理である。第７〜第１０のグループ化処理は、図６（Ｂ）のように、メモリアドレス節点をグループ化する処理である。１０種類のグループ化処理を例示するが、グループ化の方法はこれだけに限定はされない。ＣＰＵ１０２は、似た特徴を持つ節点を１個の節点で置き換えることによって、節点数の少ないシンプルなグラフ構造を得ることができる。シンプルなグラフ構造は、図表現が人間にとって理解しやすく、ソースファイル２１１の処理内容を理解しやすくできる。
【００３１】
第１のグループ化処理では、命令アドレスの単位でグループ化する。グループ化部２０５は、図５（Ａ）及び（Ｂ）のように、同じ命令アドレスを示す複数の命令アドレス節点５０１，５０３，５０５をグループ化し、１個の命令アドレス節点５３１にまとめる。
【００３２】
第２のグループ化処理では、ソースファイルの単位でグループ化する。グループ化部２０５は、複数のソースファイル２１１のうちの同じソースファイルに含まれている複数の命令アドレスを示す命令アドレス節点をグループ化し、１個の命令アドレス節点にまとめる。
【００３３】
第３のグループ化処理では、関数の単位でグループ化する。グループ化部２０５は、図３のソースファイル２１１内の同じ関数ｍａｉｎ又はｆｔ０１に含まれているソースコード行に対応する命令アドレスを示す命令アドレス節点をグループ化し、１個の命令アドレス節点にまとめる。
【００３４】
第４のグループ化処理では、コードブロックの単位でグループ化する。グループ化部２０５は、図３のソースファイル２１１のコードブロックブロック３０１〜３０３のうちの同じコードブロックに含まれているソースコード行に対応する命令アドレスを示す命令アドレス節点をグループ化し、１個の命令アドレス節点にまとめる。
【００３５】
第５のグループ化処理では、ループ処理１回の実行の単位でグループ化する。グループ化部２０５は、図４のメモリアクセスデータ２１５内の時刻４０１を参照し、図３のソースファイル２１１のｆｏｒ文のループ処理のうちの１回のループ処理実行に含まれるソースコード行に対応する命令アドレスを示す命令アドレス節点を、１個の命令アドレス節点にまとめる。このグループ化処理では時刻４０１を利用する。
【００３６】
第６のグループ化処理では、関数とそれが呼び出す関数も含めた複数の関数の単位でグループ化する。グループ化部２０５は、図３のソースファイル２１１において、第１の関数（例えばｍａｉｎ）に含まれるソースコードに対応する命令アドレスを示す命令アドレス節点と、その第１の関数から呼び出された第２の関数（例えばｆｔ０１）に含まれるソースコードに対応する命令アドレスを示す命令アドレス節点とをグループ化し、１個の命令アドレス節点にまとめる。グループ化する関数と呼び出し段数は、指定可能である。
【００３７】
第７のグループ化処理では、メモリアドレスの単位でグループ化する。グループ化部２０５は、図５（Ａ）及び（Ｂ）のように、同じメモリアドレスを示す複数のメモリアドレス節点５２１及び５２２をグループ化し、１個のメモリアドレス節点５４１にまとめる。
【００３８】
第８のグループ化処理では、変数の単位でグループ化する。グループ化部２０５は、ソースファイル２１１内の各変数名に対応するメモリ領域に含まれる複数のメモリアドレスを示すメモリアドレス節点をグループ化し、１個のメモリアドレス節点にまとめる。例えば、図３の配列変数ｍｅｍ１は、ｉｎｔ型８個のデータを記憶するため一定のアドレス範囲を有する。メモリ領域は、配列変数ｍｅｍ１が割り当てられた先頭アドレスから終了アドレスまでのアドレス範囲のことである。例えば、配列変数ｍｅｍ１［０］からｍｅｍ１［７］に対応するアドレス範囲に含まれるすべてのメモリアドレス節点を、１個のメモリアドレス節点にまとめる。
【００３９】
第９のグループ化処理では、連続実行した命令がアクセスしたメモリアクセスの単位でグループ化する。グループ化部２０５は、図４のメモリアクセスデータ２１５内の時刻４０１を参照し、時刻４０１が連続するメモリアクセスに対応するメモリアドレス（時間的に連続して実行された命令がアクセスしたメモリアドレス）を示すメモリアドレス節点をグループ化し、１個のメモリアドレス節点にまとめる。
【００４０】
第１０のグループ化処理では、動的に確保されるメモリ領域を考慮する。グループ化部２０５は、図３のソースファイル２１１の同じ変数名（例えばｉｎ、ｏｕｔ及びｍｅｍ１等）の異なるメモリアドレスを示すメモリアドレス節点をグループ化し、１個のメモリアドレス節点にまとめる。例えば、図３のソースファイル２１１において、関数ｍａｉｎ内で同じ関数ｆｔ０１が複数回呼び出される場合、関数ｆｔ０１内の変数ｍｅｍ１等は、呼び出される毎に、異なるメモリアドレスにメモリ領域が確保される可能性がある。そのような場合、ＣＰＵ１０２は、同じ変数名ｍｅｍ１に対応する異なるメモリアドレスを示すメモリアドレス節点をグループ化し、１個のメモリアドレス節点にまとめる。
【００４１】
図２において、指定節点数Ｎは、設計者が図１の入力装置１０６を用いることにより入力されるものであり、グループ化後の最大節点数を示す。ＣＰＵ１０２は、グループ化部２０５の実行により、実行可能ファイル２１２内のデバッグ情報を基に、上記の複数種類のグループ化処理を組み合わせることにより、グループ化後の命令アドレス節点とメモリアドレス節点の合計が指定節点数Ｎ以下になるように、節点のグループ化を行う。グループ化部２０５の処理の詳細は、後に、図１２を参照しながら説明する。
【００４２】
図７は、図２のグループ化部２０５及び用語割り当て部２０６により生成されるグラフ構造２１６の例を示す図である。ＣＰＵ１０２は、グループ化部２０５の実行により、命令アドレス節点及びメモリアドレス節点のグループ化により、グラフ構造２１６を生成する。グラフ構造２１６は、命令アドレス節点７０１〜７０５と、枝７１１〜７１８と、メモリアドレス節点７２１〜７２３を有する。この場合、解析場所指定ファイル２１４は、解析場所として、図３の変数ｉｎ、ｍｅｍ１及びｏｕｔの情報を有する。
【００４３】
ＣＰＵ１０２は、グループ化部２０５の実行により、実行可能ファイル２１２内のデバッグ情報を基に、ソースファイル２１１内のコードブロック毎に、命令アドレス節点をグループ化し、命令アドレス節点７０１〜７０５を生成する。命令アドレス節点７０１は、図３の関数ｍａｉｎ内の第２２〜第２５行のコードブロックの命令アドレス節点をグループ化したものである。命令アドレス節点７０２は、図３の関数ｆｔ０１内の第８〜第１１行の第１のコードブロック３０１の命令アドレス節点をグループ化したものである。命令アドレス節点７０３は、図３の関数ｆｔ０１内の第１２〜第１４行の第２のコードブロック３０２の命令アドレス節点をグループ化したものである。命令アドレス節点７０４は、図３の関数ｆｔ０１内の第１５〜第１７行の第３のコードブロック３０３の命令アドレス節点をグループ化したものである。命令アドレス節点７０５は、図３の関数ｍａｉｎ内の第２７行のコードブロックの命令アドレス節点をグループ化したものである。
【００４４】
また、ＣＰＵ１０２は、グループ化部２０５の実行により、実行可能ファイル２１２内のデバッグ情報を基に、ソースファイル２１１内の変数名毎に、メモリアドレス節点をグループ化することにより、メモリアドレス節点７２１〜７２３を生成する。メモリアドレス節点７２１は、図３の変数名ｉｎのメモリアドレス節点をグループ化したものである。メモリアドレス節点７２２は、図３の変数名ｍｅｍ１のメモリアドレス節点をグループ化したものである。メモリアドレス節点７２３は、図３の変数名ｏｕｔのメモリアドレス節点をグループ化したものである。
【００４５】
枝７１１は、命令アドレス節点７０１からメモリアドレス節点７２１に向かう枝であり、ライト命令Ｗを示す。枝７１２は、メモリアドレス節点７２１から命令アドレス節点７０２に向かう枝であり、リード命令Ｒを示す。枝７１３は、命令アドレス節点７０２からメモリアドレス節点７２２に向かう枝であり、ライト命令Ｗを示す。枝７１４は、命令アドレス節点７０３からメモリアドレス節点７２２に向かう枝であり、ライト命令Ｗを示す。枝７１５は、メモリアドレス節点７２２から命令アドレス節点７０３に向かう枝であり、リード命令Ｒを示す。枝７１６は、メモリアドレス節点７２２から命令アドレス節点７０４に向かう枝であり、リード命令Ｒを示す。枝７１７は、命令アドレス節点７０４からメモリアドレス節点７２３に向かう枝であり、ライト命令Ｗを示す。枝７１８は、メモリアドレス節点７２３から命令アドレス節点７０５に向かう枝であり、リード命令Ｒを示す。
【００４６】
また、ＣＰＵ１０２は、用語割り当て部２０６の実行により、図３のソースファイル２１１を参照し、グループ化部２０５によりグループ化されたグラフ構造２１６の命令アドレス節点７０１〜７０５及びメモリアドレス節点７２１〜７２３に対して、ソースファイル２１１に対応する用語を割り当てる。命令アドレス節点７０１〜７０５及びメモリアドレス節点７２１〜７２３は、ソースファイル２１１の用語に対応しているので、設計者が理解し易くなる。
【００４７】
具体的には、ＣＰＵ１０２は、命令アドレス節点７０１〜７０５に対して、ソースファイル２１１内の「シンボル（関数名）／コードブロック名／行番号」の用語を割り当てる。命令アドレス節点７０１は、「ｍａｉｎ／ＳＴＭＴ／２２」の用語が割り当てられ、関数名がｍａｉｎであり、コードブロック名がステートメント（ＳＴＭＴ）であり、開始行番号が２２であることを示す。命令アドレス節点７０２は、「ｆｔ０１／ｆｏｒ／８」の用語が割り当てられ、関数名がｆｔ０１であり、コードブロック名がｆｏｒ文であり、開始行番号が８であることを示す。命令アドレス節点７０３は、「ｆｔ０１／ｆｏｒ／１２」の用語が割り当てられ、関数名がｆｔ０１であり、コードブロック名がｆｏｒ文であり、開始行番号が１２であることを示す。命令アドレス節点７０４は、「ｆｔ０１／ｆｏｒ／１５」の用語が割り当てられ、関数名がｆｔ０１であり、コードブロック名がｆｏｒ文であり、開始行番号が１５であることを示す。命令アドレス節点７０５は、「ｍａｉｎ／ｆｏｒ／２７」の用語が割り当てられ、関数名がｍａｉｎであり、コードブロック名がｆｏｒ文であり、開始行番号が２７であることを示す。
【００４８】
また、用語割り当て部２０６は、メモリアドレス節点７２１〜７２３に対して、ソースファイル２１１内の「変数名」の用語を割り当てる。メモリアドレス節点７２１は、「ｉｎ」の用語が割り当てられ、変数名がｉｎであることを示す。メモリアドレス節点７２２は、「ｍｅｍ１」の用語が割り当てられ、変数名がｍｅｍ１であることを示す。メモリアドレス節点７２３は、「ｏｕｔ」の用語が割り当てられ、変数名がｏｕｔであることを示す。
【００４９】
次に、ＣＰＵ１０２は、図２の出力部２０７の実行により、用語割り当て部２０６により用語が割り当てられたグラフ構造２１６を図１の出力装置１０７に出力する。出力装置１０７は、ディスプレイ又はプリンタであり、グラフ構造２１６を表示又は印刷する。
【００５０】
設計者は、グラフ構造２１６を参照することにより、ハードウェアアーキテクチャを意識したハードウェア動作記述を比較的容易に作り直すことができるようになる。例えば、設計者は、グラフ構造２１６を参照することにより、並列処理可能な処理を見つけ、並列処理を行わせるためのハードウェア動作記述を生成することができる。アクセラレータは、並列処理を行うことにより、処理を高速化することができる。並列処理は、データレベル並列処理とタスクレベル並列処理を含む。データレベル並列処理は、シングルインストラクションマルチプルデータ（ＳＩＭＤ）処理に対応する。タスクレベル並列処理は、複数パイプラインの並列処理に対応する。
【００５１】
図８（Ａ）は、共有メモリ８０４を有するアクセラレータ８００の構成例を示す図であり、図７を流用して設計者が作ることができる。アクセラレータ８００は、回路８０１〜８０３と、共有メモリ８０４と、メモリ８０５，８０６とを有する。回路８０１は、例えば図７の命令アドレス節点７０２の処理を行うための回路である。回路８０２は、例えば図７の命令アドレス節点７０３の処理を行うための回路である。回路８０３は、例えば図７の命令アドレス節点７０４の処理を行うための回路である。共有メモリ８０４は、例えば図７のメモリアドレス節点７２２に対応する変数ｍｅｍ１のデータを記憶する。メモリ８０５は、例えば図７のメモリアドレス節点７２１に対応する変数ｉｎのデータを記憶する。メモリ８０６は、例えば図７のメモリアドレス節点７２３に対応する変数ｏｕｔのデータを記憶する。回路８０１〜８０３は、すべて、共有メモリ８０４にアクセス可能であるため、アクセスの衝突が生じる可能性がある。例えば、回路８０１が共有メモリ８０４にアクセスしている期間では、回路８０２及び８０３は共有メモリ８０４にアクセスすることができない。また正しい計算を行うために回路８０１、８０２、８０３の実行順序を正確に制御する必要もある。そのため、回路８０１〜８０３の並列処理が困難であり、高速処理させることが困難である。すなわち、現在のソースファイル２１１は、ハードウェアアーキテクチャが意識されておらず、並列処理のアクセラレータを生成することができない。設計者は、図７を見ることで、変数ｍｅｍ１に多数のメモリアクセスが集中していることに気が付き、変数ｍｅｍ１について改善を行えないかを検討することになる。
【００５２】
図８（Ｂ）は、ハードウェアアーキテクチャを意識したアクセラレータ８１０の構成例を示す図である。これは図３のソースコードにおいて、以下の修正を行うことで実現できる。
６行目    int mem1[8], mem2[8];
１３行目    mem2[j] = mem1[j] * 5 / t0;
１６行目    out[j] = mem2[j] + 1;
【００５３】
修正後のソースコードを図２のソースファイル２１１として適用することにより、図８（Ｂ）に類似したグラフ２１６を出力できる。アクセラレータ８１０は、回路８０１〜８０３と、メモリ８０５，８０６と、共有メモリ８０７，８０８とを有する。メモリ８０５は、変数ｉｎのデータを記憶する。メモリ８０６は、変数ｏｕｔのデータを記憶する。共有メモリ８０７は、変数ｍｅｍ１のデータを記憶する。共有メモリ８０８は、変数ｍｅｍ２のデータを記憶する。メモリ８０７は、回路８０１と回路８０２で共有されているが、それぞれ書き込みのみ、読み出しのみに分かれているので、デュアルポートメモリを使用し、かつ、処理開始タイミングを適切に制御することによって、回路８０１と回路８０２を同時実行できる。メモリ８０８も同様である。このため、図８（Ｂ）は、図８（Ａ）よりも並列実行できる割合が増加していて、より高性能なアクセラレータを実現できることになる。
【００５４】
高位合成ツールは、アクセラレータを開発するため、高級言語を用いたハードウェア動作記述をハードウェア記述言語（ＨＤＬ）ファイルに変換することができる。しかし、高位合成ツールは、高級言語記述にポインタ変数が使用されているとき、効率的な処理を行う回路を合成することができない。ポインタ変数の値が関数呼び出しの引数として使われていると、変数名が変化してしまうことがあり、ソースコードを見ただけでは、ポインタ変数が同一のメモリ領域を指しているのかどうか、すぐには判断できない。そこで、設計者は、グラフ構造２１６を参照することにより、変数名が異なっていても、実は同じメモリ領域を指していることを容易に知ることができる。これは、回路アーキテクチャの初期の検討段階で役立つ。
【００５５】
ハードウェア設計者は、回路アーキテクチャの検討段階で行う、タスクの分割、メモリの分割、の作業において、そのヒントとなる情報を、グラフ構造２１６から得られ、工数を削減できる。
【００５６】
図９は、図２の動的解析ツール２０２の処理例を示すフローチャートである。ＣＰＵ１０２は、動的解析ツール２０２の実行により、ステップＳ９０１〜Ｓ９０３の処理を行う。
【００５７】
ステップＳ９０１では、動的解析ツール２０２は、実行可能ファイル（解析対象プログラム）２１２、入力データファイル２１３及び解析場所指定ファイル２１４を外部記憶装置１０８からロードする。
【００５８】
次に、ステップＳ９０２では、動的解析ツール２０２は、ソフトウェアのデバッガＧＤＢのような機能を備えており、実行可能ファイル２１２内のデバッグ情報とソースファイル２１１を参照し、解析場所指定ファイル２１４が示す変数（解析場所）のメモリ確保が行われた直後の場所に第１のブレークポイントを設定する。例えば、動的解析ツール２０２は、解析場所が変数ｍｅｍ１である場合、実行可能ファイル２１２のプログラム中で、図３のソースファイル２１１の第６行の変数ｍｅｍ１のメモリ確保が行われた直後の場所に第１のブレークポイントを設定する。例えば、関数ｍａｉｎの実行が開始されると、変数ｉｎ及びｏｕｔのメモリ領域が確保され、関数ｆｔ０１の実行が開始されると、変数ｍｅｍ１のメモリ領域が確保される。
【００５９】
また、動的解析ツール２０２は、実行可能ファイル２１２内のデバッグ情報とソースファイル２１１を参照し、解析場所指定ファイル２１４が示す変数（解析場所）のメモリ開放が行われる直前の場所に第２のブレークポイントを設定する。例えば、動的解析ツール２０２は、解析場所が変数ｍｅｍ１である場合、実行可能ファイル２１２のプログラム中で、図３のソースファイル２１１の第１８行の関数ｆｔ０１が終了時に変数ｍｅｍ１のメモリ開放が行われる直前の場所に第２のブレークポイントを設定する。変数ｉｎ、ｏｕｔ、ｍｅｍ１等は関数内で宣言された変数なので、関数が終了する時点でメモリ領域が開放される。
【００６０】
次に、ステップＳ９０３では、動的解析ツール２０２は、実行可能ファイル（解析対象プログラム）２１２の実行を開始する。
【００６１】
図１０（Ａ）は、図９のステップＳ９０２で設定した第１のブレークポイントに処理が達したときの処理例を示すフローチャートである。ＣＰＵ１０２は、動的解析ツール２０２の実行により、ステップＳ１００１〜Ｓ１００３の処理を行う。
【００６２】
ステップＳ１００１では、動的解析ツール２０２は、実行可能ファイル（解析対象プログラム）２１２の処理が第１のブレークポイントに達したことを検知すると、ステップＳ１００２に進む。ステップＳ１００２では、動的解析ツール２０２は、解析場所の変数に対応するメモリ領域の先頭アドレスから終了アドレスまでを、メモリアクセス監視領域として設定する。次に、ステップＳ１００３では、動的解析ツール２０２は、実行可能ファイル（解析対象プログラム）２１２の実行を再開する。
【００６３】
図１０（Ｂ）は、図９のステップＳ９０２で設定した第２のブレークポイントに処理が達したときの処理例を示すフローチャートである。ＣＰＵ１０２は、動的解析ツール２０２の実行により、ステップＳ１０１１〜Ｓ１０１３の処理を行う。
【００６４】
ステップＳ１０１１では、動的解析ツール２０２は、実行可能ファイル（解析対象プログラム）２１２の処理が第２のブレークポイントに達したことを検知すると、ステップＳ１０１２に進む。ステップＳ１０１２では、動的解析ツール２０２は、第２のブレークポイントに対応するメモリアクセス監視領域の設定を解除する。次に、ステップＳ１０１３では、動的解析ツール２０２は、実行可能ファイル（解析対象プログラム）２１２の実行を再開する。
【００６５】
図１１は、図１０（Ａ）のステップＳ１００２で設定したメモリアクセス監視領域にアクセスされたときの処理例を示すフローチャートである。ＣＰＵ１０２は、動的解析ツール２０２の実行により、ステップＳ１１０１〜Ｓ１１０３の処理を行う。
【００６６】
ステップＳ１１０１では、動的解析ツール２０２は、実行可能ファイル（解析対象プログラム）２１２の処理により、メモリアクセス監視領域へのメモリアクセスが発生したことを検知した場合には、ステップＳ１１０２に進む。ステップＳ１１０２では、ＣＰＵ１０２は、検知されたメモリアクセスに応じて、時刻４０１、メモリアクセスを行った命令アドレス４０２、アクセスしたメモリアドレス４０３、及びメモリアクセスの種別（リード又はライト）４０４を、メモリアクセスデータ２１５として、外部記憶装置１０８に記録する。次に、ステップＳ１１０３では、ＣＰＵ１０２は、実行可能ファイル（解析対象プログラム）２１２の実行を再開する。
【００６７】
上記の動的解析ツール２０２で行っているメモリアクセス監視は、いくつかの方法によって実現できる。１つは、指定されたアドレスに対してメモリアクセスが行われると割り込みが発生する、watch pointと呼ばれる機能を有するＣＰＵ１０２を利用することである。watch pointの割り込みが発生したら、メモリアクセスデータ２１５を記録する。もう１つは、ＣＰＵ１０２が持つ、命令を１つずつステップ実行する機能を利用することで、メモリアクセス命令を見つけたら、メモリアクセス監視領域かを調べ、該当していればメモリアクセスデータ２１５を記録する。
【００６８】
動的解析ツール２０２のメモリアクセス監視をソフトウェアにより実現することも可能である。ＣＰＵエミュレータ上でプログラムを実行し、ＣＰＵエミュレータ側にて、プログラムが監視領域をメモリアクセスしたことを検出して、メモリアクセスデータ２１５を記録する。例えば、メモリ関係のバグを検出するツールＶＡＬＧＲＩＮＤと、ソフトウェアのデバッガＧＤＢを組み合わせて用いることにより、動的解析ツール２０２を実現することができる。
【００６９】
図１２は、図２のメモリアクセスデータ解析ツール２０３の処理例を示すフローチャートである。ＣＰＵ１０２は、メモリアクセスデータ解析ツール２０３の実行により、図４のメモリアクセスデータ２１５と、図２の設計者による指定節点数Ｎを入力する。
【００７０】
ステップＳ１２０１では、メモリアクセスデータ解析ツール２０３は、グラフ生成部２０４の実行により、図４のメモリアクセスデータ２１５を図５（Ａ）のグラフ構造５００に変換する。
【００７１】
ステップＳ１２０２〜Ｓ１２０７は、メモリアクセスデータ解析ツール２０３が、グループ化部２０５の実行により行う処理である。まず、ステップＳ１２０２では、メモリアクセスデータ解析ツール２０３は、上記の第１〜第１０のグループ化処理に基づくグループ化処理Ｆ０，Ｆ１，・・・を列挙する。グループ化処理の種類がたとえば１０であったとしても、グループ化処理を適用する対象が複数あるため、Ｆは多数存在する。
【００７２】
次に、ステップＳ１２０３では、メモリアクセスデータ解析ツール２０３は、グループ化処理Ｆ０，Ｆ１，・・・の各々について、グループ化前のグラフ構造５００に対して、グループ化後のグラフ構造で減少する節点数Ｄ０，Ｄ１，・・・を求める。
【００７３】
次に、ステップＳ１２０４では、メモリアクセスデータ解析ツール２０３は、減少する節点数Ｄ０，Ｄ１，・・・の小さい順に、グループ化処理Ｆ０，Ｆ１，・・・をソートして、リストＦＬを生成する。なお、ソートの順番は、上記の順番に限定されない。グループ化処理Ｆ０，Ｆ１，・・・に対して、評価値を与える評価関数Ｅがあり、メモリアクセスデータ解析ツール２０３は、Ｅ（Ｆ０）＝Ｄ０、Ｅ（Ｆ１）＝Ｄ１、・・・を計算する。そして、メモリアクセスデータ解析ツール２０３は、評価値Ｄ０，Ｄ１，・・・の順で、グループ化処理Ｆ０，Ｆ１，・・・をソートして、リストＦＬを生成する。
【００７４】
次に、ステップＳ１２０５では、メモリアクセスデータ解析ツール２０３は、現在のグラフ構造の命令アドレス節点とメモリアドレス節点との合計節点数が指定節点数Ｎ以下であるか否かを判定する。メモリアクセスデータ解析ツール２０３は、その合計節点数が指定節点数Ｎ以下である場合には、ステップＳ１２０８に進み、その合計節点数が指定節点数Ｎ以下でない場合には、ステップＳ１２０６に進む。
【００７５】
ステップＳ１２０６では、メモリアクセスデータ解析ツール２０３は、リストＦＬが空であるか否かを判定する。メモリアクセスデータ解析ツール２０３は、リストＦＬが空でない場合には、ステップＳ１２０７に進み、リストＦＬが空である場合には、エラーを表示し、図１２の処理を終了する。
【００７６】
ステップＳ１２０７では、メモリアクセスデータ解析ツール２０３は、リストＦＬの先頭からグループ化処理を取出し、その取り出したグループ化処理をリストＦＬから削除し、現在のグラフ構造に対してその取り出したグループ化処理を行うことにより、グループ化されたグラフ構造を生成する。
【００７７】
その後、メモリアクセスデータ解析ツール２０３は、ステップＳ１２０５に戻り、現在のグラフ構造の合計節点数が指定節点数Ｎ以下になるまで、上記の処理を繰り返す。メモリアクセスデータ解析ツール２０３は、現在のグラフ構造の命令アドレス節点とメモリアドレス節点の合計が指定節点数Ｎ以下になるまで、複数種類のグループ化処理のうちで、グループ化処理により命令アドレス節点とメモリアドレス節点の合計が減少する数が小さい方から順にグループ化処理を行う。
【００７８】
ステップＳ１２０８では、メモリアクセスデータ解析ツール２０３は、用語割り当て部２０６の実行により、ソースファイル２１１を参照し、グループ化部２０５によりグループ化されたグラフ構造の命令アドレス節点及びメモリアドレス節点に対して、ソースファイル２１１に対応する用語を割り当て、グラフ構造２１６を生成する。
【００７９】
次に、ステップＳ１２０９では、メモリアクセスデータ解析ツール２０３は、出力部２０７の実行により、用語割り当て部２０６により用語が割り当てられたグラフ構造２１６を出力装置１０７に出力する。出力装置１０７は、人間にとって理解し易いグラフ構造２１６の表示又は印刷を行う。
【００８０】
以上のように、情報処理装置１００は、グラフ構造２１６を設計者に提示することにより、ハードウェアアーキテクチャを意識したハードウェア動作記述の作成を支援することができる。
【００８１】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【００８２】
２０１  コンパイラ
２０２  動的解析ツール
２０３  メモリアクセスデータ解析ツール
２０４  グラフ生成部
２０５  グループ化部
２０６  用語割り当て部
２０７  出力部
２１１  ソースファイル
２１２  実行可能ファイル
２１３  入力データファイル
２１４  解析場所指定ファイル
２１５  メモリアクセスデータ
２１６  グラフ構造
【図１】
2019067227.tif 000003
【図２】
2019067227.tif 000004
【図３】
2019067227.tif 000005
【図４】
2019067227.tif 000006
【図５】
2019067227.tif 000007
【図６】
2019067227.tif 000008
【図７】
2019067227.tif 000009
【図８】
2019067227.tif 000010
【図９】
2019067227.tif 000011
【図１０】
2019067227.tif 000012
【図１１】
2019067227.tif 000013
【図１２】
2019067227.tif 000014