CORD(1) — NEWS-OS Programmer’s Manual
名称
cord − 実行可能ファイル内のプロシージャを並べ変えて、よりよい キャッシュマッピングを提供する
形式
cord [ −v ] [ −o outfile ] [ −f ] [ −c cachesize ] [ −p maxphases ] obj_file reorder_file
解説
cord コマンドは、実行可能ファイル内のプロシージャを配列し直して、 マシンのキャッシュの効率を最大にします。 プロシージャを正しく配列し直すことによって、最終的には命令キャッシュの ミス率が低下します。 cord は正しい順序付けを決定しようという試みは行いませんが、適切な プロシージャの順序を含んだ reorder_file が与えられます。 reorder_file は ftoc プログラムによって生成されます。 ftoc は順番に 1 組のプロファイルフィードバックファイルから reorder_file を生成します (prof(1) を参照)。
reorder_file の処理済みの行はプロシージャ行と呼ばれます。 各プロシージャ行は別々のソース行上になければなりません。 各プロシージャ行はファイルのソース名を含んでいなければならず、 その後に空白が続き、さらに処理済みのプロシージャ名が続かなければなりません。 ネストにされたプロシージャは修飾された x.y でなければならず、ここで x は外部のプロシージャです。 プロシージャ名の後に復帰改行または空白が続きます。
foo.c bar (後に続く他のものはすべて無視されます。)
# で始まる行はコメントであり、 $ で始まる行は cord 指示語行とみなされます。 現在理解される唯一の指示語は $phase です。 この指示語は、(ファイルの終わりまでまたは次の $phase まで) ファイルの残りをプログラムの新しいフェーズであるとみなし、 それに従ってプロシージャを並べます。 プロシージャは複数のフェーズに現れることがあり、その結果、最終バイナリ 内にその複数のコピーが現れます。 cord はまず、要求しているフェーズに属するそのプロシージャのコピー に対するプロシージャの参照を再配置しようとします。 そうでなければ、ランダムコピーに対する参照を再配置します。
cord を直接実行するよりも、 cc(1) のようなコンパイラに対して −cord オプションを使用することをお勧めします。 cord オプションは、 −Wz,cordarg0,cordarg1 などで指定することができます。 cord を直接操作して実行しなければならない場合は、一旦単純なプログラム上で −v フラグを使用したドライバによって cord を実行させたいと思うでしょう。 これによって、 cord の使用に伴う正確なパスと引数を見ることができます。
obj_file は、自分自身の再配置情報を持つ実行可能なオブジェクトファイルです。 これは、 −r、−z、−d オプションをリンカ ld(1) に渡すことによって達成できます。 リンカオプション −r はオブジェクトファイル内に再配置情報を保持しますが、それを ZMAGIC ファイルにはしません(したがって −z)。 また、このオプションがないときのように共通変数を割り当てることも しません(したがって −d)。
警告: cord はプロファイル出力から生成されたプロシージャの入力リストから 作動するので、結果として生じるバイナリはデータに依存します。 すなわち、 cord はプロファイル情報を生成した入力データと同じ入力 データのときには十分に機能するでしょうが、その他のデータ上ではオリジナル バイナリより性能が劣るかもしれません。 さらに、キャッシュのホットエリアが 1 つのキャッシュページにうまく 入らない場合は、性能が低下することがあります。
オプション
−v 冗長な情報を表示します。 他のプロシージャの一部とみなされ再配置できないプロシージャ(これらは 基本的には、再配置可能なプロシージャ以外のプロシージャに対する相対 ブランチを含むことがあるアセンブラプロシージャです)のリストを含みます。 このリストには、もしもフリップされた領域内にプロシージャがあればその プロシージャ、および古い位置から新しい位置へのマッピングも表示されます。
−f 最初のキャッシュページサイズプロシージャをフリップします。 cord が書かれた時点で、プロシージャはプロシージャの密度(サイクル/バイト) 順に並ぶべきだと考えられていました。 このオプションは、最初のキャッシュページに続く各ページの最も密度の高い 部分が、最初のキャッシュページの最も密度の低い部分と衝突するとします。
−c cachesize
実行するマシンのキャッシュサイズを(バイト単位で)指定します。 これは、 −f オプションにだけ影響を与えます。 指定しなかった場合は、65536 が使用されます。
−o outputfile
出力ファイルを指定します。 指定しなかった場合は、 a.out が使用されます。
−p phasemax
許される最大フェーズ数を指定します。 デフォルトは 20 です。
関連事項
prof(1), ftoc(1), cc(1), ld(1),
RISC NEWS Compiler Languages Programmer’s Guide
NEWS-OSRelease 4.2.1R