(57)【要約】【課題】人手を介することなく、抽象度の高いプログラムコードからメモリ共有が可能な配列を抽出し、抽出した配列にメモリを共有させる。【解決手段】ファイル入力部が、複数の配列が含まれる動作記述ファイル１を入力する。配列検出部１１、配列読出検索部１２及び共有化可能配列抽出部１３が、動作記述ファイル１に含まれる配列ごとに、動作記述ファイル１内で配列が使用されている配列使用範囲を特定し、それぞれの配列使用範囲が重複しない２つ以上の配列を抽出する。配列共有化記述部１４が、抽出された２つ以上の配列が同一のメモリを共有するように、動作記述ファイル１を書き換えて、メモリ共有化動作記述ファイル２とする。【選択図】図１
2013254472.tif 000002
【特許請求の範囲】
【請求項１】
複数の配列が含まれるプログラムコードを入力するプログラムコード入力部と、
前記プログラムコードに含まれる配列ごとに、前記プログラムコード内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない２つ以上の配列を抽出する配列抽出部と、
前記配列抽出部により抽出された２つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記プログラムコードを書き換えるプログラムコード書換え部とを有することを特徴とする情報処理装置。
【請求項２】
前記プログラムコード入力部は、
異なる配列名を有する複数の配列が含まれるプログラムコードを入力し、
前記プログラムコード書換え部は、
前記配列抽出部により抽出された２つ以上の配列の配列名が同じになるように、前記プログラムコードを書き換えることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記情報処理装置は、更に、
前記配列抽出部により抽出された配列ごとに、前記プログラムコードの実行の際の配列の使用時に必要な記憶容量を解析して、前記配列抽出部により抽出された２つ以上の配列が共有するメモリに必要な記憶容量を判断する記憶容量判断部を有し、
前記プログラムコード書換え部は、
前記記憶容量判断部により判断された記憶容量を持つメモリを前記配列抽出部により抽出された２つ以上の配列が共有するように、前記プログラムコードを書き換えることを特徴とする請求項１又は２に記載の情報処理装置。
【請求項４】
前記配列抽出部は、
抽出の対象外として指定されている配列を除き、配列ごとに配列使用範囲を特定することを特徴とする請求項１〜３のいずれかに記載の情報処理装置。
【請求項５】
前記情報処理装置は、更に、
前記配列抽出部により抽出された２つ以上の配列が示される抽出配列情報を生成し、前記情報処理装置のユーザに前記抽出配列情報を提示する抽出配列情報提示部を有し、
前記プログラムコード書換え部は、
前記抽出配列情報の提示の結果、前記配列抽出部により抽出された２つ以上の配列が前記情報処理装置のユーザに承認された場合に、前記配列抽出部により抽出された２つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記プログラムコードを書き換えることを特徴とする請求項１〜４のいずれかに記載の情報処理装置。
【請求項６】
前記配列抽出部は、
前記抽出配列情報の提示の結果、前記配列抽出部により抽出された２つ以上の配列が前記情報処理装置のユーザに承認されなかった場合に、承認されなかった２つ以上の配列とは別の２つ以上の配列を抽出することを特徴とする請求項５に記載の情報処理装置。
【請求項７】
プログラムコードの実行の際に各配列に対する処理が並行して行われるｍ個（ｍは３以上の整数）の配列が含まれるプログラムコードを入力するプログラムコード入力部と、
前記プログラムコードに含まれる配列ごとに、前記プログラムコードの実行の際に配列に対する処理が継続している時間を配列処理時間として特定する配列処理時間特定部と、
各配列の配列処理時間を解析し、解析結果に基づき、前記ｍ個の配列の中からｎ個（ｎは、２以上の整数であって、ｍ＞ｎ）の配列を抽出する配列処理時間解析部と、
前記配列処理時間解析部により抽出されたｎ個の配列が前記プログラムコードの実行の際に同一のメモリを共有し、前記ｎ個の配列に対する処理がシリアルに行われるように、前記プログラムコードを書き換えるプログラムコード書換え部とを有することを特徴とする情報処理装置。
【請求項８】
前記プログラムコード入力部は、
異なる配列名を有するｍ個の配列が含まれるプログラムコードを入力し、
前記プログラムコード書換え部は、
前記配列処理時間解析部により抽出されたｎ個の配列の配列名が同じになるように、前記プログラムコードを書き換えることを特徴とする請求項７に記載の情報処理装置。
【請求項９】
前記配列処理時間解析部は、
前記ｍ個の配列のうち最先に処理される配列を最先処理配列として抽出し、
ｎ個の配列の配列処理時間の合計時間が前記最先処理配列の配列処理時間の範囲内となるように、前記最先処理配列以外の配列の中からｎ個の配列を抽出することを特徴とする請求項７又は８に記載の情報処理装置。
【請求項１０】
前記情報処理装置は、更に、
前記配列処理時間解析部により抽出された配列ごとに、前記プログラムコードの実行の際の配列の処理時に必要な記憶容量を解析して、前記配列処理時間解析部により抽出されたｎ個の配列が共有するメモリに必要な記憶容量を判断する記憶容量判断部を有し、
前記プログラムコード書換え部は、
前記記憶容量判断部により判断された記憶容量を持つメモリを前記配列処理時間解析部により抽出されたｎ個の配列が共有するように、前記プログラムコードを書き換えることを特徴とする請求項７〜９のいずれかに記載の情報処理装置。
【請求項１１】
前記配列処理時間特定部は、
前記配列処理時間解析部による抽出の対象外として指定されている配列を除き、配列ごとに配列処理時間を特定することを特徴とする請求項７〜１０のいずれかに記載の情報処理装置。
【請求項１２】
前記情報処理装置は、更に、
前記配列処理時間解析部により抽出されたｎ個の配列が示される抽出配列情報を生成し、前記情報処理装置のユーザに前記抽出配列情報を提示する抽出配列情報提示部を有し、
前記プログラムコード書換え部は、
前記抽出配列情報の提示の結果、前記配列処理時間解析部により抽出されたｎ個の配列が前記情報処理装置のユーザに承認された場合に、前記配列処理時間解析部により抽出されたｎ個の配列が前記プログラムコードの実行の際に同一のメモリを共有し、前記ｎ個の配列に対する処理がシリアルに行われるように、前記プログラムコードを書き換えることを特徴とする請求項７〜１１のいずれかに記載の情報処理装置。
【請求項１３】
前記配列処理時間解析部は、
前記抽出配列情報の提示の結果、前記配列処理時間解析部により抽出されたｎ個の配列が前記情報処理装置のユーザに承認されなかった場合に、承認されなかったｎ個の配列とは別のｎ個の配列を抽出することを特徴とする請求項１２に記載の情報処理装置。
【請求項１４】
前記プログラムコード入力部は、
前記プログラムコードとして、半導体集積回路の動作が記述されている動作記述ファイルを入力することを特徴とする請求項１〜１３のいずれかに記載の情報処理装置。
【請求項１５】
コンピュータが、複数の配列が含まれるプログラムコードを入力するプログラムコード入力ステップと、
前記コンピュータが、前記プログラムコードに含まれる配列ごとに、前記プログラムコード内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない２つ以上の配列を抽出する配列抽出ステップと、
前記配列抽出ステップにより抽出された２つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記コンピュータが、前記プログラムコードを書き換えるプログラムコード書換えステップとを有することを特徴とする情報処理方法。
【請求項１６】
コンピュータが、プログラムコードの実行の際に各配列に対する処理が並行して行われるｍ個（ｍは３以上の整数）の配列が含まれるプログラムコードを入力するプログラムコード入力ステップと、
前記コンピュータが、前記プログラムコードに含まれる配列ごとに、前記プログラムコードの実行の際に配列に対する処理が継続している時間を配列処理時間として特定する配列処理時間特定ステップと、
前記コンピュータが、各配列の配列処理時間を解析し、解析結果に基づき、前記ｍ個の配列の中からｎ個（ｎは、２以上の整数であって、ｍ＞ｎ）の配列を抽出する配列処理時間解析ステップと、
前記配列処理時間解析ステップにより抽出されたｎ個の配列が前記プログラムコードの実行の際に同一のメモリを共有し、前記ｎ個の配列に対する処理がシリアルに行われるように、前記コンピュータが、前記プログラムコードを書き換えるプログラムコード書換えステップとを有することを特徴とする情報処理方法。
【請求項１７】
複数の配列が含まれるプログラムコードを入力するプログラムコード入力ステップと、
前記プログラムコードに含まれる配列ごとに、前記プログラムコード内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない２つ以上の配列を抽出する配列抽出ステップと、
前記配列抽出ステップにより抽出された２つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記プログラムコードを書き換えるプログラムコード書換えステップとをコンピュータに実行させることを特徴とするプログラム。
【請求項１８】
プログラムコードの実行の際に各配列に対する処理が並行して行われるｍ個（ｍは３以上の整数）の配列が含まれるプログラムコードを入力するプログラムコード入力ステップと、
前記プログラムコードに含まれる配列ごとに、前記プログラムコードの実行の際に配列に対する処理が継続している時間を配列処理時間として特定する配列処理時間特定ステップと、
各配列の配列処理時間を解析し、解析結果に基づき、前記ｍ個の配列の中からｎ個（ｎは、２以上の整数であって、ｍ＞ｎ）の配列を抽出する配列処理時間解析ステップと、
前記配列処理時間解析ステップにより抽出されたｎ個の配列が前記プログラムコードの実行の際に同一のメモリを共有し、前記ｎ個の配列に対する処理がシリアルに行われるように、前記プログラムコードを書き換えるプログラムコード書換えステップとをコンピュータに実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムコードを解析し、プログラムコードの書換えを行う装置に関する。
特に、半導体集積回路設計に用いられるプログラムコードを解析し、プログラムコードの書換えを行う装置に関する。
【背景技術】
【０００２】
従来の半導体集積回路設計では、Ｖｅｒｉｌｏｇ−ＨＤＬ（Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）やＶＨＤＬ（Ｖｅｒｙ  ｈｉｇｈ−ｓｐｅｅｄ  ｉｎｔｅｇｒａｔｅｄ  ｃｉｒｃｕｉｔ  Ｈａｒｄｗａｒｅ  Ｄｅｓｃｒｉｐｔｉｏｎ  Ｌａｎｇｕａｇｅ）等のハードウェア記述言語で回路に含まれる全てのレジスタを記述し、レジスタとレジスタとの間における組み合わせ回路の動作を記述したレジスタ転送レベル（ＲＴＬ）を作成する。
このＲＴＬを論理合成ツールに入力することにより、レジスタ間の機能を全てのゲートに割り当てたゲートレベルを出力させ、これを配置配線する、という工程で半導体集積回路を設計していた。
【０００３】
しかしながら、近年の半導体集積回路の集積度の向上によって半導体チップに集積される回路規模が増大しており、ＲＴＬを手書き設計するには、非常に多くの設計期間が必要となる。
これに対して、近年では、ＲＴＬよりも抽象度の高い動作記述からＲＴＬを自動的に生成する高位合成（あるいは、動作合成とも呼ばれる）技術が提唱されており、これを実現する高位合成ツールも市販されている。
上述の動作記述用の言語には、コンピュータプログラム用の言語として一般的に普及しているＣやＣ＋＋等の言語が用いられることが多い。
動作記述では、ハードウェアで実現すべき動作のみを記述することは可能であるが、クロックやリセット、レジスタ等の半導体集積回路のハードウェアの概念は記述できない。
このため、同じ機能を持つ半導体集積回路用の動作記述とＲＴＬ記述とを比較した場合、動作記述は、ＲＴＬ記述よりも記述量が少なく、この結果として手書き設計に要する設計期間が短くて済む。
【０００４】
動作記述は、動作のみの仕様を記述するもので、実装についての仕様は記述しないが、高位合成における一般的な制約から、動作記述の記述方法によっては結果として得られる実装が影響を受ける場合がある。
また、動作記述の中で配列の構文は、まとまった記憶領域をプログラムから効率的に使用するために用いられる。
動作記述の中で使用された配列は、記述したアルゴリズムにおいて必要な記憶素子を表すことになる。
高位合成においても、配列は、一般的にメモリやレジスタ等の記憶素子へ割り当てられる。
さらに、配列は大きなサイズで記述されることが多く、この場合、高位合成においても、そのまま大きなサイズの記憶素子へ割り当てられる。
【０００５】
半導体集積回路で割り当てられる記憶素子としては、先ず、レジスタが挙げられるが、レジスタは、大きな記憶領域を確保するには回路面積が効率的でない。
また、ＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等のメモリ素子は、面積効率が高い反面、記憶領域の個々の要素の読み出しや書き込みを行うアドレスデコーダの並列化数が制限されるため、処理の並列化を抑制する要因となり、性能の高い半導体集積回路が得られない。
【０００６】
一方、コンピュータに搭載された豊富なメモリ資源を前提に記述されたコンピュータプログラム（アルゴリズムＣ言語）では、上述したような配列の制約を考慮する必要はない。
また、コンピュータプログラムを記述する設計者は、半導体集積回路を意識せずに設計する場合も多く、配列を減らすという概念がない場合が多い。
そのような状態で記述されたコンピュータプログラムを基に高位合成用の動作記述をした場合、高位合成における配列（メモリ）のハードウェアへの割り当てが非常に多くなり、面積増大や配線混雑という問題が起こる可能性がある。
【０００７】
上記不具合を解決する従来の技術として、高位合成実施前に動作記述を解析し、配列としてデータ保持しなくても当該動作記述に記述される動作に変化がない配列を削減対象として検出し、当該削減対象の配列を削除した動作記述に変換する方法が提案されている（例えば、特許文献１）。
また、前記技術のように不要な配列を削除するだけでなく、一つの配列（メモリ）を複数の論理回路で共有化する方法も提案されている（例えば、特許文献２）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２０１０−２３８０５４号公報
【特許文献２】特開２０１１−１３４３０８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献１に開示される従来の方法では、動作記述を解析し、削除しても動作に変化がない配列を削除することが記載されているが、この対策だけでは従来から人手で行っていたＲＴＬ設計に比べ、まだ配列（メモリ）が多いという課題がある。
また、特許文献２に開示される従来の方法では、メモリ共有化において抽象度の高い動作記述から、高位合成に向いた動作記述に書き換えることが詳細に記載されているが、複数の配列のうちのどの配列がメモリの共有化が可能なのかについては設計者が見て容易に気が付く配列同士の例しか述べられておらず、メモリ共有化が可能な複数の配列の抽出という意味では明確な方法が無いという課題がある。
【００１０】
この発明は上記のような課題を解決することを主な目的の一つとしており、人手を介することなく、抽象度の高いプログラムコードからメモリ共有が可能な配列を抽出し、抽出した配列にメモリを共有させることを主な目的とする。
【課題を解決するための手段】
【００１１】
本発明に係る情報処理装置は、
複数の配列が含まれるプログラムコードを入力するプログラムコード入力部と、
前記プログラムコードに含まれる配列ごとに、前記プログラムコード内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない２つ以上の配列を抽出する配列抽出部と、
前記配列抽出部により抽出された２つ以上の配列が前記プログラムコードの実行の際に同一のメモリを共有するように、前記プログラムコードを書き換えるプログラムコード書換え部とを有することを特徴とする。
【発明の効果】
【００１２】
本発明では、プログラムコードに含まれる配列ごとに配列使用範囲を特定し、それぞれの配列使用範囲が重複しない２つ以上の配列が同一のメモリを共有するようにプログラムコードを書き換える。
このため、人手を介することなく、プログラムコードからメモリ共有が可能な配列を抽出し、抽出した配列にメモリを共有させることが可能である。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１に係る高位設計メモリ共有化支援装置の構成例を示す図。
【図２】実施の形態１に係る動作記述ファイルの例を示す図。
【図３】実施の形態１に係る高位設計メモリ共有化支援装置の動作例を示すフローチャート図。
【図４】実施の形態１に係るメモリ共有化動作記述ファイルの例を示す図。
【図５】実施の形態２に係る高位設計メモリ共有化支援装置の構成例を示す図。
【図６】実施の形態２に係る共有化候補リストの例を示す図。
【図７】実施の形態２に係る高位設計メモリ共有化支援装置の動作例を示すフローチャート図。
【図８】実施の形態３に係る高位設計メモリ共有化支援装置の構成例を示す図。
【図９】実施の形態３に係る時間制約のない動作記述ファイルの例を示す図。
【図１０】実施の形態３に係る時間制約のない動作記述ファイル実行時のメモリ動作と共有化の例を示す図。
【図１１】実施の形態３に係るパイプライン動作の動作記述ファイルの例を示す図。
【図１２】実施の形態３に係るパイプライン動作の動作記述ファイル実行時のメモリ動作と共有化の例を示す図。
【図１３】実施の形態３に係る高位設計メモリ共有化支援装置の動作例を示すフローチャート図。
【図１４】実施の形態３に係るメモリ共有化動作記述ファイルの例を示す図。
【図１５】実施の形態１〜３に係る高位設計メモリ共有化支援装置のハードウェア構成例を示す図。
【発明を実施するための形態】
【００１４】
実施の形態１．
本実施の形態では、抽象度の高いコンピュータプログラムを入力し解析することで、物理的に共有化可能な配列（メモリ）を抽出し、その配列同士を共有化する記述に変更した動作記述（ＳｙｓｔｅｍＣ言語）を自動で出力する高位設計メモリ共有化支援装置を説明する。
【００１５】
図１は、実施の形態１による高位設計メモリ共有化支援装置を示す構成図である。
【００１６】
図１において、動作記述ファイル１は、抽象度の高いコンピュータプログラムコードであり、例えば動作を記述したアルゴリズムＣ言語やＳｙｓｔｅｍＣ言語のファイルである。
高位設計メモリ共有化支援装置１０は、動作記述ファイル１を解析し、動作記述ファイル１の内容を書き換える。
より具体的には、高位設計メモリ共有化支援装置１０は、動作記述ファイル１に含まれる配列ごとに、動作記述ファイル１内で配列が使用されている範囲を配列使用範囲として特定し、それぞれの配列使用範囲が重複しない２つ以上の配列を抽出する。
そして、高位設計メモリ共有化支援装置１０は、抽出した２つ以上の配列が動作記述ファイル１の実行の際に同一のメモリ領域を共有するように、動作記述ファイル１の内容を書き換える。
メモリ共有化動作記述ファイル２は、高位設計メモリ共有化支援装置１０が内容を書き換えた後の動作記述ファイル１である。
なお、高位設計メモリ共有化支援装置１０は、情報処理装置の例に相当する。
【００１７】
高位設計メモリ共有化支援装置１０において、ファイル入力部１５は、動作記述ファイル１を入力する。
ファイル入力部１５は、プログラムコード入力部の例に相当する。
【００１８】
配列検出部１１は、前記動作記述ファイル１の記述からメモリ共有化の候補になる配列を検出する。
配列読出検索部１２は、前記配列の使用されている範囲を前記動作記述ファイル１の記述から検索する。
共有化可能配列抽出部１３は、前記動作記述ファイル１の記述から前記配列と共有化可能な別の配列を抽出する。
配列共有化記述部１４は、前記共有化可能配列抽出部１３で抽出された配列が共有されるように記述し、ＳｙｓｔｅｍＣ等の高位合成可能なファイルとして出力する。
配列共有化記述部１４からの出力ファイルが、配列共有化されるように変更されたメモリ共有化動作記述ファイル２である。
なお、配列検出部１１、配列読出検索部１２及び共有化可能配列抽出部１３は、配列抽出部の例に相当する。
また、共有化可能配列抽出部１３は、記憶容量判断部の例にも相当する。
また、配列共有化記述部１４は、プログラムコード書換え部の例に相当する。
【００１９】
図２は、図１中の動作記述ファイル１の一例を示す図であり、ＳｙｓｔｅｍＣ言語の配列構文に該当するｍｅｍＡ，ｍｅｍＢ，ｍｅｍＣという３つの配列名が含まれた動作記述を示している。
すなわち、当該動作記述ファイル１には、配列名ｍｅｍＡ，ｍｅｍＢ，ｍｅｍＣに対応する配列が記述されており、これら配列に記憶素子（以降、「メモリ」と呼ぶ）が割り当てられる。
なお、１５行目に記載されているコメントは説明のためのものであり、現実の動作記述ファイル１には、このようなコメントは含まれていなくてもよい。
なお、図２に示す記述は、ＳｙｓｔｅｍＣ言語で記述されたプログラムを説明するために必要な一部の記述のみを抜き出したもので、動作記述としては不完全なプログラムである。
【００２０】
次に動作について説明する。
図３は、高位設計メモリ共有化支援装置１０の動作を示すフローチャートであり、この図に沿って説明する。
【００２１】
先ず、メモリ共有化したい動作記述ファイル１をファイル入力部１５を介して高位設計メモリ共有化支援装置１０に入力する（ステップＳ１０）。
【００２２】
次に、配列検出部１１が、入力された動作記述ファイル１の一番上に記載されている配列を検出する（ステップＳ１１）。
図２においては、ｆｏｒ文で記載されたｍｅｍＡがそれにあたる。
配列検出部１１は、その配列にマーキングが付いているかどうかを確認し、マーキングがある場合は、共有化は不要ということでステップＳ１６に進む。
マーキングが無い場合は共有化の次のフェーズ（ステップＳ１３）に進む（ステップＳ１２）。
なお、マーキングの説明は後述する。
【００２３】
次に、配列読出検索部１２が、前記配列検出部１１で検出された配列が、入力された動作記述ファイル１のどの行まで使われているかを検索し、使用されている最終行を抽出する（ステップＳ１３）。
図２においては、配列ｍｅｍＡ（ｍｅｍＡ［ｉ］＝ｄｉｎ［ｉ］＋ｆａｎｃＺ（）  式の左辺）が、どの行まで使われているかをファイルの一番下まで検索し、ここでは上から１４行目（Ａｒｒａｙ＝ｍｅｍＡ［ｘ］＋ｆａｎｃＸ（）；）が最後に使用される箇所であることが分かる。
これは、この配列ｍｅｍＡが１５行目以降は使用されないことを意味する。
つまり、１５行目以降の動作では配列ｍｅｍＡは使用されずに空いていることを意味する。
【００２４】
次に、前記配列読出検索部１２で検索された１４行目という情報を用いて、共有化可能配列抽出部１３が、共有化可能な配列を抽出する（ステップＳ１４）。
ここでは、配列検出部１１と同様な手法を用い、１５行目以降ではじめて使用される配列があるかどうかを確認し、該当する配列が無い場合はｍｅｍＡと共有化できる配列が無いと認識してステップＳ１６に進む。
逆に、１５行目以降ではじめて使用される配列があった場合（図２の場合はｍｅｍＣが１７行目から使用されているので、ｍｅｍＣが相当）は、１５行目以降で使用されないｍｅｍＡと共有化可能となるため、ステップＳ１５に進む（ステップＳ１４）。
【００２５】
ｍｅｍＣはｍｅｍＡと共有化可能なことがわかったため、共有化可能配列抽出部１３が、配列のサイズ関係を比較する。
配列数（メモリのワード数に相当）とビット数を比較し、大きい方に合わせたものを共有化する配列とする。
図２の場合は、ｍｅｍＡの配列数５１２の方がｍｅｍＣの配列数２５６より大きいため配列数は５１２とする。
逆に、ｍｅｍＣの配列数が大きい場合は、ｍｅｍＡの配列数をｍｅｍＣに合わせる。
ビット数は、ｍｅｍＣの３２ビットの方が大きいので、共有化配列は３２ビットにする。
このようにして、共有化可能配列抽出部１３は、配列ごとに、プログラムコードの実行の際の配列の使用時に必要な記憶容量を解析して、配列ｍｅｍＡと配列ｍｅｍＣが共有するメモリに必要な記憶容量を判断する。
また、共有化可能配列抽出部１３は、共有化することが決まった配列には、ｍｅｍＡとｍｅｍＣが共有化済みである印としてマーキングをつける（ステップＳ１５）。
【００２６】
なお、前記例ではサイズを合わせるようにしているが、サイズが大きく異なる場合はあまり効率的ではないため、共有化しないようにして次の候補の配列を探しにいってもよい。
【００２７】
ステップＳ１５までで一つの配列の共有化解析は完了で、その他の配列についてもステップＳ１１からステップＳ１５までを実施し、全ての配列について共有化解析が完了すればステップＳ１７に進み（ステップＳ１６）、配列共有化記述部１４において前記のマーキングした配列を共有化した動作記述（ＳｙｓｔｅｍＣ等）に変更して、動作は終了となる（ステップＳ１７）。
【００２８】
図４が、高位設計メモリ共有化支援装置１０の出力である図１のメモリ共有化動作記述ファイル２であり、配列共有化記述部１４が図２の動作記述を配列共有化したＳｙｓｔｅｍＣ記述である。
図４において、図２の下から３行目の「ｍｅｍＣ［ｋ］＝ｍｅｍＢ［ｋ］＋ｆａｎｃＸ（）；」に相当する式の左辺がｍｅｍＣからｍｅｍＡに変更されて「ｍｅｍＡ［ｋ］＝ｍｅｍＢ［ｋ］＋ｆａｎｃＸ（）；」となり（符号４０１）、１行目のビット数が１６から３２に（符号４０２）、３行目のｍｅｍＣがコメントアウト（無効行）となる（符号４０３）。
さらに図２、図４には明示していないが、元々の配列ｍｅｍＣが使われている箇所すべての信号がｍｅｍＣからｍｅｍＡに置き換えられる。
以上の変更でｍｅｍＣがｍｅｍＡに共有化される動作記述となる。
なお、図２のｍｅｍＢについては、ｍｅｍＡと同様の手順で共有化が可能な他の配列を検索したが、該当する配列がなかったため、共有化は行われていない。
【００２９】
なお、前記例では全ての配列を解析してから動作記述ファイルを一気に配列共有化に変更するようにしているが、配列一組を解析するたびに動作記述ファイルを配列共有化に変更しても構わない。
また、前記例では全配列を共有化の対象としているが、小容量のメモリを多数共有化したり、レイアウトで離れたメモリを共有化したりすることで配線混雑や配線遅延の問題が生じる可能性がある。
その場合は、共有化したくない配列にあらかじめマーキングしておくことにより、共有化対象外とすることも可能である。
また、前記例では入力である動作記述ファイル１は一つのファイルであるが、複数ファイルであっても順番は把握できるため同様のことが可能である。
【００３０】
また、前記例では共有化する配列ｍｅｍＡが繰り返し使用されることに触れられていないが、実際には繰り返し使用されることが多いので、メモリを繰り返し使う場合について述べておく。
例えば、図２の動作記述ファイル１の一例においては、アルゴリズムＣ記述のため、動作は記述の上から下の順になり、ｍｅｍＡはこの動作記述ファイル１のコードが最後（最終行）まで実行されると再び使用される。
つまり、前記例のように、配列ｍｅｍＡとｍｅｍＣを共有化しても、処理がぶつかることも、メモリ共有化しない時に較べ処理時間が遅くなることもない。
処理時間向上については、実施の形態３で述べる。
【００３１】
このように、配列検出部１１、配列読出検索部１２及び共有化可能配列抽出部１３が、プログラムコード（動作記述ファイル１）に含まれる配列ごとに、プログラムコード内で配列が使用されている配列使用範囲（前述の例では、ｍｅｍＡは１４行目までの範囲、ｍｅｍＣは１７行目以降の範囲）を特定し、それぞれの配列使用範囲が重複しない２つ以上の配列（前述の例では、ｍｅｍＡとｍｅｍＣ）を抽出する。
そして、配列共有化記述部１４が、配列使用範囲が重複しない２つ以上の配列がプログラムコードの実行の際に同一のメモリを共有するように、プログラムコードを書き換えて、メモリ共有化動作記述ファイル２とする。
【００３２】
以上のように、本実施の形態によれば、抽象度の高い動作記述を入力し解析することで、物理的に共有化可能な配列（メモリ）を抽出し、その配列同士を共有化させる記述に変更した動作記述ファイルを自動で出力するようにしている。
このため、設計者の手を煩わさずにメモリの共有化が可能となり半導体集積回路の回路規模が削減される。
また、共有化したくないメモリについては、あらかじめ指定して共有化対象から外すことも容易なので、共有化実施後に見直す必要がなくなる。
【００３３】
以上、本実施の形態では、
半導体集積回路の設計において、
設計回路の動作を記述した動作記述を入力する手段と、
当該動作記述から記憶素子となる配列を検出する手段と、
当該配列の使用箇所を検索する手段と、
当該配列と共有化可能な別の配列を抽出する手段と、
当該配列同士が共有化される高位合成対象の動作記述に書き換える手段
とを備えた高位設計メモリ共有化支援装置を説明した。
【００３４】
実施の形態２．
以上の実施の形態１では、メモリを共有化した動作記述ファイルを自動で生成するものであるが、一旦設計者がメモリ共有化情報を確認してから動作記述ファイルの変更が行えるよう、メモリ共有化情報を表やテキストの形式等の見やすいリストで出力し、場合によっては共有化情報を書き換えて実行できる実施の形態を示す。
【００３５】
図５は、実施の形態２による高位設計メモリ共有化支援装置を示す構成図である。
【００３６】
図５において、高位設計メモリ共有化支援装置２０、共有化情報入出力部２１、共有化候補リスト３以外は、実施の形態１とまったく同じため説明を省略する。
【００３７】
高位設計メモリ共有化支援装置２０は、設計者確認用の共有化候補リスト３の出力及び入力を可能にしたこと以外は実施の形態１と同じである。
共有化情報入出力部２１は、前記共有化候補リスト３の出力及び入力を可能とする手段である。
図６は共有化候補リスト３の一例である。
共有化候補リスト３は、共有化の候補として抽出された配列が示される情報であり、抽出配列情報の例に相当する。
そして、共有化情報入出力部２１は、共有化候補リスト３を高位設計メモリ共有化支援装置２０のユーザ（設計者）に提示するものであり、抽出配列情報提示部の例に相当する。
なお、共有化候補リスト３の詳細説明は後述する。
【００３８】
次に動作について説明する。
図７は、高位設計メモリ共有化支援装置２０の動作を示すフローチャートであり、この図に沿って説明する。
【００３９】
先ず、ステップＳ１０からステップＳ１６までは、実施の形態１と同じため説明を省略する。
【００４０】
ステップＳ１６で全ての配列の解析を実施した時点で、共有化動作記述変更（ステップＳ１７）には進まず、共有化情報入出力部２１が共有化候補リスト３を生成し、出力する（ステップＳ２７）。
共有化候補リスト３について一例を図６で説明する。
図６において、「配列名」とは、抽出された配列を全て書き出したもので、「配列数」、「ビット数」はその配列のサイズを表すもので、「共有化可能配列」は、共有化可能配列抽出部１３で抽出された各々の共有化可能な配列を表示し、「マーキング」は、共有化を実施するためのマーキングである。
この例は、実施の形態１の共有化と同じ結果を表しており、ｍｅｍＡはｍｅｍＣと共有化可能なこと、ｍｅｍＢは共有化可能な配列が無いことを示している。
【００４１】
この共有化候補リスト３を高位設計メモリ共有化支援装置２０に戻す場合、設計者がこの結果を見て満足し、共有化候補リスト３を承認すれば、共有化候補リスト３を変更することなく、ステップＳ１７に進み、実施の形態１と同様に、配列共有化記述部１４がｍｅｍＡとｍｅｍＣが共有化されるように動作記述を変更して（ステップＳ１７）終了となる。
【００４２】
また、設計者がこの結果を見て共有化の内容を変更したい場合には、設計者はこの共有化候補リスト３を書き換えて、例えばｍｅｍＣは共有しないよう「マーキング」に×印を入力して高位設計メモリ共有化支援装置２０に戻し（ステップＳ２８）、再度ステップＳ１１から実行し直すことで、ｍｅｍＡはｍｅｍＣとは共有化せず次の候補を探しに行く。
所望の共有化がなされた時点でＳｙｓｔｅｍＣ記述に変更されて（ステップＳ１７）終了となる。
【００４３】
なお、前記例で共有化候補リスト３に変更が無い場合には、共有化候補リスト３を高位設計メモリ共有化支援装置２０に戻さないようにしてもよい。
また、前記例では触れていないが、共有化候補リスト３の「配列数」や「ビット数」を所望の数値に書き換えて再実行できるようにしてもよい。
【００４４】
以上のように、自動で抽出された配列共有化情報（共有化候補リスト３）を出力できるようにしているので、設計者は配列がどのように共有化されたかを容易に確認することができる。
また、配列共有化情報（共有化候補リスト３）を変更し、再実行できるようにしているので、もしその共有化情報が設計者の満足行くものでなかった場合には、共有化候補リスト３を書き換えて、所望の共有化が容易にできるようになる。
また、共有化候補リスト３の「配列数」や「ビット数」も変更可能にできるため、あらかじめ共有化させたい配列のサイズを合わせることも可能となる。
【００４５】
以上、本実施の形態では、
実施の形態１で示した構成に加えて、
配列共有化情報を出力する手段と、
当該配列共有化情報を変更して再入力する手段と、
当該配列共有化情報に応じて配列共有化を再実行する手段
とを備えた高位設計メモリ共有化支援装置を説明した。
【００４６】
実施の形態３．
実施の形態１では、時間の制約がない複数メモリを共有化するものであるが、システム全体の処理速度を上げるために時間の制約をつけたパイプライン動作（以降パイプライン動作と呼ぶ）のようなメモリについても共有化できる実施の形態を示す。
【００４７】
図８は、実施の形態３による高位設計メモリ共有化支援装置を示す構成図である。
【００４８】
図８において、ファイル入力部１５は、実施の形態１と同様に、動作記述ファイル１（プログラムコード）を入力する。
ファイル入力部１５が入力する動作記述ファイル１には、各配列に対する処理が並行して行われるｍ個（ｍは３以上の整数）の配列が含まれているものとする。
また、このｍ個の配列は、それぞれが異なる配列名を有するものとする。
ファイル入力部１５は、プログラムコード入力部の例に相当する。
【００４９】
配列検出部１１は、実施の形態１と同様に、前記動作記述ファイル１の記述からメモリ共有化の候補になる配列を検出する。
【００５０】
配列処理サイクル抽出部３１は、各配列の処理サイクル（実行時間）を抽出する。
つまり、配列処理サイクル抽出部３１は、配列検出部１１により抽出された配列ごとに、処理サイクル（実行時間）、つまり、動作記述ファイル１の実行の際に配列に対する処理が継続している時間を特定する。
なお、配列処理サイクル抽出部３１により特定される処理サイクル（実行時間）は、配列処理時間の例に相当する。
また、配列処理サイクル抽出部３１は、配列処理時間特定部の例に相当する。
【００５１】
配列処理サイクル分析部３２は、配列処理サイクル抽出部３１で抽出された各配列の処理サイクルを分析する。
そして、配列処理サイクル分析部３２は、分析結果に基づき、前記ｍ個の配列の中からｎ個（ｎは、２以上の整数であって、ｍ＞ｎ）の配列を抽出する。
より具体的には、配列処理サイクル分析部３２は、前記ｍ個の配列のうち最先に処理される配列を最先処理配列として抽出し、ｎ個の配列の処理サイクル（実行時間）の合計時間が前記最先処理配列の処理サイクル（実行時間）の範囲内となるように、前記最先処理配列以外の配列の中からｎ個の配列を抽出する。
配列処理サイクル分析部３２は、配列処理時間解析部の例に相当する。
【００５２】
共有化可能配列抽出部１３は、配列処理サイクル分析部３２により抽出された配列ごとに、動作記述ファイル１の実行の際の配列の処理時に必要な記憶容量を解析して、配列処理サイクル分析部３２により抽出されたｎ個の配列が共有するメモリに必要な記憶容量を判断する。
共有化可能配列抽出部１３は、記憶容量判断部の例に相当する。
【００５３】
配列共有化記述部１４は、共有化可能配列抽出部１３により判断された記憶容量を持つメモリを配列処理サイクル分析部３２により抽出されたｎ個の配列が共有するように、動作記述ファイル１を書き換える。
より具体的には、配列共有化記述部１４は、ｎ個の配列が動作記述ファイル１の実行の際に同一のメモリを共有し、ｎ個の配列に対する処理がシリアルに行われるように、動作記述ファイル１を書き換える。
【００５４】
次に動作について説明する。
実施の形態１のような時間の制約がない動作記述（図９）では、メモリとなる配列動作は、図１０のように一つの配列動作が完了してから次の配列動作に移行する。
つまり、図９の動作記述を実行すると、図１０に示すように、物理メモリＡを用いた配列ｍｅｍＡの処理が完了した後に、物理メモリＢを用いた配列ｍｅｍＢの処理が開始し、配列ｍｅｍＢの処理が完了した後に、物理メモリＣを用いた配列ｍｅｍＣの処理が開始する。
そのため、全体の処理時間が遅くなってしまう。
図９の動作記述の場合、実施の形態１の手順に従えば、ｍｅｍＡとｍｅｍＣでメモリの共有が可能であるが、処理時間は短くならない。
【００５５】
これを改善するために、パイプライン動作の動作記述（図１１）にした場合の、図１２のようなメモリ共有化方法について説明する。
図１１の動作記述を実行すると、図１２に示すように、物理メモリＡを用いた配列ｍｅｍＡの処理、物理メモリＢを用いた配列ｍｅｍＢの処理、物理メモリＣを用いた配列ｍｅｍＣの処理が並列化する。
そして、図１１の動作記述の場合、本実施の形態により、ｍｅｍＢとｍｅｍＣでメモリを共有させる。
【００５６】
図１３は、高位設計メモリ共有化支援装置３０の動作を示すフローチャートであり、この図に沿って説明する。
【００５７】
先ず、メモリ共有化したい動作記述ファイル１をファイル入力部１５を介して高位設計メモリ共有化支援装置３０に入力する（ステップＳ１０）。
ここでの動作記述ファイル１は、図１１のように、配列のパイプライン動作が記述されたものである。
【００５８】
次に、配列検出部１１が、入力された動作記述ファイル１の最初の配列（最先処理配列）を検出する（ステップＳ１１）。
図１１においては、ｆｏｒ文で記載されたｍｅｍＡがそれにあたる。
配列検出部１１は、その配列にマーキングが付いているかどうかを確認し、マーキングがある場合は、共有化は不要ということでステップＳ１６に進む。
マーキングが無い場合は共有化の次のフェーズ（ステップＳ３１）に進む（ステップＳ１２）。
なお、マーキングの説明は後述する。
【００５９】
次に、配列処理サイクル抽出部３１が、前記配列検出部１１で検出された配列ｍｅｍＡの処理サイクルを抽出する（ステップＳ３１）。
配列ｍｅｍＡの処理サイクルは、図１２では、ｉの長さが相当し、図１１ではｆｏｒ文のｉが「０」から「５１２」に達するまでのサイクル（時間）が相当する。
【００６０】
次に、配列検出部１１が、前記配列処理サイクル抽出部３１で検出された配列ｍｅｍＡの後に動作する複数の配列を確認し、複数の配列がない場合は共有化できないため、ステップＳ１６に進む。
複数の配列がある場合は、次のフェーズ（ステップＳ３３）に進む（ステップＳ３２）。
複数の配列とは、図１１ではｍｅｍＢ、ｍｅｍＣがこれに相当する。
【００６１】
前記の複数配列についても、配列処理サイクル抽出部３１で各々の処理サイクル（ｊ、ｋ）を抽出し、配列処理サイクル分析部３２で各々の値を加算（ｊ＋ｋ）する（ステップＳ３３）。
配列ｍｅｍＢの処理サイクルは、図１２では、ｊの長さが相当し、図１１ではｆｏｒ文のｊが「０」から「２５６」に達するまでのサイクル（時間）が相当する。
配列ｍｅｍＣの処理サイクルは、図１２では、ｋの長さが相当し、図１１ではｆｏｒ文のｋが「０」から「２５６」に達するまでのサイクル（時間）が相当する。
【００６２】
次に、配列処理サイクル分析部３２が、前記複数配列の処理サイクル加算値（ｊ＋ｋ）と、ステップＳ１１で検出した配列ｍｅｍＡの処理サイクルｉとを比較し、ｉ≧ｊ＋ｋとなれば配列ｍｅｍＢと配列ｍｅｍＣが共有可能と判断し、次のフェーズ（ステップＳ３５）に進む。
また、ｉ≧ｊ＋ｋが成り立たない場合は共有不可と判断してステップＳ１６に進む（ステップＳ３４）。
ここで、ｉ≧ｊ＋ｋが成り立つと共有可能とする理由は、配列ｍｅｍＡ、ｍｅｍＢ、ｍｅｍＣの処理サイクルのうち、システム全体の処理サイクルに影響を及ぼすのはｍｅｍＡの処理サイクルであり、ｍｅｍＢ、ｍｅｍＣはｍｅｍＡの処理サイクルに待たされるため、ｍｅｍＢ、ｍｅｍＣの処理サイクルの合計サイクルが、ｍｅｍＡの処理サイクル以下であれば、ｍｅｍＢとｍｅｍＣの処理をシリアルに実行して良く（全体の処理速度は変わらない）、別のメモリに振り分ける必要がない。
このため、ｉ≧ｊ＋ｋが成り立つと、配列ｍｅｍＢとｍｅｍＣが共有可能である。
【００６３】
配列ｍｅｍＢとｍｅｍＣが共有化可能な場合は、共有化可能配列抽出部１３が、配列のサイズ関係を比較する。
配列数（メモリのワード数に相当）とビット数を比較し、大きい方に合わせたものを共有化する配列とする。
図１１の場合は、ｍｅｍＢの配列数２５６、ビット数３２がｍｅｍＣと同じため、このままのメモリサイズとする。
配列数やビット数が異なる場合の処理は、実施の形態１の例と同じであるので、ここでは説明を省略する。
このようにして、共有化可能配列抽出部１３は、配列ごとに、プログラムコードの実行の際の配列の使用時に必要な記憶容量を解析して、ｍｅｍＢとｍｅｍＣが共有するメモリに必要な記憶容量を判断する。
また、共有化可能配列抽出部１３は、共有化することが決まった配列（ｍｅｍＢとｍｅｍＣ）が共有化済みである印としてマーキングをつける（ステップＳ３５）。
【００６４】
なお、前記例ではサイズを合わせるようにしているが、サイズが大きく異なる場合はあまり効率的ではないため、共有化しないようにして次の候補の配列を探しにいってもよい。
【００６５】
ステップＳ３５までで一つのパイプライン配列の共有化解析は完了で、その他の配列についてもステップＳ１１からステップＳ３５までを実施し、全ての配列について共有化解析が完了すればステップＳ１７に進む（ステップＳ１６）。
配列共有化記述部１４において前記のマーキングした配列を共有化した動作記述（ＳｙｓｔｅｍＣ等）に変更して、動作は終了となる（ステップＳ１７）。
【００６６】
図１４が、高位設計メモリ共有化支援装置３０の出力である図８のメモリ共有化動作記述ファイル２であり、配列共有化記述部１４が図１１の動作記述を配列共有化したＳｙｓｔｅｍＣ記述である。
図１４では、元々ｍｅｍＣの開始イネーブル信号であったｅｎＣのタイミングをｊ＝＝０からＪ＝＝２５６に変更し（符号１４０１）、元々ｍｅｍＣだったメモリをｍｅｍＢに変更するのみである（符号１４０２、１４０３）。
また、図１１の３つ目のファイルを削除し、２つ目のファイルの下に演算ｍｅｍＢ［ｋ］＝  ｆｕｎｃＸ（ｄ２ｉｎ．ｒｅａｄ（））；を置いてもよく、変更方法は特に問わない。
【００６７】
なお、前記例では全ての配列を解析してから動作記述ファイルを一気に配列共有化に変更するようにしているが、配列一組を解析するたびに動作記述ファイルを配列共有化に変更しても構わない。
また、前記例では全配列を共有化の対象としているが、小容量のメモリを多数共有化したり、レイアウトで離れたメモリを共有化したりすることで配線混雑や配線遅延の問題が生じる可能性がある。
その場合は、共有化したくない配列にあらかじめマーキングしておくことにより、共有化対象外とすることも可能である。
【００６８】
このように、配列検出部１１、配列処理サイクル抽出部３１、配列処理サイクル分析部３２及び共有化可能配列抽出部１３が、プログラムコード（動作記述ファイル１）に含まれる配列ごとに、プログラムコード内で配列が使用されている配列の処理サイクルを分析し、システム全体の処理サイクルに影響を及ぼさない２つ以上の配列（前述の例では、ｍｅｍＢとｍｅｍＣ）を抽出する。
そして、配列共有化記述部１４が、システム全体の処理サイクルに影響を及ぼさない２つ以上の配列がプログラムコードの実行の際に同一のメモリを共有するように、プログラムコードを書き換えて、メモリ共有化動作記述ファイル２とする。
【００６９】
以上のように、本実施の形態によれば、性能向上のためのパイプライン動作の動作記述を入力し分析することで、システム全体性能に影響を及ぼさない範囲で共有化可能な配列（メモリ）を抽出し、その配列同士を共有化させる記述に変更した動作記述ファイルを自動で出力するようにしている。
このため、設計者の手を煩わさず、かつ、システム性能を落とすことなくメモリの共有化が可能となり半導体集積回路の回路規模が削減される。
また、共有化したくないメモリについては、あらかじめ指定して共有化対象から外すことも容易なので、共有化実施後に見直す必要がなくなる。
【００７０】
以上、本実施の形態では、
半導体集積回路の設計において、
設計回路の動作を記述した動作記述を入力する手段と、
当該動作記述から記憶素子となる配列を検出する手段と、
当該配列の使用箇所を検索する手段と、
当該配列の処理アクセスを抽出する手段と、
当該配列の処理アクセスを分析する手段と、
当該配列と共有化可能な別の配列を抽出する手段と、
当該配列同士が共有化される高位合成対象の動作記述に書き換える手段
とを備えた高位設計メモリ共有化支援装置を説明した。
【００７１】
なお、本実施の形態と実施の形態２とを組み合わせてもよい。
すなわち、図８の構成に図５の共有化情報入出力部２１（抽出配列情報提示部）を追加し、共有化情報入出力部２１が、共有化可能配列抽出部１３により抽出された共有化候補の配列（前出の例では、配列ｍｅｍＢとｍｅｍＣ）が示される共有化候補リスト３を生成し、生成した共有化候補リスト３を設計者に提示するようにしてもよい。
なお、共有化候補リスト３の提示後の手順は、実施の形態２で説明したものと同様であるため、説明を省略する。
【００７２】
なお、上記実施の形態１、２、３では、便宜的に動作記述をｓｙｓｔｅｍＣ言語で記述した場合を示したが、適用対象は、特定のプログラム言語に限定されない。
従って、Ｃ、Ｃ＋＋、ＳｙｓｔｅｍＶｅｒｉｌｏｇ等の高位合成に入力する動作記述として用いられる言語に対し同じように適用することができる。
また、上記では、半導体集積回路の動作が記述されている動作記述ファイルに含まれている配列に対してメモリの共有化を図る例を説明したが、適用対象は動作記述ファイルに限定されない。
複数の配列が含まれ、２つ以上の配列でメモリを共有化する必要があるプログラムコードであれば、実施の形態１及び２及び３に示した手法でメモリの共有化を実現することができる。
【００７３】
最後に、実施の形態１及び２及び３に示した高位設計メモリ共有化支援装置１０、２０、３０のハードウェア構成例を図１５を参照して説明する。
高位設計メモリ共有化支援装置１０、２０、３０はコンピュータであり、高位設計メモリ共有化支援装置１０、２０、３０の各要素はプログラムにより処理を実行することができる。
高位設計メモリ共有化支援装置１０、２０、３０のハードウェア構成としては、バスに、演算装置９０１、外部記憶装置９０２、主記憶装置９０３、通信装置９０４、入出力装置９０５が接続されている。
【００７４】
演算装置９０１は、プログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）である。
外部記憶装置９０２は、例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）やフラッシュメモリ、ハードディスク装置である。
主記憶装置９０３は、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。
通信装置９０４は、他の装置と通信を行う。
入出力装置９０５は、例えば、マウス、キーボード、ディスプレイ装置である。
【００７５】
プログラムは、通常は外部記憶装置９０２に記憶されており、主記憶装置９０３にロードされた状態で、順次演算装置９０１に読み込まれ、実行される。
プログラムは、図１及び図５において「〜部」として説明している機能を実現するプログラムである。
更に、外部記憶装置９０２にはオペレーティングシステム（ＯＳ）も記憶されており、ＯＳの少なくとも一部が主記憶装置９０３にロードされ、演算装置９０１はＯＳを実行しながら、図１及び図５の「〜部」の機能を実現するプログラムを実行する。
また、入力された動作記述ファイル１は、外部記憶装置９０２に格納され、配列の抽出が行われる際に、外部記憶装置９０２から主記憶装置９０３にロードされる。
また、実施の形態１及び２及び３の説明において、「〜の判断」、「〜の判定」、「〜の抽出」、「〜の検出」、「〜の確認」、「〜の決定」、「〜の解析」、「〜の検知」、「〜の設定」、「〜の比較」、「〜の選択」、「〜の生成」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値が主記憶装置９０３にファイルとして記憶されている。
また、暗号鍵・復号鍵や乱数値やパラメータが、主記憶装置９０３にファイルとして記憶されてもよい。
【００７６】
なお、図１５の構成は、あくまでも高位設計メモリ共有化支援装置１０、２０、３０のハードウェア構成の一例を示すものであり、高位設計メモリ共有化支援装置１０、２０、３０のハードウェア構成は図１５に記載の構成に限らず、他の構成であってもよい。
【００７７】
また、実施の形態１及び２及び３に示す手順により、本発明に係る情報処理方法を実現可能である。
【符号の説明】
【００７８】
１  動作記述ファイル、２  メモリ共有化動作記述ファイル、３  共有化候補リスト、１０  高位設計メモリ共有化支援装置、１１  配列検出部、１２  配列読出検索部、１３  共有化可能配列抽出部、１４  配列共有化記述部、１５  ファイル入力部、２０  高位設計メモリ共有化支援装置、２１  共有化情報入出力部、３０  高位設計メモリ共有化支援装置、３１  配列処理サイクル抽出部、３２  配列処理サイクル分析部。
【図１】
2013254472.tif 000003
【図２】
2013254472.tif 000004
【図３】
2013254472.tif 000005
【図４】
2013254472.tif 000006
【図５】
2013254472.tif 000007
【図６】
2013254472.tif 000008
【図７】
2013254472.tif 000009
【図８】
2013254472.tif 000010
【図９】
2013254472.tif 000011
【図１０】
2013254472.tif 000012
【図１１】
2013254472.tif 000013
【図１２】
2013254472.tif 000014
【図１３】
2013254472.tif 000015
【図１４】
2013254472.tif 000016
【図１５】
2013254472.tif 000017