以下は, HITACHI SR11000 最適化 FORTRAN90 で gt4f90io ライブラリを ビルド, インストールした際のメモ書きです.
まず gt4f90io に必要となる netCDF のインストールを行います.
netCDF のミラー より netcdf-3.6.1.tar.gz をダウンロードします.
ダウンロード後, zcat と tar で展開します.
$ zcat netcdf-3.6.1.tar.gz | tar -xvf -
src ディレクトリまで移動します.
$ cd netcdf-3.6.1/src
以下のように環境変数を設定しつつ, configure を実行します. (この例は sh または bash の場合です. csh を利用している場合は csh の作法に則って環境変数を指定してください). --prefix にはインストール先を指定してください. (最適化 C++ コンパイラである sCC ではコンパイルがうまくいかないため, 今回は C++ インターフェースはビルドしていません.)
$ CC=xlc CPP="xlc -E" CXX="" FC=f90 FFLAGS="-nohugeary -i,L -parallel" \ F90=f90 F90FLAGS="-nohugeary -i,L -parallel" \ ARFLAGS="-X64 cru" ./configure --prefix=/home/bu****/lib/netcdf-3.6.1
configure によるチェックが完了したら, 以下のコマンドでビルドと チェックを行ってください.
$ make check
以下のコマンドでインストールを行ってください.
$ make install
gtool4 プロジェクト より gt4f90io の tar.gz パッケージをダウンロードします.
ダウンロードしたパッケージを zcat と tar で展開します.
$ zcat gt4f90io-20060611.tar.gz | tar -xvf -
ソースコードを一部書き換える必要があります.
gt4f90io/src/dc_types.f90 内の STRING を 255 以下に設定します. (HITACHI 最適化 FORTRAN90 の文字型の種別パラメタの最大値は 255 と決められています.)
integer, parameter:: STRING = 255 ! String.
! 文字列を保持する
! 文字型変数の種別型パラメタ
! として用います。
gt4f90io/src/gt4_history.f90 の type GT_HISTORY 〜 end type GT_HISTORY
内の => null() を削除します.
(これに関しては原因不明です. この =>null() を消さないと,
HistoryCreate を呼び出した際にセグメンテーション違反で停止します.
ちなみに, =>null() 自体が必ずしもエラーを引き起こすわけでは
ありません).
type GT_HISTORY
!
!== gtool4 netCDF データの出力用構造体
! :
type(GT_VARIABLE), pointer :: dimvars(:) ! =>null() ※ このコメントアウト部分以降を消去
! 次元変数 ID配列.
! it is index of dimvars(:),
! not that of vars(:).
logical, pointer:: dim_value_written(:) ! =>null() ※ このコメントアウト部分以降を消去
! 各次元が記述済みかどうか
integer :: unlimited_index
real :: origin, interval, newest, oldest
type(GT_VARIABLE), pointer:: vars(:) ! =>null() ※ このコメントアウト部分以降を消去
! 変数 ID 配列
integer, pointer:: growable_indices(:) ! =>null() ※ このコメントアウト部分以降を消去
! 無制限次元の添字
! (無制限次元が無い時は 0)
integer, pointer:: count(:) ! =>null() ※ このコメントアウト部分以降を消去
! 各配列の無制限次元の配列長
end type GT_HISTORY
環境変数 FC を指定し, configure スクリプトを起動します. (csh の場合は別途環境変数を指定してください). --with-netcdf には先に作成した netCDF ライブラリを指定してください.
$ FC=f90 ./configure --prefix=/home/bu****/lib/gt4f90io \ --with-netcdf=/home/bu****/lib/netcdf-3.6.1/lib/libnetcdf.a
configure スクリプトによるチェックが完了したら, ビルドを行います.
$ make
ビルドが完了したらインストール行います.
$ make install
gt4frt によって正しくコンパイルとリンクが行われるか, 以下のコマンドで 確認します.
$ make test-installed
~/.bashrc など, シェルの初期化ファイルに gt4frt へのパスを 設定します. 以下はその例です.
$ vi ~/.bashrc PATH=$PATH:/home/bu****/lib/gt4f90io/bin/gt4frt ; export PATH
これで gt4f90io ライブラリのビルドとインストールは完了です.
以下のオプションは configure が自動設定してくれますが, 一応解説します.
size などの組み込み関数から返る数値の型を拡張しない. (デフォルトは 8 バイト整数への拡張を行う).
このオプションを用いない場合, call hogehoge(size(array)) というように 組み込み関数の返り値をダイレクトに引数として渡していると, 「型が異なる」 とエラーが返る. ちなみに実際に拡張される組み込み関数は LBOUND,SHAPE,SIZE,UBOUND,COUNT,MAXLOC,MINLOC.
外部手続きの名前を英字小文字としてオブジェクトファイルを 作成する.
このオプションを用いない場合, xlc でコンパイルした netCDF のライブラリへのリンクがうまくいかない.
並列化のためのオプション. ただし引数として何も与えていないので, 実際には -paralled=0 と変わらないはず.
このオプションを用いない場合, xlc でコンパイルした netCDF のライブラリへのリンクがうまくいかない.
自動割付け配列 (automatic array) 及びコンパイラが生成する動的確保作 業領域に対するメモリ確保時に, スタック領域を利用する最適化を行う.
このオプションを用いないと, HistoryGet のテストで, メモリ領域の確保 でエラーが発生する.
FORTRAN95の言語仕様でコンパイルする.
必須ではないが, gt4f90io は既に FORTRAN95 規格で書かれている部分も 多いので, こちらのオプションをつけておく.
コンパイル時の書式チェック. 他のコンパイラの追随を許さぬほど厳し〜く やってくれる. (たまに, 正しいはずなのに「ダメ」って言われたりもする ので, あまりまじめに相手をするとしんどい)
実際には -boundarycheck -dochk -argchk=all -dline -erstmt -agochk -subchk を一度に設定しているだけ. 特に厳しめなのが, -argchk と -subchk. これらは普段ははずしても良い気がする.
まず前提として, HITACHI 最適化 Fortran は副プログラム内の変数をメモリ 上に格納した後, 副プログラムが終了してもそのままその情報をメモリ上に保 管しておく. これは実行速度向上のための仕様であろう.
これはコンパイル時, リンク時のオプションではなく, 実行ファイルを 走らせる場合に指定するオプション.
"-allocinline" オプションを与えてコンパイルしたプログラムでは, スタック領域は, 実行時に上記のオプションを付加することで増やすこ とができる. 上記の例は, デフォルトの 4,096 kb を指定している ことになる.