(57)【要約】      （修正有）【課題】キャッシュメモリの利用効率を向上出来るコンパイル装置、及びプロセッサシステムを提供する。【解決手段】コンパイル装置は、プログラムを解析し、前記プログラム中において条件分岐命令で分岐された複数の処理の実行頻度を示すユーザ命令を検索するプログラム解析部４と、前記プログラム解析部で検索された前記ユーザ命令に応じて、前記プログラムのコンパイル順序を制御するユーザ命令制御部５と、前記ユーザ命令制御部の制御に従った前記コンパイル順序で前記プログラムをコンパイルするコンパイル部７とを具備する。【選択図】図２
2009104341.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを解析し、前記プログラム中において条件分岐命令で分岐された複数の処理の実行頻度を示すユーザ命令を検索するプログラム解析部と、
前記プログラム解析部で検索された前記ユーザ命令に応じて、前記プログラムのコンパイル順序を制御するユーザ命令制御部と、
前記ユーザ命令制御部の制御に従った前記コンパイル順序で前記プログラムをコンパイルするコンパイル部と
を具備することを特徴とするコンパイル装置。
【請求項２】
前記ユーザ命令制御部は、前記条件分岐命令で分岐される処理のうち、前記実行頻度の高い処理に相当するコードを、前記実行頻度の低い処理に相当するコードよりも先にコンパイルするよう、前記コンパイル部に命令する
ことを特徴とする請求項１記載のコンパイル装置。
【請求項３】
条件分岐命令と、前記条件分岐命令によって分岐される第１処理と、前記条件分岐命令によって分岐され且つ前記第１処理よりも実行頻度の低い第２処理と、前記第１処理と前記第２処理の前記実行頻度を示すユーザ命令とを含むプログラムを解析し、前記ユーザ命令を抽出するプログラム解析部と、
前記プログラムをコンパイルするコンパイル部と、
前記プログラム解析部で抽出された前記ユーザ命令に基づいて、前記第２処理よりも前記実行頻度の高い前記第１処理に相当するコードを、前記第２処理に相当するコードより先にコンパイルするよう、前記コンパイル部に対して命令するユーザ命令制御部と
を具備することを特徴とするコンパイル装置。
【請求項４】
請求項１または３記載のコンパイル装置と、
前記コンパイル装置により前記プログラムをコンパイルして得られたコンパイル結果を保持するメインメモリと、
前記メインメモリから前記コンパイル結果を読み出し、一時的に保持するキャッシュメモリと、
前記キャッシュメモリに保持される前記コンパイル結果を用いて演算を行うプロセッサコアと
を具備することを特徴とするプロセッサシステム。
【請求項５】
前記コンパイル結果において、前記条件分岐命令と、前記条件分岐命令によって分岐する処理のうち前記実行頻度の高い処理に相当する前記コードとは、前記メインメモリにおいて連続したアドレス空間に記憶される
ことを特徴とする請求項４記載のプロセッサシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンパイル装置及びプロセッサシステムに関する。例えば、キャッシュメモリの利用効率に関する。
【背景技術】
【０００２】
従来からプロセッサシステムでは、高速、小容量のキャッシュメモリをＣＰＵ（中央演算処理装置）内に配置させる手段が取られてきた。そして、メインメモリ内のデータが一時的にキャッシュメモリに読み出され、ＣＰＵ内のＣＰＵコアは、キャッシュメモリに読み出されたデータを用いて処理を行う。これにより、ＣＰＵコアは高速にデータアクセス出来る（例えば、特許文献１参照）。
【０００３】
しかし、従来のプロセッサシステムでは、プログラムは先頭から順にコンパイルされ、コンパイル結果はコンパイルされた順にメインメモリに記憶される。その結果、メインメモリとキャッシュメモリとの間で無駄なデータ転送が発生し、キャッシュメモリの利用効率が悪化するという問題があった。
【特許文献１】特開２００２−３０４３０２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
本発明は、キャッシュメモリの利用効率を向上出来るコンパイル装置、及びプロセッサシステムを提供する。
【課題を解決するための手段】
【０００５】
本発明の一態様に係るコンパイル装置は、プログラムを解析し、前記プログラム中において条件分岐命令で分岐された複数の処理の実行頻度を示すユーザ命令を検索するプログラム解析部と、前記プログラム解析部で検索された前記ユーザ命令に応じて、前記プログラムのコンパイル順序を制御するユーザ命令制御部と、前記ユーザ命令制御部の制御に従った前記コンパイル順序で前記プログラムをコンパイルするコンパイル部とを具備する。
【０００６】
また、本発明の一態様に係るプロセッサシステムは、前記コンパイル装置と、前記コンパイル装置により前記プログラムをコンパイルして得られたコンパイル結果を保持するメインメモリと、前記メインメモリから前記コンパイル結果を読み出し、一時的に保持するキャッシュメモリと、前記キャッシュメモリに保持される前記コンパイル結果を用いて演算を行うプロセッサコアとを具備する。
【発明の効果】
【０００７】
本発明によれば、キャッシュメモリの利用効率を向上出来るコンパイル装置、及びプロセッサシステムを提供できる。
【発明を実施するための最良の形態】
【０００８】
以下、本発明の実施の形態について、適宜図面を参照して説明する。
【０００９】
この発明の一実施形態に係るプロセッサシステムについて、図１を用いて説明する。図１は、本実施形態に係るマイクロプロセッサの概念図である。マイクロプロセッサはコンパイル装置１、メインメモリ２、ＣＰＵ（中央演算処理装置）３、及び図示せぬ外部記憶装置（例えば、ハードディスク等）を備えている。コンパイル装置１、メインメモリ２、及びＣＰＵ３は、データバスによって互いに通信可能に接続されている。
【００１０】
コンパイル装置１は、メインメモリ２から読み出したプログラムをコンパイルする。コンパイルとは例えば、ＣやＣＯＢＯＬ、及びＦｏｒｔｒａｎなどの高級言語で記述されたプログラム（以下、本実施形態では言語を問わず、単なるソースコードと称する）の文字、及び構文解析を行い、ＣＰＵ３において認識可能な機械語命令コードへと変換することである。
【００１１】
メインメモリ２は、ハードディスクから読み出した種々のデータやプログラムを保持し、またＣＰＵ３における演算結果や、コンパイル装置１で生成されたコンパイル結果（機械語命令コード）を保持する。
【００１２】
ＣＰＵ３は、ＣＰＵコア３ａとキャッシュメモリ３ｂとを備えている。ＣＰＵコア３ａは、メインメモリ２からデータやプログラムを読み出し、一時的にキャッシュメモリ３ｂに格納する。そしてＣＰＵコア３ａは、キャッシュメモリ３ｂに格納されたデータを用いて種々の演算を行う。またＣＰＵコア３ａは、コンパイル装置１の動作を制御する。キャッシュメモリ３ｂは、メインメモリに比べて小容量且つ高速なメモリであり、例えばＤＲＡＭ等の半導体メモリである。このように、キャッシュメモリ３ｂを用いることで、ＣＰＵコア３ａがメインメモリ内のデータを直接用いて演算を行う場合に比べて、ＣＰＵコア３ａの高速なデータアクセスが可能となる。
【００１３】
なお本実施形態では、マイクロプロセッサで取り扱うデータの量の大きさに関係なく、１次キャッシュ、２次キャッシュを区別せず、まとめてキャッシュメモリ３ｂと呼ぶ。
【００１４】
次に図２を用いて図１に示すコンパイル装置１の詳細について説明する。図２は、コンパイル装置１のブロック図である。図示するように、コンパイル装置１は、プログラム解析部４、ユーザ命令制御部５、コンパイル部７を備えている。
【００１５】
プログラム解析部４は、メインメモリ２からソースコード８を読み出す。そして読み出したソースコード８を解析して、ユーザ命令を検索・抽出し、検索・抽出したユーザ命令をユーザ命令制御部５へ出力する。またプログラム解析部４は、ソースコード８をコンパイル部７へ転送する。ユーザ命令については後述する。
【００１６】
ユーザ命令制御部５は、ユーザ命令参照テーブル６を備える。そしてプログラム解析部４からユーザ命令を受け取ると、ユーザ命令参照テーブル６を参照し、ユーザ命令の内容を把握する。その後、ユーザ命令制御部５は、ユーザ命令に基づき、ソースコード８のコンパイル順序を制御する。ユーザ命令参照テーブル６については後述する。
【００１７】
コンパイル部７は、プログラム解析部４から受け渡されたソースコード８を、ユーザ命令制御部５の制御に従ったコンパイル順序によりコンパイルする。コンパイルによって得られた機械語命令コード９は、順次メインメモリ２へと格納される。
【００１８】
次に上記ソースコード８について、図３を用いて説明する。図３はソースコード８の一例である。図示するソースコード８は、次のような処理を行わせるプログラムである。すなわち、まず条件αが満たされる場合（図中の３行目のif文）、次に条件βが満たされるか否かが判定される（図中の４行目のif文）。条件βが満たされれば、第１の処理が行われる（図中の６行目）。満たされなければ、図中の８行目のelseに飛び、第２の処理が行われる（図中の９行目）。また条件αが満たされなければ、図中の１０行目のelseに飛ぶ。以下、ソースコード８を構成する各行を単に「コード」と呼ぶ場合がある。
【００１９】
更に本実施形態に係るソースコード８は、ユーザ命令を含む。ユーザ命令とは、ユーザによってソースコード中に付与され、当該ソースコードが目的とする機能に対しては影響を与えないが、当該ソースコードのコンパイル順序に対して影響を与える記述である。より具体的には、ソースコードに含まれる種々の処理は、当該ソースコードを実行する機器に応じて、実行頻度の高いものと低いものとに分けられる場合がある。例えば、ある電子機器においてあるソースコードが実行される場合には、特定の条件分岐命令によって分岐される複数の処理のうち、いずれか一方が他方に比べてより実行頻度が高い（または低い）ことが予め分かっている場合がある。このような場合に、プログラマが実行頻度をソースコード内において指定するために使用する記述が、ユーザ命令である。そしてユーザ命令によって実行頻度が高いと指定された処理に相当するコードは、それに比して実行頻度が低い処理に相当するコードよりも優先的にコンパイルされる。
【００２０】
図３の例においては、４行目の条件分岐命令（条件β）に応じて、第１の処理と第２の処理とのいずれかが実行される。この際、当該ソースコード８が実行される機器（例えばＣＰＵ３）においては、第１の処理よりも第２の処理の方が、実行頻度が高かったとする。そしてその情報は、ソースコード８を作成するプログラマに既知の情報であったとする。すると、ソースコード８内には上記実行頻度を示すユーザ命令が設けられる。そのユーザ命令の一例がプラグマ（pragma）であり、図３において５行目と７行目に含まれる。図中において、５行目に位置する“#pragma start_low_frequency”は、次の行から始まるコードに相当する処理が、同じ分岐命令で分岐する別の処理よりも実行頻度が低いことを示す。また７行目に位置する“#pragma end_low_frequency”は、上記実行頻度の低い処理に相当するコードの終了を意味する。
【００２１】
すなわちソースコード８には、条件分岐命令（条件β）と、この条件分岐命令によって分岐される第１の処理と第２の処理とが含まれる。このうち、第１の処理は第２の処理に比べて実行頻度が低い。そこで、第１の処理に相当するコードを“#pragma start_low_frequency”と“#pragma end_low_frequency”とで挟むことによって、その旨の情報がソースコード８内に埋め込まれる。これがユーザ命令である。
【００２２】
次に、ユーザ命令参照テーブル６について図４を用いて説明する。図４は、ユーザ命令参照テーブル６の概念図である。
【００２３】
図示するようにユーザ命令参照テーブル６は、上記したユーザ命令とその意味との関係を保持する。すなわちテーブル６には、“#pragma start_low_frequency”が、次の行以降のコードが、実行頻度の低い処理に相当するコードであることを示す旨が保持され、また“#pragma end_low_frequency”が、実行頻度の低い処理に相当するコードの終了を示す旨が保持される。なおユーザ命令は、実行頻度の低い処理を指定するだけでなく、実行頻度の高いものを指定するものであっても良い。すなわち、図４に示すように、実行頻度の高い処理に相当するコードの開始を示す“#pragma start_high_frequency”、及びその終了を示す“#pragma end_high_frequency”を使用しても良い。
【００２４】
次に、本実施形態に係るマイクロプロセッサにおける動作の詳細を、図５のフローチャートを用いて説明する。図５は、本実施形態に係るマイクロプロセッサの詳細な動作の流れを示すフローチャートである。
【００２５】
図示するように、まず図１に示すマイクロプロセッサに対し、ソースコード８のコンパイル命令が外部から与えられる（ステップＳ０）。すると、ＣＰＵ３内のＣＰＵコア３ａはコンパイル装置１に対しコンパイル命令を出力する（図１による矢印I、図５におけるステップＳ１）。なお、外部から与えられるコンパイル命令が直接コンパイル装置１に与えられても良い。
【００２６】
するとコンパイル装置１では、上記コンパイル命令に応答してまずプログラム解析部４が、メインメモリ２に格納されたソースコード８を、データバスを介して読み出す（矢印II、Ｓ２）。次に、プログラム解析部４は記述されたコード順に、ソースコード８の文字、及び構文解析を行うと共に、ソースコード８内にユーザ命令があるかどうかを解析（検索）する（Ｓ３）。
【００２７】
プログラム解析部４がユーザ命令を発見すると（Ｓ４、ＹＥＳ）、プログラム解析部４は、ソースコード８中のユーザ命令と、そのユーザ命令が記述されている行番号とを確認し、その情報をユーザ命令制御部５に供給する（Ｓ５）。この際プログラム解析部４は、プログラム解析によって、ユーザ命令により指定される処理の条件分岐命令と、この条件分岐命令によって分岐される処理の行番号も併せて、ユーザ命令制御部５へ通知する。ユーザ命令等の情報を受け取ったユーザ命令制御部５は、ユーザ命令参照テーブル６を参照して、プログラム解析部４から受け取ったユーザ命令の内容を把握する（Ｓ６）。そして、ユーザ命令に従って、実行頻度が高い処理に相当するコードを、実行頻度の低い処理に相当するコードよりも後にコンパイルするよう、コンパイル部７へ命令する（Ｓ７）。前述の通り、実行頻度の低い処理に相当するコードは、“#pragma start_low_frequency”と“#pragma end_low_frequency”とに挟まれたコードである。
【００２８】
ステップＳ７の後コンパイル部７は、プログラム解析部４から受け取ったソースコード８を、ユーザ命令制御部５からの命令に従ってコンパイルする（Ｓ８）。またステップＳ３においてユーザ命令が無いと判断された場合には（Ｓ４、ＮＯ）、コンパイル部７はプログラム解析部４から供給されたソースコード８を、ユーザ命令制御部５の命令によらずに、コード順にコンパイルする（Ｓ９）。
【００２９】
そしてコンパイル部７は、ステップＳ８、Ｓ９で得られた機械語命令コードを、コンパイル順にメインメモリ２に格納する（矢印III、Ｓ１０）。
【００３０】
次に、ステップＳ２〜Ｓ９によりコンパイル装置１で得られた機械語命令コード９が、ＣＰＵ３によって実行される。実行にあたりＣＰＵコア３ａは、メインメモリ２から機械語命令コード９を読み出し、キャッシュメモリ３ｂへと格納させる（矢印IV、Ｓ１０）。そしてＣＰＵコア３ａは、キャッシュメモリ３ｂに読み出した機械語命令コード９を用いて演算処理を行う（矢印V、Ｓ１２）。
【００３１】
上記処理の具体例について、特にコンパイル処理に着目して、以下説明する。一例として、図３に示すソースコード８をコンパイルする場合について説明する。
【００３２】
まずプログラム解析部４は、ソースコード８を１行目から順に解析する。するとプログラム解析部４は、ソースコード８の５行目に、ユーザ命令“pragma start_low_frequency”を発見し、７行目に“pragma end_low_frequency”を発見する。そしてプログラム解析部４は、５行目及び７行目に“pragma start_low_frequency”及び“pragma end_low_frequency”が存在する旨を、ユーザ命令制御部５に通知する。更にプログラム解析部４はソースコード８を解析することにより、次の情報も併せてユーザ命令制御部５に通知する。すなわち、ユーザ命令で挟まれた第１の処理に相当するコードは、４行目の条件分岐命令に基づいて分岐する処理であり、且つ第１の処理が行われない場合には、９行目の第２の処理に相当するコードが行われる旨の情報である。
【００３３】
するとユーザ命令制御部５は、ユーザ命令参照テーブル６を参照する。これによりユーザ命令制御部５は、ソースコード８における５行目のユーザ命令と７行目のユーザ命令に挟まれたコードが、その条件分岐命令に従った他方の処理に相当するコード（第２の処理）よりも実行頻度の低い処理に相当することを把握する。そこでユーザ命令制御部５は、ソースコード８のコンパイル順序を変更する旨の命令をコンパイル部７へ出力する。つまり、第２の処理に相当するコードを、第１の処理に相当するコードよりも先にコンパイルするよう、コンパイル部７へ命令する。
【００３４】
コンパイル部７では、ユーザ命令制御部５によって指定されたコード以外は、１行目から順にコンパイルを行う。このコンパイル順序を、図３では矢印Ａ１〜Ａ４として示している。すなわち、図３に示すソースコードにおいて、まず１〜４行目のコードが順にコンパイルされる（矢印Ａ１）。４行目までのコンパイルが完了すると、ユーザ命令制御部５の命令に従い、次に８〜９行目のコンパイルが行われる（矢印Ａ２）。つまり、第２の処理に相当するコードがコンパイルされる。８〜９行目のコンパイルが完了すると、次に６行目のコンパイルが行われる（矢印Ａ３）。つまり、第１の処理に相当するコードがコンパイルされる。以後、１０行目以降のコードは、行番号順にコンパイルされる（矢印Ａ４）。
【００３５】
上記コンパイル部７がソースコード８をコンパイルした結果を、図６に示す。図６は、コンパイル部７によるコンパイルで得られた機械語命令コード９を示す。  
図示するように、機械語命令コード９を構成するコードは、コンパイル部７におけるコンパイル順序に従って配置される。すなわち、まずソースコード８の１〜４行目に相当するコードが位置し、次に８〜９行目に相当するコード（第２の処理に相当）が配置され、次に６行目に相当するコード（第１の処理に相当）が配置され、次に１０行目以降に相当するコードが配置される。
【００３６】
上記のように、本実施形態に係るマイクロプロセッサであると、コンパイル装置１にプログラム解析部４及びユーザ命令制御部５が設けられる。ユーザ命令制御部５は、ある条件分岐命令により分岐する複数の処理の実行頻度を、ユーザ命令によって把握する。そして、実行頻度の高い処理に相当するコードを、実行頻度の低い処理に相当するコードよりも先にコンパイルするよう、コンパイル部７に命令する。これにより、マイクロプロセッサにおけるキャッシュメモリの利用効率を向上出来る。本効果につき、ユーザ命令がない場合と比較しつつ、以下詳細に説明する。まず図３のソースコード８中に５、７行目のユーザ命令がない場合を仮定する。
【００３７】
図３においてユーザ命令がない場合、コンパイル部はソースコードを１行目から順にコンパイルする。その結果として得られる機械語命令コードを図７に示す。図示するように、機械語命令コードを構成するコードはコンパイル順に配置されるから、ソースコードの１〜４行目に相当するコードの次に、ソースコードの６行目（第１の処理）に相当するコードが位置する。
【００３８】
上記機械語命令コードがメインメモリに格納された際の様子を、図８に示す。図８はメインメモリのメモリ空間を示す概念図である。図示するように、機械語命令コードは、メインメモリの“０ｘ００００＿１０００”番地から“０ｘ００００＿ＦＦＦＦ”番地の間の領域に格納されていると仮定する。なお、アドレスに付した“０ｘ”とは、その後の数字が１６進数表記であることを示す。ユーザ命令が存在しない場合、コンパイルはソースコードの１行目から順に行われる。従って機械語命令コードも、ソースコードの１行目から順にメインメモリに配置される。すなわち、まずメインメモリの“０ｘ００００＿００００”番地から順に、ｉｆ文（条件β）を含むソースコードの１〜４行目に相当するコード（機械語命令コード）、第１の処理に相当するコード、及び第２の処理に相当するコードが順次格納される。
【００３９】
ＣＰＵコアが機械語命令コードを実行する際には、ＣＰＵコアはメインメモリからキャッシュメモリに機械語命令コードを読み出す。この際、メインメモリとキャッシュメモリとの間のデータの授受は、キャッシュメモリのメモリサイズ単位で行われる。例えばキャッシュメモリのメモリサイズが３２バイトであったとすると、３２バイト単位でデータの授受が行われる。
【００４０】
従って、キャッシュメモリにはまずメインメモリの“０ｘ００００＿１０００”番地をスタートアドレスとして、３２バイト分のデータが読み出される。この際のキャッシュメモリの様子を図９（ａ）に示す。図示するように、キャッシュメモリには、メインメモリの“０ｘ００００＿１０００”番地から“０ｘ００００＿１０ＦＦ”番地のデータが読み出される。そして、このときに読み出されたデータが、ソースコードにおける１〜４行目の条件分岐命令を含むコードと、第１の処理に相当するコードと、第２の処理に相当するコードの一部であり、条件分岐命令によって実際に実行される処理が第２の処理であったとする。するとキャッシュメモリには、第２の処理に相当するコードはその一部しか読み出されていない。そこで、第２の処理に相当するコードのうちの残りのコードを読み出すべく、スタートアドレスを“０ｘ００００＿１１００”として、再度、３２バイト単位での読み出しが行われる。この様子を示しているのが図９（ｂ）である。図示するように、２回目の読み出しでは、キャッシュメモリには、メインメモリの“０ｘ００００＿１１００”番地から“０ｘ００００＿１１ＦＦ”番地のデータが読み出される。以上の２回のデータ転送により、第２の処理を実行するために必要なデータが得られる。
【００４１】
つまり、条件分岐命令を実行し、それに基づいて第２の処理を行うためには、メインメモリとキャッシュメモリとの間で２回のデータ転送が必要となる。勿論、第１の処理が実行される場合には、２回目のデータ転送は不要である。しかし、当該機械語命令コードを実行する機器において、第１の処理よりも第２の処理の方が実行頻度の高い場合には、殆どの場合において２回のデータ転送が必要となる。つまり、無駄な（使用しない）データの転送が発生し、データの転送に無駄な時間を要し、キャッシュメモリの利用効率が悪化するという問題が生じる。
【００４２】
この点、本実施形態に係る構成であると、条件分岐命令で分岐される第１の処理と第２の処理との実行頻度の高低に着目し、その実行頻度の高いいずれか一方の処理を優先してコンパイルさせる。その結果として得られる機械語命令コードは、前述した図６の通りである。すなわち、機械語命令コードを構成するコードは、ソースコードの１〜４行目に相当するコードの次に、ソースコードの８〜９行目（第２の処理）に相当するコードが位置する。
【００４３】
本実施形態に係る機械語命令コードがメインメモリ２に格納された際の様子を、図１０に示す。図１０はメインメモリ２のメモリ空間を示す概念図である。図９の場合と同様に、機械語命令コード９は、メインメモリ２の“０ｘ００００＿１０００”番地から“０ｘ００００＿ＦＦＦＦ”番地の間の領域に格納されていると仮定する。本実施形態の場合には図９の場合と異なり、まずメインメモリ２の“０ｘ００００＿００００”番地からｉｆ文（条件β）を含むソースコード８の１〜４行目に相当するコード（機械語命令コード）が格納された後、次に第２の処理に相当するコードが格納され、次に第１の処理に相当するコードが順次格納される。
【００４４】
ＣＰＵコア３ａが機械語命令コード９を実行する際には、ＣＰＵコア３ａはメインメモリ２からキャッシュメモリ３ｂに機械語命令コード９を読み出す。前述の通り、メインメモリ２とキャッシュメモリ３ｂとの間のデータの授受は、キャッシュメモリ３ｂのメモリサイズ単位で行われる。例えばキャッシュメモリ３ｂのメモリサイズが３２バイトであったとする。
【００４５】
従って、キャッシュメモリにはまずメインメモリの“０ｘ００００＿１０００”番地をスタートアドレスとして、３２バイト分のデータが読み出される。この際のキャッシュメモリの様子を図１１に示す。図示するように、キャッシュメモリには、メインメモリの“０ｘ００００＿１０００”番地から“０ｘ００００＿１０ＦＦ”番地のデータが読み出される。そして、このときに読み出されるデータは、ソースコードにおける１〜４行目の条件分岐命令を含むコードと、第２の処理に相当するコードと、第１の処理に相当するコードの一部である。すなわち、条件分岐命令と第２の処理に相当するコードとは、連続したアドレスで配置されているため、キャッシュメモリ３ｂにも連続して読み出される。従って、図９の場合と異なり、メインメモリ２からキャッシュメモリ３ｂへのデータ転送は１回で済む。従って、無駄なデータ転送を最小限に抑え、キャッシュメモリの利用効率を向上出来る。
【００４６】
言い換えれば、本実施形態に係る方法であると、ユーザ命令を用いることにより、ユーザ命令制御部５に対して直接コンパイル部７の動作を制御させる。つまり、条件分岐命令によって分岐される複数の処理が存在し、且つそれらの処理間で、実行頻度の優劣がある場合には、機械語命令コードにおいて実行頻度の高い処理が前段へ、実行頻度の低い処理がそれよりも後段へ配置されるように、コンパイル部７におけるコンパイル順序を制御する。この結果、メインメモリ２内には、実行頻度の高い処理に相当するコードが、条件分岐命令に連続して配置される。従って、メインメモリ２からキャッシュメモリ３ｂへデータを転送した場合、その転送データに有効なデータが多く含まれる可能性が高くなり、キャッシュメモリ３ｂの利用効率が向上出来る。
【００４７】
なお、上記実施形態では、図３に示すように実行頻度の低いものを指定するユーザ命令のみを使用する場合を例に説明した。しかし、図４で説明したように、実行頻度の高いものを指定するユーザ命令を併せて使用しても良い。この場合について図１２を用いて説明する。図１２は、上記実施形態の第１変形例に係るソースコードを示す。
【００４８】
図示するように、第２の処理の直前の９行目に“pragma start_high_frequency”が配置され、第２の処理の直後の１１行目に“pragma end_high_frequency”が配置される。ユーザ命令制御部５は、このユーザ命令により、第２の処理が第１の処理よりも実行頻度の高い処理であることを把握する。
【００４９】
また、条件分岐命令において分岐される第１の処理及び第２の処理のうち、例えば第２の処理において、更に処理が多岐に渡る条件分岐があっても良い。このような場合について、図１３を用いて説明する。図１３は、上記実施形態の第２変形例に係るソースコードである。
【００５０】
図示するように、本変形例に係るソースコード８は、図１２で説明した内容において、第２の処理が１０行目の条件分岐命令（条件γ）によって、第３の処理と第４の処理とを含むものである。そして、第４の処理が第３の処理よりも実行頻度が高く、その旨のユーザ命令が１１、１３、１５、１７行目に設けられている。この場合には、まず１〜４行目のコードがコンパイルされ（図１３における矢印Ａ１）、次に１０行目のコードがコンパイルされる（矢印Ａ２）。引き続き、１６行目のコード（第４の処理に相当）がコンパイルされ（矢印Ａ３）、次に１２行目のコード（第３の処理に相当）がコンパイルされ（矢印Ａ４）、その後、６行目のコード（第１の処理に相当）がコンパイルされる（矢印Ａ５）。このように、条件分岐命令によって分岐される処理の少なくとも一方において更に条件分岐命令がある場合には、その処理についてもユーザ命令を付加しても良い。
【００５１】
また、上記実施形態において、ユーザ命令制御部５によるコンパイル部７の制御方法は種々の方法を用いることが出来る。例えば、ユーザ命令制御部５は、ユーザ命令の内容とユーザ命令が位置する行番号を保持する。またコンパイル部７は、コンパイル状況を逐次、ユーザ命令制御部５に通知する。そして、コンパイル部７におけるコンパイルが、コンパイル順序を入れ替える行に達した際に、ユーザ命令制御部５が次にコンパイルすべき行を指定する命令を出す。このように、コンパイル部７とユーザ命令制御部５とが、コンパイル状況とコンパイルすべき行番号とを、逐次、通知しあうことにより、コンパイル順序が制御されても良い。または、ユーザ命令制御部５は、ソースコード８全体におけるコンパイル順序を把握し、その旨の情報をコンパイル順序情報として一括してコンパイル部７に渡してもよい。
【００５２】
更に、上記実施形態では条件分岐命令としてif文を例に挙げて説明した。しかし、if文に限らず、条件分岐命令であれば上記実施形態は適用でき、３つ以上の処理に処理が分岐される場合であっても良い。この場合には、最も実行頻度の高い処理をユーザ命令によって指定しても良いし、または３つ以上の処理の実行頻度の順序を、新たなユーザ命令によって指定しても良い。
【００５３】
また、上記実施形態は唯一の実施形態では無く、種々の形態に適用することが可能である。
【００５４】
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
【図面の簡単な説明】
【００５５】
【図１】この発明の一実施形態に係るプロセッサシステムのブロック図。
【図２】この発明の一実施形態に係るコンパイル装置のブロック図。
【図３】この発明の一実施形態に係るプログラムの概念図。
【図４】この発明の一実施形態に係るユーザ命令制御部の備えるユーザ命令参照テーブルを示す概念図。
【図５】この発明の一実施形態に係るプロセッサシステムにおける処理を示すフローチャート。
【図６】この発明の一実施形態に係る機械語命令コードを示す概念図。
【図７】機械語命令コードを示す概念図。
【図８】メインメモリのメモリ空間を示す概念図。
【図９】キャッシュメモリのメモリ空間を示す概念図であり、（ａ）図は１回目のデータ転送、（ｂ）図は２回目のデータ転送の様子を示す図。
【図１０】この発明の一実施形態に係るメインメモリのメモリ空間を示す概念図。
【図１１】この発明の一実施形態に係るキャッシュメモリのメモリ空間を示す概念図。
【図１２】この発明の一実施形態の第１変形例に係るプログラムの概念図。
【図１３】この発明の一実施形態の第２変形例に係るプログラムの概念図。
【符号の説明】
【００５６】
１…コンパイル装置、２…メインメモリ、３…ＣＰＵ（中央演算装置）、３ａ…ＣＰＵコア、３ｂ…キャッシュ、４…プログラム解析部、５…ユーザ命令制御部、６…ユーザ命令参照テーブル、７…コンパイル部、８…ソースコード、９…機械語命令コード
【図１】
2009104341.tif 000003
【図２】
2009104341.tif 000004
【図３】
2009104341.tif 000005
【図４】
2009104341.tif 000006
【図５】
2009104341.tif 000007
【図６】
2009104341.tif 000008
【図７】
2009104341.tif 000009
【図８】
2009104341.tif 000010
【図９】
2009104341.tif 000011
【図１０】
2009104341.tif 000012
【図１１】
2009104341.tif 000013
【図１２】
2009104341.tif 000014
【図１３】
2009104341.tif 000015