(57)【特許請求の範囲】
【請求項１】
複数のソースステートメントを含むソースプログラムをコンパイルしてオブジェクトコードを生成すると共に、それぞれのソースステートメントおよび／または前記それぞれのソースステートメントを中間言語に翻訳した中間リストと、前記オブジェクトコードの実行時の実行用メモリにおける、前記中間リストがコード化された命令のアドレスであるコードメモリアドレスおよびその命令によりアクセスされる変数のアドレスである変数メモリアドレスとを関連付けするデバッグ情報を生成するコンパイラと、
サイクルベースのシミュレータであって、前記オブジェクトコードを走行することにより、サイクル単位でアクセスされるコードメモリアドレス、変数メモリアドレスおよびアクセスタイプを含むメモリアクセス情報を生成するシミュレータと、
前記デバッグ情報と前記メモリアクセス情報とを利用して前記ソースプログラムを分析する分析装置とを有し、
この分析装置は、
前記複数のソースステートメントの一部または前記中間リストの一部を処理ブロックとしてグループ化するためのブロックＩＤを、前記デバッグ情報に基づき、それぞれの命令のコードメモリアドレスに関連付けして記憶するメモリと、
前記メモリアクセス情報に基づき、前記ソースプログラムを実行したときの、変数メモリアドレスおよびアクセスタイプを含めた、前記実行用メモリに対するアクセス状況を、サイクルの経過と共に、前記それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤにより異なる形態で表示デバイスにグラフィック表示する機能とを備えている、支援システム。
【請求項２】
デバッグ情報と、メモリアクセス情報とを利用して、複数のソースステートメントを備えたソースプログラムを分析するための装置であって、
前記デバッグ情報は、前記ソースプログラムをコンパイルしてオブジェクトコードを生成する段階で生成され、それぞれのソースステートメントおよび／または前記それぞれのソースステートメントを中間言語に翻訳した中間リストと、前記オブジェクトコードの実行時の実行用メモリにおける、前記中間リストがコード化された命令のアドレスであるコードメモリアドレスおよびその命令によりアクセスされる変数のアドレスである変数メモリアドレスとを関連付けする情報を含み、
前記メモリアクセス情報は、前記オブジェクトコードをサイクルベースのシミュレータで走行することにより生成され、サイクル単位でアクセスされるコードメモリアドレス、変数メモリアドレスおよびアクセスタイプを含み、
さらに、
前記複数のソースステートメントの一部または前記中間リストの一部を処理ブロックとしてグループ化するためのブロックＩＤを、前記デバッグ情報に基づき、それぞれの命令のコードメモリアドレスに関連付けして記憶するメモリと、
前記メモリアクセス情報に基づき、前記ソースプログラムを実行したときの、変数メモリアドレスおよびアクセスタイプを含めた、前記実行用メモリに対するアクセス状況を、サイクルの経過と共に、それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤにより異なる形態で表示デバイスにグラフィック表示するグラフィック表示機能とを有する装置。
【請求項３】
前記グラフィック表示機能は、前記アクセス状況を、ブロックＩＤの相違により色分けして表示する、請求項２の装置。
【請求項４】
前記複数のソースステートメントの少なくとも一部または前記中間リストの少なくとも一部を前記表示デバイスに表示する機能と、
前記表示デバイス上で指定された前記複数のソースステートメントの一部または前記中間リストの一部に対応する命令のコードメモリアドレスに対して、前記デバッグ情報を参照し、他の処理ブロックのブロックＩＤとは異なるブロックＩＤを割当てる機能とを有する、請求項２の装置。
【請求項５】
前記グラフィック表示機能によりグラフィック表示された実行用メモリに対するアクセスのサイクルを指定することにより、そのメモリアクセスに対応するソースステートメントまたは中間リストを前記表示デバイスに表示する機能をさらに有する、請求項２の装置。
【請求項６】
デバッグ情報と、メモリアクセス情報とを利用して、複数のソースステートメントを備えたソースプログラムを分析する処理をコンピュータにより実行するためのプログラムであって、
前記デバッグ情報は、前記ソースプログラムをコンパイルしてオブジェクトコードを生成する段階で生成され、それぞれのソースステートメントおよび／または前記それぞれのソースステートメントを中間言語に翻訳した中間リストと、前記オブジェクトコードの実行時の実行用メモリにおける、前記中間リストがコード化された命令のアドレスであるコードメモリアドレスおよびその命令によりアクセスされる変数のアドレスである変数メモリアドレスとを関連付けした情報を含み、
前記メモリアクセス情報は、前記オブジェクトコードをサイクルベースのシミュレータで走行することにより生成され、サイクル単位でアクセスされるコードメモリアドレス、変数メモリアドレスおよびアクセスタイプを含み、
当該分析する処理は、
前記コンピュータが前記複数のソースステートメントの一部または前記中間リストの一部を処理ブロックとしてグループ化するためのブロックＩＤを、前記デバッグ情報に基づき、前記コードメモリアドレスに関連付けしてメモリに記憶する工程と、
前記コンピュータが前記メモリアクセス情報に基づき、前記ソースプログラムを実行したときの、変数メモリアドレスおよびアクセスタイプを含めた、前記実行用メモリに対するアクセス状況を、サイクルの経過と共に、前記それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤにより異なる形態で表示デバイスにグラフィック表示する工程とを含む、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
ソースプログラムにより記述された処理を実行するためのデバイスの設計およびその設計を支援するための分析装置および方法に関するものである。
【背景技術】
【０００２】
特開２００３−２１６６７８号公報には、Ｃ言語で記述された仕様あるいはプログラムを実行する際に、プログラム中の特定のプロセスあるいはプログラムファンクションを専用回路化し、プログラムを効率よく稼動させることが開示されている。また、その専用回路に対する命令セットを、サイクルに分解したモデルでシミュレートすることができる、サイクルベースの命令レベルシミュレータ（以降、ＩＳＳ）が記載されている。【０００３】
複数のソースステートメントを含むプログラムは、それらのソースステートメントの処理が逐次実行されることが基本である。プログラムを実行するハードウェア資源に余裕があれば、プログラムの一部を分割して並列に実行することにより処理を効率化することが試みられる。並列化の１つの方法は命令単位で並列に実行することである。他の方法の１つは、複数の命令を含むブロック（処理ブロック）に分割し、プログラムをブロック単位で並列に同時実行することである。さらに、並列に稼動可能な処理ブロックに対して、それらの処理ブロックがパイプラインを構成するようにデータを順番に供給して処理を進める、いわゆるブロック・パイプライン処理がある。
【発明の開示】
【０００４】
本発明の一つの形態は、デバイスの設計を支援するシステムであり、コンパイラと、シミュレータと、これらコンパイラおよびシミュレータから得られた情報によりソースプログラムを分析するための装置とを有する。コンパイラは、複数のソースステートメントを含むソースプログラムをコンパイルしてオブジェクトコードを生成すると共に、デバッグ情報を生成する。デバッグ情報は、それぞれのソースステートメントおよび／またはそれぞれのソースステートメントを中間言語に翻訳した中間リストと、中間リストがコード化された命令のコードメモリアドレスおよびその命令によりアクセスされる変数の変数メモリアドレスとを関連付けするデバッグ情報を含む。コードメモリアドレスおよび変数メモリアドレスは、オブジェクトコードの実行時の実行用メモリにおけるアドレスを示す。
【０００５】
シミュレータは、サイクルベースのシミュレータであって、オブジェクトコードを走行することにより、メモリアクセス情報を生成する。メモリアクセス情報は、サイクル単位でアクセスされるコードメモリアドレス、変数メモリアドレスおよびアクセスタイプを含む。
【０００６】
分析装置は、複数のソースステートメントの一部または中間リストの一部を処理ブロックとしてグループ化するためのブロックＩＤを、デバッグ情報に基づき、それぞれの命令のコードメモリアドレスに関連付けして記憶するメモリと、メモリアクセス情報に基づき、ソースプログラムを実行したときの実行用メモリに対するアクセス状況を、サイクルの経過と共に、表示デバイスにグラフィック表示するグラフィック表示機能とを有する。アクセス状況には、変数メモリアドレスおよびアクセスタイプが含まれる。さらに、アクセス状況には、さらに、コードメモリアドレスを含めても良い。さらに、アクセス状況は、それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤにより異なる形態で表示される。その１つの形態は、アクセス状況を、ブロックＩＤの相違により色分けして表示することである。
【０００７】
分析装置は、ブロックＩＤを、それぞれの命令のコードメモリアドレスに関連付けしてメモリに記憶する。アクセス状況は、コードメモリアドレスおよび変数メモリアドレスを含み、コードメモリアドレスおよびブロックＩＤを介して、それぞれの命令が属する処理ブロックと関連付けされる。したがって、グラフィック表示機能は、サイクル（サイクル時刻）の経過と共に変化するアクセス状況を、そのアクセスを行なっている命令が含まれる処理ブロックの単位で識別できるように表示できる。そして、この分析装置は、メモリに記憶された、ブロックＩＤと、ソースステートメントまたは中間リストとを関連付けするためのデータを変更することにより、それぞれの命令のコードメモリアドレスに対するブロックＩＤが変更される。したがって、ソースプログラムあるいは中間リストをベースとして、プログラム内の複数の処理ブロックの構成を簡単に、そして、フレキシブルに変更できる。このため、コンパイルおよびシミュレーションを繰り返すことなく、短時間で、リアレンジされた処理ブロックに基づき、実行用メモリに対するアクセス状況を表示できる。
【０００８】
ソースプログラムを自動的に分析して複数の処理ブロックを設定することも可能である。一方、ユーザが外部から複数の処理ブロックをフレキシブルに指定あるいは定義できることは、デバイスの設計段階において重要である。例えば、表示デバイスに表示されたソースステートメントの一部あるいは中間レベルの一部を選択するだけで、ソースプログラムを分割するための複数の処理ブロックの構成を変更できる。ソースレベルあるいは中間言語レベルで処理ブロックを変更できる分析装置は、複数のソースステートメントの少なくとも一部または中間リストの少なくとも一部を表示デバイスに表示する機能と、表示デバイス上で指定された複数のソースステートメントの一部または中間リストの一部に対応する命令のコードメモリアドレスに対して、デバッグ情報を参照して、他の処理ブロックのブロックＩＤとは異なるブロックＩＤを割当てる機能とを有することが望ましい。
【０００９】
アクセス状況として表示されたコードメモリアドレスを指定することにより、プログラムの処理ブロックの構成を変更することも可能である。そして、デバッグ情報を参照することにより、そのリアレンジされた処理ブロックをソースプログラムレベルあるいは中間言語レベルで表示することができる。どのような方法により複数の処理ブロックの指定を変更しても、プログラムの処理ブロックの構成を変えた段階で、シミュレーションを再実行しなくても、再構成あるいは再分割された処理ブロックによりアクセス状況を表示できる。
【００１０】
本発明の他の一つの形態は、デバッグ情報と、メモリアクセス情報とを利用して、複数のソースステートメントを備えたソースプログラムを分析する処理をコンピュータにより実行するためのプログラムあるいはプログラム製品である。この分析処理は、複数のソースステートメントの一部または中間リストの一部を処理ブロックとしてグループ化するためのブロックＩＤを、デバッグ情報に基づき、コードメモリアドレスに関連付けしてメモリに記憶する工程と、メモリアクセス情報に基づき、ソースプログラムを実行したときの、コードメモリアドレス、変数メモリアドレスおよびアクセスタイプを含めた、実行用メモリに対するアクセス状況を、サイクルの経過と共に、コードメモリアドレスに関連付けされたブロックＩＤにより異なる形態で表示デバイスにグラフィック表示する工程とを含む。このプログラムは、適当な記録媒体に記録して提供でき、コンピュータにインストールすることにより、コンピュータを分析装置として機能させることができる。
【００１１】
この分析装置は、ソースプログラムを複数の処理ブロックに分割する構成を変更することが簡単であり、シミュレーションをやり直すことなく、種々の処理ブロックの構成に対して、処理ブロックの単位で実行用メモリに対するアクセス状況を表示できる。このため、分析装置は、ＣＰＵあるいは他の適当な演算機能をメモリアクセス解析手段として、指定された処理ブロックの構成について、処理ブロックの単位で、実行用メモリに対するアクセス状況を解析できる。
【００１２】
この分析装置において、メモリアクセス情報と、それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤとに基づき、対をなす処理ブロックの間の実行用メモリを介したデータ転送の方向を示す第１の判断機能は、ブロック間のパイプライン処理の可能性を判断するために有効である。ソースプログラム内の処理ブロックの構成を変えたときに、対を成す処理ブロックの間のデータ転送方向が一方向であれば、その対をなす処理ブロックをパイプライン方式で並列実行できる。
【００１３】
対をなす処理ブロックが複数ある場合は、それらの間の実行用メモリを介したデータ転送の量および方向を表示デバイスにマトリクス表示することにより、パイプライン方式で並列実行できる処理ブロックのペアを簡単に指定できる。デバッグ情報を利用して、マトリクス表示されたデータ転送のいずれかを指定することにより、そのデータ転送に対応するソースステートメントまたは中間リストを表示デバイスに表示することも可能である。
【００１４】
デバッグ情報と、メモリアクセス情報とを利用して、複数のソースステートメントを備えたソースプログラムを分析する方法は、以下の工程を有する。
ａ１．  複数のソースステートメントの一部または中間リストの一部に対して、複数のソースステートメントの一部または中間リストの一部を処理ブロックとしてグループ化するためのブロックＩＤを割当て、そのブロックＩＤをデバッグ情報に基づき、それぞれの命令のコードメモリアドレスに関連付けしてメモリに記憶する。
ａ２．  メモリアクセス情報と、コードメモリアドレスに関連付けされたブロックＩＤとに基づき、メモリアクセス解析手段により、対を成す処理ブロックの間の実行用メモリを介したデータ転送の方向を求める。
ａ３．  複数の対をなす処理ブロックの間の実行用メモリを介したデータ転送の量および方向を表示デバイスにマトリクス表示する。
【００１５】
分析装置において、指定された処理ブロックの構成について、メモリアクセス情報と、それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤとに基づき、実行用メモリの同一領域に対する第１の処理ブロックおよび第２の処理ブロックの参照関係を求める第２の判断機能も有用である。参照関係が求まれば、実行用メモリの同一領域に対するアクセスが重ならないあるいは逆転しない範囲が判断できる。重ならない範囲あるいは逆転しない範囲であれば、その範囲は、他の処理ブロックのアクセスを許すことができる。そのような条件で、第１の処理ブロックと第２の処理ブロックとは並列実行可能であり、第１の処理ブロックと第２の処理ブロックとを、仮想的に並列実行した結果を示すことができる。
【００１６】
この第２の判断機能により、メモリアクセス状態情報の順序関係を分析することにより、複数の処理ブロックを、どこまで重複させて実行可能かが判定できる。前の処理ブロック（ブロック領域の処理）がデータを書き出してから、後の処理ブロックがそのデータを読み込むという処理上の順序制限を満たす場合は、それらの処理ブロックは、その参照関係を満足する範囲において並列実行することが可能であり、処理時間をさらに短縮できる。
【００１７】
さらに、メモリアクセス情報と、それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤとに基づき、第１の処理ブロックおよび第２の処理ブロックと並列実行したときの実行用メモリとの間のアクセスに要するバンド幅を算出できる。指定された１の処理ブロックと他の処理ブロックとの間のバンド幅を判定するために、バンド幅対サイクルの関係をグラフにより表示する機能を設けることは有効である。また、利用可能なバンド幅などの複数の処理ブロックのパイプライン動作の条件を設定する機能または工程を設けることも有効である。
【００１８】
パイプライン動作に関し、ソースプログラムを分析する方法は、以下の工程を有する。
ｂ１．  複数のソースステートメントの一部または中間リストの一部に対して、複数のソースステートメントの一部または中間リストの一部を処理ブロックとしてグループ化するためのブロックＩＤを割当て、そのブロックＩＤをデバッグ情報に基づき、それぞれの命令のコードメモリアドレスに関連付けしてメモリに記憶する。
ｂ２．  メモリアクセス情報と、それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤとに基づき、メモリアクセス解析手段により、実行用メモリの同一領域に対する第１の処理ブロックおよび第２の処理ブロックの参照関係を求めて、第１の処理ブロックと第２の処理ブロックとを並列実行する可能性を示す。
ｂ３．  メモリアクセス解析手段により、メモリアクセス情報と、それぞれの命令のコードメモリアドレスに関連付けされたブロックＩＤとに基づき、第１の処理ブロックおよび第２の処理ブロックと実行用メモリとの間のアクセスに要するバンド幅を算出する。
【００１９】
これらの分析装置および方法においては、複数の処理ブロックのパイプライン方式により実行する可能性、さらには、単純なパイプライン方式より並列度を高めて実行する可能性を、プログラムそのものを独立分割してシミュレーションせずに判断できる。その結果、パイプライン方式と、並列実行とが可能であり、それに適した複数の処理ブロックの構成、並列実行のために要するデータ転送量やバンド幅が判明する。その情報を利用することにより、ソースプログラムにより記述された処理を、複数のブロック領域（処理ブロック）に分け、それらを適当なタイミングで個別のハードウェアにより実行可能とし、所謂マルチプロセッサデバイスの動作環境でソースプログラムにより記述された処理を実行するデバイスを設計できる。ブロック・パイプライン動作の判定の結果、１の構成となるようにプログラムをブロック化したのでは所望の性能に至ることが不可能と判定されれば、ＧＵＩ環境で処理ブロックの定義を変えて、他の構成となるようにプログラムをブロック化した場合のブロック・パイプライン動作の可否を判定できる。
【図面の簡単な説明】
【００２０】
【図１】図１は、分析装置を含む支援システムの概要を示す。
【図２】図２は、デバッグ情報、メモリアクセス情報およびブロック情報の概要を示す。
【図３】図３は、ソースプログラムの記述に対して処理ブロックを設定する概要を示す。
【図４】図４は、メモリアクセス状況を示す表示例。
【図５】図５は、処理ブロック間のデータ転送の説明。
【図６】図６は、データ転送のマトリクス表示例。
【図７】図７は、マトリクス表示からソースステートメントをバックトラックして表示する例。
【図８】図８は、メモリアクセスの参照関係の一例を示す。
【図９】図９は、処理ブロックを並列に実行したときのメモリアクセスの参照関係の一例。
【図１０】図１０は、処理ブロックを並列に実行したときのメモリアクセスの参照関係の他の例。
【図１１】図１１は、バンド幅も含めてメモリアクセスの参照関係を示す表示例。
【図１２】図１２は、解析方法の概要を示すフローチャート。
【図１３】図１３は、複数の処理ブロックの実行状況を示す。
【図１４】図１４は、複数の処理ブロックをパイプライン方式で実行する例を示す。
【図１５】図１５は、複数の処理ブロックを並列度を高めて実行する例を示す。
【発明を実施するための最良の形態】
【００２１】
図１は、ソースプログラム５０により記述された処理をデバイス、例えば、半導体デバイスに実装するための設計を支援するためにソースプログラム５０を分析する支援システム５の概要を示している。分析の対象となるソフトウェア（ソースプログラム）５０は、例えばＭＰＥＧ４のプロトコルを用いて画像の圧縮伸長を行う処理を含む画像処理用のアプリケーションである。この支援システム５は、分析あるいは解析のターゲットとなるソースプログラム５０をコンパイルするコンパイラ１と、コンパイルされたオブジェクトコード５１を走行させることにより、実行時のメモリに対するアクセス状態およびサイクル情報を含むメモリアクセス情報５３を生成するサイクルベースの命令レベルシミュレータ（ＩＳＳ）２とを備えている。コンパイラ１は、オブジェクトコード５１と共に、デバッグ情報５２を生成する。このデバッグ情報５２は、ソースプログラム５０に含まれるソースステートメント、例えば、Ｃ言語により記述されたＣステートメントと、そのステートメントをコード化した命令のメモリ上のアドレス（コードメモリアドレス）と、その命令によりアクセスされる変数のメモリ上のアドレス（変数メモリアドレス）との関連を示す結合情報を含んでいる。【００２２】
支援システム５は、デバッグ情報５２と、メモリアクセス情報５３とを用いて、ソースプログラム５０を、それによるメモリに対するアクセスという動作面から分析する分析装置５５を備えている。コンパイラ１、ＩＳＳ２および分析装置５５は、専用のハードウェアを備えた装置であっても良い。多くのケースでは、入出力装置、記憶装置、ＣＰＵなどの適当なハードウェア資源を備えたコンピュータを、コンパイラ１、ＩＳＳ２および分析装置５５として機能させるためのソフトウェアとして、それぞれ提供される。したがって、支援システム５が単体のコンピュータあるいはネットワークにより接続された複数のコンピュータにより実現される場合は、分析装置５５の入力となるデバッグ情報５２およびメモリアクセス情報５３は、システム５に含まれるハードディスクなどの適当な記録媒体を介して、あるいは、コンピュータネットワークなどの適当な伝送経路を介して分析装置５５に供給される。以下において、デバッグ情報５２は、結合情報に加えて、ソースプログラム５０およびオブジェクトコード５１に含まれる情報のうち、分析に必要な情報を含むものとして記載されている。デバッグ情報５２と共に、ソースプログラム５０および／またはオブジェクトコード５１を分析装置５５に供給し、デバッグ情報５２の情報量を削減することも可能である。【００２３】
分析装置５５においては、ターゲットのソフトウェアであるソースプログラム５０の動作結果を分析する際に、ソースプログラム５０におけるブロック領域の指定を行うブロック情報５４を生成する。ブロック領域は、ソースプログラム５０に含まれる１または複数のＣステートメントを含む。ブロック領域によりグループ化あるいは分割されたステートメントからなる１または一群の処理は、分析装置５５においてソースプログラム５０の動作を分析する際に、１つの分離できない単位あるいは塊としてハンドリングされる。したがって、以降では、ソースプログラム５０が分割され、ソースプログラム５０に含まれる複数のＣステートメントがグループ化されたものを処理ブロックと呼ぶ。ブロック情報５４においては各々の処理ブロックに対してユニークなブロックＩＤを付すことで、処理ブロックを区別する。【００２４】
分析装置５５は、適当なハードウェア資源を有するコンピュータ３により実現される。例えば、コンピュータ３は、演算機能を備え、以降で説明する複数の機能を実現するためのＣＰＵ４と、データを記憶するためのメモリ７と、コンピュータ３を分析装置５５として機能させるためのプログラム（プログラム製品）９ｐなどが格納されたＲＯＭなどのプログラムメモリ（記録媒体）９と、入出力インターフェイス８と、この入出力インターフェイス８を介してデータを表示し、また、データを入力できる入出力デバイス６を備えている。分析装置５５においては、視覚的にソースプログラム５０の動作が把握できるようにＧＵＩ（グラフィカルユーザインターフェイス）８が採用されており、入出力デバイス６は、グラフィック表示するための表示デバイスとしての機能を備えている。コンピュータ３が備えたハードウェア資源は、これらに限定されるものではない。【００２５】
図２に、デバッグ情報、メモリアクセス情報およびブロック情報の概要を示してある。デバッグ情報５２は、ソース情報としてソースプログラム５０に含まれるＣ言語のソースステートメント（Ｃステートメント）２１と、ソースプログラム５０に含まれる関数定義２２と、ソースステートメント２１を中間言語、この例ではアセンブラに変換したアセンブラ・リスト２３とを備えている。また、デバッグ情報５２は、オブジェクト情報として、アセンブラ・リスト２３がコード化された命令（コード）のメモリアドレス（コードメモリアドレス）２５と、その命令によりアクセスされる変数のメモリアドレス（変数メモリアドレス）２６とを備えている。さらに、デバッグ情報５２は、デバッグする際に、オブジェクト情報からソース情報にフィードバックするためにオブジェクト情報とソース情報との関係を示す結合情報２９を備えている。コードメモリアドレス２５および変数メモリアドレス２６は、オブジェクトコード５１を半導体デバイス９０に実装し、ソースプログラム５０の処理を実行する際のメモリ（実行用メモリ）のアドレスとなる。図２には、プロセッサ９１と、プロセッサ９１に対してコードを提供するコードメモリ９２と、データを記憶するデータメモリ９３とを備えたハーバードアーキテクチャタイプのデバイス９０を参考に示している。【００２６】
メモリアクセス情報５３は、オブジェクトコード５１をサイクルベースＩＳＳ２により走行することにより作成され、デバイス９０における実行用のメモリ９２および９３に対するサイクル単位のメモリアクセス状態が記録されたものである。メモリアクセス情報５３は、サイクル情報３１と、そのサイクルの処理を指示する命令のコードメモリアドレス２５と、アクセスした変数メモリアドレス２６と、動作タイプ（アクセスタイプ）を示す情報２７とを備えている。アクセスタイプ２７は、例えば、変数（メモリ）９３に対して書き込みまたは読み出しの動作をしたことが記録される。ＩＳＳ２においては、オブジェクトコード５１は、命令コードが並んだ順番で逐次実行され、並列実行は考慮されない。このため、サイクル情報３１に格納されるサイクルタイムに対し、１つのコードメモリアドレス２５が対応する。【００２７】
メモリアクセス情報５３は、各サイクルで記録されるので、膨大な量となる。したがって、メモリアクセス情報５３は圧縮されて保持され、また、分析装置５５に供給されることが望ましい。データを圧縮する方法は種々であるが、サイクル情報３１は、ビット長とインクリメンタル値の組み合わせを連続して持たせる相対値による保有方式が有効である。また、コードメモリアドレス２５と変数メモリアドレス２６については辞書方式が有効である。したがって、メモリアクセス情報５３には、メモリアドレス値を対応する辞書値が保有され、メモリアクセス情報５３とは独立にデコード用のメモリアドレス辞書が分析装置５５に供給される。【００２８】
ブロック情報５４は、コードメモリアドレス２５と、ブロックＩＤ３５とを備えている。デバッグ情報５２は、コードメモリアドレス２５を介してブロックＩＤ３５と関連付けされ、Ｃステートメント２１およびアセンブラ・リスト２３を含むソース情報が、ブロックＩＤ３５により識別される処理ブロックのいずれに属するものであるかが判明する。また、メモリアクセス情報５３も、コードメモリアドレス２５を介してブロックＩＤ３５と関連付けされ、あるサイクルのメモリアクセスが、ブロックＩＤ３５により識別される処理ブロックのいずれに属するものであるかが判明する。さらに、あるサイクルのメモリアクセスを特定することにより、それら一連のメモリアクセスを行なっている処理ブロックのＣステートメント２１を表示することも可能となる。【００２９】
図３に、ソースプログラム上でブロック領域を指定して、処理ブロックをセットする様子を示してある。複数のＣソースステートメント２１を含んだソースプログラム５０は、入出力する変数の相違、入力あるいは出力の相違、ループ処理など様々な観点からグループ化することが可能である。メモリに対するアクセスという観点からは、変数に対して入出力する処理を含むループ処理は、アクセス量が多いので、ループ処理を一つのブロックとしてグループ化することは有効である。例えば、図３に示したソースプログラム５０において、メモリに対する書き込みと読み出しをそれぞれ含むループ処理を２つのブロック１０および１１として設定することができる。【００３０】
コンパイラ１において、ソースプログラム５０は、中間言語であるアセンブラに変換され、中間ファイル５９が生成される。高級言語であるＣ言語のステートメントは、１つのステートメントが、１つまたは複数のアセンブラ・リスト２３に変換される。したがって、１または複数のＣステートメント２１を含む処理ブロック１０および１１に対応して、１または複数のアセンブラ・リスト２３を含む処理ブロック１０および１１が設定される。【００３１】
各々のアセンブラ・リスト２３が機械語の命令コードに変換され、オブジェクトコード５１が生成される。それと共に、デバッグ情報５２が生成される。オブジェクトコード５１は、アセンブラによる中間ファイル５９と同じ順番でコード化された命令が並び、この順番でＩＳＳ２により実行される。【００３２】
図１に示した分析装置５５は、ソースプログラム５０を処理ブロックに区分けして、処理ブロックの単位でメモリに対するアクセス状態を確認することができる。このため、図１に示すように、ソースプログラム５０をブロック化して、ブロック情報５４を生成するブロック化機能６１を備えている。分析装置５５は、内部において、ソースプログラム５０をコンピュータの機能を用いて解析し、実行用のメモリに対する入出力を含むループ処理を自動的にブロック化する機能を備えていても良い。さらに、分析装置５５は、外部から、ユーザにより、ブロック化する機能を備えている。【００３３】
この分析装置５５は、ユーザに対して、ソースプログラム５０を、どのようにブロック化するかということを開放している。このため、入出力装置６に対し、デバッグ情報５２に基づき、入力インターフェイス８を介してソース情報としてＣソースステートメント２１またはアセンブラ・リスト２３の全部あるいは一部を表示するソース情報表示機能６２を備えている。ソース情報表示機能６２は、さらに、入出力装置６に表示されたソース情報の一部をユーザが指定することにより、ブロック化したい領域を設定する機能を備えている。したがって、ユーザは、図３に示したように、ソースステートメント２１またはアセンブラ・リスト２３を個別に、あるいはある領域で指定することにより、処理ブロックを設定することができる。【００３４】
ブロック化機能６１は、デバッグ情報５２を参照し、表示デバイス６で指定された複数のソースステートメント２１の一部またはアセンブラ・リスト２３の一部に対応する命令のコードメモリアドレス２５に対して、他の処理ブロックのブロックＩＤ３５とは異なるブロックＩＤ３５を割当てる。そして、コードメモリアドレス２５と、ブロックＩＤ３５との対応関係をブロック情報５４としてメモリ７に記憶する。【００３５】
図４に、メモリに対するアクセス状況の表示画面の例を示してある。分析装置５５は、さらに、メモリアクセス情報５３に基づき、実行用のメモリ９２および９３に対するアクセス状況をサイクルの経過と共に入出力装置６にグラフィック表示する機能６３を備えている。入出力装置６のディスプレイ６ｄには、縦軸７１がメモリアドレスとなり、横軸７２がサイクル時間となったグラフ７０が表示される。メモリアドレス７１は、コードメモリ９２のアドレス７１ｃと、変数メモリ９３のアドレス７１ｖとに上下に分かれて表示され、変数メモリアドレス７１ｖにはソースプログラム５０において参照される変数名７３が合わせて表示される。メモリアクセス情報５３は、サイクル情報３１と、コードメモリアドレス２５と、変数メモリアドレス２６と、アクセスタイプ２７とを含んでいる。したがって、サイクルの経過にしたがって、コードメモリアドレス２５と、変数メモリアドレス２６とをグラフ７０にプロットすることにより、サイクルの経過により実行用のメモリ９２および９３に対するアクセス状況を表示できる。アクセスタイプ２７は、色で区別することが可能であり、例えば、実行用メモリ９３に対する書き込みは、赤のライン７５で表示され、実行用メモリ９３からの読み出しは、青のライン７６で表示される。コードメモリ９２に対しては基本的に読み出しを示すライン７４が表示される。【００３６】
グラフ７０に表示されるサイクル単位のアクセス状況は、コードメモリアドレス２５の情報を含んでおり、ブロック情報５４を参照することにより、ブロックＩＤ３５により識別される何れかの処理ブロックに属する命令によるアクセスかを判断することができる。さらに、ＩＳＳ２においては、オブジェクトコード５１は、命令コードが並んだ順番で逐次実行されるので、メモリ９２および９３に対して並列なアクセスは発生しない。このため、サイクルの経過（サイクルタイム）７２と共に示されるメモリアクセス状況はいずれか１つの処理ブロックに属するものになる。したがって、グラフ７０においては、サイクルタイム７２によりバックグラウンドの表示を色分けすることで、いずれかの処理ブロックに属するメモリアクセスであることを区別できるようにしている。例えば、処理ブロック１０に属するサイクルタイム７２の領域は、バックグラウンドが薄い黄色により表示され、処理ブロック１１に属するサイクルタイム７２の領域は、バックグラウンドが薄いピンク色により表示され、処理ブロック１２に属するサイクルタイム７２の領域は、バックグラウンドが薄い紫色により表示される。【００３７】
また、グラフ７０に表示されたメモリアクセス状況は、コードメモリアドレス２５およびブロック情報５４を介して、そのアクセスを行なっているソース情報とも関連付けされている。このため、ディスプレイ６ｄにグラフィック表示された実行用メモリ９３に対するアクセスのサイクルタイム、例えば、アクセスしていることを示すライン７５の上を指定することにより、そのメモリアクセス７５に対応するソースステートメント２１またはアセンブラ・リスト２３を抽出できる。このため、アクセス状況を表示する機能６３は、グラフ７０の上からブロックＩＤ３５が判断できる操作が行われると、ポップアップ画面６ｐを表示し、その中に、該当するブロックＩＤ３５の処理ブロックのソースステートメント２１を表示する。ポップアップ画面６ｐには、ソースステートメント２１の代わりに、あるいは共に、アセンブラ・リスト２３を表示することも可能である。【００３８】
分析装置５５は、さらに、処理ブロックのブロック間パイプライン動作の条件を判断する２つの判断機能６５および６６を備えている。第１の判断機能６５は、対を成す処理ブロック、すなわち、処理ブロック１０および１１と、処理ブロック１１および１２と、処理ブロック１０および１２の間の実行用メモリ９３を介したデータ転送の方向を示し、パイプライン方式での動作の可否を判断する。第２の判断機能６６は、実行用メモリ９３の同一領域に対する第１の処理ブロック１０および第２の処理ブロック１１の参照関係を求めて、第１の処理ブロック１０と第２の処理ブロック１１との並列実行性を判断する。【００３９】
複数の処理ブロックが指定された場合、それらの処理ブロックをパイプライン方式で並列実行できるか否かを判断するため、各処理ブロックの間に通信が存在しているのか否かを第１の判断機能６５により判断する。対をなす処理ブロック、例えば、ブロック１０および１１をパイプライン化する、すなわち、パイプライン方式で実行するためには、ブロック１０からブロック１１に対して通信があり、ブロック１１からブロック１０に対しては通信がないことが必要である。ブロック間の通信は、変数メモリ９３を介したデータ転送で判断される。すなわち、図５に示すように、メモリアクセス状態をグラフィック表示する機能６３により表示されたグラフ７０において、ブロック１０が変数メモリ９３に対して入出力９７を繰り返し、その後のサイクルでブロック１１が変数メモリ９３の同じアドレスからデータを読み出す処理９８を行なっていれば、ブロック１０からブロック１１に対するデータ転送（データ通信）９９が存在する。したがって、第１の判断機能６５は、メモリアクセス状況をグラフ表示するか否かに関わらず、メモリアクセス情報５３と、ブロック情報５４により、対を成す処理ブロック１０および１１の間の実行用メモリ９３を介したデータ転送の有無およびその方向を判断できる。そして、そのデータ転送の方向が一方向であれば、処理ブロック１０および１１はパイプライン方式で並列実行できる。【００４０】
図６に、ディスプレイ６ｄに、複数の処理ブロックに対して、それらの間のデータ転送の方向および量をマトリクス表示した様子を示してある。マトリクス表示７７を採用することにより、ソースプログラム５０に３つ以上の処理ブロック、例えば、ブロック１０〜１２が設定される場合は、ペアをなすブロック間のデータ転送の方向を視覚により容易に把握できる。ブロック間のデータ転送量は、ブロック・パイプラインの可否判断だけであれば要求されないが、デバイスの設計においては、バス幅などを検討するために重要である。分析装置５５は、第１の判断機能６５に付属する機能として、マトリクス表示する機能６７を備えている。【００４１】
この例において、ブロック１０とブロック１１のペアでは、ブロック１０からブロック１１に対するデータ転送Ｄ１０１１があり、逆方向のデータ転送Ｄ１１１０はない。ブロック１１とブロック１２のペアでは、ブロック１１からブロック１２に対するデータ転送Ｄ１１１２があり、逆方向のデータ転送Ｄ１２１１はない。ブロック１０とブロック１２のペアでは、ブロック１０からブロック１２に対するデータ転送は両方向Ｄ１０１２およびＤ１２１０ともない。したがって、ブロック１０、１１および１２は、この順番にパイプライン方式で実行することが可能である。【００４２】
このような、「From」「To」のデータ転送を示すマトリクス表示７７により各ブロック間の通信量を相互に示すことが可能となる。これによりブロック間に通信が存在しているのか否かが方向性まで含めて分かる。マトリクス表示７７においては、サイクル時間の概念は失われている。しかしながら、まずこの方法によってデータ通信の存在を確認し、しかる後に、後述するバンド幅分析に入ることが望ましい。【００４３】
マトリクス表示７７に表示されたブロック間のデータ転送は、サイクルタイムの概念はない。しかしながら、データ転送において使用された変数アドレス２６は分かる。したがって、マトリクス表示７７の任意のデータ転送の表示を指定することにより、そのデータ転送に関わるソースステートメント２１あるいはアセンブラ・リスト２３を表示することができる。【００４４】
図７に、マトリクス表示７７のデータ転送Ｄ１０１１を指定して、その通信動作をしているＣソースステートメント２１をバックトラックして表示する例を示す。通信は、ライトとリードから成り立ち、かつ、通信の回数（タイミング）は通常は複数である。したがって、通信表示Ｄ１０１１から、その通信に使用された変数を表示する変数ウィンドウ７８が表示される。変数ウィンドウ７８には、変数毎に、その変数に対する実行時の動作タイプ（リードもしくはライト）の回数７８ｃが表示される。この動作回数７８ｃには、動作を行なったサイクル情報３１が含まれている。したがって、メモリアクセス情報５３およびデバッグ情報５２により、通信を行なった処理ブロックおよびソースステートメント２１を判断することができる。このため、ディスプレイ６ｄに、ソースステートメント２１を表示するポップアップ画面６ｐが表示される。ソースステートメント２１の代わりにアセンブラ・リスト２３を表示することも可能である。【００４５】
分析装置５５の第２の判断機能６６は、２つの処理ブロックをパイプライン動作させたときの並列実行の分析および判定と、それら２つの処理ブロックの間のデータ転送量とバンド幅の分析および判定とを行う。分析装置５５は、さらに、２つの処理ブロックを仮想的に並列実行した結果をグラフィック表示する機能６８を備えており、並列実行した際のバンド幅を含めて表示することができる。また、分析装置５５は、複数の処理ブロックの並列実行を検討するための動作条件を入力する機能６９を備えている。【００４６】
上述したように、ＩＳＳ２においては、オブジェクトコード５１は、オリジナルのソースプログラム５０に記述された順番でシーケンシャルに実行される。したがって、分析装置５５において複数の処理ブロックに区分けされるアルゴリズムも、シーケンシャルに実行され、その結果がメモリアクセス情報５３として分析装置５５に供給されている。このため、当初のメモリアクセス状況を示すグラフィック表示７０においては、図４に示すように、処理ブロック１０および１１は、並列性なしで実行された条件で表示される。【００４７】
図８に、図４に示したメモリアクセス状況を簡略化して示してある。ここでは、ＩＳＳ２においては、ソースプログラム５０の処理ブロック１０と処理ブロック１１は、実行用の変数メモリ９３の各エントリｄ［ｉ］をアクセスしながら逐次処理され、その結果、メモリ９３の各エレメントｄ［ｉ］に関するアクセスの内容（即ち書き込み状態又は読み出し状態）２７、アドレス情報（コードメモリアドレス２５および変数メモリアドレス２６）、およびサイクル情報３１がメモリアクセス情報５３として記録される。以下では、メモリ９３は、アドレス０語からｎ語に相当するエントリｄ［ｉ］を備えたメモリであるとしている。【００４８】
サイクル情報３１を含むメモリアクセス情報５３には、あるサイクル期間においてメモリ９３のあるアドレス領域９５にデータの書き込み７５を行い、その後、あるサイクル期間においてメモリ９３の同じアドレス領域９５からデータの読み出し（読み込み）７６を行なうといった過程が記録されている。分析装置５５の第２の判断機能６６においては、ブロック情報５４を参照することにより、メモリアクセス情報５３を解析することにより、コードメモリアドレス２５を介して、データの書き込み７５が処理ブロック１０により行なわれ、データの読み出し７６が処理ブロック１１により行なわれたことが分かる。したがって、第２の判断機能６６では、メモリ９３のアドレス領域９５に対して、処理ブロック１０と処理ブロック１１とは、ある参照関係９６を備えていることが分かる。【００４９】
分析装置５５の第２の判断機能６６は、この参照関係９６に基づき、処理ブロック１０と１１を、独立のハードウェア、例えば、独立の回路あるいは処理ユニットに実装した場合の並列処理について判断する。すなわち、処理ブロック１０および１１を異なるデバイスにより並列に実行する場合に、処理ブロック１１の実行に齟齬をきたさないで、あるいはウェイトを発生させないで、どこまで処理ブロック１１を前進させて、処理ブロック１０と部分的に並列に実行させることが可能となるかを判断する。【００５０】
上述した第１の判断機能６５により、処理ブロック１０と処理ブロック１１との間にバックトラックを発生させる逆方向のデータ転送がない場合は、処理ブロック１０と処理ブロック１１とに順番にデータを流すことにより、ブロック単位でパイプライン処理を行うことができる。この第２の判断機能６６においては、同じデータ群あるいはフレームの処理を処理ブロック１０と処理ブロック１１とが時間的に一部重複して、あるいは一部並列に実行できるか否かを検討する。処理ブロック１０および１１が、一部重複して処理を実行することにより、ブロック・パイプライン動作をさらに進めて処理速度を向上することが可能となる。【００５１】
このため、第２の判断機能６６においては、処理ブロック１０および１１により、互いに参照される、すべてのメモリアドレスにおいて、処理ブロック１１をどこまで前進させて実行できるか判断する。これにより、これら処理ブロック１０および１１の間のパイプライン動作の可能なタイミング・サイクルが最終的に判定できる。さらに条件設定機能６９により、並列実行の動作条件を変更することが可能であり、第２の判断機能６６により、設定された動作条件に従ってメモリアクセス情報５３を解析する。【００５２】
図９は、条件設定機能６９によりメモリ９３がシングルポートであるとして、パイプライン動作を検討した結果のグラフィック表示７９ａである。このグラフ７９ａは、ソースプログラム５０の処理ブロック１０と処理ブロック１１とを、ハードウェア的に分離独立して同時実行可能とした場合を示している。このグラフ７９ａは、メモリ９３への参照関係（アクセスのタイミング）より、処理ブロック１１を処理ブロック１０と一部並列に実行でき、パイプライン動作のタイミング・サイクルＴｃをメモリ９３に対するアクセスが重複しないサイクルＴａまで短縮できることを示している。したがって、処理ブロック１１の実行は、図８に示したように、ソースプログラム５０をシリアルに実行した場合に比べて大きく前進させることができる。【００５３】
図１０は、条件設定機能６９にメモリ９３がデュアルポートであるとして、パイプライン動作を検討した結果のグラフィック表示７９ｂである。この関係グラフ７９ｂは、処理ブロック１０と処理ブロック１１とが、ハードウェア的に分離独立して同時実行可能とした場合、メモリ９３へのアクセスのタイミングより、パイプライン動作のタイミング・サイクルＴｃをメモリ９３に対するアクセスが部分的に重複したサイクルＴｂまで短縮できることを示している。タイミング・サイクルＴｃは図９に示したケースよりさらに短くなり、処理ブロック１１の実行をさらに前進させることができる。【００５４】
これらの検討結果は、処理ブロック１０と処理ブロック１１とに区分けされた処理においては、シングルポートメモリを用いて、書き込み７５と読み出し７６が同時実行されない条件でブロック間パイプライン処理をするハードウェアに対し、デュアルポートメモリを用いて書き込み７５と読み出し７６とが同時実行される条件でブロック間パイプライン処理するハードウェアの方が処理時間を短縮できることを示している。したがって、デュアルポートメモリを採用したときの処理時間の短縮による性能的なメリットと、シングルポートメモリを採用したときの経済的なメリットとを判断して、ソースプログラム５０を実行するハードウェアを決定できる。【００５５】
この第２の判断機能６６においては、処理ブロック１０および１１が実行メモリ９３にアクセスするすべてのメモリアドレスにおいて、それぞれの処理ブロック１０および１１のアクセスをサイクル単位で判断する。したがって、処理ブロック１０による書き込み７５の処理量と、処理ブロック１１による読み出し７６の処理量がサイクル単位で判明する。このため、処理ブロック１０および１１を、上記の条件でブロック・パイプライン動作するように並列実行したときに、メモリ９３とのアクセスに必要なビット転送量の総和を計算できる。このビット転送量の総和は、処理ブロック１０および１１を並列実行する際に必要なメモリ９３のバス幅およびデータバスのバンド幅に対応する。【００５６】
図１１に、バス幅も含めた第２の判断機能６６の評価結果を表示機能６８により表示した様子を示してある。ディスプレイ６ｄには、メモリアドレス対サイクルの参照関係を示すグラフ７９ｃと、バンド幅対サイクルの関係を示すグラフ７９ｄとが表示される。グラフ７９ｄのバンド幅７１ｂは、あるサイクルタイムにおけるメモリあるいはバスをアクセスする際に要求されるビット幅である。サイクル毎のバンド幅の総和が、データ転送量に相当する。【００５７】
図１１のメモリアドレス対サイクルの参照関係を示すグラフ７９ｃは、図１０においてメモリ９３をデュアルポートとした動作条件のグラフ７９ｂに相当する。したがって、グラフ７９ｄは、その動作条件で処理ブロック１０および１１を並列実行したときの各サイクルにおけるバンド幅を示している。図８あるいは図９に示した動作条件であっても同様のバンド幅対サイクルの関係を示すグラフを表示できる。図１１に示したグラフ７９ｄにより、デュアルポートメモリを前提とした同時アクセスを許容する仕様のデバイスにおいて、ピーク時にどの程度のバンド幅が要求されるかが判明する。バンド幅を示すグラフ７９ｄにおいては、処理ブロック１０による書き込みに必要とされるバンド幅と、処理ブロック１１による読み出しに必要とされるバンド幅が色などにより区別して表示される。必要とされるバンド幅は、各サイクルにおけるバンド幅の最大値であり、データ転送量は各サイクルにおけるバンド幅の総和になる。また、この例ではオーバラップしているが、書き込み７５と読み出し７６の時間総和Ｔｔが判明するので、サイクル平均のバンド幅の算出も可能である。【００５８】
このように、分析装置５５においては、ソースプログラム５０により与えられた所定のアプリケーションの処理を、適当な大きさの複数の処理ブロックに、マニュアルで、あるいは自動的に区切ることができる。さらに、分析装置５５によりメモリアクセス状況を解析することにより、それらの処理ブロックを、独立して稼動する複数のデバイスによりブロック・パイプライン動作させることの可否と、それによる処理時間の短縮度と、ブロック・パイプライン動作させるために必要なハードウェアリソースとを判断できる。したがって、分析装置５５およびそれを含む支援システム５により、ソースプログラム５０を実行するための、経済的な専用ハードウェアリソース、たとえばプロセッサの、設計および開発を支援することができる。【００５９】
図１２に、分析装置５５において、ソースプログラム５０を複数の処理ブロックに分けて、それらをパイプライン方式で実行する可能性および並列実行する可能性を解析する方法の概要をフローチャートにより示してある。まず、ステップ８０において、デバッグ情報５２およびメモリアクセス情報５３を取得する。これらの情報がコンピュータネットワークにより接続されたサーバなどに格納されている場合は、それらにアクセスできる条件がセットされれば十分である。【００６０】
次に、ステップ８１において、ブロック化機能６１により、ソースプログラム５０または中間リストファイル５９を参照して、処理ブロックを設定する。メモリアクセス状況のグラフィック表示７０において、メモリアクセス状態を参照しながら処理ブロックを設定することも可能である。このステップ８１において、適当なブロックＩＤが、ソースプログラム５０のそれぞれの命令のコードメモリアドレスに関連付けされたブロック情報５４が生成されてメモリ７に記録される。【００６１】
次に、ステップ８２において、第１の処理機能６５をメモリアクセス解析手段として、メモリアクセス情報５３と、ブロック情報５４に基づき、対を成す処理ブロックの間の実行用メモリを介したデータ転送の方向が求められる。その結果が、ステップ８３において、マトリクス表示機能６７によりマトリクス表示される。この段階で、ステップ８１において設定した処理ブロックをパイプライン方式で実行できるか否かを判断できる。したがって、ステップ８４において、処理ブロックを再設定する必要があるかを判断し、必要があれば、ステップ８１に戻って、処理ブロックの設定を変更する。例えば、ソースプログラム５０の分割位置などを変更する。上述したように、ブロック情報５４により処理ブロックの設定を自由に変更できるので、分析装置５５においては、処理ブロックの再設定は極めて容易である。そして、コンパイルを再実行したり、ＩＳＳ２によるシミュレーションを再実行する必要もなく、異なる構成の処理ブロックを設定しても、それに基づくソースプログラム５０の解析結果を短時間に得ることができる。【００６２】
例えば、ＩＳＳ２によりソースプログラム５０に記述された命令を逐次実行したときに、設定された３つの処理ブロック１０、１１および１２は、図１３に示したように実行される。これら３つの処理ブロック１０、１１および１２において、図６のマトリクス表示７７のようなデータ転送関係があれば、処理ブロック１０、１１および１２は、この順番でパイプラインを組むことが可能となる。したがって、図１４に示したように、処理ブロック１０、１１および１２をパイプライン並列で実行することができることがわかる。分析装置５５が、このように、処理ブロック単位で、サイクルの経過（サイクルタイム）にしたがってソースプログラム５０の処理が実行されている様子をディスプレイ６ｄに表示することは有効である。このため、分析装置５５は、処理ブロックの単位で実行される様子をシミュレートした結果を表示する機能６４を備えている。【００６３】
複数の処理ブロックをパイプライン並列で処理できる場合、さらに、並列度を向上できるか否かの評価（解析）を行なうことができる。ステップ８５において、動作条件の入力機能６９によりメモリ９３のタイプ、バスのバンド幅などを含む動作条件をセットする。ステップ８６において、第２の判断機能６６をメモリアクセス解析手段として、メモリアクセス情報５３と、ブロック情報５４とに基づき、実行用メモリ９３の同一領域に対する処理ブロック、例えば、処理ブロック１０および処理ブロック１１の参照関係を求めて、これらの処理ブロック１０および１１を並列実行する可能性を判断する。ステップ８７において、その結果をバンド幅も含めて、グラフ表示機能６８により表示する。【００６４】
解析結果を判断し、ステップ８８において動作条件の再設定を希望する場合は、ステップ８５に戻って、再解析することができる。また、ステップ８９において、処理ブロックの再設定を希望する場合は、ステップ８１に戻って、ブロック情報５４を変更する処理から再度実行することができる。動作条件の設定で変更可能な条件は、上記の例で述べたメモリがシングルポートであるとかデュアルポートであるとかに限らず、メモリアクセスに費やされるレイテンシなどであっても良い。また、ブロック領域の設定によってもブロック間パイプラインの条件は変わり、性能や経済的な効果も変動する。したがって、実際のハードウェアの設計においては、幾つかの条件で性能およびコストを比較することが望ましい。いずれの場合も、上述したように、デバッグ情報５２およびメモリアクセス情報５３を再生成する必要がないので、短時間で解析結果を得ることができる。【００６５】
第２の解析機能６５によるメモリ９３の参照関係の解析の結果、処理ブロック１０と処理ブロック１１との間では並列に実行が可能であり、処理ブロック１１と処理ブロック１２との間では並列実行が不可能であると判断される。したがって、図１５に示すように、処理ブロック１０、１１および１２をブロック・パイプライン方式で実行する場合、処理ブロック１０および１１を一部重複して並列に実行できることが分かる。したがって、ソースプログラム５０により与えられたアプリケーションの処理をさらに加速できることがわかる。【００６６】
上記の解析方法で解析した結果、ターゲットのソフトウェア自体を改変する等の処理をして最適化する必要が生じた場合であっても、実際に、ソフトウェア（ソースプログラム）を独立分割してデバイスへの実装を進めてから性能が満たされないと判明するよりは遥かに設計期間を短縮できる。従来、機能がブロック単位に逐次構成されているソフトウェアを実行すれば、ブロック単位に順次実行され、いわゆる逐次処理が行われる。このソフトウェアをブロック単位に並列同時実行させるには、ソフトウェアそのものをブロック単位に独立分割し、同時実行する環境にて走行させて分析するのが常であった。しかしながら、これでは独立分割してみないと、並列実行された場合の処理性能、その構成におけるデータ転送量、あるいはバンド幅が分からない。分割そのものは大変な作業であり、かつ、分割可能な点あるいは領域がいくつもある場合には、どこで分割すればどのような結果となるのかは、分割してみないと分からないという状況になる。デバイスの設計過程における、前述のような状況に対して、この分析装置５５および分析装置を用いた解析方法は極めて有効な解を提供できる。【００６７】
すなわち、ソフトウェアを分割せずに、メモリアクセス情報を記録する機能を有するＩＳＳを実行し、しかる後に分析したい対象となるソフトウェアのブロック領域を指定するだけで分離独立させた際と同等な解析が可能となる。したがって、ターゲットのソフトウェアを分離独立せずに、パイプライン並列性の特性と必要とされるデータ転送量とバンド幅の判定が可能となり、従来の初期分離分割手法に比べ大幅な設計期間の短縮が可能となる。このため、分析装置５５を用いた支援システム５は、マルチプロセッサの開発環境における初期段階で効果を発揮する。【００６８】
分析装置５５は、専用のハードウェアで実現しても良く、汎用のコンピュータを用いて実現することも可能である。コンピュータを分析装置として動作させるためのプログラムまたはプログラム製品は、上述した各機能をコンピュータにより実行可能な命令を有するものであり、ＣＤ−ＲＯＭなどの適当な記録媒体に記録して提供することができる。また、プログラムをインターネットなどのコンピュータネットワークを介して提供することも可能である。 【００６９】
また、上記では、ソースプログラム５０に対して、処理ブロック１０、１１および１２の３つのブロック領域を設定して分析装置（解析装置）５５にて解析する例を説明してきたが、ブロック指定は１または２でもよく、４以上であっても良い。ブロック指定が１つの場合は、ひとつのブロック領域が指定され、指定されなかった部分がもうひとつのブロックと認識される。したがって、本発明の判定プログラムは、パイプライン動作判定に限らず、データ転送量およびバンド幅の判定にも適用できる。
【図１】
0004866241.tif 000002
【図２】
0004866241.tif 000003
【図３】
0004866241.tif 000004
【図４】
0004866241.tif 000005
【図５】
0004866241.tif 000006
【図６】
0004866241.tif 000007
【図７】
0004866241.tif 000008
【図８】
0004866241.tif 000009
【図９】
0004866241.tif 000010
【図１０】
0004866241.tif 000011
【図１１】
0004866241.tif 000012
【図１２】
0004866241.tif 000013
【図１３】
0004866241.tif 000014
【図１４】
0004866241.tif 000015
【図１５】
0004866241.tif 000016