JP3141836B2 - 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体 - Google Patents

言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体

Info

Publication number
JP3141836B2
JP3141836B2 JP10012695A JP1269598A JP3141836B2 JP 3141836 B2 JP3141836 B2 JP 3141836B2 JP 10012695 A JP10012695 A JP 10012695A JP 1269598 A JP1269598 A JP 1269598A JP 3141836 B2 JP3141836 B2 JP 3141836B2
Authority
JP
Japan
Prior art keywords
function
called
functions
overlap
language processing
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.)
Expired - Fee Related
Application number
JP10012695A
Other languages
English (en)
Other versions
JPH11212798A (ja
Inventor
梨香 小野
敬至 三浦
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 JP10012695A priority Critical patent/JP3141836B2/ja
Priority to EP99101337A priority patent/EP0933702A3/en
Priority to US09/237,254 priority patent/US6625806B1/en
Publication of JPH11212798A publication Critical patent/JPH11212798A/ja
Application granted granted Critical
Publication of JP3141836B2 publication Critical patent/JP3141836B2/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/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/445Exploiting fine grain parallelism, i.e. parallelism at instruction level

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)

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】この発明は、コンピュータの
言語処理に係り、詳しくは、キャッシュメモリの使用効
率を向上させるための、言語処理方法、言語処理装置及
び言語処理プログラムを記録した記憶媒体に関する。
【0002】
【従来の技術】高速なキャッシュメモリ(以下、キャッ
シュと略す)上にプログラムメモリ(以下、メモリと略
す)のデータを保持することによって、メモリのアクセ
ス頻度を減らして、コンピュータを高速化する方法が一
般化している。しかしながら、キャッシュはその容量が
限られているので、すべてのデータを保持することは不
可能であり、そのためキャッシュのアクセス競合に基づ
くキャッシュのミスヒット(キャッシュミス)を発生す
ることがある。一方、近年において、マイクロプロセッ
サの演算速度が向上するのに伴って、コンピュータの動
作速度向上のために、メモリアクセスがネックになる場
合が多い。そこで、キャッシュミスをできる限り回避す
ることによって、メモリのアクセス回数を削減すること
が必要となる。キャッシュミスを削減するためには、FO
RTRAN、COBOL、C言語やアセンブリ言語等のプログラミ
ング言語で書かれた状態のソース(原始)プログラムか
らキャッシュメモリを有するコンピュータで動作させる
ためのオブジェクト(目的)プログラムに翻訳するコン
パイル時、例えば呼出し回数の多い順にコードを配置す
ることによって、プログラム実行時におけるキャッシュ
のミスヒットが少なくなるようにする、メモリアクセス
最適化の手法が知られている(例えは特開平5−324
281号公報、特開平7−84799号公報、特開平8
−328870号公報参照)。
【0003】さらに、コンパイラのコード並べ替えによ
るメモリ利用の改善を図るものとして、命令キャッシュ
の使用効率を高めるために、メモリ上のアドレスを定め
るリンク時に、関数(サブルーチン)間の呼出し関係を
考慮して関数の配置位置を決定するアルゴリズムが知ら
れている(参考文献:A.H.Hashemi,D.R.Kaeli,B.Calde
r,∧Efficient Procedure Mapping Using Cache Line C
oloring",ACM SIGPLAN '97)。なお、この論文では、メ
モリブロックのアドレス下位と、メモリブロックがマッ
ピングされるキャッシュブロックのアドレスが、一意に
対応するダイレクトマップ方式の場合について述べてい
るが、このアルゴリズムは、連想度に等しい数のキャッ
シュブロックのエントリが、メモリブロックのアドレス
下位によって決定されるセット・アソシアティブ方式の
場合にも容易に適用できる。このアルゴリズムでは、ま
ず関数呼出し情報として、関数呼出しグラフ(グラフの
各辺には、関数の呼出し回数を示す重みが付されてい
る)と、関数ごとのコードサイズの情報を入力する。こ
の関数呼出し情報は、プログラムを実行して収集したプ
ロファイル情報と、ソースプログラム中の関数の呼出し
関係を静的に解析した結果から得られたものである。そ
して、関数を、利用度の高いグループと利用度の低いグ
ループとに分けて、利用度の高いグループについて、関
数呼出しグラフにおける重みの大きな辺の両端の関数か
ら順に配置を決定する。この配置決定の際に、それぞれ
の関数が占めるキャッシュブロックに関してカラーリン
グ(色付け:仮想的な標識付け)を行なうことによっ
て、キャッシュ上におけるコンフリクト(衝突)を回避
する。このような配置を行なうことによって、キャッシ
ュ上に発生したデータが書き込まれない隙間は、その
後、利用度の低いグループの関数で埋めるようにする。
【0004】
【発明が解決しようとする課題】しかしながら、上記論
文記載のカラーリングによる関数配置方式では、呼び側
関数/呼ばれ側関数(caller/callee)のペアについ
て、呼び出し回数の多いものから順次メモリ上に配置し
てゆくようにしている。そこで多くの関数から高い頻度
で呼び出されるような関数がいくつかある場合には、こ
のような関数どうしがキャッシュブロック上でコンフリ
クトするような配置になる可能性がある。例えば、浮動
小数点命令を持たないプロセッサでは、コンパイラが浮
動小数点の四則演算や整数型との変換の関数をライブラ
リとして提供し、ユーザプログラム中の浮動小数点演算
等に対して、ライブラリ関数を呼び出すコードを生成す
ることによって、このような関数を利用できるようにす
る。このようなライブラリ関数はランタイムルーチンと
呼ばれ、通常のライブラリ関数より比較的サイズが小さ
く、特に高い頻度で多くの関数から呼び出される。しか
しながら、従来のコンパイル装置では、このようなラン
タイムルーチンについても、特定の数個程度の関数から
呼び出されるだけの一般の関数と一緒にして、呼び側関
数/呼ばれ側関数のペアについて呼び出し回数の多いも
のから、順次メモリ上の配置を決定するようにしてい
た。そのため、ランタイムルーチンを高頻度で呼び出す
関数が多数ある場合には、複数のランタイムルーチンが
キャッシュ上でコンフリクトするような配置になる可能
性がある。
【0005】図7は、従来の関数配置方法の説明図であ
って、キャッシュ上におけるランタイムルーチンのコン
フリクト発生を説明するものである。いま、関数A、関
数B、ランタイムルーチンaddf、ランタイムルーチンmu
lfの間における呼出し関係は、図7(a)に示す関数呼
出しグラフに示されるようなものであり、また、プログ
ラムを収容したメモリ201には、図7(b)に示すよ
うに、203で示す関数Aに対して、205で示すラン
タイムルーチンaddfが最適配置されており、204で示
す関数Bに対して、206で示すランタイムルーチンmu
lfが最適配置されているものとする。この場合に、関数
Bに関する処理を行なうために、メモリ201からキャ
ッシュ202に対して、204Aで示す関数Bと206
Aで示すランタイムルーチンmulfとをロードし、さらに
205Aで示すランタイムルーチンaddfをロードする
と、ランタイムルーチンaddfとランタイムルーチンmulf
とはキャッシュ上のアドレスが重なりあう関係になって
いるため、コンフリクトしたことが示されている。
【0006】特に、ランタイムルーチン中、四則演算等
は、一般に、関数内で繰り返して行なわれることが多い
ので、キャッシュ上でコンフリクトしたランタイムルー
チンの間では、相互に相手のランタイムルーチンを追い
出しあう状態になることがある。このような状態は「ス
ラッシング」と呼ばれるが、追い出された関数は、次の
呼出し時、再度、メモリからロードしなければならない
ため、スラッシングが発生すると、プログラムの実行速
度が著しく低下する、という問題があった。
【0007】この発明は、上述の事情に鑑みてなされた
ものであって、ソースプログラムを翻訳してオブジェク
トプログラムを生成する際に、ランタイムルーチン相互
によるスラッシングの発生を回避できる言語処理方法、
言語処理装置及び言語処理プログラムを記録した記憶媒
体を提供することを目的としている。
【0008】
【課題を解決するための手段】上記課題を解決するため
に、請求項1記載の発明は、ソースプログラムからキャ
ッシュを搭載したコンピュータ上で動作するオブジェク
トプログラムに翻訳する言語処理方法に係り、該ソース
プログラム中の呼び側関数に対して呼ばれ側関数が呼出
し回数の多い順に最適配置されるように各関数の配置を
決定するステップと、該決定された関数配置において複
数の関数から呼び出される呼ばれ側関数を判定して、該
呼ばれ側関数が上記キャッシュ上で他の呼ばれ側関数と
同じ配置位置で重なる関係になることを検出するステッ
プと、該重なり発生が検出された各呼ばれ側関数を共通
に呼び出す呼び側関数のうち最も呼出し頻度が高いもの
を選択するステップと、該選択された呼び側関数に対し
て、上記重なりが検出された呼ばれ側関数中のいずれか
一以外をもとの関数の複製に置き換えて上記関数配置に
おいてキャッシュ上で該一の呼ばれ側関数と重ならない
位置に再配置するステップとを、上記呼ばれ側関数どう
しの重なりが検出されなくなるまで又は重なりが検出さ
れても上記関数配置決定が所定回数を超えるまで繰り返
して実行したのち、最終的な上記関数配置に基づいて上
記オブジェクトプログラムを生成することを特徴として
いる。
【0009】また、請求項2記載の発明は、請求項1記
載の言語処理方法に係り、上記呼ばれ側関数に対する複
数の関数からの呼出し頻度が所定数以上であることを特
徴としている。
【0010】また、請求項3記載の発明は、請求項1記
載の言語処理方法に係り、上記呼び側関数に対して、上
記重なりが検出された呼ばれ側関数のうち最適配置され
ていない呼ばれ側関数を、もとの関数の複製に置き換え
ることを特徴としている。
【0011】また、請求項4記載の発明は、請求項1,
2又は3記載の言語処理方法に係り、上記各呼ばれ側関
数がランタイムルーチンであることを特徴としている。
【0012】また、請求項5記載の発明は、請求項4記
載の言語処理方法に係り、上記ランタイムルーチンが、
浮動小数点型の数の加算、減算、乗算、除算若しくは比
較の各演算、又は該浮動小数点型の数と整数型の数との
相互の変換のうちのいずれか一又はこれらの組み合わせ
であることを特徴としている。
【0013】また、請求項6記載の発明は、請求項1,
2,3,4又は5記載の言語処理方法を実行するプログ
ラムを記録したコンピュータ読み取り可能な記憶媒体に
係り、上記ソースプログラム中の呼び側関数に対して呼
ばれ側関数が呼出し回数の多い順に最適配置されるよう
に各関数の配置を決定し、該決定された関数配置におい
て複数の関数から呼び出される呼ばれ側関数を判定し
て、該呼ばれ側関数が上記キャッシュ上で他の呼ばれ側
関数と重なる関係になることを検出し、該重なり発生が
検出された各呼ばれ側関数を共通に呼び出す呼び側関数
のうち最も呼出し頻度が高いものを選択し、該選択され
た呼び側関数に対して、上記重なりが検出された呼ばれ
側関数中のいずれか一以外をもとの関数の複製に置き換
えて上記関数配置においてキャッシュ上で該一の呼ばれ
側関数と重ならない位置に再配置する処理を、上記呼ば
れ側関数どうしの重なりが検出されなくなるまで又は重
なりが検出されても上記関数配置決定が所定回数を超え
るまで繰り返して実行したのち、最終的な上記関数配置
に基づいてオブジェクトプログラムを生成するプログラ
ムを記録したことを特徴としている。
【0014】また、請求項7記載の発明は、ソースプロ
グラムからキャッシュを搭載したコンピュータ上で動作
するオブジェクトプログラムに翻訳する言語処理装置に
係り、該ソースプログラム中の呼び側関数に対して呼ば
れ側関数が呼出し回数の多い順に最適配置されるように
各関数の配置を決定する関数配置決定手段と、該決定さ
れた関数配置において複数の関数から呼び出される呼ば
れ側関数を判定して、該呼ばれ側関数が上記キャッシュ
上で他の呼ばれ側関数と重なる関係になることを検出す
る呼ばれ側関数重なり検出手段と、該重なり発生が検出
された各呼ばれ側関数を共通に呼び出す呼び側関数のう
ち最も呼出し頻度が高いものを選択する呼び側関数選択
手段と、該選択された呼び側関数に対して、上記重なり
が検出された呼ばれ側関数中のいずれか一以外をもとの
関数の複製に置き換えて上記関数配置においてキャッシ
ュ上で該一の呼ばれ側関数と重ならない位置に再配置す
る複製追加手段と、該各関数の配置に基づいて上記オブ
ジェクトプログラムを生成するオブジェクトプログラム
生成手段とを備えてなることを特徴としている。
【0015】
【作用】この発明の構成では、ソースプログラムにおけ
る関数配置を決定したのち、複数の呼び側関数から高い
頻度で呼び出される呼ばれ側関数を判定して、その呼ば
れ側関数が、他の呼ばれ側関数とキャッシュ上で重なる
か否かを調べる。重なる呼ばれ側関数を検出したとき
は、これを共通に呼び出す呼び側関数を探し、そのうち
最も呼出し回数の多いものを選択して、これに呼ばれ側
関数の一方の複製を配置することによって、再度、関数
配置を決定する。このような手順を、キャッシュ上での
呼ばれ側関数のコンフリクトがなくなるまで繰り返して
行ない、最後にソースプログラムをリンクして、オブジ
ェクトプログラムを生成するので、プログラム実行時に
おいて、頻繁に呼び出される呼ばれ側関数どうしによる
スラッシングが回避される。
【0016】
【発明の実施の形態】以下、図面を参照して、この発明
の実施の形態について説明する。説明は、実施例を用い
て具体的に行なう。図1は、この発明の一実施例である
コンパイル処理装置の電気的構成を示すブロック図、図
2は、同装置における処理の流れを示すフローチャー
ト、図3は、同装置における関数呼び出し情報の説明
図、図4は、同装置における関数配置情報の説明図、図
5は、同装置におけるリンク指示情報の説明図、図6
は、同装置によって得られた関数配置を例示する図であ
る。この例のコンパイル処理装置は、図1に示すよう
に、関数配置決定部1と、ランタイムルーチン重なり検
出部2と、スラッシング発生関数選択部3と、ランタイ
ムルーチン複製追加部4と、オブジェクトプログラム生
成部5とから概略構成されている。
【0017】関数配置決定部1は、関数呼出し情報を用
いて従来と同様の関数配置決定方法に従って、プログラ
ム上の関数配置を決定するとともに、ランタイムルーチ
ンの複製の生成に応じて更新される。ランタイムルーチ
ン重なり検出部2は、関数配置決定部1で決定された関
数の配置から、キャッシュ上で重なることとなる配置の
ランタイムルーチンの有無を検出する。スラッシング発
生関数選択部3は、ランタイムルーチン重なり検出部2
で重なることが検出されたランタイムルーチンを、両方
とも呼び出す関係にある関数のうち、最も呼出し回数が
多いものを選択する。ランタイムルーチン複製追加部4
は、スラッシング発生関数選択部3で選択された関数が
呼び出す、重なりが検出されたランタイムルーチンの一
方の複製を生成するとともに、関数配置決定部1で決定
された関数配置における、スラッシング発生関数選択部
3で選択された関数からのランタイムルーチンの呼出し
を、生成された複製のランタイムルーチンに変更する。
オブジェクトプログラム生成部5は、このようにして更
新された関数配置に基づくリンク指示情報に応じてオブ
ジェクトプログラムを生成する。
【0018】以下、図1乃至図5を参照して、この例の
コンパイル処理装置の動作について説明する。関数配置
決定部1は、関数呼出し情報11を用い、ソースプログ
ラム12、ランタイムルーチン13のそれぞれのファイ
ルを参照して、呼出し回数が多い関数から順にプログラ
ム上の配置を決定して(図2のステップS1)、関数配
置情報14とリンク指示情報15とを出力する。関数呼
出し情報は、図3(a)に示す関数呼出しグラフと、図
3(b)に示す関数サイズ表とからなっている。関数呼
出しグラフは、関数間の呼出し関係と、呼出し回数とを
示すものであって、例えば、メインルーチンMから、関
数Aと関数Bとを呼び出し、さらに関数Aから関数addf
を呼出し、関数Bから関数addfと関数mulfを呼び出す際
の、関数間の相互の関係を辺で示し、そのときの、関数
呼出し回数を辺上の重みとして示している。また、関数
サイズ表は、このときのそれぞれの関数の、キャッシュ
上における占有ブロック数を示している。この例では、
キャッシュの容量が4Kバイトであって、各ブロックが
32バイトからなるものとしている。関数配置情報14
は、図4に示すように、メモリ上に配置されるそれぞれ
の関数について、ソースファイル名と、メモリ上の配置
アドレス(開始アドレスを示す)との対応を示してい
る。なおここで、file1.c 、file2.c はソースプログラ
ム12中のファイルを示し、addf.s、mulf.sはランタイ
ムルーチン13中のファイルを示している。リンク指示
情報15は、図5に示すように、オブジェクトプログラ
ム生成のためにリンカに与えるべき関数の配置指示を示
し、関数名と、それが収容されるオブジェクトファイル
(オブジェクトプログラム生成のためのファイル)名
と、メモリ上の配置アドレスとの対応を示している。
【0019】次に、ランタイムルーチン重なり検出部2
は、関数配置情報14を参照して、複数の関数から高い
頻度で呼び出されるランタイムルーチンを検出し(ステ
ップS2)、次にこのランタイムルーチンのキャッシュ
上の配置を、キャッシュ上の占有位置を計算して求める
(ステップS3)ことによって調べて、キャッシュ上で
のランタイムルーチンの重なりがあるか否かを検出する
(ステップS4)。ダイレクトマップ方式のキャッシュ
では、関数のキャッシュ上の占有位置は、メモリ上の関
数アドレスをキャッシュサイズで割った剰余である。メ
モリからキャッシュへのロードは、ブロック単位で行わ
れるので、ラインタイムルーチンが同じキャッシュブロ
ックにロードされて重なるか否かを判定するには、キャ
ッシュサイズが4096バイト、ブロックサイズが32
バイトであれば、アドレスの下位12ビットのうち、下
位5ビットを除外した部分が一致するか否かを調べれば
良い。
【0020】ランタイムルーチンの重なりが検出された
とき(のステップS5)は、配置決定が所定回数以下で
あるか否かをみて(ステップS6)、所定回数以下のと
きは、スラッシング発生関数選択部3において、関数呼
出し情報14を参照して、重なるランタイムルーチン、
例えばaddfとmulfをともに呼び出す関係にある関数を判
定する(ステップS7)。そして判定された関数のう
ち、ランタイムルーチンaddfとmulfに対する呼びだし回
数の合計が最大の関数を一つ(この場合は関数B)選択
する(ステップS8)。
【0021】ランタイムルーチン複製追加部4は、選択
された関数Bについて、重なりが検出されたランタイム
ルーチンaddfとmulfのうちの一方のランタイムルーチ
ン、すなわち、図3(a)に示すように、関数Bからの
呼出し回数がランタイムルーチンmulfより少ない方のラ
ンタイムルーチンaddfを、ランタイムルーチンソースフ
ァイル16から読み出して複製して、ランタイムルーチ
ンaddf2を生成して(ステップS9)、ソースプログラ
ム12に追加する。そして関数Bからのランタイムルー
チンaddfの呼出しを、複製されたランタイムルーチンad
df2の呼出しに変更する(ステップS10)。さらに、
呼び出すべきランタイムルーチンの変更に伴って、関数
呼出し情報11における、ランタイムルーチンaddfの呼
出しを、ランタイムルーチンaddf2の呼出しに更新する
(ステップS11)。なお、ランタイムルーチンaddfの
複製を作る代わりにランタイムルーチンmulfの複製を作
るようにしても良い。しかしながら、この場合は、複製
されたランタイムルーチンmulfは、キャッシュ上におい
て複製前の位置とは異なる位置に、ランタイムルーチン
addfと重ならないように、配置されなければならないの
で、煩雑であり、しかも、キャッシュ容量の使用効率が
低下する虞もある。したがって、この場合は、関数Bに
対して最適配置されていないランタイムルーチンaddfの
複製を作成する方が、キャッシュの使用効率を向上でき
る可能性が高い。
【0022】以上の手順を、キャッシュ上でのランタイ
ムルーチンどうしの重なりが検出されなくなるまで(ス
テップS5)、又はランタイムルーチンどうしの重なり
が検出されても、関数配置決定部1における配置決定が
所定回数を超えるまで(ステップS6)、繰り返して行
なう。最後に、オブジェクトプログラム生成部5は、リ
ンク指示情報15に従って、ソースプログラム12とラ
ンタイムルーチン13のデータをリンクして、オブジェ
クトプログラム17を生成する。
【0023】次に図6を参照して、この例の言語処理装
置によって得られた関数配置について説明する。この例
では、関数A、関数B、ランタイムルーチンaddf、ラン
タイムルーチンの複製addf2 、ランタイムルーチンmulf
の間における呼出し関係は、図6(a)に示す関数呼出
しグラフに示されるようなものであり、また、プログラ
ムを収容したメモリ101には、図6(b)に示すよう
に、103で示す関数Aに対して、105で示すランタ
イムルーチンaddfが最適配置されており、104で示す
関数Bに対して、106で示すランタイムルーチンmulf
が最適配置されているとともに、複製のランタイムルー
チンaddf2 が配置されている。この場合に、関数Bに関
する処理を行なうために、メモリ101からキャッシュ
102に対して、104Aで示す関数Bと106Aで示
すランタイムルーチンmulfとをロードし、さらに107
Aで示すランタイムルーチンaddf2 をロードすると、ラ
ンタイムルーチンaddf2 とランタイムルーチンmulfとは
キャッシュ上のアドレスが重なりあう関係になっていな
いので、コンフリクトは発生しない。
【0024】このように、この例の言語処理によれば、
頻繁に実行されるランタイムルーチンどうしによるスラ
ッシングの発生が回避される。これは、ランタイムルー
チンの複製を配置して、一つのランタイムルーチンへの
呼出しの集中を分散して、カラーリングによる配置の際
のランタイムルーチンの配置に関する制約を緩和したた
めであって、このようにすることによって、ランタイム
ルーチンどうしが重ならないように配置できる確率が高
くなる。なお、ランタイムルーチン同士のスラッシング
を回避する方法として、関数配置決定処理において、関
数呼出しグラフにおける重みの大きい辺の両端から順次
メモリ上における関数の配置を決定する際に、既に配置
ずみのランタイムルーチンの配置を考慮して、重ならな
い位置を探して配置することも理論的には可能である
が、このような方法では、配置決定の処理に対するオー
バーヘッドが著しく大きくなる。しかしながら、従来の
アルゴリズムによる配置の結果から、ランタイムルーチ
ンどうしのスラッシングが発生する関数を発見するのは
容易であり、本発明の方法では、このようにして発見さ
れた、スラッシング発生の原因となるランタイムルーチ
ンの重なりを直接的に排除するようにしたので、少ない
オーバーヘッドでランタイムルーチンどうしによるスラ
ッシングを回避することができる。また、一般にランタ
イムルーチンとして特に高頻度で使用される可能性が大
きいものに、浮動小数点型の数の四則、すなわち加算、
減算、乗算、除算と、浮動小数点型の数の大小の比較、
および浮動小数点型の数と整数型の数との相互の変換が
あるが、この発明の方法は、ランタイムルーチンがこれ
らのうちの一又はこれらの組み合わせである場合に、特
に好適なものである。
【0025】以上、この発明の実施例を図面により詳述
してきたが、具体的な構成はこの実施例に限られたもの
ではなく、この発明の要旨を逸脱しない範囲の設計の変
更等があってもこの発明に含まれる。例えば、この発明
はキャッシュの使用効率が高いマイコン組み込みシステ
ムのプログラム開発に有用なものであるが、これに限る
ものでなく、ワークステーションやその他の種類のコン
ピュータにおけるプログラム作成に適用することができ
る。また、適用される言語は、高級言語に限らずアセン
ブリ言語や機械語のプログラムにも適用できる。高級言
語は、FORTRANやC言語が一般的であるが、これ
に限るものでなく、ALGOL、COBOL、PL/I、BASIC等任意
のものを使用できる。
【0026】
【発明の効果】以上説明したように、この発明の構成に
よれば、キャッシュを搭載したコンピュータ上で動作す
るプログラムの実行時、キャッシュ上に頻繁に呼び出さ
れる呼ばれ側関数同士によるスラッシングを緩和するよ
うに、プログラム上における関数の配置を決定すること
ができる。また、このような関数配置の決定のためのオ
ーバーヘッドの増大を抑えることができる。
【図面の簡単な説明】
【図1】この発明の一実施例であるコンパイル処理装置
の電気的構成を示すブロック図である。
【図2】同装置における処理の流れを示すフローチャー
トである。
【図3】同装置における関数呼び出し情報の説明図であ
る。
【図4】同装置における関数配置情報の説明図である。
【図5】同装置におけるリンク指示情報の説明図であ
る。
【図6】同装置によって得られた関数配置を例示する図
である。
【図7】従来の関数配置方法の説明図である。
【符号の説明】
1 関数配置決定部(関数配置決定手段) 2 ランタイムルーチン重なり検出部(関数重なり
検出手段) 3 スラッシング発生関数選択部(呼び側関数選択
手段) 4 ランタイムルーチン複製追加部(複製追加手
段) 5 オブジェクトプログラム生成部(オブジェクト
プログラム生成手段) 11 関数呼出し情報 12 ソースプログラム 13 ランタイムルーチン 14 関数配置情報 15 リンク指示情報 16 ランタイムルーチンソースファイル
───────────────────────────────────────────────────── フロントページの続き (56)参考文献 特開 平1−118931(JP,A) 特開 平5−197565(JP,A) S.Mcfarling,”Prog ram Opitimization for Instruction Ca ches”,ACM SIGPLAN Notices,1989,Vol.24,s pecial issue,p183−191 K.Pettis,R.C.Hans en,”Profile guided code positionin g”,ACM SIGPLAN Not ices,1990,Vol.25,No. 6,p16−27 船間,磯崎,”プロファイルを利用し たコード最適化システム”,情報処理学 会第56回(平成10年前期)全国大会講演 論文集,p.1−47〜1−48 (58)調査した分野(Int.Cl.7,DB名) G06F 9/45 G06F 12/08 JICSTファイル(JOIS)

Claims (7)

    (57)【特許請求の範囲】
  1. 【請求項1】 ソースプログラムからキャッシュメモリ
    を搭載したコンピュータ上で動作するオブジェクトプロ
    グラムに翻訳する言語処理方法であって、 該ソースプログラム中の呼び側関数に対して呼ばれ側関
    数が呼出し回数の多い順に最適配置されるように各関数
    の配置を決定するステップと、 該決定された関数配置において複数の関数から呼び出さ
    れる呼ばれ側関数を判定して、前記オブジェクトプログ
    ラムが前記キャッシュメモリへ書き込まれる際にキャッ
    シュリプレース前後において、該呼ばれ側関数が前記キ
    ャッシュメモリ上で他の呼ばれ側関数と同じ配置位置で
    重なる関係になることを検出するステップと、 該重なり発生が検出された各呼ばれ側関数を共通に呼び
    出す呼び側関数のうち最も呼出し頻度が高いものを選択
    するステップと、 該選択された呼び側関数に対して、前記重なりが検出さ
    れた呼ばれ側関数中のいずれか一以外をもとの関数の複
    製に置き換えて前記関数配置においてキャッシュメモリ
    上で該一の呼ばれ側関数と重ならない位置に再配置する
    ステップとを、前記呼ばれ側関数どうしの重なりが検出
    されなくなるまで又は重なりが検出されても前記関数配
    置決定が所定回数を超えるまで繰り返して実行したの
    ち、最終的な前記関数配置に基づいて前記オブジェクト
    プログラムを生成することを特徴とする言語処理方法。
  2. 【請求項2】 前記呼ばれ側関数に対する複数の関数か
    らの呼出し頻度が所定数以上であることを特徴とする請
    求項1記載の言語処理方法。
  3. 【請求項3】 前記呼び側関数に対して、前記重なりが
    検出された呼ばれ側関数のうち最適配置されていない呼
    ばれ側関数を、もとの関数の複製に置き換えることを特
    徴とする請求項1記載の言語処理方法。
  4. 【請求項4】 前記各呼ばれ側関数がランタイムルーチ
    ンであることを特徴とする請求項1,2又は3記載の言
    語処理方法。
  5. 【請求項5】 前記ランタイムルーチンが、浮動小数点
    型の数の加算、減算、乗算、除算若しくは比較の各演
    算、又は該浮動小数点型の数と整数型の数との相互の変
    換のうちのいずれか一又はこれらの組み合わせであるこ
    とを特徴とする請求項4記載の言語処理方法。
  6. 【請求項6】 請求項1,2,3,4又は5記載の言語
    処理方法を実行するプログラムを記録したコンピュータ
    読み取り可能な記憶媒体であって、 前記ソースプログラム中の呼び側関数に対して呼ばれ側
    関数が呼出し回数の多い順に最適配置されるように各関
    数の配置を決定し、該決定された関数配置において複数
    の関数から呼び出される呼ばれ側関数を判定して、該呼
    ばれ側関数が前記キャッシュメモリ上で他の呼ばれ側関
    数と重なる関係になることを検出し、該重なり発生が検
    出された各呼ばれ側関数を共通に呼び出す呼び側関数の
    うち最も呼出し頻度が高いものを選択し、該選択された
    呼び側関数に対して、前記重なりが検出された呼ばれ側
    関数中のいずれか一以外をもとの関数の複製に置き換え
    て前記関数配置においてキャッシュメモリ上で該一の呼
    ばれ側関数と重ならない位置に再配置する処理を、前記
    呼ばれ側関数どうしの重なりが検出されなくなるまで又
    は重なりが検出されても前記関数配置決定が所定回数を
    超えるまで繰り返して実行したのち、最終的な前記関数
    配置に基づいて前記オブジェクトプログラムを生成する
    プログラムを記録したことを特徴とする言語処理プログ
    ラムを記録した記憶媒体。
  7. 【請求項7】 ソースプログラムからキャッシュメモリ
    を搭載したコンピュータ上で動作するオブジェクトプロ
    グラムに翻訳する言語処理装置において、 該ソースプログラム中の呼び側関数に対して呼ばれ側関
    数が呼出し回数の多い順に最適配置されるように各関数
    の配置を決定する関数配置決定手段と、 該決定された関数配置において複数の関数から呼び出さ
    れる呼ばれ側関数を判定して、該呼ばれ側関数が前記キ
    ャッシュメモリ上で他の呼ばれ側関数と重なる関係にな
    ることを検出する呼ばれ側関数重なり検出手段と、 該重なり発生が検出された各呼ばれ側関数を共通に呼び
    出す呼び側関数のうち最も呼出し頻度が高いものを選択
    する呼び側関数選択手段と、 該選択された呼び側関数に対して、前記重なりが検出さ
    れた呼ばれ側関数中のいずれか一以外をもとの関数の複
    製に置き換えて、前記関数配置においてキャッシュメモ
    リ上で該一の呼ばれ側関数と重ならない位置に再配置す
    る複製追加手段と、 該各関数の配置に基づいて前記オブジェクトプログラム
    を生成するオブジェクトプログラム生成手段とを備えて
    なることを特徴とする言語処理装置。
JP10012695A 1998-01-26 1998-01-26 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体 Expired - Fee Related JP3141836B2 (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP10012695A JP3141836B2 (ja) 1998-01-26 1998-01-26 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体
EP99101337A EP0933702A3 (en) 1998-01-26 1999-01-25 Language processing method and language processing system improving use efficiency of cache memory
US09/237,254 US6625806B1 (en) 1998-01-26 1999-01-26 Language processing method and language processing system improving use efficiency of cache memory

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP10012695A JP3141836B2 (ja) 1998-01-26 1998-01-26 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体

Publications (2)

Publication Number Publication Date
JPH11212798A JPH11212798A (ja) 1999-08-06
JP3141836B2 true JP3141836B2 (ja) 2001-03-07

Family

ID=11812527

Family Applications (1)

Application Number Title Priority Date Filing Date
JP10012695A Expired - Fee Related JP3141836B2 (ja) 1998-01-26 1998-01-26 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体

Country Status (3)

Country Link
US (1) US6625806B1 (ja)
EP (1) EP0933702A3 (ja)
JP (1) JP3141836B2 (ja)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7062630B2 (en) * 2000-10-26 2006-06-13 Matsushita Electric Industrial Co., Ltd. Storing device for writing data onto a plurality of installed storing mediums, storing control method for the storing device, and program thereof
WO2003032157A1 (en) * 2001-09-18 2003-04-17 Asahi Kasei Kabushiki Kaisha Compiler
US7124276B2 (en) * 2003-04-14 2006-10-17 Broadcom Corporation Optimizing cache efficiency within application software
US7356664B2 (en) * 2003-07-17 2008-04-08 International Business Machines Corporation Method and apparatus for transferring data from a memory subsystem to a network adapter for improving the memory subsystem and PCI bus efficiency
US7376763B2 (en) * 2003-07-17 2008-05-20 International Business Machines Corporation Method for transferring data from a memory subsystem to a network adapter by extending data lengths to improve the memory subsystem and PCI bus efficiency
JP4701611B2 (ja) * 2004-01-15 2011-06-15 株式会社日立製作所 動的変換方式のエミュレータ向けメモリ管理方法
US7703087B1 (en) * 2004-12-10 2010-04-20 Oracle America, Inc. Reducing layout conflicts among code units with caller-callee relationships
JP4940996B2 (ja) * 2007-02-23 2012-05-30 富士通セミコンダクター株式会社 プロファイリング装置およびプロファイリングプログラム
JP5577518B2 (ja) * 2011-06-20 2014-08-27 株式会社日立製作所 メモリ管理方法、計算機及びメモリ管理プログラム
US11537448B1 (en) * 2021-12-14 2022-12-27 Asapp, Inc. Adapting application programming interfaces with schema mappings

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6184740A (ja) * 1984-10-03 1986-04-30 Hitachi Ltd 汎用オブジエクトコ−ド生成方式
US5488727A (en) * 1991-09-30 1996-01-30 International Business Machines Corporation Methods to support multimethod function overloading with compile-time type checking
JPH05324281A (ja) 1992-05-25 1993-12-07 Nec Corp アドレス割当変更方法
US5845125A (en) * 1993-06-21 1998-12-01 Kabushiki Kaisha Toshiba Debugger using class information and dynamic instance inter-relationships
CA2128387C (en) * 1993-08-23 1999-12-28 Daniel F. Hurley Method and apparatus for configuring computer programs from available subprograms
JP3417984B2 (ja) 1993-09-10 2003-06-16 株式会社日立製作所 キャッシュ競合削減コンパイル方法
JPH07146788A (ja) * 1993-11-22 1995-06-06 Fujitsu Ltd ウイルス診断機構の作成システムと作成方法並びにウイルス診断機構と診断方法
US5590329A (en) * 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors
JPH08328870A (ja) 1995-05-30 1996-12-13 Fujitsu Ltd コンパイル処理装置
US5854924A (en) * 1996-08-08 1998-12-29 Globetrotter Software, Inc. Static debugging tool and method
JPH10124327A (ja) * 1996-10-16 1998-05-15 Nec Corp インストラクションキャッシュミス率削減方法
JPH10289117A (ja) * 1997-04-15 1998-10-27 Sony Corp プログラム実行環境の設定方法及びその方法が記録された記録媒体
US6149318A (en) * 1997-04-15 2000-11-21 Samuel C. Kendall Link-time and run-time error detection, and program instrumentation
US5978586A (en) * 1997-11-26 1999-11-02 Unisys Corp. Method for tracking changes in source locations in a compiler
JP3178403B2 (ja) * 1998-02-16 2001-06-18 日本電気株式会社 プログラム変換方法、プログラム変換装置及びプログラム変換プログラムを記憶した記憶媒体
US6161216A (en) * 1998-04-29 2000-12-12 Emc Corporation Source code debugging tool
US6079032A (en) * 1998-05-19 2000-06-20 Lucent Technologies, Inc. Performance analysis of computer systems
US6473896B1 (en) * 1998-10-13 2002-10-29 Parasoft, Corp. Method and system for graphically generating user-defined rules for checking language quality
JP2000347936A (ja) * 1999-06-04 2000-12-15 Mitsubishi Electric Corp プログラム実行システム

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
K.Pettis,R.C.Hansen,"Profile guided code positioning",ACM SIGPLAN Notices,1990,Vol.25,No.6,p16−27
S.Mcfarling,"Program Opitimization for Instruction Caches",ACM SIGPLAN Notices,1989,Vol.24,special issue,p183−191
船間,磯崎,"プロファイルを利用したコード最適化システム",情報処理学会第56回(平成10年前期)全国大会講演論文集,p.1−47〜1−48

Also Published As

Publication number Publication date
JPH11212798A (ja) 1999-08-06
EP0933702A3 (en) 2003-10-22
EP0933702A2 (en) 1999-08-04
US6625806B1 (en) 2003-09-23

Similar Documents

Publication Publication Date Title
US8010953B2 (en) Method for compiling scalar code for a single instruction multiple data (SIMD) execution engine
US20040205740A1 (en) Method for collection of memory reference information and memory disambiguation
US6006033A (en) Method and system for reordering the instructions of a computer program to optimize its execution
US6072951A (en) Profile driven optimization of frequently executed paths with inlining of code fragment (one or more lines of code from a child procedure to a parent procedure)
EP0838755A2 (en) Binary program conversion apparatus and method
US20060212440A1 (en) Program translation method and program translation apparatus
JPH07129412A (ja) コンパイル方法及び装置
JP2000322315A (ja) データを管理する方法及び装置
JPH04225431A (ja) 命令キャッシュ効率を増大するコンピュータ命令をコンパイルする方法
JP2002527811A (ja) オンスタックリプレースメントを伴うことなくバーチャルコールを直接にインライン化する方法
JP2002525707A (ja) バーチャルコールのインライン化のための精確な方法
JP3141836B2 (ja) 言語処理方法、言語処理装置及び言語処理プログラムを記録した記憶媒体
Moritz et al. Flexcache: A framework for flexible compiler generated data caching
Williams et al. Dynamic interpretation for dynamic scripting languages
US7143404B2 (en) Profile-guided data layout
US20040186863A1 (en) Elision of write barriers for stores whose values are in close proximity
Benitez et al. The advantages of machine-dependent global optimization
WO2003007153A2 (en) Facilitating efficient join operations between a head thread and a speculative thread
JPH09212369A (ja) 記憶域割り付け装置
US20040128490A1 (en) Using computation histories to make predictions
US20030079210A1 (en) Integrated register allocator in a compiler
Lattner et al. Transparent pointer compression for linked data structures
US8245206B2 (en) System and method for efficient string concatenation in a virtual machine environment
US20100070716A1 (en) Processor and prefetch support program
US6240500B1 (en) Method for dynamically placing procedures of a program in a memory

Legal Events

Date Code Title Description
FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20071222

Year of fee payment: 7

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20081222

Year of fee payment: 8

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091222

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20091222

Year of fee payment: 9

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101222

Year of fee payment: 10

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101222

Year of fee payment: 10

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20101222

Year of fee payment: 10

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111222

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20111222

Year of fee payment: 11

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121222

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20121222

Year of fee payment: 12

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20131222

Year of fee payment: 13

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

LAPS Cancellation because of no payment of annual fees