Skip to content

SPECCPU2000のコンパイル

Ryota Shioya edited this page Mar 24, 2022 · 2 revisions

dst/ターゲット環境/SPEC/SPECCPU2000のコンパイル.md

概要

必要なもの

  • ターゲット環境用のクロスコンパイラ : gcc, g++, gfortran
  • SPEC2000のISOイメージ : spec2000-1.10.iso
    • teraにあります

注意

  • &color(red){SPEC2000のソースは古いgcc向けに作られているので、新しいgccではコンパイルが通りません!};
    • いくつかのソースに対して2,3行の改変をすればコンパイルが通ります
    • バージョン2.x.xの古いgccを使うとよいかもしれません(未テスト)

作業の流れ

1.SPEC2000のインストール

1.1 SPEC2000 のisoイメージをマウント

マウントポイントを dvd とする場合

mkdir dvd
su
mount -t iso9660 -o loop,ro spec2000-1.10.iso dvd
exit

1.2 インストール

cd dvd
./install.sh
  • インストール先のディレクトリを要求されるので入力&color(red){(←以降${SPEC}とする)};

  • プラットフォームを選べと言われて選択肢が表示される。表示された選択肢を入力

    • deltaでインストールしたらlinux-redhat62-i686しか選択肢がなかった
  • &color(red){libdb.so.3がないと言われてインストールに失敗する場合};

    • compat-db とgdbm を導入する
yum install compat-db
yum install gdbm

1.3 アンマウント

su
umount dvd
exit

1.4 入力データの配置

SPECベンチマークの入力データの配置を参照

2 SPEC2000のコンパイル

2.1 設定ファイルの作成

  • 設定ファイルの書き方については詳しくは${SPEC}/docs/config.txtを参照

  • 主にコンパイルオプションを指定するための存在

    • 通常Makefileの中に書くようなことを書く
  • int,fpのスイートレベル、ベンチマークレベルなど異なるレベル毎にオプションを指定できる

    • 固有の書式を用いる。config.txt参照
  • 設定ファイルは ${SPEC}/config にある

    • 同ディレクトリに自分の設定ファイルを作成
    • それっぽい設定ファイルをコピーしてベースにする

書き換えの例

cd ${SPEC}/config
(例えば)cp alpha-linux-gcc-nag.cfg myalpha64.cfg

設定ファイルのヘッダセクションに次の行を追加

# makeの作業の中で並列実行可能なものを並列実行(下の例の場合4つまで)
makeflags = -j 4
# 「SPEC のwebサイトにアクセスしてバージョンチェックを行う」を無効にする
check_version = no

コンパイラの設定を変更(例)

CC           = alpha-unknown-linux-gnu-gcc
CXX          = alpha-unknown-linux-gnu-g++
FC           = alpha-unknown-linux-gnu-gfortran

最適化・共通のフラグの設定を変更(例)

default=base=default=default:
COPTIMIZE    = -O3
CXXOPTIMIZE  = -O3
FOPTIMIZE    = -O3
PORTABILITY  = -DSPEC_CPU_LP64 -DSPEC_CPU_LINUX
  • benchspec/CINT2000/(ベンチマーク名)/docsを参考にして各ベンチマークに必要なフラグを追加
    • コピー元の設定ファイルに近い環境ならほとんどそのままで大丈夫かも

2.2 ソースの改変

2.3 コンパイル

  • コンパイルにはrunspecというツールを用いる
    • makeの働きもするし、ベンチマークを走らせて結果のレポートを作ることもできる
      • --actionオプションで機能を選択する
      • ベンチマークをonikiriで走らせるつもりなら、とりあえずmakeの代わりだと思っておけばよい
    • --configオプションで上で作成したconfigファイルを指定
    • 環境変数を設定すると${SPEC}/binにパスが通って使えるようになる
cd ${SPEC}
# 環境変数 の設定
(bash) . ./shrc
(csh) source ./cshrc

# コンパイル
runspec --config myalpha64.cfg --action build int fp

中間ファイル

  • benchspec/CINT2000/(ベンチマーク名)/run の下にディレクトリが作られ、その中でコンパイルが行われる
  • 実行ファイルは、 benchspec/CINT2000/(ベンチマーク名)/exe/ に置かれる
  • コンパイルを行うと、コンパイルに用いたconfigファイルにこのようなセクションが追加される
__MD5__
164.gzip=base=nag-gcc-dec07=default:
# Last updated Wed May 14 02:00:58 2008
optmd5=7541206c681781d328ce4345604f87d5
exemd5=fcc9a1be3229af9fe78d449fd68b0fc4

175.vpr=base=nag-gcc-dec07=default:
# Last updated Wed May 14 02:00:58 2008
optmd5=0a0eb08f8a55964668c71727d3b7a3ff
exemd5=27a35a4e0132d6aead8bf088744294e9
...
  • ここには最後にバイナリがビルドされた時のコンパイルオプションなどの条件が記録されている
    • 同時にconfigディレクトリにバックアップが作成される
      • なんどもビルドしているとどんどんバックアップが増える
    • 特定のベンチマークだけオプションを変えてコンパイルし直すと、条件の変わったベンチマークだけ作り直してくれる

実行環境の作成

# 実行環境の作成 
runspec --config myalpha64 --action setup --size test int fp
runspec --config myalpha64 --action setup --size train int fp
runspec --config myalpha64 --action setup --size ref int fp
  • test,train,refはそれぞれ異なる入力ファイルのセット
  • 入力ファイルと実行ファイルが benchspec/CINT2000/(ベンチマーク名)/run/ 以下にコピーされる
    • 新しく00000001のような名前のディレクトリが作られ、そこに置かれる
      • 新しくバイナリを作り直したりする度にディレクトリが増える
    • 同じディレクトリに作られたlistというファイルにそれぞれのディレクトリの内容が書かれている
      • 要するに異なる条件で作成されたバイナリのインスタンスごとに作業ディレクトリが作成される
      • バイナリの作成、実行、結果報告までをrunspecが一括して管理できるような仕組みになっている

2.4 clean

runspec --config myalpha64 --action clobber int fp

↑実行ファイルが全部削除されます

(文責: ほりお,しおや)

Clone this wiki locally