(57)【要約】【課題】システムにおけるメモリ配置の最適解を、システムモデルのシミュレーションを通じて自動的に生成してメモリ資源最適化を支援する。【解決手段】シミュレータ部１２は、アクセス速度の異なる少なくとも２つのメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションする。資源割付部１０は、シミュレーション結果に基づいて、高速メモリ領域には可能な限りデータを配置せずにプログラムの目標実行速度を維持できるように、プログラム実行で使用するデータ領域を、高速メモリ領域と低速メモリ領域とに分配配置する最適なメモリ配置を決定する。【選択図】　　　　　図１
2004070862.tif 000002
【特許請求の範囲】
【請求項１】
アクセス速度の異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレーションステップと、
前記シミュレーションステップで得られたシミュレーション結果に基づいて、前記プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付ステップと、
を備えたことを特徴とするメモリ資源最適化支援方法。
【請求項２】
請求項１記載のメモリ資源最適化支援方法に於いて、前記資源割付ステップは、前記シミュレーション結果を解析し、高速メモリ領域には可能な限りデータを配置せずにプログラムの目標実行速度を維持できるように、プログラム実行で使用するデータ領域を、高速メモリ領域と低速メモリ領域とに分配配置することを特徴とするメモリ資源最適化支援方法。
【請求項３】
請求項１記載のメモリ資源最適化支援方法に於いて、前記資源割付ステップは、
任意のメモリ領域に各データ領域を適当に配置して、全ての領域のアクセスサイクルを高速メモリと同一に設定し、目標性能にと立つし得るか否か検査する初期検査ステップと、
前記初期検査ステップで実行時間が目標実行時間以内の場合、前記シミュレーション結果を解析して、値が大きいほど高速メモリ領域に配置する必要性が高くなる重みを設定して重み順に各データ領域を配列する重み付けステップと、
前記重み順データ領域配列の中で、高速メモリ領域への配置を必要とするデータ領域と、低速メモリ領域への配置でかまわないデータ領域との境界を探索する境界探索ステップと、
前記境界探索で求められた境界の高速メモリ領域側の重み順データ領域配列から、重みの大きい順にデータ領域を取り出して実メモリを仮想した高速メモリ領域への配置を試行し、配置可能な場合は配置後にその領域をロックして重複配置を禁止する処理を繰り返す配置最適化ステップと、
を備えたことを特徴とするメモリ資源最適化支援方法。
【請求項４】
コンピュータに、
アクセス速度の異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレーションステップと、
前記シミュレーションステップで得られたシミュレーション結果に基づいて、前記プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付ステップと、
を実行させることを特徴とするプログラム。
【請求項５】
アクセス速度の異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレータ部と、
前記シミュレータ部の制御により前記プログラムを実行して得られたシミュレーション情報に基づいて、前記プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付部と、
前記シミュレータ部と資源割付部との間で情報を受け渡しするための記憶領域と、
を備えたことを特徴とするメモリ資源最適化支援装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、アクセス速度の異なる複数のメモリ領域をもつプロセッサシステム等を対象にメモリ資源割付の最適化を支援するメモリ資源最適化支援方法、プログラム及び装置に関し、特に、プロセッサシステムモデルのシミュレーションに基づいてメモリ資源割付の最適化を支援するメモリ資源最適化支援方法、プログラム及び装置に関する。
【０００２】
【従来の技術】
近年、インターネットや携帯電話網を基盤とした様々な情報サービスが急速に普及しており、これらサービスへ対応するための情報機器の利用も急速に広まってきている。新しいサービス形態が次々と展開されていくなか、それに対応するための情報機器開発においては、開発期間とコストの短縮がより一層重要となってきている。
【０００３】
そのような背景における近年の情報機器開発では、専用回路を中心とした情報機器開発ではなく、ソフトウェア変更によって柔軟なサービス対応が可能となるように、組み込み用途向けの汎用プロセッサ（ＭＰＵやＤＳＰ）をベースとして開発を行うのが一般的となっている。
【０００４】
このような情報機器の開発においては、開発期間の短縮、メモリサイズの縮小によるハードウェアコストの縮減、ソースプログラムの移植性などが求められる。また、プログラムアルゴリズムを高速化することにより、より低速のプロセッサまたは低機能のプロセッサをベースとした機器開発が可能となり、結果としてハードウェアコスト削減に繋がるため、プログラム高速化も重要である。
【０００５】
これらを踏まえ、開発効率やソースプログラムの移植性を配慮して高級言語でプロトタイピングし、速度のクリティカルな部分について処理の高速化を図るためにアセンブリ言語等の低級言語で開発を行い、マイクロプロセッサが有する性能をシステムとして最大限に活用する手法が広く用いられている。
【０００６】
【発明が解決しようとする課題】
しかしながら、このような情報機器の設計段階において、システム全体として、ターゲットとするサービスアプリケーションに必要十分な性能が得られるかどうかを見積もることは非常に難しい。処理性能に必要以上に余裕を持たせて機器開発することは、オーバースペックでコスト高となる。設計時の性能見積もりの重要な要素として、プロセッサ性能、バス性能、メモリ性能、割り込み応答性能、消費電力など様々な要因が挙げられる。
【０００７】
一般に、組み込みシステムのメモリ資源は、高速なローカルメモリや比較的低速な外部メモリなどのように階層化されている。搭載メモリの性能見積もりでは、プロセッサのローカルメモリやキャッシュ等の高価でアクセス速度が高速なＳＲＡＭなどのメモリと、速度は劣るもの安価で大容量搭載可能なＤＲＡＭなどのメモリとの、搭載容量比率のバランスがアプリケーション処理性能に大きく影響するため、重要である。
【０００８】
情報機器の要となるプロセッサが高速、高性能であっても、メモリのアクセス速度が遅くてメモリからのデータ供給あるいはメモリへデータ出力に待ち時間が発生してしまっては、プロセッサの演算性能が最大限に活用できず、十分なシステム性能が得られなくなってしまう。
【０００９】
高速メモリの容量が大きければ、目的のアプリケーションに対する処理性能を得られる一方、コスト高となる。高速メモリ容量を小さくすると、コストは下げられる反面、目標のアプリケーション性能が得られなくなってしまう可能性がある。
【００１０】
このバランスの最適値の見積もりは非常に難しい問題であり、アプリケーションプログラムを開発して、高速化のためのプログラム最適化とメモリ配置の最適化を十分に行い、最適化と性能評価を繰り返して初めて、最適なメモリ容量が見えてくるのが現実である。
【００１１】
メモリ配置の最適化については、容量削減と高速化の両面を配慮しながらシステム全体のメモリ使用状況とデータフローを十分に把握し、処理に応じて小容量で有限な高速メモリ上の使用済みデータを一度開放して退避し、別データを格納するデータ入れ替えなどが必要であるため、システム設計経験を積んだ開発者の高いスキルが要求され、開発工程短縮の妨げとなっている。
【００１２】
以上のように、対象となるアプリケーションプログラムをあるシステム上で実現するために、システムの持つメモリ領域の最適容量を見積もり、全てのデータの最適なメモリ配置を見つけることは、開発者に豊富なシステム開発経験と高いスキルが要求され、非常に困難な作業であり、様々なサービスに対応できる柔軟な情報機器の開発では、プログラム高速化作業に加え、コストと性能を配慮したメモリ最適化作業が、開発期間短縮における大きな課題となっている。
【００１３】
本発明は、システムにおけるメモリ配置の最適解を、システムモデルのシミュレーションを通じて自動的に生成するメモリ資源最適化支援方法、プログラム及び装置を提供することを目的とする。
【００１４】
【課題を解決するための手段】
図１は本発明の原理説明図である。本発明は、メモリ資源最適化支援方法を提供するものであり、このメモリ資源最適化支援方法は、
アクセス速度の異なる少なくとも２つのメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレーションステップと、シミュレーションステップで得られたシミュレーション結果に基づいて、プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付ステップと、
を備えたことを特徴とする。
【００１５】
このため本発明により、異なるアクセス速度を持つ複数のメモリ領域を備えたプロセッサシステムに対し、アプリケーションを目標実行時間内で処理するため、必要なメモリ領域の最小サイズ、特にアクセス速度の速い高速メモリ領域の最小サイズと、各メモリ領域にどのようにデータを配置すれば最適であるかを知ることができ、これによってシステム設計時の見積もりや、システム検証にかかる開発時間を大幅に短縮する。
【００１６】
ここで資源割付ステップは、シミュレーション結果を解析し、高速メモリ領域には可能な限りデータを配置せずにプログラムの目標実行速度を維持できるように、プログラム実行で使用するデータ領域を、高速メモリ領域と低速メモリ領域とに分配配置することを特徴とする。
【００１７】
資源割付ステップは、より詳細には、図１（Ｂ）のように、
任意のメモリ領域に各データ領域を適当に配置して、全ての領域のアクセスサイクルを高速メモリと同一に設定し、目標性能にと立つし得るか否か検査する初期検査ステップと、
初期検査ステップで実行時間が目標実行時間以内の場合、シミュレーション結果を解析して、値が大きいほど高速メモリ領域に配置する必要性が高くなる重みを設定して重み順に各データ領域を配列する重み付けステップＳ２と、
重み順データ領域配列の中で、高速メモリ領域への配置を必要とするデータ領域と、低速メモリ領域への配置でかまわないデータ領域との境界を探索する境界探索ステップＳ３と、
境界探索で求められた高速メモリ領域への配置を必要とする重み順データ領域配列から、重みの大きい順にデータ領域を取り出して実メモリを仮想した高速メモリ領域への配置を試行し、配置可能な場合は配置後にその領域をロックして重複配置を禁止する処理を繰り返す配置最適化ステップＳ４と、
を備えたことを特徴とする。
【００１８】
ここで、重み付けステップは、各データ領域の重みを、シミュレーション結果におけるアクセス頻度とデータ領域サイズに基づいて設定する。例えば重み付けステップは、アクセス頻度が多いほど大きな値の重みを設定し、且つデータ領域サイズが小さいほど大きな値の重みを設定する。
【００１９】
境界探索ステップは、全データ領域を高速メモリ領域に配置したと仮定した後、重みの小さいデータ領域から順番に低速メモリ領域に配置変更したと仮定して、この配置変更に対応したメモリウェイトサイクルをシミュレーション結果に設定することにより実行時間を再計算し、再計算した実行時間が目標実行時間を超えるまで処理を繰り返して、重み順データ領域配列の中の高速メモリ領域への配置を必要とするデータ領域の境界を探索する。
【００２０】
また境界探索ステップは、２分法による探索としても良い。即ち、境界探索ステップは、全データ領域を高速メモリ領域に配置したと仮定した後、重み順データ領域配を２分して小さい重み側の各データ領域を低速メモリ領域に配置したと仮定して、この配置変更に対応したメモリウェイトサイクルをシミュレーション結果に設定することにより実行時間を再計算し、再計算した実行時間が目標実行時間に比べ小さい場合は、高速メモリ領域に残したデータ領域をさらに２分して小さい重み側を低速メモリ領域に配置し、大きい場合は低速メモリ領域に移したデータ利領域をさらに２分して大きい重み側を高速メモリ領域へと配置したと仮定して再計算を行うという処理を繰り返して、重み順データ領域配列の中の高速メモリ領域への配置を必要とするデータ領域の境界を探索する。
【００２１】
配置最適化ステップは、実メモリを仮想した高速メモリ領域へのデータ領域の配置が出来ない場合、アクセスする時間情報に基づいてデータ領域を細分化し、細分化したデータ領域が時間的に重ならないように高速メモリ領域への配置を試行する。
【００２２】
配置最適化ステップは、実メモリを仮想した高速メモリ領域へのデータ領域の配置ができないことが確定した場合、データ領域を重み順データ領域配列の中の低速メモリ領域側に移した後に、低速メモリ領域側から重みの大きい順にデータ領域を高速データ領域側に移して高速メモリ領域への配置を試行する。
【００２３】
配置最適化ステップは、重み順データ領域配列における高速メモリ領域側の全データの高速メモリ領域への配置が成功した場合、実メモリを仮想した高速メモリ領域のサイズを縮小して再度配置を試行する。
【００２４】
本発明は、メモリ資源最適化支援のためのプログラムを提供する。このプログラムは、コンピュータに、
アクセス速度の異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレーションステップと、
シミュレーションステップで得られたシミュレーション結果に基づいて、前記プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付ステップと、
を実行させることを特徴とする。
【００２５】
本発明は、メモリ資源最適化支援装置を提供する。このメモリ資源最適化支援装置は、図１（Ａ）のように、アクセス速度の異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレータ部１２と、シミュレータ部１２の制御によりプログラムを実行して得られたシミュレーション情報に基づいて、プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付部１０と、シミュレータ部１２と資源割付部１０との間で情報を受け渡しするための記憶領域１４と、を備えたことを特徴とする。
【００２６】
尚、プログラム及びメモリ資源最適化支援装置の詳細は、メモリ資源最適化支援方法の場合と基本的に同じになる。
【００２７】
【発明の実施の形態】
図２は，本発明によるメモリ資源最適化支援装置の基本構成のブロック図である。図２において，本発明のメモリ資源最適化支援装置は、資源割付部１０、シミュレータ部１２及び記憶領域１４で構成される。シミュレータ部１２は、アクセス速度が異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムを対象に、システム性能の評価対象となるアプリケーションプログラムをシミュレーションにより実行する。
【００２８】
資源割付部１０は、シミュレータ部１２から出力されるシミュレーション結果に基づいて、メモリ資源を効率良く割り付けることによって対象とするプロセッサシステムのメモリ配置を最適化し、システム性能評価を支援する。記憶領域１４は、資源割付部１０とシミュレータ部１２との間での情報の受け渡しに使用する。
【００２９】
図３は本発明によるメモリ資源最適化支援装置におけるデータの流れである。メモリ資源最適化支援装置に対する入力ファイル１１は、オブジェクトファイル２６、ソース情報ファイル２８及びオブジェクト情報ファイル３０を含む。
【００３０】
入力ファイル１１の各ファイルは、Ｃソースファイル１６をコンパイラ１８に入力してアセンブリソースファイル２０を作成し、続いてアセンブリ言語ソースファイル２０をアセンブラ２４に入力して生成している。またアセンブリソースファイル２２を直接アセンブラ２４に入力して生成することもできる。
【００３１】
入力ファイル１１の各ファイルはリンカ３２に与えられ、リンク設定ファイル３４に基づき、シミュレータ部１２でアプリケーションプログラムを実行可能な形式に変換する。このリンク時のアドレス設定として、オブジェクトファイル２６におけるプログラムメモリなどの配置設定としてデータ領域については、シミュレータ部１２における対象となるプロセッサシステム中の任意のメモリ領域に各データ領域を適当に配置する。
【００３２】
シミュレータ部１２は、資源割付部１０の指示に従い、各データ領域についてメモリアクセスを監視しながら、対象とするプロセッサシステムのシミュレーションを行う。シミュレータ部１２は、一般的なプロセッサシステムのシミュレータと同様、プログラムのブレークポイント設定、メモリアクセスのブレーク設定、ブレーク時のマクロ起動、更にトレース情報出力などの機能を備えている。
【００３３】
またメモリ領域に応じて、対象とするプロセッサシステムと等価のメモリアクセスウェイトを発生できるように、ウェイトサイクルを設定可能なメモリウェイトシミュレーション機能を備えている。
【００３４】
ここでデータ領域とは、配列変数領域やメモリ割付関数（Ｃ言語のｍａｌｌｏｃ関数など）によって割り付けられたデータ領域などの個々のデータブロックを指している。
【００３５】
資源割付部１０は、データ領域の全てをシミュレーション時に監視するような設定を持つ初期設定ファイル３６を生成し、シミュレーション設定ファイル３８としてシミュレータ部１２に入力する。シミュレータ部１２は、システム性能の評価対象となるオブジェクトファイル２６として与えられたアプリケーションプログラムのある区間について、各データ領域のアクセス履歴をシミュレーション情報ファイル４０としてファイル出力しながらシミュレーションを行う。
【００３６】
シミュレータ部１２によるシミュレーションが済むと、資源割付部１０はシミュレーション結果として得られたシミュレーション情報ファイル４０に基づき、プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定し、メモリ配置情報４２を処理結果として出力する。
【００３７】
この資源割付部１０による処理の基本的な考え方は、シミュレーション結果を解析し、高速メモリ領域には可能な限りデータを配置せずにプログラムの目標実行速度を維持できるように、プログラム実行で使用するデータ領域を高速メモリ領域と低速メモリ領域とに分配配置する。
【００３８】
図４は、本発明のメモリ資源最適化支援装置が処理対象とするプロセッサシステムのモデルである。このプロセッサシステムのモデルは、ＭＰＵ／ＤＳＰなどのプロセッサ４４に対し、メモリコントローラ４６を介して小容量の高速メモリ４８を直接接続している。またバス４５を介して、高速メモリ４８に比べアクセス速度の遅い大容量の低速メモリ５０を接続している。
【００３９】
図５は本発明のメモリ資源最適化支援装置が処理対象とするプロセッサシステムの他のモデルである。このプロセッサシステムのモデルは、プロセッサ５２がローカルメモリとして機能する高速アクセス可能な高速メモリ５４を搭載しており、高速メモリ５４に比べアクセス速度の遅い通常メモリ５６をバス５８に接続し、更にＩ／Ｏコントローラ６０を介して外部メモリとして低速メモリ６２を接続している。
【００４０】
図６は、本発明によるメモリ資源最適化支援処理の基本的な処理手順のフローチャートであり、本発明におけるメモリ資源最適化支援方法及びその支援方法を実現するプログラムの流れを表わしている。
【００４１】
図６において、まずステップＳ１でシミュレーションを行うプロセッサシステムモデル上の複数のメモリ領域に初期サイズを設定し、続いてステップＳ２でアプリケーションの目標性能、具体的には目標実行時間を設定して、シミュレーションを行う（初期検査）。
【００４２】
ステップＳ３でシミュレーションにより目標性能をクリアしていることが判別されると、ステップＳ４に進み、メモリ配置最適化処理を実行する。このメモリ配置最適化処理により、最適解が求まればステップＳ６に進み、現在設定しているメモリ領域サイズはアプリケーション実行に十分であると判断し、メモリ領域のサイズを縮小し、ステップＳ４に戻って再度、メモリ配置最適化処理を繰り返す。
【００４３】
このステップＳ４〜Ｓ６の処理の繰り返しにより、最適解が求まらなくなった場合には、与えられたメモリサイズがアプリケーション実行に不足していると判断し、ステップＳ７に進み、１つ前のメモリサイズで得られた解を最適解として処理を終了する。もちろん、ステップＳ２の初期検査によるシミュレーションに対し、ステップＳ３で目標性能がクリアされないことが判別された場合には、エラー終了とする。
【００４４】
図７は、図６のメモリ資源最適化支援処理におけるステップＳ２〜Ｓ４の初期検査処理からメモリ配置最適化処理までの詳細を示したフローチャートである。図７において、初期検査処理６４はステップＳ１〜Ｓ６で行われ、この初期検査の処理結果につきステップＳ７で目標性能をクリアしている場合には、メモリ配置最適化処理６６として設けているステップＳ８〜Ｓ１０の処理を実行する。
【００４５】
ここで、以下のメモリ資源最適化処理の説明にあっては、メモリ領域を高速メモリ領域と低速メモリ領域との２種類で説明するが、対象とするプロセッサシステムとしては、図５のプロセッサシステムモデルのように３種類もしくはそれ以上のメモリ領域を搭載できる。
【００４６】
３種類以上のメモリ領域を搭載している場合には、最も高速なメモリ領域とそれ以外のメモリ領域をそれぞれ高速メモリ領域と低速メモリ領域に置き換えて、本発明によるメモリ資源最適化処理を行えばよい。
【００４７】
そして最適解が得られたら、更に複数の低速メモリをまとめて分類した領域について、その中で最も高速なメモリ領域とそれ以外のメモリ領域をそれぞれ高速メモリ領域と低速メモリ領域に置き換えて本発明による最適化処理を適用するという操作を繰り返し、高速側を次々に最適化していけばよい。
【００４８】
図７において、まずステップＳ１〜Ｓ６の初期検査処理６４を説明する。ステップＳ１で、対象とするプロセッサシステムの目標性能としてアプリケーションの評価区間とその目標性能値を設定する。
【００４９】
図８は、図７のステップＳ１の目標性能値の設定に使用される目標値設定ファイル６８である。目標値設定ファイル６８にはアプリケーションの評価区間として、スタート位置としてソースプログラムの開始行「ＳＴＡＲＴ」と終了行「ＥＮＤ」として同じくソースファイルの終了行が記述され、更に目標性能値として目標実行時間「５００ｍｓｅｃ」が記述されている。
【００５０】
このような目標値設定ファイル６８の内容に基づき、以下の処理にあっては、この目標性能値を満たすようにメモリ配置の最適化処理が行われる。またアプリケーションの評価区間とは、例えばアプリケーションの処理全体の内のある処理モジュールなどを指している。
【００５１】
続いて図７のステップＳ２で初期設定ファイル３６を取り込む。初期設定ファイル３６は例えば図９のような形式となっている。即ち、初期設定ファイル３６は、処理対象としているプロセッサシステムの各メモリ領域におけるリード及びライトのアクセス速度をウェイトサイクルにより設定している。
【００５２】
図９の初期設定ファイル３６にあっては、各領域に対し通常のリードウェイト及びライトウェイトを設定すると同時に、ＤＭＡにおけるリードウェイトとライトウェイトも設定している。
【００５３】
続いて図７のステップＳ３で、全データを任意の大容量メモリ領域に各データ領域を適当に配置するようなリンク設定ファイルに基づいてリンク処理を行う。ここでは資源割付部１０が資源割付の調整を繰り返していくための初期配置が行われれば良いため、リンク設定ファイルに基づくメモリ配置は任意の一元的な配置でよい。
【００５４】
図１０は、図７のステップＳ３におけるメモリ領域の配置に使用するリンク設定ファイル７２の一例である。このリンク設定ファイル７２にあっては、最も容量の大きな低速メモリ領域に全データ領域を配置するようにリンカを設定して、オブジェクトファイルを生成している。即ち、リンク設定ファイル７２によるリンク設定にあっては、全てのデータ領域を０ｘ８０００００番地以降に格納し、またプログラムコードを０ｘ４０００００番地以降に格納するように、プログラムオブジェクトが生成される。
【００５５】
このときリンカは図１１のＭＡＰファイル７４に示すように、ラベル情報７６、オブジェクト配置情報７８、オブジェクトサイズ情報８０などを含むリンク情報を出力するので、資源割付部１０は、このリンク情報に基づいて図７のステップＳ４でシミュレータ部１２に対するシミュレーションの動作設定を行う。
【００５６】
この資源割付部１０によるシミュレータ部への動作設定を説明すると、一般的に多くのシミュレータでは様々なトレース設定やメモリ領域ごとのアクセスウェイトなどの動作設定を行うことにより、指定アドレス領域内での書込回数や読出回数のアクセス頻度、プログラム動作時間（サイクル数）をシミュレーション情報として記録し出力することができ、本発明のシミュレータ部１２もこのような設定に基づく動作が同様にできる。
【００５７】
図７のステップＳ４におけるシミュレータ部への動作設定として、資源割付部１０は、まず全データを配置したメモリ領域のアクセスウェイト数を高速メモリ領域のアクセスウェイト数と高速メモリ領域のアクセスウェイト数と同じ高速設定とする。
【００５８】
この理由は、まず全データが高速アクセスできると仮定した状態で目標性能に到達できるかどうかを検査するためである。この全データの高速設定に対し、もし目標性能に到達できなかった場合には、メモリ配置の最適化をどのように行っても目標性能には到達し得ない。
【００５９】
また図７のステップＳ４において、シミュレータ部１２に対する動作設定として、資源割付部１０は、リンカから得た初期の資源割付情報を元に、各メモリ領域へのアクセスを監視するようにシミュレーション設定を行う。
【００６０】
図１２は、図７のステップＳ４による全メモリ領域に対する最高速設定及び各メモリ領域のアクセス監視設定の記述を行ったシミュレーション設定ファイル３８である。このシミュレーション設定ファイル３８にあっては、ウェイトサイクル設定８４として低速メモリ領域を含む全メモリ領域（ここでは２４ビットアドレス空間）のアクセスウェイトを高速メモリ領域と同じウェイトサイクルに設定している。
【００６１】
即ち、命令によるリード及びライトにつき１サイクル、ＤＭＡによるリード及びライトにつき２サイクルを設定している。またアクセス監視設定８６として、データ領域０ｘ８０００００から０ｘ１０００バイト、０ｘ８０１０００から０ｘ１０バイト、０ｘ８０１０１０から０ｘ１０００バイトのそれぞれについて、アクセスを監視するように設定している。このため、シミュレーション設定ファイル３８で設定された領域へのリードアクセスまたはライトアクセスが発生すると、その状態がシミュレーションログとして記録される。
【００６２】
続いて図７のステップＳ５で、資源割付部１０はシミュレータ部１２を起動し、シミュレーションを行わせる。即ちシミュレータ部１２は、図１２のシミュレーション設定ファイル３８に従って設定領域に対するアクセスを監視しながらシミュレーションを行い、得られた情報をシミュレーションログとしてシミュレーション情報ファイル４０に出力し、記憶領域１４を介して資源割付部１０に渡される。
【００６３】
図１３は、図７のステップＳ５のシミュレーションで出力されたシミュレーションログ８８の一例である。このシミュレーションログ８８にあっては、関数ｆ１（）の内部で１１００２０５０サイクル目にアドレス０ｘ８００００８番地へライトアクセスが発生し、その後、関数ｆ１（）からリターンした後、別の関数ｆ２（）がコールされ、その内部で１１００３０２１サイクル目で０ｘ８０００１０番地へのライトアクセスが発生し、更にその次のサイクルで０ｘ８０００１８番地へのライトアクセスが発生したことを示しており、その後、関数ｆ２（）から復帰している。
【００６４】
図７のステップＳ５でシミュレーションを完了すると、資源割付部１０はステップＳ６でシミュレーションログから評価対象区間の実行に要した処理サイクル数即ち実行時間を求め、ステップＳ７で目標性能をクリアしているか否かチェックする。
【００６５】
このとき、もし目標性能をクリアしていない場合には、データ領域のメモリ配置をどのように調整しても目標性能には到達し得ないため、資源割付処理結果としてエラーを介してエラー終了とする。このエラー終了となった場合には、対象としているプロセッサシステムの基本性能、即ち動作クロックやメモリバンド幅などを改善するか、プログラムのアルゴリズムの高速化などを行い、改めて最初から本発明によるメモリ資源最適化支援処理をやり直すことになる。
【００６６】
ステップＳ７でシミュレーションによる実行時間が目標性能をクリアしている場合には、メモリ配置最適化処理６６におけるステップＳ８〜Ｓ１０の処理に移行する。
【００６７】
このメモリ配置最適化処理６６は、ステップＳ８で、シミュレーション結果を解析して値が大きいほど高速メモリ領域に配置する必要性が高くなる重みを設定し、ステップＳ９で重み順に各データ領域を配列する重み順に並べたデータ領域配列の中の高速メモリ領域への配置を必要とするデータ領域の境界を探索する境界探索処理を行う。この機用階探索処理は、重み順データ領域配列の中で、高速メモリ領域への配置を必要とするデータ領域と、低速メモリ領域への配置でかまわないデータ領域との境界を探索する。
【００６８】
更にステップＳ１０で、境界探索で求められた高速メモリ領域への配置を必要とする重み順データ領域配列から重みの大きい順にデータ領域を取り出して、実メモリを仮想した高速メモリ領域への配置を調整する配置最適化処理を行う。
【００６９】
そこで、このステップＳ８〜Ｓ１０における各処理を詳細に説明すると次のようになる。まずステップＳ８の重み付け処理とステップＳ９の境界探索処理は、次の理由により行う。
【００７０】
ステップＳ７でシミュレーション結果が目標性能をクリアしていた場合には、高速メモリ領域と同速度のアクセスが可能であると仮定した全データ領域のうち、一部低速メモリに配置し残りを高速メモリ領域へ残した状態でも、目標性能がクリアできる筈である。一般に高速メモリ領域はＳＲＡＭなどで構成され、部品コストが高い。そのため、高速メモリの搭載を最小限に抑え且つ目標性能を得られる境界点を求めることが重要である。
【００７１】
ステップＳ９の境界探索処理は、この境界点を求めるものである。境界探索の前処理として、シミュレーションログから得られた各データ領域のアクセス頻度をもとに、ステップＳ８で各データ領域の重み付け処理を行う。
ステップＳ８の重み付け処理は、資源割付部１０がシミュレーションログを解析し、各データ領域におけるメモリのアクセス頻度等を調べて各データ領域への重み付けを行う。
【００７２】
例えばデータ領域の重みは、アクセス頻度ｆとデータ領域サイズｓを用いて、Ｗ（ｆ，ｓ）で表わされる。重みＷ（ｆ，ｓ）の例としては、アクセス頻度の多いものほど処理速度の影響の生ずる領域として大きな値の重みを付け、逆にアクセス頻度の少ないデータ領域は重みを小さくする。
【００７３】
またアクセス頻度が同じである場合、領域サイズが小さいほど高速メモリにおいても他に影響を与えないので、高速メモリに置いた場合に圧迫する大きなサイズのデータ領域に比べ重みを大きくする。
【００７４】
図１４は、このような重み設定の基準に基づく重み付け処理の詳細を示したフローチャートである。この重み付け処理は、まずステップＳ１でシミュレーションログを解析し、各データ領域のアクセス頻度を測定する。
【００７５】
次にステップＳ２で、アクセス頻度の高いデータ領域を上位、アクセス頻度の低い領域を下位としてソートする。ステップＳ３では、同じアクセス頻度のデータ領域については領域サイズの小さいものほど高速メモリに格納しても他の格納データ領域を圧迫しないという判断で上位に順位付けする。このステップＳ１〜Ｓ３の手順で全てのデータ領域をソートした後、ソート順に従って重み付けを行う。
【００７６】
この重み付けの手法は、アクセス頻度ｆとデータ領域サイズｓを用いて重みをＷ（ｆ，ｓ）として表現しているが、他の方法による重み付けであっても構わない。
【００７７】
このようにして重み付け処理の終わった各データ領域は
（１）領域サイズ
（２）重み
（３）最初のアクセス時刻
（４）最初のアクセスから最後のアクセスまでのアクセス継続期間
を記録して管理する。この重み付け処理の終わった各データ領域のＣ言語記述による管理データ構造を図１５に示す。
【００７８】
図１５は重み付けの済んだ各データ領域のデータ構造としてＡＲＥＡデータ構造体９０を記述している。このＡＲＥＡデータ構造体９０は、データ領域の名称「ａｒｅａｎａｍｅ」に続いて重み「ｗｅｉｇｈｔ」、領域サイズ「ｓｉｚｅ」、最初のアクセス時刻「ｓｔａｒｔｔｉｍｅ」、アクセス継続時間「ｌｉｆｅｔｉｍｅ」を記述している。なお、このデータ構造には更に、ＳＥＧデータ構造体１０６及びＬＩＦＥデータ構造体１０８を設けているが、この点については後の説明で明らかにする。
【００７９】
図７において、ステップＳ８の重み付け処理が終了すると、ステップＳ９で境界探索処理を行う。図１６は、この境界探索処理の詳細を示したフローチャートである。
【００８０】
図１６において、ステップＳ１で資源割付部１０が、重みが最小のデータ領域が格納されていたメモリ領域についてのみ、メモリのウェイトサイクル設定を本来の低速のウェイトサイクルに設定し、ステップＳ２でシミュレーションログに基づいて処理サイクル数（実行時間）を再計算する。
【００８１】
この再計算の結果、ステップＳ３で目標性能がクリアできているか否かチェックし、クリアできていればステップＳ４に進み、次に重みの小さいデータ領域に対し同様にウェイトサイクルを低速メモリのウェイトサイクルに設定し直し、ステップＳ２で処理時間を再度、計算する。
【００８２】
以下同様にして、ステップＳ２〜Ｓ４で高速メモリに置いたと仮定した各データ領域の重みの小さい領域から順番に低速メモリのウェイトサイクルに設定変更しながら、処理時間の計算を繰り返す。
【００８３】
この処理の繰り返しで、ステップＳ３で目標性能がクリアされないことが判別されると、ステップＳ５に進み、最後に低速メモリのウェイトサイクルに設定したデータ領域を高速メモリのウェイトサイクルの設定に戻した後、このときのデータ領域の重みを境界値として保存し、境界探索処理を終了する。
【００８４】
ここで図１６の境界探索処理にあっては、重みの小さなデータ領域から順に探索処理を行っているが、他の探索アルゴリズムを適用してもよい。例えば、境界探索アルゴリズムとして２分法によるアルゴリズムが適用できる。
【００８５】
２分法による境界探索処理は、重み順にソートしたデータ領域の配列を２分し、中央の重みから最小重みまでのデータ領域配列につき、各データ領域を低速のウェイトサイクルに設定して処理時間を計算し、目標性能をクリアしていれば、中央の重みから最大重みまでのデータ領域配列を２分の１にして、その半分まで即ち重みの小さい側の合計で全体の４分の３までを更に低速のウェイトサイクルに設定して処理時間を計算し、逆に目標性能をクリアしていなければ、全体の小さい重み側の４分の１までを低速のウェイトサイクル、重みの大きいほうの４分の３を高速のウェイトサイクルに設定して処理時間を再計算していくという手順の繰り返しによって境界を探索する。
【００８６】
このようにして高速メモリ領域に配置すべきデータ領域の境界が探索できると、図７のステップＳ１０において、重みの大きい高速メモリ領域に配置すべきデータ領域を対象にメモリ配置を調整する配置最適化処理を行う。
【００８７】
この配置最適化処理に至る前の重み付け処理及び境界探索処理は、高速メモリ領域のサイズを考慮せず、目標性能を得るためにどれだけのデータ領域を高速メモリに置かなければならないか、またどれだけのデータ領域を低速メモリに配置しても目標性能が確保できるかという点に着目して進めてきた手法である。
【００８８】
これに対しステップＳ１０の配置最適化処理によるメモリ配置の調整は、高速メモリ領域のサイズを本来のプロセッサシステムモデルと同等に制限し、この制限した高速メモリ領域の中で、高頻度アクセスが必要なデータ領域について各データ領域の配置調整を行う。
【００８９】
図１７は、図７のステップＳ１０における配置最適化処理の詳細を示したフローチャートである。
【００９０】
図１７の配置最適化処理にあっては、まずステップＳ１で高速メモリに配置しなくてはならないデータ領域の中で最大の重みを持つデータ領域を選択する。続いてステップＳ２で、選択した最大の重みを持つデータ領域のサイズをもとに、このデータ領域の生存時間の間、高速メモリ領域に空きがあって配置可能かどうかを調べる。
【００９１】
高速メモリ領域に配置可能であれば、ステップＳ６に進んで、処理対象となっているデータ領域を高速メモリ領域へ割り当てる配置アドレス解決処理を実行する。一方、ステップＳ２で高速メモリ領域に配置できない場合には、ステップＳ３の領域細分化処理により対象データ領域をより細かなデータ領域に分割する。ここで対象データ領域を分割した領域をデータセグメントという。
【００９２】
次にステップＳ４で分割されたデータセグメントのうち最初にアクセスされるデータセグメントを１つ選択し、ステップＳ５で高速メモリ領域に配置可能か否かチェックする。
【００９３】
ここでデータセグメントが高速メモリ領域に配置可能であれば、ステップＳ６の配置アドレス解決処理に移行する。ステップＳ５でデータセグメントの高速メモリ領域への配置ができない場合には、ステップＳ１１に進み、更に細分化は可能か否かチェックし、可能であれば細分化の閾値を変更してステップＳ３に戻り、再度、領域細分化処理を行う。
【００９４】
ステップＳ６で配置アドレス解決処理が済むと、ステップＳ７のデータ転送処理設定を経て、ステップＳ８に進み、未配置のデータセグメントが残っていれば、ステップＳ１３で残りのデータセグメントから１つ選択した後、再びステップＳ５に戻り、データセグメントの高速メモリ領域への配置可能性をチェックする。
【００９５】
このステップＳ５〜Ｓ８，Ｓ１３の処理の繰り返しによりデータセグメントの処理が終わるかデータセグメントを更に分割したセグメントの処理が終わると、ステップＳ８からＳ９に進み、未配置のデータ領域が残っていれば、ステップＳ１０で次に重みの大きなデータ領域を選択して、ステップＳ２からの処理を繰り返す。
【００９６】
ここで、図１７の配置最適化処理で各データ領域をメモリ領域に配置した際の配置情報の取扱いを説明する。メモリ領域は物理的にはアドレスが対応付けられているだけなので、アドレス方向への１次元の概念で領域を表現することができる。
【００９７】
しかし、アプリケーション稼動時のメモリ管理を考慮する場合には、メモリ領域の使用状況に時間軸の概念を加えて２次元のメモリ管理を行う必要がある。これは、同じメモリアドレスでも時間が違えば異なるデータを配置できるからである。
【００９８】
図１８は、時間軸を考慮した各データ領域のメモリ配置の説明図である。図１８の例にあっては、縦軸方向に配置した実メモリ領域９２のメモリアドレスに対し、横軸方向に時間Ｔを取り、メモリ管理を２次元で行っている。
【００９９】
この例では＃１〜＃６で示す６つのデータ領域９４，９６，９８，１００，１０２，１０４のデータセグメントを例にとっている。このうち＃５データ領域はデータセグメント１０２−１，１０２−２に細分化されており、それぞれアクセス継続時間としてｌｉｆｅ１，ｌｉｆｅ２，ｌｉｆｅ３を持っている。即ち、この例では＃５データ領域１０２が１回で配置されず、細分化されたデータセグメント１０２−１，１０２−２として時間をずらして配置されている。
【０１００】
このような時間軸を考慮したデータ領域のメモリ配置情報は、図１５のＡＲＥＡデータ構造体９０を用いて管理し、データ領域を最適化した場合のセグメント個数や時間軸方向のデータ生存回数などが処理依存で可変なため、この実施形態ではリスト構造を用いている。
【０１０１】
本発明でメモリ配置するデータ領域はＡＲＥＡデータ構造体９０で表現され、
（１）データ領域名（ａｒｅａｎａｍｅ）
（２）領域の重み（ｗｅｉｇｈｔ）
（３）データ領域サイズ（ｓｉｚｅ）
（４）データ領域のアクセス開始時刻（ｓｔａｒｔｔｉｍｅ）
（５）データの生存時間（ｌｉｆｅｔｉｍｅ）
（６）セグメントへのポインタ（ｎｅｘｔｓｅｇｍｅｎｔ）
（７）配置アドレス（ａｄｒｓ）
初期段階で各データ領域はデータ領域名とサイズのみの値を持っており、シミュレーションログの解析と重み付け処理を経て、重み、アクセス開始時刻及び生存時間を確保する。その後、データ領域の細分化処理が行われたときに初めて、細分化されたデータセグメントの情報を全て数珠繋ぎにリンクするポインタが生成される。なおデータセグメントへのポインタの初期値は０である。
【０１０２】
図１５において、ＡＲＥＡデータ構造体９０は、細分化されるとＳＥＧデータ構造体１０６を生成し、そこへのポインタをＡＲＥＡデータ構造体９０の「ｎｅｘｔｓｅｇｍｅｎｔ」にセットする。更に細分化されたセグメントがあれば、最初のＳＥＧデータ構造体１０６の「ｎｅｘｔｓｅｇｍｅｎｔ」に次のセグメントへのポインタをセットする。
【０１０３】
また各データセグメントにはデータの生存時間があり、ある時間からアクセスが始まり、ある時間でアクセスが停止する。そして、そのまま二度とアクセスされないこともあれば、再びある時間の経過後アクセスされることもある。
【０１０４】
このデータセグメントの生存時間を、図１５にあってはＬＩＦＥデータ構造体１０８で表現している。このＬＩＦＥデータ構造体１０８は、あるデータセグメントについて生存時間が何度も現れる場合には次の生存時間へのポインタを「ｎｅｘｔｌｉｆｅ」にセットし、数珠繋ぎにリンクする。
【０１０５】
図１９は時間軸を考慮したメモリ配置において、＃５データ領域を細分化したデータセグメント１０２−１，１０２−２の生存時間を示しており、＃５データ領域のデータセグメント１０２−１はアクセス時刻ｔ１から生存時間ｌｉｆｅ１を持ち、次のデータセグメント１０２−２はアクセス開始時刻ｔ２から生存時間ｌｉｆｅ２を持ち、更に一度出現したデータセグメント１０２−１はアクセス開始時刻ｔ３から生存時間ｌｉｆｅ３を持っている。
【０１０６】
図２０は、図１９における＃５データ領域のデータセグメントのポインタによるリンク構成を示している。
【０１０７】
図２０において、＃５データ領域のＡＲＥＡデータ構造体１０２は、ポインタ１１２により細分化したデータセグメントであるＳＥＧデータ構造体１０２−１をリンクしている。ＳＥＧデータ構造体１０２−１は、ポインタ１１４により更に細分化したデータセグメントであるＳＥＧデータ構造体１０２−２をリンクしている。またＳＥＧデータ構造体１０２−１は生存時間が２回現れることから、この２回目の生存時間についてポインタ１１６によりＬＩＦＥデータ構造体１０３をリンクしている。
【０１０８】
図２１は、図１７のステップＳ２及びＳ５における高速メモリ領域配置可否判定の詳細を示したフローチャートである。この図２１における高速メモリ領域の配置の可否判定処理を、図２０に示したようなデータ領域のデータ構造に基づいて説明すると次のようになる。
【０１０９】
図２１において、まずデータ領域はＡＲＥＡデータ構造体のメンバーとして、データサイズ、アクセス開始時刻及びアクセス開始時間を図１５に示したように保持しているため、高速メモリ領域の使用状況チェックの最初の処理として、ステップＳ１で既に配置が済んでロックされたデータ領域のリストから同じ時刻帯に高速メモリ領域を使用するデータ領域即ち時刻衝突する時刻領域が存在するかどうか検査し、衝突データ領域あるいは衝突データセグメントのリストを生成する。
【０１１０】
図２２は、図２１のステップＳ１の衝突データ領域あるいは衝突セグメント領域を検出する時刻衝突データ領域検出処理のフローチャートである。
【０１１１】
図２２の時刻衝突データ領域検出処理にあっては、ステップＳ１で既に配置の済んだデータ領域をＡＲＥＡデータ構造体のポインタ配列ａｒｅａ［ｉ］とする。ここでポインタｉは、０＜ｉ＜配置済みデータ領域数［ＭＡＸＡＲＥＡＮＵＭ］である。
【０１１２】
続いてステップＳ２で、配置対象データ領域または対象データセグメントのメモリ使用開始時刻を［ｓｔａｒｔｔｉｍｅ］とし、使用期間を［ｌｉｆｅｔｉｍｅ］とする。そして、他の配置済みデータ領域のデータアクセスが使用開始時刻［ｓｔａｒｔｔｉｍｅ］から使用期間［ｌｉｆｅｔｉｍｅ］の間に重ならないかどうかを検査する。重なる場合にはステップＳ３に進み、衝突リストｃｏｎｆｌｉｃｔｌｉｓｔ［　］にポインタｐを追加する。
【０１１３】
続いてステップＳ４で配置済みデータ領域が次のセグメント［ｎｅｘｔｓｅｇｍｅｎｔ］を持っていることを判別した場合には、ステップＳ５で更にポインタｐによるリンクを辿って、次のセグメントにつきステップＳ７から再びステップＳ２に戻って、同様な処理を繰り返す。
【０１１４】
ステップＳ４で配置済みデータ領域の全てのセグメントを辿って検査処理が済むと、ステップＳ６で次の配置済みのデータ領域をポインタｐにセットし、ステップＳ７からステップＳ２に戻って、同様の検査処理を繰り返す。そしてステップＳ７で全ての配置済みデータ領域についての検査処理の終了が判別されると一連の処理を終了し、衝突データ領域及び衝突データセグメント領域のリストｃｏｎｆｌｉｃｔｌｉｓｔ［　］が完成する。
【０１１５】
次に、図２１のステップＳ２で、図２２の処理で得られた衝突データ領域リストに格納された配置済みデータ領域または配置済みデータセグメントの配置アドレスを検査し、対象データ領域の配置に適切な必要最小限の空き容量を算出する。
【０１１６】
図２３は、図２１のステップＳ２における対象データ領域を配置する空き領域探索の説明図である。図２３において、実メモリ領域と時間の２次元で表わされたメモリ領域に対し、対象データ領域１２０を配置するための空き領域を検出しようとしている。対象データ領域１２０は使用時間「ｆｉｌｅ　１」を持ち、またサイズ「ｓｉｚｅ　１」を持っている。
【０１１７】
一方、実メモリ領域には既にデータ領域１２２，１２４，１２５，１２６及び１２８が配置済みである。このような配置済みのデータ領域１２２〜１２８に対し、対象データ領域１２０の使用期間「ｌｉｆｅ　１」について、斜線部で示す４つの空きエリア１３０−１，１３０−２，１３０−３，１３０−４が存在している。
【０１１８】
図２１のステップＳ２の処理にあっては、このような対象データ領域１２０について配置済みデータ領域の中から斜線部の空きエリア１３０−１〜１３０−４を検出し、対象データ領域１２０のサイズ「ｓｉｚｅ　１」を満たす例えば未使用エリア１３０−２を検出して配置する。
【０１１９】
図２４は、図２３のような空き領域の探索処理を実現する図２１のステップＳ２の配置先領域検索処理の詳細を示したフローチャートである。
【０１２０】
図２４にあっては、衝突リストにある領域に隣接する空き領域を全て検査しながら、対象データ領域のサイズを下回る空き領域は破棄し、対象データ領域が配置可能なサイズの空き領域があれば、その空き領域の中で最小の領域を出力する。
【０１２１】
まずステップＳ１で、対象領域の配置に必要なサイズを「ｔａｒｇｓｉｚｅ」にセットする。またステップＳ２で、隣接する空き領域ｊの下限アドレス「ｍｉｎ」をメモリ領域最後尾「ＭＡＸＭＥＭＯＲＹ」にセットする。続いてステップＳ３で、衝突リスト「ｃｏｎｆｌｉｃｔｌｉｓｔ［　］」からｉをパラメータとして、隣接する空きをチェックする対象となる衝突領域を１つ取り出し、検査を開始する。
【０１２２】
この場合、取り出した衝突領域と別にもう１つｊをパラメータとして次の衝突領域を順に取り出し、検査対象の衝突領域との配置関係を検査する。検査対象の衝突領域の最後尾「ｃｏｎｆｌｉｃｔｌｉｓｔ［ｉ］→ａｄｒｓ＋ｃｏｎｆｌｉｃｔｌｉｓｔ［ｉ］→ｓｉｚｅ」の次に取り出した衝突領域の先頭「ｃｏｎｆｌｉｃｔｌｉｓｔ［ｊ］→ａｄｒｓ」が大きければ、その間に空き領域が存在することになる。
【０１２３】
空き領域が存在すれば、ステップＳ４で、これまでに得られた空き領域のサイズの下限「ｍｉｎ」と比較し、これより大きければ空き領域のサイズを変更する必要はないことから、ステップＳ７に進んで、パラメータｉを増加してステップＳ３に戻り、次の空き領域の検査に進む。
【０１２４】
空き領域のサイズがデータ領域のサイズより小さければ、ステップＳ４からステップＳ５に進み、データ領域のサイズ「ｔａｒｇｓｉｚｅ」よりも大きいかどうか検査し、大きければステップＳ６に進んで、空き領域のサイズを「ｍｉｎ＝ｃｏｎｆｌｉｃｔｌｉｓｔ［ｊ］→ａｄｒｓ」として縮小する。
【０１２５】
一方、ステップＳ５で空き領域が配置したいデータ領域のサイズよりも小さくなってしまう場合には、この隣接した空き領域は不適切であるため、ステップＳ１１に進んでパラメータｉを増加して、ステップＳ２に戻り、次の空き領域の検査に移る。
【０１２６】
またステップＳ７で衝突リストの最後まで進んだことが判別されると、ステップＳ８に進んで、空き領域のサイズ「ａｒｅａ」がこれまでに得られた対象データ領域の格納に適した最小空き領域よりも小さいかどうか、ステップＳ９で「ｍｉｎａｒｅａ＞ａｒｅａ？」として判断する。
【０１２７】
現在得られている空き領域がこれまでに得られた最小空き領域よりも小さければ、ステップＳ１０に進んで、現在得られている空き領域を「ｍｉｎ＝ａｒｅａ」として、新たな配置先候補にセットし、更に「ｌｏｃａｔｉｏｎ＝ｃｏｎｆｌｉｃｔｌｉｓｔ［ｉ］→ａｄｒｓ＋ｃｏｎｆｌｉｃｔｌｉｓｔ＋［ｉ］→ｓｉｚｅ」として、配置先のアドレスを保存する。
【０１２８】
このようなステップＳ１〜Ｓ１１の処理を繰り返し、ステップＳ１１で配置済みデータ領域数をパラメータｉが超えると、処理を終了し、必要最小限の空き領域の先頭アドレスであるｌｏｃａｔｉｏｎを検索することができる。
【０１２９】
再び図２１を参照するに、ステップＳ２で図２４のフローチャートに従って対象データ領域または対象データセグメントの配置に必要な最小限の空き領域の確保がステップＳ３で判別されると、ステップＳ４に進み、その空き領域の情報を退避して成功ステータスをセットし、図１７の処理にリターンする。一方、ステップＳ３で空き領域が確保できなければ、ステップＳ５で空き領域なしの失敗ステータスをセットして図１７の処理にリターンする。
【０１３０】
図２５及び図２６は、図１７のステップＳ３における領域細分化処理の詳細を示したフローチャートである。この細分化処理における基本方針は、細分化を行う対象データ領域のアクセス状況をシミュレーションログから再度解析し、関数のコールからリターンを１つの区切りとして、その期間にアクセスされた領域を１つのブロックとしてセグメント分割の単位と見なして処理していく。
【０１３１】
図２５において、まずステップＳ１でシミュレーションログから対象データ領域へのアクセス、及び関数コールと関数リターンの情報のみを抽出した細分化情報ファイルを生成する。続いてステップＳ２でメモリアクセスを示すフラグ「ｓｔａｒｔｆｌａｇ」及びネストレベル「ｎｅｓｔｌｅｖｅｌ」を０に初期化した後、ステップＳ３で細分化情報ファイルから１行ずつ取り込み、ステップＳ４で関数コールの発生を判別すると、ステップＳ５で関数ネストレベルを増加させ、ステップＳ３に戻る。
【０１３２】
またステップＳ６で関数からのリターンが発生したら、図２６のステップＳ１６を経由してステップＳ１８に進み、ネストレベルを１つ減少させる。ここで初期状態にあっては、ステップＳ２のようにネストレベルは０であり、メモリアクセスは「ｓｔａｒｔｆｌａｇ＝０」として未開始状態にある。
【０１３３】
ステップＳ３で読み込んだ細分化情報ファイルのある行について、メモリアクセスが出現すると、初期状態にあっては「ｓｔａｒｔｆｌａｇ＝０」であるので、ステップＳ４，Ｓ６，Ｓ７，Ｓ８からステップＳ１３に進み、新規のセグメント作成処理となる。
【０１３４】
この新規のセグメント作成処理にあっては、この時点でのネストレベルを記録し、セグメントの先頭アドレス「ｓｔａｒｔａｄｒｓ」をアクセスの発生したアドレス「ａｄｒｓ」に設定する。この時点でのセグメントサイズは、発生したメモリアクセスのデータサイズ例えば２バイトなどである。
【０１３５】
引き続きステップＳ３に戻って細分化情報ファイルを読み込み、メモリアクセスが続けば更にセグメントの作成は開始されているため、ステップＳ４，Ｓ６〜Ｓ８を介してステップＳ９に進み、アドレスチェックを行う。
【０１３６】
ステップＳ９にあっては、現在のセグメント先頭アドレス「ｓｔａｒｔａｄｒｓ」よりも小さなアドレス「ａｄｒｓ」をアクセスした場合には、ステップＳ１４で「ｓｔａｒｔａｄｒｓ＝ａｄｒｓ」としてセグメント先頭アドレスを更新する。
【０１３７】
またステップＳ１０で現在のセグメントの末尾「ｓｔａｒｔａｄｒｓ＋ｓｉｚｅ」よりも更に後ろのアドレスをアクセスした場合には、ステップＳ１１でセグメントサイズを「ｓｉｚｅ＝ａｄｒｓ−ｓｔａｒｔａｄｒｓ」として更新する。これにより、セグメントの領域を拡張していくことができる。
【０１３８】
セグメントの領域の拡張が終了するのは関数コールとリターンを単位としており、拡張中のセグメントを閉じる条件は、ステップＳ７でセグメントを作成したネストレベルよりも浅いレベルでメモリアクセスを行ったときとし、この場合にはステップＳ１５に進んでセグメントを閉じる処理を行う。
【０１３９】
また拡張中のセグメントを閉じる条件としては、図２６のステップＳ１６においてセグメントを作成したネストレベルよりも浅いレベルに更に関数リターンが発生したとき、ステップＳ１７に進んでセグメントを閉じるようにしてもよい。
【０１４０】
図２５のステップＳ１５または図２６のステップＳ１７でセグメントを閉じる際には、ＳＥＧ　　データ構造体にＳＥＧデータ構造体メンバーの「ｏｆｆｓｅｔ」，「ｓｉｚｅ」，「ｓｔａｒｔｔｉｍｅ」，「ｌｉｆｅｔｉｍｅ」といった必要な情報を書き込んで、そのＳＥＧデータ構造体を対象データ領域からポインタを辿った最後尾にリンクする。
【０１４１】
もちろん、このとき同一のセグメントが既に作成されていた場合には、ＳＥＧデータ構造体ではなくＬＩＦＥデータ構造体を新たに生成して、「ｓｔａｒｔｔｉｍｅ」と「ｌｉｆｅｔｉｍｅ」という必要な情報を書き込み、既に作成されたセグメントのＳＥＧデータ構造体の「ｎｅｘｔｌｉｆｅ」から辿ったＬＩＦＥデータ構造体の最後尾にリンクする。
【０１４２】
以上のような細分化処理を対象データ領域について行うことにより、対象データ領域から細分化された複数のセグメントに次々にリンクされた例えば図２０に示したようなリスト構造が完成する。
このようにして細分化されたデータセグメントについては、図１７のステップＳ４，Ｓ５において、細分化前のデータ領域に対する場合と同様にして、図２１の配置の可否判定処理を行う。
【０１４３】
もし配置が不可能な場合には、データセグメントの更なる細分化が行われないか否か判定する。データセグメントを更に細分化する手法の一例として、ネストレベルに閾値を持たせ、その閾値を超えた深さを単位として細分化する方法がある。
【０１４４】
図２７は、ネストレベルに閾値を持たせて閾値を超えた深さを単位として細分化する方法の細分化処理制御を示している。図２７において、縦軸が処理時間、横軸がネストレベルであり、ブロック１３２の中に示すように、斜線のブロックがメモリアクセスを示し、それを繋ぐラインが処理を示している。
【０１４５】
図２７において横軸のネストレベルに対しては、例えばある閾値１６０が設定されている。メモリアクセス１３４に続いて関数コールがあると、メモリアクセス１３６となり、更に関数コールがあるとメモリアクセス１３８に移行する。このときネストレベルが閾値１６０を超える。
【０１４６】
閾値１６０をネストレベルが超えた後、メモリアクセス１３８，１４０，１４２，１４４と関数コールによりネストレベルが深まり、メモリアクセス１４４の後、関数のリターンでネストレベルが戻ってメモリアクセス１４６となり、再び関数コールによりネストレベルが１つ深くなってメモリアクセス１４８，１５０となり、その後関数コールのリターンにより閾値１６０に戻ってメモリアクセス１５２，１５４となり、更に関数コールで最初に戻る。
【０１４７】
この場合、ネストレベルの閾値１６０を超えたメモリアクセス１３８〜１５０により、セグメント化されたメモリアクセス１６２が形成される。
【０１４８】
図２８は、図２７に対し更にネストレベルの閾値を閾値１６４のように深くした場合である。この場合の同様な関数コールとリターンによるメモリアクセスに対し、ネストレベルを深くした閾値１６４により、図２７の７つのメモリアクセスを含むセグメント化されたメモリアクセス１６２に対し、図２８にあっては、５つのメモリアクセスを含むセグメント化されたメモリアクセス１６６となり、より小さな細分化が実現できる。
【０１４９】
一方、細分化を繰り返してもセグメントの配置ができない場合には、そのデータ領域は高速メモリ領域に配置不可能と判断し、配置ができなかったデータ領域は低速メモリ側へ配置するものとして、高速メモリ配置対象のリスト配列ａｒｅａ［　］から外す。
【０１５０】
一方、細分化したセグメントが配置可能である場合には、配置可能判定時に調査した空き領域へ配置するように、ＳＥＧデータ構造体のメンバー「ａｄｒｓ（アドレス）」に配置アドレスの値をセットする。
【０１５１】
ここで細分化によってもデータセグメントの配置ができない場合、その対象データ領域を低速メモリ側に追い出して次に重み付けの大きいデータ領域の処理に移行するようになるが、１つのデータ領域が低速メモリ側に追い出されることによって全体の処理時間が長くなり、性能不足に陥る可能性がある。
【０１５２】
これを解消するため、配置ができなかった対象データを低速メモリに追い出した後、低速メモリ側にある次に重みの大きいデータ領域を高速メモリ側に移すことにより、高速メモリ領域に配置ができなかったデータ領域を低速メモリ側に追い出すことによる全体の処理時間が長くなって性能不足に陥る問題を解消できる。
【０１５３】
以上のような一連の処理手順を経て最適化されたメモリ配置と配置のタイミングは、図３のデータの流れに示すように、資源割付部１０よりメモリ配置情報のファイルとして出力される。
【０１５４】
また図６のフローチャートに示したように、ステップＳ４でメモリ配置最適化処理を行ってステップＳ５で配置が成功すると、ステップＳ６で高速メモリ領域のサイズ設定を更に縮小し、ステップＳ４に戻って再度、メモリ配置最適化処理を繰り返し、アプリケーションを実行するための目標性能を満たす最小限の高速メモリ容量を求めることができる。
【０１５５】
またユーザは、メモリ最適化処理によって出力される各データ領域のメモリ配置及びこれを参照して初期配置からどのような高速メモリへデータを転送しまた入れ替えればよいかを知ることができるため、最適なデータ配置状態をプログラミングすることが容易となる。
【０１５６】
更に、最適化を行った結果のメモリ配置として高速メモリ領域に常駐的に置いておくデータがあれば、この常駐データをオブジェクトリンク時に高速メモリ領域に配置されるようにリンカ設定ファイルへ設定すればよい。
【０１５７】
最後に、図１７のフローチャートのステップＳ７における配置を調整したデータ領域のデータ転送処理設定について説明する。このデータ転送処理設定は配置最適化の結果を反映してシミュレーションを行うための処理であり、このデータ転送配置処理は行わなくてもメモリ配置の最適化自体は可能であり、その理由は初期化検査のシミュレーションによって得られるシミュレーションログによってメモリアクセスの情報は既に獲得しており、このメモリアクセスの情報をもとに図１７の配置最適化処理が全て実現できるためである。
【０１５８】
このためデータ転送処理設定は、配置最適化処理によって配置を決定した各データ領域について、実際に低速メモリ領域から高速メモリ領域へデータを入れ替えてシミュレーションを行うためのものである。これによって転送によるオーバーヘッド見積もりができるようになるため、配置最適化を適用した場合の性能見積もりの精度が向上する。
【０１５９】
データ転送処理の方法はいくつかあるが、ここではシミュレータ部１２が設定した期間に設定領域をバンク切替できる機能を持っている場合を例に取る。シミュレータ部１２のバンク切替えは、任意のデータ領域を別の任意のデータ領域にマッピングでき、その切替えを時刻指定できる。
【０１６０】
そこで資源割付部１０は、バンク切替えのシミュレーション設定として、配置最適化処理によって得られた各データ領域及びデータセグメントの配置情報であるアドレス、サイズ、時間をシミュレータ部１２に出力して設定する。
【０１６１】
図２９は、このためのバンク切替シミュレーション設定ファイル１７０である。図２９において、バンク切替シミュレーション設定ファイル１７０は、この例にあっては１１２０サイクルで０ｘ８００３０００から０ｘ２００サイズの範囲を０ｘ２００２００からのメモリ内容に置き換え（コピー）するものである。
【０１６２】
後続する１３５０サイクル目及び１８００サイクル目も同様である。また、この例では、バンク切替えに相当するＤＭＡ転送を行った場合に、そのＤＭＡ転送設定に要するサイクル数を標準的なオーバーへッドとして２５サイクルと定義している。
【０１６３】
このようなバンク切替シミュレーション設定ファイル１７０による設定で本来のメモリウェイトサイクルによるシミュレーションを実行すると、データが高速メモリ領域に置かれていなくてはならない期間の始まりでシミュレータ部１２によるバンク切替えによって瞬時に必要なデータが高速メモリ領域に転送されたかのようにシミュレーションでき、プログラムによってあるいはＤＭＡ転送によって高速メモリ領域へデータ転送を行った場合と同様のシミュレーション動作が可能となる。
【０１６４】
このようなデータ転送設定をシミュレータ部１２に行うことにより、最適配置の結果にＤＭＡ転送の設定オーバーヘッドを加味した精度の高いシミュレーションを行うことができる。
【０１６５】
一方、ＤＭＡ転送オーバーヘッドを０としたシミュレーションはもちろん可能であるため、ＤＭＡ転送オーバーヘッドの合計を把握でき、全体性能をもし圧迫するならば、メモリ配置最適化の最初に設定する目標性能を更に厳しく設定して最終的な目標性能に近づけることも容易にできる。
【０１６６】
このように、アプリケーションプログラムに修正を入れずにシミュレーションによるＤＭＡ転送を含む処理が検証可能となり、検証が完了した段階でＤＭＡ転送のためのコードを追加するだけでよいことから、プログラムソースの変更を最小限に抑えることが可能となる。
【０１６７】
なお本発明は上記の実施形態に限定されず、その目的と利点を損なうことのない適宜の変形を含む。更に本発明は上記の実施形態に示した数値による限定は受けない。
【０１６８】
ここで本発明の特徴を列挙すると、次の付記のようになる。
（付記）
（付記１）
アクセス速度の異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレーションステップと、
前記シミュレーションステップで得られたシミュレーション結果に基づいて、前記プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付ステップと、
を備えたことを特徴とするメモリ資源最適化支援方法。（１）
【０１６９】
（付記２）
付記１のメモリ資源最適化支援方法に於いて、前記資源割付ステップは、前記シミュレーション結果を解析し、高速メモリ領域には可能な限りデータを配置せずにプログラムの目標実行速度を維持できるように、プログラム実行で使用するデータ領域を、高速メモリ領域と低速メモリ領域とに分配配置することを特徴とするメモリ資源最適化支援方法。（２）
【０１７０】
（付記３）
付記１のメモリ資源最適化支援方法に於いて、前記資源割付ステップは、
任意のメモリ領域に各データ領域を適当に配置して、全ての領域のアクセスサイクルを高速メモリと同一に設定し、目標性能にと立つし得るか否か検査する初期検査ステップと、
前記初期検査ステップで実行時間が目標実行時間以内の場合、前記シミュレーション結果を解析して、値が大きいほど高速メモリ領域に配置する必要性が高くなる重みを設定して重み順に各データ領域を配列する重み付けステップと、
前記重み順データ領域配列の中で、高速メモリ領域への配置を必要とするデータ領域と、低速メモリ領域への配置でかまわないデータ領域との境界を探索する境界探索ステップと、
前記境界探索で求められた境界の高速メモリ領域側の重み順データ領域配列から、重みの大きい順にデータ領域を取り出して実メモリを仮想した高速メモリ領域への配置を試行し、配置可能な場合は配置後にその領域をロックして重複配置を禁止する処理を繰り返す配置最適化ステップと、
を備えたことを特徴とするメモリ資源最適化支援方法。（３）
【０１７１】
（付記４）
付記３のメモリ資源最適化支援方法に於いて、前記重み付けステップは、各データ領域の重みを、前記シミュレーション結果におけるアクセス頻度とデータ領域サイズに基づいて設定することを特徴とするメモリ資源最適化支援方法。
【０１７２】
（付記５）
付記４のメモリ資源最適化支援方法に於いて、前記重み付けステップは、前記アクセス頻度が多いほど大きな値の重みを設定し、且つデータ領域サイズが小さいほど大きな値の重みを設定することを特徴とするメモリ資源最適化支援方法。
【０１７３】
（付記６）
付記３のメモリ資源最適化支援方法に於いて、前記境界探索ステップは、全データ領域を高速メモリ領域に配置したと仮定した後、重みの小さいデータ領域から順番に低速メモリ領域に配置変更したと仮定して、前記配置変更に対応したメモリウェイトサイクルを前記シミュレーション結果に設定することにより実行時間を再計算し、再計算した実行時間が目標実行時間を越えるまで処理を繰り返して、前記重み順データ領域配列の中の高速メモリ領域への配置を必要とするデータ領域の境界を探索することを特徴とするメモリ資源最適化支援方法。
【０１７４】
（付記７）
付記３のメモリ資源最適化支援方法に於いて、前記境界探索ステップは、全データ領域を高速メモリ領域に配置したと仮定した後、前記重み順データ領域配列を２分して小さい重み側の各データ領域を低速メモリ領域に配置したと仮定して、前記配置変更に対応したメモリウェイトサイクルを前記シミュレーション結果に設定することにより実行時間を再計算し、再計算した実行時間が目標実行時間に比べ小さい場合は、高速メモリ領域に残したデータ領域をさらに２分して小さい重み側を低速メモリ領域に配置し、大きい場合は低速メモリ領域に移したデータ利領域をさらに２分して大きい重み側を高速メモリ領域へと配置したと仮定して再計算を行うという処理を繰り返して、前記重み順データ領域配列の中の高速メモリ領域への配置を必要とするデータ領域の境界を探索することを特徴とするメモリ資源最適化支援方法。
【０１７５】
（付記８）
付記３のメモリ資源最適化支援方法に於いて、前記配置最適化ステップは、実メモリを仮想した高速メモリ領域へのデータ領域の配置が出来ない場合、アクセスする時間情報に基づいて前記データ領域を細分化し、細分化したデータ領域が時間的に重ならないように前記高速メモリ領域への配置を試行することを特徴とするメモリ資源最適化支援方法。
【０１７６】
（付記９）
付記８のメモリ資源最適化支援方法に於いて、配置最適化ステップは、ネストレベルに閾値を持たせて閾値を超えた深さを単位として細分化するすることを特徴とするメモリ資源最適化支援方法。
【０１７７】
（付記１０）
付記３のメモリ資源最適化支援方法に於いて、前記配置最適化ステップは、実メモリを仮想した高速メモリ領域へのデータ領域の配置ができないことが確定した場合、前記データ領域を重み順データ領域配列の中の低速メモリ領域側に移した後に、低速メモリ領域側から重みの大きい順にデータ領域を高速データ領域側に移して高速メモリ領域への配置を試行することを特徴とするメモリ資源最適化支援方法。
【０１７８】
（付記１１）
付記３のメモリ資源最適化支援方法に於いて、前記配置最適化ステップは、重み順データ領域配列における高速メモリ領域側の全データの高速メモリ領域への配置が成功した場合、実メモリを仮想した高速メモリ領域のサイズを縮小して再度配置を試行することを特徴とするメモリ資源最適化支援方法。
【０１７９】
（付記１２）
コンピュータに、
アクセス速度の異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレーションステップと、
前記シミュレーションステップで得られたシミュレーション結果に基づいて、前記プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付ステップと、
を実行させることを特徴とするプログラム。（４）
【０１８０】
（付記１３）
ひ付記１２のプログラムに於いて、前記資源割付ステップは、前記シミュレーション結果を解析し、高速メモリ領域には可能な限りデータを配置せずにプログラムの目標実行速度を維持できるように、プログラム実行で使用するデータ領域を、高速メモリ領域と低速メモリ領域とに分配配置することを特徴とするプログラム。
【０１８１】
（付記１４）
付記１２記載のプログラムに於いて、前記資源割付ステップは、
任意のメモリ領域に各データ領域を適当に配置して、全ての領域のアクセスサイクルを高速メモリと同一に設定し、目標性能にと立つし得るか否か検査する初期検査ステップと、
前記初期検査ステップで実行時間が目標実行時間以内の場合、前記シミュレーション結果を解析して、値が大きいほど高速メモリ領域に配置する必要性が高くなる重みを設定して重み順に各データ領域を配列する重み付けステップと、
前記重み順データ領域配列の中で、高速メモリ領域への配置を必要とするデータ領域と、低速メモリ領域への配置でかまわないデータ領域との境界を探索する境界探索ステップと、
前記境界探索で求められた境界の高速メモリ領域側の重み順データ領域配列から、重みの大きい順にデータ領域を取り出して実メモリを仮想した高速メモリ領域への配置を試行し、配置可能な場合は配置後にその領域をロックして重複配置を禁止する処理を繰り返す配置最適化ステップと、
を備えたことを特徴とするプログラム。
【０１８２】
（付記１５）
付記１４のプログラムに於いて、前記重み付けステップは、各データ領域の重みを、前記シミュレーション結果におけるアクセス頻度とデータ領域サイズに基づいて設定することを特徴とするプログラム。
【０１８３】
（付記１６）
付記１５のプログラムに於いて、前記重み付けステップは、前記アクセス頻度が多いほど大きな値の重みを設定し、且つデータ領域サイズが小さいほど大きな値の重みを設定することを特徴とするプログラム。
【０１８４】
（付記１７）
付記１４のプログラムに於いて、前記境界探索ステップは、全データ領域を高速メモリ領域に配置したと仮定した後、重みの小さいデータ領域から順番に低速メモリ領域に配置変更したと仮定して、前記配置変更に対応したメモリウェイトサイクルを前記シミュレーション結果に設定することにより実行時間を再計算し、再計算した実行時間が目標実行時間を越えるまで処理を繰り返して、前記重み順データ領域配列の中の高速メモリ領域への配置を必要とするデータ領域の境界を探索することを特徴とするプログラム。
【０１８５】
（付記１８）
付記１４のプログラムに於いて、前記境界探索ステップは、全データ領域を高速メモリ領域に配置したと仮定した後、前記重み順データ領域配列を２分して小さい重み側の各データ領域を低速メモリ領域に配置したと仮定して、前記配置変更に対応したメモリウェイトサイクルを前記シミュレーション結果に設定することにより実行時間を再計算し、再計算した実行時間が目標実行時間に比べ小さい場合は、高速メモリ領域に残したデータ領域をさらに２分して小さい重み側を低速メモリ領域に配置し、大きい場合は低速メモリ領域に移したデータ利領域をさらに２分して大きい重み側を高速メモリ領域へと配置したと仮定して再計算を行うという処理を繰り返して、前記重み順データ領域配列の中の高速メモリ領域への配置を必要とするデータ領域の境界を探索することを特徴とするプログラム。
【０１８６】
（付記１９）
付記１４のプログラムに於いて、前記配置最適化ステップは、実メモリを仮想した高速メモリ領域へのデータ領域の配置が出来ない場合、アクセスする時間情報に基づいて前記データ領域を細分化し、細分化したデータ領域が時間的に重ならないように前記高速メモリ領域への配置を試行することを特徴とするプログラム。
【０１８７】
（付記２０）
請求項１９のメモリ資源最適化支援方法に於いて、前記配置最適化ステップは、
ネストレベルに閾値を持たせて閾値を超えた深さを単位として細分化するすることを特徴とするプログラム。
【０１８８】
（付記２１）
付記１４のプログラムに於いて、前記配置最適化ステップは、実メモリを仮想した高速メモリ領域へのデータ領域の配置ができないことが確定した場合、前記データ領域を重み順データ領域配列の中の低速メモリ領域側に移した後に、低速メモリ領域側から重みの大きい順にデータ領域を高速データ領域側に移して高速メモリ領域への配置を試行することを特徴とするプログラム。
【０１８９】
（付記２２）
付記１４のプログラムに於いて、前記配置最適化ステップは、重み順データ領域配列における高速メモリ領域側の全データの高速メモリ領域への配置が成功した場合、実メモリを仮想した高速メモリ領域のサイズを縮小して再度配置を試行することを特徴とするプログラム。
【０１９０】
（付記２３）
アクセス速度の異なる少なくとも２つ以上のメモリ領域を持つプロセッサシステムをモデル化してプログラムをシミュレーションするシミュレータ部と、
前記シミュレータ部の制御により前記プログラムを実行して得られたシミュレーション情報に基づいて、前記プロセッサシステムのメモリ資源の配置を調整して最適なメモリ配置を決定する資源割付部と、
前記シミュレータ部と資源割付部との間で情報を受け渡しするための記憶領域と、
を備えたことを特徴とするメモリ資源最適化支援装置。（５）
【０１９１】
【発明の効果】
以上説明してきたように本発明によれば、異なるアクセス速度を持つ複数のメモリ領域を備えたプロセッサシステムのモデルを対象にアプリケーションを目標時間内で処理するために必要なアクセス速度の異なるメモリ領域、特に高速メモリ領域の最小サイズを求めることができ、更にメモリ領域にどのようなデータを配置すれば最適であるかを知ることができ、これによってシステム設計時の見積もりやシステム検証にかかる開発時間を大幅に短縮することができる。
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】本発明によるメモリ資源最適化支援装置の基本構成のブロック図
【図３】本発明のメモリ資源最適化支援装置におけるデータの流れの説明図
【図４】本発明が対象とするプロセッサシステムのモデル説明図
【図５】本発明が対象とする他のプロセッサシステムのモデル説明図
【図６】本発明によるメモリ資源最適化支援処理の基本的な処理手順のフローチャート
【図７】図６のステップＳ１〜Ｓ４による初期検査処理とメモリ配置最適化処理の詳細を示したフローチャート
【図８】図７のステップＳ１で使用する目標値設定ファイルの説明図
【図９】図７のステップＳ２で取り込む初期設定ファイルの説明図
【図１０】図７のステップＳ３で使用するリンク設定ファイルの説明図
【図１１】図７のステップＳ３のリンク設定で出力されるリンク情報としてのＭＡＰファイルの説明図
【図１２】図７のステップＳ４で使用するシミュレーション設定ファイルの説明図
【図１３】図７のステップＳ４で得られるシミュレーションログの説明図
【図１４】図７のステップＳ８における重み付け処理の詳細を示したフローチャート
【図１５】本発明の資源割付処理において各データ領域の配置を表現するデータ構造の説明図
【図１６】図７のステップＳ９における境界探索処理の詳細を示したフローチャート
【図１７】図７のステップＳ１０における配置最適化処理の詳細を示したフローチャート
【図１８】本発明の配置最適化処理における時間軸を考慮したデータ配置の説明図
【図１９】図１８のデータ領域＃５におけるセグメント毎の生存期間の説明図
【図２０】図１４のデータ構造おけるデータ配置情報のリスト構造の説明図
【図２１】図１７のステップＳ２における配置の可否判定の詳細を示したフローチャート
【図２２】図２１のステップＳ１における時刻衝突データ領域検出処理の詳細を示したフローチャート
【図２３】図２２の時刻衝突データ領域検出処理による空き領域検索の説明図
【図２４】図２１のステップＳ２における配置先領域検索処理の詳細を示したフローチャート
【図２５】図１７のステップＳ８におけるデータ領域細分化処理の詳細を示したフローチャート
【図２６】図２５に続くデータ領域細分化処理のフローチャート
【図２７】ネストレベルの閾値による細分化制御の説明図
【図２８】図２７に対しネストレベルの閾値を深くした細分化制御の説明図
【図２９】本発明のデータ領域の転送処理設定に使用するバンク切替えシミュレーション設定ファイルの説明図
【符号の説明】
１０：資源割付部
１２：シミュレータ部
１４：記憶領域
１６：Ｃソースファイル
１８：コンパイラ
２０，２２：アセンブリソースファイル
２４：アセンブラ
２６：オブジェクトファイル
２８：ソース情報ファイル
３０：オブジェクト情報ファイル
３２：リンカ
３４：リンク設定ファイル
３６：初期設定ファイル
３８：シミュレーション設定ファイル
４０：シミュレーション情報ファイル（シミュレーションログ）
４２：メモリ配置情報
４４，５２：プロセッサ
４５，５８：バス
４６：メモリコントローラ
４８，５４：高速メモリ
５０，６２：低速メモリ
５６：通常メモリ
６０：Ｉ／Ｏコントローラ
６８：目標値設定ファイル
７０：初期設定ファイル
７２：リンク設定ファイル
７４：ＭＡＰファイル
７６：ラベル情報
７８：オブジェクト配置情報
８０：オブジェクトサイズ情報
８２：シミュレーション設定ファイル
８４：ウェイトサイクル設定
８６：アクセス監視設定
８８：シミュレーションログ
９０：ＡＲＥＡデータ構造体
９２，１１８：実メモリ領域
１０２−１，１０２−２：データセグメント
１０６：ＳＥＧデータ構造体
１０８：ＬＩＦＥデータ構造体
１１２〜１１６：ポインタ
１２０：対象データ領域
１３０−１〜１３０−３：空きエリア
１３２：割付データ領域
１６０，１６４：ネストレベル閾値
１６２，１６６：セグメント化メモリアクセス
【図１】
2004070862.tif 000003
【図２】
2004070862.tif 000004
【図３】
2004070862.tif 000005
【図４】
2004070862.tif 000006
【図５】
2004070862.tif 000007
【図６】
2004070862.tif 000008
【図７】
2004070862.tif 000009
【図８】
2004070862.tif 000010
【図９】
2004070862.tif 000011
【図１０】
2004070862.tif 000012
【図１１】
2004070862.tif 000013
【図１２】
2004070862.tif 000014
【図１３】
2004070862.tif 000015
【図１４】
2004070862.tif 000016
【図１５】
2004070862.tif 000017
【図１６】
2004070862.tif 000018
【図１７】
2004070862.tif 000019
【図１８】
2004070862.tif 000020
【図１９】
2004070862.tif 000021
【図２０】
2004070862.tif 000022
【図２１】
2004070862.tif 000023
【図２２】
2004070862.tif 000024
【図２３】
2004070862.tif 000025
【図２４】
2004070862.tif 000026
【図２５】
2004070862.tif 000027
【図２６】
2004070862.tif 000028
【図２７】
2004070862.tif 000029
【図２８】
2004070862.tif 000030
【図２９】
2004070862.tif 000031