(57)【要約】【課題】  全体としてプログラムの実行速度が低下してしまう場合があった。【解決手段】  キャッシュを搭載するシステムのメモリに対して、アプリケーションプログラムの有する関数を配置していく関数割付方法であって、前記アプリケーションプログラムの有する関数のコードサイズを取得し、前記キャッシュのキャッシュラインサイズ、および関数のコードサイズに基づいて併合可能な関数の組み合わせを抽出し、前記併合可能な関数の組み合わせに基づいて、関数の併合を行い、前記併合された関数を含む前記アプリケーションプログラムの有する関数を前記メモリに配置する。【選択図】  図７
2007148556.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュを搭載するシステムのメモリに対して、アプリケーションプログラムの有する関数を配置していく関数割付方法であって、
前記アプリケーションプログラムの有する関数のコードサイズを取得し、
前記キャッシュのキャッシュラインサイズ、および関数のコードサイズに基づいて併合可能な関数の組み合わせを抽出し、
前記併合可能な関数の組み合わせに基づいて、関数の併合を行い、
前記併合された関数を含む前記アプリケーションプログラムの有する関数を前記メモリに配置する関数割付方法。
【請求項２】
前記関数割付方法は、さらに、
前記併合可能な関数の組み合わせの関連度を算出して関連度リストを生成し、前記関数の併合は、前記併合可能な関数の組み合わせおよび前記関連度リストに基づいて行われることを特徴とする請求項１に記載の関数割付方法。
【請求項３】
前記関数の関連度は、関数が他の関数を呼び出す呼出回数に応じて設定されることを特徴とする請求項２に記載の関数割付方法。
【請求項４】
前記関数の関連度は、関数が呼び出す他の関数の数に応じて設定されることを特徴とする請求項２あるいは３に記載の関数割付方法。
【請求項５】
キャッシュを搭載するシステムのメモリに対して、アプリケーションプログラムの有する関数を配置していく関数割付装置であって、
前記関数のコードサイズを取得するコードサイズ取得部と、
前記関数のコードサイズおよび前記キャッシュのキャッシュラインサイズに基づいて併合可能な関数を選択する関数選択部と、
前記関数選択部の選択した関数の関連度情報に基づいて、当該関数を併合する関数併合部と、
前記併合された関数を含む前記アプリケーションプログラムが有する関数を前記メモリに配置するメモリ配置最適化部とを有する関数割付装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、関数と基本ブロックの命令キャッシュでのコンフリクト発生が低減するようにプログラムのメモリ空間への割付を行う配置割付装置および割付プログラムに関する。
【背景技術】
【０００２】
近年、ＣＰＵの高速化が急速に進み、ＤＲＡＭなどの外部メモリのアクセス時間とＣＰＵの処理速度のギャップは大きくなっている。そこで、ＣＰＵから高速にアクセスできるバッファであるキャッシュを設け、外部メモリ上のプログラムの一部をキャッシュ内にコピーして実行する技術が広く使用されている。
【０００３】
ここで、外部メモリ上に記憶されたプログラムは、例えばソースコードなどの高級言語で書かれたプログラムを変換し、ＣＰＵで実行することが可能な機械語コードなどで記述されたプログラムである。これらのプログラムは、様々なプログラム上の手続き、サブルーチン、処理（以下、これらをまとめて関数と称す）を有し、１つの関数が実行されるときに、他の関数を呼び出した結果に基づいた処理などを行っている。
【０００４】
上記したキャッシュには、外部メモリの一部がコピーされ、ＣＰＵがある関数を実行する場合に、その関数がキャッシュに保持されていれば、ＣＰＵとキャッシュがアクセスを行うことで全体の処理速度を向上させている。
【０００５】
また、実行する関数がキャッシュに保持されていない場合は、実行する関数を外部メモリからキャッシュにコピーし直した後に関数が実行される。したがって、キュッシュの書き換え（キャッシュコンフリクト）が、頻繁に発生するとプログラムの実行速度が低下してしまう。キャッシュは外部メモリの一部がコピーされるものであるため、ソースプログラムをコンパイルする際に、キャッシュコンフリクトを低減させるように外部メモリ上に関数を割り付ける方法が研究されている。
【０００６】
外部メモリはキャッシュのサイズで区切った領域に分割されている。また、キャッシュはキャッシュラインと呼ばれる特定のサイズに分割されている。上記した外部メモリからキャッシュへのコピーはキャッシュライン単位で行われる。
【０００７】
したがって、外部メモリ上で同一のキャッシュラインに割り当てられた関数は、プログラムの実行中に関数が切り替わるたびにキャッシュにコピーし直す必要が生じる。このキャッシュラインに対して外部メモリの関数の割付最適化方式として特許文献１に記載されている技術がある。
【０００８】
特許文献１に記載の技術では、ある関数が他の関数を呼び出す回数に関する情報、互いの関数の呼び出しの関係などからメモリに対する関数の配置を最適化する技術が記載されている。
【０００９】
しかしながら、例えば携帯電話などの装置では、内蔵できるキャッシュに限界があり、そのサイズは外部メモリと比較して極めて小さくせざるを得ない。したがって、実行するプログラムのどの部分をキャッシュに格納するかがプログラムを高速に実行する上できわめて重要となる。従来の技術のように関数同士の呼び出し関係などに基づいてメモリ上に配置すると、メモリ上の配置を考慮する関数が増加してしまう場合があった。このような場合、外部メモリにおいて未使用領域が増加してしまい、メモリの使用効率が低下してしまう場合があった。また、関数の増加に伴い同じキャッシュラインに割り当てられる関数が増加し、キャッシュコンフリクトが増加してしまう場合があった。
【特許文献１】特開２００１−２８２５４７号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
従来の関数のメモリ配置方法では、全体としてプログラムの実行速度が低下してしまう場合があった。
【課題を解決するための手段】
【００１１】
本発明の１態様による関数割付方法は、キャッシュを搭載するシステムのメモリに対して、アプリケーションプログラムの有する関数を配置していく関数割付方法であって、前記アプリケーションプログラムの有する関数のコードサイズを取得し、前記キャッシュのキャッシュラインサイズ、および関数のコードサイズに基づいて併合可能な関数の組み合わせを抽出し、前記併合可能な関数の組み合わせに基づいて、関数の併合を行い、前記併合された関数を含む前記アプリケーションプログラムの有する関数を前記メモリに配置する。
【００１２】
また、本発明の１態様による関数割付装置は、キャッシュを搭載するシステムのメモリに対して、アプリケーションプログラムの有する関数を配置していく関数割付装置であって、前記関数のコードサイズを取得するコードサイズ取得部と、前記関数のコードサイズおよび前記キャッシュのキャッシュラインサイズに基づいて併合可能な関数を選択する関数選択部と、前記関数選択部の選択した関数の関連度情報に基づいて、当該関数を併合する関数併合部と、前記併合された関数を含む前記アプリケーションプログラムが有する関数を前記メモリに配置するメモリ配置最適化部とを有する。
【発明の効果】
【００１３】
メモリを有効利用することが可能となる。またキャッシュコンフリクトを低減させ、全体としてプログラムの実行速度を上昇させることが可能である。
【発明を実施するための最良の形態】
【００１４】
以下に、図面を参照して本発明の実施の形態について説明する。上記したようにプロセッサなどでは、プログラムの実行速度を速めるために、通常キャッシュと呼ばれる内部メモリが存在する。そこで、まず、このキャッシュと外部メモリのアドレス空間との関係をダイレクトマップ方式と呼ばれる方式を例に説明する。
【００１５】
図１は、キャッシュと外部メモリのメモリ空間の関係を示す模式図である。図１に示すように、キャッシュは、キャッシュラインと呼ばれる複数の領域に分割されている。図１に示す例ではキャッシュがキャッシュラインＣＬ１〜ＣＬ４に分割されている。また、外部メモリはアドレスで規定されるメモリ空間を有している。ダイレクトマップ方式では、外部メモリ空間がキャッシュラインに相当するブロックに分割され、キャッシュラインと、外部メモリのブロックの対応が一意に決められている。図１に示した例では、外部メモリのアドレス００〜０７がＣＬ１に、０８〜０ＦがＣＬ２に、１０〜１７がＣＬ３に１８〜１ＦがＣＬ４にというように割り当てられ、それに続くアドレスのメモリ空間も順次キャッシュラインに割り当てられている。
【００１６】
例えばＣ言語などの高級言語で書かれたアプリケーションプログラムは、機械語などに変換され、外部メモリに割りつけられる。本発明は、上記したようなメモリ空間を有する外部メモリに対して、プログラムを割り付けていく割付装置、割付方法に関している。以下の説明では、アプリケーションプログラム上に記述されたある一つの処理（サブルーチンなど）を、関数と称して説明する。ここでアプリケーションプログラムとは、複数の関数を順次処理してアプリケーションを実施するものである。また、アプリケーションプログラムでは、１つの関数を実行するときに他の関数を呼び出し、その結果に基づいた処理なども行われている。
【００１７】
上記を踏まえて、本発明の概要について図２乃至５を用いて説明する。図２は、あるアプリケーションプログラムを構成する関数と、その呼出関係を模式的に示したものである。図２に示す例では、Ａ〜Ｇのそれぞれが１つの関数を示している。また、関数どうしを結ぶ辺は、関数の間に呼び出し関係があることを示している。また辺に付された数字は、呼び出し回数を示しているものとする。また、各関数の横に付された下線付き数字は、キャッシュラインのサイズを１とした場合の、コードのサイズを示している。
【００１８】
このような構成のアプリケーションプログラムを、関数の呼び出し関係、および呼び出し回数のみを基準に外部メモリに割り付けると、図３に示したようになる。図３は、図１と同様、キャッシュラインと外部メモリの対応も示している。なお、図３に用いられているアドレスは、キャッシュラインとメモリ空間の関係を理解しやすくするために便宜上付されているアドレスであり、実際はこの限りではない。
【００１９】
図３に示すように、各関数の呼び出し関係と、呼び出し回数のみを考慮して、メモリ空間に関数を配置した場合、キャッシュラインのサイズに満たない関数であっても、１つのキャッシュラインに相当するメモリのブロックに配置される。そのため、メモリの未使用領域が発生し、使用効率が低下してしまう。また、図２、図３に示した例では関数Ａと関数Ｃが同じキャッシュラインＣＬ１に対応するため、呼び出し関係を有する関数Ａと関数Ｃでキャッシュコンフリクトが生じてしまう。
【００２０】
そこで、本発明では、例えば図２に示すような関係を有するアプリケーションプログラムに対し、各関数のコードサイズを考慮して、関数併合処理を行う。そして、関数併合処理を行った後の関係を元に、外部メモリに対して関数を割り付けていく。つまり、本発明ではキャッシュラインのサイズを満たさず、かつ、他の関数と併合することが可能な関数に関しては関数の併合を行った後に、外部メモリに割り付けて記憶させる。
【００２１】
図２に示した関数の関係図を参照すると、関数Ｅと関数Ｆは、ともにキャッシュラインのサイズを満たさず、また、この二つを併合してもキャッシュラインのサイズを超えてしまうことは無い。同様に関数Ｄと関数Ｇに関しても、この二つを併合してもキャッシュラインのサイズを超えてしまうことは無い。そこで、図２の例では、関数Ｅと関数Ｆの併合および関数Ｄと関数Ｇの併合処理が行われる。この関数の併合処理を行った後の各関数の関係を図４に示す。図４に示すように、関数Ｅと関数Ｆを１つの関数、関数Ｄと関数Ｇを１つの関数とすることにより、全体としての関数の減少が可能である。また、このような関係のプログラムを、外部メモリに割り付けた場合の模式図を図５に示す。
【００２２】
図５に示すように、関数の併合処理を行うことにより、図３に示す割付方式では８ブロック必要としていた外部メモリに対し、６ブロック分の外部メモリでプログラムを割り付けることが可能となる。また、図３に示した割付では関数Ａと関数Ｃでキャッシュコンフリクトが発生していたのに対し、図５の割りつけでは、キャッシュコンフリクトが発生していない。
【００２３】
本発明は、このようにソースコードで既述されたプログラムを外部メモリに対して割り付ける際に、各関数の関連性、呼び出し回数、さらにサイズを考慮してコンパイルし、割付を行うものである。このような本発明の概要に基づいて、以下、本発明を実施するための配置割付装置について説明する。
【００２４】
図６は、本実施の形態の関数割付装置を示すブロック図である。本実施の形態の、関数割付装置１は、関数呼出情報出力部１、関数基本ブロック遷移情報出力部２、関数併合処理部３、関数メモリ配置最適化部４を有している。
【００２５】
関数呼出情報出力部１には、アプリケーションプログラム１１０が入力される。このアプリケーションプログラム１１０は、命令キャッシュを有するマイクロプロセッサ用のプログラムである。関数呼出情報出力部１は、プログラム１１０をプロファイルし、関数を呼び出すときの、呼び出し元の関数、呼び出し先の関数および呼び出し回数などを取得する。つまり、図２に示したような各関数の関係図を取得する。関数呼出情報出力部１が取得したこれらの情報は、関数呼出組み合わせ情報１１１として出力される。
【００２６】
関数基本ブロック遷移情報出力部２には、アプリケーションプログラム１１０が入力される。関数基本ブロック遷移情報出力部２は、プログラムをプロファイルし、関数に対して割り振ったＩＤと、各関数が呼び出す関数の順番の情報を取得する。この情報は、関数基本ブロック遷移情報１１２として出力される。例えば、図２において関数ＡのＩＤを０、関数ＢのＩＤを１、関数ＤのＩＤを３とした場合、関数Ａが関数Ｂを呼び出し、関数Ｂが関数Ｄを呼び出すため、「１−２、２−３・・・」といった関数がどのように遷移していくかという情報が出力される。
【００２７】
関数併合処理部３には、アプリケーションプログラム１１０、関数呼出組み合わせ情報１１１および関数基本ブロック遷移情報１１２が入力される。関数併合処理部３は、アプリケーションプログラム１１０から、コードサイズを取得する。さらに関数呼出組み合わせ情報１１１および関数基本ブロック遷移情報１１２から、関数の関連性を取得する。そして、この関数の関連性とコードサイズから、併合処理を行ってもキャッシュラインのサイズを超えない関数の組み合わせを選出し、関数の併合を行う。併合された関数は、新たな１つの関数として認識されるため、関数併合処理部３は、関数呼出組み合わせ情報１１１および関数基本ブロック遷移情報１１２を更新して出力する。つまり、関数併合処理部３によって図４に示した関数の関係図が作成される。
【００２８】
関数メモリ配置最適化部４には、関数呼出組み合わせ情報１１１および関数基本ブロック遷移情報１１２が入力される。関数メモリ配置最適化部４は、呼び出し回数の多さ、キャッシュコンフリクトを回避するようにメモリ空間に対して関数の配置を行う。関数メモリ配置最適化部４は、関数呼出入替情報を生成し、出力する。また、関数メモリ配置最適化部４では、関数基本ブロック遷移情報１１２からキャッシュコンフリクト数を算出し、最もキャッシュコンフリクトが少ない配置結果を出力する。この関数メモリ配置最適化部４が行う動作は、従来と同様である。
【００２９】
上記したような本発明の配置割付装置において、従来と大きく異なる点は関数併合処理部３を有することである。そこで、関数併合処理部３が行う関数併合処理について以下に詳細に説明する。
【００３０】
図７は、本実施の形態の関数併合処理部３が行う動作を説明するフローチャートである。以下、図７を用いて、本実施の関数併合処理部３が行う動作について説明する。
【００３１】
まず、ステップＳ１において、関数併合処理部３には、アプリケーションプログラム１１０が入力される。関数併合処理部３では、入力されたアプリケーションプログラム１１０から、各関数のコードサイズが取得される。
【００３２】
ステップＳ２において、関数併合処理部３は、後述する関連度リスト１２０、つまり関数間の関連度が一度クリアされる。ここで言う関連度のクリアとは、関数呼出組み合わせ情報１１１自体をクリアするということではない。ここで、関連度をクリアすることは、この後の関数の併合により、併合された関数が他の関数を呼び出す回数や、呼び出す個数について変化が起こりえるために、以前のステップで作成された関連度を一度クリアすることである。
【００３３】
ステップＳ３において、関数併合処理部３は関数の併合についての検討を行う。ここでの組み合わせの検討は、全ての関数の組み合わせに対して併合の検討が行われる。つまり、併合の検討が行われていない関数の組み合わせがある場合は、ステップＳ３において全ての関数の併合の検討が終了していないと判断される。例えば、Ａ、Ｂ、Ｃの３つの関数があった場合に、ＡとＢ、ＢとＣの関数併合については検討が行われたが、ＡとＣの組み合わせについて併合が検討されていない場合、全ての関数に関しての併合が検討されていないと判断される。また、この判断は、以降の処理で、関数が併合できないと判断された場合でも、その組み合わせに対する併合の検討が行われていれば、その組み合わせに対しては併合の検討が行われたと判断される。
【００３４】
ステップＳ４において、ステップＳ３で取り上げた関数の組み合わせのコードサイズの合計が、キャッシュラインのサイズを超えているかどうかが判断される。ここで、関数を併合した場合でもそのサイズがキャッシュラインのサイズを超えなければ、ステップＳ４では、その組み合わせが併合可能な関数同士であると一次判断される。
【００３５】
ステップＳ５において、関数呼出組み合わせ情報をもとに関数の関連度を計算し、併合することが可能な関数について、関連度リストが作成される。ここで、図２とは異なる簡単な関数の関係図を下に、このステップＳ５の処理について具体的に説明する。
【００３６】
図８（ａ）は、関数併合処理を行う前の関数の関係を示す模式図である。図８に示す例では関数としてＡ〜Ｆの６つの関数が存在している場合を示している。ここで、ステップＳ４までの処理により、関数ＡとＤあるいは関数ＡとＢを併合しても、そのコードサイズがキャッシュラインのサイズを超えず、一次判断では併合可能な関数だと判断されたとする。ステップＳ５では、以下のような判断基準を元に新たな関連度リスト１２０を作成するとする。
【００３７】
（１）互いに相関関係がある関数の関連度は高くなる。
図８（ａ）に示した例では関数同士を結ぶ辺がある関数は関連度が高くなる。つまり関数ＡとＢ、関数ＡとＣ、関数ＡとＤなどである。
【００３８】
（２）共通する関数に相関関係がある関数同士の関連度は高くなる。
図８（ａ）に示した例では、関数Ａと関数Ｄがそれぞれ関数Ｃと相関関係を有している。関数Ａと関数Ｂが、それぞれ関数Ｃと相関関係を有している。そこで、関数ＡとＤおよび関数ＡとＢの関連度は高くなる。
【００３９】
（３）２つの関数を併合することにより、相関関係を持つ関数の数が増える場合は、その数に応じて２つの関数の関連度は低くなる
図８（ａ）に示した例では、関数ＡとＢ、関数ＡとＤが併合してもキャッシュラインのサイズを超えない関数だと判断されている。そこで、上記の（１）、（２）を基準にすれば関数ＡとＢ、関数ＡとＤどちらに関しても同様に関連度が高く設定される。ここで、この（３）について考察する。関数ＡとＢを併合した場合、新たな関数Ａ・Ｂを元にした関係は、図８（ｂ）に示すようになり、関数Ｃ、Ｄ、Ｅ、Ｆと相関関係を有するようになる。つまり関数Ａに対しては新たに関数Ｆとの相関関係が追加され、関数Ｂに対しては新たに関数Ｄ、Ｅとの相関関係が追加されるため、新たに３つの相関関係が追加される。
【００４０】
それに対し、関数ＡとＤを併合した場合、図８（ｃ）に示すようになり関数Ａ・Ｄは関数Ｂ、Ｃ、Ｅと相関関係を持つようになる。つまり関数Ａに対しては新たな相関関係は追加されず、関数Ｄに対しては新たに関数Ｂ、Ｅとの相関関係が追加されるため、新たに２つの相関関係が追加される。
【００４１】
このように、併合する関数の組み合わせによって増加する相関関係に基づいて、関数同士の関連度が設定される。図８（ａ）に示した例では関数ＡとＤを併合した場合の方が相関関係を有する関数の増加が少ないため、関数ＡとＤの方が関数ＡとＢよりも関連度が高いと判断される。なお、ここで、相関関係をもつ関数が増える場合に関数の関連度を低くする理由は、相関関係を持つ関数が増加するとそれだけキャッシュコンフリクトが発生する可能性が高くなるためである。この関数同士の関連度は、ステップＳ６において関数呼出組み合わせ情報に、関連度リスト１２０として追加出力される。
【００４２】
ステップＳ３からＳ６では、このように全ての関数の組み合わせに対し、キャッシュラインサイズに対して関数が併合可能かどうか、またその関連性が判断され関数呼出組み合わせ情報に、関連度リストとして出力される。ステップＳ３からＳ６を繰り返し、全ての関数の組み合わせに対しての併合の可能性、関連度リスト１２０が作成された場合、ステップＳ３で、全ての組み合わせに対する検討が行われたと判断されステップＳ７へと進む。
【００４３】
ステップＳ７においては、ステップＳ５、Ｓ６によって出力された関数同士の関連度のリスト１２０の有無が確認される。ここで関連度のリストが存在しない場合は、ステップＳ３からＳ６を通じて、関数同士の併合が可能でかつ関連度があると判断された関数が存在しないことを示すので、関数併合処理は終了する。ここで、関数同士の関連度リスト１２０が存在する場合はステップＳ８へと進む。
【００４４】
ステップＳ８では、ステップＳ５、Ｓ６で作成された関連度リスト１２０に基づいて、最も関連性が高い関数の組み合わせが選出され、ステップＳ９へと進む。
【００４５】
ステップＳ９では、関数の併合が行われる。例えば図８（ａ）に示した例では、関数ＡとＤが併合され、新たな関数Ａ・Ｄとされる。そして、この新たな関数Ａ・Ｄを１つの関数とみなした場合に基づいて、関数呼出組み合わせ情報、関数基本ブロック遷移情報の更新が行われる。つまり、図８（ｃ）に示したような図に対応する呼出組み合わせ情報、基本ブロック遷移情報が生成される。また、関数のコードサイズも新たな関数Ａ・Ｄを基準として更新される。
【００４６】
その後、関数併合処理部３の処理はステップＳ２に戻る。この時、関数呼出組み合わせ情報、関数基本ブロック遷移情報は更新されているので、関数Ａ・Ｄは、新たな１つの関数として認識される。そのため、以前のステップで作成された関数ＡとＤの関連度などに関してのリスト１２０はクリアされ、Ａ・Ｄを１つの関数とみなして、ステップＳ３〜Ｓ６と同様の動作が繰り返される。
【００４７】
このように、本実施の形態では、関数併合処理部３が、関数のコードサイズ、および関連度を元に併合できる関数がなくなるまで関数の併合処理を繰り返す。
【００４８】
このように併合された関数は、１つの関数として認識され、それに基づいた関数呼出組み合わせ情報、関数基本ブロック遷移情報が関数メモリ配置最適化部４へと入力される。
【００４９】
そのため、関数メモリ配置最適化部では、キャッシュラインに対応するメモリ空間を有効に利用する形で、プログラムの関数をメモリに割り付けていくことが可能となる。また、キャッシュコンフリクト数を低減させることが可能となる。
【００５０】
つまり、本実施の形態では、ソースコードなどの高級言語で記述されたプログラムを機械語などに変換し、メモリ空間へと割り付けていく関数割付装置（コンパイラ）が、関数併合処理部３を有している。
【００５１】
この関数併合処理部３は、アプリケーションプログラムから関数のコードサイズを取得する部分と、取得したコードサイズと、キャッシュラインのサイズを元に併合可能な関数の組み合わせを検討する部分、また、関数同士の組み合わせに対してその関連度を算出する部分を有している。そして、この関連度を元に新たな関数呼出組み合わせ情報などが生成され、関数メモリ配置最適化部において、関数がメモリ空間に配置されていく。そのため、メモリ空間に対して、関数を配置するときにメモリ空間を有効に利用することが可能となる。また、キャッシュ自体も有効に利用することが可能となるため、キャッシュコンフリクトを減少させることが可能となる。特に、キャッシュのサイズが限定されてしまうような場合はキャッシュコンフリクトを減少させることはプログラムの実行速度を高める上で極めて有用である。
【００５２】
以上、本実施の形態に基づいて詳細に説明したが、本発明の主旨を逸脱しない限り本発明は種々の変形が可能である。例えば、実施の形態では関数の呼び出し回数、関係がある関数の個数などに基づいて関数同士の関連度を設定しているが、その他の要素も考慮して関数の関連度を設定することも可能である。また、関数呼出組み合わせ情報、関数基本ブロック遷移情報などに関しては必ずしも本実施の形態に記載された情報のみを有するものには限らない。本発明ではそれらの情報から、キャッシュラインサイズ、コードサイズを考慮して、関数の併合を行うものであり、関数の関連性とその遷移状態を含む情報であればよい。
【図面の簡単な説明】
【００５３】
【図１】キャッシュと外部メモリの関係を示す図である。
【図２】関数の関係図の一例を示す図である。
【図３】従来の関数割付によるキャッシュとメモリの関係を示す図である。
【図４】関数併合を行った場合の関数の関係図の一例を示す図である。
【図５】関数併合を行った場合のキャッシュとメモリの関係を示す図である。
【図６】本実施形態の関数割付装置を示す図である。
【図７】本実施形態の関数併合処理部の動作を示す図である。
【図８】関数併合を行う場合の関数の関係図の一例を示す図である。
【符号の説明】
【００５４】
１    関数呼出情報出力部
２    関数基本ブロック遷移情報出力部
３    関数併合処理部
４    関数メモリ配置最適化部
１１０    アプリケーションプログラム
１１１    関数組み合わせ呼出情報
１１２    関数基本ブロック遷移情報
１２０    関連度リスト
【図１】
2007148556.tif 000003
【図２】
2007148556.tif 000004
【図３】
2007148556.tif 000005
【図４】
2007148556.tif 000006
【図５】
2007148556.tif 000007
【図６】
2007148556.tif 000008
【図７】
2007148556.tif 000009
【図８】
2007148556.tif 000010