JP2001166948A - プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 - Google Patents

プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体

Info

Publication number
JP2001166948A
JP2001166948A JP34810499A JP34810499A JP2001166948A JP 2001166948 A JP2001166948 A JP 2001166948A JP 34810499 A JP34810499 A JP 34810499A JP 34810499 A JP34810499 A JP 34810499A JP 2001166948 A JP2001166948 A JP 2001166948A
Authority
JP
Japan
Prior art keywords
program
procedure
subroutine
function
area
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
Application number
JP34810499A
Other languages
English (en)
Inventor
Akira Egashira
朗 江頭
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP34810499A priority Critical patent/JP2001166948A/ja
Priority to US09/729,773 priority patent/US20010039653A1/en
Publication of JP2001166948A publication Critical patent/JP2001166948A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching

Abstract

(57)【要約】 【課題】 様々な手続相互間におけるキャッシュ・メモ
リ上での衝突や頻繁に用いる手続のキャッシュ・ミスを
より実質的により多く防止する。 【解決手段】 開示されるプログラム変換方法は、原始
プログラムを手続毎に配置可能な一時的な再配置可能目
的プログラムにコンパイルし実行して手続に関する動的
情報を収集し、実際に取り出された命令コードが属する
手続における相対的な位置を示すメモリアクセス情報を
生成し、すべての手続につき、メモリアクセス情報に対
応する命令コードが連続的に存在する領域が、1個の場
合にはその領域を、複数個の場合には複数個の領域をす
べて含む最小の領域を、有効領域と決定し、動的情報に
基づき、有効領域同士がキャッシュ・ライン上で衝突を
起こさないように、手続を主記憶装置のいずれの記憶領
域に記憶すべきかを決定し、その決定結果に基づき目的
プログラムを生成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、プログラム変換
方法、プログラム変換装置及びプログラム変換プログラ
ムを記憶した記憶媒体に関し、詳しくは、プログラミン
グ言語で記述された原始プログラムを計算機やCPU
(中央処理装置)が実行可能な言語(機械語、アセンブ
リ言語など)で記述された目的プログラムに変換(コン
パイル)するプログラム変換方法、プログラム変換装置
及びプログラム変換プログラムを記憶した記憶媒体に関
する。
【0002】
【従来の技術】プログラム変換装置は、プログラミング
言語で記述された原始プログラムを計算機やCPU(中
央処理装置)が実行可能な言語(機械語、アセンブリ言
語など)で記述された目的プログラムに変換(コンパイ
ル)する装置である。このようなプログラム変換装置で
作成された目的プログラムを、CPUやデコーダ等から
なる1チップ・マイクロ・コンピュータで実行する場
合、目的プログラムはその外部の主記憶装置に記憶され
ており、主記憶装置から目的プログラムの各コードが順
次読み出され、デコーダでデコードされた後、CPUが
それを解釈して実行する。この場合、CPUの実行速度
を速くするために、通常、記憶容量は大きいがアクセス
・タイムの長い主記憶装置から読み出されたコードを一
時的に記憶する、記憶容量は小さいがアクセス・タイム
の短いキャッシュ・メモリが1チップ・マイクロ・コン
ピュータ内に設けられている。
【0003】このキャッシュ・メモリが設けられた1チ
ップ・マイクロ・コンピュータの中には、CPUがコー
ドを実行する場合、主記憶装置から読み出された目的プ
ログラムの各コードが一旦キャッシュ・メモリに記憶さ
れた後でなければ、それをデコーダでデコードし、CP
Uで解釈して実行することができないものがある。この
種の1チップ・マイクロ・コンピュータにおいて、主記
憶装置から読み出した各コードをキャッシュ・メモリに
記憶する方法には、各種あるが、その1つとしてダイレ
クト・マップ方式がある。ダイレクト・マップ方式で
は、図8に示すように、キャッシュ・メモリ1が複数の
記憶領域(これをキャッシュ・ラインという)に分割さ
れていると共に、主記憶装置2の各記憶領域も分割され
ており、主記憶装置2の各記憶領域がキャッシュ・メモ
リ1の各キャッシュ・ラインに対応づけられている。図
8では、キャッシュ・メモリ1は8個のキャッシュ・ラ
イン1〜1からなり、それに対応して主記憶装置2
も1個のキャッシュ・ラインと同一の記憶容量を有する
記憶領域毎に分割され、各記憶領域は8個を単位として
それぞれ8個のキャッシュ・ライン1〜1に対応づ
けられている。すなわち、主記憶装置2の記憶領域2
〜21hはひとまとまりでキャッシュ・ライン1
に対応づけられ、同様に、記憶領域22a〜22h
はキャッシュ・ライン1〜1に対応づけられ、最後
の領域2na〜2nh(nは自然数)はキャッシュ・ラ
イン1〜1に対応づけられている。
【0004】このようなダイレクト・マップ方式が採用
されている1チップ・マイクロ・コンピュータで実行さ
れるべき目的プログラムをプログラム変換装置を用いて
作成する場合、以下に示す不都合がある。例えば、図9
に示すC言語(商標名)で記述された原始プログラムを
プログラム変換装置で目的プログラムに変換した結果、
図10に示すように、手続func_A及び手続fun
c_Bのそれぞれの命令コードが主記憶装置2に記憶さ
れるとする。ここで、手続とは、図9に示す手続fun
c_Aや手続func_Bのように、計算機やCPUが
行うあるひとまとまりの処理(例えば、四則演算)を意
味し、関数、あるいはサブルーチンとも呼ばれるが、以
下ではそれらを総称して手続と呼ぶことにする。図10
では、手続func_Aの命令コードは主記憶装置2の
記憶領域21a〜21cに記憶され、手続func_B
の命令コードは主記憶装置2の記憶領域22a及び2
1bに記憶されている。したがって、手続func_A
の命令コードはキャッシュ・メモリ1のキャッシュ・ラ
イン1〜1に対応づけられ、手続func_Bの命
令コードはキャッシュ・メモリ1のキャッシュ・ライン
及び1に対応づけられている。
【0005】このような場合、CPUが図9に示す原始
プログラムを変換した目的プログラムを実行すると、ま
ず、手続func_Aの命令コードが主記憶装置2の記
憶領域21a〜21cから読み出され、一旦キャッシュ
・メモリ1のキャッシュ・ライン1〜1に記憶され
た後、デコーダでデコードされ、CPUが解釈して実行
する。次に、手続func_Bの命令コードが主記憶装
置2の記憶領域22a及び2 1bから読み出され、キャ
ッシュ・メモリ1のキャッシュ・ライン1及び1
一旦記憶される。今、キャッシュ・メモリ1のキャッシ
ュ・ライン1及び1 には既に手続func_Aの命
令コードの一部が記憶されているが、手続func_B
の命令コードが記憶される(上書き)ことにより、その
手続func_Aの命令コードの一部は以後読み出すこ
とができなくなる。この後、キャッシュ・メモリ1のキ
ャッシュ・ライン1及び1に記憶されている手続f
unc_Bの命令コードがデコーダでデコードされ、C
PUが解釈して実行する。次に、図9に示す原始プログ
ラムによれば、手続func_Aの命令コードを再び実
行しなければならないが、キャッシュ・メモリ1のキャ
ッシュ・ライン1 及び1には既に手続func_B
の命令コードが記憶されており、手続func_Aの命
令コードの一部は読み出すことができないので、再び手
続func_Aの命令コードの一部が主記憶装置2の記
憶領域21a及び21bから読み出され、一旦キャッシ
ュ・メモリ1のキャッシュ・ライン1及び1に記憶
された後、デコーダでデコードされ、CPUが解釈して
実行する。
【0006】以上説明したように、時間的に連続して実
行される可能性の高い2つの手続の命令コードがキャッ
シュ・メモリ1の同一のキャッシュ・ラインに対応した
主記憶装置2の記憶領域に記憶されている場合(これを
同一のキャッシュ・ラインに載るという)には、先に主
記憶装置2から読み出されキャッシュ・メモリ1に記憶
された手続の命令コードの全部又は一部は、後から主記
憶装置2から読み出された手続の命令コードがキャッシ
ュ・メモリ1の同一のキャッシュ・ラインに上書きされ
ることにより、読み出すことができなくなってしまう。
このような状態を衝突(キャッシュ・コンフリクト;ca
che conflict)という。この衝突が頻繁に発生してしま
うと、CPUの実行速度を速くするためにキャッシュ・
メモリを設けた効果が半減するどころか、場合によって
は逆にCPUの実行速度が遅くなってしまう。
【0007】なお、主記憶装置から読み出した各コード
をキャッシュ・メモリに記憶する方法には、ダイレクト
・マップ方式以外にも、主記憶装置のデータをキャッシ
ュ・メモリ上のどのキャッシュ・ラインに記憶しても良
いフル・アソシアティブ方式や、ダイレクト・マップ方
式とフル・アソシアティブ方式の中間の方式であって、
主記憶装置のデータを配置可能なキャッシュ・メモリ上
のキャッシュ・ラインが複数存在するセット・アソシア
ティブ方式など各種ある。いずれの方式の場合も、主記
憶装置よりもキャッシュ・メモリの記憶容量が少ないの
で、以上説明したキャッシュ・メモリ上での手続の衝突
が発生する可能性はある。
【0008】また、目的プログラム実行中に頻繁に用い
る手続は、キャッシュ・メモリ1に当該命令コードがそ
もそも記憶されていなかったり、上記衝突のために当該
命令コードを読み出せない(これらを合わせてキャッシ
ュ・ミスという)ために、用いる度に主記憶装置2から
当該命令コードを読み出してキャッシュ・メモリ1の対
応するキャッシュ・ラインに記憶するのでは、CPUの
実行速度を速くできない。
【0009】そこで、本出願人は、上記した手続の衝突
やキャッシュ・ミスという不都合を解決するために、以
下に示すプログラム変換装置を先に提案し、それが特開
平11−232117号公報に開示されている。図11
は、上記特開平11−232117号公報に開示されて
いる従来のプログラム変換装置の電気的構成例を示すブ
ロック図である。この例のプログラム変換装置は、第1
〜第4プログラム記憶部11〜14と、コンパイラ15
と、リンカ16と、プロファイラ17と、第1及び第2
情報記憶部18及び19と、最適化部20と、第1及び
第2ライブラリ記憶部21及び22と、ライブラリ生成
部23とから概略構成されている。
【0010】まず、ライブラリ生成部23は、第1ライ
ブラリ記憶部21に記憶された各再配置可能ライブラリ
について、手続単位を認識して手続毎に配置可能な再配
置可能ライブラリに変換し、第2ライブラリ記憶部22
に記憶する。ここで、再配置可能ライブラリは、再配置
可能目的プログラムの1種であり、再配置可能目的プロ
グラムとは、主記憶装置のどの記憶領域にも記憶可能な
目的プログラムをいい、手続毎に配置可能とは、再配置
可能目的プログラム内部で手続の配置が可能なことをい
う。次に、コンパイラ15は、第1プログラム記憶部1
1から、例えば、C言語等のプログラミング言語で記述
された原始プログラムを読み込み、機械語やアセンブリ
言語などで記述された再配置可能目的プログラムにコン
パイルした後、手続毎に配置可能な再配置可能目的プロ
グラムに変換して第2プログラム記憶部12に記憶す
る。
【0011】これにより、リンカ16は、第2プログラ
ム記憶部12に記憶された手続毎に配置可能な再配置可
能目的プログラムと、第2ライブラリ記憶部22に記憶
された手続毎に配置可能な再配置可能ライブラリとをリ
ンクして実行可能な一時的な目的プログラムを生成して
第3プログラム記憶部13に記憶する。ここで、一時的
な目的プログラムとは、原始プログラムをその記述され
た順に機械語やアセンブリ言語などからなるコードに変
換したものをいい、実行時間等について効率的に最適化
された最終的な目的プログラムに対するものである。
【0012】次に、プロファイラ17は、第3プログラ
ム記憶部13から読み込んだ一時的な目的プログラムを
実行しつつ、各手続相互間の呼出関係、各手続の呼出回
数、ループ構造情報等からなる動的情報(プロファイル
情報)を収集し、得られた動的情報を第1情報記憶部1
8に記憶する。これにより、最適化部20は、第1情報
記憶部18に記憶された動的情報に基づいて、時間的に
連続して実行される可能性の高い手続同士がキャッシュ
・メモリ上で衝突したり、頻繁に用いる手続のキャッシ
ュ・ミスが起こらないように、キャッシュ・ライン・カ
ラーリングによるすべての手続の配置最適化を行って、
リンカ16に手続の配置を指示するための配置情報を生
成し、第2情報記憶部19に記憶する。したがって、リ
ンカ16は、第2情報記憶部19に記憶された配置情報
に基づいて、手続毎に配置可能な再配置可能目的プログ
ラムと手続毎に配置可能な再配置可能ライブラリとをリ
ンクして実行可能な最終的な目的プログラムを生成して
第4プログラム記憶部14に記憶する。
【0013】ここで、図12〜図14にC言語で記述さ
れた原始プログラムを構成する手続の一例を示す。図1
2から分かるように、手続func_10と手続fun
c_20とは手続func0において同一のループの中
に存在するため、これらの優先順位は同等と考えて良
い。このような手続について、上記したプログラム変換
装置において、各手続相互間の呼出関係、各手続の呼出
回数、ループ構造情報等からなる動的情報に基づいて、
キャッシュ・ライン・カラーリングによる手続の配置最
適化を実行すると、図15に示すように、手続func
0、func_10及びfunc_20が配置される。
すなわち、手続func0の命令コードは主記憶装置2
の記憶領域22a〜2 2fに記憶されてキャッシュ・ラ
イン1〜1に対応づけられ、手続func_10の
命令コードは主記憶装置2の記憶領域22g及び22h
に記憶されてキャッシュ・ライン1及び1に対応づ
けられ、手続func_20の命令コードは主記憶装置
2の記憶領域21e〜21hに記憶されてキャッシュ・
ライン1 〜1に対応づけられている。
【0014】このように、この例の構成によれば、様々
な手続相互間におけるキャッシュ・メモリ上での衝突を
防止できると共に、頻繁に用いる手続のキャッシュ・ミ
スを防止できる。これにより、計算機やCPUが目的プ
ログラムを実行した際の実行速度を速くすることができ
る。
【0015】
【発明が解決しようとする課題】ところで、手続の中に
は、エラー処理、例外処理、割込処理などのように、1
チップ・マイクロ・コンピュータに異常や緊急な事態が
発生したり、特殊な事態が発生した場合に限り実行され
るものや、例えば、if−else文のように、命令に
分岐があり、ある条件が満足された場合にif以下el
seの前までの処理が実行され、その他の場合にels
e以下の処理が実行されるものなど、プログラムの流れ
を変更する処理がある。上記した手続func0におい
ても、図12に示すように、else以下の処理がエラ
ー処理であるので、1チップ・マイクロ・コンピュータ
が正常に動作している限り実行されない。また、上記し
た手続func_10及び手続func_20において
も、命令に分岐があるため、ある条件(flag1==
OK、flag2==OK)が満足された場合に、図1
3及び図14に示すif以下elseの前までの処理が
実行され、その他の場合にelse以下の処理が実行さ
れる。したがって、このような手続については、手続を
ひとまとまりとして配置最適化を実行した場合、形式的
には手続の衝突やキャッシュ・ミスが発生するが、実質
的には手続の衝突やキャッシュ・ミスはほとんど発生し
ない。図15に示す例において、例えば、主記憶装置2
の斜線を施した記憶領域21h、22e、2 、2
2hに各手続の通常実行されない処理が記憶されている
とすると、この部分については実質的には手続の衝突や
キャッシュ・ミスはほとんど発生しないため、配置最適
化の際に考慮しなくて良い。ところが、上記した従来の
プログラム変換装置においては、上記事情を考慮せず、
手続をひとまとまりとして配置最適化を実行しているの
で、実質的に手続の衝突やキャッシュ・ミスがほとんど
発生しない処理についてまで配置最適化の対象としてい
ることになり、目的プログラムの効率化に限界がある。
これにより、上記した従来のプログラム変換装置は、最
近のモバイル機器等の大量のデータを高速で処理する機
器のような、手続の衝突やキャッシュ・ミスの防止に対
する要求が厳しい機器で用いられるプログラムのプログ
ラム変換には使用できないという欠点がある。
【0016】また、上記した従来のプログラム変換装置
において用いられている手続の配置最適化の手法を実行
しても、手続の衝突やキャッシュ・ミスの発生を完全に
防止することはできない。以下、図12〜図15の例を
用いてその理由を説明する。図12から分かるように、
手続func0から手続func_10を呼び出す回数
が10,000回、手続func0から手続func_
20を呼び出す回数が10,000回である。手続fu
nc_10をキャッシュ・ミスなく1回実行するのに5
0クロック、手続func_20をキャッシュ・ミスな
く1回実行するのに150クロック、手続func0の
うち、手続func_10及び手続func_20以外
の処理をキャッシュ・ミスなく1回実行するのに200
クロックかかるとする。したがって、手続func0全
体の処理をキャッシュ・ミスなく1回実行するには、
2,000,200クロック(=200+10000×
(50+150))かかることになる。このような条件
の下で、キャッシュ・ミスが1回発生する毎に50クロ
ックのロスがあるとすると、従来の技術における手続の
配置最適化の手法を実行しても、図15から分かるよう
に、手続func0と手続func_20との間で、キ
ャッシュ・ライン1及び1において衝突が発生して
いるので、手続func0において手続func_20
を呼び出している箇所と手続func_20本体とが衝
突している場合、手続func0において手続func
_20を呼び出す時と手続func_20から手続fu
nc0へ戻った時にキャッシュ・ミスが発生する。した
がって、手続func0において手続func_20を
呼び出す時に1回キャッシュ・ミスが発生し、手続fu
nc_20から手続func0へ戻った時に1回キャッ
シュ・ミスが発生すると仮定した場合、手続func0
全体の処理を実行すると、20,000回のキャッシュ
・ミスが発生することになるから、1,000,000
クロック(=50×20,000)のロスが生じてしま
う。なお、一番最初に手続func0を実行する場合に
も数十回のキャッシュ・ミスは発生するので、それに応
じてロスが生じるが、全体のロスに影響するほどのロス
ではないので、ここではそのロスを算入していない。
【0017】この発明は、上述の事情に鑑みてなされた
もので、様々な手続相互間におけるキャッシュ・メモリ
上での衝突や頻繁に用いる手続のキャッシュ・ミスをよ
り実質的により多く防止でき、これにより、計算機やC
PUが目的プログラムを実行した際の実行速度をより速
くすることができるプログラム変換方法、プログラム変
換装置及びプログラム変換プログラムを記憶した記憶媒
体を提供することを目的としている。
【0018】
【課題を解決するための手段】上記課題を解決するため
に、請求項1記載の発明は、プログラミング言語で記述
された原始プログラムを計算機や中央処理装置が実行可
能な言語で記述された第1の目的プログラムに変換する
プログラム変換方法に係り、上記原始プログラムを第2
の目的プログラムに変換する第1の処理と、上記第2の
目的プログラムを実行しつつ、上記原始プログラムで用
いられている手続、関数、あるいはサブルーチンに関す
る情報を収集すると共に、実際に取り出された命令コー
ドが属する手続、関数、あるいはサブルーチンにおける
相対的な位置を示すメモリアクセス情報を生成する第2
の処理と、上記第2の目的プログラムを構成するすべて
の手続、関数、あるいはサブルーチンについて、上記メ
モリアクセス情報に対応する命令コードが連続的に存在
する領域が1個の場合にはその領域を有効領域と決定
し、上記メモリアクセス情報に対応する命令コードが連
続的に存在する領域が複数個の場合には複数個の領域を
すべて含む最小の領域を有効領域と決定する第3の処理
と、上記情報に基づいて、上記有効領域同士が上記計算
機や中央処理装置を構成するキャッシュ・ライン上で衝
突を起こさないように、上記手続、関数、あるいはサブ
ルーチンを、上記第1の目的プログラムが上記計算機や
中央処理装置で用いられる際に記憶される主記憶装置の
いずれの記憶領域に記憶すべきかを決定し、その決定結
果に基づいて上記第1の目的プログラムを生成する第4
の処理とからなることを特徴としている。
【0019】また、請求項2記載の発明は、請求項1記
載のプログラム変換方法に係り、上記手続、関数、ある
いはサブルーチンは、ユーザが上記原始プログラム中で
定義したもの、ユーザにより定義され検査が終了したも
の、上記プログラミング言語において処理系で予め用意
されているもの、命令コードの形式で予め用意されてい
るもののうち、少なくとも1個からなることを特徴とし
ている。
【0020】また、請求項3記載の発明は、請求項1又
は2記載のプログラム変換方法に係り、上記情報は、上
記第2の目的プログラムを実行することにより得られ
る、上記手続、関数、あるいはサブルーチンが実際に呼
び出される回数を示す情報と、上記手続、関数、あるい
はサブルーチン同士が互いを呼び出す関係を示す情報と
からなることを特徴としている。
【0021】また、請求項4記載の発明は、請求項1乃
至3のいずれか1に記載のプログラム変換方法に係り、
上記第2の処理では、上記メモリアクセス情報は、上記
第2の目的プログラムの流れを変更する処理に関する命
令コードが取り出された場合にだけ生成することを特徴
としている。
【0022】また、請求項5記載の発明は、プログラミ
ング言語で記述された原始プログラムを計算機や中央処
理装置が実行可能な言語で記述された第1の目的プログ
ラムに変換するプログラム変換方法に係り、上記原始プ
ログラムを第2の目的プログラムに変換すると共に、上
記第2の目的プログラムについて、ユーザが上記原始プ
ログラム中で定義した手続、関数、あるいはサブルーチ
ンを、上記第1の目的プログラムが上記計算機や中央処
理装置で用いられる際に記憶される主記憶装置の任意の
記憶領域に記憶可能に変換して第3の目的プログラムを
生成する第1の処理と、上記原始プログラムで用いられ
ている手続、関数、あるいはサブルーチンのうち、ユー
ザにより定義され検査が終了したもの、上記プログラミ
ング言語において処理系で予め用意されているもの、命
令コードの形式で予め用意されているものの少なくとも
一部であって、上記主記憶装置の任意の記憶領域に記憶
可能に変換された手続、関数、あるいはサブルーチン
と、上記第3の目的プログラムとを結合して第4の目的
プログラムを生成する第2の処理と、上記第4の目的プ
ログラムを実行しつつ、上記手続、関数、あるいはサブ
ルーチンが実際に呼び出される回数を示す情報と、上記
手続、関数、あるいはサブルーチン同士が互いを呼び出
す関係を示す情報とからなる動的情報を収集すると共
に、実際に取り出された命令コードが属する手続、関
数、あるいはサブルーチンにおける相対的な位置を示す
メモリアクセス情報を生成する第3の処理と、上記第4
の目的プログラムを構成するすべての手続、関数、ある
いはサブルーチンについて、上記メモリアクセス情報に
対応する命令コードが連続的に存在する領域が1個の場
合にはその領域を有効領域と決定し、上記メモリアクセ
ス情報に対応する命令コードが連続的に存在する領域が
複数個の場合には複数個の領域をすべて含む最小の領域
を有効領域と決定する第4の処理と、上記動的情報に基
づいて、上記有効領域同士が上記計算機や中央処理装置
を構成するキャッシュ・ライン上で衝突を起こさないよ
うに、上記手続、関数、あるいはサブルーチンを、上記
主記憶装置のいずれの記憶領域に記憶すべきかを決定
し、配置情報を生成する第5の処理と、上記配置情報に
基づいて、上記原始プログラムで用いられている手続、
関数、あるいはサブルーチンのうち、ユーザにより定義
され検査が終了したもの、上記プログラミング言語にお
いて処理系で予め用意されているもの、命令コードの形
式で予め用意されているものの少なくとも一部であっ
て、上記主記憶装置の任意の記憶領域に記憶可能に変換
された手続、関数、あるいはサブルーチンと、上記第4
の目的プログラムとを結合して、上記第1の目的プログ
ラムを生成する第6の処理とからなることを特徴として
いる。
【0023】また、請求項6記載の発明は、プログラミ
ング言語で記述された原始プログラムを計算機や中央処
理装置が実行可能な言語で記述された第1の目的プログ
ラムに変換するプログラム変換方法に係り、上記原始プ
ログラムを第2の目的プログラムに変換すると共に、上
記第2の目的プログラムを実行した際に上記手続、関
数、あるいはサブルーチンが実際に呼び出される回数を
カウントするコードを挿入し、上記第2の目的プログラ
ムについて、ユーザが上記原始プログラム中で定義した
手続、関数、あるいはサブルーチンを、上記第1の目的
プログラムが上記計算機や中央処理装置で用いられる際
に記憶される主記憶装置の任意の記憶領域に記憶可能に
変換して第3の目的プログラムを生成する第1の処理
と、上記原始プログラムで用いられている手続、関数、
あるいはサブルーチンのうち、ユーザにより定義され検
査が終了したもの、上記プログラミング言語において処
理系で予め用意されているもの、命令コードの形式で予
め用意されているものの少なくとも一部であって、上記
主記憶装置の任意の記憶領域に記憶可能に変換された手
続、関数、あるいはサブルーチンと、上記第3の目的プ
ログラムとを結合して第4の目的プログラムを生成する
第2の処理と、上記第4の目的プログラムを実行しつ
つ、上記手続、関数、あるいはサブルーチンが実際に呼
び出される回数を示す情報と、上記手続、関数、あるい
はサブルーチン同士が互いを呼び出す関係を示す情報と
からなる動的情報を収集すると共に、実際に取り出され
た命令コードが属する手続、関数、あるいはサブルーチ
ンにおける相対的な位置を示すメモリアクセス情報を生
成する第3の処理と、上記第4の目的プログラムを構成
するすべての手続、関数、あるいはサブルーチンについ
て、上記メモリアクセス情報に対応する命令コードが連
続的に存在する領域が1個の場合にはその領域を有効領
域と決定し、上記メモリアクセス情報に対応する命令コ
ードが連続的に存在する領域が複数個の場合には複数個
の領域をすべて含む最小の領域を有効領域と決定する第
4の処理と、上記動的情報に基づいて、上記有効領域同
士が上記計算機や中央処理装置を構成するキャッシュ・
ライン上で衝突を起こさないように、上記手続、関数、
あるいはサブルーチンを、上記主記憶装置のいずれの記
憶領域に記憶すべきかを決定し、配置情報を生成する第
5の処理と、上記配置情報に基づいて、上記原始プログ
ラムで用いられている手続、関数、あるいはサブルーチ
ンのうち、ユーザにより定義され検査が終了したもの、
上記プログラミング言語において処理系で予め用意され
ているもの、命令コードの形式で予め用意されているも
のの少なくとも一部であって、上記主記憶装置の任意の
記憶領域に記憶可能に変換された手続、関数、あるいは
サブルーチンと、上記第4の目的プログラムとを結合し
て、上記第1の目的プログラムを生成する第6の処理と
からなることを特徴としている。
【0024】また、請求項7記載の発明は、請求項5又
は6記載のプログラム変換方法に係り、上記第3の処理
では、上記メモリアクセス情報は、上記第2の目的プロ
グラムの流れを変更する処理に関する命令コードが取り
出された場合にだけ生成することを特徴としている。
【0025】また、請求項8記載の発明は、プログラミ
ング言語で記述された原始プログラムを計算機や中央処
理装置が実行可能な言語で記述された第1の目的プログ
ラムに変換するプログラム変換装置に係り、上記原始プ
ログラムを第2の目的プログラムに変換する第1のプロ
グラム変換手段と、上記第2の目的プログラムを実行し
つつ、上記原始プログラムで用いられている手続、関
数、あるいはサブルーチンに関する情報を収集すると共
に、実際に取り出された命令コードが属する手続、関
数、あるいはサブルーチンにおける相対的な位置を示す
メモリアクセス情報を生成するプログラム実行手段と、
上記第2の目的プログラムを構成するすべての手続、関
数、あるいはサブルーチンについて、上記メモリアクセ
ス情報に対応する命令コードが連続的に存在する領域が
1個の場合にはその領域を有効領域と決定し、上記メモ
リアクセス情報に対応する命令コードが連続的に存在す
る領域が複数個の場合には複数個の領域をすべて含む最
小の領域を有効領域と決定する有効領域決定手段と、上
記情報に基づいて、上記有効領域同士が上記計算機や中
央処理装置を構成するキャッシュ・ライン上で衝突を起
こさないように、上記手続、関数、あるいはサブルーチ
ンを、上記第1の目的プログラムが上記計算機や中央処
理装置で用いられる際に記憶される主記憶装置のいずれ
の記憶領域に記憶すべきかを決定し、その決定結果に基
づいて上記第1の目的プログラムを生成する第2のプロ
グラム変換手段とを備えてなることを特徴としている。
【0026】また、請求項9記載の発明は、請求項8記
載のプログラム変換装置に係り、上記手続、関数、ある
いはサブルーチンは、ユーザが上記原始プログラム中で
定義したもの、ユーザにより定義され検査が終了したも
の、上記プログラミング言語において処理系で予め用意
されているもの、命令コードの形式で予め用意されてい
るもののうち、少なくとも1個からなることを特徴とし
ている。
【0027】また、請求項10記載の発明は、請求項8
又は9記載のプログラム変換装置に係り、上記情報は、
上記第2の目的プログラムを実行することにより得られ
る、上記手続、関数、あるいはサブルーチンが実際に呼
び出される回数を示す情報と、上記手続、関数、あるい
はサブルーチン同士が互いを呼び出す関係を示す情報と
からなることを特徴としている。
【0028】また、請求項11記載の発明は、プログラ
ミング言語で記述された原始プログラムを計算機や中央
処理装置が実行可能な言語で記述された第1の目的プロ
グラムに変換するプログラム変換装置に係り、上記原始
プログラムを第2の目的プログラムに変換すると共に、
上記第2の目的プログラムについて、ユーザが上記原始
プログラム中で定義した手続、関数、あるいはサブルー
チンを、上記第1の目的プログラムが上記計算機や中央
処理装置で用いられる際に記憶される主記憶装置の任意
の記憶領域に記憶可能に変換して第3の目的プログラム
を生成するプログラム変換手段と、上記原始プログラム
で用いられている手続、関数、あるいはサブルーチンの
うち、ユーザにより定義され検査が終了したもの、上記
プログラミング言語において処理系で予め用意されてい
るもの、命令コードの形式で予め用意されているものの
少なくとも一部であって、上記主記憶装置の任意の記憶
領域に記憶可能に変換された手続、関数、あるいはサブ
ルーチンと、上記第3の目的プログラムとを結合して第
4の目的プログラムを生成する結合手段と、上記第4の
目的プログラムを実行しつつ、上記手続、関数、あるい
はサブルーチンが実際に呼び出される回数を示す情報
と、上記手続、関数、あるいはサブルーチン同士が互い
を呼び出す関係を示す情報とからなる動的情報を収集す
ると共に、実際に取り出された命令コードが属する手
続、関数、あるいはサブルーチンにおける相対的な位置
を示すメモリアクセス情報を生成するプログラム実行手
段と、上記第4の目的プログラムを構成するすべての手
続、関数、あるいはサブルーチンについて、上記メモリ
アクセス情報に対応する命令コードが連続的に存在する
領域が1個の場合にはその領域を有効領域と決定し、上
記メモリアクセス情報に対応する命令コードが連続的に
存在する領域が複数個の場合には複数個の領域をすべて
含む最小の領域を有効領域と決定する有効領域決定手段
と、上記動的情報に基づいて、上記有効領域同士が上記
計算機や中央処理装置を構成するキャッシュ・ライン上
で衝突を起こさないように、上記手続、関数、あるいは
サブルーチンを、上記主記憶装置のいずれの記憶領域に
記憶すべきかを決定し、配置情報を生成する最適化手段
とを備え、上記結合手段は、上記配置情報に基づいて、
上記原始プログラムで用いられている手続、関数、ある
いはサブルーチンのうち、ユーザにより定義され検査が
終了したもの、上記プログラミング言語において処理系
で予め用意されているもの、命令コードの形式で予め用
意されているものの少なくとも一部であって、上記主記
憶装置の任意の記憶領域に記憶可能に変換された手続、
関数、あるいはサブルーチンと、上記第4の目的プログ
ラムとを結合して、上記第1の目的プログラムを生成す
ることを特徴としている。
【0029】また、請求項12記載の発明は、プログラ
ミング言語で記述された原始プログラムを計算機や中央
処理装置が実行可能な言語で記述された第1の目的プロ
グラムに変換するプログラム変換装置に係り、上記原始
プログラムを第2の目的プログラムに変換すると共に、
上記第2の目的プログラムを実行した際に上記手続、関
数、あるいはサブルーチンが実際に呼び出される回数を
カウントするコードを挿入し、上記第2の目的プログラ
ムについて、ユーザが上記原始プログラム中で定義した
手続、関数、あるいはサブルーチンを、上記第1の目的
プログラムが上記計算機や中央処理装置で用いられる際
に記憶される主記憶装置の任意の記憶領域に記憶可能に
変換して第3の目的プログラムを生成するプログラム変
換手段と、上記原始プログラムで用いられている手続、
関数、あるいはサブルーチンのうち、ユーザにより定義
され検査が終了したもの、上記プログラミング言語にお
いて処理系で予め用意されているもの、命令コードの形
式で予め用意されているものの少なくとも一部であっ
て、上記主記憶装置の任意の記憶領域に記憶可能に変換
された手続、関数、あるいはサブルーチンと、上記第3
の目的プログラムとを結合して第4の目的プログラムを
生成する結合手段と、上記第4の目的プログラムを実行
しつつ、上記手続、関数、あるいはサブルーチンが実際
に呼び出される回数を示す情報と、上記手続、関数、あ
るいはサブルーチン同士が互いを呼び出す関係を示す情
報とからなる動的情報を収集すると共に、実際に取り出
された命令コードが属する手続、関数、あるいはサブル
ーチンにおける相対的な位置を示すメモリアクセス情報
を生成するプログラム実行手段と、上記第4の目的プロ
グラムを構成するすべての手続、関数、あるいはサブル
ーチンについて、上記メモリアクセス情報に対応する命
令コードが連続的に存在する領域が1個の場合にはその
領域を有効領域と決定し、上記メモリアクセス情報に対
応する命令コードが連続的に存在する領域が複数個の場
合には複数個の領域をすべて含む最小の領域を有効領域
と決定する有効領域決定手段と、上記動的情報に基づい
て、上記有効領域同士が上記計算機や中央処理装置を構
成するキャッシュ・ライン上で衝突を起こさないよう
に、上記手続、関数、あるいはサブルーチンを、上記主
記憶装置のいずれの記憶領域に記憶すべきかを決定し、
配置情報を生成する最適化手段とを備え、上記結合手段
は、上記配置情報に基づいて、上記原始プログラムで用
いられている手続、関数、あるいはサブルーチンのう
ち、ユーザにより定義され検査が終了したもの、上記プ
ログラミング言語において処理系で予め用意されている
もの、命令コードの形式で予め用意されているものの少
なくとも一部であって、上記主記憶装置の任意の記憶領
域に記憶可能に変換された手続、関数、あるいはサブル
ーチンと、上記第4の目的プログラムとを結合して、上
記第1の目的プログラムを生成することを特徴としてい
る。
【0030】また、請求項13記載の発明は、請求項8
乃至12のいずれか1に記載のプログラム変換装置に係
り、上記プログラム実行手段は、上記第2の目的プログ
ラムの流れを変更する処理に関する命令コードが取り出
された場合にだけ上記メモリアクセス情報を生成するこ
とを特徴としている。
【0031】また、請求項14記載の発明に係る記憶媒
体は、コンピュータに請求項1乃至13のいずれか1つ
に記載の機能を実現させるためのプログラム変換プログ
ラムが記憶されていることを特徴としている。
【0032】
【作用】この発明の構成によれば、様々な手続相互間に
おけるキャッシュ・メモリ上での衝突や頻繁に用いる手
続のキャッシュ・ミスをより実質的により多く防止でき
る。これにより、計算機やCPUが目的プログラムを実
行した際の実行速度をより速くすることができる。
【0033】
【発明の実施の形態】以下、図面を参照して、この発明
の実施の形態について説明する。説明は、実施例を用い
て具体的に行う。 A.第1の実施例 まず、この発明の第1の実施例について説明する。図1
は、この発明の第1の実施例であるプログラム変換装置
の電気的構成を示すブロック図である。この例のプログ
ラム変換装置は、第1〜第4プログラム記憶部31〜3
4と、コンパイラ35と、リンカ36と、プロファイラ
37と、第1及び第2情報記憶部38及び39と、最適
化部40と、第1及び第2ライブラリ記憶部41及び4
2と、ライブラリ生成部43とから概略構成されてい
る。第1プログラム記憶部31は、ROMやRAM等の
半導体メモリ、FD(フロッピー・ディスク)、HD
(ハード・ディスク)やCD−ROM等の記憶媒体から
なり、例えば、C言語等のプログラミング言語で記述さ
れた原始プログラムが予め記憶されている。この実施例
では、プログラミング言語としてC言語を用いた場合に
ついて説明する。コンパイラ35は、原始プログラムを
再配置可能目的プログラムにコンパイルした後、手続毎
に配置可能な再配置可能目的プログラムに変換して第2
プログラム記憶部32に記憶する。
【0034】なお、この実施例において、手続は、「従
来の技術」で説明したように、本来の意味の手続の他、
関数及びサブルーチンを含めた総称である。この手続に
は、ユーザ手続、ユーザ・ライブラリ手続、標準ライブ
ラリ手続、ランタイム・ライブラリ手続等が含まれる。
ユーザ手続とは、ユーザが原始プログラム中で定義した
手続をいう。ユーザ・ライブラリ手続とは、元々はユー
ザ手続であったが、汎用性が高いと思われるものをデバ
ッグ等の検査後、第1ライブラリ記憶部41に記憶した
ものをいう。標準ライブラリ手続とは、原始プログラム
を記述するために使用されるプログラミング言語におい
てコンパイラなどの処理系で予め用意されており、ユー
ザが定義せずに使用できる手続をいう。例えば、C言語
では、文字列を標準出力に出力する手続printf
や、文字列の長さを返す手続strlenなどである。
ランタイム・ライブラリ手続とは、汎用性が高いがコー
ドサイズが大きいため、予め命令コードで記述された手
続の形式で第1ライブラリ記憶部41に予め記憶された
手続をいう。汎用性が高いがサイズが大きい命令列は、
コンパイラ35が目的プログラムを生成する度に命令コ
ードを生成するのは効率的でないので、そのような命令
列を予め命令コードで記述された手続の形式とし、目的
プログラム生成時にその手続を呼び出すコードを生成
し、リンカ36において後でリンクするのである。例え
ば、最終的な目的プログラムを実行するCPU等が浮動
小数点用の命令を有しないのもかかわらず、原始プログ
ラムにfloat型の変数や演算が記述されている場
合、コンパイラ35は複数の命令列で構成された手続、
例えば、float用手続addや、float用手続
sub等を用いて目的プログラムを生成する。この時の
float用手続addやfloat用手続subがラ
ンタイム・ライブラリ手続である。
【0035】第2プログラム記憶部32は、RAM等の
半導体メモリ、FDやHD等の記憶媒体からなり、手続
毎に配置可能な再配置可能目的プログラムが記憶され
る。リンカ36は、第2プログラム記憶部32に記憶さ
れた手続毎に配置可能な再配置可能目的プログラムと、
第2ライブラリ記憶部42に記憶された手続毎に配置可
能な再配置可能ライブラリとをリンクして実行可能な一
時的な目的プログラムを生成して第3プログラム記憶部
33に記憶すると共に、第2情報記憶部39に記憶され
た配置情報(後述)に基づいて、手続毎に配置可能な再
配置可能目的プログラムと手続毎に配置可能な再配置可
能ライブラリとをリンクして実行可能な最終的な目的プ
ログラムを生成して第4プログラム記憶部34に記憶す
る。第3プログラム記憶部33は、RAM等の半導体メ
モリ、FDやHD等の記憶媒体からなり、一時的な目的
プログラムが記憶される。第4プログラム記憶部34
は、RAM等の半導体メモリ、FDやHD等の記憶媒体
からなり、最終的な目的プログラムが記憶される。
【0036】プロファイラ37は、ハードウェア・エミ
ュレータやソフトウェア・シミュレータ等からなり、プ
ログラム実行部37aとメモリアクセス情報生成部37
bとから概略構成されている。プログラム実行部37a
は、第3プログラム記憶部33から読み込んだ一時的な
目的プログラムを実行しつつ、各手続相互間の呼出関
係、各手続の呼出回数、ループ構造情報等からなる動的
情報を収集し、得られた動的情報をメモリアクセス情報
生成部37bで得られたメモリアクセス情報(後述)と
共にプロファイル情報として第1情報記憶部38に記憶
する。ループ構造情報とは、ある手続がループ構造の中
で呼ばれたことを示す情報をいう。具体的には、原始プ
ログラムのループ構造にプログラム実行部37aの動作
時にループ構造の開始と終了を認識できる何らかのマー
カを記述しておき、プログラム実行部37aが動作時に
そのマーカによりループ構造の開始と終了を認識するこ
とにより、そのループ構造中で呼ばれた手続はループ構
造に属していることが認識できる。これにより、ループ
構造中の手続同士が時間的に連続して実行される可能性
の高いと判断できるのである。メモリアクセス情報生成
部37bは、プログラム実行部37aが第3プログラム
記憶部33から読み込んだ一時的な目的プログラムを実
行している間、この一時的な目的プログラムに含まれて
いる手続配置情報等に基づいてメモリアクセス情報を生
成し、プログラム実行部37aで得られた動的情報と共
に、プロファイル情報として第1情報記憶部38に記憶
する。ここで、手続配置情報とは、例えば、手続の先頭
に付加されている、手続の外部でも使用可能であること
を示すグローバル属性や手続の属性等に関するシンボル
情報など、当該手続が一時的な目的プログラムの中でい
ずれに配置されているかを示す情報をいう。
【0037】第1情報記憶部38は、RAM等の半導体
メモリ、FDやHD等の記憶媒体からなり、動的情報及
びメモリアクセス情報により構成されるプロファイル情
報が記憶される。最適化部40は、手続有効領域判定部
40aとキャッシュ最適化部40bとから概略構成され
ている。手続有効領域判定部40aは、第1情報記憶部
38から読み込んだメモリアクセス情報に基づいて、各
手続の有効に処理された範囲を判定し、その範囲を各手
続の手続有効領域とする。キャッシュ最適化部40b
は、第1情報記憶部38から読み込んだ動的情報に基づ
いて、手続有効領域判定部40aが求めた手続有効領域
について、キャッシュ・メモリ上での衝突やキャッシュ
・ミスが起こらないように、手続の配置最適化を行っ
て、リンカ36に手続の配置を指示するための配置情報
を生成し、第2情報記憶部39に記憶する。
【0038】第2情報記憶部39は、RAM等の半導体
メモリ、FDやHD等の記憶媒体からなり、配置情報が
記憶される。第1ライブラリ記憶部41は、ROMやR
AM等の半導体メモリ、FD、HDやCD−ROM等の
記憶媒体からなり、標準ライブラリ手続、ランタイム・
ライブラリ手続及びユーザ・ライブラリ手続を含んだ再
配置可能ライブラリがそれぞれ記憶されている。ライブ
ラリ生成部43は、第1ライブラリ記憶部41に記憶さ
れた再配置可能ライブラリを手続毎に配置可能な再配置
可能ライブラリに変換して第2ライブラリ記憶部42に
記憶する。第2ライブラリ記憶部42は、RAM等の半
導体メモリ、FDやHD等の記憶媒体からなり、手続毎
に配置可能な再配置可能ライブラリが記憶される。
【0039】次に、上記構成を有するプログラム変換装
置の動作について、図2〜図5を参照して説明する。ま
ず、図2に示すステップSA1では、ライブラリ生成部
43は、第1ライブラリ記憶部41に記憶された各再配
置可能ライブラリについて、手続単位を認識して手続毎
に配置可能な再配置可能ライブラリに変換し、第2ライ
ブラリ記憶部42に記憶する。1つの再配置可能ライブ
ラリ内の複数の手続は、通常、1つのまとまりとして配
置の単位であるセクション、例えば、テキスト・セクシ
ョン(.text・セクション)に属し、リンカ36に
おけるリンク時にはテキスト・セクションとしてまとめ
て配置されるので、個々の手続単位で配置できない。そ
こで、手続単位に個別のセクションに分割すれば、リン
カ36におけるリンク時に手続単位で適宜配置すること
が可能となる。なお、再配置可能ライブラリ内のテキス
ト・セクションを手続単位のセクションに分割する手順
については、上記した特開平11−232117号公報
を参照されたい。
【0040】ステップSA2では、コンパイラ35は、
原始プログラムを再配置可能目的プログラムにコンパイ
ルした後、ステップSA1におけるライブラリ生成部4
3の処理と同様の処理により、再配置可能目的プログラ
ムを手続毎に配置可能な再配置可能目的プログラムに変
換して第2プログラム記憶部32に記憶する。ステップ
SA3では、リンカ36は、第2プログラム記憶部32
に記憶された手続毎に配置可能な再配置可能目的プログ
ラムと、第2ライブラリ記憶部42に記憶された手続毎
に配置可能な再配置可能ライブラリとをリンクして実行
可能な一時的な目的プログラムを生成して第3プログラ
ム記憶部33に記憶する。
【0041】ステップSA4では、プロファイラ37に
おいて、プログラム実行部37aは、第3プログラム記
憶部33から読み込んだ一時的な目的プログラムを実行
しつつ、各手続相互間の呼出関係、各手続の呼出回数、
ループ構造情報等からなる動的情報を収集する。これと
並行して、メモリアクセス情報生成部37bは、プログ
ラム実行部37aが第3プログラム記憶部33から読み
込んだ一時的な目的プログラムを実行している間、この
一時的な目的プログラムに含まれている手続配置情報等
に基づいてメモリアクセス情報を生成する。そして、プ
ログラム実行部37a及びメモリアクセス情報生成部3
7bは、それぞれの処理により得られた動的情報とメモ
リアクセス情報とをプロファイル情報として第1情報記
憶部38に記憶する。
【0042】ここで、メモリアクセス情報生成部37b
が実行するメモリアクセス情報生成処理について、図3
に示すフローチャートを参照して説明する。まず、ステ
ップSB1では、プログラム実行部37aが第3プログ
ラム記憶部33から一時的な目的プログラムを構成する
命令コードを取り出す(フェッチ)する毎に、プログラ
ムカウンタから当該命令コードのアドレス(絶対アドレ
ス)を取得した後、ステップSB2へ進む。ステップS
B2では、一時的な目的プログラムに含まれ、ある手続
が一時的な目的プログラムの中でいずれに配置されてい
るかを示す情報である手続配置情報を参照して、ステッ
プSB1の処理で取得したアドレスがいずれの手続に属
するかを調査した後、ステップSB3へ進む。
【0043】ステップSB3では、ステップSB1の処
理で取得したアドレスから、ステップSB2の処理で調
査した結果得られた手続の先頭アドレス(絶対アドレ
ス)を減算することにより、当該アドレスの先頭アドレ
スからの相対的な位置を示す命令オフセット算出した
後、ステップSB4へ進む。ステップSB4では、ステ
ップSB1の処理で取得したアドレスを、"手続名_命
令オフセット"の形式を有するメモリアクセス情報に変
換した後、ステップSB5へ進む。ステップSB5で
は、プログラム実行部37aが実行中の一時的な目的プ
ログラムが終了したか否かを判断する。この判断結果が
「NO」の場合には、ステップSB1へ戻り、プログラ
ム実行部37aが実行中の一時的な目的プログラムが終
了するまで、上記したステップSB1〜SB4の処理を
繰り返す。一方、プログラム実行部37aが実行中の一
時的な目的プログラムが終了すると、ステップSB5の
判断結果が「YES」となり、メモリアクセス情報生成
部37bは、一連の処理を終了する。
【0044】ステップSA5では、最適化部40を構成
する手続有効領域判定部40aは、第1情報記憶部38
から読み込んだプロファイル情報を構成するメモリアク
セス情報に基づいて、各手続の有効に処理された範囲を
判定し、その範囲を各手続の手続有効領域とする。ここ
で、手続有効領域判定部40aが実行する手続有効領域
判定処理について、図4に示すフローチャートを参照し
て説明する。まず、ステップSC1では、第1情報記憶
部38からメモリアクセス情報1個を読み込んだ後、ス
テップSC2へ進む。ステップSC2では、ステップS
C1の処理で読み込んだメモリアクセス情報に対応する
手続のアドレスの命令コードを、プログラム実行時に実
際に使用されるという意味で有効な命令コードとして判
定した後、ステップSC3へ進む。ステップSC3で
は、第1情報記憶部38に読み込むべき他のメモリアク
セス情報がまだあるか否かを判断する。この判断結果が
「YES」の場合には、ステップSC1へ戻り、上記し
たステップSC1及びSC2の処理を繰り返す。一方、
第1情報記憶部38からすべてのメモリアクセス情報を
読み込んだため、第1情報記憶部38に読み込むべき他
のメモリアクセス情報がない場合には、ステップSC3
の判断結果が「NO」となり、ステップSC4へ進む。
【0045】ステップSC4では、ある手続において、
原則として、有効な命令コードと判定した命令コードが
連続的に存在するアドレス領域を手続有効領域と決定
し、例えば、if−else文が複数個存在し、かつ、
いずれもif以下elseの前までの処理だけが実行さ
れるというように、ある手続において、有効な命令コー
ドと判定した命令コードが連続的に存在するアドレス領
域が複数個存在する場合には、それらをすべて含む最小
のアドレス領域を手続有効領域と決定した後、ステップ
SC5へ進む。ステップSC5では、第3プログラム記
憶部33に記憶されている一時的な目的プログラムを構
成する他の手続がまだあるか否かを判断する。この判断
結果が「YES」の場合には、ステップSC4へ戻り、
上記したステップSC4の処理を繰り返す。一方、第3
プログラム記憶部33に記憶されている一時的な目的プ
ログラムを構成するすべての手続についてステップSC
4の処理を実行したため、処理すべき他の手続がない場
合には、ステップSC5の判断結果が「NO」となり、
ステップSC6へ進む。ステップSC6では、キャッシ
ュ最適化部40bにおいて最適化の対象とすべき最適化
単位を手続からステップSC4の処理で決定した手続有
効領域に変更した後、一連の処理を終了する。
【0046】ステップSA6では、最適化部40を構成
するキャッシュ最適化部40bは、第1情報記憶部38
から読み込んだ動的情報に基づいて、手続有効領域判定
部40aが決定した手続有効領域を最適化単位として、
キャッシュ・メモリ上での衝突やキャッシュ・ミスが起
こらないように、すべての手続の配置最適化を行って、
リンカ36に手続の配置を指示するための配置情報を生
成し、第2情報記憶部39に記憶する。なお、この手続
の配置最適化については、形式的には手続の衝突やキャ
ッシュ・ミスが発生しても、手続有効領域について実質
的に手続の衝突やキャッシュ・ミスが発生しないように
最適化する以外は、上記した特開平11−232117
号公報に開示された手続の配置最適化処理と略同様であ
るので、その説明を省略する。ステップSA7では、リ
ンカ36は、第2情報記憶部39に記憶された配置情報
に基づいて、手続毎に配置可能な再配置可能目的プログ
ラムと手続毎に配置可能な再配置可能ライブラリとをリ
ンクして実行可能な最終的な目的プログラムを生成して
第4プログラム記憶部34に記憶した後、一連の処理を
終了する。
【0047】このように、この例の構成によれば、プロ
グラム実行部37aが実際にフェッチした命令コードの
メモリアクセス情報をメモリアクセス情報生成部37b
が生成し、そのメモリアクセス情報に基づいて、手続有
効領域判定部40aが各手続毎に手続有効領域を決定
し、キャッシュ最適化部40bがこの手続有効領域を最
適化単位としてすべての手続の配置最適化を行っている
ので、様々な手続相互間におけるキャッシュ・メモリ上
での衝突や頻繁に用いる手続のキャッシュ・ミスをより
実質的により多く防止でき、これにより、計算機やCP
Uが目的プログラムを実行した際の実行速度をより速く
することができる。これにより、この例のプログラム変
換装置は、最近のモバイル機器等の大量のデータを高速
で処理する機器のような、手続の衝突やキャッシュ・ミ
スの防止に対する要求が厳しい機器で用いられるプログ
ラムのプログラム変換にも使用することができる。
【0048】また、この例のプログラム変換装置によれ
ば、手続の衝突やキャッシュ・ミスの発生を完全に防止
することができる場合が多くなる。以下、従来の技術と
比較するために、図5及び図12〜図15を参照して、
その一例を説明する。図12〜図14に示す原始プログ
ラムをこの例のプログラム変換装置により最終的な目的
プログラムに変換すると、図5に示すように主記憶装置
2に記憶される。図5から分かるように、形式的には、
手続func0と手続func_20との間でキャッシ
ュ・ライン1及び1において衝突が発生し、手続f
unc0と手続func_10との間でキャッシュ・ラ
イン1において衝突が発生し、手続func_10と
手続func_20との間でキャッシュ・ライン1
おいて衝突が発生している。しかし、実質的に見ると、
すなわち、手続有効領域に注目すると、手続func0
の手続有効領域は記憶領域22a〜22d、手続fun
c_10の手続有効領域は記憶領域22h、手続fun
c_20の手続有効領域は記憶領域21e〜21gにそ
れぞれ記憶されており、何等衝突は発生していない。し
たがって、この例において、手続の衝突やキャッシュ・
ミスは全然発生しないので、手続func0全体の処理
を1回実行した場合、2,000,200クロックで済
むことになる。これに対し、上記したように、従来のプ
ログラム変換装置により同一の原始プログラムを最終的
な目的プログラムに変換すると、手続func0全体の
処理を実行した場合、20,000回のキャッシュ・ミ
スが発生し、1,000,000クロックのロスが生じ
る。すなわち、この例によれば、実行時間が1,00
0,000クロックも短縮される。
【0049】B.第2の実施例 次に、この発明の第2の実施例について説明する。図6
は、この発明の第2の実施例であるプログラム変換装置
の電気的構成を示すブロック図である。この図におい
て、図1の各部に対応する部分には同一の符号を付け、
その説明を省略する。この図に示すプログラム変換装置
においては、第1ライブラリ記憶部41に記憶された再
配置可能ライブラリがリンカ36にも供給されるように
構成されている。このように構成したのは、以下に示す
理由による。すなわち、再配置可能ライブラリの数が多
い場合、ライブラリ生成部43が、第1ライブラリ記憶
部41に記憶されたすべての再配置可能ライブラリを手
続毎に配置可能な再配置可能ライブラリに変換するので
は時間がかかってしまう。そこで、一部の再配置可能ラ
イブラリについては、ライブラリ生成部43が手続毎に
配置可能な再配置可能ライブラリに変換せずにリンカ3
6で手続毎に配置可能な再配置可能目的プログラムと直
接リンクさせるのである。この場合、どの再配置可能ラ
イブラリを直接リンカ36に供給するかは、例えば、第
1情報記憶部38に記憶された動的情報や各手続のコー
ド・サイズに基づいて、リンカ36が判断するように構
成しても良い。このように、この例の構成によれば、第
1の実施例に比べて短い時間で最終的な目的プログラム
を作成できる。
【0050】C.第3の実施例 次に、第3の実施例について説明する。図7は、この発
明の第3の実施例であるプログラム変換装置の電気的構
成を示すブロック図である。この図において、図1の各
部に対応する部分には同一の符号を付け、その説明を省
略する。この図に示すプログラム変換装置においては、
図1に示すコンパイラ35及びプロファイラ37に代え
て、コンパイラ44及びプロファイラ45が新たに設け
られている。プロファイラ45は、プログラム実行部4
5aとメモリアクセス情報生成部45bとから概略構成
されている。メモリアクセス情報生成部45bは、図1
に示すメモリアクセス情報生成部37bと同一の機能を
有しているが、プログラム実行部45aは、図1に示す
プログラム実行部37aとは異なり、動的情報を収集す
る機能はなく、第3プログラム記憶部33に記憶された
実行可能な一時的な目的プログラムを読み込んで単に実
行するだけの機能を有している。その代わり、コンパイ
ラ44は、原始プログラムを実行可能な一時的な目的プ
ログラムにコンパイルする際、一時的な目的プログラム
に、プログラム実行部45aがその一時的な目的プログ
ラムを実行した際に実際に実行された手続の回数をカウ
ントするカウント・コードを挿入する。これにより、プ
ログラム実行部45aは、一時的な目的プログラムを実
行することにより、各手続相互間の呼出関係、各手続の
呼出回数等からなる動的情報を収集することができ、得
られた動的情報を第1情報記憶部38に記憶する。
【0051】なお、上記構成を有するプログラム変換装
置の動作については、図2に示すフローチャートのう
ち、ステップSA2及びSA4の処理が以下に示すよう
に異なる以外は、上記した第1の実施例の動作と略同様
であるので、その他の処理に関する説明は省略する。す
なわち、ステップSA2の処理では、コンパイラ44
は、第1プログラム記憶部31から読み込まれた原始プ
ログラムをカウント・コードを挿入しつつ、実行可能な
一時的な目的プログラムにコンパイルして、第2プログ
ラム記憶部32に記憶する。また、ステップSA4の処
理では、プログラム実行部45aは、第3プログラム記
憶部33から読み込んだ一時的な目的プログラムを実行
するが、一時的な目的プログラムにカウント・コードが
挿入されているので、各手続相互間の呼出関係、各手続
の呼出回数等からなる動的情報が収集され、得られた動
的情報を第1情報記憶部38に記憶する。このように、
この例の構成によれば、プログラム実行部45aが動的
情報を収集する機能を有しない場合でも、第1の実施例
の場合と略同様の効果を得ることができる。
【0052】以上、この発明の実施例を図面を参照して
詳述してきたが、具体的な構成はこの実施例に限られる
ものではなく、この発明の要旨を逸脱しない範囲の設計
の変更等があってもこの発明に含まれる。例えば、上述
の各実施例においては、この発明を1つの原始プログラ
ムから1つの最終的な目的プログラムを生成する場合に
適用する例を示したが、これに限定されず、この発明を
複数の原始プログラムをそれぞれ再配置可能目的プログ
ラムにコンパイルした後、それらをリンカ36でリンク
して1つの最終的な目的プログラムを生成する場合に適
用しても、もちろん良い。また、上述の各実施例におい
ては、各プログラム記憶部31〜34、各情報記憶部3
8及び39並びにライブラリ記憶部41及び42は、そ
れぞれ別々の記憶媒体で構成する例を示したが、これに
限定されず、例えば、同一の記憶媒体の異なる記憶領域
で構成するようにしても良い。その場合、各プログラム
記憶部31〜34並びにライブラリ記憶部41及び42
は、記憶対象が多くの記憶容量を要するプログラムや再
配置可能ライブラリであるので、FDやHD、あるいは
CD−ROMで構成し、各情報記憶部38及び39は、
記憶対象が比較的少ない記憶容量で済むデータであるの
で、ROMやRAM等の半導体メモリで構成するように
しても良い。
【0053】また、上述の各実施例においては、メモリ
アクセス情報生成部37b及び45bは、プログラム実
行部37aが第3プログラム記憶部33から命令コード
をフェッチする毎に、メモリアクセス情報を生成する例
を示したが、これに限定されず、例えば、ジャンプ命令
等のプログラムの流れを変更する処理に関する命令コー
ドがフェッチされた場合にだけ、分岐元及び分岐先のア
ドレスからメモリアクセス情報を生成するように構成し
ても良い。この場合には、プログラム変換に要する時間
を短縮することができる。また、上述の各実施例におい
ては、手続有効領域を最適化単位としてはいるが、配置
される複数個の命令コードのまとまりの単位はあくまで
も手続である例を示している。しかし、配置される複数
個の命令コードのまとまりの単位は手続である必要はな
く、例えば、if−else文の場合、if以下els
eの前までの処理やelse以下の処理を1個の基本ブ
ロックとし、この基本ブロックを配置される複数個の命
令コードのまとまりの単位としても良い。この場合に
は、より実質的に手続の衝突やキャッシュ・ミスが発生
しないように最適化することができる。また、上述の各
実施例においては、標準ライブラリ手続、ランタイム・
ライブラリ手続及びユーザ・ライブラリ手続を含んだ再
配置可能ライブラリがそれぞれ記憶されている第1ライ
ブラリ記憶部41と、第1ライブラリ記憶部41に記憶
された再配置可能ライブラリを手続毎に配置可能な再配
置可能ライブラリに変換して第2ライブラリ記憶部42
に記憶するライブラリ生成部43とを設ける例を示した
が、これに限定されず、予め、第2ライブラリ記憶部4
2に手続毎に配置可能な再配置可能ライブラリを記憶し
ておいても良い。この場合には、プログラム変換に要す
る時間を短縮することができる。
【0054】また、上述の各実施例においては、各手段
をハードウェアで構成した例を示したが、これに限定さ
れない。すなわち、上記プログラム変換装置を、CPU
(中央処理装置)と、ROMやRAM等の内部記憶装置
と、FDD(フロッピー・ディスク・ドライバ)、HD
D(ハード・ディスク・ドライバ)、CD−ROMドラ
イバ等の外部記憶装置と、出力手段と、入力手段とを有
するコンピュータによって構成し、上記コンパイラ35
又は44、リンカ36、プロファイラ37又は45並び
にライブラリ生成部43がCPUによって構成され、こ
れらの機能がプログラム変換プログラムとして、ROM
等の半導体メモリや、FD、HDやCD−ROM等の記
憶媒体に記憶されていると構成しても良い。この場合、
上記内部記憶装置、あるいは外部記憶装置が各プログラ
ム記憶部31〜34、各情報記憶部38及び39並びに
ライブラリ記憶部41及び42となり、プログラム変換
プログラムは、記憶媒体からCPUに読み込まれ、CP
Uの動作を制御する。CPUは、プログラム変換プログ
ラムが起動されると、コンパイラ35又は44、リンカ
36、プロファイラ37又は45並びにライブラリ生成
部43として機能し、プログラム変換プログラムの制御
により、上記した処理を実行するのである。
【0055】
【発明の効果】以上説明したように、この発明の構成に
よれば、様々な手続相互間におけるキャッシュ・メモリ
上での衝突や頻繁に用いる手続のキャッシュ・ミスをよ
り実質的により多く防止できる。これにより、計算機や
CPUが目的プログラムを実行した際の実行速度をより
速くすることができる。
【図面の簡単な説明】
【図1】この発明の第1の実施例であるプログラム変換
装置の電気的構成を示すブロック図である。
【図2】同装置の動作を表すフローチャートである。
【図3】同装置を構成するプロファイラのメモリアクセ
ス情報生成部の動作を表すフローチャートである。
【図4】同装置を構成する最適化部の手続有効領域判定
部の動作を表すフローチャートである。
【図5】同装置を構成する最適化部のキャッシュ最適化
部の手続の配置最適化処理により主記憶装置に配置され
た手続とキャッシュ・メモリの各キャッシュ・ラインと
の関係を示す図である。
【図6】この発明の第2の実施例であるプログラム変換
装置の電気的構成を示すブロック図である。
【図7】この発明の第3の実施例であるプログラム変換
装置の電気的構成を示すブロック図である。
【図8】ダイレクト・マップ方式におけるキャッシュ・
メモリと主記憶装置との関係を説明するための図であ
る。
【図9】原始プログラムをC言語で表現した場合の一例
を示す図である。
【図10】キャッシュ・メモリ上における手続相互間の
衝突を説明するための図である。
【図11】従来のプログラム変換装置の電気的構成例を
示すブロック図である。
【図12】原始プログラムをC言語で表現した場合の他
の一例を示す図である。
【図13】図12に示す原始プログラムを構成する手続
func_10をC言語で表現した場合の一例を示す図
である。
【図14】図12に示す原始プログラムを構成する手続
func_20をC言語で表現した場合の一例を示す図
である。
【図15】従来のプログラム変換装置を構成する最適化
部の手続の配置最適化処理により主記憶装置に配置され
た手続とキャッシュ・メモリの各キャッシュ・ラインと
の関係を示す図である。
【符号の説明】
35,44 コンパイラ(第1のプログラム変換手
段、プログラム変換手段) 36 リンカ(第1のプログラム変換手段、
第2のプログラム変換手段、結合手段) 37,45 プロファイラ(プログラム実行手段) 37a,45a プログラム実行部 37b,45b メモリアクセス情報生成部 40 最適化部 40a 手続有効領域判定部(有効領域決定手
段) 40b キャッシュ最適化部(第2のプログラ
ム変換手段)

Claims (14)

    【特許請求の範囲】
  1. 【請求項1】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された第1の目的プログラムに変換するプログラム変
    換方法において、 前記原始プログラムを第2の目的プログラムに変換する
    第1の処理と、 前記第2の目的プログラムを実行しつつ、前記原始プロ
    グラムで用いられている手続、関数、あるいはサブルー
    チンに関する情報を収集すると共に、実際に取り出され
    た命令コードが属する手続、関数、あるいはサブルーチ
    ンにおける相対的な位置を示すメモリアクセス情報を生
    成する第2の処理と、 前記第2の目的プログラムを構成するすべての手続、関
    数、あるいはサブルーチンについて、前記メモリアクセ
    ス情報に対応する命令コードが連続的に存在する領域が
    1個の場合にはその領域を有効領域と決定し、前記メモ
    リアクセス情報に対応する命令コードが連続的に存在す
    る領域が複数個の場合には複数個の領域をすべて含む最
    小の領域を有効領域と決定する第3の処理と、 前記情報に基づいて、前記有効領域同士が前記計算機や
    中央処理装置を構成するキャッシュ・ライン上で衝突を
    起こさないように、前記手続、関数、あるいはサブルー
    チンを、前記第1の目的プログラムが前記計算機や中央
    処理装置で用いられる際に記憶される主記憶装置のいず
    れの記憶領域に記憶すべきかを決定し、その決定結果に
    基づいて前記第1の目的プログラムを生成する第4の処
    理とからなることを特徴とするプログラム変換方法。
  2. 【請求項2】 前記手続、関数、あるいはサブルーチン
    は、ユーザが前記原始プログラム中で定義したもの、ユ
    ーザにより定義され検査が終了したもの、前記プログラ
    ミング言語において処理系で予め用意されているもの、
    命令コードの形式で予め用意されているもののうち、少
    なくとも1個からなることを特徴とする請求項1記載の
    プログラム変換方法。
  3. 【請求項3】 前記情報は、前記第2の目的プログラム
    を実行することにより得られる、前記手続、関数、ある
    いはサブルーチンが実際に呼び出される回数を示す情報
    と、前記手続、関数、あるいはサブルーチン同士が互い
    を呼び出す関係を示す情報とからなることを特徴とする
    請求項1又は2記載のプログラム変換方法。
  4. 【請求項4】 前記第2の処理では、前記メモリアクセ
    ス情報は、前記第2の目的プログラムの流れを変更する
    処理に関する命令コードが取り出された場合にだけ生成
    することを特徴とする請求項1乃至3のいずれか1に記
    載のプログラム変換方法。
  5. 【請求項5】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された第1の目的プログラムに変換するプログラム変
    換方法において、 前記原始プログラムを第2の目的プログラムに変換する
    と共に、前記第2の目的プログラムについて、ユーザが
    前記原始プログラム中で定義した手続、関数、あるいは
    サブルーチンを、前記第1の目的プログラムが前記計算
    機や中央処理装置で用いられる際に記憶される主記憶装
    置の任意の記憶領域に記憶可能に変換して第3の目的プ
    ログラムを生成する第1の処理と、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものの少なくとも一部であって、前記主記
    憶装置の任意の記憶領域に記憶可能に変換された手続、
    関数、あるいはサブルーチンと、前記第3の目的プログ
    ラムとを結合して第4の目的プログラムを生成する第2
    の処理と、 前記第4の目的プログラムを実行しつつ、前記手続、関
    数、あるいはサブルーチンが実際に呼び出される回数を
    示す情報と、前記手続、関数、あるいはサブルーチン同
    士が互いを呼び出す関係を示す情報とからなる動的情報
    を収集すると共に、実際に取り出された命令コードが属
    する手続、関数、あるいはサブルーチンにおける相対的
    な位置を示すメモリアクセス情報を生成する第3の処理
    と、 前記第4の目的プログラムを構成するすべての手続、関
    数、あるいはサブルーチンについて、前記メモリアクセ
    ス情報に対応する命令コードが連続的に存在する領域が
    1個の場合にはその領域を有効領域と決定し、前記メモ
    リアクセス情報に対応する命令コードが連続的に存在す
    る領域が複数個の場合には複数個の領域をすべて含む最
    小の領域を有効領域と決定する第4の処理と、 前記動的情報に基づいて、前記有効領域同士が前記計算
    機や中央処理装置を構成するキャッシュ・ライン上で衝
    突を起こさないように、前記手続、関数、あるいはサブ
    ルーチンを、前記主記憶装置のいずれの記憶領域に記憶
    すべきかを決定し、配置情報を生成する第5の処理と、 前記配置情報に基づいて、前記原始プログラムで用いら
    れている手続、関数、あるいはサブルーチンのうち、ユ
    ーザにより定義され検査が終了したもの、前記プログラ
    ミング言語において処理系で予め用意されているもの、
    命令コードの形式で予め用意されているものの少なくと
    も一部であって、前記主記憶装置の任意の記憶領域に記
    憶可能に変換された手続、関数、あるいはサブルーチン
    と、前記第4の目的プログラムとを結合して、前記第1
    の目的プログラムを生成する第6の処理とからなること
    を特徴とするプログラム変換方法。
  6. 【請求項6】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された第1の目的プログラムに変換するプログラム変
    換方法において、 前記原始プログラムを第2の目的プログラムに変換する
    と共に、前記第2の目的プログラムを実行した際に前記
    手続、関数、あるいはサブルーチンが実際に呼び出され
    る回数をカウントするコードを挿入し、前記第2の目的
    プログラムについて、ユーザが前記原始プログラム中で
    定義した手続、関数、あるいはサブルーチンを、前記第
    1の目的プログラムが前記計算機や中央処理装置で用い
    られる際に記憶される主記憶装置の任意の記憶領域に記
    憶可能に変換して第3の目的プログラムを生成する第1
    の処理と、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものの少なくとも一部であって、前記主記
    憶装置の任意の記憶領域に記憶可能に変換された手続、
    関数、あるいはサブルーチンと、前記第3の目的プログ
    ラムとを結合して第4の目的プログラムを生成する第2
    の処理と、 前記第4の目的プログラムを実行しつつ、前記手続、関
    数、あるいはサブルーチンが実際に呼び出される回数を
    示す情報と、前記手続、関数、あるいはサブルーチン同
    士が互いを呼び出す関係を示す情報とからなる動的情報
    を収集すると共に、実際に取り出された命令コードが属
    する手続、関数、あるいはサブルーチンにおける相対的
    な位置を示すメモリアクセス情報を生成する第3の処理
    と、 前記第4の目的プログラムを構成するすべての手続、関
    数、あるいはサブルーチンについて、前記メモリアクセ
    ス情報に対応する命令コードが連続的に存在する領域が
    1個の場合にはその領域を有効領域と決定し、前記メモ
    リアクセス情報に対応する命令コードが連続的に存在す
    る領域が複数個の場合には複数個の領域をすべて含む最
    小の領域を有効領域と決定する第4の処理と、 前記動的情報に基づいて、前記有効領域同士が前記計算
    機や中央処理装置を構成するキャッシュ・ライン上で衝
    突を起こさないように、前記手続、関数、あるいはサブ
    ルーチンを、前記主記憶装置のいずれの記憶領域に記憶
    すべきかを決定し、配置情報を生成する第5の処理と、 前記配置情報に基づいて、前記原始プログラムで用いら
    れている手続、関数、あるいはサブルーチンのうち、ユ
    ーザにより定義され検査が終了したもの、前記プログラ
    ミング言語において処理系で予め用意されているもの、
    命令コードの形式で予め用意されているものの少なくと
    も一部であって、前記主記憶装置の任意の記憶領域に記
    憶可能に変換された手続、関数、あるいはサブルーチン
    と、前記第4の目的プログラムとを結合して、前記第1
    の目的プログラムを生成する第6の処理とからなること
    を特徴とするプログラム変換方法。
  7. 【請求項7】 前記第3の処理では、前記メモリアクセ
    ス情報は、前記第2の目的プログラムの流れを変更する
    処理に関する命令コードが取り出された場合にだけ生成
    することを特徴とする請求項5又は6記載のプログラム
    変換方法。
  8. 【請求項8】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された第1の目的プログラムに変換するプログラム変
    換装置において、 前記原始プログラムを第2の目的プログラムに変換する
    第1のプログラム変換手段と、 前記第2の目的プログラムを実行しつつ、前記原始プロ
    グラムで用いられている手続、関数、あるいはサブルー
    チンに関する情報を収集すると共に、実際に取り出され
    た命令コードが属する手続、関数、あるいはサブルーチ
    ンにおける相対的な位置を示すメモリアクセス情報を生
    成するプログラム実行手段と、 前記第2の目的プログラムを構成するすべての手続、関
    数、あるいはサブルーチンについて、前記メモリアクセ
    ス情報に対応する命令コードが連続的に存在する領域が
    1個の場合にはその領域を有効領域と決定し、前記メモ
    リアクセス情報に対応する命令コードが連続的に存在す
    る領域が複数個の場合には複数個の領域をすべて含む最
    小の領域を有効領域と決定する有効領域決定手段と、 前記情報に基づいて、前記有効領域同士が前記計算機や
    中央処理装置を構成するキャッシュ・ライン上で衝突を
    起こさないように、前記手続、関数、あるいはサブルー
    チンを、前記第1の目的プログラムが前記計算機や中央
    処理装置で用いられる際に記憶される主記憶装置のいず
    れの記憶領域に記憶すべきかを決定し、その決定結果に
    基づいて前記第1の目的プログラムを生成する第2のプ
    ログラム変換手段とを備えてなることを特徴とするプロ
    グラム変換装置。
  9. 【請求項9】 前記手続、関数、あるいはサブルーチン
    は、ユーザが前記原始プログラム中で定義したもの、ユ
    ーザにより定義され検査が終了したもの、前記プログラ
    ミング言語において処理系で予め用意されているもの、
    命令コードの形式で予め用意されているもののうち、少
    なくとも1個からなることを特徴とする請求項8記載の
    プログラム変換装置。
  10. 【請求項10】 前記情報は、前記第2の目的プログラ
    ムを実行することにより得られる、前記手続、関数、あ
    るいはサブルーチンが実際に呼び出される回数を示す情
    報と、前記手続、関数、あるいはサブルーチン同士が互
    いを呼び出す関係を示す情報とからなることを特徴とす
    る請求項8又は9記載のプログラム変換装置。
  11. 【請求項11】 プログラミング言語で記述された原始
    プログラムを計算機や中央処理装置が実行可能な言語で
    記述された第1の目的プログラムに変換するプログラム
    変換装置において、 前記原始プログラムを第2の目的プログラムに変換する
    と共に、前記第2の目的プログラムについて、ユーザが
    前記原始プログラム中で定義した手続、関数、あるいは
    サブルーチンを、前記第1の目的プログラムが前記計算
    機や中央処理装置で用いられる際に記憶される主記憶装
    置の任意の記憶領域に記憶可能に変換して第3の目的プ
    ログラムを生成するプログラム変換手段と、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものの少なくとも一部であって、前記主記
    憶装置の任意の記憶領域に記憶可能に変換された手続、
    関数、あるいはサブルーチンと、前記第3の目的プログ
    ラムとを結合して第4の目的プログラムを生成する結合
    手段と、 前記第4の目的プログラムを実行しつつ、前記手続、関
    数、あるいはサブルーチンが実際に呼び出される回数を
    示す情報と、前記手続、関数、あるいはサブルーチン同
    士が互いを呼び出す関係を示す情報とからなる動的情報
    を収集すると共に、実際に取り出された命令コードが属
    する手続、関数、あるいはサブルーチンにおける相対的
    な位置を示すメモリアクセス情報を生成するプログラム
    実行手段と、 前記第4の目的プログラムを構成するすべての手続、関
    数、あるいはサブルーチンについて、前記メモリアクセ
    ス情報に対応する命令コードが連続的に存在する領域が
    1個の場合にはその領域を有効領域と決定し、前記メモ
    リアクセス情報に対応する命令コードが連続的に存在す
    る領域が複数個の場合には複数個の領域をすべて含む最
    小の領域を有効領域と決定する有効領域決定手段と、 前記動的情報に基づいて、前記有効領域同士が前記計算
    機や中央処理装置を構成するキャッシュ・ライン上で衝
    突を起こさないように、前記手続、関数、あるいはサブ
    ルーチンを、前記主記憶装置のいずれの記憶領域に記憶
    すべきかを決定し、配置情報を生成する最適化手段とを
    備え、 前記結合手段は、前記配置情報に基づいて、前記原始プ
    ログラムで用いられている手続、関数、あるいはサブル
    ーチンのうち、ユーザにより定義され検査が終了したも
    の、前記プログラミング言語において処理系で予め用意
    されているもの、命令コードの形式で予め用意されてい
    るものの少なくとも一部であって、前記主記憶装置の任
    意の記憶領域に記憶可能に変換された手続、関数、ある
    いはサブルーチンと、前記第4の目的プログラムとを結
    合して、前記第1の目的プログラムを生成することを特
    徴とするプログラム変換装置。
  12. 【請求項12】 プログラミング言語で記述された原始
    プログラムを計算機や中央処理装置が実行可能な言語で
    記述された第1の目的プログラムに変換するプログラム
    変換装置において、 前記原始プログラムを第2の目的プログラムに変換する
    と共に、前記第2の目的プログラムを実行した際に前記
    手続、関数、あるいはサブルーチンが実際に呼び出され
    る回数をカウントするコードを挿入し、前記第2の目的
    プログラムについて、ユーザが前記原始プログラム中で
    定義した手続、関数、あるいはサブルーチンを、前記第
    1の目的プログラムが前記計算機や中央処理装置で用い
    られる際に記憶される主記憶装置の任意の記憶領域に記
    憶可能に変換して第3の目的プログラムを生成するプロ
    グラム変換手段と、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものの少なくとも一部であって、前記主記
    憶装置の任意の記憶領域に記憶可能に変換された手続、
    関数、あるいはサブルーチンと、前記第3の目的プログ
    ラムとを結合して第4の目的プログラムを生成する結合
    手段と、 前記第4の目的プログラムを実行しつつ、前記手続、関
    数、あるいはサブルーチンが実際に呼び出される回数を
    示す情報と、前記手続、関数、あるいはサブルーチン同
    士が互いを呼び出す関係を示す情報とからなる動的情報
    を収集すると共に、実際に取り出された命令コードが属
    する手続、関数、あるいはサブルーチンにおける相対的
    な位置を示すメモリアクセス情報を生成するプログラム
    実行手段と、 前記第4の目的プログラムを構成するすべての手続、関
    数、あるいはサブルーチンについて、前記メモリアクセ
    ス情報に対応する命令コードが連続的に存在する領域が
    1個の場合にはその領域を有効領域と決定し、前記メモ
    リアクセス情報に対応する命令コードが連続的に存在す
    る領域が複数個の場合には複数個の領域をすべて含む最
    小の領域を有効領域と決定する有効領域決定手段と、 前記動的情報に基づいて、前記有効領域同士が前記計算
    機や中央処理装置を構成するキャッシュ・ライン上で衝
    突を起こさないように、前記手続、関数、あるいはサブ
    ルーチンを、前記主記憶装置のいずれの記憶領域に記憶
    すべきかを決定し、配置情報を生成する最適化手段とを
    備え、 前記結合手段は、前記配置情報に基づいて、前記原始プ
    ログラムで用いられている手続、関数、あるいはサブル
    ーチンのうち、ユーザにより定義され検査が終了したも
    の、前記プログラミング言語において処理系で予め用意
    されているもの、命令コードの形式で予め用意されてい
    るものの少なくとも一部であって、前記主記憶装置の任
    意の記憶領域に記憶可能に変換された手続、関数、ある
    いはサブルーチンと、前記第4の目的プログラムとを結
    合して、前記第1の目的プログラムを生成することを特
    徴とするプログラム変換装置。
  13. 【請求項13】 前記プログラム実行手段は、前記第2
    の目的プログラムの流れを変更する処理に関する命令コ
    ードが取り出された場合にだけ前記メモリアクセス情報
    を生成することを特徴とする請求項8乃至12のいずれ
    か1に記載のプログラム変換方法。
  14. 【請求項14】 コンピュータに請求項1乃至13のい
    ずれか1つに記載の機能を実現させるためのプログラム
    変換プログラムを記憶した記憶媒体。
JP34810499A 1999-12-07 1999-12-07 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 Pending JP2001166948A (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP34810499A JP2001166948A (ja) 1999-12-07 1999-12-07 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US09/729,773 US20010039653A1 (en) 1999-12-07 2000-12-06 Program conversion method, program conversion apparatus, storage medium for storing program conversion program and program conversion program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP34810499A JP2001166948A (ja) 1999-12-07 1999-12-07 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体

Publications (1)

Publication Number Publication Date
JP2001166948A true JP2001166948A (ja) 2001-06-22

Family

ID=18394772

Family Applications (1)

Application Number Title Priority Date Filing Date
JP34810499A Pending JP2001166948A (ja) 1999-12-07 1999-12-07 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体

Country Status (2)

Country Link
US (1) US20010039653A1 (ja)
JP (1) JP2001166948A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005202614A (ja) * 2004-01-15 2005-07-28 Hitachi Ltd 動的変換方式のエミュレータ向けメモリ管理方法
JP2005266941A (ja) * 2004-03-16 2005-09-29 Fujitsu Ltd キャッシュカラーリング方法
JP2010218218A (ja) * 2009-03-17 2010-09-30 Nec Corp プログラムのメモリ空間への配置方法、装置、およびプログラム
JP2015007995A (ja) * 2005-02-24 2015-01-15 クゥアルコム・インコーポレイテッドQualcomm Incorporated ループ終結分岐により分岐履歴レジスタの更新を抑制すること

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7860894B2 (en) * 2004-05-12 2010-12-28 Oracle International Corporation Template driven type and mode conversion
JP2006260096A (ja) * 2005-03-16 2006-09-28 Matsushita Electric Ind Co Ltd プログラム変換方法およびプログラム変換装置
JP2010026851A (ja) * 2008-07-22 2010-02-04 Panasonic Corp コンパイラによる最適化方法
KR101670916B1 (ko) * 2009-03-03 2016-10-31 삼성전자 주식회사 실행 파일 생성 방법 및 그 방법을 이용하는 시스템 장치
US10645186B2 (en) * 2018-04-23 2020-05-05 Level 3 Communications, Llc Speculative caching in a content delivery network
US10698791B2 (en) * 2018-07-28 2020-06-30 International Business Machines Corporation Handling request data with type safety in a remote service

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0416767A3 (en) * 1989-09-08 1992-04-29 Digital Equipment Corporation Position independent code location system
JPH10124327A (ja) * 1996-10-16 1998-05-15 Nec Corp インストラクションキャッシュミス率削減方法
JP3178403B2 (ja) * 1998-02-16 2001-06-18 日本電気株式会社 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6351845B1 (en) * 1999-02-04 2002-02-26 Sun Microsystems, Inc. Methods, apparatus, and articles of manufacture for analyzing memory use

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005202614A (ja) * 2004-01-15 2005-07-28 Hitachi Ltd 動的変換方式のエミュレータ向けメモリ管理方法
JP4701611B2 (ja) * 2004-01-15 2011-06-15 株式会社日立製作所 動的変換方式のエミュレータ向けメモリ管理方法
JP2005266941A (ja) * 2004-03-16 2005-09-29 Fujitsu Ltd キャッシュカラーリング方法
JP4554241B2 (ja) * 2004-03-16 2010-09-29 富士通セミコンダクター株式会社 キャッシュカラーリング方法
JP2015007995A (ja) * 2005-02-24 2015-01-15 クゥアルコム・インコーポレイテッドQualcomm Incorporated ループ終結分岐により分岐履歴レジスタの更新を抑制すること
JP2010218218A (ja) * 2009-03-17 2010-09-30 Nec Corp プログラムのメモリ空間への配置方法、装置、およびプログラム
JP4600700B2 (ja) * 2009-03-17 2010-12-15 日本電気株式会社 プログラムのメモリ空間への配置方法、装置、およびプログラム

Also Published As

Publication number Publication date
US20010039653A1 (en) 2001-11-08

Similar Documents

Publication Publication Date Title
JP3284956B2 (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP3178403B2 (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US7725883B1 (en) Program interpreter
US20090113404A1 (en) Optimum code generation method and compiler device for multiprocessor
JPH09330233A (ja) 最適目的コード生成方法
JP2010079894A (ja) トレース操作の修正によるトレースのオーバーヘッドの削減
US8056061B2 (en) Data processing device and method using predesignated register
AU2891900A (en) Method and apparatus for handling exceptions as normal control flow
CN109933327B (zh) 基于代码融合编译框架的OpenCL编译器设计方法和系统
US20040015918A1 (en) Program optimization method and compiler using the program optimization method
JP2001166948A (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JPH01118931A (ja) プログラム変換方式
US8694975B2 (en) Programming system in multi-core environment, and method and program of the same
Cooper et al. Cross-loop reuse analysis and its application to cache optimizations
JPH10320212A (ja) キャッシュ向け最適化方法
JP3276479B2 (ja) コンパイル方式
JPH02176938A (ja) 機械語命令最適化方式
JP5016288B2 (ja) 最適化処理方法、及びその言語処理系
JP4788902B2 (ja) コンパイル最適化方法およびコンパイラ
US7478372B2 (en) Method for operating a computer system
JP2007114934A (ja) コンパイラシステム
JP3758991B2 (ja) 目的プログラムの実行ステップ数調整方法とその調整装置およびプログラムを記憶した記録媒体
JP2003202995A (ja) 中間コード前処理装置、中間コード実行システム、中間コード前処理プログラムおよび中間コード実行プログラム
JP3018783B2 (ja) コンパイル方式

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20040615

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20040816

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20041026

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20050308