(57)【要約】【課題】プロセッサの設計過程において、動作シミュレーション結果の評価を複数の視点から容易に行うことができるプログラム性能評価方法を提供する。【解決手段】プロファイラ４は、動作シミュレータ３によりシミュレーション動作させることにより得られたプロファイル情報５を基にして、情報内容をユーザに分かり易く表示し、検証、評価する第１の工程（ステップ６）を備えている。さらに、プロファイラ４は、情報内容をさらに検証および評価するために表示内容を変更するステップ６ａを備えており、変更された内容により仮想評価を行う第２の工程（ステップ７）を備えている。【選択図】        図４
2004234068.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ・プログラムを、そのコンピュータ・プログラムを構成する少なくとも１つの構成要素の各単位のハードウェア上での実行に必要な第１のサイクル数を保持する第１の記録領域に基づき前記コンピュータ・プログラムの未変更の総サイクル数を求める第１の工程と、
前記第１のサイクル数を代替する第２のサイクル数を保持する第２の記録領域に基づき、当該コンピュータ・プログラムの任意の箇所の前記第２のサイクル数を仮想的に変更した変更後の総サイクル数を求める第２の工程とを有するプログラム性能評価方法。
【請求項２】
請求項１において、前記第１の工程では、第１の構成要素の前記第１の記録領域および第２の記録領域を備えた第１のテーブル、および第２の構成要素の前記第１の記録領域および第２の記録領域を備えた第２のテーブルのいずれかの前記第１の記録領域に基づき前記未変更の総サイクル数が求められ、
前記第２の工程では、前記第１および第２のテーブルのいずれかの前記第２の記録領域に基づき前記変更後の総サイクル数が求められるプログラム性能評価方法。
【請求項３】
請求項２において、前記第１または第２のテーブルの一方のテーブルの前記第２の記録領域の前記第２のサイクル数を変更すると、他方のテーブルの対応関係にある前記第２の記録領域の前記第２のサイクル数を自動的に変更する工程を有するプログラム性能評価方法。
【請求項４】
請求項１において、前記構成要素は、前記コンピュータ・プログラムを記述する記述言語であり、前記第１および第２の記録領域には、その記述言語で記述した場合の各行単位のサイクル数が保持されるプログラム性能評価方法。
【請求項５】
請求項１において、前記構成要素は、前記コンピュータ・プログラムを処理目的に応じてまとめた基本単位であり、前記第１および第２の記録領域には、その基本単位１つ毎のサイクル数が保持されるプログラム性能評価方法。
【請求項６】
コンピュータ・プログラムを、そのコンピュータ・プログラムを構成する少なくとも１つの構成要素の各単位のハードウェア上での実行に必要な第１のサイクル数を保持する第１の記録領域に基づき前記コンピュータ・プログラムの未変更の総サイクル数を求める第１の手段と、
前記第１のサイクル数を代替する第２のサイクル数を保持する第２の記録領域に基づき、当該コンピュータ・プログラムの任意の箇所の前記第２のサイクル数を仮想的に変更した変更後の総サイクル数を求める第２の手段とを有するプロファイラ。
【請求項７】
請求項６において、第１の構成要素の前記第１の記録領域および第２の記録領域を備えた第１のテーブルと、
第２の構成要素の前記第１の記録領域および第２の記録領域を備えた第２のテーブルとをさらに有し、
前記第１の手段は、前記第１および第２のテーブルのいずれかの前記第１の記録領域に基づき前記未変更の総サイクル数を求め、
前記第２の手段は、前記第１および第２のテーブルのいずれかの前記第２の記録領域に基づき前記変更後の総サイクル数を求めるプロファイラ。
【請求項８】
請求項７において、前記第１または第２のテーブルの一方のテーブルの前記第２の記録領域の前記第２のサイクル数を変更すると、他方のテーブルの対応関係にある前記第２の記録領域の前記第２のサイクル数を自動的に変更する手段をさらに有するプロファイラ。
【請求項９】
請求項６において、前記構成要素は、前記コンピュータ・プログラムを記述する記述言語であり、前記第１および第２の記録領域には、その記述言語で記述した場合の各行単位のサイクル数が保持されるプロファイラ。
【請求項１０】
請求項６において、前記構成要素は、前記コンピュータ・プログラムを処理目的に応じてまとめた基本単位であり、前記第１および第２の記録領域には、その基本単位１つ毎のサイクル数が保持されるプロファイラ。
【請求項１１】
コンピュータ・プログラムを、そのコンピュータ・プログラムを構成する少なくとも１つの構成要素の各単位のハードウェア上での実行に必要な第１のサイクル数を保持する第１の記録領域に基づき前記コンピュータ・プログラムの未変更の総サイクル数を求める第１の工程と、
前記第１のサイクル数を代替する第２のサイクル数を保持する第２の記録領域に基づき、当該コンピュータ・プログラムの任意の箇所の前記第２のサイクル数を仮想的に変更した変更後の総サイクル数を求める第２の工程とをコンピュータで実行可能にする命令を有するプログラム性能評価プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、プロセッサの設計方法およびプロファイラに関するものである。
【０００２】
【従来の技術】
従来、アセンブラやＣ／Ｃ＋＋などのコンピュータ・プログラム記述言語を用いたハードウェア設計においては、設計目標となるハードウェア上での、プログラムの各ステップや各行の実行に要するＣＰＵ時間やクロック・サイクル数などの情報（以下、プロファイル情報と呼ぶ）が、ハードウェア全体の機能や性能に影響するため、それらプロファイル情報を動作シミュレーションにより設計段階で予め計測、取得し、プロファイラと呼ばれる分析ツールを用いて計測結果を記録、表示するなどの方法により、設計評価を行ってきた。
【０００３】
近年、Ｃ言語で記述されたコンピュータ・プログラムにより与えられた仕様を実現するプロセッサを開発および設計する際に、その仕様全体を直にハードウェアに変換するのではなく、仕様の一部を専用プロセッサを介して動作するようにハードウェア化する方式が提案されている。このような場合においても同様に、仕様となるコンピュータ・プログラム全体について、実行に要するプロファイル情報を動作シミュレーションにより計測し、さらにプロファイラにより計測結果を表示して、例えば、多大なＣＰＵ時間やクロック・サイクル数を要する機能単位を見つけ出して抜き出し、専用プロセッサ化して全体の実行パフォーマンスを向上させるなどの方法が行われてきた。
【０００４】
特開２００２−５５８１３号公報には、データ専用処理ユニットＶＵと、汎用データ処理ユニットＰＵとを備えたＶＵＰＵプロセッサが開示されている。
【０００５】
【特許文献１】
特開２００２−５５８１３号公報
【０００６】
【発明が解決しようとする課題】
前述のようなハードウェア設計におけるプロファイル情報評価の方式においては、プロファイル情報はプロファイラを用いて記録、表示するだけであるため、その時点での設計結果としてのプロファイル情報を目で見て、傾向や特徴から、問題点や改善点を局所的に予想することができるに過ぎず、例えば設計の修正や変更を行う場合に、その修正、変更対象個所が他の対象外の箇所からも呼び出され利用されていることもあり得るため、その影響も加味した全体的なプロファイル情報の変化を直感的に知ることができないという問題があった。
【０００７】
また、全体の実行パフォーマンスを向上させるために、ある機能単位を抜き出して専用プロセッサ化するような設計方式においては、専用プロセッサ化前の設計段階のプロファイル情報から、例えば動作に要するＣＰＵクロック・サイクル数などの負荷の多い部分などを見つけ出すことができても、実際にその部分を専用プロセッサ化して負荷を少なくした場合に、プロファイル情報の全体の傾向や特徴に対してどのように影響があるのかが直感的には分かりづらいという問題があった。
【０００８】
この発明は上記のような問題に鑑みてなされたもので、ハードウェア設計におけるプロファイル情報を変更した際に、変更を加えた部分の情報と関連のある他の部分の情報の変化を自動的に導き出し、結果を表示することによって、設計の修正、変更、または部分的な専用プロセッサ化を想定した変更の、設計全体への影響を仮想評価できる環境を実現することを目的とする。そして、プロセッサの設計過程において、動作シミュレーション結果の評価を複数の視点から容易に行うことができるプログラム性能評価方法およびプロファイラ、さらに、プログラム性能評価プログラムを提供することを目的としている。
【０００９】
【課題を解決するための手段】
本発明においては、コンピュータ・プログラムを、そのコンピュータ・プログラムを構成する少なくとも１つの構成要素の各単位のハードウェア上での実行に必要な第１のサイクル数を保持する第１の記録領域に基づきコンピュータ・プログラムの未変更の総サイクル数を求める第１の工程と、第１のサイクル数を代替する第２のサイクル数を保持する第２の記録領域に基づき、当該コンピュータ・プログラムの任意の箇所の第２のサイクル数を仮想的に変更した変更後の総サイクル数を求める第２の工程とを有するプログラム性能評価方法を提供する。
【００１０】
第２の工程において、当該コンピュータ・プログラム、例えばソースプログラムの一部を切り出して別なハードウェアまたは別なソフトウェアとして動作させたときの第２のサイクル数から変更後の総サイクル数を求めることができ、当該コンピュータ・プログラムの全体の動作効率を向上させるために、任意の箇所のＣＰＵクロック・サイクル数値を仮想的に変更し、変更した値を表示することで、切り出す箇所を判断できる。また、第１の記録領域に第１のサイクル数が保持されているので、いつでも変更前のサイクル数に戻すことができ、任意の箇所のサイクル数を自在に変更することができる。
【００１１】
構成要素の１つの例は、コンピュータ・プログラムを記述する記述言語であり、Ｃ言語、またはＣ＋＋言語、またはＪａｖａ（登録商標）言語、またはアセンブリ言語がある。構成要素の他の例は、コンピュータ・プログラムを処理目的に応じてまとめた基本単位であり、関数あるいは関数階層がある。これらの構成要素の全てあるいはいずれかの組み合わせを用いることが望ましい。すなわち、本発明のプログラム性能評価方法においては、第１の構成要素の第１の記録領域および第２の記録領域を備えた第１のテーブルと、第２の構成要素の第１の記録領域および第２の記録領域を備えた第２のテーブルとを用意することにより、第１の工程では、第１および第２のテーブルのいずれかのテーブルの第１の記録領域に基づき未変更の総サイクル数が求められる。また、第２の工程では、第１および第２のテーブルのいずれかの第２の記録領域に基づき変更後の総サイクル数が求められる。複数の構成要素によりサイクル数の評価が可能となるので、複数の視点からプログラムの評価ができる。
【００１２】
さらに、第１または第２のテーブルの一方のテーブルの第２の記録領域の第２のサイクル数を変更すると、他方のテーブルの対応関係にある第２の記録領域の第２のサイクル数を自動的に変更する工程を設けることにより、ユーザは種々の視点から仮想評価を行うことができ、また、種々の視点を混在させた仮想評価手法でプログラムを評価することができる。したがって、さらにフレキシブルにユーザの希望する方法でＬＳＩあるいはプロセッサの仕様を示すソースプログラムを評価することができ、経済的で構成のプロセッサを更に容易に設計できるようになる。
【００１３】
本発明のプログラム性能評価方法は、プロファイラとして提供することも可能である。本発明のプロファイラは、コンピュータ・プログラムを、そのコンピュータ・プログラムを構成する少なくとも１つ構成要素の各単位のハードウェア上での実行に必要な第１のサイクル数を保持する第１の記録領域に基づきコンピュータ・プログラムの未変更の総サイクル数を求める第１の手段と、第１のサイクル数を代替する第２のサイクル数を保持する第２の記録領域に基づき、当該コンピュータ・プログラムの任意の箇所の第２のサイクル数を仮想的に変更した変更後の総サイクル数を求める第２の手段とを有する。プロファイラは、第１または第２のテーブルの一方のテーブルの第２の記録領域の第２のサイクル数を変更すると、他方のテーブルの対応関係にある第２の記録領域の第２のサイクル数を自動的に変更する手段をさらに有することが望ましい。
【００１４】
また、プロファイラは、上記の第１の工程と、第２の工程とをコンピュータで実行可能にする命令を有するプログラム性能評価プログラムとして適当な記録媒体に記録して提供することも可能である。
【００１５】
【発明の実施の形態】
以下、図を用いて本発明の実施例を説明する。図１は、Ｃ言語やアセンブリ言語などのコンピュータ・プログラム記述言語で記述されたハードウェア設計あるいは設計仕様（以下、単にソースプログラムと呼ぶ）の初期の様子を示した図である。ソースプログラム１は、記述された動作が時系列的に上から下へひとつの流れとして表されている。
【００１６】
元々のソースプログラム１のうちの一部を抜き出して専用プロセッサ化したプロセッサを設計することができる。例えば、図２に示すように、専用データ処理ユニットＶＵ１１と汎用データ処理ユニットＰＵ１２とを備えたＶＵＰＵプロセッサ１０においては、ＶＵ１１が専用プロセッサとなり、特定の処理を高速で実行できるようになっている。このＶＵＰＵプロセッサ１０においては、ＰＵ１２のフェッチユニットＦＵ１３がコードＲＡＭ１９に格納されたプログラム１９ｐから命令をフェッチする。フェッチされた命令が、ＰＵ１２で実行する汎用命令（ＰＵ命令）であれば、その処理はＰＵ１２の実行ユニットＥＵ１４で実行され、ＶＵ１１で実行する専用命令（ＶＵ命令）であればＶＵ１１に渡されてＶＵ１１で実行される。ＶＵＰＵ１０は、複数のＶＵ１１を搭載することが可能であり、共通のデータＲＡＭ１８などにアクセスしながら処理を進める。
【００１７】
図３に、本発明における設計方式により、元々のソースプログラム１のうちの一部を抜き出して専用プロセッサ化した場合の動作の様子を示してある。ソースプログラム１は、専用プロセッサ、たとえば、ＶＵ１１で実行するために抜き出した部分２ｂの前段階の動作の時系列的な上から下への流れ２ａと、抜き出した部分の動作の時系列的な上から下へのひとつの流れ２ｂと、抜き出した部分２ｂの後段階の動作の時系列的な上から下へのひとつの流れ２ｃの３つに分けられている。したがって、ソースプログラム１の処理は、全体の動作の流れが前段階２ａで始まり、途中から抜き出した部分２ｂに動作が移り、そしてまた後段階２ｃへと動作が移って終了する。
【００１８】
図４に、本発明における設計方式を用いたハードウェア設計のワークフローを示してある。動作シミュレータ３は、ハードウェア設計、すなわち、ソースプログラム１または当該ハードウェア設計から変換された情報を読込み（矢印Ａ）、設計内容に基づいてシミュレーション動作させることができる。プロファイラ４は、本発明における設計方式により、ソースプログラム１の一部を切り出して例えば専用プロセッサ化するための検証、評価を行う。プロファイラ４は、動作シミュレータ３によりシミュレーション動作させることにより得られた（矢印Ｂ）プロファイル情報５を基にして（矢印Ｃ）、情報内容をユーザに分かり易く表示し、検証、評価する第１の工程（ステップ６）を備えている。さらに、本例のプロファイラ４は、情報内容をさらに検証および評価するために表示内容を変更するステップ６ａを備えており、変更された内容により仮想評価を行う第２の工程（ステップ７）を備えている。この仮想評価ステップ７では、図３に示したように、元々の設計の一部またはいくつかの部分を切り出して専用プロセッサ化した場合の状況変化を仮想的に評価することができる。仮想評価するための情報変更は、プロファイラ４の表示ステップ６で表示された情報を基に何度でも行うことができる（矢印Ｄ）。
【００１９】
プロファイラ４において、プロファイル情報表示・変更ステップ６、仮想評価ステップ４７を行った結果（矢印Ｅ）として、分割ステップ８において、専用プロセッサ化して抜き出し分割する最適な部分を見つけ出す。その結果、ステップ９において、ソースプログラム１を、分割ステップ８により見つけ出した分割部分の情報を基に複数の部分に分割する。
【００２０】
図５および図６に、プロファイラ４をＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）プログラムとして提供したときのウィンドウ表示の幾つかの例を示してある。図５（ａ）は、未変更の総クロック・サイクル数（以下、単にサイクル数と呼ぶ）、および変更後の総サイクル数を表示するウィンドウ２１であり、未変更時の総サイクル数を示す領域２１ａと、変更後の総サイクル数を示す領域２１ｂを備えている。未変更時の総サイクル数を示す領域２１ａは、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた場合に、全動作に要したサイクル数を表示している。変更後の総サイクル数を示す領域２１ｂは、仮想評価ステップ７で仮想評価するために、プロファイル情報５を表示変更ステップ６で変更した場合に、全動作に要する総サイクル数を表示している。
【００２１】
図５（ｂ）は、ソースプログラム１の機能単位（以下、場合により関数と呼ぶ）ごとに、動作に要するサイクル数などの情報を表示するウィンドウ２２であり、関数名領域２２ａと、ｃａｌｌ回数領域２２ｂと、平均サイクル数領域２２ｃと、単独サイクル数領域２２ｄと、総合サイクル数領域２２ｅを備えている。関数名領域２２ａには、ソースプログラム１に含まれる関数に付けられた名前が列挙されている。ｃａｌｌ回数領域２２ｂには、各関数名（領域２２ａ）ごとに、動作シミュレーションを通して当該関数が何回呼び出されたか、その回数が示されている。平均サイクル数領域２２ｂには、各関数名（領域２２ａ）ごとに、動作シミュレーション３を通して当該関数のみが要した総サイクル数の、１回呼び出しごとの平均値が示されている。
【００２２】
単独サイクル数領域２２ｄには、各関数名（領域２２ａ）ごとに、動作シミュレーション３を通して当該関数のみが要した総サイクル数が示されている。図５（ｂ）の例では、ｆｕｎｃ２（領域２２ａ）という名前の関数は、動作シミュレーション３を通して３回呼び出され（領域２２ｂ）、ｆｕｎｃ２関数のみの動作に合計４８サイクル（領域２２ｃ）を要しており、１回の呼出しに必要な平均サイクル数は１６サイクル（領域２２ｄ）であることが読み取れる。
【００２３】
総合サイクル数領域２２ｅには、各関数名（領域２２ａ）ごとに、動作シミュレーション３を通して当該関数が要した総サイクル数を、当該関数がさらに他の関数を呼び出すというような階層的動作に要するサイクル数も全て含めて示されている。図５（ｂ）の例では、ｆｕｎｃ２（領域２２ａ）関数は、単独サイクル数として４８サイクル（領域２２ｄ）、総合サイクル数として４８サイクル（領域２２ｅ）を要しており、単独サイクル数と総合サイクル数が等しいことからｆｕｎｃ２関数はその動作の中で他の関数を呼び出してはいないことが分かる。一方、ｆｕｎｃ１（領域２２ａ）関数は、単独サイクル数として４６サイクル（領域２２ｄ）、総合サイクル数として９４サイクル（領域２２ｅ）を要しており、総合サイクル数が単独サイクル数よりも多いことからｆｕｎｃ１関数はその動作の中で他の何らかの関数を呼び出していることが読み取れる。
【００２４】
図５（ｃ）は、ソースプログラム１に含まれる関数呼出しの様子（以下、単に関数階層と呼ぶ）、および各関数の動作に要したサイクル数を表示するウィンドウ２３であり、関数階層領域２３ａと、サイクル数領域２３ｂとを備えている。関数階層領域２３ａは、ソースプログラム１の中の関数が他のどの関数を呼び出しているかを示している。図５（ｃ）の例では、ソースプログラム１は、ｍａｉｎ関数の動作で始まり、ｍａｉｎ関数はｆｕｎｃ１、ｆｕｎｃ３、ｆｕｎｃ４各関数を順に呼び出して動作していることが表されている。また、さらにｆｕｎｃ１関数はｆｕｎｃ２関数を呼び出して動作し、ｆｕｎｃ４関数はｆｕｎｃ５、ｆｕｎｃ６関数を順に呼び出して動作していることが表されている。以下、このように、関数階層として表された、ｍａｉｎ関数、ｆｕｎｃ１関数などの各要素を、関数階層要素と呼ぶ。
【００２５】
サイクル数領域２３ｂには、各関数階層要素ごとに、当該関数階層要素が他の関数階層要素呼出しも含めて階層的動作に要する合計サイクル数と、他の関数階層要素呼出しを一切含めない単独動作に要するサイクル数が表示されている。図５（ｃ）の例では、ｆｕｎｃ４関数階層要素は、ｆｕｎｃ５、ｆｕｎｃ６関数階層要素呼出しおよび実行を含めた全サイクル数として４７サイクル、また関数階層要素呼出しを含めない単独動作に要するサイクル数としては１６サイクルであることが表されている。
【００２６】
図６（ａ）は、ソースプログラム１の内容をＣ言語で表示するウィンドウ２４であり、プログラム領域２４ａと、サイクル数領域２４ｂを備えている。プログラム領域２４ａには、ソースプログラム１の内容がＣ言語で表示されている。サイクル数領域２４ｂには、であり、プログラム領域（領域２４ａ）に表示されたＣ言語プログラムの各行が、動作シミュレーションを通して要したサイクル数が表示されている。
【００２７】
図６（ｂ）は、ソースプログラム１の内容をアセンブリ言語で表示するウィンドウ２５であり、プログラム領域２５ａと、サイクル数領域２５ｂを備えている。プログラム領域２５ａには、ソースプログラム１の内容がアセンブリ言語で表示されている。サイクル数領域２５ｂには、プログラム領域（領域２５ａ）に表示されたアセンブリ言語プログラムの各行が、動作シミュレーションを通して要したサイクル数が表示されている。
【００２８】
図６（ｃ）は、プロファイラ４のＧＵＩとして表示されているサイクル数情報を、ステップ７において仮想評価するために値を変更するためのウィンドウ２６であり、例えばプロファイラ４のＧＵＩプログラム上に表示されたサイクル数のうち、ユーザが変更したい数値をコンピュータのマウスなどのポインティング・デバイスによりクリックすることで出現する。このウィンドウ２６は、ユーザが値を変更する前の元々のサイクル数値が表示されるオリジナルサイクル領域２６ａと、ユーザがオリジナルサイクル（領域２６ａ）の値を仮想評価（ステップ７）のために変更したいときに、コンピュータのキーボードなどの入力デバイスなどにより任意の値を入力する変更サイクル数領域２６ｂを備えている。
【００２９】
さらに、ウィンドウ２６は、ユーザは変更サイクル数領域（領域２６ｂ）に任意の値を入力した後に、確定する場合に押下する決定ボタン２６ｃと、ウィンドウ２６で行われた操作を無効化して閉じる際に押下するキャンセルボタン２６ｄを備えている。
【００３０】
図７、図８および図９に、コンピュータのメモリなどの記憶装置内に配置された、プロファイラ４が利用する情報領域の様子を示している。図７（ａ）の情報テーブル（以下、単にアセンブラテーブルと呼ぶ）３１は、ソースプログラム１の内容をウィンドウ２５の領域２５ａにアセンブリ言語で表示する際に利用されるテーブルであり、アセンブリ言語の１行分の情報をひとつのアセンブラテーブル内に保持している。当該アセンブラテーブル３１は、ソースプログラム１の全体をアセンブリ言語で表したときの行数分、その行番号順に並んで記憶装置内に連続的に配置されている。図７（ｂ）のテーブル３２は、ソースプログラム１をアセンブリ言語として表した場合の全行分の、アセンブラテーブル３１についての情報を示している。
【００３１】
図７（ｃ）の情報テーブル（以下、単にＣテーブルと呼ぶ）３３は、ソースプログラム１の内容をウィンドウ２４の領域２４ａにＣ言語で表示する際に利用する情報テーブルであり、Ｃ言語の１行分の情報をひとつのＣテーブル３３の内に保持している。当該Ｃテーブル３３は、ソースプログラム１の全体をＣ言語で表したときの行数分、その行番号順に並んで記憶装置内に連続的に配置されている。図７（ｄ）のテーブル３４は、ソースプログラム１をＣ言語として表した場合の全行分の、Ｃテーブル３３についての情報を示している。
【００３２】
図８（ａ）の情報テーブル（以下、単に関数テーブルと呼ぶ）３５は、ソースプログラム１に含まれる関数をウィンドウ２２の上に表示する際に利用する情報テーブルであり、関数ひとつ分の情報をひとつの関数テーブル３５の内に保持している。当該関数テーブル３５は、ソースプログラム１に含まれる関数の個数分、任意の順番に並んで記憶装置内に連続的に配置されている。図８（ｂ）のテーブル３６は、ソースプログラム１に含まれる全関数分の、関数テーブルについての情報を示している。
【００３３】
図９（ａ）のテーブル３７は、関数階層要素ごとの情報テーブル（以下、単に関数階層テーブルと呼ぶ）であり、ソースプログラム１に含まれる全関数階層要素の個数分、任意の順番に並んで記憶装置内に連続的に配置されている。図９（ｂ）のテーブル３８は、全ての関数階層テーブル３７についての情報を示している。
【００３４】
図７（ａ）のアセンブラテーブル３１の各領域について説明する。領域３１−１は所属関数テーブル領域であり、対象アセンブリ言語１行が所属する関数について、当該関数の関数テーブル３５が保存されている先頭位置（以下、情報が記憶装置内に保存されている先頭位置を、単にアドレスと呼ぶ）が保持されている。領域３１−２は対応Ｃテーブル数領域であり、ソースプログラム１の内容をＣ言語で表した場合に、対象アセンブリ言語１行と対応するＣ言語１行のＣテーブル３３のアドレスが保持されている。
【００３５】
領域３１−３は呼び出し先関数階層テーブル数領域であり、対象アセンブリ言語１行が他の関数を呼び出すためのｃａｌｌ命令であった場合に、呼び出し先関数に対応した関数階層要素の数が保持されている。領域３１−４および領域３１−５は、呼び出し先関数階層テーブル領域であり、対象アセンブリ言語１行が他の関数を呼び出すためのｃａｌｌ命令であった場合に、呼び出し先関数に対応した関数階層テーブルが保持されている。呼び出し先関数に対応した関数階層テーブルは、呼び出し先関数階層テーブル数領域（領域３１−３）に保持されている数の個数存在し、それに応じて領域３１−４、領域３１−５で示される呼び出し先関数階層テーブル領域の数は増減する。領域３１−６はアセンブラテキスト領域であり、対象アセンブリ言語１行のテキスト情報が保持されている。このテキストは、ウィンドウ２５の領域２５ａのプログラム領域に表示される。
【００３６】
領域３１−７はオリジナル単独サイクル数領域であり、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた際に、対象アセンブリ言語１行実行に要したサイクル数が保持されている。当該オリジナル単独サイクル数には、対象アセンブリ言語１行が関数呼出しを行っていた場合、呼び出された関数内部の実行に要したサイクル数は含まれていない。領域３１−８は変更単独サイクル数領域であり、ユーザが、例えばウィンドウ２６を利用してオリジナル単独サイクル数（領域３１−７）を変更した場合に、変更後の数値が保持されている。変更が一度も加えられていない場合に保持されている数値は、オリジナル単独サイクル数（領域３１−７）と同じである。領域３１−９は単独サイクル変更フラグ領域であり、オリジナル単独サイクル数（領域３１−７）の変更が行われたか否かをフラグとして保持している。例えば、変更が加えられていない場合には数値０が保持されており、変更が加えられた場合には数値１が保持されている。
【００３７】
領域３１−１０はオリジナル総サイクル数領域であり、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた際に、対象アセンブリ言語１行の実行に要したサイクル数が保持されている。当該オリジナル総サイクル数には、対象アセンブリ言語１行が関数呼出しを行っていた場合、呼び出された関数内部の実行に要したサイクル数をも含んでいる。領域３１−１１は変更総サイクル数領域であり、ユーザが、例えばウィンドウ２６を利用してオリジナル総サイクル数（領域３１−１０）を変更した場合に、変更後の数値が保持されている。変更が一度も加えられていない場合に保持されている数値は、オリジナル総サイクル数（領域３１−１０）と同じである。領域３１−１２は総サイクル変更フラグ領域であり、オリジナル総サイクル数（領域３１−１０）の変更が行われたか否かをフラグとして保持している。例えば、変更が加えられていない場合には数値０が保持されており、変更が加えられた場合には数値１が保持されている。
【００３８】
図７（ｂ）のテーブル３２の各領域について説明する。領域３２−１はアセンブラテーブル数領域であり、記憶装置内に保持しているアセンブラテーブルの個数を保持している。アセンブラテーブルはアセンブリ言語プログラム１行分の情報なので、当該アセンブラテーブル数は、ソースプログラム１をアセンブリ言語で表したときの行数と一致する。領域３２−２はアセンブラテーブル先頭領域であり、記憶装置内に連続して配置された全アセンブラテーブルの先頭アドレスを保持している。
【００３９】
図７（ｃ）のＣテーブル３３の各領域について説明する。領域３３−１は所属関数テーブル領域であり、Ｃテーブルの対象となるＣ言語１行が所属する関数について、当該関数の関数テーブル３５のアドレスが保持されている。領域３３−２は対応アセンブラテーブル数領域であり、ソースプログラム１の内容をアセンブリ言語で表した場合に、対象Ｃ言語１行と対応するアセンブリ言語の行数が保持されている。
【００４０】
領域３３−３および領域３３−４は、対応アセンブラテーブル領域であり、ソースプログラム１の内容をアセンブリ言語で表した場合に、対象Ｃ言語１行と対応するアセンブリ言語の行について、当該アセンブリ言語の行のアセンブラテーブル３１のアドレスが保持されている。対応するアセンブリ言語の行は、対応アセンブラテーブル数領域（領域３３−２）に保持されている数の行数存在し、それに応じて領域３３−３、領域３３−４で示される対応アセンブラテーブル領域の数は増減する。
【００４１】
領域３３−５は対応関数階層数テーブル領域であり、対象Ｃ言語１行が、ウィンドウ２３の領域２３ａに例として示されているような関数階層のうちの属している関数階層要素数が保持されている。図５（ｃ）の例において、もしも対象Ｃ言語１行がｆｕｎｃ２関数階層要素に属しているならば、例ではｆｕｎｃ２関数階層要素はひとつしか存在しないので、対応関数階層テーブル領域（領域３３−５）には数値１が保持される。
【００４２】
領域３３−６および領域３３−７は、対応関数階層テーブル領域であり、対象Ｃ言語１行が属している関数階層要素についての、当該関数階層テーブル３７のアドレスが保持されている。対応する関数階層テーブル３７は、対応関数階層テーブル数領域（領域３３−５）に保持されている数の個数存在し、それに応じて領域３３−６、領域３３−７で示される対応関数階層テーブル領域の数は増減する。
【００４３】
領域３３−８はＣテキスト領域であり、対象Ｃ言語１行のテキスト情報が保持されている。このテキストは、ウィンドウ２４の領域２４ａのプログラム領域に表示される。
【００４４】
領域３３−９はオリジナル単独サイクル数領域であり、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた際に、対象Ｃ言語１行実行に要したサイクル数が保持されている。当該オリジナル単独サイクル数には、対象Ｃ言語１行が関数呼出しを行っていた場合、呼び出された関数内部の実行に要したサイクル数は含まれていない。領域３３−１０は変更単独サイクル数領域であり、ユーザが、例えばウィンドウ２６を利用してオリジナル単独サイクル数（領域３３−９）を変更した場合に、変更後の数値が保持されている。変更が一度も加えられていない場合に保持されている数値は、オリジナル単独サイクル数（領域３３−９）と同じである。領域３３−１１は単独サイクル変更フラグ領域であり、オリジナル単独サイクル数（領域３３−９）の変更が行われたか否かをフラグとして保持している。例えば、変更が加えられていない場合には数値０が保持されており、変更が加えられた場合には数値１が保持されている。
【００４５】
領域３３−１２はオリジナル総サイクル数領域であり、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた際に、対象Ｃ言語１行実行に要したサイクル数が保持されている。当該オリジナル総サイクル数には、対象Ｃ言語１行が関数呼出しを行っていた場合、呼び出された関数内部の実行に要したサイクル数をも含んでいる。領域３３−１３は変更総サイクル数領域であり、ユーザが、例えばウィンドウ２６を利用してオリジナル総サイクル数（領域３３−１２）を変更した場合に、変更後の数値が保持されている。変更が一度も加えられていない場合に保持されている数値は、オリジナル総サイクル数（領域３３−１２）と同じである。領域３３−１４は総サイクル変更フラグ領域であり、オリジナル総サイクル数（領域３３−１２）の変更が行われたか否かをフラグとして保持している。例えば、変更が加えられていない場合には数値０が保持されており、変更が加えられた場合には数値１が保持されている。
【００４６】
図７（ｄ）のテーブル３４の各領域について説明する。領域３４−１はＣテーブル数領域であり、記憶装置内に保持しているＣテーブルの個数を保持している。ＣテーブルはＣ言語プログラム１行分の情報なので、当該Ｃテーブル数は、ソースプログラム１をＣ言語で表したときの行数と一致する。領域３４−２はＣテーブル先頭領域であり、記憶装置内に連続して配置された全Ｃテーブルの先頭アドレスを保持している。
【００４７】
図８（ａ）の関数テーブル３５の各領域について説明する。領域３５−１は対応Ｃテーブル始点領域である。関数は通常、Ｃ言語やアセンブリ言語などのコンピュータ・プログラム記述言語を用いて複数行に渡って記述されたひとつの機能単位であり、当該対応Ｃテーブル始点領域は、対象関数をＣ言語で記述した場合の先頭行に対応する、Ｃテーブル３３の先頭アドレスを保持している。領域３５−２は対応Ｃテーブル終点領域であり、対象関数をＣ言語で記述した場合の最終行に対応するＣテーブル３３の先頭アドレスを保持している。
【００４８】
領域３５−３は対応アセンブラテーブル始点領域であり、対象関数をアセンブリ言語で記述した場合の先頭行に対応するアセンブラテーブル３１の先頭アドレスを保持している。領域３５−４は対応アセンブラテーブル終点領域であり、対象関数をアセンブリ言語で記述した場合の最終行に対応するアセンブラテーブル３１の先頭アドレスを保持している。
【００４９】
領域３５−５は対応関数階層テーブル数領域であり、対象関数に対応する関数階層要素の数を保持している。領域３５−６および領域３５−７は対応関数階層テーブル領域であり、対象関数に対応する関数階層要素についての、当該関数階層テーブル３７のアドレスが保持されている。対応する関数階層テーブルは、対応関数階層テーブル数領域（領域３５−５）に保持されている数の個数存在し、それに応じて領域３５−６、領域３５−７で示される対応関数階層テーブル領域の数は増減する。
【００５０】
領域３５−８は子関数テーブル数領域であり、対象関数が直接呼び出している関数の個数を保持している。領域３５−９および領域３５−１０は子関数テーブル領域であり、対象関数が直接呼び出している関数に対応した関数テーブルのアドレスを保持している。対象関数が直接呼び出している子関数は、子関数テーブル数領域（領域３５−８）に保持されている数の個数存在し、それに応じて領域３５−９、領域３５−１０で示される子関数テーブル領域の数は増減する。
【００５１】
領域３５−１１は関数名領域であり、ウィンドウ２２の領域２２ａの関数名領域に表示するための、対象関数の関数名を保持している。
【００５２】
領域３５−１２はオリジナル単独サイクル数領域であり、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた際に、対象関数実行に要したサイクル数が保持されている。当該オリジナル単独サイクル数には、対象関数が内部でさらに関数呼出しを行っていた場合、呼び出された関数内部の実行に要したサイクル数は含まれていない。領域３５−１３は変更単独サイクル数領域であり、ユーザが、例えばウィンドウ２６を利用してオリジナル単独サイクル数（領域３５−１２）を変更した場合に、変更後の数値が保持されている。変更が一度も加えられていない場合に保持されている数値は、オリジナル単独サイクル数（領域３５−１２）と同じである。領域３５−１４は単独サイクル変更フラグ領域であり、オリジナル単独サイクル数（領域３５−１２）の変更が行われたか否かをフラグとして保持している。例えば、変更が加えられていない場合には数値０が保持されており、変更が加えられた場合には数値１が保持されている。
【００５３】
領域３５−１５はオリジナル総サイクル数領域であり、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた際に、対象関数実行に要したサイクル数が保持されている。当該オリジナル総サイクル数には、対象関数が内部でさらに関数呼出しを行っていた場合、呼び出された関数内部の実行に要したサイクル数をも含んでいる。領域３５−１６は変更総サイクル数領域であり、ユーザが、例えばウィンドウ２６を利用してオリジナル総サイクル数（領域３５−１５）を変更した場合に、変更後の数値が保持されている。変更が一度も加えられていない場合に保持されている数値は、オリジナル総サイクル数（領域３３−１５）と同じである。領域３５−１７は総サイクル変更フラグ領域であり、オリジナル総サイクル数（領域３５−１５）の変更が行われたか否かをフラグとして保持している。例えば、変更が加えられていない場合には数値０が保持されており、変更が加えられた場合には数値１が保持されている。
【００５４】
図８（ｂ）のテーブル３６の各領域について説明する。領域３６−１は関数テーブル数領域であり、記憶装置内に保持している関数テーブルの個数を保持している。領域３６−２は関数テーブル先頭領域であり、記憶装置内に連続して配置された全関数テーブルの先頭アドレスを保持している。
【００５５】
図９（ａ）の関数階層テーブル３７の各領域について説明する。領域３７−１は子関数階層テーブル数領域であり、対象関数階層要素が直接呼び出している関数階層要素の個数を保持している。領域３７−２および領域３７−３は子関数階層テーブル領域であり、対象関数階層要素が直接呼び出している関数階層要素に対応した関数階層テーブルのアドレスを保持している。対象関数階層が直接呼び出している子関数階層要素は、子関数階層テーブル数領域（領域３７−１）に保持されている数の個数存在し、それに応じて領域３７−２、領域３７−３で示される子関数階層テーブル領域の数は増減する。
【００５６】
領域３７−４は親関数階層テーブル領域であり、対象関数階層要素を呼び出した親関数階層要素に対応した関数階層テーブルのアドレスを保持している。領域３７−５は対応関数テーブル領域であり、対象関数階層要素と対応した関数についての関数テーブルのアドレスを保持している。
【００５７】
領域３７−６は呼出し元アセンブラテーブル領域であり、対象関数階層要素を呼び出しているアセンブリ言語１行と対応したアセンブラテーブルのアドレスを保持している。領域３７−７は関数階層要素名領域であり、対象関数階層要素の名前を保持している。この名前は、対象関数階層要素に対応した関数の関数名と同じであり、ウィンドウ２３の領域２３ａに表示する名前として利用される。
【００５８】
領域３７−８はオリジナル単独サイクル数領域であり、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた際に、対象関数階層要素実行に要したサイクル数が保持されている。当該オリジナル単独サイクル数には、対象関数階層要素が内部でさらに関数階層要素呼出しを行っていた場合、呼び出された関数階層要素内部の実行に要したサイクル数は含まれていない。領域３７−９は変更単独サイクル数領域であり、ユーザが、例えばウィンドウ２６を利用してオリジナル単独サイクル数（領域３７−８）を変更した場合に、変更後の数値が保持されている。変更が一度も加えられていない場合に保持されている数値は、オリジナル単独サイクル数（領域３７−８）と同じである。領域３７−１０は単独サイクル変更フラグ領域であり、オリジナル単独サイクル数（領域３７−８）の変更が行われたか否かをフラグとして保持している。例えば、変更が加えられていない場合には数値０が保持されており、変更が加えられた場合には数値１が保持されている。
【００５９】
領域３７−１１はオリジナル総サイクル数領域であり、ソースプログラム１を動作シミュレータ３でシミュレーション動作させた際に、対象関数階層要素実行に要したサイクル数が保持されている。当該オリジナル総サイクル数には、対象関数階層要素が内部でさらに関数階層要素呼出しを行っていた場合、呼び出された関数階層要素内部の実行に要したサイクル数をも含んでいる。領域３７−１２は変更総サイクル数領域であり、ユーザが、例えばウィンドウ２６を利用してオリジナル総サイクル数（領域３７−１１）を変更した場合に、変更後の数値が保持されている。変更が一度も加えられていない場合に保持されている数値は、オリジナル総サイクル数（領域３７−１１）と同じである。領域３７−１３は総サイクル変更フラグ領域であり、オリジナル総サイクル数（領域３７−１１）の変更が行われたか否かをフラグとして保持している。例えば、変更が加えられていない場合には数値０が保持されており、変更が加えられた場合には数値１が保持されている。
【００６０】
図９（ｂ）のテーブル３８の各領域について説明する。領域３８−１は関数階層テーブル数領域であり、記憶装置内に保持している関数階層テーブルの個数を保持している。領域３８−２は関数階層テーブル先頭領域であり、記憶装置内に連続して配置された全関数階層テーブルの先頭アドレスを保持している。
【００６１】
図１０に、プロファイラ４の全体の動作を示すフローチャートを示してある。プロファイラ４を起動すると、まず情報を表示するために入力データを読込む（ステップ４０）。入力データは動作シミュレータ３によって生成されたプロファイル情報５である。
【００６２】
次にプロファイラ４は、ステップ４１において、プロファイル情報５に保存されているデータを読み込み、解析して各ウィンドウを表示する。全アセンブラテーブル３１および３２を読込み解析し、ウィンドウ２５を表示する。全Ｃテーブル３３および３４を読込み解析し、ウィンドウ２４を表示する。全関数テーブル３５および３６を読込み解析し、ウィンドウ２２を表示する。全関数階層テーブル３７および３８を読込み解析し、ウィンドウ２３を表示する。
【００６３】
また、ステップ４１において、対象とするソースプログラム１の実行に必要な全サイクル数を計算して表示する。ウィンドウ２１の未変更時の総サイクル数を示す領域２１ａには、以下の式（１）により、全てのアセンブラテーブル３１の領域３１−７の総和を計算し、総サイクル数として表示する。
【００６４】
2004234068.tif 000003
また、変更後の総サイクル数を示す領域２１ｂには、以下の式（２）により、全てのアセンブラテーブル３１の中の領域３１−８の総和を計算し、変更後の総サイクル数として表示する。
【００６５】
2004234068.tif 000004
最初の段階では、ユーザはまだサイクル数情報に関して何ら変更を加えていないので、領域２１ａおよび２１ｂの値は同一となる。
【００６６】
ユーザは、プロファイラ３により表示された各種情報を評価した後、プロファイラ３を終了することができる（ステップ４２）。ユーザは、プロファイラ３により表示された各種情報を評価し、ステップ４３において、サイクル数の変更を指示することができる。そして、ステップ４４において、例えば実行に要するサイクル数が多いために専用プロセッサ化した方が良い部分を探し出し、該当部分２ｂ（図３）を抜き出すと全体のサイクル数がどのように変化するかを評価できる。この評価のステップ４４は、仮想評価のステップ７に相当する。
【００６７】
ステップ４４においては、該当部分のサイクル数を指定してウィンドウ２６を開き、これを用いて変更することができる。プロファイラ４は、ユーザによりサイクル数変更が行われると影響する他の全ての部分のサイクル数を再計算する。そして、ステップ４１に戻り、再び変更後のサイクル数値を表示する。変更後のサイクル数を表示する際、変更されたサイクル数の数値のみ、例えば字の色や背景色を変えたり、字の大きさや太さを変えたりするなど、ユーザが判り易いように表示する。この場合、サイクル数が変更されたか否かの情報は、単独サイクル数変更フラグ領域（領域３１−９、領域３３−１１、領域３５−１４、領域３７−９）、および総サイクル変更フラグ領域（領域３１−１２、領域３３−１４、領域３５−１７、領域３７−１３）に保持されている数値により判断することができ、本実施例においては、数値が１であるとき、それぞれのフラグ領域が属するテーブルが対象とするサイクル数に変更が加えられていることが判る。
【００６８】
本発明のハードウェア設計方式、すなわち、プロファイラ４においては、このようにプロファイル情報５を表示するだけでなく、任意の箇所で変更することによって全体への影響を見る（仮想評価する）ことができることを特徴とし、その結果最適な抜き出し部分２ｂを見つけ出して、図４のステップ９のように、例えば専用プロセッサ化のための分割を行うことができる。
【００６９】
このプロファイラ４においては、６つの異なる方法４４ａ〜４４ｆによりサイクル数を変更した評価を実行できる。第１の評価方法４４ａでは、ウィンドウ２５の領域２５ｂに表示されたアセンブリ言語の任意の行のサイクル数を変更し、それに対応する他の情報を自動変更してサイクル数の変動を評価する（ＡＳＭ変更）。第２の評価方法４４ｂでは、ウィンドウ２４の領域２４ｂに表示されたＣ言語の任意の行のサイクル数を変更し、対応する他の情報を自動変更してサイクル数の変動を評価する（Ｃ変更）。
【００７０】
第３の評価方法４４ｃでは、ウィンドウ２３の領域２３ｂに表示されたサイクル数のうち、任意の関数階層要素の、他の関数階層要素呼出しを一切含めない単独動作に要するサイクル数を変更し、それに対応する他の情報を自動変更してサイクル数の変動を評価する（ＨＳ変更）。第４の評価方法４４ｄでは、ウィンドウ２３の領域２３ｂに表示されたサイクル数のうち、任意の関数階層要素の、他の関数階層要素呼出しも含めた階層的動作に要するサイクル数を変更し、それに対応する他の情報を自動変更してサイクル数の変動を評価する（ＨＴ変更）。
【００７１】
第５の評価方法４４ｅでは、ウィンドウ２２の領域２２ｄに表示された、任意の関数の、他の関数呼出しを一切含めない単独動作に要するサイクル数を変更し、対応する他の情報を自動変更してサイクル数の変動を評価する（ＦＳ変更）。第６の評価方法４４ｆでは、ウィンドウ２２の領域２２ｄに表示された、任意の関数の、他の関数呼出しも含めた動作に要するサイクル数を変更し、対応する他の情報を自動変更してサイクル数の変動を評価する（ＦＴ変更）。
【００７２】
図１１にＡＳＭ変更４４ａのフローチャートを示してある。この処理４４ａにおいては、ユーザがウィンドウ２５の領域２５ｂに表示されたアセンブリ言語の任意の行のサイクル数を変更した際に、対応する他の情報を自動変更する。まず、ステップ５１において、ユーザが領域２５ｂに表示された任意のサイクル数を変更した際、変更対象のアセンブラテーブル３１の、対応Ｃテーブル（領域３１−２）から、対応するＣ言語の行を対象としたＣテーブルを取得し、その変更単独サイクル数（領域３３−１０）、変更総サイクル数（領域３３−１３）を計算する。
【００７３】
2004234068.tif 000005
また、サイクル数に変更が加えられたことを示すために、Ｃテーブル３３の単独サイクル変更フラグ（領域３３−１１）、総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。
【００７４】
次に、ステップ５２において、変更対象のアセンブリ言語１行が他の関数を呼び出すｃａｌｌ命令でない（領域３１−３呼び先関数階層テーブル数に保持されている数値が０）場合には、ステップ５３において、対応関数階層チェックサブルーチン４５により対応する関数階層テーブル等の情報を変更する。対応関数階層チェックサブルーチン４５については、図１７を参照して後に説明する。次にステップ５３で、変更対象のアセンブラテーブル３１の変更単独サイクル数（領域３１−８）、変更総サイクル数（領域３１−１１）を計算する。
【００７５】
2004234068.tif 000006
また、サイクル数に変更が加えられたことを示すために、アセンブラテーブルの単独サイクル変更フラグ（領域３１−９）、総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。
【００７６】
次に、ステップ５４において、変更対象のアセンブラテーブル（図１０）の、所属関数テーブル（領域３１−１）から、変更対象のアセンブリ言語１行が所属する関数の関数テーブル３５を得て、その変更単独サイクル数（領域３５−１３）、変更総サイクル数（領域３５−１６）を計算する。
【００７７】
2004234068.tif 000007
また、サイクル数に変更が加えられたことを示すために、関数テーブルの単独サイクル変更フラグ（領域３５−１４）、総サイクル変更フラグ（領域３５−１７）の保持する値を１にする。
【００７８】
ステップ５２において、変更対象のアセンブリ言語１行が他の関数を呼び出すｃａｌｌ命令であった（領域３１−３呼び先関数階層テーブル数に保持されている数値が正の数）場合には、サイクル数値変更の差分は全て呼び出し先へ与える。ステップ５５において、呼び出し先関数階層テーブル数（領域３１−３）に保持されている数を基に、全ての呼び出し先関数階層テーブル（領域３１−４以降、領域３１−３に依る）から、それぞれの呼び出し先関数階層テーブルが持つ変更総サイクル数（領域３７−１２）の比率に応じて差分を分配して差分ｍを求め、その差分ｍを、各関数階層要素の他の関数階層要素呼出しも含めた階層的動作に要するサイクル数に与える意味でＨＴ変更４４ｄを呼び出してサイクル数を変更する。
【００７９】
図１２にＣ変更４４ｂのフローチャートを示してある。この処理４４ｂは、ユーザがウィンドウ２４の領域２４ｂに表示されたＣ言語の任意の行のサイクル数を変更した際に、対応する他の情報を自動変更する。ステップ６１において、ユーザが領域２４ｂに表示された任意のサイクル数を変更した際、変更対象のＣテーブル３３の、変更単独サイクル数（領域３３−１０）、変更総サイクル数（領域３３−１３）を計算する。
【００８０】
（Ｃテーブルの変更単独サイクル数）＝（ユーザの変更値）  ・・・式（９）
（Ｃテーブルの変更総サイクル数）＝（ユーザの変更値）      ・・・式（１０）
また、サイクル数に変更が加えられたことを示すために、Ｃテーブルの単独サイクル変更フラグ（領域３３−１１）、総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。
【００８１】
次に、変更対象のＣテーブル３３の、対応アセンブラテーブル数（領域３３−２）を基に、全ての対応アセンブラテーブル（領域３１−３以降、領域３３−２に依る）を対象として、その各々に以下の対応関数階層チェックサブルーチン４５、ステップ６３、６４、６５およびＨＴ変更４４ｄの処理を行う。この際、各々の対応アセンブラテーブルのサイクル数について加算する差分ａは、元々の変更対象のＣテーブル３３への差分を各々の対応アセンブラテーブルの変更総サイクル数（領域３１−１１）の比率に応じて分配したものとする。
【００８２】
まず、ステップ６２において、対応アセンブラテーブル３１について、その対象アセンブリ言語１行が他の関数を呼び出すｃａｌｌ命令でない（領域３１−３呼び先関数階層テーブル数に保持されている数値が０）場合には、対応関数階層サブルーチン４５により対応する関数階層テーブル等の情報を変更し、次に、ステップ６３において、変更対象のアセンブラテーブル３１の変更単独サイクル数（領域３１−８）、変更総サイクル数（領域３１−１１）を計算する。
【００８３】
2004234068.tif 000008
また、サイクル数に変更が加えられたことを示すために、アセンブラテーブルの単独サイクル変更フラグ（領域３１−９）、総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。
【００８４】
次に、ステップ６４において、対応アセンブラテーブル３１の、所属関数テーブル（領域３１−１）から、対象のアセンブリ言語１行が所属する関数の関数テーブル３５を得て、その変更単独サイクル数（領域３５−１３）、変更総サイクル数（領域３５−１６）を計算する。
【００８５】
2004234068.tif 000009
また、サイクル数に変更が加えられたことを示すために、関数テーブルの単独サイクル変更フラグ（領域３５−１４）、総サイクル変更フラグ（領域３５−１７）の保持する値を１にする。
【００８６】
ステップ６２において、対応アセンブラテーブルの対象のアセンブリ言語１行が他の関数を呼び出すｃａｌｌ命令であった（領域３１−３呼び先関数階層テーブル数に保持されている数値が正の数）場合には、サイクル数値変更の差分ａは全て呼び出し先へ与える。ステップ６５において、呼び出し先関数階層テーブル数（領域３１−３）に保持されている数を基に、全ての呼び出し先関数階層テーブル（領域３１−４以降、領域３１−３に依る）から、それぞれの呼び出し先関数階層テーブルが持つ変更総サイクル数（領域３７−１２）の比率に応じて差分ａを分配して差分ｂを求め、その差分ｂを、各関数階層要素の他の関数階層要素呼出しも含めた階層的動作に要するサイクル数に与える意味でＨＴ変更４４ｄを呼び出してサイクル数を変更する。
【００８７】
図１３にＨＳ変更４４ｃのフローチャートを示してある。この処理４４ｃでは、ユーザがウィンドウ２３の領域２３ｂに表示された任意の関数階層要素の、他の関数階層要素呼出しを一切含めない単独動作に要するサイクル数を変更した際に、対応する他の情報を自動変更する。ステップ７１において、ユーザが領域２３ｂに表示されたサイクル数のうち、任意の、単独動作に要するサイクル数を変更した際、変更対象の関数階層テーブル３７の、変更単独サイクル数（領域３７−９）、変更総サイクル数（領域３７−１２）を計算する。
【００８８】
2004234068.tif 000010
また、サイクル数に変更が加えられたことを示すために、関数階層テーブルの単独サイクル変更フラグ（領域３７−１０）、総サイクル変更フラグ（領域３７−１３）の保持する値を１にする。
【００８９】
次に、ステップ７２において、対応関数テーブル（領域３７−５）から、対応アセンブラテーブル始点（領域３５−３）および対応アセンブラテーブル終点（領域３５−４）を得て、当該始点と終点の間のアドレスに配置されている全てのアセンブラテーブル３１の変更単独サイクル数（領域３１−８）、変更総サイクル数（領域３１−１１）を計算する。この際のサイクル数に加える差分ｃは、元々の差分を、アセンブラテーブル３１の変更単独サイクル数（領域３１−８）の比率に応じて分配する。
【００９０】
2004234068.tif 000011
また、サイクル数に変更が加えられたことを示すために、アセンブラテーブルの単独サイクル変更フラグ（領域３１−９）、総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。
【００９１】
さらに、ステップ７３において、変更を加えた各々のアセンブラテーブル３１について、対応Ｃテーブル（領域３１−２）から得たＣテーブル３３の、変更単独サイクル数（領域３３−１０）、変更総サイクル数（領域３３−１３）を計算する。
【００９２】
2004234068.tif 000012
また、サイクル数に変更が加えられたことを示すために、Ｃテーブルの単独サイクル変更フラグ（領域３３−１１）、総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。
【００９３】
さらに、ステップ７４において、変更対象の関数階層テーブル３７の呼出し元アセンブラテーブル（領域３７−６）から得られるアセンブラテーブル３１の変更総サイクル数（領域３１−１１）を計算して、その変更が加えられたことを示すために総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。さらに変更したアセンブラテーブル３１の対応Ｃテーブル（領域３１−２）により、対応するＣテーブル３３の変更総サイクル数（領域３３−１３）も計算し、その変更が加えられたことを示すために総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。ここまでのステップ７４の操作は、親関数階層テーブル（領域３７−４）から得られる関数階層テーブル３７について再帰的に行う。
【００９４】
2004234068.tif 000013
次に、ステップ７５において、対応関数テーブル（領域３７−５）から得られる関数テーブル３５について、その変更単独サイクル数（領域３５−１３）、変更総サイクル数（領域３５−１６）を計算する。
【００９５】
2004234068.tif 000014
また、サイクル数に変更が加えられたことを示すために、関数テーブルの単独サイクル変更フラグ（領域３５−１４）、総サイクル変更フラグ（領域３５−１７）の保持する値を１にする。
【００９６】
ステップ７６において、親関数階層テーブル（領域３７−４）から親階層に関する関数階層テーブル３７が得られる場合、ステップ７７において、その親階層テーブル３７の変更総サイクル数（領域３７−１２）を計算し、さらに親階層テーブルの対応関数テーブル（領域３７−５）から得られる関数テーブル３５の変更総サイクル数（領域３５−１６）を計算する操作を再帰的に行い、元々の変更対象の関数階層要素の全ての親階層について変更する。変更が加えられたことを示すため、変更したテーブルの総サイクル変更フラグ（領域３７−１３および領域３５−１７）の保持する値を１にする。
【００９７】
2004234068.tif 000015
図１４に、ＨＴ変更４４ｄのフローチャートを示してある。この処理４４ｄでは、ユーザがウィンドウ２３の領域２３ｂに表示された任意の関数階層要素の、他の関数階層要素呼出しを含めた階層的動作に要するサイクル数を変更した際に、対応する他の情報を自動変更する。
【００９８】
ステップ８１において、ユーザが領域２３ｂに表示されたサイクル数のうち、任意の、階層的動作に要するサイクル数を変更した際、親関数階層テーブル（領域３７−４）から親階層に関する関数階層テーブル３７が得られる場合、ステップ８２において、その親階層テーブル３７の変更総サイクル数（領域３７−１２）を計算し、さらに親階層テーブルの対応関数テーブル（領域３７−５）から得られる関数テーブル３５の変更総サイクル数（領域３５−１６）を計算する操作を再帰的に行い、元々の変更対象の関数階層要素の全ての親階層について変更する。変更が加えられたことを示すため、変更したテーブルの総サイクル変更フラグ（領域３７−１３および領域３５−１７）の保持する値を１にする。計算は式（２５）および式（２６）を用いる。
【００９９】
次に、差分ｄを、元々の変更対象の関数階層要素の変更総サイクル（領域３７−１２）に対する変更単独サイクル数（領域３７−９）の比率で差分から求め、以下のステップ８３、８４、８５、８６の操作を行い、さらに子関数階層テーブル数（領域３７−１）、および子関数階層テーブル（領域３７−２以降、領域３７−１に依る）から、変更対象の関数階層要素から呼び出された関数階層要素が存在する限り、差分ｄを同様に求めてステップ８３、８４、８５および８６の操作を繰り返す（ステップ８７）。
【０１００】
ステップ８３においては、対応関数テーブル（領域３７−５）から、対応アセンブラテーブル始点（領域３５−３）および対応アセンブラテーブル終点（領域３５−４）を得て、当該始点と終点の間のアドレスに配置されてる全てのアセンブラテーブル３１の変更単独サイクル数（領域３１−８）、変更総サイクル数（領域３１−１１）を計算する。この際のサイクル数に加える差分ｅは、元々の差分ｄを、アセンブラテーブル３１の変更単独サイクル数（領域３１−８）の比率に応じて分配する。
【０１０１】
2004234068.tif 000016
また、サイクル数に変更が加えられたことを示すために、アセンブラテーブルの単独サイクル変更フラグ（領域３１−９）、総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。
【０１０２】
ステップ８４においては、さらに変更を加えた各々のアセンブラテーブル３１について、対応Ｃテーブル（領域３１−２）から得たＣテーブル３３の、変更単独サイクル数（領域３３−１０）、変更総サイクル数（領域３３−１３）を計算する。
【０１０３】
2004234068.tif 000017
また、サイクル数に変更が加えられたことを示すために、Ｃテーブルの単独サイクル変更フラグ（領域３３−１１）、総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。
【０１０４】
次に、ステップ８５において、対応関数テーブル（領域３７−５）から得られる関数テーブル３５について、その変更単独サイクル数（領域３５−１３）、変更総サイクル数（領域３５−１６）を計算する。
【０１０５】
2004234068.tif 000018
また、サイクル数に変更が加えられたことを示すために、関数テーブルの単独サイクル変更フラグ（領域３５−１４）、総サイクル変更フラグ（領域３５−１７）の保持する値を１にする。
【０１０６】
次に、ステップ８６において、変更対象の関数階層テーブル３７の、変更単独サイクル数（領域３７−９）、変更総サイクル数（領域３７−１２）を計算する）。
【０１０７】
2004234068.tif 000019
また、サイクル数に変更が加えられたことを示すために、関数階層テーブルの単独サイクル変更フラグ（領域３７−１０）、総サイクル変更フラグ（領域３７−１３）の保持する値を１にする。
【０１０８】
最後に、ステップ８７において、子階層があれば、ステップ８８において、変更対象の関数階層テーブル３７の呼出し元アセンブラテーブル（領域３７−６）から得られるアセンブラテーブル３１の変更総サイクル数（領域３１−１１）を計算して、その変更が加えられたことを示すために総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。さらに変更したアセンブラテーブル３１の対応Ｃテーブル（領域３１−２）により、対応するＣテーブル３３の変更総サイクル数（領域３３−１３）も計算し、その変更が加えられたことを示すために総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。計算には、式（２１）および式（２２）を用いる。
【０１０９】
図１５にＦＳ変更４４ｅのフローチャートを示してある。この処理４４ｅでは、ユーザがウィンドウ２２の領域２２ｄに表示された任意の関数の、他の関数呼出しを一切含めない単独サイクル数を変更した際に、対応する他の情報を自動変更する。ユーザが領域２２ｄに表示された単独サイクル数を変更した際、まず、対応関数階層チェックサブルーチン４５により対応する関数階層テーブル等の情報を変更し、ステップ９１において、次に対象となる関数テーブル３５の対応アセンブラテーブル始点（領域３５−３）および対応アセンブラテーブル終点（領域３５−４）を得て、当該始点と終点の間のアドレスに配置されている全てのアセンブラテーブル３１の変更単独サイクル数（領域３１−８）、変更総サイクル数（領域３１−１１）を計算する。この際のサイクル数に加える差分ｃは、元々の差分を、アセンブラテーブル３１の変更単独サイクル数（領域３１−８）の比率に応じて分配する。また、式（１７）および式（１８）により計算する。また、サイクル数に変更が加えられたことを示すために、アセンブラテーブルの単独サイクル変更フラグ（領域３１−９）、総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。
【０１１０】
さらに、ステップ９２において、変更を加えた各々のアセンブラテーブル３１について、対応Ｃテーブル（領域３１−２）から得たＣテーブル３３の、変更単独サイクル数（領域３３−１０）、変更総サイクル数（領域３３−１３）を計算する。差分ｃにより、式（１９）および式（２０）で計算する。また、サイクル数に変更が加えられたことを示すために、Ｃテーブルの単独サイクル変更フラグ（領域３３−１１）、総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。
【０１１１】
また、ステップ９３において、変更対象の関数テーブル３５の対応関数階層テーブル数（領域３５−５）を基に全ての対応関数階層テーブル（領域３５−６以降、領域３５−５に依る）を得て、それぞれの関数階層テーブル３７の呼出し元アセンブラテーブル（領域３７−６）から得られるアセンブラテーブル３１の変更総サイクル数（領域３１−１１）を計算して、その変更が加えられたことを示すために総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。さらに変更したアセンブラテーブル３１の対応Ｃテーブル（領域３１−２）により、対応するＣテーブル３３の変更総サイクル数（領域３３−１３）も計算し、その変更が加えられたことを示すために総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。ここまでのステップ９３の操作は、親関数階層テーブル（領域３７−４）から得られる関数階層テーブル３７について再帰的に行う。計算は、元々の対象である関数テーブル３５への差分により、式（２１）および式（２２）を用いる。
【０１１２】
最後に、ステップ９４において、元々の対象である関数テーブル３５の変更単独サイクル数（領域３５−１３）および変更総サイクル数（領域３５−１６）を式（７）および式（８）を用いて計算し、また、サイクル数に変更が加えられたことを示すために、関数テーブルの単独サイクル変更フラグ（領域３５−１４）、総サイクル変更フラグ（領域３５−１７）の保持する値を１にする。
【０１１３】
図１６にＦＴ変更４４ｆのフローチャートを示してある。この処理４４ｆは、ユーザがウィンドウ２２の領域２２ｄに表示された任意の関数の、他の関数呼出しを含めた総サイクル数を変更した際に、対応する他の情報を自動変更する。まず、ステップ１０１で、ユーザが領域２２ｄに表示された総サイクル数を変更した際、対応関数階層テーブル数（領域３５−５）より、対応する関数階層要素がひとつであるか、それとも複数個存在するかを調べる。複数個存在する場合には、以降の対応関数階層チェックサブルーチン４５、ステップ１０２、１０３、１０４、１０５および１０６の操作を行い、またひとつであった場合には対応する関数階層要素に対して同じ差分によるサイクル数変更を行う意味で、ＨＴ変更４４ｄを呼び出して関連する全てのサイクル数を変更する。
【０１１４】
ステップ１０１で、対応する関数階層要素がひとつであった場合、まず差分ｆを、対象とする関数テーブル３５の変更総サイクル数（領域３５−１６）に対する変更単独サイクル数（領域３５−１３）の割合として元々の差分から求め、その差分ｆを用いて対応関数階層チェックサブルーチン４５により対応する関数階層テーブル等の情報を変更する。次に、ステップ１０２において、対象となる関数テーブル３５の対応アセンブラテーブル始点（領域３５−３）および対応アセンブラテーブル終点（領域３５−４）を得て、当該始点と終点の間のアドレスに配置されてる全てのアセンブラテーブル３１の変更単独サイクル数（領域３１−８）、変更総サイクル数（領域３１−１１）を計算する。この際のサイクル数に加える差分ｇは、元々の差分ｆを、アセンブラテーブル３１の変更単独サイクル数（領域３１−８）の比率に応じて分配する。
【０１１５】
2004234068.tif 000020
また、サイクル数に変更が加えられたことを示すために、アセンブラテーブルの単独サイクル変更フラグ（領域３１−９）、総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。
【０１１６】
さらに、ステップ１０３において、変更を加えた各々のアセンブラテーブル３１について、対応Ｃテーブル（領域３１−２）から得たＣテーブル３３の、変更単独サイクル数（領域３３−１０）、変更総サイクル数（領域３３−１３）を計算する。
【０１１７】
2004234068.tif 000021
また、サイクル数に変更が加えられたことを示すために、Ｃテーブルの単独サイクル変更フラグ（領域３３−１１）、総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。
【０１１８】
また、ステップ１０４において、変更対象の関数テーブル３５の対応関数階層テーブル数（領域３５−５）を基に全ての対応関数階層テーブル（領域３５−６以降、領域３５−５に依る）を得て、それぞれの関数階層テーブル３７の呼出し元アセンブラテーブル（領域３７−６）から得られるアセンブラテーブル３１の変更総サイクル数（領域３１−１１）を計算して、その変更が加えられたことを示すために総サイクル変更フラグ（領域３１−１２）の保持する値を１にする。さらに変更したアセンブラテーブル３１の対応Ｃテーブル（領域３１−２）により、対応するＣテーブル３３の変更総サイクル数（領域３３−１３）も計算し、その変更が加えられたことを示すために総サイクル変更フラグ（領域３３−１４）の保持する値を１にする。ここまでのステップ１０４の操作は、親関数階層テーブル（領域３７−４）から得られる関数階層テーブル３７について再帰的に行う。
【０１１９】
2004234068.tif 000022
次に、ステップ１０５において、元々の対象である関数テーブル３５の変更単独サイクル数（領域３５−１３）および変更総サイクル数（領域３５−１６）を計算し、また、サイクル数に変更が加えられたことを示すために、関数テーブルの単独サイクル変更フラグ（領域３５−１４）、総サイクル変更フラグ（領域３５−１７）の保持する値を１にする。
【０１２０】
2004234068.tif 000023
ステップ１０６において、子関数テーブル数（領域３５−８）により、対象とする関数が他の関数を呼び出していることによる子関数が存在する場合には、子関数テーブル（領域３５−９以降、領域３５−８に依る）により子関数に対応する関数テーブル３５を得て、対象を、子関数に対応する関数テーブル３５に切替えて、対応関数階層チェックサブルーチン４５、ステップ１０２、１０３、１０４および１０５の操作を繰り返す。
【０１２１】
図１７に、変更処理４４ａ〜４４ｆから呼び出される対応関数階層チェックサブルーチン４５のフローチャートを示してある。この処理４５においては、ステプ１１１において、対象とする関数テーブル３５の対応関数階層テーブル数（領域３５−５）を基に、全ての対応関数階層テーブル（領域３５−６以降、領域３５−５に依る）について、差分を全ての対応関数階層テーブルの変更単独サイクル数（領域３７−９）の比率で分配して求めた差分ｈを用いて、変更単独サイクル数（領域３７−９）および変更総サイクル数（領域３７−１２）を計算する。
【０１２２】
2004234068.tif 000024
また、サイクル数に変更が加えられたことを示すために、関数階層テーブルの単独サイクル変更フラグ（領域３７−１０）、総サイクル変更フラグ（領域３７−１３）の保持する値を１にする。
【０１２３】
また、ステップ１１２において、それぞれの対応関数階層テーブル３７の親関数階層テーブル（領域３７−４）により呼出し元の親関数階層要素を得る操作を再帰的に行い、親関数階層テーブルが存在する場合には、ステップ１１３において、全ての親関数階層要素の関数階層テーブル３７について、変更総サイクル数（領域３７−１２）とその対応関数テーブル（領域３７−５）から得られる対応する関数テーブル３５の変更総サイクル数（領域３５−１６）に差分ｈを加える。
【０１２４】
2004234068.tif 000025
また、サイクル数に変更が加えられたことを示すために、関数階層テーブルの総サイクル変更フラグ（領域３７−１３）、および関数テーブルの総サイクル変更フラグ（領域３５−１７）の保持する値を１にする。
【０１２５】
以上に説明したように、本例のプロファイラ４は、動作シミュレータ４で得られたソースプログラム１の各行単位のハードウェア上での実行に必要なＣＰＵクロック・サイクル数をプロファイル情報５として幾つかの単位で保持する。すなわち、プロファイル情報５を構成するアセンブラテーブル３１はアセンブリ言語の１行の単位で、Ｃテーブル３３はソースプログラム１のＣ言語の１行分の単位でハードウェア上での実行に必要なＣＰＵクロック・サイクル数を保持する領域を備えている。したがって、これらのテーブル３１および３３は、異なる言語の各行単位でサイクル数を保持できる。
【０１２６】
また、関数テーブル３５は関数ひとつ分の単位で、関数階層テーブル３７は関数階層の単位でハードウェア上での実行に必要なＣＰＵクロック・サイクル数を保持する領域を備えている。したがって、これらのテーブル３５および３７は、処理目的に応じてまとめた基本単位ごとに、ハードウェア上での実行に必要なＣＰＵクロック・サイクル数を保持できる。さらに、これらのテーブル３１、３３、３５および３７は、それぞれのテーブルの単位で、その単位のサイクル数を代替する数値を保持する領域を備えている。
【０１２７】
したがって、仮想評価するステップ７において、ユーザが希望する幾つかの単位でソースプログラム１の一部を切り出し、別なハードウェアまたは別なソフトウェアとして動作させて、当該ソースプログラム１の全体の動作効率を向上させるために、任意の箇所のＣＰＵクロック・サイクル数値を仮想的に変更することができる。そして、変更したサイクル数値を表示することで、切り出す箇所を判断でき、パフォーマンスを最も向上できる最適な部分を切り出して専用プロセッサ化し、経済的で、かつ処理速度も速い最適なプロセッサあるいはＬＳＩを設計することができる。
【０１２８】
上記の例では、記述言語としては、Ｃ言語とアセンブリ言語とでソースプログラムを記述しているが、プロファイラ４において評価できる記述言語はこれに限定されることはなく、Ｃ＋＋言語、Ｊａｖａ（登録商標）言語などであっても良い。
【０１２９】
コンピュータ・プログラムを処理目的に応じてまとめた基本単位としては、関数と関数階層を単位とした例を示しているが、分割してコールされることのない処理単位を基本単位とすれば関数単位に限定されるものではない。
【０１３０】
さらに、アセンブリ言語の１行の単位でサイクル数を保持するアセンブラテーブル３１と、Ｃ言語の１行分の単位でサイクル数を保持するＣテーブル３３と、関数ひとつ分の単位でサイクル数を保持する関数テーブル３５と、関数階層の単位でサイクル数を保持する関数階層テーブル３７とは、相互にサイクル数を換算できるように対応付けられている。そして、プロファイラ４は、仮想評価機能７を実現するサイクル数変更の処理（ステップ４４）において、任意の単位で、任意の箇所のＣＰＵクロック・サイクル数値が仮想的に変更されたときに、変更された箇所と対応関係のある、他のテーブルの対応箇所のサイクル数を自動的に変更する機能４４ａ〜４４ｆを備えている。したがって、ユーザは任意の単位でサイクル数を変更することにより、ソースプログラム１の変更前のサイクル数と、変更後のサイクル数を比較して、切り出す部分の適否を評価できる。すなわち、本発明のプロファイラ４においては、ソースプログラム１から切り出す部分の仮想評価を、複数の視点から行うことが可能であり、ユーザの目的に即した評価を得ることができる。
【０１３１】
また、本例のプロファイラ４はＧＵＩプログラムとして実現されており、ウィンドウ２１〜２６により各単位でのサイクル数を表示すると共に、それぞれの単位でユーザが任意にサイクル数を変更できるようにしている。プロファイラ４としての機能を実現するプログラムは、上記のフローチャートに基づき説明した本発明のプログラム性能評価方法の各処理を適当なハードウェア資源を備えたコンピュータにおいて実行できる命令を備えたものであり、ＣＤ−ＲＯＭなどの適当な記録媒体に記録して提供することができる。また、インターネットなどのコンピュータネットワークを介しても提供できる。そして、適当なハードウェア資源を備えたコンピュータにインストールすることにより、プロファイラ４として機能させることができる。
【図面の簡単な説明】
【図１】ソースプログラムの初期の様子を示した図である。
【図２】ＶＵＰＵプロセッサの概要を示す図である。
【図３】ソースプログラムの一部を抜き出して専用プロセッサ化した設計を示す図である。
【図４】本発明における設計方式を用いたハードウェア設計のワークフローを示す図である。
【図５】本発明のプロファイラをＧＵＩプログラムとして提供したときのウィンドウ表示を示す図である。
【図６】本発明のプロファイラをＧＵＩプログラムとして提供したときの上記と異なるウィンドウ表示を示す図である。
【図７】プロファイラが利用する情報テーブルを示す図であり、アセンブラテーブルおよびＣテーブルを示す図である。
【図８】プロファイラが利用する情報テーブルを示す図であり、関数テーブルを示す図である。
【図９】プロファイラが利用する情報テーブルを示す図であり、関数階層テーブルを示す図である。
【図１０】プロファイラの全体の動作を示すフローチャートである。
【図１１】ＡＳＭ変更の処理を示すフローチャートである。
【図１２】Ｃ変更の処理を示すフローチャートである。
【図１３】ＨＳ変更の処理を示すフローチャートである。
【図１４】ＨＴ変更の処理を示すフローチャートである。
【図１５】ＦＳ変更の処理を示すフローチャートである。
【図１６】ＦＴ変更の処理を示すフローチャートである。
【図１７】対応関数階層チェックサブリーチンの処理を示すフローチャートである。
【符号の説明】
１    コンピュータ・プログラム（ソースプログラム）
４    プロファイラ
５    プロファイル情報
【図１】
2004234068.tif 000026
【図２】
2004234068.tif 000027
【図３】
2004234068.tif 000028
【図４】
2004234068.tif 000029
【図５】
2004234068.tif 000030
【図６】
2004234068.tif 000031
【図７】
2004234068.tif 000032
【図８】
2004234068.tif 000033
【図９】
2004234068.tif 000034
【図１０】
2004234068.tif 000035
【図１１】
2004234068.tif 000036
【図１２】
2004234068.tif 000037
【図１３】
2004234068.tif 000038
【図１４】
2004234068.tif 000039
【図１５】
2004234068.tif 000040
【図１６】
2004234068.tif 000041
【図１７】
2004234068.tif 000042