-
Notifications
You must be signed in to change notification settings - Fork 31
SPECCPU2000のコンパイル
Ryota Shioya edited this page Mar 24, 2022
·
2 revisions
- ターゲット環境用のクロスコンパイラ : gcc, g++, gfortran
- SPEC2000のISOイメージ : spec2000-1.10.iso
- teraにあります
- &color(red){SPEC2000のソースは古いgcc向けに作られているので、新しいgccではコンパイルが通りません!};
- いくつかのソースに対して2,3行の改変をすればコンパイルが通ります
- バージョン2.x.xの古いgccを使うとよいかもしれません(未テスト)
- SPEC2000 のCD(iso)より環境をインストール
- 設定ファイルの作成
- ソースの書き換え
- make
マウントポイントを dvd とする場合
mkdir dvd
su
mount -t iso9660 -o loop,ro spec2000-1.10.iso dvd
exit
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
su
umount dvd
exit
-
設定ファイルの書き方については詳しくは${SPEC}/docs/config.txtを参照
-
主にコンパイルオプションを指定するための存在
- 通常Makefileの中に書くようなことを書く
-
int,fpのスイートレベル、ベンチマークレベルなど異なるレベル毎にオプションを指定できる
- 固有の書式を用いる。config.txt参照
-
設定ファイルは ${SPEC}/config にある
- 同ディレクトリに自分の設定ファイルを作成
- それっぽい設定ファイルをコピーしてベースにする
- 作成済みのものについては,ターゲット環境/SPECCPU2000のコンパイル/環境毎の設定例を参照
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を参考にして各ベンチマークに必要なフラグを追加
- コピー元の設定ファイルに近い環境ならほとんどそのままで大丈夫かも
- 必要に応じてファイルを書き換える必要がある
- ターゲット環境/SPECCPU2000のコンパイル/環境毎の設定例を参照
- コンパイルにはrunspecというツールを用いる
- makeの働きもするし、ベンチマークを走らせて結果のレポートを作ることもできる
- --actionオプションで機能を選択する
- ベンチマークをonikiriで走らせるつもりなら、とりあえずmakeの代わりだと思っておけばよい
- --configオプションで上で作成したconfigファイルを指定
- 環境変数を設定すると${SPEC}/binにパスが通って使えるようになる
- makeの働きもするし、ベンチマークを走らせて結果のレポートを作ることもできる
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ディレクトリにバックアップが作成される
- なんどもビルドしているとどんどんバックアップが増える
- 特定のベンチマークだけオプションを変えてコンパイルし直すと、条件の変わったベンチマークだけ作り直してくれる
- 同時に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が一括して管理できるような仕組みになっている
- 新しく00000001のような名前のディレクトリが作られ、そこに置かれる
runspec --config myalpha64 --action clobber int fp
↑実行ファイルが全部削除されます
(文責: ほりお,しおや)