(57)【要約】【課題】キャッシュメモリ最適化を効率的に実行できるコンパイラシステムを提供する。【解決手段】プロファイラ２２１から出力される最適化情報２３２をソースレベルオプティマイザ２１１に入力することによって、ソースプログラムレベルで最適化を実施する。このように構成することで、開発者は、第１ソースファイル２３１に加えて、第２ソースファイル２３３によって、自動的に施された最適化指定２３４を容易に確認することができる。【選択図】図２
2007114934.tif 000002
【特許請求の範囲】
【請求項１】
キャッシュメモリを備えるマイクロプロセッサをターゲットとし、高級言語で記述されたソースプログラムを、ターゲットとするマイクロプロセッサ向けのオブジェクトプログラムに変換するコンパイラシステムであって、
プログラムの実行時情報を解析し最適化情報を抽出するプロファイラと、
最適化情報およびソースプログラムを入力として、前記最適化情報に基づいてソースレベル最適化を実施するソースレベルオプティマイザと、
ソースレベルでの最適化が実施された後のソースコードに対して最適化を実行するコンパイラと、
を備えたことを特徴とするコンパイラシステム。
【請求項２】
プログラムの実行時情報を解析し、前記ソースレベルオプティマイザに入力可能な前記最適化情報を出力する、
ことを特徴とするプロファイラ。
【請求項３】
前記最適化情報はプログラムの実行時情報に基づき、性能向上に有効であると判断された場合に前記コンパイラで定義されている組み込み関数、またはプラグマ指定子等のソースコード挿入位置候補を指定することを特徴とする
請求項２に記載のプロファイラ。
【請求項４】
前記最適化情報には、競合性ミスの原因となるオブジェクトを明示的に特定のセットに割り当てる指示を含むことを特徴とする
請求項２に記載のプロファイラ。
【請求項５】
前記最適化情報には、生存区間が重なっているオブジェクトの集合の指示を含むことを特徴とする
請求項２に記載のプロファイラ。
【請求項６】
前記最適化情報には、メインメモリからキャッシュメモリへデータをプリフェッチさせる指示を含むことを特徴とする
請求項２に記載のプロファイラ。
【請求項７】
前記最適化情報には、キャッシュメモリの特定の領域を無効化する指示を含むことを特徴とする
請求項２に記載のプロファイラ。
【請求項８】
プロファイラから出力された最適化情報を入力として、ソースプログラムに前記最適化情報に基づいたソースレベルの最適化を行うことを特徴とする
ソースレベルオプティマイザ。
【請求項９】
前記最適化情報に基づいて、ソースプログラムにソースレベルの最適化を施す際にプログラムの論理的な動作を保証できない場合には最適化を施さないことを特徴とする
請求項８に記載のソースレベルオプティマイザ。
【請求項１０】
前記最適化情報に基づいて、ソースプログラムにソースレベルの最適化を施す際にプログラムの論理的な動作を保証できない場合でも、開発者の指定により強制的に最適化を実施することを特徴とする
請求項８に記載のソースレベルオプティマイザ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｃ＋＋言語等の高級言語で記述されたソースプログラムを機械語で記述された実行プログラムに変換するコンパイル技術に関し、特に、キャッシュメモリを有するマイクロプロセッサ上で実行されるオブジェクトプログラムに変換するコンパイル技術に関する。
【背景技術】
【０００２】
従来、キャッシュメモリを搭載するマイクロプロセッサ向けの最適化機能を有するコンパイラは種々提案されている（例えば、特許文献１または特許文献２を参照。）。これらの公知文献には、キャッシュメモリを効率的に利用する為の最適化指示（組み込み関数、プラグマ指令等）を用意することにより、最適化作業を容易にするコンパイラシステムが開示されている。
【特許文献１】特開２００５−１２２４８１号公報
【特許文献２】特開２００５−１２２５０６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
しかしながら、例えばキャッシュのアクセス状況等のプログラムの実行時情報に基づき、その情報を解析し、適切な最適化指定を行うことは依然として敷居が高く、開発者のレベル、開発期間共に高い状況にある。また従来の実行時情報を活用して最適化を行うコンパイラシステムでは、実行時情報が例えば分岐命令の分岐方向の偏り等の統計情報をとなっているため、実行時情報を用いることでどのような最適化が施されたかユーザが判断する手段がなかった。
【課題を解決するための手段】
【０００４】
上記目的を達成する為に、本発明に関わるコンパイラシステムは、キャッシュメモリを備えるマイクロプロセッサをターゲットとし、高級言語で記述されたソースプログラムを、ターゲットとするマイクロプロセッサ向けのオブジェクトプログラムに変換するコンパイラシステムであって、プログラムの実行時情報を解析し最適化情報を抽出するプロファイラと、最適化情報およびソースプログラムを入力として、前記最適化情報に基づいてソースレベル最適化を実施するソースレベルオプティマイザと、ソースレベルでの最適化が実施された後のソースコードに対して最適化を実行するコンパイラと、を備えたことを特徴とする。
【０００５】
このように構成すると、プロファイラから出力される最適化情報をソースレベルオプティマイザに入力することによって、コンパイラで定義されている最適化指定（組み込み関数、プラグマ指令挿入）等のソースレベル最適化が自動的に実施される。
【０００６】
よって開発者が実行時情報を解析しながら最適化指定を検討するよりも、格段に効率的に最適化の実施が可能となる。
【０００７】
また開発者はソースレベルオプティマイザから出力されたソースプログラムにより実施されたソースレベル最適化を容易に確認できる。
【０００８】
また、従来の実行時情報を用いた最適化とは異なり、ソースレベルの最適化を行うことにより、プロファイラが解析不可能なパターンに対して開発者自身がソースコードに対して、最適化指定の追記あるいは削除をすることも容易になる。
【０００９】
従って、上述の構成およびその機能の連携によって、キャッシュメモリ最適化を効率的に実行できるコンパイラシステムを提供することが可能になる。
【発明の効果】
【００１０】
本発明によって、実行時情報に基づく最適化の自動化が可能となる。また実行時情報を活用して実施された最適化の確認も容易になる。さらにプロファイラが適切な最適化指定を抽出できないような場合に対してもユーザで最適化の調節が可能となる。
【００１１】
従って、本発明によればキャッシュメモリ最適化を効率的に実行できるコンパイラシステムを提供することが可能となる。
【発明を実施するための最良の形態】
【００１２】
（ハードウェア形態）
図１は、本発明の実施の形態に係るコンパイラシステムがターゲットとするマイクロプロセッサ、キャッシュメモリおよびメインメモリの構成を示すブロック図である。マイクロプロセッサ１１は、キャッシュメモリ１２を介してメインメモリ１３に接続されている。プロセッサ１１、キャッシュメモリ１２およびメインメモリ１３の構成は通常のプロセッサ、キャッシュメモリおよびメインメモリと同様であるため、その詳細な説明はここでは省く。
（コンパイラシステムの構成）
図２は、本実施の形態に係るコンパイラシステムの構成を示す機能ブロック図である。コンパイラシステム２００は、第１ソースファイル２３１を、図１に示したマイクロプロセッサ１１で実行されるオブジェクトプログラム２３６に変換するシステムであり、コンパイル環境２１０、プログラム実行環境２２０から構成される。
【００１３】
ここで、コンパイル環境２１０はソースレベルオプティマイザ２１１、コンパイラ２１２から構成される。また、プログラム実行環境はプロファイラ２２１とシミュレータ２２２から構成される。各装置は図１に示したマイクロプロセッサ１１上で動作するプログラムとして実現できる。もしくはコンパイラシステム２００は、マイクロプロセッサ１１をターゲットとし、それ以外の計算機システム上で実現するクロスコンパイラシステムであってもよい。
（プロファイラ）
プロファイラ２２１はシミュレータ２２２から出力されるプログラムの実行時情報２３５を入力とする。また、プロファイラ２２１は実行時情報２３５を解析し、プログラムをより高速に実行可能となるようなコンパイラへの最適化情報２３２を出力する。最適化情報の詳細については別途説明する。
（ソースレベルオプティマイザ）
ソースレベルオプティマイザ２１１は第１ソースファイル２３１および最適化情報２３２を入力として、最適化指定２３４が付加された第２ソースファイルを出力する。最適化指定２３４の詳細については別途説明する。
（コンパイラ）
コンパイラ２１２は第２ソースファイルを図１に示されるマイクロプロセッサ１１上で実行されるオブジェクトプログラム２３６に変換する。コンパイラ２１２は組み込み関数、プラグマ指令を解析する事が出来る。なお組み込み関数とはソースプログラム中にユーザが定義せずに使える基本的な演算のための関数である。またプラグマ指令とは任意に指定できるコンパイラ２１２への指示であり、「＃ｐｒａｇｍａ」で始まる文字列である。
【００１４】
ここで組み込み関数の種類としては、以下に示す２種類の組み込み関数が存在するものとする。
【００１５】
（１−１）ｖｏｉｄ  ＿ｄｐｒｅｆ（ｕｎｓｉｇｎｅｄ  ｉｎｔ  ａｄｄｒｅｓｓ  ）;
（１−２）ｖｏｉｄ  ＿ｔｏｕｃｈ（ｕｎｓｉｇｎｅｄ  ｉｎｔ  ａｄｄｒｅｓｓ  ）;
（１−１）の組み込み関数はデータキャッシュへのプリフェッチを行う関数であり、引数で示されたアドレスを含むライン上のデータをメインメモリからキャッシュメモリへ転送する。また、（１−２）の組み込み関数はメインメモリ上のデータをキャッシュメモリに転送することなく、キャッシュメモリ上に領域を確保する関数である。
【００１６】
ここでプラグマの種類としては、以下に示す２種類のプラグマが存在するものとする。
【００１７】
（２−１）  ＃ｐｒａｇｍａ＿ｏｖｅｒｌａｐ＿ａｃｃｅｓｓ＿ｏｂｊｅｃｔ  ａ，ｂ，ｃ
（２−２）  ＃ｐｒａｇｍａ＿ｍａｐｐｉｎｇ＿ｃａｃｈｅ＿ｓｅｔ＝０  ａ
（２−１）のプラグマはオブジェクトａ，ｂおよびｃの生存区間が重なっていることを示す。オブジェクトの数は１つ以上であればいくつであってもよい。また、（２−２）のプラグマはオブジェクトaをキャッシュメモリ１２の特定の領域に割り当てることを示す。なお以降では変数あるいは配列をオブジェクトと命名して説明を行う。
（最適化情報）
ここで、プロファイラ２２１が出力する最適化情報２３２について説明する。組み込み関数に対する最適化情報の形式は例えばＸＭＬ形式で図３に示すように定義される。図３の３１は組み込み関数＿ｄｐｒｅｆに対応する最適化情報であり、同じく３２は組み込み関数＿ｔｏｕｃｈに対応する最適化情報である。図３に示すＸＭＬ形式の要素の詳細な説明は次のようになる。
【００１８】
−  Ｄｐｒｅｆ：組み込み関数＿ｄｐｒｅｆを意味する。子要素としてＶａｒｉａｂｌｅ、Ｉｎｓｅｒｔを持つ。
【００１９】
−  Ｔｏｕｃｈ：組み込み関数＿ｔｏｕｃｈ意味する。子要素としてＶａｒｉａｂｌｅ、Ｉｎｓｅｒｔを持つ。
【００２０】
−  Ｉｎｓｅｒｔ：命令が挿入されるファイル名を意味する。属性で行番号を持つ。
【００２１】
−  Ｖａｒｉａｂｌｅ：オブジェクトを意味する。子要素としてオブジェクト名（Ｎａｍｅ）、オブジェクトが定義されているファイル名（Ｄｅｆｉｎｉｔｉｏｎ）、オブジェクトが参照されている該当ソースファイル名（Ｒｅｆｅｒｅｎｃｅ）を持つ。
【００２２】
−  Ｎａｍｅ  ：オブジェクト名を意味する。
【００２３】
−  Ｄｅｆｉｎｉｔｉｏｎ：オブジェクトが定義されているファイル名を意味する。
【００２４】
−  Ｒｅｆｅｒｅｎｃｅ：オブジェクトが参照されているファイル名を意味する。属性で行番号を持つ。
【００２５】
プラグマ指令に対する最適化情報の形式は例えばＸＭＬ形式で図４に示すように定義される。図４の４１は、プラグマ指令＃ｐｒａｇｍａ＿ｏｖｅｒｌａｐ＿ａｃｃｅｓｓ＿ｏｂｊｅｃｔに対応する最適化情報であり、図４の４２はプラグマ指令＃ｐｒａｇｍａ＿ｍａｐｐｉｎｇ＿ｃａｃｈｅ＿ｓｅｔに対応する最適化情報である。図４に示すＸＭＬ形式の要素の詳細な説明は次のようになる。（但し図３で既に現れている要素の説明は省く。
）
−  Ｏｖｅｒｌａｐ＿Ａｃｃｅｓｓ＿Ｏｂｊｅｃｔ：子要素に指定した全てのオブジェクトのアクセスしている区間が重なっていることを意味する。子要素として、Ｖａｒｉａｂｌｅを持つ。
【００２６】
−Ｍａｐｐｉｎｇ＿Ｃａｃｈｅ＿Ｓｅｔ：子要素に指定したオブジェクトをキャッシュの特定セットに割り付けることを意味する。子要素として、Ｖａｒｉａｂｌｅ、Ｃａｃｈｅ＿Ｓｅｔをもつ
−  Ｃａｃｈｅ＿Ｓｅｔ：キャッシュのセット番号を意味する。
（データ配置方法の概略）
ここで、本コンパイラシステムにおける最適化の効果について説明する。図５に５１に最適化が施される前のソースプログラムを示す。図５１のソースプログラムではオブジェクトｂ１とｂ２とで生存区間が重なっているが、オブジェクトのサイズが丁度キャッシュメモリサイズの半分となるため、図７の７１に示すような配置となる。
【００２７】
図７の７１に示すような配置ではｂ１とｂ２が同一セットに割り当てられる為、ｂ１とｂ２とで競合性ミスが発生する。この競合性ミスを回避するようにプラグマ指令を施したソースプログラムが図５の５２となる。図５の５２にはｂ１とｂ２とで生存区間が重なっていることを表すプラグマ指令が付加されている。図５の５２に示すプラグマ指令が記述された配置結果は図７の７２となる。図７の７２ではｂ１とｂ２が同一セットに割り当てられていないため、競合性ミスを回避できている。
【００２８】
一方、図６に示されるソースプログラムではオブジェクトの大きさがキャッシュサイズに等しい為、オブジェクトの配置を任意のキャッシュセットに明示的に指定するプラグマ指令を指定することによって競合性ミスを回避している。その配置の変化を図８に示す。
【００２９】
図８の８１はｂ１とｂ２が同一セットに割り当てられているため、競合性ミスが発生している配置である。一方、図８の８２はｂ１をセット０、ｂ２をセット１に配置することによって競合性ミスを回避している配置である。
（コンパイラシステムの構成要素の説明）
図９に本発明が係るプロファイラの構成を示す機能ブロック図を示す。プロファイラ９１０は、実行ログ受け取り部９１１、アクセス状況解析部９１２、最適化情報出力部９１３およびアドレス抽出部９１４から構成される。実行ログ受け取り部９１１は実行ログ２３５を受け取りメモリアクセスの状況を読み取る。なお実行ログ２３５は例えば全てのメモリアクセス命令のログであり、そのフォーマットは、例えば、以下のようになる。
【００３０】
（３）（命令アドレス、命令がアクセスしたアドレス、キャッシュ状況）
しかしながら上記フォーマットは本発明の実施に係る１つの実施例であり、実行ログ２３５が上記フォーマットに限定されるものではない。
【００３１】
またアドレス抽出部９１４はオブジェクトプログラム２３６を入力として、オブジェクトプログラム２３６のデバッグ情報を読み取り、アドレス情報９１５を出力する。アドレス情報９１５はオブジェクトのアドレス範囲を設定する。例えば、オブジェクトの名前がａ、開始アドレスが０ｘ００００００００、ｉｎｔ型の５１２要素を持つ配列の場合、アドレス情報９１５に保持される情報は以下のようになる。
【００３２】
（４）オブジェクトａのアドレス情報
オブジェクト名：ａ
開始アドレス：０ｘ００００００００
終了アドレス：０ｘ０００００８００
アドレス情報９１５は、オブジェクト毎に（４）で示されるフォーマットで示されるデータ構造をノードとするリスト構造で表現される。
【００３３】
アクセス状況解析部９１２ではアドレス情報９１５および実行ログの命令がアクセスしたアドレスを参照してオブジェクト毎のアクセス状況を判断する。
【００３４】
図１０はプロファイラ９１０が実行するアクセス状況解析部９１２のフローチャートである。アクセス状況解析部９１２は、オブジェクトの生存区間の重なりを調べる（Ｓ１１）。
【００３５】
次に、アクセス状況解析部９１２は、生存区間の重なりの強いオブジェクトをグループ化する（Ｓ１２）。ここで生存区間の重なりの強さとは、あるオブジェクトがアクセスされて、サイクル数もしくは命令数による特定の閾値以内で、別のオブジェクトがアクセスされる頻度を表す。次にアクセス状況解析部９１２は、全てのグループ化されたオブジェクトに対して次に示す操作を繰り返す。
【００３６】
アクセス状況解析部９１２は、グループ化されたオブジェクトの合計サイズがキャッシュウェイのサイズよりも大きいか判定する（Ｓ１３）。
【００３７】
次にグループ化されたオブジェクトの合計サイズがキャッシュウェイのサイズよりも大きい場合には、アクセス状況解析部９１２はキャッシュの競合状況を調べ、グループ内の各々のオブジェクトに対して、キャッシュの特定領域に配置されるように指定を行う。
【００３８】
次にグループ化されたオブジェクトの合計サイズがキャッシュウェイのサイズよりも大きい場合には、アクセス状況解析部９１２は生存区間が重なっているグループ化されたオブジェクトとして指定を行う。
【００３９】
アクセス状況解析部９１２で全てのオブジェクトの解析が終了すると、プロファイラ９１０は最適化情報出力部９１３で解析結果を最適化情報に変換する。例えばアクセス状況解析部９１２で、ｆｉｌｅ  ｃで定義および参照されるオブジェクトａがキャッシュのセット０に配置されるべきだと判定すると、図４の４２に示す最適化情報が生成される。
【００４０】
図１１は本実施の形態に係るソースレベルオプティマイザの構成を示す機能ブロック図である。ソースレベルオプティマイザ１１１０は最適化情報読み取り部１１１１、ソースファイル解析部１１１２、最適化情報適用部１１１３から構成される。
【００４１】
ソースレベルオプティマイザは、第１ソースファイル２３１および最適化情報２３２を入力として、最適化情報読み取り部１１１で最適化情報２３２を読み込む。次にソースファイル解析部１１３で第１ソースファイルを解析し、最適化情報２３２の内で第１ソースファイルに適用可能な最適化情報を抽出する。次に最適化情報適用部１１３で第１ソースファイルに適用可能な最適化情報に基づく最適化指定２３４を適用した第２ソースファイルを生成する。
【産業上の利用可能性】
【００４２】
本発明は、コンパイラシステムに適用でき、特にキャッシュメモリを有するマイクロプロセッサをターゲットとするコンパイラシステムに適用できる。また特に組み込み分野向けのマイクロプロセッサをターゲットとするコンパイラシステムにも適用できる。
【図面の簡単な説明】
【００４３】
【図１】本発明の実施の形態に係るコンパイラシステムがターゲットとするマイクロプロセッサ、キャッシュメモリおよびメインメモリの構成を示すブロック図
【図２】本実施の形態に係るコンパイラシステムの構成を示す機能ブロック図
【図３】本実施の形態に係る組み込み関数に対応した最適化情報の形式を示すブロック図
【図４】本実施の形態に係るプラグマ指令に対応した最適化情報の形式を示すブロック図
【図５】本実施の形態に係るソースプログラムの変換例を示す図
【図６】本実施の形態に係るソースプログラムの変換例を示す図
【図７】本実施の形態に係るデータ配置結果を示す図
【図８】本実施の形態に係るデータ配置結果を示す図
【図９】本実施の形態に係るプロファイラの構成を示す機能ブロック図
【図１０】本実施の形態に係る変数アクセス状況解析部を示すフローチャート
【図１１】本実施の形態に係るソースレベルオプティマイザの構成を示す機能ブロック図
【符号の説明】
【００４４】
１１  プロセッサ
１２  キャッシュメモリ
１３  メインメモリ
２００  コンパイラシステム
２１０  コンパイル環境
２１１  ソースレベルオプティマイザ
２１２  コンパイラ
２２０  プログラム実行環境
２２１  プロファイラ
２２２  シミュレータ
３１  組み込み関数＿ｄｐｒｅｆに対応する最適化情報
３２  組み込み関数＿ｔｏｕｃｈに対応する最適化情報
４１  プラグマ指令＃ｐｒａｇｍａ＿ｏｖｅｒｌａｐ＿ａｃｃｅｓｓ＿ｏｂｊｅｃｔに対応する最適化情報
４２  プラグマ指令＃ｐｒａｇｍａ＿ｍａｐｐｉｎｇ＿ｃａｃｈｅ＿ｓｅｔに対応する最適化情報
５１  最適化が施される前のソースプログラム
５２  競合性ミスを回避するようにプラグマ指令を施したソースプログラム
６１  最適化が施される前のソースプログラム
６２  オブジェクトの配置を任意のキャッシュセットに明示的に指定するプラグマ指令を指定したソースプログラム
７１  競合性ミスが発生する配置
７２  競合性ミスを回避できている配置
８１  競合性ミスが発生する配置
８２  競合性ミスを回避できている配置
９１０  プロファイラ
９１１  実行ログ受け取り部
９１２  アクセス状況解析部
９１３  最適化情報出力部
９１４  アドレス情報抽出部
１１１０  ソースレベルオプティマイザ
１１１１  最適化情報読み取り部
１１１２  ソースファイル解析部
１１１３  最適化情報適用部
【図１】
2007114934.tif 000003
【図２】
2007114934.tif 000004
【図３】
2007114934.tif 000005
【図４】
2007114934.tif 000006
【図５】
2007114934.tif 000007
【図６】
2007114934.tif 000008
【図７】
2007114934.tif 000009
【図８】
2007114934.tif 000010
【図９】
2007114934.tif 000011
【図１０】
2007114934.tif 000012
【図１１】
2007114934.tif 000013