JPH03184126A - コンパイラおよびプログラムの命令コードの配置方法 - Google Patents

コンパイラおよびプログラムの命令コードの配置方法

Info

Publication number
JPH03184126A
JPH03184126A JP1323395A JP32339589A JPH03184126A JP H03184126 A JPH03184126 A JP H03184126A JP 1323395 A JP1323395 A JP 1323395A JP 32339589 A JP32339589 A JP 32339589A JP H03184126 A JPH03184126 A JP H03184126A
Authority
JP
Japan
Prior art keywords
source program
program
compiler
statement
instruction
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
JP1323395A
Other languages
English (en)
Inventor
Hiroshi Koike
博 小池
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP1323395A priority Critical patent/JPH03184126A/ja
Publication of JPH03184126A publication Critical patent/JPH03184126A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

(57)【要約】本公報は電子出願前の出願データであるた
め要約のデータは記録されません。

Description

【発明の詳細な説明】 [産業上の利用分野コ 本発明は、コンパイラおよびプログラムの命令コードの
配置方法に関する。特に、主記憶装置と命令キャッシュ
と命令キャッシュ管理装置と中央処理装置とを有する情
報処理装置に好適なオブジェクトプログラムを作成する
のに有用である。
[従来の技術] 主記憶装置と命令キャッシュと命令キャッンユ管理装置
と中央処理装置とを有する情報処理装置において、主記
憶装置に記憶した命令コード列の一部を、高速記憶装置
である命令キャッシュに複写し、プログラム実行のため
の命令コード参照を高速化する記憶階層方式の技術が、
例えば「並列計算機構戊論(富田真治著昭晃堂発行 (
1988)第43頁から第53頁)」において論じられ
ている。
主記憶装置と命令キャッシュと命令キャッシュ管理装置
と中央処理装置とを有する情報処理装置の一例を第17
図に示す。
この情報処理装置15は、オブジェクトプログラムや、
その実行に必要なデータが記憶される主記憶装置16と
、その主記憶装置16内のオブジェクトプログラムの命
令コード列の一部を複写して格納する命令キャッシュ1
8と、その命令キャッシュ18への命令コード列の複写
を管理する命令キャッシュ管理装置1.7と、命令キャ
ッシュ18に格納した命令コードを参照し解釈し実行す
る中央処理装置19より構成されている。
命令キャッシュ管理装置17は、中央処理装置19が出
すコード参照要求および参照する命令フードの主記憶装
置16上のアドレスを受けると、参照される命令コード
が命令キャッシュ18上に存在するか(参照要求があっ
た主記憶装置16上のアドレスの内容が命令キャッシュ
18上に複写されているか)をチエツクする。存在しな
ければ(この状態をメモリフォルトと呼ぶ)、参照要求
があった命令コードを主記憶装置16より命令キャッシ
ュ18に複写する。この複写は、参照要求があった命令
コードのアドレスを含む連続した所定個数のアドレスに
それぞれ記憶されているコード列単位で行われる。この
単位を基本ブロックと呼ぶ。
オブジェクトプログラムの実行においては、オブジェク
トプログラムが記憶されている主記憶装置16上の連続
したアドレスの内容の命令コードが順に参照され実行さ
れる性質がある。この性質を局所性と呼ぶ。
命令キャッシュ18を持つ情報処理装置15は、この性
質を利用して、頻繁に参照される基本ブロックを主記憶
装置16から命令キャッシュ18に複写し、中央処理装
置19が、参照時間のかかる主記憶装置16を参照する
のではなく、高速参照が可能な命令キャッシュ18を参
照することで、コード参照時間を短縮している。
中央処理装置19が参照要求を出した主記憶装置16の
アドレスに記憶された命令コードが命令キャッシュ18
上に存在する確率すなわちヒツト率が高いほど、主記憶
装置16から命令キャッシュ18に命令コードを複写す
る回数が威り、プログラムを高速実行できるようになる
ヒツト率を向上させる従来技術として、命令キャッシュ
に適したオブジェクトプログラムを生成するコンパイラ
が、rProgram Optimization f
orInstuction Caches (SIGA
RCHComputer Architecture 
News、  Vol、 17.  Num、 2. 
 April、 pp183−pp、191(1989
)) Jで論じられている。
このコンパイラは、ソースプログラムから、又は、ソー
スプログラムとそのプロファイル情報(各文の実行回数
等の情報)から、コンパイラ内部で規定された手順にし
たがって高ヒツト率を実現するオブジェクトプログラム
を作成するものである。
[発明が解決しようとする課題〕 上記従来技術のコンパイラでは、同じソースプログラム
と同じプロファイル情報から作成されるオブジェクトプ
ログラムは、常に同一のものとなる。
このため、あるデータで十分高いヒツト率が得られても
、異なるデータでは十分高いヒツト率が得られない場合
があり、十分高いヒツト率が得られるようにデータに対
応して異なるオブジェクトプログラムを作成するといっ
たことが出来ない問題点があった。
また、同じデータで実行した場合、そのヒツト率はいつ
でも同じであり、さらに高いヒツト率のオブジェクトプ
ログラムをプログラマが試行錯誤的に作成することがで
きない問題点があった。
そこで、本発明の第1の目的は、ヒツト率の高いオブジ
ェクトプログラムを生成しうるコンパイラを提供するこ
とにある。
また、本発明の第2の目的は、ヒツト率向上のためのき
め細かい調整を行える機能を有するコンパイラを提供す
ることにある。
また、本発明の第3の目的は、ヒツト率の高いプログラ
ムとするための命令コードの配置方法を提供することに
ある。
[課題を解決するための手段] 第1の観点では、本発明は、主記憶装置と命令キャッシ
ュと命令キャッシュ管理装置と中央処理装置とを有する
情報処理装置で実行するオブジェクトプログラムをソー
スプログラムより生成するコンパイラにおいて、ソース
プログラムの各文の実行回数を求める実行回数測定部と
、ソースプログラムを解析すると共にその解析結果に前
記測定したソースプログラムの各文の実行回数を付加し
て実行回数付きソースプログラム解析結果を求めるソー
スプログラム解析部と、所定のしきい値と前記実行回数
付きソースプログラム解析結果とを比較して、しきい値
より少ない実行回数の文をコンパイルしたコードをそれ
ぞれ近接した位置に配置し、しきい値より多い実行回数
の文をコンパイルしたコードをそれぞれ近接した位置に
配置して。
しきい値より少ない実行回数のコード列としきい値より
多い実行回数のコード列とをそれぞれ別個にまとめて配
置したオブジェクトプログラムを生成するコード生成部
とを具備してなることを特徴とするコンパイラを提供す
る。
上記構成において、ソースプログラムの各文の実行回数
を求める実行回数測定部は、ソースプログラムにカウン
タ機能を持つ文を挿入するカウンタ挿入部と、カウンタ
機能文を挿入したソースプログラムをコンパイルしてカ
ウンタ機能を持つコード列を含むオブジェクトプログラ
ムを作成するカウンタ付きオブジェクトプログラム作成
部と、前記カウンタ付きオブジェクトプログラムを実行
して各カウント値を求めるカウント部と、前記カウント
値よりソースプログラムの各文の実行回数を求める実行
回数出力部とを具備したものを用いることが出来る。あ
るいは、ソースプログラムを逐次解釈実行しながらソー
スプログラムの各文の実行回数を求めるインタプリタを
用いることが出来る。さらに、ソースプログラム中に埋
め込まれた実行回数情報を抽出して、ソースプログラム
の各文の実行回数とするものを用いることが出来る。
第2の観点では、本発明は、上記構成に加えて、プログ
ラマが設定したしきい値を入力するしきい値入力部を有
するコンパイラを提供する。
上記構成において、しきい値入力部は、コンパイラ起動
命令のオプションからしきい値を入力するものを用いる
ことが出来る。
第3の観点では、本発明は、プログラムの多数の命令コ
ードのうち、実行回数が近い命令コード群をアドレスの
近接した位置にまとめて配置することを特徴とするプロ
グラムの命令コードの配置方法を提供する。
[作用コ 第1の観点による本発明のコンパイラでは、ソースプロ
グラムからソースプログラム内の各文の実行回数を求め
、ソースプログラムと前記ソースプログラム内の各文の
実行回数とから実行回数付きソースプログラム解析結果
を求め、その実行回数付きソースプログラム解析結果と
しきい値とから、しきい値より少ない実行回数の文をコ
ンパイルしたコード列と、しきい値より多い実行回数の
文をコンパイルしたコード列とを分けてそれぞれ配置し
たオブジェクトプログラムを作成する。
これにより、オブジェクトプログラムの実行に伴うコー
ドの参照は、しきい値より多い実行回数の文をコンパイ
ルしたコード列をまとめて配置した部分に集中する。従
って、オブジェクトプログラムのコードサイズが命令キ
ャッシュのサイズより大きくとも、参照されるほとんど
の命令コードが命令キャッシュ上に乗ることとなり、高
ヒツト率のオブジェクトプログラムとなる。
第2の観点による本発明のコンパイラでは、プログラマ
がしきい値を任意に設定変更することによって、異なる
オブジェクトプログラムをコンパイラが作成する。
そこで、最も高いヒツト率を実現するオブジェクトプロ
グラムを作成するように、きめ細かい調整を行うことが
出来るようになる。
第3の観点による本発明のプログラムの命令コードの配
置方法では、実行回数が近い命令コード群をアドレスの
近接した位置にまとめて配置することで、少ない実行回
数のコード列と、多い実行回数のコード列とがそれぞれ
分離したオブジェクトプログラムとなる。
そこで、オブジェクトプログラムの実行に伴うコードの
参照は、多い実行回数の文をコンパイルしたコード列を
まとめて配置した部分に集中し、従って、参照されるほ
とんどの命令コードが命令キャッシュ上に乗ることとな
り、高ヒツト率のオブジェクトプログラムとなる。
[実施例] 以下、本発明の実施例を詳細に説明する。なお、これに
より本発明が限定されるものではない。
第1図において、1は本発明の一実施例のコンパイラで
あり、ソースプログラム内の各文の実行回数測定部2と
、ソースプログラム解析部3と。
コード生成部4とを具備してなっている。
このコンパイラ1の入力はソースプログラム5としきい
値9であり、出力はオブジェクトプログラム8である。
また、中間出力は、ソースプログラム内の各文の実行回
数6と実行回数付きソースプログラム解析結果7である
第2図に示す計算機システム30は、上記コンパイラ1
を実行するものである。
計算機10は、作動の中枢である。入力装置13は、ソ
ースプログラム5の入力や、しきい値9を含むコンパイ
ラ起動命令(第3図の20)の入力に使用される。外部
記憶装置11は、コンパイラ1目体のオブジェクトプロ
グラムや、入力されたソースプログラム5や7コンパイ
ラlによって生成されたオブジェクトプログラム8を記
憶する。
モニタ装置12は、入力装置13から入力された記号を
エコーバック表示したり、コンパイラ1の実行に伴うメ
ツセージの表示を行なう。
第3図に示すように、コンパイラ起動命令20は、コン
パイラ1を起動するコマンド「compi leJ 2
1と、しきい値を入力するコンパイラオプションr−8
J22と、しきい値9と、コンパイルされるソースプロ
グラム名rf i lenameJ 24とからなって
いる。コンパイラオプションr−8J22を付けて、し
きい値9を付けないときは、コンパイラ1に予め定めら
れたデフォルト値がしきい値となる。なお、コンパイラ
オプションr−3J22を付けないときは、従来どおり
の作動となり、本発明の作動は行なわない。
このコンパイラ起動命令20をプログラマか前記入力装
置13を用いて入力すると、計算機システム30は、第
4図に示すように作動する。
すなわち、計算機10は、コンパイラ1目体のオブジェ
クトプログラムを外部記憶装置11より計算機内部に読
み込み、コンパイラ1を起動する(ステップ1000)
コンパイラ1は、ソースプログラム5を外部記憶装置1
1より入力する(ステップ2000)。
ソースプログラム内の各文の実行回数測定部2は、ソー
スプログラム5を入力として、ソースプログラム5の各
文(実行文)の実行回数を測定し、ソースプログラムの
各文の実行回数6を出力する(ステップ3000)。
ソースプログラム解析部3は、ソースプログラム5と上
記ソースプログラム内の各文の実行回数6とを入力とし
て、ソースプログラムの構文解析等を行ない、実行回数
付きソースプログラム解析結果7を出力する(ステップ
4000)。
コード生成部4は、上記実行回数付きソースプログラム
解析結果7としきい値9とを入力として、まず、しきい
値9より少ない実行回数のソースプログラム5の各文を
コンパイルしたコードの列を生威しくステップ5000
)、次に、しきい値9より多い実行回数の各文をコンパ
イルしたコードの列を生成する(ステップ6000)。
以上により、しきい値9より少ない実行回数のコード列
が前部分にまとめられ、しきい値9より多い実行回数の
コード列が後部分にまとめられて配置されたオブジェク
トプログラム8が得られることとなる。
以下、第5図から第8図のフローチャートと、第9図か
ら第15図の具体例とを用いて更に詳細に説明する。
第5図は、ソースプログラム内の各文の実行回数測定部
2の一実施例を示すフローチャートである。
入力されるソースプログラム5は、第9図に示すものと
する。このソースプログラム5は、C言語で記述されて
おり、アンダーラインの文が実際に実行される文(実行
文)である。
まず、入力されたソースプログラムs内に、実行回数を
カウントするカウンタを挿入する(ステップ201)。
具体的には、カウンタ構成文とカウントアツプ命令文を
挿入する。
カウンタ構成文は、第10図の波線アンダーラインの文
で、対応する実行文の実行回数のカウント値を保持した
り、カウントアツプ命令によりカウント値をインクリメ
ントしたり、カウンタ値を出力したりするものである。
カウントアツプ命令文は、第10図の直線アンダーライ
ンの文で、引数の数字でカウントアツプするカウンタ番
号を指定する。
かくして、第9図のソースプログラム5を入力するとき
、ステップ201により、第10図に示すカウンタ付き
ソースプログラム5Aが出力される。
また、ステップ201では、第11図に示すごとき文番
号−カウンタ対応表65の作成も行う。
この文番号−カウンタ対応表65において、ソースプロ
グラムの各文の読み込み順番号61とは、コンパイラ1
がソースプログラム5の各実行文を外部記憶装置11か
ら読み込んだ順に付けた番号である。第9図のソースプ
ログラム5に対しては、上にある実行文から下に向かっ
て順に1〜10までの順番号が付けられている。各文の
実行回数を代表して記録するカウンタ番号63は、実行
文に対応する前記カウンタの番号である。
次に、カウンタ付きソースプログラム5Aをコシバイル
し、カウンタ付きオブジェクトプログラムを作成する(
ステップ202)。
次に、カウンタ付きオブジェクトプログラムを実行し、
各カウンタにカウント値を得る(ステップ203)。
最後に、第1工図の文番号−カウンタ対応表65を用い
、各カウンタの番号を媒介させて、カウント値と、ソー
スプログラムの各文の読み込み順番号61とを対応させ
、ソースプログラムの各文の実行回数6を求める(ステ
ップ204)。
かくして、第12図に示すごときソースプログラムの各
文の実行回数6が作成される。
次に、第6図は、ソースプログラム解析部3の一実施例
を示すフローチャートである。
入力されるソースプログラム5は、第9図に示すものと
する。また、ソースプログラムの各文の実行回数6は、
第12図に示すものとする。
まず、ソースプログラム5に対して、字句解析構文解析
、意味解析を順に行なう(ステップ301)。
次に、ソースプログラム解析結果を作成する(ステップ
302)。具体的には、第13図に示すごときソースプ
ログラム解析結果70を作成する。
このソースプログラム解析結果70は、識別番号71と
、命令72と、命令属性73と1次の命令セルの識別番
号74との組(この組を命令セルと呼ぶ)の系列であり
、識別番号か“1:”の“ROOT命令”をルートとす
る木構造を構成する。
各命令セルは、ソースプログラム5の各文に対応する。
例えば、FOR命令はfor文、IF命令はif文、A
SSIGN命令は代人文等である。
ソースプログラム5のブロック(C言語のブロックの概
念と同じもの)に対してはBLOCK命令が対応する。
BLOCK命令の命令セルの子孫とは、その命令セルか
ら次の命令セルの識別番号74を用いて到達できる全て
の命令セルを言う(数段の命令セルを通っても可)。次
の命令セルの識別番号74におけるnilとは、子孫が
存在しないことを示す。
次に、ソースプログラムの各文の実行回数6を用いて、
ソースプログラム解析結果内の各命令セルに実行回数を
付加し、実行回数付きソースプログラム解析結果を作成
する(ステップ303)。
具体的には、第12図のソースプログラムの各文の実行
回数6を第13図のソースプログラム解析結果70に付
加し、第14図に示すごとき実行回数付きソースプログ
ラム解析結果7を作成する。
BLOCK命令の命令セルの実行回数は、その命令セル
から初めに到達できる子孫の命令セルの実行回数をその
まま複写する。
第7図と第8図は、コード生成部4の一実施例を示すフ
ローチャートである。
コード生成部4は、2つのバスの処理フェーズで構成さ
れており、第7図のフローチャートが1バス目、第8図
のフローチャートが2パス目である。
説明の都合上、コード生成部4は、実行回数付きソース
プログラム解析結果7と、しきい値9とを入力とし、ア
センブリ言語のプログラムを作成し、それをアセンブル
し、オブジェクトプログラム8を出力するものとする。
まず、第7図の1バス目より説明する。
初めに、複数の異なるラベル(アセンブリプログラム内
で分岐先を示すための名札)を作成するのに使用する変
数iをゼロにする(ステップ401)。
次に、実行回数付きソースプログラム解析結果7のルー
トの命令セル(他の命令セルの子孫でないROOT命令
の命令セル)を探す(ステップ402)。
以下、本構造をなす実行回数付きソースプログラム解析
結果7を、深さ優先、左から右の順番にたどり、命令セ
ルを1つずつ順に読み込む。その命令セルを説明上Cと
する(ステップ403)。
Cが空か(読む込むべき命令セルが無くなったか)を判
定する(ステップ404)。
Cが空の場合は、1バス目を終了する。
Cが空でない場合は、CがBLOCK命令かを判定する
(ステップ405)。
BLOCK命令でない場合は、Cの命令セルに対するコ
ード列を生成する(ステップ406)。
そして、前記ステップ403へ戻る。
CがBLOCK命令であった場合は、Cの命令セルの実
行回数がしきい値9以上かを判定する(ステップ407
)。
しきい値9より少ないなら、前記ステップ403へ戻る
しきい値9以上の場合、ステップ408へ移行する。
ステップ408からステップ411では、Cの命令セル
と、その全ての子孫の命令セルに対するコード列の代り
に、コード列の本体に分岐するアセンブリ言語のジャン
プ命令と、コード列本体から戻ってくるためのアセンブ
リ言語のラベル文を生成する。
具体的には、まず、ジャンプ命令である文字列″jum
p  Iabel$i”のコードを生成する(ステップ
408)。ここで、$iとは、変数iの値を文字に置き
換えることである。
次に、変数iを1つ増やす(ステップ409)。
次に、ラベル文である文字列”1abe1%i:  n
op”を生成する(ステップ410)。
次に、Cの命令セルのすべての子孫の命令セルの1バス
目での読み込みをやめる処理を行なう(ステップ411
)。
そして、前記ステップ403に戻る。
以上の1バス目の処理により、実行回数の少ない文のコ
ード列(ここではアセンブリ言語のプログラム)を作成
できる。
続いて、第8図のフローチャートを用いて、コード生成
部4の2バス目を説明する。
初めに、複数の異なるラベルを作成するために使用する
変数iをゼロにする(ステップ421)。
次に、本構造をなす実行回数付きソースプログラム解析
結果7のルートの命令セルを探す(ステップ422)。
以下、木構造をなす実行回数付きソースプログラム解析
結果7を、深さ優先、左から右の順番にたどり、命令セ
ルを1つずつ順に読み込む。その命令セルを説明上Cと
する(ステップ423)。
Cが空かを判定する(ステップ424)。
Cが空の場合は、2パス目を終了する。
Cが空でない場合は、CがBLOCK命令かを判定する
(ステップ425)。
BLOCK命令でない場合は、前記ステップ423へ戻
る。
BLOCK命令であった場合は、Cの命令セルの実行回
数がしきい値9以上かを判定する(ステップ426)。
しきい値9より少ないなら、前記ステップ423へ戻る
しきい値9以上の場合は、ステップ427へ移行する。
ステップ427からステップ430では、1バス目の処
理で生威しなかった(ジャンプ命令とラベルで代用した
)実行回数の多い命令セルに対するコード列の生成を行
なう。
即ち、1バス目で生成したジャンプ命令のとび先のラベ
ルを生成する(ステップ427)。
次に、変数iを1つ増やす(ステップ428)。
次に、読み込んだ命令セルCと、その命令セルCの子孫
である全ての命令セルに対するコードを生成する(ステ
ップ429)。
最後に、1バス目で生成したラベルの位置へもどるため
のジャンプ命令を生成する(ステップ430)。そして
、前記ステップ423へ戻る。
以上により、実行回数の多い命令セルのコード列(ここ
ではアセンブリ言語のプログラム)を作成できる。
結局のところ、入力したしきい値9よりも実行回数の少
ないソースプログラムの文に対するアセンブリ言語のプ
ログラムと、入力したしきい値9よりも実行回数の多い
ソースプログラムの文に対するアセンブリ言語のプログ
ラムとが分離してそれぞれまとめられたアセンブリ言語
プログラムが作成される。
例えば第15図が、上記コンパイラ1が作成したアセン
ブリ言語プログラム800である。
このアセンブリ言語プログラム800は、オブジェクト
コードに対応するアセンブリ命令の系列であり、前部分
には、ソースプログラム5の実行回数が少ない文をコン
パイルしたオブジェクトコード列に対するアセンブリ命
令列82が配置され、後部分には、実行回数が多い文を
コンパイルしたオブジェクトコード列に対するアセンブ
リ命令列83が配置されている。
また、実行回数の多いブロックをコンパイルしたオブジ
ェ713〜1列に対するアセンブリ命令列813は、実
行回数の少ない文をコンパイルしたコード列のアセンブ
リ命令列82内において代りのアセンブリ命令列(ジャ
ンプ命令810とラベル811)に置き換えられると共
に、実行回数の多い文をコンパイルしたコード列のアセ
ンブリ命令列83内で、ラベル812と そのブロック
をコンパイルしたオブジェクトコードに対するアセンブ
リ命令列813と、ジャンプ命令814として作成され
ている。
このアセンブリ言語プログラム800をアセンブルする
ことにより、オブジェクトプログラム8を作成すること
が出来る。
以上のように、上記コンパイラ1によれば、実行回数の
多い文をコンパイルしたコードの列を、オブ)エクトプ
ログラム内のある領域にまとめたオブジェクトプログラ
ム8を作成することが出来る。
そこで、このオブジェクトプログラム8を、第17図に
示す主記憶装置16に格納し、中央処理装置19で実行
させるとき、コード実行のための主記憶装置16のアク
セス範囲を狭めることができる。つまり、オブジェクト
プログラム8の実行に伴うコードの参照は、実行回数の
多いコードの列をまとめたオブジェクトプログラム8の
コード列の部分(第15図の83に対応する部分)に集
中する。
即ち、主記憶装置16の参照はオブジェクトプログラム
8が記憶されている主記憶装置16上の特定の記憶空間
に集中するため、大きなオブジェクトプログラムでも、
小さなオブジェクトプログラムであるかのように見做す
ことができ、ある場合には、命令キャッシュ18のサイ
ズより大きなオブジェクトプログラムであって且つ実行
に伴うコード参照がプログラムの大半にわたって点在し
ても、実行のために参照されるほとんどのコードをメモ
リフォルトなしに命令キャッシュ18上に乗せることが
出来るようになる。
従って、アクセスしたいコードが命令キャッシュ18に
存在する確率を上げることができ、命令キャッシュ18
を持つ情報処理装置15におけるヒツト率を著しく向上
できる効果がある。
これに伴い、情報処理装置15は、オブジェクトプログ
ラムを高速に実行できるようになる。
一方、プログラマは、第3図のコンパイラ起動命令20
のしきい値9を変えることにより、ヒツト率が異なるオ
ブジェクトプログラムを作成でき、各オブジェクトプロ
グラムの実行速度を測定することで、ヒツト率の高い(
実行速度の速い)オブジェクトプログラムを容易に見つ
け出すことが出来るようになる。
このように、プログラマは、コンパイラのオプションで
あるしきい値を調整することによって、ヒツト率向上を
目的としたオブジェクトプログラム作成上のきめ細かい
調整を行えるようになる。
本発明の他の実施例としては、ソースプログラムの各文
の実行回数測定部2として、ソースプログラム5を逐次
解釈実行するインタプリタを用いるものが挙げられる。
この場合、インタプリタ内部に、各文の実行回数をカウ
ントする機能を実現する。
例えば、ソースプログラムの全文の個数の整数型の配列
をインタプリタ内部で確保し、これらの配列を各文に対
応させて、カウント値を記憶する。
インタプリタ内のソースプログラムの各文を解釈実行す
る部分は、実行した文に対応するカウント値を増やす処
理を行なう。インタプリタの停止後、配列に記憶したカ
ウント値を出力することで、第12図に示すソースプロ
グラムの各文の実行回数6と同様な結果を得ることが出
来る。
本実施例のコンパイラによっても、上記実施例と同様の
効果を得られる。
本発明のさらに他の実施例としては、ソースプログラム
の各文の実行回数測定部2として、プログラマがソース
プログラム中に埋め込んだ実行回数情報を抽出して、各
文の実行回数とするものが挙げられる。
具体的には、第16図の直線アンダーラインの文“%f
requency  A″のような文がプログラマによ
ってソースプログラム5B中に埋め込まれていると、ソ
ースプログラムの各文の実行回数測定部2は、この文以
下の文の実行回数かA回であると認識するものである。
本実施例のコンパイラによれば、実際に実行しなくても
ソースプログラムの各文の実行回数を求めることが出来
るので、オブジェクトプログラム8を高速に作成できる
効果がある。また、実行回数情報をプログラマが設定変
更することにより異なるオブジェクトプログラムを作成
することが出来るようになるので、ソースプログラム上
でヒツト率向上のための指定ができる効果もある。
[発明の効果コ 本発明のコンパイラによれば、実行回数の多い文をコン
パイルしたコード列を一つの領域にまとめたオブジェク
トプログラムが作成されるから、オブジェクトプログラ
ム実行時の主記憶装置へのアクセス範囲を狭めることが
でき、アクセスしたいコードが命令キャッシュに存在す
る確率を上げることが出来る。
すなわち、命令キャッシュを持つ情報処理装置における
ヒツト率を向上できる効果がある。
そして、これに伴い、オブジェクトプログラムを高速に
実行できるようになる。
また、プログラマがしきい値を設定変更することによっ
て異なるオブジェクトプログラムが作成されるから、ヒ
ツト率向上を目的とした。オブジェクトプログラム作成
上の細かい調整を行えるようになる。
また、実行回数が近い命令コード群をアドレスの近接し
た位置にまとめて配置することにより多い実行回数のコ
ード列がまとめて配置されたオブジェクトプログラムに
なるから、高ヒツト率のオブジェクトプログラムとなる
【図面の簡単な説明】
第1図は本発明のコンパイラの機能ブロック図、第2図
は本発明のコンパイラを実行する計算機システムのブロ
ック図、第3図は本発明のコンパイラを起動するための
コンパイラ起動命令の例示図、第4図は本発明のコンパ
イラの一実施例の作動を示すフローチャート、第5図は
ソースプログラム内の各文の実行回数測定部の一実施例
の作動を示すフローチャート、第6図はソースプログラ
ム解析部の一実施例の作動を示すフローチャート、第7
図はコード生成部の一実施例の1バス目の作動を示すフ
ローチャート、第8図はコード生成部の一実施例の2バ
ス目の作動を示すフローチャート、第9図は本発明のコ
ンパイラに入力するソースプログラムの例示図、第10
図は第9図のソースプログラムにカウンタ機能文を埋め
込んだソースプログラムの例示図、第11図は文番号−
カウンタ対応表の例示図、第12図はソースプログラム
の各文の実行回数の例示図、第13図はソースプログラ
ム解析結果の例示図、第14図は実行回数付きソースプ
ログラム解析結果の例示図、第15図は本発明のコンパ
イラが作成するオブジェクトプログラムをアセンブリ言
語プログラムとして表現した例示図、第16図は実行回
数情報を付加したソースプログラムの例示図、第17図
は主記憶装置と命令キャッシュと命令キャッシュ管理装
置と中央処理装置とを有する情報処理装置のブロック図
である。 (符号の説明) 1・・・コンパイラ 2・・・ソースプログラム内の各文の実行回数測定部3
・・・ソースプログラム解析部 4・・コード生成部    5・・・ソースプログラム
6・・・ソースプログラム内の各文の実行回数7・・・
実行回数付きソースプログラム解析結果8・・・オブジ
ェクトプログラム  9・・・しきい値。

Claims (1)

  1. 【特許請求の範囲】 1、主記憶装置と命令キャッシュと命令キャッシュ管理
    装置と中央処理装置とを有する情報処理装置で実行する
    オブジェクトプログラムをソースプログラムより生成す
    るコンパイラにおいて、 ソースプログラムの各文の実行回数を求め る実行回数測定部と、 ソースプログラムを解析すると共に、その 解析結果に前記測定したソースプログラムの各文の実行
    回数を付加して、実行回数付きソースプログラム解析結
    果を求めるソースプログラム解析部と、 所定のしきい値と前記実行回数付きソース プログラム解析結果とを比較して、しきい値より少ない
    実行回数の文をコンパイルしたコードをそれぞれ近接し
    た位置に配置し、しきい値より多い実行回数の文をコン
    パイルしたコードをそれぞれ近接した位置に配置して、
    しきい値より少ない実行回数のコード列としきい値より
    多い実行回数のコード列とをそれぞれ別個にまとめて配
    置したオブジェクトプログラムを生成するコード生成部
    と を具備してなることを特徴とするコンパイラ。 2、ソースプログラムの各文の実行回数を求める実行回
    数測定部が、ソースプログラムにカウンタ機能を持つ文
    を挿入し、そのカウンタ機能文を挿入したソースプログ
    ラムをコンパイルしてカウンタ機能を持つコード列を含
    むオブジェクトプログラムを作成し、そのカウンタ付き
    オブジェクトプログラムを実行して各カウント値を求め
    、そのカウント値よりソースブローグラムの各文の実行
    回数を求めるものである請求項1のコンパイラ。 3、ソースプログラムの各文の実行回数を求める実行回
    数測定部が、ソースプログラムを逐次解釈実行しながら
    ソースプログラムの各文の実行回数を求めるインタプリ
    タである請求項1のコンパイラ。 4、ソースプログラムの各文の実行回数を求める実行回
    数測定部が、ソースプログラム中に埋め込まれた実行回
    数情報を抽出して、ソースプログラムの各文の実行回数
    とするものである請求項1のコンパイラ。 5、プログラマが設定したしきい値を入力するしきい値
    入力部を有する請求項1から請求項4までのいずれかの
    コンパイラ。 6、しきい値入力部が、コンパイラ起動命令のオプショ
    ンからしきい値を入力する請求項5のコンパイラ。 7、主記憶装置と命令キャッシュと命令キャッシュ管理
    装置と中央処理装置とを有する情報処理装置で実行する
    オブジェクトプログラムをソースプログラムより生成す
    るコンパイラにおいて、 プログラマが設定した指定情報に従って、 前記情報処理装置の命令キャッシュのヒット率が異なる
    オブジェクトプログラムを作成することを特徴とするコ
    ンパイラ。 8、指定情報が、コンパイラ起動命令のオプションとし
    て設定されたしきい値である請求項7のコンパイラ。 9、指定情報が、ソースプログラム中に記述した数値デ
    ータである請求項7のコンパイラ。 10、プログラムの多数の命令コードうち、実行回数が
    近い命令コード群をアドレスの近接した位置にまとめて
    配置することを特徴とするプログラムの命令コードの配
    置方法。
JP1323395A 1989-12-13 1989-12-13 コンパイラおよびプログラムの命令コードの配置方法 Pending JPH03184126A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP1323395A JPH03184126A (ja) 1989-12-13 1989-12-13 コンパイラおよびプログラムの命令コードの配置方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP1323395A JPH03184126A (ja) 1989-12-13 1989-12-13 コンパイラおよびプログラムの命令コードの配置方法

Publications (1)

Publication Number Publication Date
JPH03184126A true JPH03184126A (ja) 1991-08-12

Family

ID=18154252

Family Applications (1)

Application Number Title Priority Date Filing Date
JP1323395A Pending JPH03184126A (ja) 1989-12-13 1989-12-13 コンパイラおよびプログラムの命令コードの配置方法

Country Status (1)

Country Link
JP (1) JPH03184126A (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06214803A (ja) * 1993-01-18 1994-08-05 Nec Corp 仮想空間ブロック配置方式
JPH0934725A (ja) * 1995-07-15 1997-02-07 Nec Corp 言語処理装置及び言語処理方法
WO2000038054A1 (fr) * 1998-12-22 2000-06-29 Fujitsu Limited Appareil et procede de generation d'objet d'optimisation
JP2005122506A (ja) * 2003-10-17 2005-05-12 Matsushita Electric Ind Co Ltd コンパイラ装置

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06214803A (ja) * 1993-01-18 1994-08-05 Nec Corp 仮想空間ブロック配置方式
JPH0934725A (ja) * 1995-07-15 1997-02-07 Nec Corp 言語処理装置及び言語処理方法
US5845127A (en) * 1995-07-15 1998-12-01 Nec Corporation Language processor and language processing method to generate object programs by compiling source programs
WO2000038054A1 (fr) * 1998-12-22 2000-06-29 Fujitsu Limited Appareil et procede de generation d'objet d'optimisation
JP2005122506A (ja) * 2003-10-17 2005-05-12 Matsushita Electric Ind Co Ltd コンパイラ装置

Similar Documents

Publication Publication Date Title
US5828883A (en) Call path refinement profiles
EP0171592B1 (en) A method operable within an optimizing compiler
Shaikhha et al. Building efficient query engines in a high-level language
JP2018510445A (ja) プログラム性能を向上させる領域特化システムおよび方法
KR20080038306A (ko) 널가능과 후 바인딩
Shannon et al. Semantic Clustering.
Ramirez et al. Automatic generation of data conversion programs using a data description language
Barua et al. OMPSan: static verification of OpenMP’s data mapping constructs
Li et al. Design space exploration of caches using compressed traces
Winterstein et al. Separation logic for high-level synthesis
JPH03184126A (ja) コンパイラおよびプログラムの命令コードの配置方法
Feiler A language-oriented interactive programming environment based on compilation technology
Koskimies et al. The design of a language processor generator
Earley et al. A method for incrementally compiling languages with nested statement structure
Kuiper et al. Parallel attribute evaluation: structure of evaluators and detection of paralleism
Shaikhha et al. Hinted dictionaries: Efficient functional ordered sets and maps
Tukaram Design and development of software tool for code clone search, detection, and analysis
Abe et al. Model checking stencil computations written in a partitioned global address space language
Datta et al. Towards just-in-time compilation of SQL queries with OMR JitBuilder
Koskimies A specification language for one-pass semantic analysis
Puder et al. Cross-compiling Java to JavaScript via tool-chaining
KR20050065015A (ko) 프로그램의 복제 여부를 검사하는 방법 및 시스템
Keiser et al. On‐demand JSON: A better way to parse documents?
Kashuba et al. Automatic Generation of a Hybrid Query Execution Engine
Grabmüller Constraint-imperative Programmierung