(57)【特許請求の範囲】
【請求項１】
第一の記憶媒体及び前記第一の記憶媒体よりもプロセッサからの読み込み速度が遅い第二の記憶媒体の何れかに複数の関数が夫々読み出されて実行される実行プログラムにおける、前記複数の関数の配置順を決定する関数配置装置であって、
前記複数の関数を記述するソースコードに基づいて前記実行プログラムを生成する実行プログラム生成部と、
生成された前記実行プログラムに含まれる前記複数の関数夫々のデータサイズを算出するデータサイズ算出部と、
生成された前記実行プログラムに含まれる前記複数の関数夫々の実行時間を算出する実行時間算出部と、
を含み、
前記実行プログラム生成部は、前記データサイズ、前記実行時間、前記第一の記憶媒体の記憶容量、前記第一の記憶媒体及び前記第二の記憶媒体夫々の読み込み速度に基づいて前記複数の関数の前記実行プログラム内における配置順を決定することにより、前記実行プログラムが実行される際の、前記複数の関数夫々の前記第一の記憶媒体及び前記第二の記憶媒体への読み出し状態を決定することを特徴とする関数配置装置。
【請求項２】
前記実行時間算出部は、前記実行プログラムに含まれる前記複数の関数夫々が前記第二の記憶媒体に読み出されて実行された際の前記複数の関数夫々の実行時間である第二の実行時間を算出することを特徴とする請求項１に記載の関数配置装置。
【請求項３】
前記実行時間算出部は、前記第一の記憶媒体及び前記第二の記憶媒体夫々の読み込み速度の比に基づいて前記第二の実行時間から、前記実行プログラムに含まれる前記複数の関数夫々が前記第一の記憶媒体に読み出されて実行された際の前記複数の関数夫々の実行時間である第一の実行時間を算出することを特徴とする請求項２に記載の関数配置装置。
【請求項４】
前記実行プログラム生成部は、前記ソースコードに基づいて前記複数の関数を生成し、
生成された前記複数の関数を記憶する関数記憶部を備えることを特徴とする請求項１乃至３いずれか１項に記載の関数配置装置。
【請求項５】
前記実行プログラム生成部は、前記複数の関数夫々の実行時間の合計が最も短くなるように前記複数の関数の前記実行プログラム内における配置順を決定することにより、前記実行プログラムが実行される際の、前記複数の関数夫々の前記第一の記憶媒体及び前記第二の記憶媒体への読み出し状態を決定することを特徴とする請求項１乃至４いずれか１項に記載の関数配置装置。
【請求項６】
前記実行プログラム生成部は、前記データサイズに基づいて前記第一の記憶媒体の記憶容量の上限に可能な限り近くなるように前記第一の実行時間の長い順に前記複数の関数を前記第一の記憶媒体に配置し、前記複数の関数のうち前記第一の記憶媒体に配置されなかった関数を前記第二の記憶媒体に配置するように、前記複数の関数の前記実行プログラム内における配置順を決定することにより、前記実行プログラムが実行される際の、前記複数の関数夫々の前記第一の記憶媒体及び前記第二の記憶媒体への読み出し状態を決定することを特徴とする請求項３に記載の関数配置装置。
【請求項７】
前記配置順は、前記複数の関数を前記第一の記憶媒体及び前記第二の記憶媒体の何れかに配置する際の配置可能な全配置順の中で最も実行時間が短くなるような配置順であることを特徴とする請求項１乃至６いずれか１項に記載の関数配置装置。
【請求項８】
第一の記憶媒体及び前記第一の記憶媒体よりもプロセッサからの読み込み速度が遅い第二の記憶媒体の何れかに複数の関数が夫々読み出されて実行される実行プログラムにおける、前記複数の関数の配置順を決定する関数配置プログラムであって、
前記複数の関数を記述するソースコードに基づいて前記実行プログラムを生成するステップと、
生成された前記実行プログラムに含まれる前記複数の関数夫々のデータサイズを算出するステップと、
生成された前記実行プログラムに含まれる前記複数の関数夫々の実行時間を算出するステップと、
前記データサイズ、前記実行時間、前記第一の記憶媒体の記憶容量、前記第一の記憶媒体及び前記第二の記憶媒体夫々の読み込み速度に基づいて前記複数の関数の前記実行プログラム内における配置順を決定することにより、前記実行プログラムが実行される際の、前記複数の関数夫々の前記第一の記憶媒体及び前記第二の記憶媒体への読み出し状態を決定するステップと、
を実行させることを特徴とする関数配置プログラム。
【請求項９】
第一の記憶媒体及び前記第一の記憶媒体よりもプロセッサからの読み込み速度が遅い第二の記憶媒体の何れかに複数の関数が夫々読み出されて実行される実行プログラムにおける、前記複数の関数の配置順を決定する関数配置方法であって、
前記複数の関数を記述するソースコードに基づいて前記実行プログラムを生成し、
生成された前記実行プログラムに含まれる前記複数の関数夫々のデータサイズを算出し、
生成された前記実行プログラムに含まれる前記複数の関数夫々の実行時間を算出し、
前記データサイズ、前記実行時間、前記第一の記憶媒体の記憶容量、前記第一の記憶媒体及び前記第二の記憶媒体夫々の読み込み速度に基づいて前記複数の関数の前記実行プログラム内における配置順を決定することにより、前記実行プログラムが実行される際の、前記複数の関数夫々の前記第一の記憶媒体及び前記第二の記憶媒体への読み出し状態を決定することを特徴とする関数配置方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、関数配置装置、関数配置プログラム、関数配置方法に関し、特に、関数配置装置における関数配置の最適化に関する。
【背景技術】
【０００２】
近年、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等のプロセッサの高速化が急速に進み、ＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の外部メモリのアクセス時間とプロセッサとの処理速度との差は拡大する一方である。このため、プログラムの実行速度は、プロセッサの処理速度の高速化にも関わらず必ずしも高速化することができないといった問題がある。そのため、一般に、多くのコンピュータには、高速に動作するプロセッサと、アクセス速度の遅いＤＲＡＭ等の外部メモリの他に、これらの速度の差を埋めるために高速にアクセスできるバッファであるキャッシュメモリがプロセッサのコア内に組み込まれて設けられている。
【０００３】
そして、このように構成されたコンピュータにおいて、アクセス速度の遅いＤＲＡＭ等の外部メモリ上にロードされた関数の一部をそのキャッシュメモリ内にコピーすることにより、高速なプログラム実行を実現することが可能となる。これは一般に、プログラムを実行すると、一度アクセスされた外部メモリ上の関数は近いうちに再度アクセスされる可能性が高いため、一度アクセスされた関数をすぐに読み出すことができるようにアクセス速度の速いキャッシュメモリにコピーしておくことで効率的にプログラムを実行することができることによる。
【０００４】
しかしながら、高速なキャッシュ用のメモリはコストがかかるため、そのサイズは外部メモリと比較して小さくせざるを得ない。従って、実行するプログラムのどの部分をキャッシュに格納するかがプログラムを高速に実行する上できわめて重要となる。そこで、プログラムの実行速度を向上させるための技術として、プログラムの実行をプロファイリングし、実行頻度の高い関数同士がキャッシュコンフリクトを起こさないように、関数のアドレス配置をずらすようにプログラムをコンパイルし直し、キャッシュヒット率を向上させる技術が考案され、既に知られている（例えば、特許文献１）。
【０００５】
特許文献１に開示された技術によれば、実行頻度の高い関数同士が同じキャッシュライン上に配置されることを防ぐことができるので、キャッシュコンフリクトの発生を防止し、プログラムの実行速度を向上させることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１に記載されている技術は、キャッシュメモリが組み込まれたプロセッサに関する技術であるため、例えば、安価なローエンドのマイクロコンピュータ（以下、「マイコン」とする）等のようにキャッシュメモリを備えていないプロセッサにおいては、特許文献１に記載されたような技術を適用することはできない。そこで、このようなキャッシュメモリを備えていないマイコン等においては、キャッシュメモリの代わりに、ＤＲＡＭよりも高速にアクセスすることができるＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）によって構成されたメモリを備えたものがある。このようなマイコンにおいては、外部メモリとしてアクセス速度の遅いＤＲＡＭとアクセス速度の速いＳＲＡＭとを備え、その両方に関数が分配されて配置される。
【０００７】
このように、キャッシュメモリを備えず、外部メモリとしてアクセス速度の速いＳＲＡＭとアクセス速度の遅いＤＲＡＭの両方を備えるプロセッサにおいて、プログラムの実行速度を向上させるためには、実行回数の多い関数や実行時間の長い関数をアクセス速度の速いＳＲＡＭのメモリに配置することが望ましい。しかしながら、現状では、ユーザが手作業で関数配置を決定する必要があり効率よく行えないという問題がある。
【０００８】
尚、このような問題は、ＤＲＡＭ及びＳＲＡＭによって構成されるメモリに限るものではなく、機能とコストとの兼ね合いから、アクセス速度の速いメモリとアクセス速度の遅いメモリとで外部メモリを構成するような場合に、同様に問題となり得る。
【０００９】
本発明は、このような課題を解決するためになされたものであり、プロセッサからの読み込み速度が異なる複数種類のメモリを搭載したシステムにおいてプログラムを実行する場合に、ユーザに手間をかけることなくプログラムの実行速度を向上させることを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、第一の記憶媒体及び前記第一の記憶媒体よりもプロセッサからの読み込み速度が遅い第二の記憶媒体の何れかに複数の関数が夫々読み出されて実行される実行プログラムにおける、前記複数の関数の配置順を決定する関数配置装置であって、前記複数の関数を記述するソースコードに基づいて前記実行プログラムを生成する実行プログラム生成部と、生成された前記実行プログラムに含まれる前記複数の関数夫々のデータサイズを算出するデータサイズ算出部と、生成された前記実行プログラムに含まれる前記複数の関数夫々の実行時間を算出する実行時間算出部とを含み、前記実行プログラム生成部は、前記データサイズ、前記実行時間、前記第一の記憶媒体の記憶容量、前記第一の記憶媒体及び前記第二の記憶媒体夫々の読み込み速度に基づいて前記複数の関数の前記実行プログラム内における配置順を決定することにより、前記実行プログラムが実行される際の、前記複数の関数夫々の前記第一の記憶媒体及び前記第二の記憶媒体への読み出し状態を決定することを特徴とする。
【００１１】
また、本発明の他の態様は、第一の記憶媒体及び前記第一の記憶媒体よりもプロセッサからの読み込み速度が遅い第二の記憶媒体の何れかに複数の関数が夫々読み出されて実行される実行プログラムにおける、前記複数の関数の配置順を決定する関数配置プログラムであって、前記複数の関数を記述するソースコードに基づいて前記実行プログラムを生成するステップと、生成された前記実行プログラムに含まれる前記複数の関数夫々のデータサイズを算出するステップと、生成された前記実行プログラムに含まれる前記複数の関数夫々の実行時間を算出するステップと、前記データサイズ、前記実行時間、前記第一の記憶媒体の記憶容量、前記第一の記憶媒体及び前記第二の記憶媒体夫々の読み込み速度に基づいて前記複数の関数の前記実行プログラム内における配置順を決定することにより、前記実行プログラムが実行される際の、前記複数の関数夫々の前記第一の記憶媒体及び前記第二の記憶媒体への読み出し状態を決定するステップと、を実行させることを特徴とする。
【００１２】
また、本発明の更に他の態様は、第一の記憶媒体及び前記第一の記憶媒体よりもプロセッサからの読み込み速度が遅い第二の記憶媒体の何れかに複数の関数が夫々読み出されて実行される実行プログラムにおける、前記複数の関数の配置順を決定する関数配置方法であって、前記複数の関数を記述するソースコードに基づいて前記実行プログラムを生成し、生成された前記実行プログラムに含まれる前記複数の関数夫々のデータサイズを算出し、生成された前記実行プログラムに含まれる前記複数の関数夫々の実行時間を算出し、前記データサイズ、前記実行時間、前記第一の記憶媒体の記憶容量、前記第一の記憶媒体及び前記第二の記憶媒体夫々の読み込み速度に基づいて前記複数の関数の前記実行プログラム内における配置順を決定することにより、前記実行プログラムが実行される際の、前記複数の関数夫々の前記第一の記憶媒体及び前記第二の記憶媒体への読み出し状態を決定することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、プロセッサからの読み込み速度が異なる複数種類のメモリを搭載したシステムにおいてプログラムを実行する場合に、ユーザに手間をかけることなくプログラムの実行速度を向上させることができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態に係る関数配置装置のハードウェア構成を模式的に示すブロック図である。
【図２】本発明の実施形態に係る関数配置装置が各関数をＳＲＡＭかＤＲＡＭの何れかに配置する際に参照するＲＡＭ情報の一例を示す図である。
【図３】本発明の実施形態に係る関数配置装置が生成する関数情報の一例を示す図である。
【図４】本発明の実施形態に係る関数配置装置が関数配置を最適化して実行プログラムを生成する際の処理について説明するためのフローチャートである。
【図５】本発明の実施形態に係る関数配置装置が関数の総実行時間の合計が最小になるように関数配置を最適化する際の処理を説明するためのフローチャートである。
【図６】本発明の実施形態に係る関数配置装置が関数配置を最適化した結果を示す図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して、本発明の実施形態を詳細に説明する。本実施形態においては、プロセッサからの読み込み速度の速いＳＲＡＭ（Ｓｔａｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と読み込み速度の遅いＤＲＡＭ（Ｄｙｎａｍｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）とを備えるマイクロコンピュータ（以下、「マイコン」とする）等のシステムにおいてＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）等のプロセッサによって実行プログラムを実行する場合に、その実行プログラムに含まれる関数の配置を自動的に決定する関数配置装置を例として説明する。即ち、本実施形態において、ＳＲＡＭは第一の記憶媒体として機能し、ＤＲＡＭは第二の記憶媒体として機能する。
【００１６】
このような関数配置装置において、本実施形態に係る要旨の一つは、プロセッサからの読み込み速度の速いＳＲＡＭと読み込み速度の遅いＤＲＡＭとを備えるシステムにおいてプロセッサによって実行プログラムを実行する場合に、実行時間の長い関数を読み込み速度の速いＳＲＡＭにデータ許容量の最大限度で自動的に配置することにある。
【００１７】
従って、本実施形態に係る関数配置装置によれば、プログラムの実行時間を最短にするように最適な関数配置を自動的に決定することができるので、ユーザに手間をかけることなくプログラムの実行速度を向上させることができる。以下、詳細に説明する。
【００１８】
図１は、本実施形態に係る関数配置装置１の機能構成を模式的に示すブロック図である。図１に示すように、本実施形態に係る関数配置装置１は、コンパイラ１１、リンカ１２、プログラム実行部１３、プロファイラ１４を有する。コンパイラ１１は、ソースコード２をコンパイルしてオブジェクトファイル３を生成する。生成されたオブジェクトファイル３には、本実施形態に係る関数配置装置１により配置されるべき関数が含まれる。
【００１９】
リンカ１２は、コンパイラ１１で生成されたオブジェクトファイル３をリンクして各関数をＳＲＡＭ又はＤＲＡＭの何れかに配置することにより実行プログラム４を生成する。即ち、ここでは、コンパイラ１１及びリンカ１２は、実行プログラム生成部として機能する。また、リンカ１２は、コンパイラ１１で生成されたオブジェクトファイル３をリンクする際に、各関数のデータサイズを算出する。即ち、ここでは、リンカ１２は、データサイズ算出部として機能する。尚、各関数のデータサイズは、リンカ１２の他、専用のツールによって算出されるようにしても良い。そして、リンカ１２は、算出した関数のデータサイズ、後述するＲＡＭ情報、プロファイラ１４が生成したプロファイル情報５に基づいて、各関数をＳＲＡＭかＤＲＡＭの何れかに配置するかを決定する。
【００２０】
プログラム実行部１３は、リンカ１２で生成された実行プログラム４を実行する。プロファイラ１４は、プログラム実行部１３によるプログラム実行時の関数呼び出しをプロファイリングしてプロファイル情報５を生成する。ここで、プロファイル情報５には、各関数をＤＲＡＭに配置した場合の関数毎の総実行時間が含まれる。尚、プロファイラ１４により生成されたプロファイル情報５は、図示しない記録媒体に記録されてリンカ１２によるオブジェクトファイル３のリンクの際に参照される。
【００２１】
尚、プロファイラ１４は、実行プログラム中の命令コードを１命令ずつ解釈しながら関数実行時間等を監視するソフトウェアであり、例えば、ＤＢＡ（Ｄｙｎａｍｉｃ  Ｂｉｎａｒｙ  Ａｎａｌｙｓｉｓ）ツール等のソフトウェアが知られている。以下では、リンカ１２により算出された関数のデータサイズと、プロファイル情報５に含まれる総実行時間とをまとめて関数情報とする。
【００２２】
次に、本実施形態に係る関数配置装置１が各関数をＳＲＡＭかＤＲＡＭの何れかに配置する際に参照するＲＡＭ情報について図２を参照して説明する。図２は、本実施形態に係る関数配置装置１が各関数をＳＲＡＭかＤＲＡＭの何れかに配置する際に参照するＲＡＭ情報の一例を示す図である。図２に示すように、本実施形態に係る関数配置装置１が各関数をＳＲＡＭかＤＲＡＭの何れかに配置する際に参照するＲＡＭ情報は、メモリデバイス毎に、開始アドレス及び終端アドレス、読み込み速度、メモリサイズが対応付けられてテーブルとして関数配置装置１に管理されている。
【００２３】
「開始アドレス」及び「終端アドレス」は、関数を配置することが可能なアドレス領域を示している。「読み込み速度」は、プロセッサがメモリデバイスからデータを読み出す際の速度であり、図２に示す例では、４バイト当たりのデータを読み出す際の所要時間を示している。「メモリサイズ」は、各メモリデバイスの関数配置用に割り当てられた領域のデータサイズを示している。
【００２４】
次に、本実施形態に係る関数配置装置１が生成する関数情報について図３を参照して説明する。図３は、本実施形態に係る関数配置装置１が生成する関数情報の一例を示す図である。図３に示すように、本実施形態に係る関数配置装置１が生成する関数情報は、関数名毎に、関数のデータサイズと総実行時間とが対応付けられてテーブルとして関数配置装置１に管理されている。
【００２５】
また、総実行時間には、「ＳＲＡＭに配置された場合の総実行時間」と「ＤＲＡＭに配置された場合の総実行時間」とがあり、「ＤＲＡＭに配置された場合の総実行時間」は、プロファイラ１４が生成するプロファイル情報５に含まれる情報であって、上述したように、各関数をＤＲＡＭに配置した場合の関数毎の総実行時間である。また、「ＳＲＡＭに配置された場合の総実行時間」は、図２に示したＳＲＡＭとＤＲＡＭとの読み込み速度の比により「ＤＲＡＭに配置された場合の総実行時間」から算出される値である。従って、本実施形態においては、「ＳＲＡＭに配置された場合の総実行時間」は、「ＤＲＡＭに配置された場合の総実行時間」の半分となる。即ち、ここでは、プロファイラ１４は、実行時間算出部として機能し、「ＳＲＡＭに配置された場合の総実行時間」は、第一の実行時間を表し、「ＤＲＡＭに配置された場合の総実行時間」は、第二の実行時間を表す。
【００２６】
次に、本実施形態に係る関数配置装置１が関数配置を最適化して実行プログラムを生成する際の処理について図４を参照して説明する。図４は、本実施形態に係る関数配置装置１が関数配置を最適化して実行プログラムを生成する際の処理について説明するためのフローチャートである。図４に示すように、本実施形態に係る関数配置装置１が関数配置を最適化して実行プログラムを生成する際にはまず、コンパイラ１１がソースコード２を受け取ってコンパイルを行い、オブジェクトファイル３を生成し（Ｓ４０１）、生成したオブジェクトファイル３を関数配置装置１に備えられている記録媒体や外部記録媒体に記録する。即ち、ここでは、関数配置装置１に備えられている記録媒体や外部記録媒体は、関数記憶部として機能する。
【００２７】
そして、リンカ１２がＳ４０１で生成されたオブジェクトファイル３をリンクすることにより各関数のデータサイズを算出し（Ｓ４０２）、後述するＲＡＭ情報を参照して生成した関数をメモリに配置することにより実行プログラム４を生成する（Ｓ４０３）。このとき、生成された関数はすべてＤＲＡＭに配置される。実行プログラム４が生成されると、プログラム実行部１３が生成された実行プログラム４を実行すると同時に、プロファイラ１４はプログラム実行部１３によるプログラム実行時の関数呼び出しをプロファイリングしてプロファイル情報５を生成する（Ｓ４０４）。尚、ここで生成されたプロファイル情報５は、関数配置装置１に備えられている記録媒体や外部記録媒体に記録される。
【００２８】
次に、リンカ１２は、Ｓ４０１で生成されたオブジェクトファイル３を再度リンクすることにより、Ｓ４０２で算出されたデータサイズ、Ｓ４０４で生成されたプロファイル情報５、図２において説明したＲＡＭ情報に基づいて、関数配置を最適化して実行プログラム４を生成し（Ｓ４０５）、本実施形態に係る関数配置装置１は、関数配置を最適化して実行プログラムを生成する際の処理を終了する。
【００２９】
尚、Ｓ４０５の処理において、リンカ１２は、プログラム実行部１３により実行プログラム４を実行した際の関数の総実行時間が最小になるように、生成した複数の関数をＳＲＡＭとＤＲＡＭとに配置する。また、Ｓ４０５の処理において、Ｓ４０１で生成されたオブジェクトファイル３が関数配置装置１から読み出し可能な状態になければ、コンパイラ１１が再度ソースコード２を受け取ってコンパイルし、オブジェクトファイル３を再び生成するようにしても良い。
【００３０】
次に、本実施形態に係る関数配置装置１が関数の総実行時間の合計が最小になるように関数配置を最適化する際の処理、つまり、図４におけるＳ４０５の処理の詳細について図５を参照して説明する。図５は、本実施形態に係る関数配置装置１が関数の総実行時間の合計が最小になるように関数配置を最適化する際の処理を説明するためのフローチャートである。
【００３１】
図５に示すように、本実施形態に係る関数配置装置１が関数の総実行時間の合計が最小になるように関数配置を最適化する際にはまず、リンカ１２は、データサイズの合計がＳＲＡＭ上の関数配置用に割り当てられた領域のサイズに収まるように、生成した複数の関数から任意に選択する（Ｓ５０１）。尚、ここでは、ＳＲＡＭ上の関数配置用に割り当てられた領域のサイズと、選択された関数のデータサイズの合計との差が、選択されなかった他のどの関数のデータサイズよりも大きくならないように選択される。
【００３２】
リンカ１２は、Ｓ５０１で選択した関数について、図３を参照してＳＲＡＭに配置された場合の総実行時間の合計Ｔ１を算出し、また、Ｓ５０１で選択しなかった関数について、図３を参照してＤＲＡＭに配置された場合の総実行時間の合計Ｔ２を算出し、Ｔ１とＴ２の総和を関数の総実行時間の合計Ｔとして算出する（Ｓ５０２）。即ち、Ｓ５０２では、マイコンにおけるプロセッサによる実行プログラム４の実行時間が算出される。
【００３３】
リンカ１２は、取り得る全組み合わせについて（Ｓ５０３／ＮＯ、Ｓ５０４）、Ｓ５０１及びＳ５０２の処理と同様にして関数を選択して、関数の総実行時間の合計Ｔを算出する。リンカ１２は、全組み合わせについて関数の総実行時間の合計Ｔを算出し終えたら（Ｓ５０３／ＹＥＳ）、関数の総実行時間の合計Ｔが最小となったときの組み合わせを最適な関数配置とする（Ｓ５０５）。そして、リンカ１２は、その配置に従って関数をＳＲＡＭとＤＲＡＭとに配置して実行プログラムを生成し（Ｓ５０６）、本実施形態に係る関数配置装置１が関数の総実行時間の合計が最小になるように関数配置を最適化する際の処理を終了する。
【００３４】
このようにして関数配置の最適化を行った結果、図６に示すように、本実施形態においては、ＤＲＡＭには、「ＦｕｎｃＢ」が配置され、ＳＲＡＭには、「ＦｕｎｃＡ」、「ＦｕｎｃＣ」、「ＦｕｎｃＤ」、「ＦｕｎｃＥ」が配置され、そのときの関数の総実行時間Ｔの合計は、「２３０１０（ｍｓ）」となる。
【００３５】
以上、説明したように、本実施形態に係る関数配置装置１は、プロセッサからの読み込み速度の速いＳＲＡＭと読み込み速度の遅いＤＲＡＭとを備えるシステムにおいてプロセッサによりプログラムを実行する場合に、実行時間の長い関数を読み込み速度の速いＳＲＡＭにデータ許容量の最大限度で自動的に配置することができる。
【００３６】
従って、本実施形態に係る関数配置装置１によれば、プログラムの実行時間を最短にするように最適な関数配置を自動的に決定することができるので、ユーザに手間をかけることなくプログラムの実行速度を向上させることができる。
【００３７】
尚、本実施形態においては、ＤＲＡＭ及びＳＲＡＭによって構成されるマイコンについて説明したが、ＤＲＡＭ及びＳＲＡＭによって構成されるマイコンに限られるものではなく、プロセッサからの読み込み速度の速いメモリと読み込み速度の遅いメモリとで外部メモリを構成するようなマイコンであっても良い。
【００３８】
また、本実施形態においては、ＤＲＡＭとＳＲＡＭの２種類のメモリを備えるマイコンについて説明したが、更に、ＴＣＭ（Ｔｉｇｈｔｌｙ  Ｃｏｕｐｌｅｄ  Ｍｅｍｏｒｙ）等のＳＲＡＭよりもプロセッサからの読み込み速度の速いメモリや、ＤＲＡＭよりも読み込み速度の遅いメモリを備えるマイコンであっても良い。このような場合であっても、本実施形態において説明したように、関数の総実行時間の合計が最小になるように関数を配置することにより、同様の作用効果を得ることができる。
【符号の説明】
【００３９】
１  関数配置装置
２  ソースコード
３  オブジェクトファイル
４  実行プログラム
５  プロファイル情報
１１  コンパイラ
１２  リンカ
１３  プログラム実行部
１４  プロファイラ
【先行技術文献】
【特許文献】
【００４０】
【特許文献１】特開２００３−２７１３９４号公報
【図１】
0005849744.tif 000002
【図２】
0005849744.tif 000003
【図３】
0005849744.tif 000004
【図４】
0005849744.tif 000005
【図５】
0005849744.tif 000006
【図６】
0005849744.tif 000007