[ English | Japanese ]

コンパイルとリンク (Fortran用)

このページでは、Vector Engine 向けのNEC Numeric Library Collectionを使ったユーザプログラムのコンパイル方法およびライブラリとのリンク方法を説明します。

必要となるコンパイラオプションは次の条件により変わってきます。

  • 使用するライブラリ
  • 分散メモリ並列の有無
  • 共有メモリ並列の有無
  • デフォルト整数型のサイズ

事前準備

コンパイルとリンクを行う前に、コンパイル環境設定スクリプトnlcvars.sh または nlcvars.cshを一度実行する必要があります。

sh系:

 $ source /opt/nec/ve/bin/nlcvars.sh  [引数...] 

csh系:

 % source /opt/nec/ve/bin/nlcvars.csh [引数...] 

指定するべき引数は表1の通りです。

表1: コンパイル環境設定スクリプトの引数
分散メモリ並列 デフォルト整数型 引数
なし32bitなし
なし64biti64
MPI32bitmpi
MPI64bitmpi i64

注意事項
  • NEC Fortranコンパイラ(nfort)のVersion 5.0.0以降を使用してください。 また、分散メモリ並列の機能を使用する場合にのみ、NEC MPIが必要です。Mellanox OFED (MOFED) 5.x環境ではNEC MPI 3.3.0以降、MOFED 4.x 環境ではNEC MPI 2.24.0以降かつ3.0.0未満が必要です。
  • 32bit整数版ライブラリは、サブルーチンの整数型の引数が32bit整数型のライブラリです。
    同様に、64bit整数版ライブラリは、サブルーチンの整数型の引数が64bit整数型のライブラリです。
    コンパイラの精度拡張オプションを使用する場合は、引数拡張後のサイズに対応したライブラリをリンクしてください。
  • nfortまたはmpinfortコマンドで-fdefault-real=8を指定した場合、種別パラメータ(kind)の指定のない realまたはcomplexでの型宣言は、real(kind=8)またはcomplex(kind=8) と解釈されます。その場合、倍精度実数型または倍精度複素数型用のサブルーチンを呼び出してください。
  • 実行ファイルは、リンクオプション -static により静的リンクで作成することを推奨します。 デフォルトの動的リンクでは性能が低下する傾向があります。
  • ライブラリ関数やルーチンを呼び出す共有オブジェクトを作成する際、 リンクオプション -static を指定してはなりません。 さもなくば、共有オブジェクトを使用するプログラムが、 ライブラリの動的ロードのエラーで実行に失敗します。
  • 動的リンクで作成したプログラムを実行する際は、 事前に環境変数 VE_LD_LIBRARY_PATH を適切に設定しなければなりません。 NEC Numeric Library Collection のライブラリパスが含まれている必要があります。
  • ASLの逐次版およびMPI並列版はスレッドセーフではありません。 つまり、OpenMP並列またはハイブリッド並列プログラムでは、それぞれOpenMP並列版またはハイブリッド並列版を使用してください。
  • HeteroSolverとリンクしたプログラムを実行する場合は、実行する前に環境変数 LD_LIBRARY_PATHの設定も必要です。 "実行時の注意"を参照してください。

NEC Numeric Library Collectionのバージョンを指定する場合

NEC Numeric Library Collection 3.0.0以降は、VE30用と
VE20およびVE10/VE10E用のライブラリおよびインクルードファイル等を提供しています。

  • VE30用
     /opt/nec/ve3/nlc/X.X.X/{include/, lib/, bin/} 
  • VE20用およびVE10/VE10E用
     /opt/nec/ve/nlc/X.X.X/{include/, lib/, bin/} 

NEC Numeric Library Collectionのバージョンを指定する場合は、
コンパイルとリンクを行う前に、以下の方法でバージョンを指定してください。

  • VE30用

    sh系:

     $ source /opt/nec/ve3/nlc/X.X.X/bin/nlcvars.sh  [引数...] 

    csh系:

     % source /opt/nec/ve3/nlc/X.X.X/bin/nlcvars.csh [引数...] 

    ここで、X.X.X は NEC Numeric Library Collection のバージョン番号を表します。引数は表1を参照してください。

  • VE20用およびVE10/VE10E用

    sh系:

     $ source /opt/nec/ve/nlc/X.X.X/bin/nlcvars.sh  [引数...] 

    csh系:

     % source /opt/nec/ve/nlc/X.X.X/bin/nlcvars.csh [引数...] 

    ここで、X.X.X は NEC Numeric Library Collection のバージョン番号を表します。引数は表1を参照してください。


コンパイル方法

コンパイルに用いるコマンドは、逐次またはOpenMP並列のライブラリを利用する場合nfort、 MPI並列またはハイブリッド並列のライブラリを利用する場合mpinfortです。 32bit整数版ライブラリを利用する場合は、表2のコンパイルオプションを指定してコンパイルします。 64bit整数版ライブラリを利用する場合は、表3のオプションを指定してコンパイルします。


表2: 32bit整数版ライブラリを使用する場合
ライブラリ名 コンパイルオプション
ASL
ネイティブインタフェース
逐次 なし
OpenMP並列 -fopenmp
ASL統合インタフェース 逐次 なし
OpenMP並列 -fopenmp
MPI並列 なし
ハイブリッド並列 -fopenmp
FFTW3インタフェース 逐次 なし
OpenMP並列 -fopenmp
MPI並列 なし
ハイブリッド並列 -fopenmp
BLAS 逐次 なし
OpenMP並列 -fopenmp
LAPACK 逐次 なし
OpenMP並列 -fopenmp
ScaLAPACK
BLACS
MPI並列 なし
ハイブリッド並列 -fopenmp
SBLAS 逐次 なし
OpenMP並列 -fopenmp
HeteroSolver OpenMP並列 -fopenmp
ハイブリッド並列
Stencil Code Accelerator 逐次 なし
OpenMP並列 -fopenmp

表3: 64bit整数版ライブラリを使用する場合
ライブラリ名 コンパイルオプション
ASL
ネイティブインタフェース
逐次 -fdefault-integer=8
OpenMP並列 -fdefault-integer=8 -fopenmp
ASL統合インタフェース 逐次 -fdefault-integer=8
OpenMP並列 -fdefault-integer=8 -fopenmp
MPI並列 -fdefault-integer=8 -fdefault-real=8
ハイブリッド並列 -fdefault-integer=8 -fdefault-real=8 -fopenmp
FFTW3インタフェース 逐次 -fdefault-integer=8
OpenMP並列 -fdefault-integer=8 -fopenmp
MPI並列 -fdefault-integer=8 -fdefault-real=8
ハイブリッド並列 -fdefault-integer=8 -fdefault-real=8 -fopenmp
BLAS 逐次 -fdefault-integer=8
OpenMP並列 -fdefault-integer=8 -fopenmp
LAPACK 逐次 -fdefault-integer=8
OpenMP並列 -fdefault-integer=8 -fopenmp
ScaLAPACK
BLACS
MPI並列 -fdefault-integer=8 -fdefault-real=8
ハイブリッド並列 -fdefault-integer=8 -fdefault-real=8 -fopenmp
SBLAS 逐次 -fdefault-integer=8
OpenMP並列 -fdefault-integer=8 -fopenmp
HeteroSolver OpenMP並列 -fdefault-integer=8 -fopenmp
ハイブリッド並列 -fdefault-integer=8 -fdefault-real=8 -fopenmp
Stencil Code Accelerator 逐次 -fdefault-integer=8
OpenMP並列 -fdefault-integer=8 -fopenmp

リンク方法

リンクに用いるコマンドは、逐次またはOpenMP並列のライブラリを利用する場合nfort、 MPI並列またはハイブリッド並列のライブラリを利用する場合mpinfortです。 32bit整数版ライブラリを利用する場合は、表4のリンクオプションを指定してリンクします。 64bit整数版ライブラリを利用する場合は、表5のリンクオプションを指定してリンクします。 静的リンクで実行ファイルを作成する場合は、追加で-staticオプションを指定してください。 動的リンクで実行ファイルを作成する場合は、追加でオプションを指定する必要はありませんが、 MPI を使用する場合は、 -shared-mpi オプションを指定しなければなりません。


表4: 32bit整数版ライブラリのリンクオプション
ライブラリ名 リンクオプション
ASL
ネイティブインタフェース
逐次 -lasl_sequential
OpenMP並列 -lasl_openmp -fopenmp
ASL統合インタフェース 逐次 -lasl_sequential
OpenMP並列 -lasl_openmp -fopenmp
MPI並列 -lasl_mpi_sequential
ハイブリッド並列 -lasl_mpi_openmp -fopenmp
FFTW3インタフェース 逐次 -laslfftw3 -lasl_sequential
OpenMP並列 -laslfftw3 -lasl_openmp -fopenmp
MPI並列 -laslfftw3_mpi -lasl_mpi_sequential
ハイブリッド並列 -laslfftw3_mpi -lasl_mpi_openmp -fopenmp
BLAS 逐次 -lblas_sequential
OpenMP並列 -lblas_openmp -fopenmp
LAPACK 逐次 -llapack -lblas_sequential
OpenMP並列 -llapack -lblas_openmp -fopenmp
ScaLAPACK
BLACS
MPI並列 -lscalapack -llapack -lblas_sequential
ハイブリッド並列 -lscalapack -llapack -lblas_openmp -fopenmp
SBLAS 逐次 -lsblas_sequential
OpenMP並列 -lsblas_openmp -fopenmp
HeteroSolver OpenMP並列 -lheterosolver_openmp -lblas_sequential -fopenmp
ハイブリッド並列 -lheterosolver_mpi_openmp
-lblas_sequential -fopenmp
Stencil Code Accelerator 逐次 -lsca_sequential
OpenMP並列 -lsca_openmp -fopenmp

表5: 64bit整数版ライブラリのリンクオプション
ライブラリ名 リンクオプション
ASL
ネイティブインタフェース
逐次 -lasl_sequential_i64
OpenMP並列 -lasl_openmp_i64 -fopenmp
ASL統合インタフェース 逐次 -lasl_sequential_i64
OpenMP並列 -lasl_openmp_i64 -fopenmp
MPI並列 -fdefault-integer=8 -fdefault-real=8 -lasl_mpi_sequential_i64f
ハイブリッド並列 -fdefault-integer=8 -fdefault-real=8 -lasl_mpi_openmp_i64f -fopenmp
FFTW3インタフェース 逐次 -laslfftw3_i64 -lasl_sequential_i64
OpenMP並列 -laslfftw3_i64 -lasl_openmp_i64 -fopenmp
MPI並列 -fdefault-integer=8 -fdefault-real=8 -laslfftw3_mpi_i64f -lasl_mpi_sequential_i64f
ハイブリッド並列 -fdefault-integer=8 -fdefault-real=8 -laslfftw3_mpi_i64f -lasl_mpi_openmp_i64f -fopenmp
BLAS 逐次 -lblas_sequential_i64
OpenMP並列 -lblas_openmp_i64 -fopenmp
LAPACK 逐次 -llapack_i64 -lblas_sequential_i64
OpenMP並列 -llapack_i64 -lblas_openmp_i64 -fopenmp
ScaLAPACK
BLACS
MPI並列 -fdefault-integer=8 -fdefault-real=8 -lscalapack_i64f -llapack_i64
-lblas_sequential_i64
ハイブリッド並列 -fdefault-integer=8 -fdefault-real=8 -lscalapack_i64f -llapack_i64 -lblas_openmp_i64
-fopenmp
SBLAS 逐次 -lsblas_sequential_i64 -fdefault-integer=8
OpenMP並列 -lsblas_openmp_i64 -fopenmp -fdefault-integer=8
HeteroSolver OpenMP並列 -lheterosolver_openmp_i64 -lblas_sequential_i64
-fopenmp
ハイブリッド並列 -fdefault-integer=8 -fdefault-real=8 -lheterosolver_mpi_openmp_i64f -lblas_sequential_i64
-fopenmp
Stencil Code Accelerator 逐次 -lsca_sequential_i64
OpenMP並列 -lsca_openmp_i64 -fopenmp