(57)【特許請求の範囲】
【請求項１】
ターゲットデバイスのプロセッサが実行することになるターゲットプログラムの実行クロックサイクル数を算出する情報処理装置であって、
前記ターゲットデバイスのプロセッサが解釈実行する命令セット、各命令の意味及びクロックサイクル数を表す命令セットテーブルを格納する格納手段と、
前記ターゲットプログラムにおける特定命令を抽出する抽出手段と、
前記ターゲットプログラムの構造及び意味を前記命令セットテーブルを参照して解析する解析手段と、
前記特定命令に基づいて前記ターゲットプログラムを複数の部分プログラムに分割し、前記命令セットテーブルを参照して部分プログラムごとのクロックサイクル数を算出する分割手段と、
前記部分プログラムごとのクロックサイクル数と、前記解析の結果に基づく当該部分プログラム間の遷移の情報とを記述したフローを生成するフロー生成手段と、
前記解析の結果を参照して変数を抽出し、該抽出された変数及び前記解析の結果に基づいて、前記ターゲットプログラムと実質的に等価なプロセッサ非依存の実行プログラムを生成する逆コンパイル手段と、
前記プロセッサ非依存の実行プログラムと、前記特定命令とに基づいて、該特定命令に関するフラグのシーケンスを生成するための、プロセッサ非依存のフラグ生成プログラムを生成するプログラム生成手段と、
前記プロセッサ非依存のフラグ生成プログラムを前記ターゲットデバイスのプロセッサが実行可能な形式にコンパイルして実行することで得られたフラグのシーケンスと、前記フローにおける部分プログラム間の遷移の情報とに従い、前記部分プログラムごとのクロックサイクル数を累積加算することで、前記ターゲットプログラムのクロックサイクル数を算出する算出手段と
を有することを特徴とする情報処理装置。
【請求項２】
前記特定命令は条件分岐命令を含み、
前記特定命令に関するフラグは、当該条件分岐命令の条件の成立、不成立を表すフラグである
ことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記プログラム生成手段は、前記プロセッサ非依存の実行プログラムの条件分岐命令を解釈して、分岐の条件の成立、不成立を示すフラグのシーケンスを生成するための、プロセッサ非依存のプログラムを、前記フラグ生成プログラムとして生成し、
前記算出手段は、前記プロセッサ非依存のフラグ生成プログラムを前記ターゲットデバイスのプロセッサが実行可能な形式にコンパイルして実行することで得られたフラグのシーケンスと、前記フローにおける部分プログラム間の遷移の情報とに従って、前記部分プログラムを実行の順に追跡し、各プログラムのクロックサイクル数を累積加算する
ことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記特定命令は、キャッシュメモリに対するロード・ストア命令を含み、
前記特定命令に関するフラグは、当該キャッシュメモリに対するヒット・ミスに関するフラグである
ことを特徴とする請求項１に記載の情報処理装置。
【請求項５】
ターゲットデバイスのプロセッサが実行することになるターゲットプログラムの実行クロックサイクル数を算出する情報処理装置の制御方法であって、
格納手段が、前記ターゲットデバイスのプロセッサが解釈実行する命令セット、各命令の意味及びクロックサイクル数を表す命令セットテーブルを格納する格納工程と、
抽出手段が、前記ターゲットプログラムにおける特定命令を抽出する抽出工程と、
解析手段が、前記ターゲットプログラムの構造及び意味を前記命令セットテーブルを参照して解析する解析工程と、
分割手段が、前記特定命令に基づいて前記ターゲットプログラムを複数の部分プログラムに分割し、前記命令セットテーブルを参照して部分プログラムごとのクロックサイクル数を算出する分割工程と、
フロー生成手段が、前記部分プログラムごとのクロックサイクル数と、前記解析の結果に基づく当該部分プログラム間の遷移の情報とを記述したフローを生成するフロー生成工程と、
逆コンパイル手段が、前記解析の結果を参照して変数を抽出し、該抽出された変数及び前記解析の結果に基づいて、前記ターゲットプログラムと実質的に等価なプロセッサ非依存の実行プログラムを生成する逆コンパイル工程と、
プログラム生成手段が、前記プロセッサ非依存の実行プログラムと、前記特定命令とに基づいて、該特定命令に関するフラグのシーケンスを生成するための、プロセッサ非依存のフラグ生成プログラムを生成するプログラム生成工程と、
算出手段が、前記プロセッサ非依存のフラグ生成プログラムを前記ターゲットデバイスのプロセッサが実行可能な形式にコンパイルして実行することで得られたフラグのシーケンスと、前記フローにおける部分プログラム間の遷移の情報とに従い、前記部分プログラムごとのクロックサイクル数を累積加算することで、前記ターゲットプログラムのクロックサイクル数を算出する算出工程と
を有することを特徴とする情報処理装置の制御方法。
【請求項６】
コンピュータが読み込み実行することで、前記コンピュータを、請求項１乃至４のいずれか１項に記載の情報処理装置における各手段として機能させるためのプログラム。
【請求項７】
請求項６のプログラムを格納したことを特徴とするコンピュータが読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行サイクル数を算出する技術に関するものである。
【背景技術】
【０００２】
プロセッサ（ＣＰＵ、ＤＳＰ等）を内蔵する電子機器を開発する場合には、そのプロセッサが実行するプログラムを事前評価するため等、プログラムの実行サイクル数を算出することが行われる。
【０００３】
係る技術を開示する文献として特許文献１が挙げられる。この特許文献１では、全体プログラムから条件分岐命令及び関数呼び出し命令の少なくとも一つを境界点として分割された部分プログラムを抽出し、各部分プログラムの実行クロックサイクル数を算出する。そして、プログラムを実行させたときの前記条件分岐命令についての分岐条件の成立・不成立を表すフラグ系列（分岐ビット系列）を生成する。そして、このフラグ系列を基に部分プログラムの実行系列を生成し、この系列に基づいて部分プログラムの実行サイクル数を積算して全体プログラムの実行クロックサイクル数を算出する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第５４０３７６０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
高速・短時間でサイクル数を算出するためには、その分岐ビット系列の生成を高速に実行する必要がある。
【０００６】
また、分岐ビットは真偽の一致のみが必要であるため、分岐ビット系列を生成するプログラムを実行するプロセッサは、実行プログラムを実際に実行する電子機器内のプロセッサ（以下、ターゲットプロセッサという）と同一である必要はない。当然、実行クロックサイクル数を算出するプロセッサと、ターゲットプロセッサが同一である必要もない。
【０００７】
以上から、図３にあるようにターゲットプロセッサ以外の高速な実行環境で分岐ビット系列の生成をおこなえるよう、プログラムは実行機種非依存の所謂ソースプログラムの段階で分岐履歴生成が行なわれるように改変される場合が多い。
【０００８】
一方でソースプログラムはターゲット環境上で最適に実行されるようにターゲット用のコンパイラで実行形式に変換される。このため、図４にあるように前記分岐履歴を得たプログラム構造とターゲット用の実行形式のプログラム構造とが一致しないために、算出されるサイクル数が不正確になるという課題がある。
【課題を解決するための手段】
【０００９】
この課題を解決するため、例えば本発明の情報処理装置は以下の構成を備える。すなわち、
ターゲットデバイスのプロセッサが実行することになるターゲットプログラムの実行クロックサイクル数を算出する情報処理装置であって、
前記ターゲットデバイスのプロセッサが解釈実行する命令セット、各命令の意味及びクロックサイクル数を表す命令セットテーブルを格納する格納手段と、
前記ターゲットプログラムにおける特定命令を抽出する抽出手段と、
前記ターゲットプログラムの構造及び意味を前記命令セットテーブルを参照して解析する解析手段と、
前記特定命令に基づいて前記ターゲットプログラムを複数の部分プログラムに分割し、前記命令セットテーブルを参照して部分プログラムごとのクロックサイクル数を算出する分割手段と、
前記部分プログラムごとのクロックサイクル数と、前記解析の結果に基づく当該部分プログラム間の遷移の情報とを記述したフローを生成するフロー生成手段と、
前記解析の結果を参照して変数を抽出し、該抽出された変数及び前記解析の結果に基づいて、前記ターゲットプログラムと実質的に等価なプロセッサ非依存の実行プログラムを生成する逆コンパイル手段と、
前記プロセッサ非依存の実行プログラムと、前記特定命令とに基づいて、該特定命令に関するフラグのシーケンスを生成するための、プロセッサ非依存のフラグ生成プログラムを生成するプログラム生成手段と、
前記プロセッサ非依存のフラグ生成プログラムを前記ターゲットデバイスのプロセッサが実行可能な形式にコンパイルして実行することで得られたフラグのシーケンスと、前記フローにおける部分プログラム間の遷移の情報とに従い、前記部分プログラムごとのクロックサイクル数を累積加算することで、前記ターゲットプログラムのクロックサイクル数を算出する算出手段とを有する。
【発明の効果】
【００１０】
本発明によれば、ターゲットプロセッサで実行されるプログラムと、ターゲットプロセッサの命令セットテーブルとから、そのプログラムを実行した際のクロックサイクル数を高い精度で算出することが可能になる。
【図面の簡単な説明】
【００１１】
【図１】実施形態の実行クロックサイクル数を算出する装置のブロック構成図。
【図２】実施形態の実行クロックサイクル数の算出処理の際の、部分プログラムの接続・移行を表すチャート。
【図３】背景技術の処理手順を表す図。
【図４】背景技術の課題を説明するための図。
【図５】実施形態における処理手順概要を表す図。
【図６】実施形態が適用する情報処理装置の構成図。
【図７】ターゲットＣＰＵの命令テーブルを示す図。
【図８】ターゲットプログラムをニーモニックで表す図。
【図９】図８における命令の意味を付加した状態を示す図。
【図１０】図９に、変数のマークを付加した状態を示す図。
【図１１】部分プログラムと実行サイクル数を示す図。
【図１２】部分プログラムと実行サイクル数を示す図。
【図１３】逆コンパイルして得たプログラムの例を示す図。
【図１４】分岐フラグ生成プログラムの例を示す図。
【発明を実施するための形態】
【００１２】
以下、添付図面に従って本発明に係る実施の形態を詳細に説明する。
【００１３】
［第１の実施形態］
図６は本実施形態における情報処理装置の概略構成を示す。実施形態では、開発対象の電子機器にて実行されるプログラムのクロックサイクル数を算出する装置を、パーソナルコンピュータ等の汎用情報処理装置で実現する例を示す。図示において、ＣＰＵ710は装置全体の制御を司るものであり、ＲＯＭ730、ＲＡＭ720に格納されたプログラムを実行する。なお、ターゲットデバイスに実装させるプロセッサ（ＤＳＰやＣＰＵ等）と、図６に示すＣＰＵ７１０は異なるものとする。なお、開発対象の電子機器、それに実装されるプロセッサ、そのプロセッサで実行されるプログラムを、以下では、ターゲットデバイス、ターゲットＣＰＵ、ターゲットプログラムと言う。
【００１４】
ＲＯＭ730には、ＢＩＯＳ(Basic Input/Output System)やブートプログラムが格納されている。ＨＤＤ740にはＯＳ(オペレーティングシステム)，クロックサイクル数算出のプログラムをはじめとする各種プログラム、更には、各種データファイルが格納されているものとする。ＩＯ760は入出力部であり、データを保持している外部機器に接続されることで実行サイクル数を求めるプログラム等データの入出力が可能なインターフェースである。例えば、このＩＯ760を介して、ターゲットデバイスに実装しようとするターゲットプログラムを入力し、ＨＤＤ740に格納される。バス750は、ＲＯＭ730、ＲＡＭ720、ＣＰＵ710、ＨＤＤ740およびＩＯ760間でデータやコマンドを伝達可能に接続する。
【００１５】
上記構成において、本装置の電源がＯＮになると、ＣＰＵ710はＲＯＭ730のブートプログラムを実行し、ＨＤＤ740からＯＳをＲＡＭ720にロードすることで、本装置が汎用の情報処理装置として機能する。そして、ユーザの指示に応じてクロックサイクル数算出アプリケーションがＨＤＤ740からＲＡＭ720にロードされ、ＣＰＵ710により実行されることで、本装置が、ターゲットプログラムの実行クロックサイクル数算出装置として機能することになる。なお、ターゲットデバイスにて実行されるプログラム（ターゲットＣＰＵが実行するプログラム）を格納したファイルが、既にＨＤＤ740に格納されているものとして説明する。また、ターゲットＣＰＵが実行可能な命令の詳細を表すテーブル（ターゲットＣＰＵ命令テーブル）のファイルもＨＤＤ740に格納されているものとする。
【００１６】
以下、本装置が、実行サイクル数算出装置（特定のマイクロコンピュータ・CPU・DSP等で所望の処理を実施させた場合の処理クロックサイクル数を見積もる処理装置）として機能した場合の構成と動作の詳細を説明する。
【００１７】
本装置を構成する要素は以下の通りである。なお、以下の要素をいくつか組み合わせて１の要素にしても構わない。
・ターゲットＣＰＵで実行可能な命令語系列によって構成された第１のプログラム（ターゲットプログラム）の構造・意味を分析するための構造・意味解析部(101)。
・第１のプログラムと、構造・意味解析部(101)で生成された構造・意味情報とから、変数を抽出するための変数抽出部(102)。
・第１のプログラムと構造・意味解析部(101)で生成された構造・意味情報から特定命令を抽出する特定命令抽出部(103)。
・第１のプログラムと、ターゲットＣＰＵ命令テーブル、特定命令抽出部(103)で生成された特定命令情報から第１のプログラムを複数の部分プログラムに分割し、各部分プログラムの実行クロックサイクル数を算出するためのプログラム分割部(104)。
・第１のプログラムの構造・意味情報と、プログラム分割部によって生成された部分プログラムサイクル数データから部分プログラムどうしの接続、移行フローを表す部分プログラム接続・移行フローデータ生成部(105)。
・第１のプログラムの構造・意味情報と、変数抽出部(102)で生成された変数情報から、プロセッサ非依存の第２のプログラムを生成するための逆コンパイル部(106)。
・逆コンパイル部から生成された第２のプログラムと特定命令情報から、フラグ生成するためのプロセッサ非依存の第３のプログラム（フラグ生成プログラム）を生成するフラグ生成処理付加部(107)。
・フラグ生成処理付加部で生成された第３のプログラムを実行形式に変換するコンパイル部(108)。
・コンパイル部(108)で生成された実行形式の第３のプログラムを実行しフラグ系列を生成するための第３のプログラム実行部(109)。
・部分プログラム接続・移行フローデータと第３のプログラム実行形式実行部で生成されたフラグ系列データから、第１のプログラムを特定のマイクロコンピュータ・CPU・DSP等で実行させた場合に要するクロックサイクル数を算出するサイクル数積算部(110)。
【００１８】
以下、上記構成における処理クロックサイクル数を見積もる処理装置の動作について説明する。
【００１９】
先ず、構造・意味解析部(101)が、ＨＤＤ740に格納されたターゲットプログラムのファイルをＲＡＭ720にロードする。そして、構造・意味解析部(101)が、同じくHDD740に格納されたターゲットＣＰＵ命令テーブルを参照し、ＲＡＭ720にロードしたターゲットプログラムの意味・構造を解析する。
【００２０】
図７は、ターゲットＣＰＵ命令テーブルの例を示している。このテーブルは、マシン語の先頭のコード＋可変部分と、サイズを表すバイト数、ニーモニック、意味、クロックサイクルＡ，Ｂ、及び、抽出フラグで構成される。なお、マシン語は、人間にとって直接的にはその意味を理解するのは難しい。それ故、図示のテーブルには、マシン語に対応するニーモニック（オペコード、オペランド）を示したが、かかるニーモニックがクロックサイクル数の算出に必要なわけではない。あくまで実施形態における技術的意味を助けるために用意したものと理解されたい。また、クロックサイクル数としてＡ，Ｂの２種類を示したが、クロックサイクル数Ａは、レジスタに即値を格納する等の非条件分岐命令、及び、「条件成立時」の条件分岐命令のクロックサイクル数を示す。一方、クロックサイクル数Ｂは、条件不成立時の分岐命令のクロックサイクル数を示す。よって、非条件分岐命令には、クロックサイクル数Ｂに相当するクロックサイクル数が無い。また、一般に、ＣＰＵは、プログラムカウンタ（以下、ＰＣと略す）で示される  アドレス位置から命令の読み出し、実行すると共に、その際に命令サイズをＰＣに加算することで、次に読み出す命令をアドレスを更新することを繰り返す。条件分岐命令は、条件が成立した場合に強制的にＰＣの値を変更し、条件不成立の場合には通常の更新処理を行うものである。それ故、条件成立時には、条件不成立時と比較し、ＰＣの更新に係るクロックサイクルを必要とする。すなわち、条件成立時、不成立時で必要とするクロックサイクル数が異なる。また、抽出フラグは、後述する特定命令抽出部(103)が、ターゲットプログラムから抽出すべき命令であるか否かを示すものであり、“１”が抽出対象であることを示し、“０”は非抽出対象であることを示している。なお、図７では、１つのテーブルでいくつもの情報を表すようにしているが、複数のテーブル（ファイル）に図７と同じ内容を表すようにしても良い。例えば、抽出対象命令は、別途ファイルやテーブルで特定されても構わない。
【００２１】
ここで、ターゲットＣＰＵが実行するマシン語に対するニーモニックについて若干説明する。「MOV R1, IMM」（Rdのｄは1,2,…）は、レジスタRdに即値IMMを代入することを示す。「STW R1, R2, DSP」 は、レジスタR2が示すアドレスに値DSPを加算して得られる（メモリ上の）アドレス位置に、レジスタR1の値を格納することを示す。つまり、DSPはオフセットアドレスを表していると言えば分かりやすい。「LDW R1, R2, DSP」は、レジスタR2が示すアドレスに値DSPを加算で示される（メモリ上の）アドレス位置に格納された値を、レジスタR1に代入することを示す。「BGE R1, R2, DSP」は、条件「R1≧R2」が成立するとき、現在のＰＣにＤＳＰを加算した値を新ＰＣとする（相対的アドレスＤＳＰへ分岐する）ことを示している。条件が不成立の場合には、ＰＣは条件分岐命令のサイズ分だけ単純増加させるだけである。また、「BLT R1, R2, DSP」は、条件「R1＜R2」が成立するとき、相対的アドレスＤＳＰへ分岐することを示している。条件不成立の場合は、ＰＣは条件分岐命令のサイズ分だけ単純増加させるだけである。
【００２２】
図８は、ＨＤＤ740からＲＡＭ720に読出された第１のプログラム（ターゲットプログラム）のニーモニック形式で示した図である。実際はマシン語の表現であるが、分かりやすくするためにニーモニック表記にした。また、条件分岐命令については、条件成立時にＰＣに加算すべき値を示すべきであるが、理解しやすくするため分岐先をラベルを付けて示している。なお、マシン語から、ラベル（図示の表記「Ｌｂｌ＿ｘ」）を付したニーモニック表現にすること自身は周知のものである。図示において、表記Rx は、ターゲットＣＰＵが有するレジスタを表している。Lbl_x はプログラムの分岐先を示すラベルを表している。実際は、条件が成立した場合、 PCに、オペランドで示される値を加算することで、ＰＣを更新することになる。
【００２３】
構造・意味解析部101は、図８に示す第１のプログラム（ターゲットプログラム）の構造、意味を解釈する。そして、命令単位に、その命令の意味の解析結果を生成していく。図９は、解析結果を模式的に示すものであり、各行の＃印より右側がその解釈結果を示している。
【００２４】
例えば３行目のニーモニック「STW R5,R1,0」の解釈結果としての『Ｍ「Ｒ１＋０」←Ｒ５』は、レジスタＲ１の値に０を加算した（メモリの）アドレス位置に、レジスタＲ５の値を代入（格納）することを示している。
【００２５】
次に、変数抽出部(102)が、図９の解釈結果を参照して「変数」を抽出する。変数は、メモリ上に置かれた値であると考えて構わない。それ故、メモリを参照している箇所が変数を利用していると考えて良い。従って、図９の解釈結果の３行目の「Ｍ［Ｒ１＋０］が変数の代表的なものと考えて良い。変数は、その格納アドレスが異なれば、それらは別の変数であるものとしてみなせる。そこで、変数抽出部(102)は、メモリを参照するアドレス位置が異なる変数を見つけるたびに、i0,i1,i2…と変数を定義していく。
【００２６】
図１０が変数抽出部(102)による変数抽出結果を示している。＃印の右側にi0,i1,i2…で示すのが変数である。
【００２７】
特定命令抽出部(103)は、第１のプログラムを解析し、予め指定された特定命令の抽出処理を行う。特定命令は、例えば、戻り先指定分岐、条件付き分岐、戻り先指定条件分岐処理など、実行結果によって実行サイクル数や次実行命令が異なる命令である。本実施形態では、単純に分岐命令を抽出対象とする。
【００２８】
図８のプログラムの場合、特定命令抽出部(103)が抽出するのは、次の６個の命令となる。
BGE R2,R3,Lbl1_1        # R2 ≧ R3 then PC ← Lbl_1
BLT R6,R7,Lbl1_2        # R6 ＜ R7 then PC ← Lbl_2
BGE R10,R11,Lbl1_3      # R10 ≧ R3 then PC ← Lbl_3
BNE R15,R2,Lbl1_4       # R15!= R2 then PC ← Lbl_4
JMP LBl_5               # PC←Lbl_5
BLT R5,R6,Lbl_6         # R5 ＜ R6 then PC ← Lbl_6
【００２９】
プログラム分割部(104)は、図８のプログラムを、特定命令情報(103)が抽出した各特定命令を区切りとする複数の部分プログラムに分割する。なお、最後の特定命令から、プログラムの終端までは、例外的に部分プログラムとする。従って、プログラム分割部(104)は、図８のプログラムから７つの部分プログラムを生成することになる。
【００３０】
また、プログラム分割部(104)は、各部分プログラムのサイクル数を算出する。各命令のクロックサイクル数は、ターゲットＣＰＵの命令テーブル（図７参照）を参照することで得られるので、その累積加算結果がその部分プログラムのクロックサイクル数となる。
【００３１】
図１１（ａ）乃至（ｃ）、図１２（ａ）乃至（ｄ）は、プログラム分割部(104)で生成された部分プログラム（部分プログラム１乃至７）である。各部分プログラムの下段には、その部分プログラムの実行時のクロックサイクル数を示している。図７（ａ）の部分プログラム１のクロックサイクル数「１５，１６」とあるのは、その部分プログラムの最後の命令「BGE R2,R3,Lbl1_1」における条件「R2≧R3」が不成立の場合のクロックサイクル数が１５、成立の場合のクロックサイクル数が１６であることを示している。他の部分プログラムも同様である。ただし、部分プログラム５（図１２（ｂ））、部分プログラム７には、条件分岐命令が含まれていないいので、要求されるクロックサイクルは１種類のみとなる。
【００３２】
部分プログラム接続・移行フローの生成部(105)は、構造・意味情報、部分プログラムサイクル数データから、部分プログラム接続・移行フローを生成する。図２は、部分プログラム接続・移行フローデータ記載事項を説明するチャートである。図示のごとく、部分プログラム１乃至７それぞれに」ついて、所要クロックサイクル数、部分プログラム間の遷移についての情報が記述される。なお、図２における分岐判断が、各部分プログラムの終端の条件分岐命令に相当する。条件分岐の条件が成立する場合がｙｅｓ、不成立の場合がＮｏである。換言すれば、条件が成立する場合には、クロックサイクル数が多い方が選択され、条件が不成立の場合にはクロックサイクル数が少ない方が選択されるものとみることもできる。
【００３３】
逆コンパイル部(106)は、構造・意味解析部(101）で得られた解析結果（図８）、変数抽出部(102)で得られた変数抽出結果（図１０）から、ターゲットプログラムと実質的に等価の第２のプログラムを生成する。実施形態における逆コンパイル部(106)は、特定のマイクロコンピュータ・CPU・DSP等に依存しない言語で第２のプログラムのソースを記述する。実施形態では、この言語としてＣ言語を用いるものとする。
【００３４】
図１３は、逆コンパイル部(106)が生成した第２のプログラムの例を示している。図１３におけるプログラムにおいて、変数i0,i1,i2,i3,i4は抽出した変数でもある。そして、意味解析結果に基づきforループで既出しているのが、同図である。
【００３５】
フラグ生成処理付加部(107)は、上記の逆コンパイル部(106)が生成した第２のプログラムと、先に説明した特定命令情報から、特定命令実行に関するフラグを生成するための第３のプログラムを生成する。この第３のプログラムは、要するに、図２のプログラムを実行した際に、各分岐の真理値であるフラグを生成するプログラムと言えば分かりやすい。
【００３６】
図１４は、フラグ生成処理付加部(107)が生成した第３プログラムのソースを示している。分かりやすいように、「//」の右側にコメントを付した。また、printf関数内に記述されている文字列「ＢＰ＿ｘ  ０」または「ＢＰ＿ｘ  １」における後端の０、１はそれぞれ条件が不成立、成立のいずれかを示すフラグを示している。なお、文字列「ＢＰ＿ｘ」は、どのステップのprintf関数で出力されたかを示すためであって、実際には不要である。
【００３７】
コンパイル部(108)は、この第３のプログラムをコンパイルする。このコンパイルで生成される実行形式プログラムは、ＣＰＵ710が実行できるものである。そこで、第３のプログラム実行部(109）がコンパイルしたプログラムを実行する。この実行の結果、以下のような結果が得られる。
ＢＰ＿１  ０
ＢＰ＿１  ０
：
各行の最後の０、１が、目的とするフラグであるので、それらフラグを出現順に接続することで、以下のフラグ系列を得ることができる。
“00101100110010”
ここで、１は条件成立、０が不成立を示していることになるのは、これまでの説明から明らかである。
【００３８】
サイクル数積算部(110)は、得られたフラグ系列を、部分プログラム接続・移行フローに適用し、その際の各部分プログラムの追跡し、その際のクロックサイクル数を累積加算していくことで、第１のプログラムの実行クロックサイクル数を算出する。
【００３９】
例えば、フラグ系列の最初のフラグは０である。故に、図２のフローチャートに従えば、最初の部分プログラム１の条件分岐命令の条件が不成立となることを示すので、部分プログラム１の実行クロックサイクル数は「１５」と確定する。しかも、次に部分プログラム２に移行することも確定する。フラグ系列の２番目のフラグも０である。従って、部分プログラム２の条件分岐命令の条件が不成立となることを示すので、部分プログラム２の実行クロックサイクル数は「１６」と確定する。しかも、次に部分プログラム３に移行することも確定する。以下同様に、フラグ系列に従って、各部分プログラムのクロックサイクル数を確定していく。
【００４０】
本実施形態の場合、部分プログラム１乃至７を、Ｐ１，Ｐ２…と表現したとき、先に示したフラグ系列に従うと、部分プログラムの実行シーケンスは次のようになる。
P1→P2→P3→P3→P4→p6→p2→p3→p4→p6→p2→p3→p4→p6→p7
このシーケンスにおけるプログラム開始から終了までのクロックサイクルとその合計は次のようになる。
15+16+25+24+7+14+16+24+7+14+16+24+7+13+4 = 226
よって、サイクル数積算部(110)が、「２２６」を、ターゲットプログラムの実行クロックサイクル数として出力する。出力先はファイルとして出力しても良いし、表示画面に表示しても良く、出力先は問わない。
【００４１】
以上説明したように本実施形態によれば、ターゲットデバイスのターゲットＣＰＵが実行するターゲットプログラムを格納したファイル、ターゲットＣＰＵが解釈実行する命令と、各命令のクロックサイクル、並びに、命令の意味を有する命令セットテーブルを格納したファイル（図７参照）があれば、ターゲットデバイスとは異なるハードウェアや異なる環境（異なるＣＰＵ）であっても、精度よく実行クロックサイクル数を算出できる。
【００４２】
なお、実施形態では、特定命令抽出部が抽出する命令として分岐命令としたが、プログラムカウンタを操作する命令が望ましい。例えば、プログラムカウンタをプッシュし、書き換えるサブルーチンコール命令（条件の有無を問わない）、ソフトウェア割り込み命令、プログラムカウンタをポップするリターン命令等を含めても良い。
【００４３】
また、本発明の技術内容の理解を容易にするために、簡単な例で示した。実際の電子機器を開発する場合のターゲットプログラムのサイズは、実施形態で示したものよりも遥かに大きなものとなる。また、実際のターゲットプログラムは、そのターゲットプログラム内で閉じた環境で実行するのではなく、外部環境パラメータや外部データに依存して実行することも多い。例えば、画像データを符号化するターゲットプログラムの場合には、符号化対象の画像データを参照して符号化データを生成することになるだろうし、その際の符号化シーケンスは、その符号化対象の画像データに依存したものとなる。そのような場合には、クロックサイクル数算出を行う情報処理装置に、符号化対象の画像データを予め用意した上で、上記の第２のプログラム、第３のプログラムを作成することになろう。
【００４４】
また、実施形態における逆コンパイル部で生成するプログラムの言語をＣ言語、第３のプログラムもＣ言語を例にして説明したが、利用するコンピュータ言語はこれに限らない。また、第３のプログラムをコンパイルする例を示したが、ＣＰＵ720の処理能力が十分である、もしくはターゲットプログラムのサイズが許容できるサイズである場合には、第３のプログラムを他の高級言語で表現し、インタープリタにより実行しても構わない。
【００４５】
以上、抽出する特定命令を条件付き分岐命令、取得する属性情報を分岐条件の成立・不成立を表すフラグとして実施例を説明したが、本提案は命令の実行サイクル数が実行状況に応じて定まる命令を有するプログラムの実行サイクル数算出について有効である。
【００４６】
例えば、前記特定のマイクロコンピュータ、CPU等がキャッシュメモリを含むメモリシステムを構成要素としている場合も有効である。キャッシュメモリへのヒット・ミス、あるいはキャッシュメモリ操作命令によりプログラムの実行クロックサイクル数が変化する。この場合、抽出する特定命令をロード・ストア命令、生成する属性情報を前記キャッシュメモリに対するヒット・ミスに関するフラグ情報、あるいはメモリアドレスとすれば同様に、実際の実行サイクル数を算出できる。
（その他の実施例）
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（またはＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【符号の説明】
【００４７】
１０１…構造・意味解析部、１０２…変数抽出部、１０３…特定命令抽出部、１０４…プログラム分割部、１０５…部分プログラム接続・移行フロー生成部、１０６…逆コンパイル部、１０７…フラグ生成処理付加部、１０８…コンパイル部、１０９…第３のプログラム実行部、１１０…サイクル数積算部
【図１】
0006474055.tif 000002
【図２】
0006474055.tif 000003
【図３】
0006474055.tif 000004
【図４】
0006474055.tif 000005
【図５】
0006474055.tif 000006
【図６】
0006474055.tif 000007
【図７】
0006474055.tif 000008
【図８】
0006474055.tif 000009
【図９】
0006474055.tif 000010
【図１０】
0006474055.tif 000011
【図１１】
0006474055.tif 000012
【図１２】
0006474055.tif 000013
【図１３】
0006474055.tif 000014
【図１４】
0006474055.tif 000015