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

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

Info

Publication number
JPH11232117A
JPH11232117A JP10032852A JP3285298A JPH11232117A JP H11232117 A JPH11232117 A JP H11232117A JP 10032852 A JP10032852 A JP 10032852A JP 3285298 A JP3285298 A JP 3285298A JP H11232117 A JPH11232117 A JP H11232117A
Authority
JP
Japan
Prior art keywords
program
procedure
target program
subroutine
function
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
Application number
JP10032852A
Other languages
English (en)
Other versions
JP3178403B2 (ja
Inventor
Hiroko Isozaki
博子 磯崎
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 JP03285298A priority Critical patent/JP3178403B2/ja
Priority to US09/249,705 priority patent/US6282707B1/en
Priority to EP99103011A priority patent/EP0936543A3/en
Priority to KR1019990005389A priority patent/KR19990072721A/ko
Priority to CN99100822A priority patent/CN1228558A/zh
Publication of JPH11232117A publication Critical patent/JPH11232117A/ja
Application granted granted Critical
Publication of JP3178403B2 publication Critical patent/JP3178403B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related 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/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 様々な手続相互間におけるキャッシュ・メモ
リ上での衝突及び頻繁に用いる手続のキャッシュ・ミス
を防止する。 【解決手段】 開示されるプログラム変換方法は、ユー
ザ・ライブラリ手続、標準ライブラリ手続、ランタイム
・ライブラリ手続を含むライブラリを、手続毎に配置可
能な再配置可能ライブラリに変換すると共に、原始プロ
グラムをユーザ手続について手続毎に配置可能な一時的
な再配置可能目的プログラムにコンパイルし、再配置可
能ライブラリと一時的な再配置可能目的プログラムとを
結合して実行することにより得られるこれらの手続に関
する動的情報に基づいて、これらの手続を主記憶装置の
いずれの記憶領域に記憶すべきかを決定し、その決定結
果に基づいて目的プログラムを生成する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、プログラム変換
方法、プログラム変換装置及びプログラム変換プログラ
ムを記憶した記憶媒体に関し、詳しくは、プログラミン
グ言語で記述された原始プログラムを計算機やCPU
(中央処理装置)が実行可能な言語(機械語、アセンブ
リ言語など)で記述された目的プログラムに変換(コン
パイル)するプログラム変換方法、プログラム変換装置
及びプログラム変換プログラムを記憶した記憶媒体に関
する。
【0002】
【従来の技術】図15は、特開平1-118931号公
報に開示されている従来のプログラム変換装置の第1の
電気的構成例を示すブロック図である。この例のプログ
ラム変換装置は、第1プログラム記憶部1と、コンパイ
ラ2と、第2プログラム記憶部3と、第3プログラム記
憶部4と、入力データ記憶部5と、プログラム実行部6
と、第4プログラム記憶部7と、解析結果記憶部8とか
ら概略構成されている。まず、コンパイラ2は、第1プ
ログラム記憶部1から、例えば、C言語(商標名)等の
プログラミング言語で記述された原始プログラムを読み
込み、機械語やアセンブリ言語などで記述された一時的
な目的プログラムを作成し、第2プログラム記憶部3に
記憶する。
【0003】ここで、一時的な目的プログラムとは、原
始プログラムをその記述された順に機械語やアセンブリ
言語などからなるコードに変換したものをいう。この一
時的な目的プログラムは、計算機やCPU(中央処理装
置)で実行可能であるが、単に原始プログラムをその記
述された順にコードに変換しているだけであるので、冗
長な部分があり、そのままでは目的プログラム全体のサ
イズ(コードサイズ)が大きく、目的プログラムを記憶
すべき主記憶装置に大容量のものが必要であると共に、
目的プログラムの実行時間が長く、効率的ではない。そ
こで、効率的で最適な目的プログラムを作成する必要が
あるが、ここの処理で単に原始プログラムをその記述さ
れた順にコードに変換した目的プログラムを、最適化さ
れた最終的な目的プログラムに対して、「一時的な目的
プログラム」と呼ぶのである。
【0004】目的プログラムの最適化には様々な手法が
あるが、ここでは、手続の命令コードの配置最適化を行
う。なお、手続とは、計算機やCPUが行うあるひとま
とまりの処理(例えば、四則演算)を意味し、関数、あ
るいはサブルーチンとも呼ばれるが、以下ではそれらを
総称して手続と呼ぶことにする。プログラムでは、ある
箇所である手続(以下、呼出側手続という)を実行する
際に他の手続(以下、被呼出側手続という)を呼び出す
ことがある。そこで、原始プログラムを目的プログラム
に変換し主記憶装置に記憶した場合、呼出側手続の命令
コードと密接な関係を有する被呼出側手続の命令コード
とが物理的に近くに配置されていれば、手続呼出命令を
ロングジャンプのものからショートジャンプのものに変
更することが可能となる。これにより、目的プログラム
全体のコードサイズを削減できると共に、計算機やCP
Uが目的プログラムを実行した際の実行速度を速くする
ことができる。このように、時間的に連続して実行され
る可能性の高い手続の命令コード同士を、目的プログラ
ム上で物理的に近く配置することを手続の命令コードの
配置最適化というのである。
【0005】次に、プログラム実行部6は、第4プログ
ラム記憶部7から、手続呼出頻度解析プログラムを読み
込み、それを実行する。即ち、プログラム実行部6は、
第2プログラム記憶部3から一時的な目的プログラムを
読み込むと共に、操作者が入力し入力データ記憶部5に
記憶した入力データを入力データ記憶部5から読み込
み、一時的な目的プログラムの実行をシミュレートしつ
つ、一時的な目的プログラムの中のある手続において他
の手続が呼び出された回数を各手続毎に積算し、その結
果を手続参照頻度解析結果として解析結果記憶部8に記
憶する。これにより、コンパイラ2は、解析結果記憶部
8から手続参照頻度解析結果を読み込み、任意の2つの
手続間の参照関係の密接さを計算し、その結果に基づい
て手続の命令コードの配置最適化を行って最終的な目的
プログラムを作成し、第3プログラム記憶部4に記憶す
る。
【0006】また、図16は、特開平9−34725号
公報に開示されている従来のプログラム変換装置の第2
の電気的構成例を示すブロック図である。この例のプロ
グラム変換装置は、原始プログラム記憶部11と、コン
パイラ12と、目的プログラム記憶部13とから概略構
成されている。コンパイラ12は、構文解析部14と、
手続呼出計数部15と、コード生成部16と、手続呼出
回数データ格納部17と、特定空間配置手続決定部18
と、目的プログラム出力部19とから概略構成されてい
る。ここで、特定空間とは、プログラム空間の一部に設
定された有限なコードサイズの特定領域である。構文解
析部14は、原始プログラム記憶部11から解析すべき
原始プログラムを読み込み、原始プログラムを構成する
構文を解析する。手続呼出計数部15は、構文解析部1
4が構文を解析した際に認識した各手続の呼出回数を各
手続毎に計数する。コード生成部16は、2回のコード
生成を行う。即ち、1回目のコード生成では、コード生
成部16は、構文解析部14の構文解析結果に基づい
て、当該構文が、手続呼出命令でなければ通常のコード
を生成し、手続呼出命令であれば通常の呼出命令を用い
た命令コードを生成する。また、コード生成部16は、
2回目のコード生成では、1回目のコード生成結果を先
頭から走査し、当該コードが、手続呼出命令であり、特
定空間配置手続決定部18に問い合わせた結果、特定空
間に配置することが決定された特定空間配置手続である
ならば、バイト数が長い通常の呼出命令コードからバイ
ト数の短い専用の呼出命令コードに置換する。
【0007】手続呼出回数データ格納部17は、手続毎
に、手続呼出計数部15で計数された呼出回数と、コー
ド生成部16における1回目のコード生成で生成された
コードサイズとを格納する。特定空間配置手続決定部1
8は、手続呼出回数データ格納部17に格納された手続
毎の呼出回数とコードサイズとに基づいて、特定空間に
配置すべき手続を、呼出回数の多い手続を優先しなが
ら、特定空間に配置すべき手続のコードサイズの総和が
特定空間のコードサイズに収まるように選択し、決定す
る。目的プログラム出力部19は、コード生成部16で
生成されたコードが、特定空間配置手続決定部18に問
い合わせた結果、特定空間配置手続の定義部のコードで
あるならば、当該コードを特定空間への配置属性を付加
したセグメントに出力し、特定空間配置手続の定義部の
コードでないならば、当該コードを通常のセグメントに
出力する。ここで、セグメントとは、コードをプログラ
ム空間に配置する際に、配置の最小単位であるコードの
集まりを意味する。以上のように、目的プログラム出力
部19は、特定空間配置手続と通常の手続とを分離して
出力する。次に、目的プログラム出力部19は、変数領
域等のデータを出力し、コード部とデータ部とを合わせ
て目的プログラムとして出力し、目的プログラム記憶部
13に記憶する。以上の構成によれば、生成する目的プ
ログラムのコードサイズを削減でき、これに伴い、プロ
グラム空間を節約できると共に、計算機やCPUが目的
プログラムを実行した際の実行速度を速くすることがで
きる。
【0008】
【発明が解決しようとする課題】上記特開平1-118
931号公報に開示された従来のプログラム変換装置に
おいて、手続の命令コードの配置最適化は、ユーザが原
始プログラム中で定義した手続だけが対象であるので、
目的プログラムの効率化にも限界がある。一方、上記特
開平9−34725号公報に開示された従来のプログラ
ム変換装置においては、特定空間が有限なコードサイズ
であるので、特定空間に配置される手続が限られてお
り、この場合も、目的プログラムの効率化に限界があ
る。
【0009】ところで、プログラム変換装置で作成され
た目的プログラムを、CPUやデコーダ等からなる1チ
ップ・マイクロ・コンピュータで実行する場合、目的プ
ログラムはその外部の主記憶装置に記憶されており、主
記憶装置から目的プログラムの各コードが順次読み出さ
れ、デコーダでデコードされた後、CPUがそれを解釈
して実行する。この場合、CPUの実行速度を速くする
ために、通常、記憶容量は大きいがアクセス・タイムの
長い主記憶装置から読み出されたコードを一時的に記憶
する、記憶容量は小さいがアクセス・タイムの短いキャ
ッシュ・メモリが1チップ・マイクロ・コンピュータ内
に設けられている。
【0010】このキャッシュ・メモリが設けられた1チ
ップ・マイクロ・コンピュータの中には、CPUがコー
ドを実行する場合、主記憶装置から読み出された目的プ
ログラムの各コードが一旦キャッシュ・メモリに記憶さ
れた後でなければ、それをデコーダでデコードし、CP
Uで解釈して実行することができないものがある。この
種の1チップ・マイクロ・コンピュータにおいて、主記
憶装置から読み出した各コードをキャッシュ・メモリに
記憶する方法には、各種あるが、その1つとしてダイレ
クト・マップ方式がある。ダイレクト・マップ方式で
は、図17に示すように、キャッシュ・メモリ21が複
数の記憶領域(これをキャッシュ・ラインという)に分
割されていると共に、主記憶装置22の各記憶領域も分
割されており、主記憶装置22の各記憶領域がキャッシ
ュ・メモリ21の各キャッシュ・ラインに対応づけられ
ている。図17では、キャッシュ・メモリ21は5個の
キャッシュ・ライン21a〜21eからなり、それに対応
して主記憶装置22も1個のキャッシュ・ラインと同一
の記憶容量を有する記憶領域毎に分割され、各記憶領域
は5個を単位としてそれぞれ5個のキャッシュ・ライン
21a〜21eに対応づけられている。即ち、主記憶装置
22の記憶領域221a〜221eはひとまとまりでキャッ
シュ・ライン21a〜21eに対応づけられ、同様に、記
憶領域222a〜222eはキャッシュ・ライン21a〜2
1eに対応づけられ、最後の領域22na〜22ne(nは
自然数)はキャッシュ・ライン21a〜21eに対応づけ
られている。
【0011】このようなダイレクト・マップ方式が採用
されている1チップ・マイクロ・コンピュータで実行さ
れるべき目的プログラムをプログラム変換装置を用いて
作成する場合、以下に示す不都合がある。例えば、図1
8に示すC言語で記述された原始プログラムをプログラ
ム変換装置で目的プログラムに変換した結果、図19に
示すように、手続func_A及び手続func_Bの
それぞれの命令コードが主記憶装置22に記憶されると
する。図19では、手続func_Aの命令コードは主
記憶装置22の記憶領域221a〜221cに記憶され、手
続func_Bの命令コードは主記憶装置22の記憶領
域222a及び221bに記憶されている。したがって、手
続func_Aの命令コードはキャッシュ・メモリ21
のキャッシュ・ライン21a〜21cに対応づけられ、手
続func_Bの命令コードはキャッシュ・メモリ21
のキャッシュ・ライン21a及び21bに対応づけられて
いる。
【0012】このような場合、CPUが図18に示す原
始プログラムを変換した目的プログラムを実行すると、
まず、手続func_Aの命令コードが主記憶装置22
の記憶領域221a〜221cから読み出され、一旦キャッ
シュ・メモリ21のキャッシュ・ライン21a〜21cに
記憶された後、デコーダでデコードされ、CPUが解釈
して実行する。次に、手続func_Bの命令コードが
主記憶装置22の記憶領域222a及び221bから読み出
され、キャッシュ・メモリ21のキャッシュ・ライン2
1a及び21bに一旦記憶される。今、キャッシュ・メモ
リ21のキャッシュ・ライン21a及び21bには既に手
続func_Aの命令コードの一部が記憶されている
が、手続func_Bの命令コードが記憶される(上書
き)ことにより、その手続func_Aの命令コードの
一部は以後読み出すことができなくなる。この後、キャ
ッシュ・メモリ21のキャッシュ・ライン21a及び2
1bに記憶されている手続func_Bの命令コードが
デコーダでデコードされ、CPUが解釈して実行する。
次に、図18に示す原始プログラムによれば、手続fu
nc_Aの命令コードを再び実行しなければならない
が、キャッシュ・メモリ21のキャッシュ・ライン21
a及び21bには既に手続func_Bの命令コードが記
憶されており、手続func_Aの命令コードの一部は
読み出すことができないので、再び手続func_Aの
命令コードが主記憶装置22の記憶領域221a〜221b
から読み出され、一旦キャッシュ・メモリ21のキャッ
シュ・ライン21a〜21bに記憶された後、デコーダで
デコードされ、CPUが解釈して実行する。
【0013】以上説明したように、時間的に連続して実
行される可能性の高い2つの手続の命令コードがキャッ
シュ・メモリ21の同一のキャッシュ・ラインに対応し
た主記憶装置22の記憶領域に記憶されている場合(こ
れを同一のキャッシュ・ラインに載るという)には、先
に主記憶装置22から読み出されキャッシュ・メモリ2
1に記憶された手続の命令コードの全部又は一部は、後
から主記憶装置22から読み出された手続の命令コード
がキャッシュ・メモリ21の同一のキャッシュ・ライン
に上書きされることにより、読み出すことができなくな
ってしまう。このような状態を衝突(キャッシュ・コン
フリクト;cache conflict)という。この衝突が頻繁に
起こってしまうと、CPUの実行速度を速くするために
キャッシュ・メモリを設けた効果が半減するどころか、
場合によっては逆にCPUの実行速度が遅くなってしま
う。
【0014】なお、主記憶装置から読み出した各コード
をキャッシュ・メモリに記憶する方法には、ダイレクト
・マップ方式以外にも、主記憶装置のデータをキャッシ
ュ・メモリ上のどのキャッシュ・ラインに記憶しても良
いフル・アソシアティブ方式や、ダイレクト・マップ方
式とフル・アソシアティブ方式の中間の方式であって、
主記憶装置のデータを配置可能なキャッシュ・メモリ上
のキャッシュ・ラインが複数存在するセット・アソシア
ティブ方式など各種ある。いずれの方式の場合も、主記
憶装置よりもキャッシュ・メモリの記憶容量が少ないの
で、以上説明したキャッシュ・メモリ上での手続の衝突
が発生する可能性はある。
【0015】ところが、上記特開平1-118931号
公報及び特開平9−34725号公報に開示された従来
のプログラム変換装置においては、以上の衝突に関して
何等考慮されていないので、手続の命令コードの配置最
適化や手続の特定空間への配置を行った結果、時間的に
連続して実行される可能性の高い2つの手続の命令コー
ドがキャッシュ・メモリ21の同一のキャッシュ・ライ
ンに載る場合には、上記衝突は避けられない。したがっ
て、目的プログラム全体のコードサイズは削減できたと
しても、CPUの実行速度を速くすることはできない。
【0016】また、目的プログラム実行中に頻繁に用い
る手続は、キャッシュ・メモリ21に当該命令コードが
そもそも記憶されていなかったり、上記衝突のために当
該命令コードを読み出せない(これらを合わせてキャッ
シュ・ミスという)ために、用いる度に主記憶装置22
から当該命令コードを読み出してキャッシュ・メモリ2
1の対応するキャッシュ・ラインに記憶するのでは、C
PUの実行速度を速くできない。そこで、頻繁に用いる
手続をキャッシュ・メモリ21にできるだけ長く、しか
も他の手続と衝突することなく記憶しておく必要があ
る。ところが、上記特開平1-118931号公報及び
特開平9−34725号公報に開示された従来のプログ
ラム変換装置においては、上記のような目的プログラム
実行時におけるキャッシュ・ミスについては何等考慮し
ていない。したがって、この点についても、CPUの実
行速度を速くすることはできない。
【0017】この発明は、上述の事情に鑑みてなされた
もので、様々な手続相互間におけるキャッシュ・メモリ
上での衝突を防止できると共に、頻繁に用いる手続のキ
ャッシュ・ミスを防止でき、これにより、計算機やCP
Uが目的プログラムを実行した際の実行速度を速くする
ことができるプログラム変換方法、プログラム変換装置
及びプログラム変換プログラムを記憶した記憶媒体を提
供することを目的としている。
【0018】
【課題を解決するための手段】上記課題を解決するため
に、請求項1記載の発明は、プログラミング言語で記述
された原始プログラムを計算機や中央処理装置が実行可
能な言語で記述された目的プログラムに変換するプログ
ラム変換方法に係り、上記原始プログラムで用いられて
いる手続、関数、あるいはサブルーチンの少なくとも一
部を、上記目的プログラムが上記計算機や中央処理装置
で用いられる際に記憶される主記憶装置の任意の記憶領
域に記憶可能に変換する第1の処理と、上記原始プログ
ラムを上記目的プログラムに変換する過程で得られる上
記手続、関数、あるいはサブルーチンに関する情報に基
づいて、上記第1の処理で変換され又は変換されなかっ
た手続、関数、あるいはサブルーチンを、上記主記憶装
置のいずれの記憶領域に記憶すべきかを決定し、その決
定結果に基づいて上記目的プログラムを生成する第2の
処理とからなることを特徴としている。
【0019】請求項2記載の発明は、請求項1記載のプ
ログラム変換方法に係り、上記手続、関数、あるいはサ
ブルーチンは、ユーザが上記原始プログラム中で定義し
たもの、ユーザにより定義され検査が終了したもの、上
記プログラミング言語において処理系で予め用意されて
いるもの、命令コードの形式で予め用意されているもの
のうち、少なくとも1つからなることを特徴としてい
る。
【0020】請求項3記載の発明は、請求項1又は2記
載のプログラム変換方法に係り、上記情報は、上記原始
プログラムから変換された一時的な目的プログラムを実
行することにより得られる、上記手続、関数、あるいは
サブルーチンが実際に呼び出される回数を示す情報と、
上記手続、関数、あるいはサブルーチン同士が互いを呼
び出す関係を示す情報とからなることを特徴としてい
る。
【0021】請求項4記載の発明は、プログラミング言
語で記述された原始プログラムを計算機や中央処理装置
が実行可能な言語で記述された目的プログラムに変換す
るプログラム変換方法に係り、上記原始プログラムで用
いられている手続、関数、あるいはサブルーチンのう
ち、ユーザにより定義され検査が終了したもの、上記プ
ログラミング言語において処理系で予め用意されている
もの、命令コードの形式で予め用意されているものの少
なくとも一部を、上記目的プログラムが上記計算機や中
央処理装置で用いられる際に記憶される主記憶装置の任
意の記憶領域に記憶可能に変換する第1の処理と、上記
原始プログラムを目的プログラムに変換すると共に、上
記目的プログラムについて、ユーザが上記原始プログラ
ム中で定義した手続、関数、あるいはサブルーチンを上
記主記憶装置の任意の記憶領域に記憶可能に変換する第
2の処理と、上記第1の処理で変換された手続、関数、
あるいはサブルーチンと、上記第2の処理で得られた目
的プログラムとを結合する第3の処理と、上記第3の処
理で得られた目的プログラムを実行しつつ、上記手続、
関数、あるいはサブルーチンが実際に呼び出される回数
を示す情報と、上記手続、関数、あるいはサブルーチン
同士が互いを呼び出す関係を示す情報とからなる動的情
報を収集する第4の処理と、上記動的情報に基づいて、
上記手続、関数、あるいはサブルーチンを、上記主記憶
装置のいずれの記憶領域に記憶すべきかを決定し、配置
情報を生成する第5の処理と、上記配置情報に基づい
て、上記第1の処理で変換された手続、関数、あるいは
サブルーチンと、上記第2の処理で得られた目的プログ
ラムとを結合して、最終的な目的プログラムを生成する
第6の処理とからなることを特徴としている。
【0022】請求項5請求項1記載の発明は、プログラ
ミング言語で記述された原始プログラムを計算機や中央
処理装置が実行可能な言語で記述された目的プログラム
に変換するプログラム変換方法に係り、上記原始プログ
ラムを一時的な目的プログラムに変換すると共に、上記
一時的な目的プログラムを実行した際に上記手続、関
数、あるいはサブルーチンが実際に呼び出される回数を
カウントするコードを挿入する第1の処理と、上記原始
プログラムで用いられている手続、関数、あるいはサブ
ルーチンのうち、ユーザにより定義され検査が終了した
もの、上記プログラミング言語において処理系で予め用
意されているもの、命令コードの形式で予め用意されて
いるものと、上記第1の処理で得られた一時的な目的プ
ログラムとを結合する第2の処理と、上記第2の処理で
得られた一時的な目的プログラムを実行しつつ、上記手
続、関数、あるいはサブルーチンが実際に呼び出される
回数を示す情報と、上記手続、関数、あるいはサブルー
チン同士が互いを呼び出す関係を示す情報とからなる動
的情報を収集する第3の処理と、上記動的情報に基づい
て、上記手続、関数、あるいはサブルーチンを、上記主
記憶装置のいずれの記憶領域に記憶すべきかを決定し、
配置情報を生成する第4の処理と、上記原始プログラム
で用いられている手続、関数、あるいはサブルーチンの
うち、ユーザにより定義され検査が終了したもの、上記
プログラミング言語において処理系で予め用意されてい
るもの、命令コードの形式で予め用意されているものの
少なくとも一部を、上記目的プログラムが上記計算機や
中央処理装置で用いられる際に記憶される主記憶装置の
任意の記憶領域に記憶可能に変換する第5の処理と、上
記原始プログラムを目的プログラムに変換した後、上記
目的プログラムについて、ユーザが上記原始プログラム
中で定義した手続、関数、あるいはサブルーチンを上記
主記憶装置の任意の記憶領域に記憶可能に変換する第6
の処理と、上記配置情報に基づいて、上記第5の処理で
変換された手続、関数、あるいはサブルーチンと、上記
第6の処理で得られた目的プログラムとを結合して、最
終的な目的プログラムを生成する第7の処理とからなる
ことを特徴としている。
【0023】請求項6記載の発明は、プログラミング言
語で記述された原始プログラムを計算機や中央処理装置
が実行可能な言語で記述された目的プログラムに変換す
るプログラム変換装置に係り、上記原始プログラムで用
いられている手続、関数、あるいはサブルーチンの少な
くとも一部を、上記目的プログラムが上記計算機や中央
処理装置で用いられる際に記憶される主記憶装置の任意
の記憶領域に記憶可能に変換する手続等変換手段と、上
記原始プログラムを上記目的プログラムに変換する過程
で得られる上記手続、関数、あるいはサブルーチンに関
する情報に基づいて、上記手続等変換手段で変換され又
は変換されなかった手続、関数、あるいはサブルーチン
を、上記主記憶装置のいずれの記憶領域に記憶すべきか
を決定し、その決定結果に基づいて上記目的プログラム
を生成するプログラム変換手段とを備えてなることを特
徴としている。
【0024】請求項7記載の発明は、請求項6記載のプ
ログラム変換装置に係り、上記手続、関数、あるいはサ
ブルーチンは、ユーザが上記原始プログラム中で定義し
たもの、ユーザにより定義され検査が終了したもの、上
記プログラミング言語において処理系で予め用意されて
いるもの、命令コードの形式で予め用意されているもの
のうち、少なくとも1つからなることを特徴としてい
る。
【0025】請求項8記載の発明は、請求項6又7記載
のプログラム変換方法に係り、上記情報は、上記原始プ
ログラムから変換された一時的な目的プログラムを実行
することにより得られる、上記手続、関数、あるいはサ
ブルーチンが実際に呼び出される回数を示す情報と、上
記手続、関数、あるいはサブルーチン同士が互いを呼び
出す関係を示す情報とからなることを特徴としている。
【0026】請求項9記載の発明は、プログラミング言
語で記述された原始プログラムを計算機や中央処理装置
が実行可能な言語で記述された目的プログラムに変換す
るプログラム変換装置に係り、上記原始プログラムで用
いられている手続、関数、あるいはサブルーチンのう
ち、ユーザにより定義され検査が終了したもの、上記プ
ログラミング言語において処理系で予め用意されている
もの、命令コードの形式で予め用意されているものの少
なくとも一部を、上記目的プログラムが上記計算機や中
央処理装置で用いられる際に記憶される主記憶装置の任
意の記憶領域に記憶可能に変換する手続等変換手段と、
上記原始プログラムを目的プログラムに変換すると共
に、上記目的プログラムについて、ユーザが上記原始プ
ログラム中で定義した手続、関数、あるいはサブルーチ
ンを上記主記憶装置の任意の記憶領域に記憶可能に変換
するプログラム変換手段と、上記手続等変換手段で変換
された手続、関数、あるいはサブルーチンと、上記プロ
グラム変換手段で得られた目的プログラムとを結合する
結合手段と、上記結合手段で得られた目的プログラムを
実行しつつ、上記手続、関数、あるいはサブルーチンが
実際に呼び出される回数を示す情報と、上記手続、関
数、あるいはサブルーチン同士が互いを呼び出す関係を
示す情報とからなる動的情報を収集する動的情報収集手
段と、上記動的情報に基づいて、上記手続、関数、ある
いはサブルーチンを、上記主記憶装置のいずれの記憶領
域に記憶すべきかを決定し、配置情報を生成する最適化
手段とを備え、上記結合手段は、上記配置情報に基づい
て、上記手続等変換手段で変換された手続、関数、ある
いはサブルーチンと、上記プログラム変換手段で得られ
た目的プログラムとを結合して、最終的な目的プログラ
ムを生成することを特徴としている。
【0027】請求項10記載の発明は、プログラミング
言語で記述された原始プログラムを計算機や中央処理装
置が実行可能な言語で記述された目的プログラムに変換
するプログラム変換装置に係り、上記原始プログラムを
一時的な目的プログラムに変換すると共に、上記一時的
な目的プログラムを実行した際に上記手続、関数、ある
いはサブルーチンが実際に呼び出される回数をカウント
するコードを挿入するプログラム変換手段と、上記原始
プログラムで用いられている手続、関数、あるいはサブ
ルーチンのうち、ユーザにより定義され検査が終了した
もの、上記プログラミング言語において処理系で予め用
意されているもの、命令コードの形式で予め用意されて
いるものと、上記プログラム変換手段で得られた一時的
な目的プログラムとを結合する結合手段と、上記結合手
段で得られた一時的な目的プログラムを実行しつつ、上
記手続、関数、あるいはサブルーチンが実際に呼び出さ
れる回数を示す情報と、上記手続、関数、あるいはサブ
ルーチン同士が互いを呼び出す関係を示す情報とからな
る動的情報を収集する動的情報収集手段と、上記動的情
報に基づいて、上記手続、関数、あるいはサブルーチン
を、上記主記憶装置のいずれの記憶領域に記憶すべきか
を決定し、配置情報を生成する最適化手段と、上記原始
プログラムで用いられている手続、関数、あるいはサブ
ルーチンのうち、ユーザにより定義され検査が終了した
もの、上記プログラミング言語において処理系で予め用
意されているもの、命令コードの形式で予め用意されて
いるものの少なくとも一部を、上記目的プログラムが上
記計算機や中央処理装置で用いられる際に記憶される主
記憶装置の任意の記憶領域に記憶可能に変換する手続等
変換手段とを備え、上記プログラム変換手段は、上記原
始プログラムを目的プログラムに変換すると共に、上記
目的プログラムについて、ユーザが上記原始プログラム
中で定義した手続、関数、あるいはサブルーチンを上記
主記憶装置の任意の記憶領域に記憶可能に変換し、上記
結合手段は、上記配置情報に基づいて、上記手続等変換
手段で変換された手続、関数、あるいはサブルーチン
と、上記プログラム変換手段で得られた目的プログラム
とを結合して、最終的な目的プログラムを生成すること
を特徴としている。
【0028】請求項11記載の発明に係る記憶媒体は、
コンピュータに請求項1乃至10のいずれか1つに記載
の機能を実現させるためのプログラム変換プログラムが
記憶されていることを特徴としている。
【0029】
【作用】この発明の構成によれば、様々な手続相互間に
おけるキャッシュ・メモリ上での衝突を防止できると共
に、頻繁に用いる手続のキャッシュ・ミスを防止でき
る。これにより、計算機やCPUが目的プログラムを実
行した際の実行速度を速くすることができる。
【0030】
【発明の実施の形態】以下、図面を参照して、この発明
の実施の形態について説明する。説明は、実施例を用い
て具体的に行う。 A.第1の実施例 図1はこの発明の第1の実施例であるプログラム変換装
置の電気的構成を示すブロック図である。この例のプロ
グラム変換装置は、第1〜第4プログラム記憶部31〜
34と、コンパイラ35と、リンカ36と、プロファイ
ラ37と、第1,第2情報記憶部38,39と、最適化
部40と、第1,第2ライブラリ記憶部41,42と、
ライブラリ生成部43とから概略構成されている。第1
プログラム記憶部31は、ROMやRAM等の半導体メ
モリ、FD(フロッピー・ディスク)、HD(ハード・
ディスク)やCD−ROM等の記憶媒体からなり、例え
ば、C言語等のプログラミング言語で記述された原始プ
ログラムが予め記憶されている。この実施例では、プロ
グラミング言語としてC言語を用いた場合について説明
する。コンパイラ35は、原始プログラムを再配置可能
目的プログラムにコンパイルした後、手続毎に配置可能
な再配置可能目的プログラムに変換して第2プログラム
記憶部32に記憶する。ここで、再配置可能目的プログ
ラムとは、主記憶装置のどの記憶領域にも記憶可能な目
的プログラムをいい、手続毎に配置可能とは、再配置可
能目的プログラム内部で手続の配置が可能なことをい
う。
【0031】なお、この実施例において、手続は、「従
来の技術」で説明したように、本来の意味の手続の他、
関数及びサブルーチンを含めた総称である。この手続に
は、ユーザ手続、ユーザ・ライブラリ手続、標準ライブ
ラリ手続、ランタイム・ライブラリ手続等が含まれる。
ユーザ手続とは、ユーザが原始プログラム中で定義した
手続をいう。例えば、ユーザが図2に示すような原始プ
ログラムを作成した場合、手続func、func1及
びfunc2は全てユーザ手続である。ユーザ・ライブ
ラリ手続とは、元々はユーザ手続であったが、汎用性が
高いと思われるものをデバッグ等の検査後、第1ライブ
ラリ記憶部41に記憶したものをいう。例えば、図2に
示す原始プログラムを再配置可能目的プログラムにコン
パイルした後、デバッグ等の処理をして第1ライブラリ
記憶部41に記憶した場合には、手続func、fun
c1及びfunc2は全てユーザ・ライブラリ手続とな
る。標準ライブラリ手続とは、原始プログラムを記述す
るために使用されるプログラミング言語においてコンパ
イラなどの処理系で予め用意されており、ユーザが定義
せずに使用できる手続をいう。例えば、C言語では、文
字列を標準出力に出力する手続printfや、文字列
の長さを返す手続strlenなどである。ランタイム
・ライブラリ手続とは、汎用性が高いがコードサイズが
大きいため、予め命令コードで記述された手続の形式で
第1ライブラリ記憶部41に予め記憶された手続をい
う。汎用性が高いがサイズが大きい命令列は、コンパイ
ラ35が目的プログラムを生成する度に命令コードを生
成するのは効率的でないので、そのような命令列を予め
命令コードで記述された手続の形式とし、目的プログラ
ム生成時にその手続を呼び出すコードを生成し、リンカ
36において後でリンクするのである。例えば、最終的
な目的プログラムを実行するCPU等が浮動小数点用の
命令を有しないのも拘らず、原始プログラムにfloa
t型の変数や演算が記述されている場合、コンパイラ3
5は複数の命令列で構成された手続、例えば、floa
t用手続addや、float用手続sub等を用いて
目的プログラムを生成する。この時のfloat用手続
addやfloat用手続subがランタイム・ライブ
ラリ手続である。
【0032】第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等の記
憶媒体からなり、最終的な目的プログラムが記憶され
る。プロファイラ37は、ハードウェア・エミュレータ
やソフトウェア・シミュレータ等からなり、第3プログ
ラム記憶部33から読み込んだ一時的な目的プログラム
を実行しつつ、各手続相互間の呼出関係、各手続の呼出
回数、ループ構造情報等からなる動的情報(プロファイ
ル情報)を収集し、得られた動的情報を第1情報記憶部
38に記憶する。ループ構造情報とは、ある手続がルー
プ構造の中で呼ばれたことを示す情報をいう。具体的に
は、原始プログラムのループ構造にプロファイラ37の
動作時にループ構造の開始と終了を認識できる何らかの
マーカを記述しておき、プロファイラ37が動作時にそ
のマーカによりループ構造の開始と終了を認識すること
により、そのループ構造中で呼ばれた手続はループ構造
に属していることが認識できる。これにより、ループ構
造中の手続同士が時間的に連続して実行される可能性の
高いと判断できるのである。
【0033】第1情報記憶部38は、RAM等の半導体
メモリ、FDやHD等の記憶媒体からなり、動的情報が
記憶される。最適化部40は、第1情報記憶部38に記
憶された動的情報に基づいて、時間的に連続して実行さ
れる可能性の高い手続同士がキャッシュ・メモリ上で衝
突したり、頻繁に用いる手続のキャッシュ・ミスが起こ
らないように、全ての手続の配置最適化を行って、リン
カ36に手続の配置を指示するための配置情報を生成
し、第2情報記憶部39に記憶する。第2情報記憶部3
9は、RAM等の半導体メモリ、FDやHD等の記憶媒
体からなり、配置情報が記憶される。第1ライブラリ記
憶部41は、ROMやRAM等の半導体メモリ、FD、
HDやCD−ROM等の記憶媒体からなり、標準ライブ
ラリ手続、ランタイム・ライブラリ手続及びユーザ・ラ
イブラリ手続を含んだ再配置可能ライブラリがそれぞれ
記憶されている。ここで、再配置可能ライブラリも再配
置可能目的プログラムであるが、コンパイラ35が生成
した再配置可能目的プログラムと区別するために、第1
ライブラリ記憶部41に記憶された再配置可能目的プロ
グラムを再配置可能ライブラリと呼ぶことにする。ライ
ブラリ生成部43は、第1ライブラリ記憶部41に記憶
された再配置可能ライブラリを手続毎に配置可能な再配
置可能ライブラリに変換して第2ライブラリ記憶部42
に記憶する。第2ライブラリ記憶部42は、RAM等の
半導体メモリ、FDやHD等の記憶媒体からなり、手続
毎に配置可能な再配置可能ライブラリが記憶される。
【0034】次に、上記構成を有するプログラム変換装
置の動作について、図3〜図10を参照して説明する。
まず、図3に示すステップSA1では、ライブラリ生成
部43は、第1ライブラリ記憶部41に記憶された各再
配置可能ライブラリについて、手続単位を認識して手続
毎に配置可能な再配置可能ライブラリに変換し、第2ラ
イブラリ記憶部42に記憶する。1つの再配置可能ライ
ブラリ内の複数の手続は、通常、1つのまとまりとして
配置の単位であるセクション、例えば、テキスト・セク
ション(.text・セクション)に属し、リンカ36
におけるリンク時にはテキスト・セクションとしてまと
めて配置されるので、個々の手続単位で配置できない。
そこで、手続単位に個別のセクションに分割すれば、リ
ンカ36におけるリンク時に手続単位で適宜配置するこ
とが可能となる。以下、再配置可能ライブラリ内のテキ
スト・セクションを手続単位のセクションに分割する手
順を説明する。まず、手続の先頭には、手続の外部でも
使用可能であることを示すグローバル属性や手続の属性
等に関するシンボル情報が付加されているので、それを
手続の先頭アドレスを参照するための手続の先頭ラベル
として認識する。次に、上記各手続の先頭ラベルの認識
に基づいて、"手続名_原始プログラム名"のように、手
続毎に別の名称を有するセクションを新たに生成し、再
配置可能ライブラリ内のセクションに関する情報をまと
めて、再配置可能ライブラリ内のある部分、例えば、セ
クション・ヘッダ部に新規に登録する。なお、再配置可
能ライブラリ内において、テキスト・セクションが不要
な場合には削除する。再配置可能ライブラリは、各種の
情報の再配置可能ライブラリ内における位置を示すオフ
セットを各箇所に有しているので、上記のように新規の
セクションが追加された場合には、これらのオフセット
がずれてしまう。そこで、オフセットを更新する。以上
の処理を経た各再配置可能ライブラリを手続毎に配置可
能な再配置可能ライブラリとして第2ライブラリ記憶部
42に記憶する。
【0035】ステップSA2では、コンパイラ35は、
原始プログラムを再配置可能目的プログラムにコンパイ
ルした後、ステップSA1におけるライブラリ生成部4
3の処理と同様の処理により、再配置可能目的プログラ
ムを手続毎に配置可能な再配置可能目的プログラムに変
換して第2プログラム記憶部32に記憶する。ステップ
SA3では、リンカ36は、第2プログラム記憶部32
に記憶された手続毎に配置可能な再配置可能目的プログ
ラムと、第2ライブラリ記憶部42に記憶された手続毎
に配置可能な再配置可能ライブラリとをリンクして実行
可能な一時的な目的プログラムを生成して第3プログラ
ム記憶部33に記憶する。ステップSA4では、プロフ
ァイラ37は、第3プログラム記憶部33から読み込ん
だ一時的な目的プログラムを実行しつつ、各手続相互間
の呼出関係、各手続の呼出回数、ループ構造情報等から
なる動的情報を収集し、得られた動的情報を第1情報記
憶部38に記憶する。ステップSA5では、最適化部4
0は、第1情報記憶部38に記憶された動的情報に基づ
いて、全ての手続の配置最適化を行って配置情報を生成
し、第2情報記憶部39に記憶する。この手続の配置最
適化の詳細については、後述する。ステップSA6で
は、リンカ36は、第2情報記憶部39に記憶された配
置情報に基づいて、手続毎に配置可能な再配置可能目的
プログラムと手続毎に配置可能な再配置可能ライブラリ
とをリンクして実行可能な最終的な目的プログラムを生
成して第4プログラム記憶部34に記憶した後、一連の
処理を終了する。
【0036】次に、最適化部40の手続の配置最適化処
理について、図4〜図10を参照して説明する。キャッ
シュ・メモリを効率よく使用するための手続の配置最適
化方法には各種あるが、この実施例においては、"Effic
ient Procedure Mapping Using Cache Line Coloring",
A. H. Hasemi, et al., SIGPLAN, pp. 171-182, June,
1997に開示されたキャッシュ・ライン・カラーリング
による配置方法を採用する。まず、前提として、このプ
ログラム変換装置により作成され、主記憶装置に記憶さ
れた目的プログラムの各コードは、主記憶装置から読み
出された後、上記したダイレクト・マップ方式で、4個
のキャッシュ・ラインからなるキャッシュ・メモリに記
憶されるものとする。コンパイルすべき原始プログラム
には、7個の手続A〜Gがこの順で記述されており、原
始プログラムを目的プログラムにコンパイルした場合の
各手続A〜Gのコード・サイズ、即ち、キャッシュ・メ
モリを構成するキャッシュ・ラインを占める数(キャッ
シュ・ライン数)は、図5に示すものとする。また、プ
ロファイラ37における動的解析の結果、手続Aから手
続Bを呼び出す頻度は90、手続Bから手続Cを呼び出
す頻度は80、手続Cから手続Dを呼び出す頻度は7
0、手続Aから手続Eを呼び出す頻度は40、手続Eか
ら手続Cを呼び出す頻度は100、手続Eから手続Fを
呼び出す頻度は0、手続Fから手続Gを呼び出す頻度は
0であるとする。このキャッシュ・ライン・カラーリン
グによる配置方法は、後述する手続呼出グラフを用い
て、一世代(直接ある手続から他の手続を呼び出す関
係)におけるキャッシュ・メモリ上での衝突を低減する
ものである。この配置方法では、各キャッシュ・ライン
に「色」を割り当て、配置するのに必要な「色」の数、
即ち、キャッシュ・ライン数、手続が配置された
「色」、及び利用不可能集合を用いて手続の配置を行
う。この実施例では、第1番目のキャッシュ・ラインに
は赤(r)が、第2番目のキャッシュ・ラインには緑
(g)が、第3番目のキャッシュ・ラインには青(b)
が、第4番目のキャッシュ・ラインには黄(y)がそれ
ぞれ割り当てられている。また、利用不可能集合とは、
直接に呼び出し呼び出される関係にある手続同士であ
り、配置済の手続が占める「色」の合併集合をいう。
【0037】まず、図4に示すステップSB1では、最
適化部40は、第1情報記憶部38に記憶された動的情
報に基づいて、図6に示す手続呼出グラフを作成する。
図6において、ノードのA〜Gは手続を示し、ノード間
の辺は手続の呼出関係を示し、辺に付加された数値は、
ノードの始点、即ち、矢印の手前の手続から、ノードの
終点、即ち、矢印の先の手続を呼び出す呼出頻度を示
す。ステップSB2では、手続呼出グラフについて、辺
とノードを呼出頻度の高いグループと低いグループとに
分割する。この実施例においては、図6からわかるよう
に、呼出頻度の高いグループは、ノードがノードA〜
E、辺がノードAからノードBへ向かう辺、ノードAか
らノードEへ向かう辺、ノードBからノードCへ向かう
辺、ノードCからノードDへ向かう辺、ノードEからノ
ードCへ向かう辺である。一方、呼出頻度の低いグルー
プは、ノードがノードF及びG、辺がノードEからノー
ドFへ向かう辺、ノードFからノードGへ向かう辺であ
る。ステップSB3では、各グループ内で辺及びノード
を並び替える。即ち、呼出頻度の高いグループでは辺に
付加された数値が大きい順に辺を並び替える。これに対
して、呼出頻度の低いグループでは手続のキャッシュ・
ライン数の大きい順にノードを並び替え、主にプログラ
ム空間の空きを埋めるために配置される。この実施例に
おいては、図6からわかるように、呼出頻度の高いグル
ープでは、辺は、ノードEからノードCへ向かう辺、ノ
ードAからノードBへ向かう辺、ノードBからノードC
へ向かう辺、ノードCからノードDへ向かう辺、ノード
AからノードEへ向かう辺の順となる。一方、呼出頻度
の低いグループでは、図5からわかるように、手続Gの
キャッシュ・ライン数が2であるのに対し、手続Fのキ
ャッシュ・ライン数が1であるので、ノードG、ノード
Fの順となる。
【0038】ステップSB4では、呼出頻度の高いグル
ープの辺が残っているか否かを判断する。この判断結果
が「YES」の場合には、ステップSB5へ進む。今の
場合、最初であるので、全ての辺が残っており、ステッ
プSB4の判断結果は「YES」となる。ステップSB
5では、残っている辺のうち、ステップSB3の処理で
並べ替えられた順序で最も高い順位の辺の両側のノード
が未配置か否かを判断する。この判断結果が「YES」
の場合には、ステップSB6へ進む。今の場合、残って
いる辺で最も高い順位の辺は、ノードEからノードCへ
向かう辺であり、最初であるので、両側のノードE及び
Cが未配置である。したがって、ステップSB5の判断
結果は「YES」となる。ステップSB6では、処理の
対象となっている辺の両側のノードを隣接させて配置し
た後、ステップSB7へ進む。この場合、プログラム空
間の任意の位置に配置できる。今の場合、手続E及び手
続Cは、図5からわかるように、共にキャッシュ・ライ
ン数が2であるので、図7の第1段に示すように、手続
Eの部分E1及びE2は、第1及び第2番目のキャッシ
ュ・ライン(色は赤(r)及び緑(g))に配置され、
手続Cの部分C1及びC2は、第3及び第4番目のキャ
ッシュ・ライン(色は青(b)及び黄(y))に配置さ
れる。この場合、ノードE及びCは併合(マージ)され
て単一のノードになったと考え、複合ノードE−Cと呼
ぶ。ステップSB7では、利用不可能集合を更新した
後、ステップSB4へ戻る。ノードEの場合、直接呼び
出す関係にあるノードCが配置されているキャッシュ・
ラインの「色」は青(b)及び黄(y)であるので、利
用不可能集合は、E{b,y}となる。同様に、ノード
Cの場合、直接呼び出される関係にあるノードEが配置
されているキャッシュ・ラインの「色」は赤(r)及び
緑(g)であるので、利用不可能集合は、C{r,g}
となる。
【0039】以上説明したステップSB4〜SB7の処
理を、呼出頻度の高いグループの辺のうち、両側のノー
ドが未配置の辺がなくなるまで繰り返す。そして、呼出
頻度の高いグループの辺が残っていない場合には、ステ
ップSB4の判断結果が「NO」となり、ステップSB
16へ進む。今の場合、ノードAからノードBへ向かう
辺が残っており、その辺の両側のノードA及びBが未配
置であるので、ステップSB6及びSB7の処理を行
う。手続A及び手続Bは、図5からわかるように、共に
キャッシュ・ライン数が1であるので、図7の第1段に
示すように、手続Aは、第3番目のキャッシュ・ライン
(色は青(b))に配置され、手続Bは、第4番目のキ
ャッシュ・ライン(色は黄(y))に配置される。そし
て、ノードA及びBは複合ノードA−Bとなる。次に、
ノードAの場合、直接呼び出す関係にあるノードBが配
置されているキャッシュ・ラインの「色」は黄(y)で
あるので、利用不可能集合は、A{y}となる。同様
に、ノードBの場合、直接呼び出される関係にあるノー
ドAが配置されているキャッシュ・ラインの「色」は青
(b)であるので、利用不可能集合は、B{b}とな
る。なお、図6に示す手続呼出グラフでは、ノードAか
らノードEへ向かう辺が残っているにも拘らず、ノード
Aの利用不可能集合A{y}にノードEが配置されてい
るキャッシュ・ラインの「色」である赤(r)及び緑
(g)が含まれていないが、これは、ノードAからノー
ドEへ向かう辺が順位が低いためにまだ処理されていな
いことによる。現状では、ノードAからノードEへ向か
う辺に関して衝突が発生する状況になっているが、もと
もと辺の順位に従って処理しているので、このままで良
い。
【0040】一方、呼出頻度の高いグループの辺は残っ
ているが、その辺のいずれかの側のノードが既に配置済
の場合には、ステップSB5の判断結果が「NO」とな
り、ステップSB8へ進む。上記の処理において、ノー
ドEからノードCへ向かう辺及びノードAからノードB
へ向かう辺が処理され、呼出頻度の高いグループでは、
ノードBからノードCへ向かう辺、ノードCからノード
Dへ向かう辺、ノードAからノードEへ向かう辺が残っ
ている。しかし、これらの辺はいずれも一方のノードが
配置済であるので、ステップSB8へ進む。ステップS
B8では、処理の対象となっている辺が2個の異なる複
合ノードに属するノードを結ぶ辺であるか否かを判断す
る。この判断結果が「YES」の場合には、ステップS
B9へ進む。今の場合、残っている辺のうち、最も順位
の高い辺であるノードBからノードCへ向かう辺は、複
合ノードE−Cと複合ノードA−Bを結ぶ辺であるの
で、ステップSB8の判断結果が「YES」となり、ス
テップSB9へ進む。ステップSB9では、処理対象と
なっている辺について、2個の複合ノードを併合して単
一の複合ノードとする。これは、2個の複合ノードのう
ち、併合されたノード数の少ない複合ノード(これを短
い複合ノードという)を併合されたノード数の多い複合
ノード(これを長い複合ノードという)に結合して行
う。短い複合ノードを長い複合ノードに結合する際、プ
ログラム空間上でも同様に短い複合ノードを長い複合ノ
ードに結合する。まず、短い複合ノードを長い複合ノー
ドの左右いずれの側に配置するかを決定する。具体的に
は、長い複合ノードを構成するノードの中で、処理対象
となっている辺を構成するノードの中央の位置が、長い
複合ノードの左右の境界のいずれに近いかを、左右の境
界に到達するのに要するキャッシュ・ライン数で判断
し、近い側に短い複合ノードを配置すると決定する。次
に、短い複合ノードの配置する方向を決定して配置す
る。具体的には、処理の対象となっている辺を構成する
複数のノードのうち、長い複合ノードを構成するノード
以外のノードが既に配置された長い複合ノードを構成す
るノードになるべく近くなるように短い複合ノードの向
きを決定して配置する。この場合、短い複合ノードの配
置により衝突が発生するならば、衝突が発生しなくなる
まで順に当該長い複合ノードを構成するノード以外のノ
ードの位置を長い複合ノードを構成するノードから離し
て配置する。しかし、当該長い複合ノードを構成するノ
ード以外のノードの配置位置をどのように変更しても衝
突が避けられない場合には、当初の配置位置に戻す。そ
して、ステップSB10へ進む。
【0041】この実施例においては、複合ノードE−C
及び複合ノードA−Bは共に併合されたノード数が2個
で同じであるので、いずれを短い複合ノードとしても良
いが、今の場合、複合ノードA−Bを短い複合ノードと
する。次に、長い複合ノードE−Cを構成するノードE
及びCのうち、処理対象となっているノードBからノー
ドCへ向かう辺を構成するノードCの中央の位置は、図
7の第1段に示すように、部分C1と部分C2との間で
あるから、そこから長い複合ノードE−Cの左側の境界
に到達するのに要するキャッシュ・ライン数は3個であ
るのに対し、右側の境界に到達するのに要するキャッシ
ュ・ライン数は1個である。したがって、長い複合ノー
ドE−Cの右側に短い複合ノードA−Bを配置すると決
定する。次に、処理の対象となっているノードBからノ
ードCへ向かう辺を構成するノードB及びCのうち、長
い複合ノードE−Cを構成するノードC以外のノードB
が既に配置されたノードCになるべく近くなるように短
い複合ノードA−Bの向きを決定すると、B−Aとなる
が、このように配置しても衝突は発生しないので、その
まま配置する(図7の第2段参照)。これにより、新た
に複合ノードE−C−B−Aが生成される。
【0042】ステップSB10では、上記配置処理によ
りプログラム空間に空いた領域が発生したか否かを判断
する。この判断結果が「NO」の場合には、ステップS
B7へ進む。今の場合、空いた領域は発生しないので、
ステップSB7へ進み、利用不可能集合を更新した後、
ステップSB4へ戻る。ノードAの場合、直接呼び出す
関係にあるノードBが配置されているキャッシュ・ライ
ンの「色」は赤(r)であるので、利用不可能集合は、
A{r}となる。同様に、ノードBの場合、直接呼び出
される関係にあるノードAが配置されているキャッシュ
・ラインの「色」は緑(g)であり、直接呼び出す関係
にあるノードCが配置されているキャッシュ・ラインの
「色」は青(b)及び黄(y)であるので、利用不可能
集合は、B{g,b,y}となる(図7の第2段参
照)。一方、ステップSB10の判断結果が「YES」
の場合、即ち、上記配置処理によりプログラム空間に空
いた領域が発生した場合には、ステップSB11へ進
む。ステップSB11では、プログラム空間に空いた領
域に、呼出頻度の低いグループの中で順位の高いノード
を配置した後、ステップSB7へ進む。以上説明したス
テップSB4、SB5、SB8〜SB11及びSB7の
処理を、呼出頻度の高いグループの辺の中で、いずれか
の側のノードが既に配置済であり、かつ、2個の異なる
複合ノードに属するノードを結ぶ辺がなくなるまで繰り
返す。そして、呼出頻度の高いグループの辺が残ってい
ない場合には、ステップSB4の判断結果が「NO」と
なり、ステップSB16へ進む。
【0043】一方、残っている呼出頻度の高いグループ
の辺の中で、いずれかの側のノードが既に配置済であ
り、かつ、2個の異なる複合ノードに属するノードを結
ぶ辺ではない場合には、ステップSB8の判断結果が
「NO」となり、ステップSB12へ進む。今までの処
理において、ノードEからノードCへ向かう辺、ノード
AからノードBへ向かう辺及びノードBからノードCへ
向かう辺が処理され、呼出頻度の高いグループでは、ノ
ードCからノードDへ向かう辺、ノードAからノードE
へ向かう辺が残っている。しかし、これらの辺はいずれ
も一方のノードが配置済であり、かつ、2個の異なる複
合ノードに属するノードを結ぶ辺ではないので、ステッ
プSB8の判断結果が「NO」となり、ステップSB1
2へ進む。ステップSB12では、処理の対象となって
いる辺を構成する2個のノードのうち、一方が複合ノー
ドを構成するノードであり、他方が未配置か否かを判断
する。この判断結果が「YES」の場合には、ステップ
SB13へ進む。今の場合、残っている辺のうち、最も
順位の高い辺であるノードCからノードDへ向かう辺
は、ノードCが複合ノードE−C−B−Aを構成するノ
ードであり、ノードDが未配置であるので、ステップS
B12の判断結果が「YES」となり、ステップSB1
3へ進む。ステップSB13では、処理対象となってい
る辺の未配置のノードを複合ノードに結合する。未配置
のノードを複合ノードに結合する際、プログラム空間上
でも同様に未配置のノードを複合ノードに結合する。ま
ず、未配置のノードを複合ノードの左右いずれの側に配
置するかを決定する。具体的には、複合ノードを構成す
るノードの中で、処理対象となっている辺を構成するノ
ードの中央の位置が、複合ノードの左右の境界のいずれ
に近いかを、左右の境界に到達するのに要するキャッシ
ュ・ライン数で判断し、近い側に未配置のノードを配置
すると決定する。この場合、未配置のノードの配置によ
り衝突が発生するならば、衝突が発生しなくなるまで順
に当該複合ノードを構成するノード以外のノードの位置
を複合ノードを構成するノードから離して配置する。し
かし、当該複合ノードを構成するノード以外のノードの
配置位置をどのように変更しても衝突が避けられない場
合には、当初の配置位置に戻す。そして、ステップSB
10へ進む。
【0044】この実施例においては、複合ノードE−C
−B−Aを構成するノードE、C、B及びAのうち、処
理対象となっているノードCからノードDへ向かう辺を
構成するノードCの中央の位置は、図7の第1段に示す
ように、部分C1と部分C2との間であるから、そこか
ら複合ノードE−C−B−Aの左側の境界に到達するの
に要するキャッシュ・ライン数は3個であり、右側の境
界に到達するのに要するキャッシュ・ライン数も3個で
ある。したがって、複合ノードE−C−B−Aの左右い
ずれに配置しても良いが、今の場合、複合ノードE−C
−B−Aの左側にノードDを配置すると決定する。この
場合、ノードDの部分D1及びD2をノードEの部分E
1すぐ左側に配置するとノードDの部分D1及びD2と
ノードCの部分C1及びC2との衝突が発生するので、
衝突が発生しなるように、ノードDの部分D1及びD2
の位置をノードEの部分E1から左側へキャッシュ・ラ
イン2個分だけ離して配置する(図7の第3段参照)。
次に、今の場合、ノードDの部分D1及びD2の右側に
キャッシュ・ライン2個分だけ空いた領域が発生してい
るので、ステップSB10の判断結果が「YES」とな
り、ステップSB11へ進む。ステップSB11では、
ノードDの部分D1及びD2の右側にキャッシュ・ライ
ン2個分だけ空いた領域に、呼出頻度の低いグループの
中で順位の高いノード、今の場合、ノードGを配置した
後(図7の第4段参照)、ステップSB7へ進み、利用
不可能集合を更新した後、ステップSB4へ戻る。ノー
ドDの場合、直接呼び出す関係にあるノードCが配置さ
れているキャッシュ・ラインの「色」は青(b)及び黄
(y)であるので、利用不可能集合は、D{b,y}と
なる(図7の第3段参照)。以上説明したステップSB
4、SB5、SB8、SB12、SB13、SB10、
SB11及びSB7の処理を、残っている呼出頻度の高
いグループの辺の中で、いずれかの側のノードが既に配
置済であり、2個の異なる複合ノードに属するノードを
結ばず、かつ、一方の側のノードが複合ノードを構成す
るノードであり、他方の側のノードが未配置である辺が
なくなるまで繰り返す。そして、呼出頻度の高いグルー
プの辺が残っていない場合には、ステップSB4の判断
結果が「NO」となり、ステップSB16へ進む。
【0045】一方、残っている呼出頻度の高いグループ
の辺の中で、いずれかの側のノードが既に配置済であ
り、2個の異なる複合ノードに属するノードを結ばず、
かつ、一方の側のノードが複合ノードを構成するノード
であり、他方の側のノードが未配置である辺ではない場
合には、ステップSB12の判断結果が「NO」とな
り、ステップSB13へ進む。今までの処理において、
ノードEからノードCへ向かう辺、ノードAからノード
Bへ向かう辺、ノードBからノードCへ向かう辺及びノ
ードCからノードDへ向かう辺が処理され、呼出頻度の
高いグループでは、ノードAからノードEへ向かう辺だ
けが残っている。しかし、この辺は一方のノードが配置
済であり、かつ、2個の異なる複合ノードに属するノー
ドを結ばず、かつ、一方の側のノードが複合ノードを構
成するノードであり、他方の側のノードが未配置である
辺ではないので、ステップSB12の判断結果が「N
O」となり、ステップSB14へ進む。ステップSB1
4では、処理の対象となっている辺が同一の複合ノード
に属するノードを結ぶ辺であるか否かを判断する。この
判断結果が「YES」の場合には、ステップSB15へ
進む。今の場合、残っている辺のうち、最も順位の高い
辺であるノードAからノードEへ向かう辺は、ノードA
及びEが共に同一の複合ノードE−C−B−Aを構成す
るノードであり、ノードDが未配置であるので、ステッ
プSB14の判断結果が「YES」となり、ステップS
B15へ進む。ステップSB15では、処理対象となっ
ている辺を構成するノード間での衝突を削減する。即
ち、処理対象となっている辺を構成するノード間で衝突
が発生している場合には、複合ノードの境界に近い方の
ノードを衝突が発生しなくなるまで、境界を越えて移動
する。しかし、当該ノードの配置位置をどのように変更
しても衝突が避けられない場合には、当初の配置位置に
戻す。そして、ステップSB10へ進む。
【0046】この実施例においては、処理の対象となっ
ている辺はノードAからノードEへ向かう辺であり、図
7の第4段からわかるように、ノードAとノードEとの
間に衝突が発生している。そして、ノードAからノード
Eへ向かう辺を構成するノードA及びEのうち、ノード
Aが複合ノードE−C−B−Aの境界に近いので、ノー
ドAを境界を越えて移動する。今の場合、ノードAをキ
ャッシュ・ライン1個分だけ移動させれば、衝突が発生
しなくなるので、その位置にノードAを配置する(図7
の第5段参照)。次に、今の場合、ノードAの右側にキ
ャッシュ・ライン1個分だけ空いた領域が発生している
ので、ステップSB10の判断結果が「YES」とな
り、ステップSB11へ進む。ステップSB11では、
ノードAの右側にキャッシュ・ライン1個分だけ空いた
領域に、呼出頻度の低いグループの中で残っているノー
ド、今の場合、ノードFを配置した後(図7の第6段参
照)、ステップSB7へ進み、利用不可能集合を更新し
た後、ステップSB4へ戻る。ノードAの場合、直接呼
び出す関係にあるノードE及びBが配置されているキャ
ッシュ・ラインの「色」は赤(r)及び緑(g)である
ので、利用不可能集合は、A{r,g}となる(図7の
第5段参照)。一方、ノードBの場合、直接呼び出す関
係にあるノードC及び直接呼び出される関係にあるノー
ドAが配置されているキャッシュ・ラインの「色」は青
(b)及び黄(y)であるので、利用不可能集合は、B
{b,y}となる(図7の第5段参照)。以上説明した
ステップSB4、SB5、SB8、SB12、SB1
4、SB15、SB10、SB11及びSB7の処理
を、同一の複合ノードに属するノードを結ぶ辺がなくな
るまで繰り返す。そして、呼出頻度の高いグループの辺
が残っていない場合には、ステップSB4の判断結果が
「NO」となり、ステップSB16へ進む。
【0047】ステップSB16では、残った呼出頻度の
低いグループに属するノードについて、単純な深さ優先
探索によって配置する。以上の処理により複数の複合ノ
ードが離れて配置された場合には、各複合ノードに呼出
頻度に基づいて優先度を付け、最終的な配置を決定す
る。そして、一連の処理を終了する。以上説明した手続
の配置最適化処理により得られる配置情報の一例を図8
に示す。前提として、手続A及びBはファイル名「te
st1.o」の原始プログラム・ファイルに属し、関数
E、F及びGはファイル名「test2.o」の原始プ
ログラム・ファイルに属し、また手続C及びDはファイ
ル名「libc.a」のライブラリ・ファイルに属する
標準ライブラリ手続であるとする。また、1個のキャッ
シュ・ラインのサイズを32バイト(0x20)とす
る。図8において、「GROUP1」は、セグメント名
であり、出力セクションを1つのかたまりとして取り扱
う場合に付す。「!LOAD」は、セグメント・タイプ
を表しており、このフィールドは固定されている。今の
場合、「LOAD」はメモリにロードするセグメントで
あることを示している。「?RX」は、セグメント属性
を表しており、セグメントの読み出し/書き込み/実行
の属性を示している。命令部分(テキスト・コード)の
場合は、「?RX」に固定されている。「A0x100
0」は、整列条件を表しており、セグメントをメモリ空
間に配置する際の整列条件を示している。今の場合、整
列条件が「0x1000」であることを示している。ま
た、「_D_LIB」や「_G_test2」等は、出
力セクション名であり、同じタイプと属性の入力セクシ
ョンを結合してできるかたまりを表している。「$PR
OGBITS」は、入力セクションのタイプを表してお
り、テキスト・コードの場合はこれに固定されている。
「?AX」は、セクション属性を表しており、入力セク
ションが、メモリを占有する/書き込み可能/実行可能
等の属性を示している。テキスト・コードの場合は、こ
れに固定されている。「A0x20」は、入力セクショ
ンを出力セクションに配置する際の整列条件を表してい
る。キャッシュ・ライン単位に配置を考慮したので、整
列条件はキャッシュ・ライン1個のサイズである0x2
0である。「_D_test1」や「_G_test
2」等は、出力セクションに配置すべき入力セクション
の名前を表している。「libc.a」や「test
2.o」等は、入力セクションが属するファイル名を表
している。複数ファイルの同じ入力セクションをまとめ
て出力セクションにする時は、ファイル名を複数記述す
ることが可能である。既述したように、手続毎に入力セ
クション名を付すことにより、上記のように手続の配置
の順番を整列条件付きで指定することができるのであ
る。
【0048】このように、この例の構成によれば、再配
置可能ライブラリを手続毎に配置可能な再配置可能ライ
ブラリに変換するライブラリ生成部43を設け、プロフ
ァイラ37による動的解析時に全ての手続について動的
情報を収集し、その動的情報に基づいて全ての手続にと
って最適な配置を決定して配置情報を生成し、その配置
情報に基づき全ての手続を配置しているので、目的プロ
グラムを構成する全ての手続間でのキャッシュ・メモリ
上での衝突を低減できると共に、頻繁に用いる手続のキ
ャッシュ・ミスも低減できる。これにより、計算機やC
PUが目的プログラムを実行した際の実行速度を速くす
ることができる。これに対して、コンパイルすべき原始
プログラムに7個の手続A〜Gがこの順で記述されてお
り、原始プログラムを目的プログラムにコンパイルした
場合の各手続A〜Gのキャッシュ・ライン数が図5に示
すものとした場合、上記最適化部40による手続の配置
最適化処理を全く施さないと、原始プログラム中の手続
A〜Gがその記述順で目的プログラムにコンパイルされ
るので、図9に示すように、手続Cと手続Eとの間で衝
突が発生してしまう。
【0049】また、この発明では、手続の種類を区別す
ることなく、全ての手続を同等に扱い手続毎に配置可能
であるので、衝突を完全に削減できる確率が高いが、図
6に示す手続呼出グラフにおいて、図10に示すよう
に、手続C及びDが標準ライブラリ手続であって、従来
のように、手続の配置最適化処理の対象外とすると、上
記文献に記載されたキャッシュ・ライン・カラーリング
による配置方法を採用したとしても、以下に示すように
衝突を完全に削減できない。何故なら、原始プログラム
に複数の標準ライブラリ手続の呼出命令が記述されてい
る場合、従来ではリンカにおけるリンク時にライブラリ
記憶部から対応する複数の標準ライブラリ手続が読み出
され、主記億装置の特定の領域にまとめて配置されるた
め、手続毎に配置を指定することができなかったからで
ある。図11に、標準ライブラリ手続C及びDを手続の
配置最適化処理の対象外とした場合の最適化部の手続の
配置最適化処理の手順を示す。この場合、標準ライブラ
リ手続C及びDが対象外であるから、手続Eから手続C
へ向かう辺及び手続Bから手続Cへ向かう辺も当然対象
外となる。したがって、図11の第5段に示すように、
手続Eと手続Cとの衝突を削減することができない。
【0050】B.第2の実施例 次に、第2の実施例について説明する。図12はこの発
明の第2の実施例であるプログラム変換装置の電気的構
成を示すブロック図である。この図において、図1の各
部に対応する部分には同一の符号を付け、その説明を省
略する。この図に示すプログラム変換装置においては、
第1ライブラリ記憶部41に記憶された再配置可能ライ
ブラリがリンカ36にも供給されるように構成されてい
る。このように構成したのは、以下に示す理由による。
即ち、再配置可能ライブラリの数が多い場合、ライブラ
リ生成部43が、第1ライブラリ記憶部41に記憶され
た全ての再配置可能ライブラリを手続毎に配置可能な再
配置可能ライブラリに変換するのでは時間がかかってし
まう。そこで、一部の再配置可能ライブラリについて
は、ライブラリ生成部43が手続毎に配置可能な再配置
可能ライブラリに変換せずにリンカ36で手続毎に配置
可能な再配置可能目的プログラムと直接リンクさせるの
である。この場合、どの再配置可能ライブラリを直接リ
ンカ36に供給するかは、例えば、第1情報記憶部38
に記憶された動的情報や各手続のコード・サイズに基づ
いて、リンカ36が判断するように構成しても良い。こ
のように、この例の構成によれば、第1の実施例に比べ
て短い時間で最終的な目的プログラムを作成できる。
【0051】C.第3の実施例 次に、第3の実施例について説明する。図13はこの発
明の第3の実施例であるプログラム変換装置の電気的構
成を示すブロック図である。この図において、図12の
各部に対応する部分には同一の符号を付け、その説明を
省略する。この図に示すプログラム変換装置において
は、図12に示すコンパイラ35及びプロファイラ37
に代えて、コンパイラ44及びプロファイラ45が新た
に設けられている。プロファイラ45は、図12に示す
プロファイラ37とは異なり、第3プログラム記憶部3
3に記憶された実行可能な一時的な目的プログラムを読
み込んで単に実行するだけの機能を有している。その代
わり、コンパイラ44は、原始プログラムを実行可能な
一時的な目的プログラムにコンパイルする際、一時的な
目的プログラムに、プロファイラ45がその一時的な目
的プログラムを実行した際に実際に実行された手続の回
数をカウントするカウント・コードを挿入する。これに
より、プロファイラ45は、一時的な目的プログラムを
実行することにより、各手続相互間の呼出関係、各手続
の呼出回数等からなる動的情報を収集することができ、
得られた動的情報を第1情報記憶部38に記憶する。
【0052】次に、上記構成を有するプログラム変換装
置の動作について、図14を参照して説明する。まず、
図14に示すステップSC1では、コンパイラ44は、
第1プログラム記憶部31から読み込まれた原始プログ
ラム(図2参照)をカウント・コードを挿入しつつ実行
可能な一時的な目的プログラムにコンパイルして、第2
プログラム記憶部32に記憶する。ステップSC2で
は、リンカ36は、第2プログラム記憶部32に記憶さ
れたカウント・コードが挿入された一時的な目的プログ
ラムと、第1ライブラリ記憶部41に記憶された再配置
可能ライブラリとをリンクして実行可能な一時的な目的
プログラムを生成して第3プログラム記憶部33に記憶
する。ステップSC3では、プロファイラ45は、第3
プログラム記憶部33から読み込んだ一時的な目的プロ
グラムを実行する。この場合、一時的な目的プログラム
にカウント・コードが挿入されているので、各手続相互
間の呼出関係、各手続の呼出回数等からなる動的情報が
収集されるので、得られた動的情報を第1情報記憶部3
8に記憶する。
【0053】ステップSC4では、最適化部40は、第
1情報記憶部38に記憶された動的情報に基づいて、全
ての手続の配置最適化を行って配置情報を生成し、第2
情報記憶部39に記憶する。このステップSC4の処理
は、上記した第1の実施例におけるステップSA5の処
理とほぼ同様であるので、その説明を省略する。ステッ
プSC5では、ライブラリ生成部43は、第1ライブラ
リ記憶部41に記憶された各再配置可能ライブラリにつ
いて、手続単位を認識して手続毎に配置可能な再配置可
能ライブラリに変換し、第2ライブラリ記憶部42に記
憶する。このステップSC5の処理は、上記した第1の
実施例におけるステップSA1の処理とほぼ同様である
ので、その説明を省略する。ステップSC6では、コン
パイラ35は、原始プログラムを再配置可能目的プログ
ラムにコンパイルした後、ステップSC5におけるライ
ブラリ生成部43の処理と同様の処理により、再配置可
能目的プログラムを手続毎に配置可能な再配置可能目的
プログラムに変換して第2プログラム記憶部32に記憶
する。ステップSC7では、リンカ36は、第2情報記
憶部39に記憶された配置情報に基づいて、手続毎に配
置可能な再配置可能目的プログラムと手続毎に配置可能
な再配置可能ライブラリとをリンクして実行可能な最終
的な目的プログラムを生成して第4プログラム記憶部3
4に記憶した後、一連の処理を終了する。このように、
この例の構成によれば、プロファイラ45が動的情報を
収集する機能を有しない場合でも、第1の実施例の場合
とほぼ同様の効果を得ることがでできる。
【0054】以上、この発明の実施例を図面を参照して
詳述してきたが、具体的な構成はこの実施例に限られる
ものではなく、この発明の要旨を逸脱しない範囲の設計
の変更等があってもこの発明に含まれる。例えば、上述
の実施例においては、この発明を1つの原始プログラム
から1つの最終的な目的プログラムを生成する場合に適
用する例を示したが、これに限定されず、この発明を複
数の原始プログラムをそれぞれ再配置可能目的プログラ
ムにコンパイルした後、それらをリンカ36でリンクし
て1つの最終的な目的プログラムを生成する場合に適用
しても、もちろん良い。また、上述の各実施例において
は、各プログラム記憶部31〜34、各情報記憶部3
8,39及びライブラリ記憶部41,42は、それぞれ
別々の記憶媒体で構成する例を示したが、これに限定さ
れず、例えば、同一の記憶媒体の異なる記憶領域で構成
するようにしても良い。この場合、各プログラム記憶部
31〜34及びライブラリ記憶部41,42は、記憶対
象が多くの記憶容量を要するプログラムや再配置可能ラ
イブラリであるので、FDやHD、あるいはCD−RO
Mで構成し、各情報記憶部38,39は、記憶対象が比
較的少ない記憶容量で済むデータであるので、ROMや
RAM等の半導体メモリで構成するようにしても良い。
【0055】また、上述の各実施例においては、各手段
をハードウェアで構成した例を示したが、これに限定さ
れない。即ち、上記プログラム変換装置を、CPU(中
央処理装置)と、ROMやRAM等の内部記憶装置と、
FDD(フロッピー・ディスク・ドライバ)、HDD
(ハード・ディスク・ドライバ)、CD−ROMドライ
バ等の外部記憶装置と、出力手段と、入力手段とを有す
るコンピュータによって構成し、上記コンパイラ35,
44、リンカ36及びプロファイラ37,45がCPU
によって構成され、これらの機能がプログラム変換プロ
グラムとして、ROM等の半導体メモリや、FD、HD
やCD−ROM等の記憶媒体に記憶されていると構成し
ても良い。この場合、上記内部記憶装置、あるいは外部
記憶装置が各プログラム記憶部31〜34、各情報記憶
部38,39及びライブラリ記憶部41,42となり、
プログラム変換プログラムは、記憶媒体からCPUに読
み込まれ、CPUの動作を制御する。CPUは、プログ
ラム変換プログラムが起動されると、コンパイラ35,
44、リンカ36及びプロファイラ37,45として機
能し、プログラム変換プログラムの制御により、上記し
た処理を実行するのである。
【0056】
【発明の効果】以上説明したように、この発明の構成に
よれば、様々な手続相互間におけるキャッシュ・メモリ
上での衝突を防止できると共に、頻繁に用いる手続のキ
ャッシュ・ミスを防止できる。これにより、計算機やC
PUが目的プログラムを実行した際の実行速度を速くす
ることができる。
【図面の簡単な説明】
【図1】この発明の第1の実施例であるプログラム変換
装置の電気的構成を示すブロック図である。
【図2】同実施例で用いられる原始プログラムの一例を
示す図である。
【図3】同実施例におけるプログラム変換装置の動作を
表すフローチャートである。
【図4】同実施例における最適化部の手続の配置最適化
処理を表すフローチャートである。
【図5】手続A〜Gが占めるキャッシュ・ライン数の一
例を示す図である。
【図6】最適化部により作成される手続呼出グラフの一
例を示す図である。
【図7】同実施例における最適化部の手続の配置最適化
処理を説明するための説明図である。
【図8】配置情報の一例を示す図である。
【図9】手続の配置最適化処理を行わなかった場合の不
都合を説明するための説明図である。
【図10】図6の手続呼出グラフにおいて手続C及びD
が標準ライブラリ手続であった場合を示す図である。
【図11】標準ライブラリ手続を手続の配置最適化処理
の対象外とした場合の不都合を説明するための図であ
る。
【図12】この発明の第2の実施例であるプログラム変
換装置の電気的構成を示すブロック図である。
【図13】この発明の第3の実施例であるプログラム変
換装置の電気的構成を示すブロック図である。
【図14】この発明の第3の実施例であるプログラム変
換装置の動作を表すフローチャートである。
【図15】従来のプログラム変換装置の第1の電気的構
成例を示すブロック図である。
【図16】従来のプログラム変換装置の第2の電気的構
成例を示すブロック図である。
【図17】ダイレクト・マップ方式におけるキャッシュ
・メモリと主記憶装置との関係を説明するための図であ
る。
【図18】従来例で用いられる原始プログラムをC言語
で表現した場合の一例を示す図である。
【図19】キャッシュ・メモリ上における手続相互間の
衝突を説明するための説明図である。
【符号の説明】
35,44 コンパイラ(プログラム変換手段) 36 リンカ(結合手段) 37,45 プロファイラ(動的情報収集手段) 40 最適化部(最適化手段) 43 ライブラリ生成部(手続等変換手段)

Claims (11)

    【特許請求の範囲】
  1. 【請求項1】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された目的プログラムに変換するプログラム変換方法
    において、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンの少なくとも一部を、前記目的プログ
    ラムが前記計算機や中央処理装置で用いられる際に記憶
    される主記憶装置の任意の記憶領域に記憶可能に変換す
    る第1の処理と、前記原始プログラムを前記目的プログ
    ラムに変換する過程で得られる前記手続、関数、あるい
    はサブルーチンに関する情報に基づいて、前記第1の処
    理で変換され又は変換されなかった手続、関数、あるい
    はサブルーチンを、前記主記憶装置のいずれの記憶領域
    に記憶すべきかを決定し、その決定結果に基づいて前記
    目的プログラムを生成する第2の処理とからなることを
    特徴とするプログラム変換方法。
  2. 【請求項2】 前記手続、関数、あるいはサブルーチン
    は、ユーザが前記原始プログラム中で定義したもの、ユ
    ーザにより定義され検査が終了したもの、前記プログラ
    ミング言語において処理系で予め用意されているもの、
    命令コードの形式で予め用意されているもののうち、少
    なくとも1つからなることを特徴とする請求項1記載の
    プログラム変換方法。
  3. 【請求項3】 前記情報は、前記原始プログラムから変
    換された一時的な目的プログラムを実行することにより
    得られる、前記手続、関数、あるいはサブルーチンが実
    際に呼び出される回数を示す情報と、前記手続、関数、
    あるいはサブルーチン同士が互いを呼び出す関係を示す
    情報とからなることを特徴とする請求項1又は2記載の
    プログラム変換方法。
  4. 【請求項4】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された目的プログラムに変換するプログラム変換方法
    において、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものの少なくとも一部を、前記目的プログ
    ラムが前記計算機や中央処理装置で用いられる際に記憶
    される主記憶装置の任意の記憶領域に記憶可能に変換す
    る第1の処理と、 前記原始プログラムを目的プログラムに変換すると共
    に、前記目的プログラムについて、ユーザが前記原始プ
    ログラム中で定義した手続、関数、あるいはサブルーチ
    ンを前記主記憶装置の任意の記憶領域に記憶可能に変換
    する第2の処理と、前記第1の処理で変換された手続、
    関数、あるいはサブルーチンと、前記第2の処理で得ら
    れた目的プログラムとを結合する第3の処理と、 前記第3の処理で得られた目的プログラムを実行しつ
    つ、前記手続、関数、あるいはサブルーチンが実際に呼
    び出される回数を示す情報と、前記手続、関数、あるい
    はサブルーチン同士が互いを呼び出す関係を示す情報と
    からなる動的情報を収集する第4の処理と、 前記動的情報に基づいて、前記手続、関数、あるいはサ
    ブルーチンを、前記主記憶装置のいずれの記憶領域に記
    憶すべきかを決定し、配置情報を生成する第5の処理
    と、 前記配置情報に基づいて、前記第1の処理で変換された
    手続、関数、あるいはサブルーチンと、前記第2の処理
    で得られた目的プログラムとを結合して、最終的な目的
    プログラムを生成する第6の処理とからなることを特徴
    とするプログラム変換方法。
  5. 【請求項5】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された目的プログラムに変換するプログラム変換方法
    において、 前記原始プログラムを一時的な目的プログラムに変換す
    ると共に、前記一時的な目的プログラムを実行した際に
    前記手続、関数、あるいはサブルーチンが実際に呼び出
    される回数をカウントするコードを挿入する第1の処理
    と、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものと、前記第1の処理で得られた一時的
    な目的プログラムとを結合する第2の処理と、 前記第2の処理で得られた一時的な目的プログラムを実
    行しつつ、前記手続、関数、あるいはサブルーチンが実
    際に呼び出される回数を示す情報と、前記手続、関数、
    あるいはサブルーチン同士が互いを呼び出す関係を示す
    情報とからなる動的情報を収集する第3の処理と、 前記動的情報に基づいて、前記手続、関数、あるいはサ
    ブルーチンを、前記主記憶装置のいずれの記憶領域に記
    憶すべきかを決定し、配置情報を生成する第4の処理
    と、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものの少なくとも一部を、前記目的プログ
    ラムが前記計算機や中央処理装置で用いられる際に記憶
    される主記憶装置の任意の記憶領域に記憶可能に変換す
    る第5の処理と、 前記原始プログラムを目的プログラムに変換した後、前
    記目的プログラムについて、ユーザが前記原始プログラ
    ム中で定義した手続、関数、あるいはサブルーチンを前
    記主記憶装置の任意の記憶領域に記憶可能に変換する第
    6の処理と、 前記配置情報に基づいて、前記第5の処理で変換された
    手続、関数、あるいはサブルーチンと、前記第6の処理
    で得られた目的プログラムとを結合して、最終的な目的
    プログラムを生成する第7の処理とからなることを特徴
    とするプログラム変換方法。
  6. 【請求項6】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された目的プログラムに変換するプログラム変換装置
    において、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンの少なくとも一部を、前記目的プログ
    ラムが前記計算機や中央処理装置で用いられる際に記憶
    される主記憶装置の任意の記憶領域に記憶可能に変換す
    る手続等変換手段と、 前記原始プログラムを前記目的プログラムに変換する過
    程で得られる前記手続、関数、あるいはサブルーチンに
    関する情報に基づいて、前記手続等変換手段で変換され
    又は変換されなかった手続、関数、あるいはサブルーチ
    ンを、前記主記憶装置のいずれの記憶領域に記憶すべき
    かを決定し、その決定結果に基づいて前記目的プログラ
    ムを生成するプログラム変換手段とを備えてなることを
    特徴とするプログラム変換装置。
  7. 【請求項7】 前記手続、関数、あるいはサブルーチン
    は、ユーザが前記原始プログラム中で定義したもの、ユ
    ーザにより定義され検査が終了したもの、前記プログラ
    ミング言語において処理系で予め用意されているもの、
    命令コードの形式で予め用意されているもののうち、少
    なくとも1つからなることを特徴とする請求項6記載の
    プログラム変換装置。
  8. 【請求項8】 前記情報は、前記原始プログラムから変
    換された一時的な目的プログラムを実行することにより
    得られる、前記手続、関数、あるいはサブルーチンが実
    際に呼び出される回数を示す情報と、前記手続、関数、
    あるいはサブルーチン同士が互いを呼び出す関係を示す
    情報とからなることを特徴とする請求項6又は7記載の
    プログラム変換装置。
  9. 【請求項9】 プログラミング言語で記述された原始プ
    ログラムを計算機や中央処理装置が実行可能な言語で記
    述された目的プログラムに変換するプログラム変換装置
    において、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものの少なくとも一部を、前記目的プログ
    ラムが前記計算機や中央処理装置で用いられる際に記憶
    される主記憶装置の任意の記憶領域に記憶可能に変換す
    る手続等変換手段と、 前記原始プログラムを目的プログラムに変換すると共
    に、前記目的プログラムについて、ユーザが前記原始プ
    ログラム中で定義した手続、関数、あるいはサブルーチ
    ンを前記主記憶装置の任意の記憶領域に記憶可能に変換
    するプログラム変換手段と、 前記手続等変換手段で変換された手続、関数、あるいは
    サブルーチンと、前記プログラム変換手段で得られた目
    的プログラムとを結合する結合手段と、 前記結合手段で得られた目的プログラムを実行しつつ、
    前記手続、関数、あるいはサブルーチンが実際に呼び出
    される回数を示す情報と、前記手続、関数、あるいはサ
    ブルーチン同士が互いを呼び出す関係を示す情報とから
    なる動的情報を収集する動的情報収集手段と、 前記動的情報に基づいて、前記手続、関数、あるいはサ
    ブルーチンを、前記主記憶装置のいずれの記憶領域に記
    憶すべきかを決定し、配置情報を生成する最適化手段と
    を備え、 前記結合手段は、前記配置情報に基づいて、前記手続等
    変換手段で変換された手続、関数、あるいはサブルーチ
    ンと、前記プログラム変換手段で得られた目的プログラ
    ムとを結合して、最終的な目的プログラムを生成するこ
    とを特徴とするプログラム変換装置。
  10. 【請求項10】 プログラミング言語で記述された原始
    プログラムを計算機や中央処理装置が実行可能な言語で
    記述された目的プログラムに変換するプログラム変換装
    置において、 前記原始プログラムを一時的な目的プログラムに変換す
    ると共に、前記一時的な目的プログラムを実行した際に
    前記手続、関数、あるいはサブルーチンが実際に呼び出
    される回数をカウントするコードを挿入するプログラム
    変換手段と、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものと、前記プログラム変換手段で得られ
    た一時的な目的プログラムとを結合する結合手段と、 前記結合手段で得られた一時的な目的プログラムを実行
    しつつ、前記手続、関数、あるいはサブルーチンが実際
    に呼び出される回数を示す情報と、前記手続、関数、あ
    るいはサブルーチン同士が互いを呼び出す関係を示す情
    報とからなる動的情報を収集する動的情報収集手段と、 前記動的情報に基づいて、前記手続、関数、あるいはサ
    ブルーチンを、前記主記憶装置のいずれの記憶領域に記
    憶すべきかを決定し、配置情報を生成する最適化手段
    と、 前記原始プログラムで用いられている手続、関数、ある
    いはサブルーチンのうち、ユーザにより定義され検査が
    終了したもの、前記プログラミング言語において処理系
    で予め用意されているもの、命令コードの形式で予め用
    意されているものの少なくとも一部を、前記目的プログ
    ラムが前記計算機や中央処理装置で用いられる際に記憶
    される主記憶装置の任意の記憶領域に記憶可能に変換す
    る手続等変換手段とを備え、 前記プログラム変換手段は、前記原始プログラムを目的
    プログラムに変換すると共に、前記目的プログラムにつ
    いて、ユーザが前記原始プログラム中で定義した手続、
    関数、あるいはサブルーチンを前記主記憶装置の任意の
    記憶領域に記憶可能に変換し、前記結合手段は、前記配
    置情報に基づいて、前記手続等変換手段で変換された手
    続、関数、あるいはサブルーチンと、前記プログラム変
    換手段で得られた目的プログラムとを結合して、最終的
    な目的プログラムを生成することを特徴とするプログラ
    ム変換装置。
  11. 【請求項11】 コンピュータに請求項1乃至10のい
    ずれか1つに記載の機能を実現させるためのプログラム
    変換プログラムを記憶した記憶媒体。
JP03285298A 1998-02-16 1998-02-16 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体 Expired - Fee Related JP3178403B2 (ja)

Priority Applications (5)

Application Number Priority Date Filing Date Title
JP03285298A JP3178403B2 (ja) 1998-02-16 1998-02-16 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US09/249,705 US6282707B1 (en) 1998-02-16 1999-02-12 Program transformation method and program transformation system
EP99103011A EP0936543A3 (en) 1998-02-16 1999-02-15 Program transformation method and program transformation system
KR1019990005389A KR19990072721A (ko) 1998-02-16 1999-02-18 프로그램변환방법및프로그램변환시스템
CN99100822A CN1228558A (zh) 1998-02-16 1999-02-23 程序变换方法和程序变换系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP03285298A JP3178403B2 (ja) 1998-02-16 1998-02-16 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体

Publications (2)

Publication Number Publication Date
JPH11232117A true JPH11232117A (ja) 1999-08-27
JP3178403B2 JP3178403B2 (ja) 2001-06-18

Family

ID=12370378

Family Applications (1)

Application Number Title Priority Date Filing Date
JP03285298A Expired - Fee Related JP3178403B2 (ja) 1998-02-16 1998-02-16 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体

Country Status (5)

Country Link
US (1) US6282707B1 (ja)
EP (1) EP0936543A3 (ja)
JP (1) JP3178403B2 (ja)
KR (1) KR19990072721A (ja)
CN (1) CN1228558A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005266941A (ja) * 2004-03-16 2005-09-29 Fujitsu Ltd キャッシュカラーリング方法
JP2009032198A (ja) * 2007-07-30 2009-02-12 Fujitsu Microelectronics Ltd キャッシュカラーリング方法
US7571432B2 (en) 2003-10-17 2009-08-04 Panasonic Corporation Compiler apparatus for optimizing high-level language programs using directives
US7689976B2 (en) 2003-10-16 2010-03-30 Panasonic Corporation Compiler apparatus and linker apparatus
JP2010218218A (ja) * 2009-03-17 2010-09-30 Nec Corp プログラムのメモリ空間への配置方法、装置、およびプログラム

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3141836B2 (ja) * 1998-01-26 2001-03-07 日本電気株式会社 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体
US6378066B1 (en) * 1999-02-04 2002-04-23 Sun Microsystems, Inc. Method, apparatus, and article of manufacture for developing and executing data flow programs, and optimizing user input specifications
JP2001166948A (ja) * 1999-12-07 2001-06-22 Nec Corp プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6681386B1 (en) * 2000-05-22 2004-01-20 International Business Machines Corporation Method, system, and program for parameter expansion, generation, and execution of scripts in a networked environment
JP2002024029A (ja) * 2000-07-11 2002-01-25 Toshiba Corp コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
US7003507B2 (en) * 2000-09-18 2006-02-21 International Business Machines Corporation Scalable propagation-based methods for call graph construction
US6918110B2 (en) * 2001-04-11 2005-07-12 Hewlett-Packard Development Company, L.P. Dynamic instrumentation of an executable program by means of causing a breakpoint at the entry point of a function and providing instrumentation code
FI111107B (fi) * 2001-05-15 2003-05-30 Softageneraattori Oy Menetelmä translaattorin kehittämiseksi ja vastaava järjestelmä
US8484282B2 (en) * 2002-03-21 2013-07-09 International Business Machines Corporation High-speed content transformation engine
US7100157B2 (en) * 2002-09-24 2006-08-29 Intel Corporation Methods and apparatus to avoid dynamic micro-architectural penalties in an in-order processor
JP2004362086A (ja) * 2003-06-03 2004-12-24 Matsushita Electric Ind Co Ltd 情報処理装置および機械語プログラム変換装置
US8214819B2 (en) * 2004-07-09 2012-07-03 Hewlett-Packard Development Company, L.P. Determining call counts in a program
WO2006110069A1 (en) * 2005-04-13 2006-10-19 Telefonaktiebolaget Lm Ericsson (Publ) Data value coherence in computer systems
US8266605B2 (en) * 2006-02-22 2012-09-11 Wind River Systems, Inc. Method and system for optimizing performance based on cache analysis
US20070260856A1 (en) * 2006-05-05 2007-11-08 Tran Thang M Methods and apparatus to detect data dependencies in an instruction pipeline
US9454390B2 (en) * 2008-04-04 2016-09-27 Intuit Inc. Executable code generated from common source code
US8103850B2 (en) * 2009-05-05 2012-01-24 International Business Machines Corporation Dynamic translation in the presence of intermixed code and data
US10318400B2 (en) * 2014-02-13 2019-06-11 Infosys Limited Methods of software performance evaluation by run-time assembly code execution and devices thereof
RU2016137176A (ru) 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Связывание преобразованного исходного кода с первоначальным исходным кодом с помощью метаданных
RU2016137177A (ru) * 2016-09-16 2018-03-19 Оракл Интернэйшнл Корпорейшн Усовершенствованное преобразование исходного кода языка программирования

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01118931A (ja) 1987-11-02 1989-05-11 Hitachi Ltd プログラム変換方式
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US5452457A (en) * 1993-01-29 1995-09-19 International Business Machines Corporation Program construct and methods/systems for optimizing assembled code for execution
JP3417984B2 (ja) * 1993-09-10 2003-06-16 株式会社日立製作所 キャッシュ競合削減コンパイル方法
US5539907A (en) * 1994-03-01 1996-07-23 Digital Equipment Corporation System for monitoring computer system performance
US5689712A (en) * 1994-07-27 1997-11-18 International Business Machines Corporation Profile-based optimizing postprocessors for data references
JPH0934725A (ja) 1995-07-15 1997-02-07 Nec Corp 言語処理装置及び言語処理方法
US5724586A (en) * 1996-09-30 1998-03-03 Nec Research Institute, Inc. Method for improving cache locality of a computer program
US5963972A (en) * 1997-02-24 1999-10-05 Digital Equipment Corporation Memory architecture dependent program mapping

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7689976B2 (en) 2003-10-16 2010-03-30 Panasonic Corporation Compiler apparatus and linker apparatus
US7571432B2 (en) 2003-10-17 2009-08-04 Panasonic Corporation Compiler apparatus for optimizing high-level language programs using directives
JP2005266941A (ja) * 2004-03-16 2005-09-29 Fujitsu Ltd キャッシュカラーリング方法
JP4554241B2 (ja) * 2004-03-16 2010-09-29 富士通セミコンダクター株式会社 キャッシュカラーリング方法
JP2009032198A (ja) * 2007-07-30 2009-02-12 Fujitsu Microelectronics Ltd キャッシュカラーリング方法
JP2010218218A (ja) * 2009-03-17 2010-09-30 Nec Corp プログラムのメモリ空間への配置方法、装置、およびプログラム

Also Published As

Publication number Publication date
EP0936543A2 (en) 1999-08-18
JP3178403B2 (ja) 2001-06-18
US6282707B1 (en) 2001-08-28
EP0936543A3 (en) 2003-11-19
KR19990072721A (ko) 1999-09-27
CN1228558A (zh) 1999-09-15

Similar Documents

Publication Publication Date Title
JP3178403B2 (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
JP3327818B2 (ja) プログラム変換装置及び記録媒体
US8296746B2 (en) Optimum code generation method and compiler device for multiprocessor
JP5209059B2 (ja) ソース・コード処理方法、システム、及びプログラム
US6973644B2 (en) Program interpreter
US6292940B1 (en) Program complete system and its compile method for efficiently compiling a source program including an indirect call for a procedure
US5946491A (en) Register allocation method and apparatus for gernerating spill code as a function of register pressure compared to dual thresholds
JP2005216177A (ja) コンフィグラブル・プロセッサの設計装置、設計方法、ライブラリの最適化方法、プロセッサ、及びプロセッサを備えた半導体装置の製造方法
US20060195812A1 (en) Designing system and method for designing a system LSI
CN101084485A (zh) 用于改善片上仿真系统中高级语言的仿真速度的装置和方法
EP0703532A2 (en) Embedded program flow information for object code manipulation
Zhuang et al. Storage assignment optimizations through variable coalescence for embedded processors
JP2001166948A (ja) プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6938248B2 (en) Program preparation apparatus
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
Leupers et al. Instruction set extraction from programmable structures
JPH01118931A (ja) プログラム変換方式
CN116414396A (zh) 一种llvm的目标定义文件生成方法、装置和电子设备
EP2336883A1 (en) Programming system in multi-core, and method and program of the same
JPH10320212A (ja) キャッシュ向け最適化方法
US20120226890A1 (en) Accelerator and data processing method
JP3735723B1 (ja) ハードウエア記述言語合成ツール及びそれを利用した集積回路の設計方法
JP2003202995A (ja) 中間コード前処理装置、中間コード実行システム、中間コード前処理プログラムおよび中間コード実行プログラム
JP2729795B2 (ja) 並列計算機及びその制御方法
JPH10275088A (ja) リンク最適化方法

Legal Events

Date Code Title Description
LAPS Cancellation because of no payment of annual fees