(57)【要約】【課題】  キャッシュメモリの使用効率を上げる。【解決手段】  グループ分け手段１では、セクショングループを構成するプログラムセクションの合計サイズがキャッシュメモリサイズを超えないようにプログラムセクションをセクショングループにグループ分けする。次に、レイアウト最適化手段２は、グループ分けによって決められたセクショングループを構成するプログラムセクションの配置関係を保持したまま、セクショングループ格納領域のレイアウトの最適化を行う。レイアウト最適化では、配置関係を保持したまま、セクショングループとグループ分けされなかったプログラムセクション、もしくはセクショングループ同士を組み合わせて、再レイアウトを行う。【選択図】  図１
2006079338.tif 000002
【特許請求の範囲】
【請求項１】
プログラム実行時に一部のプログラムセクションをキャッシュメモリに格納して動作するコンピュータのプログラムセクションレイアウト方法において、
任意の処理機能の実行単位であるプログラムセクションをグループ分けした後の各セクショングループを構成する前記プログラムセクションの合計サイズがキャッシュメモリサイズを超えないように、グループ分け手段で、所定のアルゴリズムに基づく順序に従って前記プログラムセクションをグループ分けし、
前記グループ分けによって決められた前記セクショングループを構成する前記プログラムセクションの配置関係を保持したまま、レイアウト最適化手段で、前記セクショングループとグループ分けされなかった前記プログラムセクション、もしくは前記セクショングループ同士を組み合わせて、前記キャッシュメモリサイズ単位で用意されたセクショングループ格納領域のレイアウトを最適化する、
ことを特徴とするプログラムセクションレイアウト方法。
【請求項２】
前記セクショングループとグループ分けされなかった前記プログラムセクションを組み合わせる手順は、
前記セクショングループ格納領域と前記セクショングループを構成する前記プログラムセクションの合計サイズとの差分に相当する隙間に、前記セクショングループにグループ分けされなかった前記プログラムセクションが配置できる場合には、前記セクショングループに配置する、
ことを特徴とする請求項１記載のプログラムセクションレイアウト方法。
【請求項３】
前記セクショングループ格納領域の隙間に前記プログラムセクションを再配置する手順は、
グループ分け後の前記セクショングループ格納領域の隙間を含む前記プログラムセクションの格納領域の合計サイズが所定の値より小さくなるまで前記プログラムセクションの再配置を行う、
ことを特徴とする請求項２記載のプログラムセクションレイアウト方法。
【請求項４】
前記セクショングループ格納領域の隙間に前記プログラムセクションを再配置する手順は、
グループ分け前の前記プログラムセクションの合計サイズと、グループ分け後の前記セクショングループ格納領域の隙間を含む前記プログラムセクションの格納領域の合計サイズに応じた膨張率に基づき、前記膨張率が所定の値より小さくなるまで前記プログラムセクションの再配置を行う、
ことを特徴とする請求項２記載のプログラムセクションレイアウト方法。
【請求項５】
前記セクショングループ格納領域の隙間に前記プログラムセクションを再配置する手順は、
前記セクショングループにグループ分けされなかった前記プログラムセクションのうち、最後尾に配置されている前記プログラムセクションから順に再配置を行う、
ことを特徴とする請求項２記載のプログラムセクションレイアウト方法。
【請求項６】
前記セクショングループ同士を組み合わせる手順は、
前記セクショングループを配列順序に従って奇数番号グループと偶数番号グループとに分け、前記奇数番号グループもしくは前記偶数番号グループのいずれかの前記セクショングループを構成する前記プログラムセクションの配列順を逆順にして配置する、
ことを特徴とする請求項１記載のプログラムセクションレイアウト方法。
【請求項７】
プログラム実行時に一部のプログラムセクションをキャッシュメモリに格納して動作するコンピュータのプログラムセクションのレイアウト処理を実行させるレイアウト処理プログラムにおいて、
コンピュータに、
任意の処理機能の実行単位であるプログラムセクションをグループ分けした後の各セクショングループを構成する前記プログラムセクションの合計サイズがキャッシュメモリサイズを超えないように、所定のアルゴリズムに基づく順序に従って前記プログラムセクションをグループ分けし、
前記グループ分けによって決められた前記セクショングループを構成する前記プログラムセクションの配置関係を保持したまま、前記セクショングループとグループ分けされなかった前記プログラムセクション、もしくは前記セクショングループ同士を組み合わせて、前記キャッシュメモリサイズ単位で用意されたセクショングループ格納領域のレイアウトを最適化する、
手順を実行させることを特徴とするレイアウト処理プログラム。
【請求項８】
前記セクショングループとグループ分けされなかった前記プログラムセクションを組み合わせる手順で、
コンピュータに、
前記セクショングループ格納領域と前記セクショングループを構成する前記プログラムセクションの合計サイズとの差分に相当する隙間に、前記セクショングループにグループ分けされなかった前記プログラムセクションが配置できる場合には、前記セクショングループに配置する、
手順を実行させることを特徴とする請求項７記載のレイアウト処理プログラム。
【請求項９】
前記セクショングループ同士を組み合わせる手順で、
コンピュータに、
前記セクショングループを配列順序に従って奇数番号グループと偶数番号グループとに分け、前記奇数番号グループもしくは前記偶数番号グループのいずれかの前記セクショングループを構成する前記プログラムセクションの配列順を逆順にして配置する、
手順を実行させることを特徴とする請求項７記載のレイアウト処理プログラム。
【請求項１０】
プログラム実行時に一部のプログラムセクションをキャッシュメモリに格納して動作するコンピュータのプログラムセクションのレイアウト処理を実行させるレイアウト処理プログラムを記録したコンピュータ読み取り可能な記録媒体において、
任意の処理機能の実行単位であるプログラムセクションをグループ分けした後の各セクショングループを構成する前記プログラムセクションの合計サイズがキャッシュメモリサイズを超えないように、所定のアルゴリズムに基づく順序に従って前記プログラムセクションをグループ分けし、
前記グループ分けによって決められた前記セクショングループを構成する前記プログラムセクションの配置関係を保持したまま、前記セクショングループとグループ分けされなかった前記プログラムセクション、もしくは前記セクショングループ同士を組み合わせて、前記キャッシュメモリサイズ単位で用意されたセクショングループ格納領域のレイアウトを最適化する、
手順をコンピュータに実行させるレイアウト処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラムセクションレイアウト方法およびレイアウト処理プログラムに関し、特にプログラム実行時に一部のプログラムセクションをキャッシュメモリに格納して動作するコンピュータのプログラムセクションレイアウト方法およびレイアウト処理プログラムに関する。
【背景技術】
【０００２】
従来からキャッシュメモリが用意されたプログラム実行環境において、キャッシュメモリの使用効率を上げるプログラムセクションの配置方法が求められている。
一般的にキャッシュを実装するにはコストがかかるため、プログラム全体が格納されるメモリと比較してキャッシュサイズは小さい。そこで、プログラム格納メモリをキャッシュサイズ単位で分割し、キャッシュメモリとプログラム格納メモリの分割領域とを対応付け、分割領域ごとにプログラムセクションを任意のアルゴリズムに従って配置しておく。あるアドレスに対する最初アクセスで、そのアドレスに対応するプログラムセクションをキャッシュメモリの割当て領域にコピーし、次に同じアドレスでアクセスがあった場合、キャッシュメモリを直接アクセスする。このようにすることで、高速なプログラム処理を実現している。アクセスの際に該当するプログラムセクションがキャッシュメモリに存在しないキャッシュミスが発生したときには、再びプログラム格納メモリからコピーを行う。アルゴリズムは、キャッシュミスを削減するように設定される。
【０００３】
また、プログラム格納メモリからキャッシュメモリへのコピーは、所定のサイズ単位で行われ、このサイズでキャッシュを分割した領域をキャッシュラインと呼ぶ。したがって、同一のキャッシュラインに割当てられたプログラムセクションは、いずれか一つだけがキャッシュ上にコピーされている。このため、プログラムが切替えられるごとにキャッシュにプログラムをコピーし直す必要が生じる。これをキャッシュ・コンフリクトという。このようなキャッシュ・コンフリクトやキャッシュミスが頻繁に発生すると、結果としてプログラムの実行速度が遅くなってしまうという問題がある。
【０００４】
そこで、命令キャッシュに関し、仮想命令処理単位のメモ上の配置を動的に入れ替え、インタプリタ実行時における命令キャッシュのヒット率の向上を図る方法がある（たとえば、特許文献１参照）。また、直接的、間接的にキャッシュ・コンフリクトを発生する可能性のある関数呼び出しパターンを抽出し、このパターンを避けながら実行頻度の高い関数順にプログラムを配置するレイアウト方法がある（たとえば、特許文献２参照）。
【特許文献１】特開２０００−２６７８６１号公報（段落番号〔００２３〕〜〔００３０〕、図１）
【特許文献２】特開２００１−２１６１４０号公報（段落番号〔００３３〕〜〔００３８〕、図１）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来のプログラムセクションレイアウト方法では、キャッシュメモリの使用効率を上げるための様々なアルゴリズムがとられているが、キャッシュミスを削減するためにプログラム構造の解析や関数の呼び出し関係の解析を行うなど、アルゴリズムのプログラム依存性が高くなっているという問題点がある。この結果、アルゴリズムの種類も多くなり、レイアウト処理の自動化を難しくしている。
【０００６】
また、上記アルゴリズムに従ってプログラムセクションの順序付けが行われると、順番に従ってキャッシュサイズ単位の分割領域に配置する。同じ分割領域内に配置されるプログラムセクションの一群をセクショングループと呼ぶ。そして、１つのセクショングループに配置されたプログラムセクションサイズの合計が分割領域のサイズ、すなわち、キャッシュサイズ単位を超えた場合、新規セクショングループを作成してプログラムセクションを配置していく。こうして、プログラムセクションはいずれかのセクショングループに属してプログラム格納メモリ上に配置される。
【０００７】
しかしながら、プログラムセクションはそれぞれにサイズが異なっており、順序付けられたプログラムセクションを順に分割領域に割当てていくと、使用されない無駄な領域ができてしまうという問題点がある。この結果、全体のプログラムセクションを格納するために必要なメモリサイズが大きくなってしまうという問題点がある。特に、プログラムをＲＯＭ（Read Only Memory）に格納する場合など、プログラムセクション領域が有限なプログラム実行環境においては、キャッシュメモリの使用効率の向上とともに、プログラムセクションサイズを抑えることが求められている。
【０００８】
本発明はこのような点に鑑みてなされたものであり、プログラムの性質によらずキャッシュの使用効率を向上させるプログラムセクションレイアウト方法およびレイアウト処理プログラムを提供することを目的とする。また、本発明の他の目的は、レイアウト後のプログラムセクションサイズを抑えることにある。
【課題を解決するための手段】
【０００９】
本発明では上記課題を解決するために、コンピュータに図１に示すような処理手順を実行させるプログラムセクションレイアウト方法が提供される。
このようなプログラムセクションレイアウト方法によれば、キャッシュメモリに対応させ、キャッシュメモリサイズ単位に分割されたメモリ上の領域（セクショングループ格納領域）に格納するプログラムセクションをグループ分けし、セクショングループを構成するプログラムセクションの配置順を最適化する。プログラムセクションは、任意の処理機能の実行単位であり、たとえば、Ｃ言語の場合の関数などに相当する。このとき、グループ分け手段１では、プログラムセクションを所定のアルゴリズムに基づく順序に従って、セクショングループにグループ分けする。同一のセクショングループにグループ分けされたプログラムセクションの一群は、同一のセクショングループ格納領域に配置される。グループ分け手段１では、グループ分けされたプログラムセクションの合計サイズがキャッシュメモリサイズを超えないようにグループ分けを行う。続いて、レイアウト最適化手段２は、グループ分けによって決められたセクショングループを構成するプログラムセクションの配置関係を保持したまま、レイアウトの最適化を行う。このとき、配置関係、すなわち、プログラムセクションの配置順序は、そのままもしくは逆順にして保持される。レイアウト最適化では、配置関係を保持したまま、セクショングループとグループ分けされなかったプログラムセクション、もしくはセクショングループ同士を組み合わせて、再レイアウトを行う。
【発明の効果】
【００１０】
本発明のプログラムセクションレイアウト方法では、所定のアルゴリズムで順序付けされるプログラムセクションをグループ分けして配置した後、セクショングループ内のプログラムセクションの配置関係を保持したまま、セクショングループとセクショングループに属さないプログラムセクション、もしくはセクショングループ同士を組み合わせて、再レイアウトする。これによりアルゴリズム結果を保持しながら、セクショングループ同士やセクショングループと単独のプログラムセクションを組み合わせることによってセクショングループ格納領域のレイアウトを最適化することができる。すなわち、アルゴリズム結果をそのまま利用して最適化を行うので、アルゴリズムやプログラムの性質などによらず最適化される。この結果、プログラムの性質によらずキャッシュの使用効率を向上させることが可能となる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態を図面を参照して説明する。まず、実施の形態に適用される発明の概念について説明し、その後、実施の形態の具体的な内容を説明する。
本発明は、キャッシュメモリを搭載したコンピュータ用のアプリケーションプログラムについて、キャッシュミスを削減し、メモリ使用効率を向上させるプログラムセクションレイアウト方法を実現する。図１は、実施の形態に適用される発明の概念図である。
【００１２】
本発明に係るプログラムセクションレイアウト方法は、このプログラムセクションレイアウト方法の処理手順をコンピュータに実行させるレイアウト処理プログラムによって実現される。レイアウト処理プログラムをコンピュータに実行させることにより、コンピュータはプログラムセクションレイアウト方法による処理手順を実行し、レイアウト処理装置として機能する。
【００１３】
レイアウト処理装置は、プログラムセクションをグループ分けするグループ分け手段１とレイアウト最適化手段２を具備する。なお、プログラムセクションは、任意の処理機能の実行単位、たとえば、Ｃ言語の場合の関数などに相当する。グループ分け手段１には、ソースプログラムをコンパイル／アセンブルしたオブジェクトの形式で入力する。また、プログラムセクションには、コード（命令）セクションとデータセクションとがあるが、本発明はコードセクションに関するものである。
【００１４】
グループ分け手段１は、プログラムセクションを所定のアルゴリズムによって、グループ分けする。このとき生成されるセクショングループは、キャッシュメモリサイズ単位で分割されたプログラム格納領域のセクショングループ格納領域の１つに配置されるプログラムセクション群を指す。図の例では、グループ１メモリ領域１０１、グループ２メモリ領域１０２、グループ３メモリ領域１０３が、それぞれのセクショングループ格納領域に相当する。グループ分けにおいては、所定のアルゴリズムに基づく順序に従って、順番が最上位（もしくは最下位）のプログラムセクションから順にグループ１へグループ分けしていく。グループ１へグループ分けされたプログラムセクションの合計サイズがセクショングループ格納領域のメモリサイズ（キャッシュサイズに相当する）を超えない範囲で順次プログラムセクションをグループ分けしていく。そのプログラムセクションでサイズが超えてしまう場合、新たなセクショングループが設定され、同様の処理を繰り返す。このようにして、所定のアルゴリズムに基づく順序に従って、グループ１から順にプログラムセクションがグループ分けされる。
【００１５】
レイアウト最適化手段２は、このようにしてグループ分けされ、順序に従ってプログラムセクションが配置されたセクショングループについて、セクショングループ内の配置関係を保持しながら、セクショングループとグループ分けされなかったプログラムセクション、もしくはプログラムセクション同士を組み合わせ、レイアウトの最適化処理を行い、最適化されたリンク情報を出力する。セクショングループ内の配置関係を保持するとは、所定のアルゴリズムに従って順序付けて配置されたプログラムセクションの配列を保持することを意味し、配列をそのままの順序で保持する場合と、逆順に並べ替える場合とがある。たとえば、参照頻度によって参照頻度の高いものから順番に配置されたプログラムセクションを逆順に並び替えると、参照頻度の低いものから順番に配置されることになり、アルゴリズムの主題は保持されている。最適化処理について説明する。たとえば、セクショングループとグループ分けされていないプログラムセクションの場合、グループ分け終了後、グループ１メモリ領域１０１内には、プログラムセクションが格納された領域１０１ａと、次の順番のプログラムセクションが格納できなかったために生じた隙間領域１０１ｂがある。最適化処理では、この隙間領域１０１ｂに、割当てなし領域１０４に格納されているグループ割当てされなかったプログラムセクションが配置可能であるかどうかを判定し、可能であれば、隙間領域１０１ｂにこれを配置する。ここでは、割当てなし領域１０４の最後尾のプログラムセクション１０４ａがグループ１メモリ領域１０１の隙間領域１０１ｂに配置されている。また、最適化処理として、各セクショングループのプログラムセクションの配列を逆順にすることもできる。
【００１６】
以上の処理手順が実行されることにより、アルゴリズムに従った配置結果を保持しながら、セクショングループ格納領域のレイアウトを最適化することができる。
以下、実施の形態を図面を参照して詳細に説明する。
【００１７】
図２は、プログラムセクションレイアウト方法が適用されるシステム構成の一例を示した概略図である。
コンピュータのプログラム開発を支援する支援装置では、コーディングされたソースプログラムが作成されると、コンパイラ／アセンブラ部１０でコンパイル処理とアセンブル処理が実行され、オブジェクトファイルが生成される。オブジェクトファイルは、処理機能単位の複数のオブジェクトセクションから構成される。作成されたオブジェクトセクションは、リンカ部２０によってリンクされ、コンピュータが実行可能なロードオブジェクトが作成される。ここで、リンカ部２０は、オブジェクトセクションをある基準で並べ替えることができる。リンカ部２０によって作成されたロードオブジェクトは、プロファイル部３０でシミュレーション実行され、性能評価が行われる。性能評価として、たとえば、セクションごとのキャッシュ情報、呼び出し回数、占有率などが測定される。プロファイル部３０で得られた性能評価に基づいて、リンカ部２０でオブジェクトセクションが再配置される。なお、支援装置は、コーディング、コンパイラ／アセンブラ、リンカ、プロファイルの各処理を同一の装置で行うこともできるし、各処理を分担する複数の装置からなるシステム構成としてもよい。実施の形態のプログラムセクションレイアウト方法は、リンカ部２０に適用される。
【００１８】
リンカ部２０の処理機能を実現するレイアウト処理装置について説明する。図３は、本実施の形態のレイアウト処理装置のハードウェア構成例を示すブロック図である。
レイアウト処理装置１００は、ＣＰＵ（Central Processing Unit）１１１によって装置全体が制御されている。ＣＰＵ１１１には、バス１１７を介してＲＡＭ（Random Access Memory）１１２、ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）１１３、グラフィック処理装置１１４、入力インタフェース１１５、通信インタフェース１１６が接続されている。
【００１９】
ＲＡＭ１１２には、ＣＰＵ１１１に実行させるＯＳ（Operating System）のプログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１１２には、ＣＰＵ１１１による処理に必要な各種データが格納される。ＨＤＤ１１３には、ＯＳやアプリケーションのプログラムが格納される。グラフィック処理装置１１４には、モニタ１１８が接続されており、ＣＰＵ１１１からの命令に従って画像をモニタ１１８の画面に表示させる。入力インタフェース１１５には、キーボード１１９ａやマウス１１９ｂが接続されており、キーボード１１９ａやマウス１１９ｂから送られてくる信号を、バス１１７を介してＣＰＵ１１１に送信する。通信インタフェース１１６は、ネットワーク１２０に接続されており、ネットワーク１２０を介して外部装置との間でデータの送受信を行う。
【００２０】
このようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。なお、図２に示した処理機能を実現する支援装置も同様のハードウェア構成で実現することができる。
【００２１】
以下、レイアウト処理手順について詳細に説明する。まず、第１の実施の形態として、セクショングループとグループ分けされなかったプログラムセクションを組み合わせる場合について説明し、次に、第２の実施の形態として、セクショングループ同士を組み合わせる場合について説明する。以下、プログラムセクションはセクション、セクショングループは単にグループと表記する。
【００２２】
［第１の実施の形態］
第１の実施の形態では、プロファイル部３０によって作成された性能評価に基づくアルゴリズムによって、プログラムセクションのグループ分けを行う。
【００２３】
図４は、第１の実施の形態のグループ分け処理手順を示したフローチャートである。プロファイル部３０による性能評価取得後、処理が起動される。
［ステップＳ１１］  新規グループを作成する。グループは、キャッシュサイズ単位に分割されるグループ格納領域に対応して設けられる。
【００２４】
［ステップＳ１２］  性能評価結果に基づくアルゴリズムに従って、次の順番で配置されるセクションを検索する。
［ステップＳ１３］  該当するセクションがあるかどうかが判定され、セクションがない場合は処理をステップＳ１６へ進める。
【００２５】
［ステップＳ１４］  該当するセクションがあった場合、このグループの残りの領域のサイズと検索されたセクションのサイズを比較し、セクションをグループに設定した場合にグループ格納領域サイズ（キャッシュサイズ）内に収まるかどうかを判定する。サイズに収まらない場合は、ステップＳ１１に戻って、新規グループの作成からの処理を行う。
【００２６】
［ステップＳ１５］  次の順番に該当するセクションがグループ格納領域サイズに収まる場合、そのセクションをグループに追加する。そして、処理をステップＳ１２へ進め、次のセクション検索からの処理を行う。
【００２７】
［ステップＳ１６］  グループに配置されるセクションがない場合、グループごとに生じたグループ格納領域の隙間を埋める処理を行う。隙間埋め処理の詳細は後述する。
［ステップＳ１７］  オプション作成の要求があれば、オプション作成処理を実行する。
【００２８】
隙間埋め処理について説明する。図５は、第１の実施の形態の隙間埋め処理の手順を示したフローチャートである。
セクションがグループ分けされた後、処理が開始される。グループ分けにより、セクションが配置された複数のグループと、グループ分けされないセクションとがアルゴリズムに基づく順序に従って並べられている。グループ分けされないセクションとは、アルゴリズムによってグループ分けする必要がないと判定されるセクションで、たとえば、呼び出し回数の多い順に並べた場合、呼び出し回数が０のものをグループ分けしないと設定したような場合に生じる。
【００２９】
また、処理が開始される前に、あらかじめ、膨張率の制限値や最大サイズなどが設定される（ステップＳ６１）。ここで、膨張率は、全セクションのサイズと、グループ分けされてグループ格納領域に格納された後の全セクションがメモリ上に占めるサイズの割合に応じた値である。グループ分けする際、グループ格納領域に隙間が生じるなどによって、グループ分けされた後の全セクションがメモリ上に占めるサイズは、もとの全セクションのサイズよりも大きくなっている。膨張率は、最適化によってグループ化された全セクションのサイズをどの程度許容するかを示す値として設定される。また、直接制限される最大サイズを設定することもできる。
【００３０】
［ステップＳ６２］  先頭グループから順に、グループ格納領域に隙間があるかどうかを探す。
［ステップＳ６３］  隙間のあるグループ格納領域があるかどうかを判定する。ない場合、処理を終了する。
【００３１】
［ステップＳ６４］  隙間のサイズに見合ったセクションを末端（最後尾）のセクションから順に検索する。
［ステップＳ６５］  隙間のサイズに対応するセクションがあるかどうかを判定する。対応するセクションがない場合は、保留とし、隙間をあけたままステップＳ６２に戻って、次のグループの隙間の検索からの処理を行う。
【００３２】
［ステップＳ６６］  対応するセクションがあった場合、このセクションをグループ格納領域の隙間に埋める。これにより、このセクションのサイズ分のメモリ領域が、全セクションが占めるメモリサイズから減算される。
【００３３】
［ステップＳ６７］  ステップＳ６６による隙間埋め込み処理によって、減算された全セクションが占めるメモリサイズと最大サイズが比較される。また、比較は、減算された全セクションが占めるメモリサイズの膨張率と設定された膨張率で行ってもよい。そして、今回の隙間埋め処理によって、最大サイズもしくは膨張率が設定を満足したかどうかを判定する。設定が満足された場合は、処理を終了する。設定が満足されなかった場合は、ステップＳ６２に戻って、次のグループからの処理を行う。
【００３４】
以上の処理手順は、最終的に指定の膨張率または最大サイズが満たされるまで、すべてのグループの隙間について処理が行われる。このように、グループ格納領域の隙間にグループ分けされないセクションを埋め込むことによって、アルゴリズムによって配列された順序を保持しながら、全セクションを格納するメモリサイズを最適化することができる。特に、ＲＯＭなどのようにプログラムセクション領域が有限なプログラム実行環境において有効である。
【００３５】
具体例を用いて第１の実施の形態の動作を説明する。図６は、プロファイル部による性能評価結果の一例を示した図である。
図の例では、セクション名「ａ」、「ｂ」、「ｃ」、「ｄ」、「ｅ」、「ｆ」の６つのセクションについて、それぞれの占有率、参照頻度を算出している。占有率は、実行された処理全体のうち、このセクションが実行されていた割合を示している。たとえば、全体の実行時間のうち、このセクションが実行されていた時間などで計測する。参照頻度は、所定の時間内に他のセクションから参照される回数を計測した値である。図の例では、セクション「ａ」は、占有率０．１％で参照頻度は１回である。また、セクション「ｂ」は占有率２％で参照回数は１５回、セクション「ｃ」は占有率８０％で参照回数は１００００回、セクション「ｄ」は占有率１０％で参照回数は３００回、セクション「ｅ」は占有率８％で参照回数は１０回およびセクション「ｆ」は占有率０％で参照回数は０回である。
【００３６】
このような性能評価に基づくグループ分けのアルゴリズムは、任意に設定される。たとえば、占有率の多い順にセクションを順序付けるアルゴリズムであれば、セクションは、「ｃ」、「ｄ」、「ｅ」、「ｂ」、「ａ」、「ｆ」の順に順序付けられる。また、参照頻度の大きい順にセクションを順序付けるアルゴリズムであれば、「ｃ」、「ｄ」、「ｂ」、「ｅ」、「ａ」、「ｆ」の順に順序付けられる。ここでは、占有率の多い順に順序付けるとともに、占有率が１％未満のセクションについてはグループ分けしないというアルゴリズムを設定するとする。
【００３７】
このようなアルゴリズムに従って、セクションが順序付けされ、各グループにグループ分けされる。グループ分けの後には、セクションをグループの隙間に埋め込む処理が行われる。図７は、第１の実施の形態におけるグループ分け後とレイアウト最適化後のグループ構成の一例を示した図である。
【００３８】
グループ分け後の構成は、グループ１（２１０）、グループ２（２２０）の２つのグループと、グループ分けされていないセクション「ａ」２３０とセクション「ｆ」２４０が順に格納されている。グループ１（２１０）には、最も占有率の高いセクション「ｃ」２１１と、次に占有率の高いセクション「ｄ」２１２が順に配置され、隙間領域２１３ができている。グループ２（２２０）には、３番目に占有率の高いセクション「ｅ」２２１、４番目に占有率の高いセクション「ｂ」２２２が順に配置され、隙間領域２２３が生じている。グループ分けが終了した時点では、セクションが格納される全メモリのサイズは、グループ格納領域サイズ（キャッシュサイズ）×２にセクション「ａ」２３０とセクション「ｆ」２４０のサイズを加えたサイズである。
【００３９】
レイアウト最適化処理では、グループ１（２１０）の隙間領域２１３と末端のセクション「ｆ」２４０のサイズを比較し、セクション「ｆ」２４０が隙間領域２１３に収まればここへ埋め込む。ここでは、サイズ内に収まるとし、セクション「ｆ」２４０がグループ１（２１０）のセクション「ｄ」２１２の次に配置される。この処理で、セクションが格納される全メモリのサイズは、セクション「ｆ」２４０のサイズ分が減算される。また、末端のセクションは、セクション「ａ」２３０になる。
【００４０】
続いて、隙間が検索され、グループ２（２２０）の隙間領域２２３が検索される。そして、グループ２（２２０）の隙間領域２２３と現時の末端のセクション「ａ」２３０のサイズを比較し、セクション「ａ」２３０が隙間領域２２３に収まればここへ埋め込む。ここでは、サイズ内に収まるとし、セクション「ａ」２３０がグループ２（２２０）のセクション「ｂ」２２２の次に配置される。この処理で、セクションが格納される全メモリのサイズは、さらに、セクション「ａ」２３０のサイズ分が減算され、図の例では、グループ格納領域サイズ（キャッシュサイズ）×２になる。
【００４１】
このように、第１の実施の形態では、アルゴリズムによってグループ化され、グループ内で順序付けされた順番を保ちながら、占有率の低いセクションをグループ格納領域の隙間に埋めることで、キャッシュミスの発生確率を抑えたまま、メモリ領域を節約することができる。また、この手法は、所定のアルゴリズムによって設定された順序付けに基づいて最適化を行うため、どのようなアルゴリズムによってグループ分けと順序付けがされたセクションであっても、また、プログラムの性質に依存することなく最適化を行うことができる。
【００４２】
［第２の実施の形態］
第２の実施の形態は、第１の実施の形態のグループ分け処理の「隙間埋め処理」をグループの配列を交互に逆順にする「反転アルゴリズム処理」にしたものである。グループ分け処理自体は、第１の実施の形態の場合と同じであるので、説明は省略する。
【００４３】
図８は、第２の実施の形態の反転アルゴリズム処理の手順を示したフローチャートである。グループ分けが終了した時点で、各グループは、アルゴリズムに基づく順序付けに従ってセクションが配置されている。たとえば、参照頻度の高い順、あるいは、占有率の高い順に並べられている。
【００４４】
［ステップＳ８１］  グループを先頭から検索する。すなわち、グループ１から処理を開始させる。
［ステップＳ８２］  グループ番号が偶数であるかどうかを判定する。偶数でない場合は、処理をステップＳ８４へ進める。
【００４５】
［ステップＳ８３］  グループ番号が偶数であった場合、グループ内のセクションの先頭／終了アドレスをシンメトリックに反転する。すなわち、アルゴリズムに従って最も上位（先頭アドレス）に配置されたセクションを最も下位（終了アドレス）に移す。順番に従ってセクションを移動させていき、最終的には、アルゴリズムの順序付けとは逆順に並び替える。たとえば、アルゴリズムが参照頻度の高い順であれば、参照頻度の低い順に上位から配置される。すなわち、アルゴリズムが反転されている。しかしながら、アルゴリズム本来の主題である参照頻度に従った順序を付けるということは満たされている。
【００４６】
［ステップＳ８４］  次のグループ番号を検索する。
［ステップＳ８５］  次のグループがあるかどうかが判定され、なければ処理を終了する。次のグループがあれば、ステップＳ８２に戻って処理を繰り返す。
【００４７】
以上の処理手順が実行されることにより、偶数番号のグループ番号を持つグループのセクションが逆順に並び替えられる。たとえば、参照頻度が高い順に順序付けられているとすると、どのグループも上部に存在するセクションがアクセスされる可能性が高くなる。このため、上部では、キャッシュ・コンフリクトが発生しやすくなる。そこで、奇数番のグループを占有率が高い順に並べ、偶数番のグループをその反対の参照頻度が低い順に並べれば、キャッシュ・コンフリクトを緩和させることができる。
【００４８】
なお、上記の説明では、偶数番号のグループのセクション配置を反転させるとしたが、奇数番号のグループのセクションの配置を反転させるとしても同様の効果が得られる。
具体例を用いて説明する。図９は、第２の実施の形態におけるグループ分け後とレイアウト最適化後のグループ構成の一例を示した図である。
【００４９】
グループ分け後の状態では、グループ１（３１０）、グループ２（３２０）、グループ３（３３０）、グループ４（３４０）の４つのグループが設けられている。それぞれのグループは、たとえば、参照頻度の高い順に１、２、３、４、５と配置されている。もちろん、占有率の高い順であってもよい。図の例では、グループ１（３１０）は、参照頻度の高い順にａ１（３１１）、ａ２（３１２）、ａ３（３１３）、ａ４（３１４）が並べられている。同様に、参照頻度の高い順に、グループ２（３２０）は、ｂ１（３２１）、ｂ２（３２２）、ｂ３（３２３）、ｂ４（３２４）、ｂ５（３２５）と配置され、グループ３（３３０）は、ｃ１（３３１）、ｃ２（３３２）、ｃ３（３３３）と配置され、グループ４（３４０）は、ｄ１（３４１）、ｄ２（３４２）、ｄ３（３４３）、ｄ４（３４４）と配置される。すなわち、それぞれ「１」が占める上部は参照頻度が高く、下部は参照頻度が低い。このため、この状態では、上部ほど参照される回数が多く、キャッシュ・コンフリクトが発生しやすくなる。
【００５０】
そこで、レイアウト最適化処理では、偶数番のグループ２（３２０）とグループ４（３４０）のセクションを逆順に再配置する。図の例では、グループ２（３２０）は、ｂ１（３２１）、ｂ２（３２２）、ｂ３（３２３）、ｂ４（３２４）、ｂ５（３２５）の順番が、ｂ５（３２５）、ｂ４（３２４）、ｂ３（３２３）、ｂ２（３２２）、ｂ１（３２１）の順に再配置される。同様に、グループ４（３４０）は、ｄ１（３４１）、ｄ２（３４２）、ｄ３（３４３）、ｄ４（３４４）の順番が、ｄ４（３４４）、ｄ３（３４３）、ｄ２（３４２）、ｄ１（３４１）の順に再配置される。
【００５１】
図１０は、第２の実施の形態のレイアウト最適化処理後のグループの参照回数頻度の一例を示した図である。図９と同じものには同じ番号を付す。図の参照頻度は、値が右へ行くほど参照頻度が高くなる。
【００５２】
図から明らかなように、グループ１（３１０）、グループ３（３３０）は、参照頻度の高い順に配置されており、下部になるほど参照頻度が低くなる。一方、グループ２（３２）、グループ４（３４０）は、逆順、すなわち、参照頻度の低い順に配置されており、下部になるほど参照頻度が高くなる。このように、参照頻度のパターンを反転させることで、キャッシュ・コンフリクトを緩和することが可能となる。
【００５３】
ところで、第１の実施の形態と第２の実施の形態を別々に説明したが、どちらもアルゴリズム基づく順序付けは保持されているので、両方のレイアウト最適化処理を実行することもできる。たとえば、第１の実施の形態によってメモリサイズを抑えた後、さらに、偶数もしくは奇数のグループの配置順を逆順にする。
【００５４】
なお、上記の処理機能は、コンピュータによって実現することができる。その場合、レイアウト処理装置が有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記録装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ(Digital Versatile Disc)、ＤＶＤ−ＲＡＭ(Random Access Memory)、ＣＤ−ＲＯＭ(Compact Disc Read Only Memory)、ＣＤ−Ｒ(Recordable)／ＲＷ(ReWritable)などがある。光磁気記録媒体には、ＭＯ(Magneto-Optical disk)などがある。
【００５５】
プログラムを流通させる場合には、たとえば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００５６】
プログラムを実行するコンピュータは、たとえば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。
【図面の簡単な説明】
【００５７】
【図１】実施の形態に適用される発明の概念図である。
【図２】プログラムセクションレイアウト方法が適用されるシステム構成の一例を示した概略図である。
【図３】本実施の形態のレイアウト処理装置のハードウェア構成例を示すブロック図である。
【図４】第１の実施の形態のグループ分け処理手順を示したフローチャートである。
【図５】第１の実施の形態の隙間埋め処理の手順を示したフローチャートである。
【図６】プロファイル部による性能評価結果の一例を示した図である。
【図７】第１の実施の形態におけるグループ分け後とレイアウト最適化後のグループ構成の一例を示した図である。
【図８】第２の実施の形態の反転アルゴリズム処理の手順を示したフローチャートである。
【図９】第２の実施の形態におけるグループ分け後とレイアウト最適化後のグループ構成の一例を示した図である。
【図１０】第２の実施の形態のレイアウト最適化処理後のグループの参照回数頻度の一例を示した図である。
【符号の説明】
【００５８】
１  グループ分け手段
２  レイアウト最適化手段
１０  コンパイラ／アセンブラ部
２０  リンカ部
３０  プロファイル部
【図１】
2006079338.tif 000003
【図２】
2006079338.tif 000004
【図３】
2006079338.tif 000005
【図４】
2006079338.tif 000006
【図５】
2006079338.tif 000007
【図６】
2006079338.tif 000008
【図７】
2006079338.tif 000009
【図８】
2006079338.tif 000010
【図９】
2006079338.tif 000011
【図１０】
2006079338.tif 000012