JP2009104341A - コンパイル装置及びプロセッサシステム - Google Patents
コンパイル装置及びプロセッサシステム Download PDFInfo
- Publication number
- JP2009104341A JP2009104341A JP2007274289A JP2007274289A JP2009104341A JP 2009104341 A JP2009104341 A JP 2009104341A JP 2007274289 A JP2007274289 A JP 2007274289A JP 2007274289 A JP2007274289 A JP 2007274289A JP 2009104341 A JP2009104341 A JP 2009104341A
- Authority
- JP
- Japan
- Prior art keywords
- compiling
- program
- instruction
- code
- user
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
【課題】キャッシュメモリの利用効率を向上出来るコンパイル装置、及びプロセッサシステムを提供する。
【解決手段】コンパイル装置は、プログラムを解析し、前記プログラム中において条件分岐命令で分岐された複数の処理の実行頻度を示すユーザ命令を検索するプログラム解析部4と、前記プログラム解析部で検索された前記ユーザ命令に応じて、前記プログラムのコンパイル順序を制御するユーザ命令制御部5と、前記ユーザ命令制御部の制御に従った前記コンパイル順序で前記プログラムをコンパイルするコンパイル部7とを具備する。
【選択図】図2
【解決手段】コンパイル装置は、プログラムを解析し、前記プログラム中において条件分岐命令で分岐された複数の処理の実行頻度を示すユーザ命令を検索するプログラム解析部4と、前記プログラム解析部で検索された前記ユーザ命令に応じて、前記プログラムのコンパイル順序を制御するユーザ命令制御部5と、前記ユーザ命令制御部の制御に従った前記コンパイル順序で前記プログラムをコンパイルするコンパイル部7とを具備する。
【選択図】図2
Description
本発明は、コンパイル装置及びプロセッサシステムに関する。例えば、キャッシュメモリの利用効率に関する。
従来からプロセッサシステムでは、高速、小容量のキャッシュメモリをCPU(中央演算処理装置)内に配置させる手段が取られてきた。そして、メインメモリ内のデータが一時的にキャッシュメモリに読み出され、CPU内のCPUコアは、キャッシュメモリに読み出されたデータを用いて処理を行う。これにより、CPUコアは高速にデータアクセス出来る(例えば、特許文献1参照)。
しかし、従来のプロセッサシステムでは、プログラムは先頭から順にコンパイルされ、コンパイル結果はコンパイルされた順にメインメモリに記憶される。その結果、メインメモリとキャッシュメモリとの間で無駄なデータ転送が発生し、キャッシュメモリの利用効率が悪化するという問題があった。
特開2002−304302号公報
本発明は、キャッシュメモリの利用効率を向上出来るコンパイル装置、及びプロセッサシステムを提供する。
本発明の一態様に係るコンパイル装置は、プログラムを解析し、前記プログラム中において条件分岐命令で分岐された複数の処理の実行頻度を示すユーザ命令を検索するプログラム解析部と、前記プログラム解析部で検索された前記ユーザ命令に応じて、前記プログラムのコンパイル順序を制御するユーザ命令制御部と、前記ユーザ命令制御部の制御に従った前記コンパイル順序で前記プログラムをコンパイルするコンパイル部とを具備する。
また、本発明の一態様に係るプロセッサシステムは、前記コンパイル装置と、前記コンパイル装置により前記プログラムをコンパイルして得られたコンパイル結果を保持するメインメモリと、前記メインメモリから前記コンパイル結果を読み出し、一時的に保持するキャッシュメモリと、前記キャッシュメモリに保持される前記コンパイル結果を用いて演算を行うプロセッサコアとを具備する。
本発明によれば、キャッシュメモリの利用効率を向上出来るコンパイル装置、及びプロセッサシステムを提供できる。
以下、本発明の実施の形態について、適宜図面を参照して説明する。
この発明の一実施形態に係るプロセッサシステムについて、図1を用いて説明する。図1は、本実施形態に係るマイクロプロセッサの概念図である。マイクロプロセッサはコンパイル装置1、メインメモリ2、CPU(中央演算処理装置)3、及び図示せぬ外部記憶装置(例えば、ハードディスク等)を備えている。コンパイル装置1、メインメモリ2、及びCPU3は、データバスによって互いに通信可能に接続されている。
コンパイル装置1は、メインメモリ2から読み出したプログラムをコンパイルする。コンパイルとは例えば、CやCOBOL、及びFortranなどの高級言語で記述されたプログラム(以下、本実施形態では言語を問わず、単なるソースコードと称する)の文字、及び構文解析を行い、CPU3において認識可能な機械語命令コードへと変換することである。
メインメモリ2は、ハードディスクから読み出した種々のデータやプログラムを保持し、またCPU3における演算結果や、コンパイル装置1で生成されたコンパイル結果(機械語命令コード)を保持する。
CPU3は、CPUコア3aとキャッシュメモリ3bとを備えている。CPUコア3aは、メインメモリ2からデータやプログラムを読み出し、一時的にキャッシュメモリ3bに格納する。そしてCPUコア3aは、キャッシュメモリ3bに格納されたデータを用いて種々の演算を行う。またCPUコア3aは、コンパイル装置1の動作を制御する。キャッシュメモリ3bは、メインメモリに比べて小容量且つ高速なメモリであり、例えばDRAM等の半導体メモリである。このように、キャッシュメモリ3bを用いることで、CPUコア3aがメインメモリ内のデータを直接用いて演算を行う場合に比べて、CPUコア3aの高速なデータアクセスが可能となる。
なお本実施形態では、マイクロプロセッサで取り扱うデータの量の大きさに関係なく、1次キャッシュ、2次キャッシュを区別せず、まとめてキャッシュメモリ3bと呼ぶ。
次に図2を用いて図1に示すコンパイル装置1の詳細について説明する。図2は、コンパイル装置1のブロック図である。図示するように、コンパイル装置1は、プログラム解析部4、ユーザ命令制御部5、コンパイル部7を備えている。
プログラム解析部4は、メインメモリ2からソースコード8を読み出す。そして読み出したソースコード8を解析して、ユーザ命令を検索・抽出し、検索・抽出したユーザ命令をユーザ命令制御部5へ出力する。またプログラム解析部4は、ソースコード8をコンパイル部7へ転送する。ユーザ命令については後述する。
ユーザ命令制御部5は、ユーザ命令参照テーブル6を備える。そしてプログラム解析部4からユーザ命令を受け取ると、ユーザ命令参照テーブル6を参照し、ユーザ命令の内容を把握する。その後、ユーザ命令制御部5は、ユーザ命令に基づき、ソースコード8のコンパイル順序を制御する。ユーザ命令参照テーブル6については後述する。
コンパイル部7は、プログラム解析部4から受け渡されたソースコード8を、ユーザ命令制御部5の制御に従ったコンパイル順序によりコンパイルする。コンパイルによって得られた機械語命令コード9は、順次メインメモリ2へと格納される。
次に上記ソースコード8について、図3を用いて説明する。図3はソースコード8の一例である。図示するソースコード8は、次のような処理を行わせるプログラムである。すなわち、まず条件αが満たされる場合(図中の3行目のif文)、次に条件βが満たされるか否かが判定される(図中の4行目のif文)。条件βが満たされれば、第1の処理が行われる(図中の6行目)。満たされなければ、図中の8行目のelseに飛び、第2の処理が行われる(図中の9行目)。また条件αが満たされなければ、図中の10行目のelseに飛ぶ。以下、ソースコード8を構成する各行を単に「コード」と呼ぶ場合がある。
更に本実施形態に係るソースコード8は、ユーザ命令を含む。ユーザ命令とは、ユーザによってソースコード中に付与され、当該ソースコードが目的とする機能に対しては影響を与えないが、当該ソースコードのコンパイル順序に対して影響を与える記述である。より具体的には、ソースコードに含まれる種々の処理は、当該ソースコードを実行する機器に応じて、実行頻度の高いものと低いものとに分けられる場合がある。例えば、ある電子機器においてあるソースコードが実行される場合には、特定の条件分岐命令によって分岐される複数の処理のうち、いずれか一方が他方に比べてより実行頻度が高い(または低い)ことが予め分かっている場合がある。このような場合に、プログラマが実行頻度をソースコード内において指定するために使用する記述が、ユーザ命令である。そしてユーザ命令によって実行頻度が高いと指定された処理に相当するコードは、それに比して実行頻度が低い処理に相当するコードよりも優先的にコンパイルされる。
図3の例においては、4行目の条件分岐命令(条件β)に応じて、第1の処理と第2の処理とのいずれかが実行される。この際、当該ソースコード8が実行される機器(例えばCPU3)においては、第1の処理よりも第2の処理の方が、実行頻度が高かったとする。そしてその情報は、ソースコード8を作成するプログラマに既知の情報であったとする。すると、ソースコード8内には上記実行頻度を示すユーザ命令が設けられる。そのユーザ命令の一例がプラグマ(pragma)であり、図3において5行目と7行目に含まれる。図中において、5行目に位置する“#pragma start_low_frequency”は、次の行から始まるコードに相当する処理が、同じ分岐命令で分岐する別の処理よりも実行頻度が低いことを示す。また7行目に位置する“#pragma end_low_frequency”は、上記実行頻度の低い処理に相当するコードの終了を意味する。
すなわちソースコード8には、条件分岐命令(条件β)と、この条件分岐命令によって分岐される第1の処理と第2の処理とが含まれる。このうち、第1の処理は第2の処理に比べて実行頻度が低い。そこで、第1の処理に相当するコードを“#pragma start_low_frequency”と“#pragma end_low_frequency”とで挟むことによって、その旨の情報がソースコード8内に埋め込まれる。これがユーザ命令である。
次に、ユーザ命令参照テーブル6について図4を用いて説明する。図4は、ユーザ命令参照テーブル6の概念図である。
図示するようにユーザ命令参照テーブル6は、上記したユーザ命令とその意味との関係を保持する。すなわちテーブル6には、“#pragma start_low_frequency”が、次の行以降のコードが、実行頻度の低い処理に相当するコードであることを示す旨が保持され、また“#pragma end_low_frequency”が、実行頻度の低い処理に相当するコードの終了を示す旨が保持される。なおユーザ命令は、実行頻度の低い処理を指定するだけでなく、実行頻度の高いものを指定するものであっても良い。すなわち、図4に示すように、実行頻度の高い処理に相当するコードの開始を示す“#pragma start_high_frequency”、及びその終了を示す“#pragma end_high_frequency”を使用しても良い。
次に、本実施形態に係るマイクロプロセッサにおける動作の詳細を、図5のフローチャートを用いて説明する。図5は、本実施形態に係るマイクロプロセッサの詳細な動作の流れを示すフローチャートである。
図示するように、まず図1に示すマイクロプロセッサに対し、ソースコード8のコンパイル命令が外部から与えられる(ステップS0)。すると、CPU3内のCPUコア3aはコンパイル装置1に対しコンパイル命令を出力する(図1による矢印I、図5におけるステップS1)。なお、外部から与えられるコンパイル命令が直接コンパイル装置1に与えられても良い。
するとコンパイル装置1では、上記コンパイル命令に応答してまずプログラム解析部4が、メインメモリ2に格納されたソースコード8を、データバスを介して読み出す(矢印II、S2)。次に、プログラム解析部4は記述されたコード順に、ソースコード8の文字、及び構文解析を行うと共に、ソースコード8内にユーザ命令があるかどうかを解析(検索)する(S3)。
プログラム解析部4がユーザ命令を発見すると(S4、YES)、プログラム解析部4は、ソースコード8中のユーザ命令と、そのユーザ命令が記述されている行番号とを確認し、その情報をユーザ命令制御部5に供給する(S5)。この際プログラム解析部4は、プログラム解析によって、ユーザ命令により指定される処理の条件分岐命令と、この条件分岐命令によって分岐される処理の行番号も併せて、ユーザ命令制御部5へ通知する。ユーザ命令等の情報を受け取ったユーザ命令制御部5は、ユーザ命令参照テーブル6を参照して、プログラム解析部4から受け取ったユーザ命令の内容を把握する(S6)。そして、ユーザ命令に従って、実行頻度が高い処理に相当するコードを、実行頻度の低い処理に相当するコードよりも後にコンパイルするよう、コンパイル部7へ命令する(S7)。前述の通り、実行頻度の低い処理に相当するコードは、“#pragma start_low_frequency”と“#pragma end_low_frequency”とに挟まれたコードである。
ステップS7の後コンパイル部7は、プログラム解析部4から受け取ったソースコード8を、ユーザ命令制御部5からの命令に従ってコンパイルする(S8)。またステップS3においてユーザ命令が無いと判断された場合には(S4、NO)、コンパイル部7はプログラム解析部4から供給されたソースコード8を、ユーザ命令制御部5の命令によらずに、コード順にコンパイルする(S9)。
そしてコンパイル部7は、ステップS8、S9で得られた機械語命令コードを、コンパイル順にメインメモリ2に格納する(矢印III、S10)。
次に、ステップS2〜S9によりコンパイル装置1で得られた機械語命令コード9が、CPU3によって実行される。実行にあたりCPUコア3aは、メインメモリ2から機械語命令コード9を読み出し、キャッシュメモリ3bへと格納させる(矢印IV、S10)。そしてCPUコア3aは、キャッシュメモリ3bに読み出した機械語命令コード9を用いて演算処理を行う(矢印V、S12)。
上記処理の具体例について、特にコンパイル処理に着目して、以下説明する。一例として、図3に示すソースコード8をコンパイルする場合について説明する。
まずプログラム解析部4は、ソースコード8を1行目から順に解析する。するとプログラム解析部4は、ソースコード8の5行目に、ユーザ命令“pragma start_low_frequency”を発見し、7行目に“pragma end_low_frequency”を発見する。そしてプログラム解析部4は、5行目及び7行目に“pragma start_low_frequency”及び“pragma end_low_frequency”が存在する旨を、ユーザ命令制御部5に通知する。更にプログラム解析部4はソースコード8を解析することにより、次の情報も併せてユーザ命令制御部5に通知する。すなわち、ユーザ命令で挟まれた第1の処理に相当するコードは、4行目の条件分岐命令に基づいて分岐する処理であり、且つ第1の処理が行われない場合には、9行目の第2の処理に相当するコードが行われる旨の情報である。
するとユーザ命令制御部5は、ユーザ命令参照テーブル6を参照する。これによりユーザ命令制御部5は、ソースコード8における5行目のユーザ命令と7行目のユーザ命令に挟まれたコードが、その条件分岐命令に従った他方の処理に相当するコード(第2の処理)よりも実行頻度の低い処理に相当することを把握する。そこでユーザ命令制御部5は、ソースコード8のコンパイル順序を変更する旨の命令をコンパイル部7へ出力する。つまり、第2の処理に相当するコードを、第1の処理に相当するコードよりも先にコンパイルするよう、コンパイル部7へ命令する。
コンパイル部7では、ユーザ命令制御部5によって指定されたコード以外は、1行目から順にコンパイルを行う。このコンパイル順序を、図3では矢印A1〜A4として示している。すなわち、図3に示すソースコードにおいて、まず1〜4行目のコードが順にコンパイルされる(矢印A1)。4行目までのコンパイルが完了すると、ユーザ命令制御部5の命令に従い、次に8〜9行目のコンパイルが行われる(矢印A2)。つまり、第2の処理に相当するコードがコンパイルされる。8〜9行目のコンパイルが完了すると、次に6行目のコンパイルが行われる(矢印A3)。つまり、第1の処理に相当するコードがコンパイルされる。以後、10行目以降のコードは、行番号順にコンパイルされる(矢印A4)。
上記コンパイル部7がソースコード8をコンパイルした結果を、図6に示す。図6は、コンパイル部7によるコンパイルで得られた機械語命令コード9を示す。
図示するように、機械語命令コード9を構成するコードは、コンパイル部7におけるコンパイル順序に従って配置される。すなわち、まずソースコード8の1〜4行目に相当するコードが位置し、次に8〜9行目に相当するコード(第2の処理に相当)が配置され、次に6行目に相当するコード(第1の処理に相当)が配置され、次に10行目以降に相当するコードが配置される。
図示するように、機械語命令コード9を構成するコードは、コンパイル部7におけるコンパイル順序に従って配置される。すなわち、まずソースコード8の1〜4行目に相当するコードが位置し、次に8〜9行目に相当するコード(第2の処理に相当)が配置され、次に6行目に相当するコード(第1の処理に相当)が配置され、次に10行目以降に相当するコードが配置される。
上記のように、本実施形態に係るマイクロプロセッサであると、コンパイル装置1にプログラム解析部4及びユーザ命令制御部5が設けられる。ユーザ命令制御部5は、ある条件分岐命令により分岐する複数の処理の実行頻度を、ユーザ命令によって把握する。そして、実行頻度の高い処理に相当するコードを、実行頻度の低い処理に相当するコードよりも先にコンパイルするよう、コンパイル部7に命令する。これにより、マイクロプロセッサにおけるキャッシュメモリの利用効率を向上出来る。本効果につき、ユーザ命令がない場合と比較しつつ、以下詳細に説明する。まず図3のソースコード8中に5、7行目のユーザ命令がない場合を仮定する。
図3においてユーザ命令がない場合、コンパイル部はソースコードを1行目から順にコンパイルする。その結果として得られる機械語命令コードを図7に示す。図示するように、機械語命令コードを構成するコードはコンパイル順に配置されるから、ソースコードの1〜4行目に相当するコードの次に、ソースコードの6行目(第1の処理)に相当するコードが位置する。
上記機械語命令コードがメインメモリに格納された際の様子を、図8に示す。図8はメインメモリのメモリ空間を示す概念図である。図示するように、機械語命令コードは、メインメモリの“0x0000_1000”番地から“0x0000_FFFF”番地の間の領域に格納されていると仮定する。なお、アドレスに付した“0x”とは、その後の数字が16進数表記であることを示す。ユーザ命令が存在しない場合、コンパイルはソースコードの1行目から順に行われる。従って機械語命令コードも、ソースコードの1行目から順にメインメモリに配置される。すなわち、まずメインメモリの“0x0000_0000”番地から順に、if文(条件β)を含むソースコードの1〜4行目に相当するコード(機械語命令コード)、第1の処理に相当するコード、及び第2の処理に相当するコードが順次格納される。
CPUコアが機械語命令コードを実行する際には、CPUコアはメインメモリからキャッシュメモリに機械語命令コードを読み出す。この際、メインメモリとキャッシュメモリとの間のデータの授受は、キャッシュメモリのメモリサイズ単位で行われる。例えばキャッシュメモリのメモリサイズが32バイトであったとすると、32バイト単位でデータの授受が行われる。
従って、キャッシュメモリにはまずメインメモリの“0x0000_1000”番地をスタートアドレスとして、32バイト分のデータが読み出される。この際のキャッシュメモリの様子を図9(a)に示す。図示するように、キャッシュメモリには、メインメモリの“0x0000_1000”番地から“0x0000_10FF”番地のデータが読み出される。そして、このときに読み出されたデータが、ソースコードにおける1〜4行目の条件分岐命令を含むコードと、第1の処理に相当するコードと、第2の処理に相当するコードの一部であり、条件分岐命令によって実際に実行される処理が第2の処理であったとする。するとキャッシュメモリには、第2の処理に相当するコードはその一部しか読み出されていない。そこで、第2の処理に相当するコードのうちの残りのコードを読み出すべく、スタートアドレスを“0x0000_1100”として、再度、32バイト単位での読み出しが行われる。この様子を示しているのが図9(b)である。図示するように、2回目の読み出しでは、キャッシュメモリには、メインメモリの“0x0000_1100”番地から“0x0000_11FF”番地のデータが読み出される。以上の2回のデータ転送により、第2の処理を実行するために必要なデータが得られる。
つまり、条件分岐命令を実行し、それに基づいて第2の処理を行うためには、メインメモリとキャッシュメモリとの間で2回のデータ転送が必要となる。勿論、第1の処理が実行される場合には、2回目のデータ転送は不要である。しかし、当該機械語命令コードを実行する機器において、第1の処理よりも第2の処理の方が実行頻度の高い場合には、殆どの場合において2回のデータ転送が必要となる。つまり、無駄な(使用しない)データの転送が発生し、データの転送に無駄な時間を要し、キャッシュメモリの利用効率が悪化するという問題が生じる。
この点、本実施形態に係る構成であると、条件分岐命令で分岐される第1の処理と第2の処理との実行頻度の高低に着目し、その実行頻度の高いいずれか一方の処理を優先してコンパイルさせる。その結果として得られる機械語命令コードは、前述した図6の通りである。すなわち、機械語命令コードを構成するコードは、ソースコードの1〜4行目に相当するコードの次に、ソースコードの8〜9行目(第2の処理)に相当するコードが位置する。
本実施形態に係る機械語命令コードがメインメモリ2に格納された際の様子を、図10に示す。図10はメインメモリ2のメモリ空間を示す概念図である。図9の場合と同様に、機械語命令コード9は、メインメモリ2の“0x0000_1000”番地から“0x0000_FFFF”番地の間の領域に格納されていると仮定する。本実施形態の場合には図9の場合と異なり、まずメインメモリ2の“0x0000_0000”番地からif文(条件β)を含むソースコード8の1〜4行目に相当するコード(機械語命令コード)が格納された後、次に第2の処理に相当するコードが格納され、次に第1の処理に相当するコードが順次格納される。
CPUコア3aが機械語命令コード9を実行する際には、CPUコア3aはメインメモリ2からキャッシュメモリ3bに機械語命令コード9を読み出す。前述の通り、メインメモリ2とキャッシュメモリ3bとの間のデータの授受は、キャッシュメモリ3bのメモリサイズ単位で行われる。例えばキャッシュメモリ3bのメモリサイズが32バイトであったとする。
従って、キャッシュメモリにはまずメインメモリの“0x0000_1000”番地をスタートアドレスとして、32バイト分のデータが読み出される。この際のキャッシュメモリの様子を図11に示す。図示するように、キャッシュメモリには、メインメモリの“0x0000_1000”番地から“0x0000_10FF”番地のデータが読み出される。そして、このときに読み出されるデータは、ソースコードにおける1〜4行目の条件分岐命令を含むコードと、第2の処理に相当するコードと、第1の処理に相当するコードの一部である。すなわち、条件分岐命令と第2の処理に相当するコードとは、連続したアドレスで配置されているため、キャッシュメモリ3bにも連続して読み出される。従って、図9の場合と異なり、メインメモリ2からキャッシュメモリ3bへのデータ転送は1回で済む。従って、無駄なデータ転送を最小限に抑え、キャッシュメモリの利用効率を向上出来る。
言い換えれば、本実施形態に係る方法であると、ユーザ命令を用いることにより、ユーザ命令制御部5に対して直接コンパイル部7の動作を制御させる。つまり、条件分岐命令によって分岐される複数の処理が存在し、且つそれらの処理間で、実行頻度の優劣がある場合には、機械語命令コードにおいて実行頻度の高い処理が前段へ、実行頻度の低い処理がそれよりも後段へ配置されるように、コンパイル部7におけるコンパイル順序を制御する。この結果、メインメモリ2内には、実行頻度の高い処理に相当するコードが、条件分岐命令に連続して配置される。従って、メインメモリ2からキャッシュメモリ3bへデータを転送した場合、その転送データに有効なデータが多く含まれる可能性が高くなり、キャッシュメモリ3bの利用効率が向上出来る。
なお、上記実施形態では、図3に示すように実行頻度の低いものを指定するユーザ命令のみを使用する場合を例に説明した。しかし、図4で説明したように、実行頻度の高いものを指定するユーザ命令を併せて使用しても良い。この場合について図12を用いて説明する。図12は、上記実施形態の第1変形例に係るソースコードを示す。
図示するように、第2の処理の直前の9行目に“pragma start_high_frequency”が配置され、第2の処理の直後の11行目に“pragma end_high_frequency”が配置される。ユーザ命令制御部5は、このユーザ命令により、第2の処理が第1の処理よりも実行頻度の高い処理であることを把握する。
また、条件分岐命令において分岐される第1の処理及び第2の処理のうち、例えば第2の処理において、更に処理が多岐に渡る条件分岐があっても良い。このような場合について、図13を用いて説明する。図13は、上記実施形態の第2変形例に係るソースコードである。
図示するように、本変形例に係るソースコード8は、図12で説明した内容において、第2の処理が10行目の条件分岐命令(条件γ)によって、第3の処理と第4の処理とを含むものである。そして、第4の処理が第3の処理よりも実行頻度が高く、その旨のユーザ命令が11、13、15、17行目に設けられている。この場合には、まず1〜4行目のコードがコンパイルされ(図13における矢印A1)、次に10行目のコードがコンパイルされる(矢印A2)。引き続き、16行目のコード(第4の処理に相当)がコンパイルされ(矢印A3)、次に12行目のコード(第3の処理に相当)がコンパイルされ(矢印A4)、その後、6行目のコード(第1の処理に相当)がコンパイルされる(矢印A5)。このように、条件分岐命令によって分岐される処理の少なくとも一方において更に条件分岐命令がある場合には、その処理についてもユーザ命令を付加しても良い。
また、上記実施形態において、ユーザ命令制御部5によるコンパイル部7の制御方法は種々の方法を用いることが出来る。例えば、ユーザ命令制御部5は、ユーザ命令の内容とユーザ命令が位置する行番号を保持する。またコンパイル部7は、コンパイル状況を逐次、ユーザ命令制御部5に通知する。そして、コンパイル部7におけるコンパイルが、コンパイル順序を入れ替える行に達した際に、ユーザ命令制御部5が次にコンパイルすべき行を指定する命令を出す。このように、コンパイル部7とユーザ命令制御部5とが、コンパイル状況とコンパイルすべき行番号とを、逐次、通知しあうことにより、コンパイル順序が制御されても良い。または、ユーザ命令制御部5は、ソースコード8全体におけるコンパイル順序を把握し、その旨の情報をコンパイル順序情報として一括してコンパイル部7に渡してもよい。
更に、上記実施形態では条件分岐命令としてif文を例に挙げて説明した。しかし、if文に限らず、条件分岐命令であれば上記実施形態は適用でき、3つ以上の処理に処理が分岐される場合であっても良い。この場合には、最も実行頻度の高い処理をユーザ命令によって指定しても良いし、または3つ以上の処理の実行頻度の順序を、新たなユーザ命令によって指定しても良い。
また、上記実施形態は唯一の実施形態では無く、種々の形態に適用することが可能である。
なお、本願発明は上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。
1…コンパイル装置、2…メインメモリ、3…CPU(中央演算装置)、3a…CPUコア、3b…キャッシュ、4…プログラム解析部、5…ユーザ命令制御部、6…ユーザ命令参照テーブル、7…コンパイル部、8…ソースコード、9…機械語命令コード
Claims (5)
- プログラムを解析し、前記プログラム中において条件分岐命令で分岐された複数の処理の実行頻度を示すユーザ命令を検索するプログラム解析部と、
前記プログラム解析部で検索された前記ユーザ命令に応じて、前記プログラムのコンパイル順序を制御するユーザ命令制御部と、
前記ユーザ命令制御部の制御に従った前記コンパイル順序で前記プログラムをコンパイルするコンパイル部と
を具備することを特徴とするコンパイル装置。 - 前記ユーザ命令制御部は、前記条件分岐命令で分岐される処理のうち、前記実行頻度の高い処理に相当するコードを、前記実行頻度の低い処理に相当するコードよりも先にコンパイルするよう、前記コンパイル部に命令する
ことを特徴とする請求項1記載のコンパイル装置。 - 条件分岐命令と、前記条件分岐命令によって分岐される第1処理と、前記条件分岐命令によって分岐され且つ前記第1処理よりも実行頻度の低い第2処理と、前記第1処理と前記第2処理の前記実行頻度を示すユーザ命令とを含むプログラムを解析し、前記ユーザ命令を抽出するプログラム解析部と、
前記プログラムをコンパイルするコンパイル部と、
前記プログラム解析部で抽出された前記ユーザ命令に基づいて、前記第2処理よりも前記実行頻度の高い前記第1処理に相当するコードを、前記第2処理に相当するコードより先にコンパイルするよう、前記コンパイル部に対して命令するユーザ命令制御部と
を具備することを特徴とするコンパイル装置。 - 請求項1または3記載のコンパイル装置と、
前記コンパイル装置により前記プログラムをコンパイルして得られたコンパイル結果を保持するメインメモリと、
前記メインメモリから前記コンパイル結果を読み出し、一時的に保持するキャッシュメモリと、
前記キャッシュメモリに保持される前記コンパイル結果を用いて演算を行うプロセッサコアと
を具備することを特徴とするプロセッサシステム。 - 前記コンパイル結果において、前記条件分岐命令と、前記条件分岐命令によって分岐する処理のうち前記実行頻度の高い処理に相当する前記コードとは、前記メインメモリにおいて連続したアドレス空間に記憶される
ことを特徴とする請求項4記載のプロセッサシステム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007274289A JP2009104341A (ja) | 2007-10-22 | 2007-10-22 | コンパイル装置及びプロセッサシステム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007274289A JP2009104341A (ja) | 2007-10-22 | 2007-10-22 | コンパイル装置及びプロセッサシステム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2009104341A true JP2009104341A (ja) | 2009-05-14 |
Family
ID=40705960
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2007274289A Pending JP2009104341A (ja) | 2007-10-22 | 2007-10-22 | コンパイル装置及びプロセッサシステム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2009104341A (ja) |
-
2007
- 2007-10-22 JP JP2007274289A patent/JP2009104341A/ja active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100465895C (zh) | 编译器、编译方法 | |
CN103348323B (zh) | 用于在计算机系统中执行目标程序的方法和系统 | |
JP2001147819A (ja) | 最適化装置および記録媒体 | |
JP2015201119A (ja) | コンパイルプログラム、コンパイル方法およびコンパイル装置 | |
RU2007101465A (ru) | Способ управления выполнением программы/команды, архитектура и процессор по этому способу | |
JP5576605B2 (ja) | プログラム変換装置およびプログラム変換方法 | |
JP2008305337A (ja) | プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム | |
CN113791770B (zh) | 代码编译器、代码编译方法、代码编译系统和计算机介质 | |
JP2009104341A (ja) | コンパイル装置及びプロセッサシステム | |
JP4719415B2 (ja) | 情報処理システム及びコード生成方法 | |
JP4159586B2 (ja) | 情報処理装置および情報処理の高速化方法 | |
JP2011039857A (ja) | プログラム変換処理装置、データ処理装置、プログラム変換処理方法およびデータ処理方法 | |
JP2008204023A (ja) | プログラマブルコントローラシステム、プログラマブルコントローラのデバッグ方法 | |
US9600252B2 (en) | System for dynamic compilation of at least one instruction flow | |
JP3913895B2 (ja) | 命令キャッシュ制御装置および記録媒体 | |
JP2009064207A (ja) | コンパイル装置 | |
JP2003202995A (ja) | 中間コード前処理装置、中間コード実行システム、中間コード前処理プログラムおよび中間コード実行プログラム | |
JP3279706B2 (ja) | オンライン・コンパイル方式 | |
JP3200277B2 (ja) | シーケンスプログラム処理方法及び装置 | |
JPH0713770A (ja) | ロードストア型プロセッサの付加的レジスタを利用する際のコンパイル方法 | |
JP2001034482A (ja) | コンパイル装置、プログラム最適化装置、コンパイル処理方法及び記録媒体 | |
JPS62182843A (ja) | 高速コンパイル/リンク方式 | |
JPH02211589A (ja) | データ駆動型制御方法およびコンパイル装置 | |
JP2002304302A (ja) | マイクロプロセッサ用目的コードの最適化装置、最適化方法及び最適化プログラムを記録した記録媒体 | |
JP2003178037A (ja) | 最適オブジェクトコード選択方法 |