JP2004220085A - コンパイル方法、及びデータ処理装置。 - Google Patents
コンパイル方法、及びデータ処理装置。 Download PDFInfo
- Publication number
- JP2004220085A JP2004220085A JP2003003310A JP2003003310A JP2004220085A JP 2004220085 A JP2004220085 A JP 2004220085A JP 2003003310 A JP2003003310 A JP 2003003310A JP 2003003310 A JP2003003310 A JP 2003003310A JP 2004220085 A JP2004220085 A JP 2004220085A
- Authority
- JP
- Japan
- Prior art keywords
- program
- access
- source program
- instruction
- external
- 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.)
- Granted
Links
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
【解決手段】コンパイル方法であって、外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第1のステップと、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算する第2のステップと、前記第2のステップで演算した実動作速度を比較して、実動作速度の速い前記第1のステップで作成したオブジェクトコードを選択して出力する第3のステップと、を有することを特徴としている。
【選択図】図2
Description
【発明の属する技術分野】
本発明は、外部記憶装置に記憶されたデータの読み出しや書き込みを行う必要のある命令を含むプログラムのコンパイル方法、及びコンパイルされたプログラムが実行されるデータ処理装置に関する。
【0002】
【従来の技術】
従来からプログラムは、所定時間内に処理されることが求められている。そのため、CPUが1つの命令を処理できる期間内に複数の命令を詰め込んだり、無駄な処理を省く等の処理を行い、コンパイラによって作成されたオブジェクトコードの命令数自体を少なくさせることにより、コンパイラによる実行速度の最適化が求められている。
【0003】
コンパイラによる実行速度の最適化の1つの方法として従来は、C言語で記述された大域変数群を構造体でグループ化して、変数が格納されるメモリ領域を所定の領域に割り振ることにより、メモリ読み出し命令に関するオブジェクトコード自体を削減させ、全体の処理の実行効率を上げる技術がある(例えば特許文献1参照)。
【0004】
一方、プロセッサ内では、通常、命令のパイプライン処理が行われている。
【0005】
パイプライン処理の技術として、従来は、シーケンシャルに複数の命令が実行される場合に、第1命令をデコードするときに第2命令を別のメモリに記憶させ、第1命令を実行するとき記憶された第2命令を読み出し、以後順次命令を実行させることにより、処理時間の短縮を図ることが行われている(例えば特許文献2参照)。
【0006】
具体的にパイプラインの処理について説明する。
【0007】
図10に示すように各命令は、プログラムフェッチ(F)、命令デコード(D)、実行(E)の3段階で構成され、各段階を時分割されたCPUの各サイクルに割り当て、複数のプログラムを1サイクル単位ごとにずらして実行される。
【0008】
すなわち、1つめのプログラムは、1番目のCPUサイクルで実行プログラムがフェッチ(F1)されて、プログラムが実行可能な状態におかれ、2番目のサイクルではフェッチされたプログラムに対する命令がデコード(D1)され、3番目のサイクルでは、デコードした命令をもとにプログラムが実行される(E1)。
【0009】
一方、2つめのプログラムは、1つめのプログラムがデコードされる2番目のサイクルのときにフェッチ(F2)され、以後順番に命令のデコード、プログラムの実行が行われる(D2、E2)。
【0010】
さらに、3つめのプログラムは、1つめのプログラムが実行され(E1)、かつ、2つめのプログラムに対する命令がデコードされる(D2)サイクルのときにフェッチされ、以後順番にデコード、実行が行われる(D3、E3)。
【0011】
かかるパイプライン処理により、複数のプログラムが同時にあたかも同時に実行され、複数の処理が効率よく実行される。
【0012】
一方、近年半導体技術の向上によりデバイス内部の動作スピードは飛躍的に向上している。たとえば、デバイス内部の内部バスの転送レートが従来に比べ高くなっているとともに、上述したCPU1サイクルの周波数が短くなったことで従来に比べ短いサイクル時間で命令の処理が可能となっている。
【0013】
しかし、内部デバイスの動作スピードが向上している反面、外部デバイスへのアクセススピードの高速化はそれほど進んでいない。
【0014】
そのため、プロセッサが外部デバイスにアクセスする場合に、内部デバイスへのアクセスはCPUの1サイクルでほぼ実行できるのに対し、外部デバイスへのアクセスは、数サイクル、時には数十サイクルの時間がかかることがある。
【0015】
具体的に以下説明する。
【0016】
図11に示すように、プログラムの実行時に使用されるデータが外部デバイスに記憶されている場合に、たとえば1番目のプログラムは、CPUサイクルで3サイクル目のとき本来実行されるべきであるが、外部デバイスからプログラムの実行に必要なデータの読み出しに時間がかかるため、実際にはCPUサイクルで6サイクル目のときに実行されることになる。
【0017】
同様に、2番目のプログラムもCPUサイクルで4サイクル目に本来実行されるはずであるが、実際には7サイクル目、3番目のプログラムもCPUサイクルで8サイクル目に、実行されることになる。
【0018】
これは、外部デバイスに接続された外部バスのデータの転送レートが、プロセッサ内部の内部バスのデータ転送レートに比べ低いことが原因だからである。
【0019】
すなわち、内部デバイスにおける内部バスの転送レートが高いため、各命令はCPUの1サイクル内で処理できるものという前提でパイプライン処理が行われるのに対し、外部バスを介して外部デバイスに記憶されたデータは、外部バスの転送レートが内部バスの転送レートに比べ低いため、内部デバイスへの読み出しに時間がかかり、CPUの各サイクル内で処理できないからである。
【0020】
このようにプロセッサが処理できず、処理待ちの状態をパイプラインストールという。
【0021】
【特許文献1】
特開2002−182926号広報
【0022】
【特許文献2】
特開2001−175470号広報
【0023】
【発明が解決しようとする課題】
したがって、ソースプログラムで命令数を削減しても、外部デバイスに記憶されたデータの読み出しについての命令があった場合に、その読み出し自体に時間がかかるためプログラムの実行スピードを上げることができない。
【0024】
これを回避するため、オブジェクトコードレベルで外部メモリへの読み出し/書き込み命令(Load/Store命令)を極力減らすことが必要になる。例えば、プログラム設計者自らの手作業で、Load/Store命令が少なくなるようなコードを作成したり、内部レジスタへの一時的なコピーを作成してLoad/Store命令をプログラム全体で少なくさせるコードの作成を行っている。
【0025】
そのため、プログラムコードの内容が複雑になり設計効率が悪く、また、デバイスに特化したプログラムコードのためデバイスが変更されたときに柔軟に対応できないという、問題が発生する。さらに、内部レジスタへの一時的コピー処理を行わせようとしてもコンパイラによっては処理に時間がかかったり、命令数が多くなるためその処理自体が削除されてしまう、という問題点が発生する。
【0026】
また、ソフトウェアシュミレーション上でも、全ての命令がCPUの1サイクルで計算されるため、シュミレーションと実動作とで実行スピードの乖離が生じ、正確な見積もり作業を行うこができない、という問題点があった。
【0027】
本発明は、ソースプログラム内に外部装置に対するアクセスを含む命令があったときでも短い設計時間で高性能のオブジェクトコードを作成することを目的とするものである。また、本発明は、外部装置に変更が生じたときでも仕様変更に柔軟に対応できるオブジェクトコードを作成することを目的とするものである。さらに、本発明は、シュミレーション時と実動作時とのプログラム実行スピードの乖離をなくしてプログラムの正確な見積もり作業を行うことを目的とするものである。
【0028】
【課題を解決するための手段】
上記課題を解決するため本発明は、ソースプログラムからオブジェクトプログラムを作成するコンパイル方法であって、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算し、演算した実動作速度を比較して、実動作速度の速いオブジェクトプログラムを選択して出力するようにした。これにより、ソースプログラムに外部装置にアクセスする必要のある命令が含まれていても、最適な動作で実行するオブジェクトコードを短期間で得ることが可能であり、また外部装置の変更に対しても柔軟に仕様変更が可能である。
【0029】
また、実動作速度の速いオブジェクトコードに演算した実動作速度を記述するようにしたので、オブジェクトプログラムをプロセッサに搭載したときの実行速度を正確に算出し、正確な速度の見積もり作業を行うことができる。
【0030】
さらに、上記課題を解決するために本発明は、データ処理装置において、外部記憶手段に記憶されたデータが入力されるレジスタと、レジスタに記憶された前記データに基づいて演算を行う演算手段と、演算手段から外部記憶手段へのアクセス要求命令が入力されて、前記データの入力を行うレジスタへのアクセスが行われないようにレジスタを制御する外部アクセス制御部とを備え、演算部は外部アクセス制御部が外部記憶手段へアクセスを行っている間、他の命令に対する演算を行うようにしたので、アクセススピードの遅い外部装置に対してアクセスが必要な命令がプログラムに含まれている場合でも、実行パイプラインの無駄な空きがなくなり、効率よくプログラムを実行することができる。
【0031】
さらに、上記課題を解決するために本発明は、外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換するコンパイル方法であって、ソースプログラムにおいて外部記憶手段へのアクセスが必要な命令と、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて前記外部記憶手段へのアクセスを行っている間に実行可能な他の命令との順序を、前記ソースプログラムに記述されている順序が、前記アクセスが必要な命令よりも前記他の命令が先にある場合に順序を入れ換えて、オブジェクトプログラムを出力するようにしたので、アクセススピードの遅い外部装置に対してアクセスが必要な命令がソースプログラム含まれていても、その命令の終了を待たず、実行パイプラインの無駄な空きがなくなり、効率よくプログラムを実行することができる。
【0032】
さらに、本発明は、命令の順序を入れ換えたオブジェクトプログラムに演算した実動作速度を記述するようにしたので、このプログラムをプロセッサに搭載したときの正確な実行速度を算出することが可能となり、正確な速度の見積もり作業を行うことができる。
【0033】
【発明の実施の形態】
図1に本発明が適用されるコンパイリング装置1の構成図を示す。
【0034】
コンパイリング装置1は、CPU2と、コンパイル対象のソースファイルやコンパイルのプログラムが格納されるHDD3と、コンパイル時にワーキングメモリとして使用されるメモリ4と、外部装置と接続された外部インターフェース5と、コンパイラによって作成されたオブジェクトコードを記録するための記録部6とから構成される。
【0035】
CPU2は、HDD3、メモリ4、外部インターフェース5とそれぞれ接続され、以下に示す処理を行うための制御命令をHDD3、メモリ4、外部インターフェース5に出力する。
【0036】
HDD3は、例えば複数のハードディスクから構成され、コンパイル対象のソースプログラムと、コンパイルを行うためのプログラムが格納されている。コンパイル実行時には、CPU2からの制御命令によりコンパイルプログラムやソースプログラムがメモリ4に出力される。
【0037】
外部インターフェース5は、例えば、キーボード、モニタ、さらにインターネット等に接続され、かかる外部装置からのコンパイル命令を受け取るとCPU2に内部処理に適したコンパイル命令をCPU2に出力する。
【0038】
メモリ4は、コンパイルを行うためのワーキングメモリとして主に使用され、HDD3から出力されたコンパイルプログラムがCPU2の制御により所定のメモリ領域に格納され、コンパイル処理可能な状態になる。また、HDD3から出力されたソースプログラムが入力されて、CPU2の制御により所定の領域に格納され、コンパイルが実行される。またメモリ4は、コンパイルによって作成されたオブジェクトコードを記憶し、CPU2からの制御命令により記録部6に出力する。
【0039】
記録部6は、メモリ4から出力されたオブジェクトコードを記録媒体に記録する。記録媒体は、例えば、フロッピーディスクや、MO、CD−ROM、半導体メモリ等のリムーバブルな記録媒体が考えられる。また、記録部6は、SDRAMやROMなどに記録する、いわゆる焼付けによってもオブジェクトコードを記録することもできる。
【0040】
図2は、本発明のコンパイル処理のフローチャートを示す。
【0041】
まず、図1で外部装置、例えば、キーボード等によりコンパイル処理を行うための命令が発行されて外部インターフェース5に入力されると、外部インターフェース5は、コンパイラ処理を行う命令をCPU2に出力する。
【0042】
CPU2は、コンパイラを行う命令が入力されるとコンパイル処理が始まる。(ステップS20)。
【0043】
コンパイルは、まず、コンパイラを行うためのプログラムをHDD3から読み出してメモリ4の所定領域に格納されるようHDD3を制御する。また、CPU2は、コンパイル対象のプログラムをHDD3から読み出してメモリ4に格納されるようHDD3を制御する。これにより、メモリ4にソースファイルが格納されソースファイルの読み込み処理が行われる(ソースファイル読み込み処理:ステップS21)。
【0044】
次いで、オブジェクトコード生成処理25が行われる(ステップS22)。
【0045】
オブジェクト生成処理25は、最終的にはメモリ4に読み込まれたソースプログラムのオブジェクトコードを作成するが、ソースプログラムに例えば外部ペリフェラルに書き込まれたデータの読み出しを行う必要のある命令が含まれている場合(あるいは、外部ペリフェラルへのデータの書き込みを行う必要のある命令が含まれている場合)、外部ペリフェラルから読み出して一旦内部ペリフェラルに書き込んだ後処理を行う場合と外部ペリフェラルから直接読み出して処理する場合(あるいは、内部ペリフェラルに一旦データを書き込んで外部ペリフェラルに書き込む場合と、直接外部ペリフェラルに書き込む場合)とで、別途オブジェクトコードを作成し、ソースプログラムに記述された外部ペリフェラルに対するアクセススピードをもとに、ソースプログラムの実動作を演算し、どちらのソースプログラムが、実動作時間が少ないかを判別して、少ない方のオブジェクトコードを出力するようになっている。
【0046】
以下、実施例中、内部ペリフェラルに一旦データを書き込んで処理する場合を一時コピーがある場合、内部ペリフェラルを介さず直接外部ペリフェラルに読み出し及び/又は書き込みを行う場合を一時コピーがない場合と称する。
【0047】
以上を前提にしたうえで、図2のフローチャートをさらに説明する。
【0048】
CPU2は、メモリ4に格納されたプログラムのソースコードに対して一時コピーあり(又は一時コピーなし)の命令を出力する(最適化指示処理:ステップS220)。
【0049】
次いで、CPU2からのコンパイラ処理命令により、メモリ4に格納されたコンパイラ処理プログラムが実行され、メモリ4に格納されたソースプログラムに対してコンパイルが行われオブジェクトコードを作成する(論理解析処理:ステップS221)。
【0050】
次いで、CPU2は、ソースプログラムに記述された外部ペリフェラルへのアクセススピードをもとに、一時コピーがある場合(又は一時コピーなしの場合)のソースプログラムの実動作速度が演算される(アクセススピード演算処理:ステップS222)。この演算処理の詳細は後述する。
【0051】
そして、CPU2は、再び最適化指示処理22に戻り、今度は一時コピーなしの場合(又は一時コピーある場合)についての命令をメモリ4に出力し(最適化指示処理:ステップS220)、CPU2からのコンパイラ処理命令によりソースプログラムのコンパイラが実行されてオブジェクトコードが生成され(論理解析処理:ステップS221)、一時コピーなしの場合(または一時コピーなしの場合)の実動作速度が演算され(アクセススピード演算処理:ステップS222)、一時コピーなしの場合(又は一時コピーある場合)のオブジェクトコードがメモリ4に格納される。
【0052】
ここで、メモリ4には、一時コピーある場合とない場合のオブジェクトコードが格納され、また、一時コピーある場合のプログラムの実動作速度と、ない場合のプログラムの実動作速度とが格納されることになる。
【0053】
CPU2は、この2つの実動作速度を比較してどちらが速いかを演算し、早い速度を有する方のオブジェクトコードをメモリ4の所定領域に格納させる(最適化指示処理:ステップS220)。
【0054】
そして、CPU2は、必要に応じてメモリ4から記録部6に選択されたオブジェクトコードを出力させるようメモリ4を制御し、記録部6で上述した記録媒体にオブジェクトコードを記録又は焼付けを行う(オブジェクトコード出力処理:ステップS23)。
【0055】
図3は、コンパイル装置1によってコンパイルされたオブジェクトコードが実行される実行環境を示す構成図である。
【0056】
本実行環境は、システムLSI31と、外部ペリフェラル37とから構成され、外部バス36を介して互いに接続されている。
【0057】
システムLSI31は、CPU32と、内部ペリフェラル33とバッファ35とから構成され、互いに内部バス34を介して接続されている。
【0058】
CPU32は、種々の演算や処理が行われ内部バス34を介して内部ペリフェラル33や、バッファ35の制御等を行うとともに、外部バス36を介して外部ペリフェラル37の制御等も行う。
【0059】
内部ペリフェラル33は、図1及び図2によってコンパイルされたオブジェクトコードが格納され、CPU32によって演算されたプログラム(オブジェクトコード)の演算結果も格納される。そのほか、内部ペリフェラル33には、CPU32の処理に応じて種々のデータが格納される。内部ペリフェラル33は、本実施例では、SDRAMによって構成されている。勿論、その他、読み出し及び/又は書き込み可能なメモリ(例えば半導体メモリ)でもよい。
【0060】
バッファ35は、内部バス34と外部バス36に接続され、内部バス34に転送されるデータと外部バス36に転送されるデータとが夫々入出力され、転送されるデータを一時記憶する。内部バス34と外部バス36とのデータの転送レートの違いを吸収するためである。本実施例では、内部バス34は外部バス36に比べてデータの転送レートが高く、内部バス34を介して入力されたデータを外部バス36に出力させる場合に外部バス35のデータ転送レートで出力されるようバッファ35でデータが一時記憶されることになる。
【0061】
外部ペリフェラル37は、外部バス36と接続され、内部ペリフェラル33に格納されたプログラムを実行させる上で、種々の演算データが格納される。外部ペリフェラル37は、本実施例ではSDRAMによって構成されているが、その他読み出し及び/書き込み可能なメモリ(例えば半導体メモリ)や、そのメモリを有するチップ、例えば種々のデータエンコーダ及び/又はデコーダ(MPEGエンコーダチップなど)用のチップであってもよい。
【0062】
かかるプログラムの実行環境において、図4に示すソースプログラムのコンパイル及びコンパイル後のオブジェクトコードによる実行動作について説明する。
【0063】
まず、図4のソースプログラムについて説明する。
【0064】
図4のプログラム(sample1.c)41は、C言語によって記述され、全体として、変数宣言部42、アクセススピード定義部43、演算処理部44とから構成されている。
【0065】
変数宣言部42は、いわゆる大域変数が定義されており、ここでは、変数i、out, work が整数宣言され、変数workには“100”の値が格納されている。本実施例では、この変数workに格納されるべき“100”の値が図2の外部ペリフェラル37に格納されている。それ以外の変数は内部ペリフェラル33に格納されるものとする。
【0066】
アクセススピード定義部43は、プラグマ方式によって定義され、”work_speed_r 8”は、外部ペリフェラル37に格納された変数workの値”100”をCPU32が読み出すのに内部CPU32のサイクル数で8サイクル必要という意味である。また、”work_speed_w 6”は、CPU32から外部ペリフェラル37に変数workの値”100”を書き込むのに内部CPU32のサイクル数で6サイクル必要という意味である。上述した実動作速度の演算はこのソースプログラムにプラグマ方式で記述されたこのサイクル数をもとに演算される。ここで、プラグマ方式とは、特定のコンパイラによって認識可能な命令である。したがって、本コンパイラ以外の他のコンパイラプログラムによっては定義された命令は上述のように解釈することはできず、実動作速度の演算を行うことができない。
【0067】
演算処理部44で記述された内容は、外部ペリフェラル37に格納されている変数workの値を内部ペリフェラル33に格納されるべき変数outに代入(”out = work”)する操作を2回行うこと(”for(i= 0; i<2; i++)”) を意味している。
【0068】
図4に示すソースプログラムは図1に示すコンパイラ装置1によってコンパイルされる。
【0069】
具体的には、図1に示すHDD3に、図4に示すソースプログラム(sample1.c)41が格納され、CPU2の制御により、メモリ4にソースプログラム(sample1.c)41が格納される(ソースファイル読み込み処理:ステップ21(図2参照))。
【0070】
次いで、すでにメモリ4に格納されたコンパイルプログラムをもとにCPU2の制御によりソースプログラム(sample1.c)41のオブジェクトコードの生成が行われる(オブジェクトコード生成処理:ステップS22)。
【0071】
オブジェクト生成処理25は、まず、CPU2が一時コピーありの場合のオブジェクトコードの生成を行うよう指示する(最適化指示処理:ステップS220)。もちろん、先に一時コピーなしの場合のコード生成を指示してもよい。
【0072】
次いで、実際にソースプログラム(sample1.c)41に対してCPU2の制御によりオブジェクトコードの生成が行われる(論理解析処理:ステップS221)。
【0073】
次いで、プラグマ方式で記述されたソースプログラム(sample1.c)41のアクセススピード43をもとにアクセススピード演算処理(ステップS222)がCPU2によって行われる。
【0074】
ここでは、最適化指示処理(ステップS22)によって、一時コピーありの場合が指示されているので、まず一時コピーありの場合の演算処理について説明する。
【0075】
一時コピーを行う場合は、上述したように、ソースプログラム内で命令の処理を行う前に外部ペリフェラル37に格納されたデータを内部ペリフェラル33に一時記憶する処理を行う。
【0076】
かかる処理に必要な実動作速度は、ソースプログラム(sample1.c)41のアクセススピード定義43によって定義されたサイクル数をもとに演算されることになる。図4に示した例では”work_speed_r 8”と記述されているので、変数workの値”100”を読み出すには8サイクル必要となる。したがって、CPU32は、実際に外部ペリフェラル37から変数workの値を読み出すのに8サイクルかかることになる。そして、読み出した変数workの値を内部ペリフェラル33に書き込むのに1サイクル必要となる。したがって、一時コピーの実動作速度は8サイクル+1サイクル=9サイクル必要になる。
【0077】
図4に示すソースプログラム(sample1.c)41の演算処理44は、”out =work”と記述されている。まず、変数workの値を読み出して、次に変数outに書き込む処理を行うことになるが、変数workの値はすでに外部ペリフェラル37から内部ペリフェラル33に一時記憶(一時コピー)されているので、変数workの値の読み出しには、CPU32は1サイクル必要である。そして、読み出した変数workの値を変数outに書き込むためには1サイクル必要である。したがって、変数workの値を変数outに代入するのに必要な実動作速度は全部で2サイクル必要である。ソースプログラム(sample1.c)41の演算処理部44では、for文に記述されているように、これを2回繰り返すことになるので、全部で4サイクル必要となる。
【0078】
以上により、一時コピーを行う場合に図4に示す演算処理44を実行するのに必要な実動作速度は、CPU32のサイクル数で、9サイクル+4サイクルの13サイクル必要となる。
【0079】
この13サイクル必要であるという情報がオブジェクトコードとともに図1のメモリ4に格納される(図2のアクセススピード演算処理:ステップS222)。または、オブジェクトコードに直接記述するようにしてもよい。直接記述する場合は、オブジェクトコードが格納されたメモリ4の所定領域に対してCPU2が、サイクル数が格納されるようメモリ4を制御することで、実現することができる。これにより例えばコメントやラベル表示により実動作速度がオブジェクトコードに記述されることになる。
【0080】
次いで、CPU32は、一時コピー無しのオブジェクトコード作成の指示命令をメモリ4に出力する(最適化指示処理:ステップS220)。
【0081】
メモリ4に格納されたコンパイラプログラムによってCPU32は、一時コピーなしの場合の、オブジェクトコードの作成を行うことになる(論理解析処理:ステップS221)。
【0082】
次いで、CPU32は、ソースプログラム(sample1.c)41のプラグマ方式で記述されたアクセススピード43をもとにアクセススピードの演算を行う。
【0083】
一時コピーなしの場合の演算は以下のようになる。
【0084】
変数workを外部ペリフェラル37からCPU32が読み出すのに、アクセススピード定義部43から8サイクル必要である。CPU32が読み出した変数workを変数outに書き込むために、1サイクル必要である。よって、ソースプログラム(sample1.c)41の”out = work”を実行するのに一時コピーなしの場合は9サイクル必要であり、演算処理44はfor文により2回繰り返すことになるので、9サイクル×2=18サイクル必要となる。
【0085】
この18サイクルという情報が、ソースプログラム(sample1.c)41のオブジェクトコードとともにメモリ4に格納されることになる(アクセススピード演算処理24)。または、このサイクル数がオブジェクトコードに記述されるようにしてもよい。直接記述する場合は、オブジェクトコードが格納されたメモリ4の所定領域に対してCPU2が、サイクル数が格納されるようメモリ4を制御することで、実現することができる。これにより例えばコメントやラベル表示により実動作速度がオブジェクトコードに記述されることになる。これにより例えばコメントやラベル表示によりオブジェクトコードに実動作速度が直接記述されることになる。
【0086】
次いで、CPU32は、アクセススピード演算処理24で演算した2つの実動作速度から最適なオブジェクトコードを選択する。ここでは、一時コピーある場合は13サイクル、一時コピーなしの場合は18サイクル必要であったので、少ないサイクル数である一時コピーある場合のオブジェクトコードを選択する(最適化指示処理:ステップS220)。
【0087】
選択されたオブジェクトコードは演算した実動作速度とともにメモリ4から出力され上述したオブジェクトコード出力処理(ステップS23)が、CPU32の制御により行われることになる。以上によりコンパイルの動作が終了する(ステップS24)。
【0088】
上述した例では、一時コピーありの場合をまず演算したが、勿論先に一時コピーなしの場合を演算しその後一時コピーあるの場合を演算してもよい。また、一時コピーある場合とない場合とでおのおのオブジェクトコードを作成したが、最初に一時コピーある場合でオブジェクトコードを作成したとき次に一時コピーなしの場合ではアクセススピードを演算するのみでオブジェクトコードを作成しないようにすることも可能である。
【0089】
次に、外部ペリフェラル37へのアクセスが生じたとき、アクセス待ちの期間にCPU32内で他の処理を実行させて、全体として処理時間の短縮を図る実施例について説明する。
【0090】
図5は、本発明が実施されるCPU32の具体的構成を示す図である。
【0091】
CPU32は、演算部51、プログラムを処理するためのデータが格納されるレジスタ群32、及びレジスタ52等を制御する外部アクセス制御部33とから構成され、演算部31、レジスタ群32、外部アクセス制御部33は内部バス14に接続されている。また、演算部51と、外部アクセス制御部53及び各レジスタ52とは、夫々個別に制御バスによって接続されている。
【0092】
演算部31は、各種プログラムが実行される際にレジスタに格納された変数などのデータを利用して種々の演算を行う。
【0093】
レジスタ群52は、プログラムの実行時に使用される変数などのデータが格納される。
【0094】
外部アクセス制御部33は、各レジスタ52へのデータの格納について、各レジスタ52を制御する。
【0095】
このような構成で、CPU32でプログラム(プログラムの実行コード、すなわちオブジェクトコード)が実行されるときに、外部ペリフェラル37へのアクセス要求が発生した場合は以下のように動作する。
【0096】
まず、演算部51から外部ペリフェラル37へのアクセス命令が内部バス34−1を介して外部ペリフェラル37に出力される。このアクセス命令には、格納すべきレジスタ52の番号が指定され、外部ペリフェラル37に格納されたデータが読み出されとき、指定された番号のレジスタ52に内部バス34−3を介して入力されるようになっている。
【0097】
従来は、プログラム実行時に使用されるデータがレジスタ52に格納された時に制御バス55を介してレジスタ52にデータが格納されたことを示す制御データが、各レジスタ52から演算部51に出力される。この出力を検出することで、演算部51はその後の処理が行われる。すなわち、外部ペリフェラル37へのアクセスが生じたとき、演算部51は、レジスタ52にデータが格納されるまで処理待ちの状態で、レジスタ52にデータが格納されたことを示す上述の制御データが入力された段階で処理待ちの状態が解除され、その後の処理が行われる。したがって、外部ペリフェラル37へのアクセスが生じたとき、データの読み出しに時間がかかり、その時間分だけ処理待ちの状態が発生し、全体として処理スピードの向上が図れなかった。
【0098】
そこで、本発明では、CPU32内に外部アクセス制御部53を備え、このアクセス制御部53によりレジスタ群52を制御することで、処理待ちの間でも他の処理が行えるようにしている。
【0099】
具体的には図6に示すように各レジスタ52に対してフラグ部61を設け、外部アクセスで読み込むべきデータを格納するレジスタ52に対応するフラグをセットし、当該レジスタ52を使用禁止にし、以後他のレジスタを使用して通常の処理の実行を進める。
【0100】
すなわち、外部アクセス命令が演算部51で発行されると、演算部51はそのアクセス命令を外部アクセス制御部53に出力する。上述したようにアクセス命令には、格納すべきレジスタの番号が記述されているので、この情報をもとに外部アクセス制御部53は、格納すべきレジスタ52に対応するフラグ61をセットする(例えば“1”をフラグ61に格納する)。そして、フラグがセットされたレジスタ52からは、レジスタ52にデータが格納されたことを示す制御データを、制御バス55を介して演算部51に出力する。この制御データを受けた演算部51は、レジスタ52にデータが書き込まれたことを認識することになるので、外部ペリフェラル37から実際にデータが書き込まれる前でもその後の処理を行うことができる。ちなみに、この各フラグ61は通常“0”が格納されクリアされている状態となっている。
【0101】
外部アクセス制御部53は、さらに、内部バス34−2を介して外部ペリフェラル37に対し演算部51からのアクセス命令を出力する。
【0102】
アクセス命令を受け取った外部ペリフェラル37は、所定のメモリ領域に格納された必要なデータを読み出し、内部バス(34、34−3)を介して実際にレジスタ52にデータを格納する。
【0103】
実際にレジスタ52にデータが格納されたときフラグ61はクリアされ(例えば“0”)、外部アクセスへの処理が終了したことになる。
【0104】
なお、ここで外部アクセス処理が行われている間に、外部からのデータが書き込まれるべきレジスタ52に演算部51がアクセスすると、実際にはデータが書き込まれていないので、上述した処理待ちの状態になり、データがレジスタ52に書き込まれるまで、演算部51でのその後の処理が行われないことになる。
【0105】
次に、図5及び図6に示すCPU32を有する図3のプログラム実行環境において、ソースプログラムのコンパイル時に上述したアクセススピード43を用いて外部へのアクセスを行っている間に処理可能な命令を検索し内部処理できる命令を同時に実行させる、実施例について説明する。
【0106】
図7は、かかる一連の処理のうち図1に示すコンパイリング装置1においてコンパイルを行う際のコンパイル動作のフローチャートを示す。
【0107】
まず、図1の外部インターフェース5に外部装置、例えばキーボード等からコンパイルを指示する命令が入力されると、その命令をCPU2に出力し、CPU2はコンパイル処理が開始されることになる(ステップS70)。
【0108】
次いで、HDD3に格納されたコンパイルプログラムがCPU2の制御により読み出され、メモリ4に格納される。そして、HDD3に格納されたソースプログラムがCPU2の制御により読み出されてメモリ4に格納され、ソースファイルの読み込み処理が行われる(ソースファイル読み込み処理:ステップS71)。
【0109】
次いで、メモリ4に読み込まれたコンパイラプログラムを用いてメモリ4に読み込まれたソースプログラムのコンパイルをCPU32の制御により行われ、オブジェクトコードが出力される(論理解析処理:ステップS720)。生成したオブジェクトコードはメモリ4に格納される。
【0110】
次いで、ソースプログラムに記述されたアクセススピードをもとに、外部アクセスが行われている間に処理可能な命令を検索して、ソースプログラムの順番を入れ換える(命令順序変換処理:ステップS721)。
【0111】
この命令順序変換処理73について、図8に示すソースプログラム(sample2.c)81をコンパイルする場合で説明する。
【0112】
図8に示すソースプログラム(sample2.c)81は変数宣言部82と、アクセススピード定義部83と、演算処理部84とから構成され、アクセススピード定義部83は、図4と同様にプラグマ方式によって記述され、変数workの値は外部ペリフェラル37(図3)に格納され、その値を読み出すのに内部CPU32のサイクル数で8サイクル必要(”work_speed_r 8”)で、外部ペリフェラル37に書き込むには6サイクル必要(”work_speed_w 9”)であることが、記述されている。
【0113】
このソースプログラム(sample2.c)81は、HDD3に格納されており、CPU2の制御によりメモリ4に格納され(ソースファイル読み込み処理:ステップS71)、メモリ4に格納したコンパイルプログラムによりオブジェクトコードが生成される(論理解析処理:ステップS720)。
【0114】
ソースプログラム(sample2.c)81の演算処理部84第2行目の命令(”j =i+ 2”)は、変数jに変数iに2を加えた値を代入する処理である。ここで、変数i、jともに内部ペリフェラル33に格納された値であるので、CPU32は、変数iの読み出しにCPU32のサイクル数で1サイクル、変数iに2を加える演算に1サイクル、さらに演算した結果を変数jに書き込む(演算結果を内部ペリフェラル33に書き込む)処理に1サイクル必要である。したがって、”j = i+ 2”の実行演算速度は3サイクルである。
【0115】
一方、演算処理部84の第3行目の命令(”out = work”)は、変数workの値を変数outに代入する処理である。ここで、アクセススピード定義部83によって変数workは、外部ペリフェラル37に格納された値であって、その値を読み出すのに8サイクル(”work_speed_r 8”)必要である。そして読み出した変数workの値を変数outに書き込む(内部ペリフェラル33に書き込む)のに1サイクル、したがって第3行目の命令(”out = work”)を実行させるのに必要な実動作速度は9サイクル必要となる。
【0116】
ここで、CPU2は、外部アクセス命令の後にCPU32が処理実行可能な命令を命令順序変換処理73において検索する。検索は、アクセススピード定義部で定義されたアクセス数分に達した時点で終了する。
【0117】
具体的には、以下のようになる。
【0118】
ソースプログラム(sample2.c)81では、第2行目の命令(”j = i+ 2”)が外部アクセスの必要がない命令である。また、第3行目の命令(”out = work”)は変数workの値が外部ペリフェラル37に格納された値であるので、外部アクセスが必要な命令である。よって、第3行目(”out = work”)の命令をCPU32が実行する間に処理実行可能な命令を検索することができる。第2行目(”j = i+ 2”)の命令の実動作速度は3サイクルで、外部へのアクセスには8サイクル必要なので、外部アクセスの8サイクル中に第2行目の命令(”j = i+ 2”)は処理可能である。したがって、第2行目(”j = i+ 2”)の命令の順序を、外部アクセスが必要な命令である第3行目(”out = work”)の命令と入れ換えることができる。まだ、5サイクル分の余裕があるので、5サイクルで処理可能な命令を検索することができるが、ソースプログラム(sample2.c)81は他に命令がないので、これで入れ換え可能な命令の検索を終了することになる。勿論、ソースプログラム(sample2.c)81の演算処理部84で第2行目と第3行目間に5サイクルでシステムLSI31内で処理可能な実行命令があれば、順序を入れ換え、”out = work”を最初に、2番目に”j = i+ 2”,3番目がその命令となる。さらに、別の命令があった場合には、すでにアクセススピード定義部で定義されたアクセス数分(8サイクル)に達することになるので順序入れ換え可能な命令の検索は終了することなる。
【0119】
このようにオブジェクトコードの命令順序を入れ換えることで、図5及び図6に示すCPU32内で外部アクセス制御部53は、先に外部ペリフェラル37へのアクセス命令を実行でき、実際に外部ペリフェラル37に格納された値を読み出すまでの間、すなわち、演算処理84の第3行目(”out = work”)の演算が実行される間、次の処理、すなわち演算処理84の第2行目(”j = i+ 2”)の演算処理を行うことができる。
【0120】
順序入れ換えた場合の実動作速度は、変数workを読み出している8サイクルの間に、3サイクル必要な第2行目の命令(”j = i+ 2”)を実行するため、第2行目(”j = i+ 2”)、3行目(”out = work”)の実動作速度は9サイクル(変数outへの書き込みに1サイクル必要なので8サイクル+1サイクル=9サイクル)、さらに第1行目(”for(i= 0; i<2; i++)”)により2回この命令を繰り返すことになるので、全部で9サイクル×2=18サイクル必要となる。
【0121】
一方、順序を入れ換えない場合の実動作速度は、演算処理84の第2行目の命令(”j = i+ 2”)に3サイクル、第3行目の命令 (”out = work”)に9サイクル、さらに第1行目(”for(i= 0; i<2; i++)”)によりこの命令を2回繰り返しているので全部で、12サイクル×2=24サイクル必要となる。
【0122】
この順序を入れ換えたプログラムの実動作速度は、オブジェクトコードが格納される図1のメモリ4の所定領域に格納されるよう、CPU2がメモリ4を制御することで、例えばオブジェクトコードのラベル、コメントとして直接オブジェクトコードに記述されることになる。
【0123】
図7のフローチャートに戻って、命令順序変換処理(ステップS721)によって順序が入れ換えられたオブジェクトコードがメモリ4に格納され、その後CPU2の制御によりメモリ4から記録手段6に転送されて上述した記録等の処理が行われる(オブジェクトコード出力処理:ステップS73)。以上によりコンパイルの動作が終了する(ステップS74)。
【0124】
上述のソースプログラム(sample2.c)81は読み込みの例だけで説明したが、もちろん書き込みの例の場合も同様に処理され、命令の順序入れ換えが可能であれば、入れ換えが行われることになる。例えば、ソースプログラム(sample2.c)81の演算処理84の第3行目が”work = out”と記述されていれば、外部ペリフェラル37への変数書き込みになるので、これがCPU32で実行される間に処理可能な命令を同様に検索して、第2行目の命令”j = i+ 2”と順序を入れ換えてオブジェクトコードが作成されることになる。
【0125】
図2のアクセススピード演算処理24や図4の命令順序入れ換え処理73で演算した実動作速度は、さまざまな用途に使用されることが考えられる。例えば、プログラムのシュミレーションである。
【0126】
例えば図3に示す実行環境で、実際に作成したプログラムがどれほどの実動作速度を有するかを知ることにより、ソースプログラムで命令数を削減して処理スピードを高めるなどのプログラムの変更を容易に行うことができる。
【0127】
従来技術で述べたように従来はプログラムの実行命令はすべて1サイクルとして演算されていたが、外部メモリとのデータの読み書きに実際には数サイクル必要であるので、実動作時とシュミレーション時とで実行スピードの乖離があった。
【0128】
このように演算された実動作速度をオブジェクトコードとともに表示されていれば、プログラムのシュミレーションを行っても正確な見積もり作業を行うことが可能である。
【0129】
図9は、デバック情報として実動作速度が記述されたオブジェクトコードの例である。
【0130】
上述したようにアクセススピードを演算するソースプログラムのコンパイル時(図2参照)には、オブジェクトコードが格納されたメモリ4に対してCPU2がメモリ4の所定領域に演算した実動作速度が格納されるようメモリ4を制御することで記述することができる。あるいは、命令順序を入れ換えるコンパイル時(図7参照)には、オブジェクトコードが格納される図1のメモリ4の所定領域に演算した実動作速度が格納されるよう、CPU2がメモリ4を制御することで、例えばオブジェクトコードのラベル、コメントとして直接オブジェクトコードに記述されることになる。
【0131】
これにより図9に示すよう、コメントやラベル表示により実動作速度がオブジェクトコードに直接記述されることになる。
【0132】
図9に示す例は、gccコンパイラによって生成されたコードに、実動作速度を記述したオブジェクトコードの一例である。
【0133】
この例では、通常のオブジェクトコード91の所定位置に実行速度がサイクル数として表示92されている。すなわち、コメント表示として記号(#)以降にソースプログラム41の演算処理44に対する実行速度がサイクル数(8サイクル)として表示されている。
【0134】
これにより、目視により容易にコードの実行速度を把握することが可能となる。
【0135】
(付記1)外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第1のステップと、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算する第2のステップと、前記第2のステップで演算した実動作速度を比較して、実動作速度の速い前記第1のステップで作成したオブジェクトコードを選択して出力する第3のステップとを有することを特徴とするコンパイル方法。
【0136】
(付記2)前記第3のステップは、前記出力されるオブジェクトプログラムに前記第2のステップで演算した実動作速度を記述する、ことを特徴とする付記1記載のコンパイル方法。
【0137】
(付記3)前記アクセス速度は、前記オブジェクトコードが実行されるプロセッサのサイクル数であることを特徴とする付記1記載のコンパイル方法。
【0138】
(付記4)前記アクセス速度は、プラグマ方式で記述されることを特徴とする付記1記載のコンパイル方法。
【0139】
(付記5)外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第1のステップと、前記ソースプログラムに記述された外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算する第2のステップと、前記第2のステップで演算した実動作速度を比較して、実動作速度の速いオブジェクトコードを選択して出力する第3のステップと、を有することを特徴とするコンパイルプログラムが格納されたプログラム記録媒体。
【0140】
(付記6)前記第3のステップは、前記出力されるオブジェクトプログラムに前記第2のステップで演算した実動作速度を記述する、ことを特徴とする付記5記載のコンパイラプログラムが格納されたプログラム記録媒体。
【0141】
(付記7)外部記憶手段へのアクセスが必要な命令を含むソースプログラムが格納される記憶手段と、前記ソースプログラムをオブジェクトプログラムに変換し、ソースプログラムに記述された外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算し、前記実動作速度の速い前記オブジェクトプログラムを選択して出力する処理手段と、を有することを特徴とするコンパイリング装置。
【0142】
(付記8)前記処理手段は、前記アクセス速度に基づいて前記ソースプログラムの実動作速度を前記出力されるオブジェクトプログラムに記述する、ことを特徴とする付記7記載のコンパイリング装置。
【0143】
(付記9)オブジェクトプログラムが格納される内部記憶手段と、前記内部記憶手段に記憶されたオブジェクトプログラムを処理する処理手段とを有し、前記オブジェクトプログラムは、ソースプログラムに記述された外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算した結果、実動作速度の速いオブジェクトプログラムであること、を特徴とするシステムLSI。
【0144】
(付記10)前記オブジェクトプログラムには、演算した前記実動作速度が記述される、ことを特徴とする付記9記載のシステムLSI。
【0145】
(付記11)外部記憶手段に記憶されたデータが入力されるレジスタと、前記レジスタに記憶された前記データに基づいて演算を行う演算手段と、前記演算手段から前記外部記憶手段へのアクセス要求命令が入力されて、前記データの入力を行うレジスタへのアクセスが行われないように前記レジスタを制御する外部アクセス制御部とを備え、前記演算部は前記外部アクセス制御部が前記外部記憶手段へアクセスを行っている間、他の命令に対する演算を行うことを特徴とするデータ処理装置。
【0146】
(付記12)外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第1のステップと、前記ソースプログラムにおいて、前記外部記憶手段へのアクセスが必要な命令と、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて前記外部記憶手段へのアクセスを行っている間に実行可能な他の命令との順序を、前記ソースプログラムに記述されている順序が、前記アクセスが必要な命令よりも前記他の命令が先にある場合に入れ換える第2のステップと、前記第2のステップで順序を入れ換えたオブジェクトコードを出力する第3のステップと、を有することを特徴とするコンパイル方法。
【0147】
(付記13)前記第3のステップは、前記アクセス速度に基づいて前記ソースプログラムの実動作速度を前記出力されるオブジェクトプログラムに記述する、ことを特徴とする付記12記載のコンパイル方法。
【0148】
【発明の効果】
本発明によれば、ソースプログラム内に外部ペリフェラルに対するアクセススピードが定義されているので、コンパイル時に外部ペリフェラルへのアクセスを考慮した最適なオブジェクトコードを作成することができるとともに、短い設計時間で高性能のオブジェクトコードを作成することができる。また、ソースプログラムの設計途中に外部ペリフェラルが変更された場合でも、アクセススピード定義を変更するだけで、ソースプログラムの設計変更が可能になり、仕様変更に対しても柔軟に対応することができる。変更前のソースプログラムの再利用も可能となる。さらに、オブジェクトコードに実動作速度が記述されるので、シュミレーションを行った場合でも実動作とシュミレーションとの実行スピードについて正確な見積もり作業を行うことができる。
【図面の簡単な説明】
【図1】図1は、本発明が適用されるコンパイリング装置1の構成図を示す。
【図2】図2は、ソースプログラムの実行速度の演算を行うコンパイル動作のフローチャートを示す図である。
【図3】図3は、コンパイルされたオブジェクトコードが実行される実行環境の構成図を示す。
【図4】図4は、実行速度の演算を行うコンパイル対象のソースプログラムの一例を示す図である。
【図5】図5は、CPU32の内部構成を示す図である。
【図6】図6は、CPU32の詳細な内部構成を示す図である。
【図7】図7は、ソースプログラムの演算命令の順序を入れ換えるコンパイル動作のフローチャートを示す図である。
【図8】図8は、命令順序の入れ換えを行うコンパイル対象のソースプログラムの一例を示す図である。
【図9】図9は、プログラムの実行速度が付与されたオブジェクトコードの一例を示す図である。
【図10】図10は、複数のプログラムを同時に実行するときのパイプライン処理についての説明図である。
【図11】図11は、プログラムに外部装置へのアクセスを行う命令が含まれているときのパイプライン処理についての説明図である。
【符号の説明】
1 コンパイリング装置 2 CPU 3 HDD 4 メモリ 6 記録部7 記録媒体 31 システムLSI 32 CPU 33 内部ペリフェラル 35 バッファ 37 外部ペリフェラル 51 演算部 52 レジスタ群 53 外部アクセス制御部 61 レジスタフラグ群
Claims (5)
- 外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第1のステップと、
前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて外部記憶手段から内部記憶手段に一時記憶させてアクセスするときの前記ソースプログラムの実動作速度と、前記外部記憶手段から前記内部記憶手段に一時記憶せずアクセスするときの前記ソースプログラムの実動作速度とを演算する第2のステップと、
前記第2のステップで演算した実動作速度を比較して、実動作速度の速い前記第1のステップで作成したオブジェクトコードを選択して出力する第3のステップと
を有することを特徴とするコンパイル方法。 - 前記第3のステップは、前記出力されるオブジェクトプログラムに前記第2のステップで演算した実動作速度を記述する、ことを特徴とする請求項1記載のコンパイル方法。
- 外部記憶手段に記憶されたデータが入力されるレジスタと、
前記レジスタに記憶された前記データに基づいて演算を行う演算手段と、
前記演算手段から前記外部記憶手段へのアクセス要求命令が入力されて、前記データの入力を行うレジスタへのアクセスが行われないように前記レジスタを制御する外部アクセス制御部と
を備え、前記演算部は前記外部アクセス制御部が前記外部記憶手段へアクセスを行っている間、他の命令に対する演算を行うことを特徴とするデータ処理装置。 - 外部記憶手段へのアクセスが必要な命令を含むソースプログラムをオブジェクトプログラムに変換する第1のステップと、
前記ソースプログラムにおいて、前記外部記憶手段へのアクセスが必要な命令と、前記ソースプログラムに記述された前記外部記憶手段へのアクセス速度に基づいて前記外部記憶手段へのアクセスを行っている間に実行可能な他の命令との順序を、前記ソースプログラムに記述されている順序が、前記アクセスが必要な命令よりも前記他の命令が先にある場合に入れ換える第2のステップと、
前記第2のステップで順序を入れ換えたオブジェクトコードを出力する第3のステップと
を有することを特徴とするコンパイル方法。 - 前記第3のステップは、前記アクセス速度に基づいて前記ソースプログラムの実動作速度を前記出力されるオブジェクトプログラムに記述する、ことを特徴とする請求項4記載のコンパイル方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003003310A JP4768214B2 (ja) | 2003-01-09 | 2003-01-09 | コンパイル方法、及びデータ処理装置。 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2003003310A JP4768214B2 (ja) | 2003-01-09 | 2003-01-09 | コンパイル方法、及びデータ処理装置。 |
Publications (2)
Publication Number | Publication Date |
---|---|
JP2004220085A true JP2004220085A (ja) | 2004-08-05 |
JP4768214B2 JP4768214B2 (ja) | 2011-09-07 |
Family
ID=32894612
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2003003310A Expired - Fee Related JP4768214B2 (ja) | 2003-01-09 | 2003-01-09 | コンパイル方法、及びデータ処理装置。 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP4768214B2 (ja) |
-
2003
- 2003-01-09 JP JP2003003310A patent/JP4768214B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
JP4768214B2 (ja) | 2011-09-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8832672B2 (en) | Ensuring register availability for dynamic binary optimization | |
JP4339907B2 (ja) | マルチプロセッサ向け最適コード生成方法及びコンパイル装置 | |
US9015690B2 (en) | Proactive loop fusion of non-adjacent loops with intervening control flow instructions | |
US9495136B2 (en) | Using aliasing information for dynamic binary optimization | |
US20100095286A1 (en) | Register reduction and liveness analysis techniques for program code | |
JP2002149416A (ja) | プログラムの最適化方法及びこれを用いたコンパイラ | |
JP2007286671A (ja) | ソフトウェア/ハードウェア分割プログラム、および分割方法。 | |
US8266416B2 (en) | Dynamic reconfiguration supporting method, dynamic reconfiguration supporting apparatus, and dynamic reconfiguration system | |
CN116775127B (zh) | 一种基于RetroWrite框架的静态符号执行插桩方法 | |
JP4768214B2 (ja) | コンパイル方法、及びデータ処理装置。 | |
JP2009020695A (ja) | 情報処理装置及びシステム | |
JPH10320212A (ja) | キャッシュ向け最適化方法 | |
JP2004038279A (ja) | コンパイラ、演算処理システム及び演算処理方法 | |
JP7026563B2 (ja) | 高位合成方法、高位合成プログラム、高位合成装置 | |
US20040064301A1 (en) | Software development system, simulator, and recording medium | |
US20050251795A1 (en) | Method, system, and program for optimizing code | |
JP3692884B2 (ja) | プログラム処理方法および記録媒体 | |
US20220382548A1 (en) | Compiler, compilation method, and compiler device | |
JP2024030940A (ja) | ソースコード変換プログラムおよびソースコード変換方法 | |
JP2008071065A (ja) | インライン展開を行うコンパイル装置、方法、プログラム、記憶媒体 | |
JP2004334641A (ja) | 情報処理装置および記録媒体、並びにプロセッサ | |
JP3542538B2 (ja) | プログラム最適化処理装置及びプログラム最適化方法 | |
JP2003131888A (ja) | 手続き間命令スケジューリング方法 | |
JP2000056983A (ja) | プログラムリンクシステム、方法及び記録媒体 | |
JP2022125690A (ja) | 情報処理装置、情報処理プログラムおよびプログラム開発支援方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20051104 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20080421 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20081125 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090126 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20090407 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090703 |
|
A911 | Transfer of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20090721 |
|
A912 | Removal of reconsideration by examiner before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20090918 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110520 |
|
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110616 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140624 Year of fee payment: 3 |
|
LAPS | Cancellation because of no payment of annual fees |