JP2000056983A - プログラムリンクシステム、方法及び記録媒体 - Google Patents

プログラムリンクシステム、方法及び記録媒体

Info

Publication number
JP2000056983A
JP2000056983A JP10229044A JP22904498A JP2000056983A JP 2000056983 A JP2000056983 A JP 2000056983A JP 10229044 A JP10229044 A JP 10229044A JP 22904498 A JP22904498 A JP 22904498A JP 2000056983 A JP2000056983 A JP 2000056983A
Authority
JP
Japan
Prior art keywords
program
load module
function
linking
loop
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
JP10229044A
Other languages
English (en)
Other versions
JP3309810B2 (ja
Inventor
Takashi Miyazaki
孝 宮崎
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 JP22904498A priority Critical patent/JP3309810B2/ja
Publication of JP2000056983A publication Critical patent/JP2000056983A/ja
Application granted granted Critical
Publication of JP3309810B2 publication Critical patent/JP3309810B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

(57)【要約】 【課題】 ロードモジュール実行した時のキャッシュミ
スの発生頻度を少なくし、ロードモジュール中のファン
クションの配置決めを高速に行う。 【解決手段】 プログラム構造抽出手段101は、ロー
ドモジュールの作成対象となるソースプログラムを読み
込み、ソースプログラム中のファンクションをフロー解
析し、ファンクション呼び出しとファンクション呼び出
しを含むループとの関係を表すプログラム構造グラフを
作成する。ファンクション順序付け手段102は、この
プログラム構造グラフを参照し、まず、呼び出し順にフ
ァンクションを並べ、次に実行頻度の高いループで呼び
出されるファンクションが呼び出し順に連続するように
ファンクションを並べ替えて、ソースモジュールに含ま
れるすべてのファンクションに順序を付ける。そして、
リンク手段104は、この順序に従って、コンパイル手
段103によって作成されたオブジェクトモジュールを
リンクする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は、キャッシュメモリ
を有する計算機において、プログラム実行時の命令キャ
ッシュミスを削減するように、プログラムに含まれる各
ファンクションのオブジェクトモジュールをリンクする
ための技術に関するものである。
【0002】
【従来の技術】計算機のプログラムを作成する場合は、
通常、コンパイラを使用して高級言語で書かれたソース
モジュールからオブジェクトモジュールを生成し、さら
にリンカを使用して複数のオブジェクトモジュールをリ
ンクし、計算機が実行できる形式のロードモジュールを
作成する。ここで、オブジェクトモジュールをリンクす
る順序は、オブジェクトモジュールに含まれるファンク
ションをある基準で並べることによって決められる。
【0003】このような計算機で実行可能なロードモジ
ュールを作成する場合、作成されるロードモジュールの
実行速度は高速であるほど望ましい。そして、計算機が
キャッシュメモリを持つことを考慮し、命令キャッシュ
ヒット率を上げてロードモジュールの実行速度を高速化
するためのプログラムリンクシステムが、特開平10−
124327号公報に開示されている。
【0004】図8に、このプログラムリンクシステムの
構成を示す。このプログラムリンクシステムは、命令キ
ャッシュミスプロファイル作成手段801と、配置探索
手段802と、再リンク手段803とから構成されてい
る。
【0005】このプログラムリンクシステムでは、命令
キャッシュミスプロファイル作成手段801は、何らか
のコンパイラ、リンカを用いて作成されたロードモジュ
ールの実行をシミュレーションして命令の実行状態をト
レースし、命令キャッシュミスの発生回数と、キャッシ
ュミスが発生したキャッシュブロックと、命令キャッシ
ュミスが発生したファンクションとを記録する。
【0006】次に、キャッシュミスの発生頻度が大きい
キャッシュブロックでは、同じキャッシュブロックに配
置されているファンクションが実行時に互いに他のファ
ンクションをキャッシュブロックから排除するように働
くので、配置探索手段802は、衝突しているファンク
ションを他のキャッシュブロックに移動させるように配
置の探索を行う。
【0007】そして、再リンク手段803により、配置
探索手段802によって探索された配置に応じてオブジ
ェクトプログラムを再リンクし、ロードモジュールを再
度作成する。再リンクによって作成されたロードモジュ
ールに対しても、上記の同様の処理が繰り返され、キャ
ッシュミスの発生頻度が最小となるファンクションの配
置を探すことによって、最も好ましいロードモジュール
が作成される。
【0008】
【発明が解決しようとする課題】しかしながら、上記従
来例には、次のような問題点があった。第1に、上記従
来例のプログラムリンクシステムでは、キャッシュミス
の発生頻度が最小となるファンクションの配置が決まる
までに、プログラムの実行をシミュレーションしてキャ
ッシュミスの発生状況を調べ、ファンクションを再配置
するということを繰り返さなければならない。このた
め、最適なファンクションの配置が決まるまでに時間が
かかるという問題点があった。
【0009】また、第2に、DRAM(Dynamic Random
Access Memory)などのメモリモジュールでは、一般
に、非連続なメモリアドレスへのアクセスは、連続した
メモリアドレスへのアクセスに比べて遅くなる。上記従
来例のプログラムリンクシステムでは、呼び出し順序に
関係なく、非連続なメモリ位置にファンクションが配置
されることが多くなるので、キャッシュミスが発生した
ときに、メインメモリからキャッシュメモリへの命令の
転送に時間がかかってしまうという問題点があった。
【0010】さらに、第3に、複数のプログラムが同時
に実行されるマルチタスクをサポートする計算機では、
キャッシュメモリの利用状況は常に変化しているので、
キャッシュミスの発生状況をシミュレーションによって
静的に解析しても、その解析結果は実際の状況とは異な
るものとなってしまう。このため、現在の汎用コンピュ
ータで一般化しているマルチタスクをサポートする計算
機では、上記のようにしてロードモジュールを作成して
も、必ずしもその実行速度が速くなるとは限らないとい
う問題点があった。
【0011】なお、本願に関連して、命令キャッシュミ
スの頻度を少なくしてプログラムの実行速度を高速化す
るための技術が、特開平8−328870号公報と特開
平9−128245号公報に、それぞれ開示されてい
る。しかしながら、これらの技術は、いずれもソースモ
ジュールからオブジェクトモジュールを生成するコンパ
イル処理に関するものであり、本発明のように、オブジ
ェクトモジュールからロードモジュールを生成するため
のリンク処理に関するものではない。
【0012】本発明は、上記従来例の問題点を解消する
ためになされたものであり、実行頻度の高いファンクシ
ョンのオブジェクトモジュールを連続して配置すること
で命令キャッシュミスの発生頻度を少なくし、しかも、
このようなファンクションの配置決めを高速に行うこと
ができるプログラムリンクシステム、方法、及びこの方
法を記録した記録媒体を提供することを目的とする。
【0013】
【課題を解決するための手段】上記目的を達成するた
め、本発明の第1の観点にかかるプログラムリンクシス
テムは、複数のオブジェクトモジュールをリンクし、メ
インメモリ上のプログラムの一部が格納されるキャッシ
ュメモリを有する計算機で実行するロードモジュールを
作成するプログラムリンクシステムであって、前記リン
クによって作成されるロードモジュールに対応するプロ
グラムの構造を解析するプログラム構造抽出手段と、前
記プログラム構造抽出手段による解析結果に基づいて、
前記複数のオブジェクトモジュールをそれぞれリンクす
るための順序を付ける順序付け手段と、前記順序付け手
段によって付けられた順序に従って、前記複数のオブジ
ェクトモジュールをリンクしてロードモジュールを作成
するリンク手段とを備えることを特徴とする。
【0014】上記目的を達成するため、本発明の第2の
観点にかかるプログラムリンクシステムは、メインメモ
リ上のプログラムの一部が格納されるキャッシュメモリ
を有する計算機で実行するロードモジュールを作成する
際に、リンカによってリンクされる複数のオブジェクト
モジュールに順序を付けるプログラムリンクシステムで
あって、前記リンクによって作成されるロードモジュー
ルに対応するプログラムの構造を解析するプログラム構
造抽出手段と、前記プログラム構造抽出手段による解析
結果に基づいて、前記複数のオブジェクトモジュールを
それぞれリンクするための順序を付ける順序付け手段と
を備えることを特徴とする。
【0015】上記第1、第3の観点にかかるプログラム
リンクシステムでは、順序付け手段によって実行頻度の
高いモジュール同士がキャッシュメモリ中の同一のブロ
ックを取り合わないように各オブジェクトモジュールを
それぞれリンクするための順序付けすることにより、キ
ャッシュミスの発生頻度を抑えることができる。このた
め、最終的に作成されるロードモジュールを計算機で実
行した場合に、その実質的な実行速度を速くすることが
できる。
【0016】また、オブジェクトモジュールの最適なリ
ンク順序を決定には、プログラム構造抽出手段がプログ
ラム構造の解析をし、このプログラム構造に従って順序
決定手段がオブジェクトモジュールに順序を付ければよ
い。つまり、上記のプログラムリンクシステムでは、ロ
ードモジュールが実際に作成される度にシミュレーショ
ンを実行するといったことを繰り返す必要がなく、オブ
ジェクトモジュールをリンクするための順序を決定する
処理の時間も小さくて済む。
【0017】上記第1、第2の観点にかかるプログラム
リンクシステムにおいて、前記複数のオブジェクトモジ
ュールは、ロードモジュールの作成対象となるプログラ
ムに含まれる各ファンクションに対応するものとしても
よい。この場合、前記プログラム構造抽出手段は、ロー
ドモジュールの作成対象となるプログラムのソースプロ
グラムを解析して、ファンクション呼び出しとファンク
ション呼び出しを含むループとの関係を表す構造グラフ
を作成し、前記順序付け手段は、前記構造グラフを参照
し、まず、呼び出し順に各ファンクションを並べ、次
に、実行頻度の高いループで呼び出されるファンクショ
ンが該ループ内で呼び出し順に連続するように並べ替え
ることによって、前記複数のオブジェクトモジュールの
順序付けを行うものとすることができる。
【0018】そして、このように構成した場合には、前
記プログラム構造抽出手段は、ロードモジュールの作成
対象となるプログラムにおけるループ内での各ファンク
ションの実行回数をプログラム構造グラフに付加する手
段を有し、ネスト構造となっているループ内のファンク
ションの実行回数は、それぞれのループの実行頻度の積
を各ファンクションの実行回数とすることができる。
【0019】なお、上記プログラムリンクシステムにお
いて、前記キャッシュメモリは、ダイレクト方式または
セットアソシエイティブ方式で前記メインメモリ上のプ
ログラムをマッピングして格納するものであることを好
適とする。
【0020】すなわち、キャッシュメモリのマッピング
方法としてダイレクト方式またはセットアソシエイティ
ブ方式を採用している計算機では、メインメモリのブロ
ック単位でキャッシュメモリのどのブロックが割り当て
られるか決まる。このため、作成されるロードモジュー
ルにおいて実行頻度の高い部分同士が命令キャッシュメ
モリの同一のブロックを取り合わないようにすること
で、キャッシュミスの頻度の小さくすることが可能とな
る。特に、メインメモリのブロック毎に割り当てられる
キャッシュメモリのブロックが一意に定まるダイレクト
方式を採用している計算機で実行されるロードモジュー
ルを作成する場合に、本発明の効果が顕著に現れる。
【0021】上記目的を達成するため、本発明の第3の
観点にかかるプログラムリンク方法は、複数のオブジェ
クトモジュールをリンクし、メインメモリ上のプログラ
ムの一部が格納されるキャッシュメモリを有する計算機
で実行するロードモジュールを作成するプログラムリン
ク方法であって、前記リンクによって作成されるロード
モジュールに対応するプログラムの構造を解析するプロ
グラム構造抽出ステップと、前記プログラム構造抽出ス
テップでの解析結果に基づいて、前記複数のオブジェク
トモジュールをそれぞれリンクするための順序を付ける
順序付けステップと、前記順序付けステップにおいて付
けられた順序に従って、前記複数のオブジェクトモジュ
ールをリンクしてロードモジュールを作成するリンクス
テップとを含むことを特徴とする。
【0022】上記目的を達成するため、本発明の第4の
観点にかかる記録媒体は、複数のオブジェクトモジュー
ルをリンクし、メインメモリ上のプログラムの一部が格
納されるキャッシュメモリを有する計算機で実行するロ
ードモジュールを作成するプログラムを記録する記録媒
体であって、前記リンクによって作成されるロードモジ
ュールに対応するプログラムの構造を解析するプログラ
ム構造抽出ステップと、前記プログラム構造抽出ステッ
プでの解析結果に基づいて、前記複数のオブジェクトモ
ジュールに順序を付ける順序付けステップと、前記順序
付けステップにおいて付けられた順序に従って、前記複
数のオブジェクトモジュールをリンクしてロードモジュ
ールを作成するリンクステップとを実行するプログラム
を記録することを特徴とする。
【0023】
【発明の実施の形態】以下、添付図面を参照して、本発
明の実施の形態について説明する。
【0024】最初に、この実施の形態においてソースプ
ログラムがコンパイルされ、さらにこのコンパイルされ
たオブジェクトモジュールがリンクされたロードモジュ
ールを実行すべきキャッシュメモリを有する計算機につ
いて、図1のブロック図を参照して説明する。
【0025】図示するように、この計算機は、演算を実
行するCPU(Central ProcessingUnit)701と、命
令をキャッシュする命令キャッシュメモリ702、デー
タをキャッシュするデータキャッシュメモリ703、及
びメインメモリ704とを備えている。
【0026】CPU701は、プログラムを実行する場
合、命令キャッシュメモリ702から1つずつ命令を読
み込む。命令キャッシュレジスタ702に実行しようと
する命令が格納されていない場合(命令キャッシュミ
ス)、実行に必要な部分の命令を含むブロックがメイン
メモリ704から命令キャッシュメモリ702にロード
される。
【0027】なお、キャッシュメモリのマッピングの方
法には、一般に、ダイレクト方式、セットアソシエイテ
ィブ方式及びフルアソシエイティブ方式の3つがある
が、この計算機では、命令キャッシュメモリ702のマ
ッピング方法としてダイレクト方式またはセットアソシ
エイティブ方式のいずれかが採用されている。ここで、
この実施の形態による効果が最も大きいダイレクト方式
について簡単に説明すると、メインメモリ704中のブ
ロックが割り付けられる命令キャッシュメモリ702の
位置は、メインメモリ704のアドレスのブロックの番
号を命令キャッシュメモリ702中のブロック数で割っ
た剰余とされる。
【0028】図2は、この実施の形態にかかる、ソース
プログラムから図1の計算機で実行可能なロードモジュ
ールを作成するためのプログラムリンクシステムの機能
構成を示すブロック図である。図示するように、このプ
ログラムリンクシステムは、プログラム構造抽出手段1
01と、ファンクション順序付け手段102と、リンク
手段103と、コンパイル手段104とから構成されて
いる。
【0029】プログラム構造抽出手段101は、プログ
ラム制御により動作し、ロードモジュールの作成対象と
なるプログラムのソースプログラム(複数のファンクシ
ョンに対応するソースモジュールを含む)を読み込み、
ソースプログラム中のファンクションのフロー解析を行
い、ファンクション呼び出しとファンクション呼び出し
を含むループとの関係を表すプログラム構造グラフを作
成する。
【0030】ファンクション順序付け手段102は、プ
ログラム制御により動作し、プログラム構造抽出手段1
01で作成したプログラム構造グラフを参照し、まず、
呼び出し順にファンクションを並べ、次に実行頻度の高
いループで呼び出されるファンクションが呼び出し順に
連続するようにファンクションを並べ替えて、ソースモ
ジュールに含まれるすべてのファンクションに順序を付
ける。
【0031】リンク手段103は、プログラム制御によ
り動作し、コンパイル手段104によって作成されたフ
ァンクション毎のオブジェクトモジュールを、ファンク
ション順序付け手段102によって順序付けされた順番
でメインメモリ704条に配置されるようにリンクし
て、ロードモジュールを作成する。
【0032】コンパイル手段104は、プログラム制御
により動作し、ソースプログラムから、該ソースプログ
ラムに含まれるそれぞれのソースモジュールに対応する
オブジェクトモジュールを作成する。
【0033】以下、この実施の形態にかかるプログラム
リンクシステムにおける処理について、説明する。ま
ず、プログラム構造抽出手段101とファンクション順
序付け手段102とによって、実行頻度の高いファンク
ションのオブジェクトモジュールを連続して配置させる
べく、各ファンクションへの順序付けがなされる。
【0034】図3は、ファンクションへの順位付けのた
めに、プログラム構造抽出手段101とファンクション
順序付け手段102とが実行する処理を示すフローチャ
ートである。
【0035】処理が開始すると、プログラム構造抽出手
段101は、ロードモジュールの作成対象となるソース
プログラムを読み込み、このプログラムをフロー解析す
る(ステップS1)。次に、プログラム構造抽出手段1
01は、ファンクションの呼び出し関係とファンクショ
ン呼び出しを含むループ構成を抽出し、プログラム構造
グラフを作成する(ステップS2)。
【0036】このとき、プログラム構造抽出手段101
は、ループの実行頻度も調べて、ループ内の各ファンク
ションの実行回数を情報として付加する。個々のループ
の実行頻度は、ループがネスティングされている場合
は、それぞれの実行回数を乗算した値で、プログラムを
実行した際のループ内のファンクションの実行回数を表
す。また、C言語でのwhile文、do〜while文のような条
件判定ループでは、実際にプログラムが実行されなけれ
ばループの実行頻度はわからないが、この場合、適当な
回数をループ内の実行頻度と仮定する。
【0037】次に、ファンクション順序付け手段102
は、プログラム構造グラフを参照し、プログラム中の各
ファンクションを、メインファンクションから順番に、
それが最初に最初に呼び出される順序で配置する(ステ
ップS3)。次に、ファンクション順序付け手段102
は、プログラム構造グラフにある全てのループを順序づ
け未確定に設定する(ステップS4)。
【0038】次に、ファンクション順序付け手段102
は、順序づけ未確定のループがあるかどうかを調べる
(ステップS5)。順序づけ未確定のループがあると判
定した場合は、まず、ループ内のファンクションが、プ
ログラム中の他でも呼び出されているかどうかを調べ
る。プログラム中の他でも使われている場合は、そのフ
ァンクションの実行頻度を比較し、現在調べているルー
プの方が大きい場合は、ファンクションが現在のループ
内の呼び出し位置に配置されるように移動する(ステッ
プS6)。
【0039】ステップS6が終了すると、ファンクショ
ン順序付け手段102は、ステップS5に戻り、さらに
順序付け未確定のループがあるかどうか調べる。そし
て、ステップS5において、順序付け未確定のループが
ないと判定された場合に、このフローチャートの処理を
終了し、ファンクションの順序付けが確定したこととな
る。
【0040】一方、プログラム構造抽出手段101とフ
ァンクション順序付け手段102とが上記の処理を行っ
ている間に、コンパイル手段104は、ソースプログラ
ムに含まれる各ファンクションのソースモジュールをコ
ンパイルし、各ファンクションに対応したオブジェクト
モジュールを作成する。
【0041】そして、プログラム構造抽出手段101及
びファンクション順序付け手段102による処理と、コ
ンパイル手段104による処理との両方が終了すると、
リンク手段103は、コンパイル手段104でコンパイ
ルされたファンクション毎のオブジェクトモジュール
を、図3の処理で確定した対応するファンクションの順
序でリンクして、ロードモジュールを作成する。
【0042】以下、この実施の形態における処理を、具
体例に基づいて詳細に説明する。図4は、この実施の形
態における処理を具体的に説明するためのプログラム例
を示す図である。このプログラムは、C言語を用いて記
述している。但し、ここでは、ファンクション呼び出し
とループ以外のプログラムの記述は省略している。
【0043】図4に示すプログラムにおいて、メインプ
ログラムmain()は、4個のファンクションfa(),fb(), f
c(), fd()を呼び出している。ファンクションfc()は、f
or(i=0; i<50; i++)で記述される50回の繰り返し実行
するループを持ち、このループ内で3個のファンクショ
ンfa(),fe(), ff()を呼び出している。さらに、ファン
クションfc()は、ループの外でファンクションfg()を呼
び出している。
【0044】ファンクションfe()は、for(j=0;j<100; j
++)で記述される100回の繰り返し実行するループを
持ち、ループ内で3個のファンクションfa(),fh(), f
i()を呼び出している。このループは、ファンクションf
c()にあるループとネスティングされて(入れ子構造と
なって)いる。そのため、ファンクションfa(),fh(), f
i()は、このループ内において50×100=5000
回呼び出されることになる。さらに、ファンクションfe
()は、ループの外でファンクションfd()を呼び出してい
る。
【0045】図4の左側に、図3のプログラムをフロー
解析し、ファンクション呼び出しとループ構成を表した
プログラム構造グラフを示す。プログラムをフロー解析
した結果は、UNIXのプログラム開発環境にあるコマ
ンドcflowの出力結果にループとループ回数を示す
情報を付加したのと同様なものとなる。図4において、
四角の枠は、ループを示している。ここでは、ループ1
とループ2の2個のループがある。四角の枠で囲まれた
ファンクションは、ループに内包されていることを示
し、括弧<>内の数字は、ループ内でのファンクションの
実行回数を示している。
【0046】次に、各ファンクションへ順序付けする方
法について説明する。最初に、各ファンクションを呼び
出される順序で配置する。これは、プログラム構造グラ
フの上から順番に、各ファンクションを出現順に並べれ
ばよい。ファンクションを並べた結果を図4の中央部に
示す。
【0047】次に、ループ内でのファンクションの順序
を確定する。まず、ループ2は、fa(),fh(), fi()の3
個のファンクションを持つ。これらのファンクション
は、各々5,000回実行され、プログラム内で、最も
実行頻度が高い。したがって、他の位置に配置されてい
るファンクションfa()は、このループ内に配置を移動
し、ファンクションfa(),fh(), fi()の順番で配置す
る。次に、ループ1内のファンクションの順序付けをす
る。
【0048】ループ1には、ループ2に含まれ既に順序
が確定したfa(),fh(), fi()の他に、fa(), fe(), f
d(), ff()の4個のファンクションを持つ。それらのフ
ァンクションは、各々50回実行される。ファンクショ
ンfa()は、ループ2で配置が確定しているので除外し、
ファンクションfe(),fd(), ff()を、この順番で配置す
る。このとき、ループ2を内包するファンクションfe()
の後に、ループ2で配置が確定したファンクションf
a(),fh(), fi()が配置される。これで、未確定のループ
は無くなり、図4の右側に示すように、ファンクション
の配置が決定できる。
【0049】なお、ファンクションの配置をリンカ(リ
ンク手段103)に指示する方法は、リンカの種類によ
り異なり、いくつかの方法がある。例えば、リンカに対
する指示として用いるリンク・ディレクティブ(linkdi
rective)ファイルを作成する方法がある。リンク・デ
ィレクティブ・ファイルの記述方法については、「NE
C ユーザーズ・マニュアル CA732/CA830
・CA850 V800シリーズ・Cコンパイラ・パッ
ケージ 操作編 UNIXベース」(資料番号U110
13JJ1V0UM00、1995年)の113頁から
188頁に記載されている。
【0050】次に、図4のソースプログラムから作成さ
れたロードモジュールが、図1の計算機で実行される場
合について検討する。ここで、命令キャッシュメモリ7
02は、第0〜第3の4ブロックに分かれており、ダイ
レクト方式でマッピングされるものとする。また、作成
されたロードモジュール中でファンクションfa()〜fg()
は、それぞれ1ブロックずつの大きさを有し、メインメ
モリ704の第0ブロックからの連続した領域にロード
モジュールが格納されているものとする。
【0051】図5の中央部に示すように、ファンクショ
ンの呼び出し順序で各ファンクションのオブジェクトモ
ジュールをリンクした場合には、ファンクションfa()と
ファンクションfh()とには、命令キャッシュメモリ70
2の第0ブロックが割り当てられることとなる。ここ
で、ループ2を実行する場合に、ファンクションfa()を
命令キャッシュメモリ702の第0ブロックに転送して
実行したすぐ後に、第0ブロックに格納されるべきファ
ンクションfh()を実行しなければならない。つまり、フ
ァンクションfh()を実行する時には必ずキャッシュミス
が発生することとなる。一方、ループ2の先頭に戻って
ファンクションfa()を実行するときにも、キャッシュミ
スが発生することとなる。すなわち、ループ2におい
て、5000×2=10000回のキャッシュミスが発
生することとなり、作成されたロードモジュールの実行
速度を低下させる要因となる。
【0052】一方、図5の右側に示すように、ファンク
ションの順序を変えて各ファンクションのオブジェクト
モジュールを作成した場合には、実行頻度の高いループ
2内のファンクションfa(),fh(),fi()には、それぞれ命
令キャッシュメモリ702の第3、第0、第1ブロック
が割り当てられることになる。このため、ループ2でフ
ァンクションfa(),fh(),fi()を繰り返して実行した場合
に、キャッシュミスが発生することがない。一方、ルー
プ1では、例えば、ファンクションfe(),fd()で命令キ
ャッシュメモリ702のブロックを取り合ってキャッシ
ュミスが発生するが、その回数は、50×2=100回
でその頻度は格段に小さいものとなる。このため、作成
されたロードモジュールの実行速度が速くなる。
【0053】以上説明したように、この実施の形態にか
かるプログラムリンクシステムによれば、プログラム中
の実行頻度の高い部分にあるファンクションが連続した
アドレスとなるように配置されたロードモジュールが作
成される。このため、計算機でロードモジュールを実行
するときに、実行頻度の高いファンクションが命令キャ
ッシュメモリ702のブロックを取り合うようなことが
発生しない。このため、プログラム全体としてキャッシ
ュミスの発生頻度が減り、プログラムの実行速度が速く
なる。
【0054】また、実行頻度が高いループ内にある各フ
ァンクションは、その呼び出し順に順序付けられ、連続
したアドレスとなるように配置されたロードモジュール
が作成される。このため、キャッシュミスが発生した場
合に、次に実行するプログラムをメインメモリ704の
連続したアドレスから命令キャッシュメモリ702に転
送することができるので、命令キャッシュメモリ702
への命令の転送にかかる時間も少なくて済む。
【0055】さらに、プログラム構造抽出手段101が
プログラムのフロー解析を1回行うだけでプログラム構
造グラフが作成される。次に、ファンクション順序付け
手段102が呼び出し順にファンクションを並べた後
に、実行頻度の高いループからプログラム構造グラフを
調べていってファンクションを並べ替えればよい。この
ため、同様の処理を何度も繰り返す必要がなく、ファン
クションの配置を決めるまでの処理時間も短くて済む。
【0056】本発明は、上記の実施の形態に限られず、
種々の変形、応用が可能である。以下、本発明に適用可
能な上記の実施の形態の変形態様について、説明する。
【0057】上記の実施の形態では、リンク手段104
で作成されたロードモジュールを実行する計算機は、命
令データキャッシュメモリ702とデータキャッシュメ
モリ703とを別々に有していた。しかしながら、本発
明は、命令とデータとを特に区別しないで格納するキャ
ッシュメモリを有する計算機で実行するロードモジュー
ルの作成に適用してもよい。
【0058】上記の実施の形態では、ファンクション順
序付け手段102によってプログラム中の各ファンクシ
ョンに順序付けをし、コンパイル手段104でコンパイ
ルしてファンクション毎のロードモジュールを作成して
いた。しかしながら、本発明は、コンパイラでソースプ
ログラムの構文解析をするときに、その構文解析結果を
基に各ファンクションに対応するオブジェクトモジュー
ルに順序を付け、その順序に関する情報を各オブジェク
トモジュールに含ませてもよい。そして、リンカが各オ
ブジェクトモジュールに含まれている順序に関する情報
に従って、オブジェクトモジュールをリンクしてロード
モジュールを作成すればよい。
【0059】上記の実施の形態では、プログラム制御に
より動作するプログラム構造抽出手段101、ファンク
ション順序付け手段102、リンク手段103及びコン
パイル手段104によってソースプログラムからロード
モジュールの作成を行うものとしていた。しかしなが
ら、本発明のプログラムリンクシステムを実現するため
のプログラムは、磁気ディスク、半導体メモリ、その他
の記録媒体に格納して配布してもよい。
【0060】すなわち、図6に示すように、記録媒体1
002に記録されたプログラムを、計算機1001の外
部記憶装置(ハードディスクなど)1003にインスト
ールし、計算機1001が外部記憶装置1003にイン
ストールされたプログラムを実行することで、プログラ
ム制御により動作するプログラム構造抽出手段101、
ファンクション順序付け手段102、リンク手段103
及びコンパイル手段104を実現してもよい。なお、計
算機1001は、図1に示す計算機、すなわち作成され
たロードモジュールを実行する計算機としてもよいが、
これ以外の計算機、すなわち作成されたロードモジュー
ルを実行する計算機とは別の計算機として、クロスコン
パイル、クロスリンクによってソースプログラムからロ
ードモジュールを作成するものとしてもよい。
【0061】
【発明の効果】以上説明したように、本発明によれば、
実行頻度の高いモジュール同士がキャッシュメモリ中の
同一のブロックを取り合うことを避けることができ、キ
ャッシュミスの発生頻度を抑えることができる。このた
め、プログラムの実行速度が速くなる。
【0062】また、オブジェクトモジュールの最適なリ
ンク順序を決定に同様の処理を繰り返す必要がなく、そ
のための処理時間も小さくて済む。
【図面の簡単な説明】
【図1】キャッシュメモリを採用した計算機の構成例を
示すブロック図である。
【図2】本発明の実施の形態にかかるプログラムリンク
システムの機能構成を示すブロック図である。
【図3】本発明の実施の形態において、図2のプログラ
ム構造抽出手段とファンクション順位付け手段とが実行
する処理を示すフローチャートである。
【図4】本発明の実施の形態における処理を具体的に説
明するためのプログラム例である。
【図5】図4に示すプログラムについて、その構造とフ
ァンクションの順位付けとの関係を示す図である。
【図6】本発明の実施の形態に変形例に適用される計算
機システムの構成を示すブロック図である。
【図7】従来技術にかかるプログラムリンクシステムの
機能構成を示すブロック図である。
【符号の説明】
101 プログラム構造抽出手段 102 ファンクション順序付け手段 103 リンク手段 104 コンパイル手段 701 CPU 702 命令キャッシュメモリ 703 データキャッシュメモリ 704 メインメモリ

Claims (7)

    【特許請求の範囲】
  1. 【請求項1】複数のオブジェクトモジュールをリンク
    し、メインメモリ上のプログラムの一部が格納されるキ
    ャッシュメモリを有する計算機で実行するロードモジュ
    ールを作成するプログラムリンクシステムであって、 前記リンクによって作成されるロードモジュールに対応
    するプログラムの構造を解析するプログラム構造抽出手
    段と、 前記プログラム構造抽出手段による解析結果に基づい
    て、前記複数のオブジェクトモジュールをそれぞれリン
    クするための順序を付ける順序付け手段と、 前記順序付け手段によって付けられた順序に従って、前
    記複数のオブジェクトモジュールをリンクしてロードモ
    ジュールを作成するリンク手段とを備えることを特徴と
    するプログラムリンクシステム。
  2. 【請求項2】メインメモリ上のプログラムの一部が格納
    されるキャッシュメモリを有する計算機で実行するロー
    ドモジュールを作成する際に、リンカによってリンクさ
    れる複数のオブジェクトモジュールに順序を付けるプロ
    グラムリンクシステムであって、 前記リンクによって作成されるロードモジュールに対応
    するプログラムの構造を解析するプログラム構造抽出手
    段と、 前記プログラム構造抽出手段による解析結果に基づい
    て、前記複数のオブジェクトモジュールをそれぞれリン
    クするための順序を付ける順序付け手段とを備えること
    を特徴とするプログラムリンクシステム。
  3. 【請求項3】前記複数のオブジェクトモジュールは、ロ
    ードモジュールの作成対象となるプログラムに含まれる
    各ファンクションに対応し、 前記プログラム構造抽出手段は、ロードモジュールの作
    成対象となるプログラムのソースプログラムを解析し
    て、ファンクション呼び出しとファンクション呼び出し
    を含むループとの関係を表す構造グラフを作成し、 前記順序付け手段は、前記構造グラフを参照し、まず、
    呼び出し順に各ファンクションを並べ、次に、実行頻度
    の高いループで呼び出されるファンクションが該ループ
    内で呼び出し順に連続するように並べ替えることによっ
    て、前記複数のオブジェクトモジュールの順序付けを行
    うことを特徴とする請求項1または2に記載のプログラ
    ムリンクシステム。
  4. 【請求項4】前記プログラム構造抽出手段は、ロードモ
    ジュールの作成対象となるプログラムにおけるループ内
    での各ファンクションの実行回数をプログラム構造グラ
    フに付加する手段を有し、ネスト構造となっているルー
    プ内のファンクションの実行回数は、それぞれのループ
    の実行頻度の積を各ファンクションの実行回数とするこ
    とを特徴とする請求項3に記載のプログラムリンクシス
    テム。
  5. 【請求項5】前記キャッシュメモリは、ダイレクト方式
    またはセットアソシエイティブ方式で前記メインメモリ
    上のプログラムをマッピングして格納することを特徴と
    する請求項1乃至4のいずれか1項に記載のプログラム
    リンクシステム。
  6. 【請求項6】複数のオブジェクトモジュールをリンク
    し、メインメモリ上のプログラムの一部が格納されるキ
    ャッシュメモリを有する計算機で実行するロードモジュ
    ールを作成するプログラムリンク方法であって、 前記リンクによって作成されるロードモジュールに対応
    するプログラムの構造を解析するプログラム構造抽出ス
    テップと、 前記プログラム構造抽出ステップでの解析結果に基づい
    て、前記複数のオブジェクトモジュールをそれぞれリン
    クするための順序を付ける順序付けステップと、 前記順序付けステップにおいて付けられた順序に従っ
    て、前記複数のオブジェクトモジュールをリンクしてロ
    ードモジュールを作成するリンクステップとを含むこと
    を特徴とするプログラムリンク方法。
  7. 【請求項7】複数のオブジェクトモジュールをリンク
    し、メインメモリ上のプログラムの一部が格納されるキ
    ャッシュメモリを有する計算機で実行するロードモジュ
    ールを作成するプログラムを記録する記録媒体であっ
    て、 前記リンクによって作成されるロードモジュールに対応
    するプログラムの構造を解析するプログラム構造抽出ス
    テップと、 前記プログラム構造抽出ステップでの解析結果に基づい
    て、前記複数のオブジェクトモジュールをそれぞれリン
    クするための順序を付ける順序付けステップと、 前記順序付けステップにおいて付けられた順序に従っ
    て、前記複数のオブジェクトモジュールをリンクしてロ
    ードモジュールを作成するリンクステップとを実行する
    プログラムを記録することを特徴とするコンピュータ読
    み取り可能な記録媒体。
JP22904498A 1998-08-13 1998-08-13 プログラムリンクシステム、方法及び記録媒体 Expired - Fee Related JP3309810B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP22904498A JP3309810B2 (ja) 1998-08-13 1998-08-13 プログラムリンクシステム、方法及び記録媒体

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP22904498A JP3309810B2 (ja) 1998-08-13 1998-08-13 プログラムリンクシステム、方法及び記録媒体

Publications (2)

Publication Number Publication Date
JP2000056983A true JP2000056983A (ja) 2000-02-25
JP3309810B2 JP3309810B2 (ja) 2002-07-29

Family

ID=16885873

Family Applications (1)

Application Number Title Priority Date Filing Date
JP22904498A Expired - Fee Related JP3309810B2 (ja) 1998-08-13 1998-08-13 プログラムリンクシステム、方法及び記録媒体

Country Status (1)

Country Link
JP (1) JP3309810B2 (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007200240A (ja) * 2006-01-30 2007-08-09 Kyocera Corp 情報処理装置及び情報処理方法
US7478199B2 (en) 2004-03-16 2009-01-13 Fujitsu Limited Cache coloring based on dynamic function flow
GB2463942A (en) * 2008-10-03 2010-04-07 Icera Inc Disassembling an executable to analyse function calls to minimise cache misses

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7478199B2 (en) 2004-03-16 2009-01-13 Fujitsu Limited Cache coloring based on dynamic function flow
JP2007200240A (ja) * 2006-01-30 2007-08-09 Kyocera Corp 情報処理装置及び情報処理方法
GB2463942A (en) * 2008-10-03 2010-04-07 Icera Inc Disassembling an executable to analyse function calls to minimise cache misses
GB2463942B (en) * 2008-10-03 2012-08-08 Icera Inc Disassembling an executable to analyse function calls to minimise cache misses
US8689197B2 (en) 2008-10-03 2014-04-01 Icera, Inc. Instruction cache

Also Published As

Publication number Publication date
JP3309810B2 (ja) 2002-07-29

Similar Documents

Publication Publication Date Title
US5586328A (en) Module dependency based incremental compiler and method
US6029004A (en) Method and apparatus for modular reordering of portions of a computer program based on profile data
US5960198A (en) Software profiler with runtime control to enable and disable instrumented executable
US6446258B1 (en) Interactive instruction scheduling and block ordering
US6721944B2 (en) Marking memory elements based upon usage of accessed information during speculative execution
JP5733860B2 (ja) 依存問題の効率的並列計算
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)
US8533698B2 (en) Optimizing execution of kernels
US7992141B2 (en) Method and apparatus for building executable computer programs using compiled program libraries
US20040205740A1 (en) Method for collection of memory reference information and memory disambiguation
US6363522B1 (en) Method and apparatus for handling exceptions as normal control flow
JPH06103463B2 (ja) コード生成方法
US5822591A (en) Virtual code system
JP2002149416A (ja) プログラムの最適化方法及びこれを用いたコンパイラ
US6463526B1 (en) Supporting multi-dimensional space-time computing through object versioning
US7143404B2 (en) Profile-guided data layout
US20030018826A1 (en) Facilitating efficient join operations between a head thread and a speculative thread
KR100931460B1 (ko) 단일 스레드 응용을 지원하기 위한 시간-멀티플렉스된스펙큘레이티브 멀티 스레딩
Beaty Instruction scheduling using genetic algorithms
JP5048949B2 (ja) 非同期プログラムフローのモデリングを含むソフトウェアツール
JP3309810B2 (ja) プログラムリンクシステム、方法及び記録媒体
JPH10320212A (ja) キャッシュ向け最適化方法
Kandemir et al. An i/o-conscious tiling strategy for disk-resident data sets
Broom et al. Kelpio: A telescope-ready domain-specific i/o library for irregular block-structured applications
JPH03135630A (ja) 命令スケジューリング方式

Legal Events

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