(57)【要約】【課題】ソースプログラム内のシンボルの実行頻度を解析する情報処理装置を提供する。【解決手段】ソースファイルからソースプログラムのコードを読み込む入力手段と、ソースプログラムのコードの条件判断による分岐処理に基づいて、ソースプログラム中に含まれるシンボルの重み係数を求めるシンボル解析手段と、重み係数を出力する出力手段と、出力手段により出力される重み係数に基づいて、シンボルをメモリへ配置するシンボル配置手段とを備える。【選択図】図１
2007200240.tif 000002
【特許請求の範囲】
【請求項１】
ソースファイルからソースプログラムのコードを読み込む入力手段と、
前記ソースプログラムのコードの条件判断による分岐処理に基づいて、前記ソースプログラム中に含まれるシンボルの重み係数を求めるシンボル解析手段と、
前記重み係数を出力する出力手段と、
前記出力手段により出力される重み係数に基づいて、前記シンボルをメモリへ配置するシンボル配置手段と
を備えたことを特徴とする情報処理装置。
【請求項２】
前記メモリは、分割されていて、
前記シンボル配置手段は、前記重み係数に基づいて前記シンボル毎に順位付けを行い、当該順位に基づいて、前記シンボルを前記分割された各メモリに配置していくようにすることを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記順位付けは、各シンボルの実行頻度に基づくことを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記シンボル解析手段は、前記ソースプログラムコードの条件判断による分岐処理の数に応じて所定の係数を前記重み係数に対して乗算するようにすることを特徴とする請求項１に記載の情報処理装置。
【請求項５】
前記シンボル解析手段は、前記シンボルが繰り返し処理の対象である場合は、繰り返し回数に応じて所定の係数を前記重み係数に対して乗算するようにすることを特徴とする請求項４に記載の情報処理装置。
【請求項６】
前記シンボル解析手段は、前記シンボルが前記ソースプログラム中において出現する度に前記重み係数を求め、求めた重み係数の合計値を該シンボルの重み係数とすることを特徴とする請求項４または５に記載の情報処理装置。
【請求項７】
ソースプログラムからソースプログラムのコードを読み込むステップと、
前記ソースプログラムコードの条件判断による分岐処理に基づいて、前記ソースプログラム中に含まれるシンボルの重み係数を求めるステップと、
前記重み係数に基づいて、前記シンボルをメモリに配置するステップと
を具備することを特徴とする情報処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソースプログラム内のシンボルの実行頻度を解析する情報処理装置及び情報処理方法に関する。
【背景技術】
【０００２】
コンピュータは、図１０に示すように、プログラムされた命令コードに従って処理を実行するＣＰＵと、プログラム本体が格納されているメモリ領域であるメインメモリと、ＣＰＵが処理した結果の出力、メインメモリ内に存在しないデータを外部から取得するための入出力機器とが、バスによって接続された構成になっているが、近年のＣＰＵには、内部にキャッシュメモリを搭載しているものも多くある。キャッシュメモリにはメインメモリ内に格納されている命令コードのうち、頻繁に実行されている命令コードの一部が格納されるため、動作の遅いメインメモリヘのアクセス回数を減らすことができ、処理の高速化、消費電力の低減などが期待できる。
【０００３】
しかし、プログラムをコンパイルしてリンクすることにより生成された実行ファイルをメインメモリ上に展開した場合、頻繁に実行される命令コードが局所的に集中している可能性がある。このような状態の場合、頻繁に実行される命令コードをキャシュメモリ上にコピーしたり、またはその逆の処理が頻繁に発生するという状態（スラッシング）が発生することになる。スラッシングが多発した場合、高速にアクセスすることができるキャッシュメモリ内の命令コードを効率良く利用できないため、動作の遅いメインメモリにアクセスする回数が増加してしまい、結果的に動作速度は低下するとともに、メインメモリにアクセスする際にバスを経由するため、その分消費電流も増加することになる。
【０００４】
このような問題を解決するために、ソースコードを静的解析し、命令コードの実行頻度を算出して、各シンボルがループ文にどのように含まれているのかを抽出し、ループの重複回数とループ回数を乗算することによりシンボルの実行頻度を算出して、配置決めを行うプログラムリンクシステムが知られている（例えば、特許文献１参照）。
【特許文献１】特開２０００−０５６９８３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、キャッシュメモリの管理方法として、４ＷＡＹアソシアティブマッピングを用いたキャッシュメモリの管理方法が知られている。４ＷＡＹアソシアティブマッピングは、メモリ空間を４分割し、キャッシュメモリとメインメモリ間のフルアソシアティブマッピングを行うために用いられる手法であり、分割された各ブロックはキャッシュメモリとメインメモリ間で関連付けられており、メインメモリのブロックＭ１の領域に存在している命令コードが利用することができるキャッシュメモリ空間はブロックＣ１となり、同様に、ブロックＭ２とブロックＣ２、ブロックＭ３とブロックＣ３、ブロックＭ４とブロックＣ４が対応関係になっている（図９参照）。したがって、キャッシュメモリの有効活用という点では、頻繁に実行される命令コードが各ブロックに均等に分散して配置されるようにロードモジュールが生成されることが最も望ましい。
【０００６】
しかしながら、携帯端末装置等の情報機器内に組み込れるプログラムにおいては、タスクの優先度による実行処理やタイマを用いた実行処理も多く用いられていることから、特許文献１のプログラムリンクシステムのように、多重ループの中に含まれているシンボル（関数）が必ずしも実行頻度の高いシンボルであるとは限らないため、ループ回数だけを用いて、シンボルの実行頻度を求めてシンボルの配置を決定したのではキャッシュメモリを有効活用することができる配置にすることはできないという問題がある。
【０００７】
本発明は、このような事情に鑑みてなされたもので、ソースプログラム内のシンボルの実行頻度を解析する情報処理装置及び情報処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、ソースファイルからソースプログラムのコードを読み込む入力手段と、前記ソースプログラムのコードの条件判断による分岐処理に基づいて、前記ソースプログラム中に含まれるシンボルの重み係数を求めるシンボル解析手段と、前記重み係数を出力する出力手段と、前記出力手段により出力される重み係数に基づいて、前記シンボルをメモリへ配置するシンボル配置手段とを備えたことを特徴とする。
【０００９】
本発明は、前記メモリは、分割されていて、前記シンボル配置手段は、前記重み係数に基づいて前記シンボル毎に順位付けを行い、当該順位に基づいて、前記シンボルを前記分割された各メモリに配置していくようにすることを特徴とする。
【００１０】
本発明は、前記順位付けは、各シンボルの実行頻度に基づくことを特徴とする。
【００１１】
本発明は、前記シンボル解析手段は、前記ソースプログラムコードの条件判断による分岐処理の数に応じて所定の係数を前記重み係数に対して乗算するようにすることを特徴とする。
【００１２】
本発明は、前記シンボル解析手段は、前記シンボルが繰り返し処理の対象である場合は、繰り返し回数に応じて所定の係数を前記重み係数に対して乗算するようにすることを特徴とする。
【００１３】
本発明は、前記シンボル解析手段は、前記シンボルが前記ソースプログラム中において出現する度に前記重み係数を求め、求めた重み係数の合計値を該シンボルの重み係数とすることを特徴とする。
【００１４】
本発明は、ソースプログラムからソースプログラムのコードを読み込むステップと、前記ソースプログラムコードの条件判断による分岐処理に基づいて、前記ソースプログラム中に含まれるシンボルの重み係数を求めるステップと、前記重み係数に基づいて、前記シンボルをメモリに配置するステップとを具備することを特徴とする。
【発明の効果】
【００１５】
本発明によれば、プログラムを構成するソースコードから実行ファイル作成時に必要となるシンボル（関数、変数）を抽出し、抽出したシンボルに対して、実行条件（ＩＦ文）、繰り返し実行回数（ＦＯＲ文、ＷＨＩＬＥ文）に基づいて、各シンボルに対して重み付けに基づいて各シンボルの実行頻度を解析することが可能となる。また、この重み係数に基づいてシンボルの配置位置を決定するようにしたため、キャッシュメモリの全領域を有効利用することができ、プログラムの動作速度の高速化を図ることができるとともに、省電力化を図ることが可能になるという効果が得られる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明の一実施形態による情報処理装置を図面を参照して説明する。図１は同実施形態の構成を示すブロック図である。この図において、符号１は、ソースプログラムに基づいて、実行可能なロードモジュールを生成するロードモジュール生成部である。符号２は、キーボードから構成する入力部である。符号３は、ディスプレイ装置から構成する表示部である。符号４は、ソースプログラムが記憶されたソースファイルである。符号５は、ソースプログラム中に含まれるシンボルの実行頻度に応じた重み係数を記憶する重み係数記憶部である。符号６は、ロードモジュールを生成する際にリンクするべきオブジェクトデータが予め記憶されたライブラリである。符号７は、ロードモジュール生成部１が生成したロードモジュールを記憶するロードモジュール記憶部である。
【００１７】
符号１１は、ソースファイルに記憶されているソースプログラムのコードを解析して、ソースプログラム中に含まれるシンボル（関数等）の実行頻度に応じた重み係数を算出し、シンボル毎の重み係数を重み係数記憶部５へ記憶するシンボル解析部である。シンボル解析部１１の解析対象であるシンボルとは、関数や変数など特定のアドレスに配置されている命令コード群のことである。符号１２は、ソースファイルに記憶されているソースプログラムをコンパイルしてオブジェクトデータを出力するコンパイラである。符号１３は、コンパイラ１２が出力するオブジェクトデータからロードモジュールを生成するために、重み係数記憶部５に記憶されているシンボル毎の重み係数を参照して、シンボルのリンク処理を実行することによりロードモジュールを生成し、生成したロードモジュールをロードモジュール記憶部７へ記憶するリンカである。
【００１８】
次に、図２を参照して、図１に示すロードモジュール生成部１がロードモジュールを生成する動作を説明する。まず、入力部２からロードモジュール生成の指示がなされると、コンパイラ１２は、ソースファイル４に記憶されているソースプログラムを読み込んで、コンパイルを実行する（ステップＳ１）。これにより、ソースプログラムのオブジェクトデータが生成されることになる。一方、シンボル解析部１１は、ソースファイル４に記憶されているソースプログラムを読み込んで、プログラム中に含まれるシンボルの解析を実行し、各シンボル毎の重み係数を算出する（ステップＳ２）。シンボル解析部１１は、各シンボル毎の重み係数の大きい順にシンボル名をソートして、シンボル名と重み係数を関係付けて重み係数記憶部５に記憶する（ステップＳ３）。
【００１９】
次に、リンカ１３は、コンパイラ１２が出力するオブジェクトデータと、ライブラリ６に記憶されているライブラリデータと、重み係数記憶部５に記憶されている各シンボル毎の重み係数に基づいて、各シンボルの配置位置（アドレス）を決定して、ロードモジュールを生成するリンク処理を実行する（ステップＳ４）。そして、リンカ１３は、生成したロードモジュールをロードモジュール記憶部７へ記憶する（ステップＳ５）。
【００２０】
次に、図３を参照して、図１に示すシンボル解析部１１が図２に示す重み係数を算出する処理（ステップＳ２）を実行する際の詳細な動作を説明する。ここでは、ソースプログラムが、Ｃ言語によって記述されているものとして説明する。また、以下の説明において、ループ文とは、ｆｏｒ文、ｗｈｉｌｅ文等の繰り返し処理を行う構文のことである。また、ＩＦ文とは、条件判断を行って処理の分岐を行う構文のことである。また「←」は代入を意味している。
【００２１】
まず、シンボル解析部１１は、ループ係数とＩＦ係数に「１」をセットする（ステップＳ１１）。そして、シンボル解析部１１は、ソースファイル４から１行分（１ステートメント分）のソースコードを読み出し、読み出したソースコードがループ文またはＩＦ文の開始を示す構文であるか否かを判定する（ステップＳ１２、Ｓ１３）。そして、構文がＩＦ文の開始を示す構文であれば、ＩＦ係数に０．５（ここでは、２分岐の場合、分岐先の実行確率が２分の１になるので０．５としている）を乗算して（ＩＦ係数←ＩＦ係数×０．５）、新たなＩＦ係数とする（ステップＳ１４）。また、ループ文の開始を示す構文であれば、ループ文の構文に基づいてループ回数を取得し（ステップＳ１５）、ループ係数にループ回数を乗算して（ループ係数←ループ係数×ループ回数）、新たなループ係数とする（ステップＳ１６）。
【００２２】
一方、ステップＳ１２において、読み出したソースコードがループ文またはＩＦ文の開始を示す構文でない場合、シンボル解析部１１は、読み出したソースコードがループ文またはＩＦ文の終了を示す構文であるか否かを判定する（ステップＳ１７、Ｓ１８）。そして、構文がＩＦ文の終了を示す構文であれば、ＩＦ係数を０．５で除算し（ＩＦ係数←ＩＦ係数／０．５）、新たなＩＦ係数とする（ステップＳ１９）。また、ループ文の終了を示す構文であれば、ループ係数をループ回数で除算して（ループ係数←ループ係数／ループ回数）、新たなループ係数とする（ステップＳ２０）。
【００２３】
次に、ステップＳ１７において、読み出したソースコードがループ文またはＩＦ文の終了を示す構文でない場合（ループ文またはＩＦ文の開始文でも終了文でもない場合）、シンボル解析部１１は、読み出した構文がシンボルであるか否かを判定する（ステップＳ２１）。この判定の結果、シンボルであった場合、シンボル解析部１１は、検出されたシンボルの重み係数に対して、現時点のＩＦ係数及びループ係数を乗算してシンボル毎の累積される重み係数とする（シンボル毎に累積される重み係数←シンボル毎に累積される重み係数＋ＩＦ係数×ループ係数）。シンボル解析部１１は、この処理（ステップＳ１１〜Ｓ２２）をソースファイル４の終了まで繰り返し実行する（ステップＳ２３）ことにより各シンボル毎の重み係数が累積され算出されることになる。
【００２４】
ここで、図４〜図８を参照して、具体例を使用してシンボル解析部１１及びリンカ１３の処理結果を説明する。図４は、図１に示すソースファイル４に記憶されているソースプログラムの一例を示す図である。図５は、図４に示すソースプログラムをフローチャートで表現した図である。図４、図５において、処理ＡとシンボルＡが対応し、同様に処理Ｂ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇは、シンボルＢ、Ｃ、Ｄ、Ｅ、Ｆ、Ｇに対応する。
【００２５】
図６は、図４、５に示すソースプログラムを、図３に示す解析処理によってシンボルＡ〜Ｇの重み係数を計算した結果を示す図である。この図に示すように、図４に示すソースプログラムを図３に示す解析処理によって各シンボルの重み係数を算出すると、シンボルＡ＝７５、シンボルＢ＝３７．５、シンボルＣ＝２５、シンボルＤ＝１２．５、シンボルＥ＝６２．５、シンボルＦ＝３１．２５、シンボルＧ＝１２．５となる。この重み係数に基づいて、重み係数が大きい順となるように、ソートすると、図７に示すように、シンボルＧ、Ａ、Ｅ、Ｂ、Ｆ、Ｃ、Ｄの順となる。図７には、参考としてループ処理のみによって重み係数を求めた結果を示す。ループ処理のみによって重み係数を求めた場合、図７に示すように、シンボルＥ、Ｆは上位となるが、ループ処理（ループ文）と条件判断（ＩＦ文）によって重み係数を求めた場合は、シンボルＧ、Ａが上位となり、結果が異なることが分かる。
【００２６】
次に、図８を参照して、リンカ１３が順位付けされた各シンボルをロードモジュール上で分散して配置されるように配置位置を決定する動作を説明する。ここでは、ロードモジュールを４つのブロック（空間：ブロック１、２、３、４）に分けて配置する場合の３つの例について説明する。シンボル配置例Ａは、重み係数の大きさ順にブロック１から４へシンボルを配置するもので、具体的には、順位１をブロック１に配置し、以降順に順位２をブロック２、順位３をブロック３、順位４をブロック４へ配置し、以降同様に順位５をブロック１、・・・、順位８をブロック４へというように配置するものである。また、シンボル配置例Ｂは、シンボル配置例Ａの変更例で、順位１をブロック１に配置し、以降順に順位２をブロック２、順位３をブロック３、順位４をブロック４へ配置し、順位５をブロック４、順位６をブロック３、順位７をブロック２、順位８をブロック１に配置し、以降同様に、順位９をブロック１、・・・、順位１２をブロック４へいうように配置するものである。また、シンボル配置例Ｃは、重み係数順位の順に配置することを基本としながら、シンボル配置後の残りブロックサイズを考慮して配置するものである。
【００２７】
このように、シンボル毎に実行頻度の順位付けを行い、この順位付けに基づき、実行頻度が高いと予測される各シンボルを分散してロードモジュール上で配置するようにしたため、キャッシュメモリを有効に活用することが可能となり、実行処理速度高速化及び省電力化を実現することがができる。
【００２８】
なお、ＩＦ文（条件判断）に基づく処理がタイマを使用した処理である場合やＷａｉｔ処理の場合には、通常のＩＦ文より小さな係数を乗算するようにしてもよい。
【００２９】
以上説明したように、プログラムを構成するソースコードから実行ファイル作成時に必要となるシンボル（関数、変数）を抽出し、抽出したシンボルに対して、実行条件（ＩＦ文）、繰り返し実行回数（ＦＯＲ文、ＷＨＩＬＥ文）に基づいて、各シンボルに対して重み付けを行い、この重み係数に基づいてシンボルの配置位置を決定するようにしたため、キャッシュメモリの全領域を有効利用することができ、プログラムの動作速度の高速化を図ることができる。また、キャッシュメモリがＣＰＵ内に統合されている場合、アクセスするために必要となる電力は非常に微小なものとなり、キャッシュメモリの利用が多いほど消費電流が少なくなることから、省電力化を図ることが可能となる。また、条件判断の結果に基づいて実行されるシンボルの重み係数が小さくなるようにしたため、タスクの優先度による実行処理やタイマを用いた実行処理について最適な配置を行うことが可能となる。
【００３０】
なお、図１における処理部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することによりシンボル解析処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、ＯＳや周辺機器等のハードウェアを含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００３１】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル（差分プログラム）であっても良い。
【図面の簡単な説明】
【００３２】
【図１】本発明の一実施形態の構成を示すブロック図である。
【図２】図１に示すロードモジュール生成部１の動作を示すフローチャートである。
【図３】図１に示すシンボル解析部１１が図２に示す重み係数を算出する処理（ステップＳ２）を実行する動作を示すフローチャートである。
【図４】図１に示すソースファイル４に記憶されているソースプログラムの一例を示す説明図である。
【図５】図４に示すソースプログラムをフローチャートで表現した説明図である。
【図６】図４、５に示すソースプログラムを、図３に示す解析処理によってシンボルＡ〜Ｇの重み係数を計算した結果を示す図である。
【図７】図４、５に示すソースプログラムを、図３に示す解析処理によってシンボルＡ〜Ｇの重み係数を計算した結果を示す図である。
【図８】図１に示すリンカ１３が順位付けされた各シンボルをロードモジュール上で分散して配置されるように配置位置を決定する例を示す説明図である。
【図９】メインメモリとキャッシュメモリの関係を示す説明図である。
【図１０】コンピュータの基本構成を示す説明図である。
【符号の説明】
【００３３】
１・・・ロードモジュール生成部、１１・・・シンボル解析部、１２・・・コンパイラ、１３・・・リンカ、２・・・入力部、３・・・表示部、４・・・ソースファイル、５・・・重み係数記憶部、６・・・ライブラリ、７・・・ロードモジュール記憶部
【図１】
2007200240.tif 000003
【図２】
2007200240.tif 000004
【図３】
2007200240.tif 000005
【図４】
2007200240.tif 000006
【図５】
2007200240.tif 000007
【図６】
2007200240.tif 000008
【図７】
2007200240.tif 000009
【図８】
2007200240.tif 000010
【図９】
2007200240.tif 000011
【図１０】
2007200240.tif 000012