NEC

MathKeisanユーザーズガイド


MathKeisanのリンク方法

SXのリンク方法

リンクには、SUPER-UXのコマンド、f90、またはクロスコンパイル・コマンドのsxf90を使用します。f90 -dwオプション(既定値)を使用してリンクする場合には、表1のように指定します。f90 -ewオプションを使用してリンクする場合には、表2のように指定します。それぞれに示された順番にリンクするか、またはリンク時にf90 -h lib_cyclicオプションを指定する必要があります。各ライブラリで使用されるデータ型については表3を参照してください。

表1: -dwを使用する場合のリンク方法
ライブラリ名 リンク方法
BLAS -lblas
LAPACK -llapack -lblas
ScaLAPACK -lscalapack -lblacsF90init -lblacs -lblacsF90init -llapack -lblas -lmpi
BLACS -lblacsF90init -lblacs -lblacsF90init -lmpi
PARBLAS -lparblas -Popenmp
CBLAS -lcblas -lblas
SBLAS -lsblas
FFT -lfft
PARFFT -lparfft -Popenmp
METIS -lmetis
ParMETIS -lparmetis -lmpi
Solver -lsolver -lmetis -lblas -Popenmp
ARPACK -larpack -llapack -lblas
PARPACK -lparpack -larpack -llapack -lblas -lmpi
表2: -ewを使用する場合のリンク方法
ライブラリ名 リンク方法
BLAS -lblas_64
LAPACK -llapack_64 -lblas_64
ScaLAPACK -lscalapack_64 -lblacsF90init_64 -lblacs_64 -lblacsF90init_64 -llapack_64 -lblas_64 -lmpiw
BLACS -lblacsF90init_64 -lblacs_64 -lblacsF90init_64 -lmpiw
PARBLAS -lparblas_64 -Popenmp
CBLAS サポートなし
SBLAS -lsblas_64
FFT -lfft_64
PARFFT -lparfft_64 -Popenmp
METIS -lmetis_64
ParMETIS -lparmetis_64 -lmpiw
Solver -lsolver_64 -lmetis_64 -lblas_64 -Popenmp
ARPACK -larpack_64 -llapack_64 -lblas_64
PARPACK -lparpack_64 -larpack_64 -llapack_64 -lblas_64 -lmpiw

MathKeisanライブラリが見つからない場合にリンクエラーが起こることがあります。MathKeisanライブラリのあるデフォルトのディレクトリはSX上では/usr/opt/mathkeisan/inst/lib0、クロスコンパイル機上では/SX/opt/mathkeisan/inst/lib0です。これらのディレクトリにライブラリがない場合はリンクオプション-Ldirを使いそれらの場所を指定してください。dirMathKeisanライブラリを含むディレクトリの完全パス名です。

C/C++コンパイラを使ってMETIS, ParMETIS, CBLAS, BLACS以外のライブラリをリンクする場合は、コマンドラインのMathKaisanライブラリのあとに-f90libオプションをつけてください。この時、-dwMathKaisanライブラリをリンクする場合は-f90lib dwオプションをつけ、-ewMathKaisanライブラリをリンクする場合は-f90lib ewオプションをつけてください。

f90でリンクしたとき、__c_cexp__c_csqrt__c_npow__c_pow__c_ppow__c_sincos__c_spow__c_stkmem__c_stkmem2__c_tpow__c_vcexp__c_vcsqrt__c_vpow__c_vsassign4__c_vsincos__c_wcexp__c_wcsqrt__c_wpow__c_wsincosなどのシンボルが未解決と表示されたら、全てのMathKeisanライブラリのあとのリンクコマンドラインに-lcppをつけてください。


SX版ライブラリ

各データ型に対応するSX版MathKeisanライブラリは、表3のとおりです。

表3:各データ型に対応するSX版MathKeisanライブラリ
ライブラリ名 4バイト整数型 (f90 -dw) 8バイト整数型 (f90 -ew)
4バイト実数型 8バイト実数型 8バイト実数型
ライブラリ 接頭辞 ライブラリ 接頭辞 ライブラリ 接頭辞
BLAS libblas.a S C libblas.a D Z libblas_64.a S D C Z
LAPACK liblapack.a S C liblapack.a D Z liblapack_64.a S D C Z
ScaLAPACK libscalapack.a S C libscalapack.a D Z libscalapack_64.a S D C Z
BLACS libblacs.a S C libblacs.a D Z libblacs_64.a S D C Z
PARBLAS libparblas.a S C libparblas.a D Z libparblas_64.a S D C Z
CBLAS libcblas.a S C libcblas.a D Z サポートなし
SBLAS libsblas.a S C libsblas.a D Z libsblas_64.a S D C Z
FFT libfft.a S C libfft.a D Z libfft_64.a S D C Z
PARFFT libparfft.a S C libparfft.a D Z libparfft_64.a S D C Z
ARPACK libarpack.a S C libarpack.a D Z libarpack_64.a S D C Z
PARPACK libparpack.a S C libparpack.a D Z libparpack_64.a S D C Z
METIS サポートなし libmetis.a   libmetis_64.a  
ParMETIS サポートなし libparmetis.a   libparmetis_64.a  
Solver サポートなし libsolver.a   libsolver_64.a  

表3のライブラリファイルは4バイト(32ビット)整数型のデータ型(FORTRAN integer(kind=4))、または8バイト(64ビット)整数型のデータ型(FORTRAN integer(kind=8))のいずれかです。

既定値f90 -dwでコンパイルしたコードは4バイト整数型を使い、「4バイト整数型」の欄に書いてあるライブラリとリンクします。

f90 -ewでコンパイルしたコードは8バイト整数型を使い、「8バイト整数型」の欄に書いてあるライブラリとリンクします。

浮動小数点型のデータ型は、暗黙の宣言(接頭辞欄が記載無し)によるか、 または以下の表のようにサブルーチン名の接頭辞で決まります。

表 4: 接頭辞によるSX版のデータ型
接頭辞 4バイト整数型 (f90 -dw) 8バイト整数型 (f90 -ew)
S 4バイト実数型 (FORTRAN real(kind=4)) 8バイト実数型 (FORTRAN real(kind=8))
D 8バイト実数型 (FORTRAN real(kind=8)) 8バイト実数型 (FORTRAN real(kind=8))
C 8バイト複素数型 (FORTRAN complex(kind=4)) 16バイト複素数型 (FORTRAN complex(kind=8))
Z 16バイト複素数型 (FORTRAN complex(kind=8)) 16バイト複素数型 (FORTRAN complex(kind=8))

表4で、8バイト整数型 (f90 -ew)のデータ型のライブラリはサブルーチン名の接頭辞がSDの場合には8バイト実数型のデータ型、また、接頭辞がCZで始まる場合には16バイト複素数型のデータ型から構成されています。

Itanium® プロセッサ・ファミリ(IPF)版のリンク方法

IPF版MathKeisanは、アーカイブライブラリ(.a)と共有ライブラリ(.so)の両方を含んでいます。表5は、完全パス名を使用する.aライブラリのオプション一覧です。表6は、-staticオプションを使用する.aライブラリのリンク方法です。表7は、.soライブラリのリンク方法です。表中の$(LIBDIR)マクロには、MathKeisanlibディレクトリを設定してください。既定値は、$(LIBDIR) = /opt/MathKeisan/libです。ScaLAPACKBLACSおよびParMETISライブラリでは、NEC MPIまたはMPICHのためにMPIディレクトリに$(MPI)$(MPILIBDIR)が設定されています。NEC MPIの規定値は$(MPI) = NECMPI及び$(MPILIBDIR) = /usr/lib/libmpi.aです。MPICHの規定値は$(MPI) = MPICH_ch_p4sおよび$(MPILIBDIR) = /opt/mpich/lib/libmpich.aです。 各ライブラリで使用されるデータ型については表8を参照してください。

表5:完全パス名を使用した場合のアーカイブライブラリ(.a)のリンク方法
ライブラリ名 リンク方法
BLAS $(LIBDIR)/libblas.a -openmp
LAPACK $(LIBDIR)/liblapack.a $(LIBDIR)/libblas.a -openmp
ScaLAPACK $(LIBDIR)/libscalapack.a $(LIBDIR)/$(MPI)/libblacsF90init.a $(LIBDIR)/$(MPI)/libblacs.a $(LIBDIR)/$(MPI)/libblacsF90init.a $(LIBDIR)/libblas.a -L$(LIBMPIDIR) -lmpi -openmp
BLACS $(LIBDIR)/$(MPI)/libblacsF90init.a $(LIBDIR)/$(MPI)/libblacs.a $(LIBDIR)/$(MPI)/libblacsF90init.a -L$(LIBMPIDIR) -lmpi
CBLAS $(LIBDIR)/libcblas.a -openmp
SBLAS $(LIBDIR)/libsblas.a -openmp
FFT $(LIBDIR)/libfft.a -openmp
METIS $(LIBDIR)/libmetis.a
ParMETIS $(LIBDIR)/$(MPI)/libparmetis.a -L$(LIBMPIDIR) -lmpi
Solver $(LIBDIR)/libsolver.a $(LIBDIR)/libmetis.a $(LIBDIR)/libblas.a -openmp
PARDISO $(LIBDIR)/libmkl_solver.a $(LIBDIR)/liblapack.a $(LIBDIR)/libblas.a -openmp
ARPACK $(LIBDIR)/libarpack.a $(LIBDIR)/liblapack.a $(LIBDIR)/libblas.a -openmp
表6:-staticを使用した場合のアーカイブライブラリ(.a)のリンク方法
ライブラリ名 リンク方法
BLAS -static -L$(LIBDIR) -lblas -openmp
LAPACK -static -L$(LIBDIR) -llapack -lblas -openmp
ScaLAPACK -static -L$(LIBDIR) -lscalapack -L$(LIBDIR)/$(MPI) -lblacsF90init -lblacs -lblacsF90init -lblas -L$(MPILIBDIR) -lmpi -openmp
BLACS -static -L$(LIBDIR)/$(MPI) -lblacsF90init -lblacs -lblacsF90init -L$(MPILIBDIR) -lmpi
CBLAS -static -L$(LIBDIR) -lcblas -openmp
SBLAS -static -L$(LIBDIR) -lsblas -openmp
FFT -static -L$(LIBDIR) -lfft -openmp
METIS -static -L$(LIBDIR) -lmetis
ParMETIS -static -L$(LIBDIR)/$(MPI) -lparmetis -L$(MPILIBDIR) -lmpi
Solver -static -L$(LIBDIR) -lsolver -lmetis -lblas -openmp
PARDISO -static -L$(LIBDIR) -lmkl_solver -llapack -lblas -openmp
ARPACK -static -L$(LIBDIR) -larpack -llapack -lblas -openmp
表7: 共有ライブラリ(.so)のリンク方法
ライブラリ名 リンク方法
BLAS -L$(LIBDIR) -lblas -openmp
LAPACK -L$(LIBDIR) -llapack -lblas -openmp
ScaLAPACK -L$(LIBDIR) -lscalapack -L$(LIBDIR)/$(MPI) -lblacsF90init -lblacs -lblacsF90init -lblas -L$(MPILIBDIR) -lmpi -openmp
BLACS -L$(LIBDIR)/$(MPI) -lblacsF90init -lblacs -lblacsF90init -L$(MPILIBDIR) -lmpi
CBLAS -L$(LIBDIR) -lcblas -openmp
SBLAS -L$(LIBDIR) -lsblas -openmp
FFT -L$(LIBDIR) -lfft -openmp
METIS -L$(LIBDIR) -lmetis
ParMETIS -L$(LIBDIR)/$(MPI) -lparmetis -L$(MPILIBDIR) -lmpi
Solver -L$(LIBDIR) -lsolver -lmetis -lblas -openmp
PARDISO サポートなし
ARPACK -L$(LIBDIR) -larpack -llapack -llapack -lblas -openmp

実行時に「error while loading shared libraries」のエラーメッセージが表示された場合、LD_LIBRARY_PATH環境変数にMathKeisanlibディレクトリを追加してください。以下のCシェルコマンドを使用して、デフォルトのMathKeisanlibディレクトリ/opt/MathKeisan/libLD_LIBRARY_PATHに追加します。.cshrcファイルに追加するか、またはコマンドラインで入力してください。

if !($?LD_LIBRARY_PATH) then
    setenv LD_LIBRARY_PATH /opt/MathKeisan/lib
else
    setenv LD_LIBRARY_PATH /opt/MathKeisan/lib:$LD_LIBRARY_PATH
endif

Bashシェルの場合は、下記のラインを.profileファイルに加えるか、コマンドラインで入力してください。

export LD_LIBRARY_PATH="/opt/MathKeisan/lib:$LD_LIBRARY_PATH"

IPF版ライブラリ

IPF版MathKeisanライブラリの各データ型に対応するライブラリファイル名を表8に示します。

表 8: データ型に対応するIPF版MathKeisanライブラリ
ライブラリ名 4バイト実数型 8バイト実数型
アーカイブライブラリ 共有ライブラリ 接頭辞 アーカイブライブラリ 共有ライブラリ 接頭辞
BLAS libblas.a libblas.so S C libblas.a libblas.so D Z
LAPACK liblapack.a liblapack.so S C liblapack.a liblapack.so D Z
ScaLAPACK libscalapack.a libscalapack.so S C libscalapack.a libscalapack.so D Z
BLACS libblacs.a libblacs.so S C libblacs.a libblacs.so D Z
CBLAS libcblas.a libcblas.so S C libcblas.a libcblas.so D Z
SBLAS libsblas.a libsblas.so S C libsblas.a libsblas.so D Z
FFT libfft.a libfft.so S C libfft.a libfft.so D Z
METIS サポートなし libmetis.a libmetis.so  
ParMETIS サポートなし libparmetis.a libparmetis.so  
Solver サポートなし libsolver.a libsolver.so  
PARDISO サポートなし libmkl_solver.a libmkl_solver.so  
ARPACK libarpack.a libarpack.so S C libarpack.a libarpack.so D Z

表8のライブラリファイルは4バイト(32ビット)整数型(FORTRAN integer(kind=4))のデータ型です。実数型あるいは複素数型のデータ型は暗黙的な宣言(接頭辞欄が記載無し)によるか、または以下の表のようにサブルーチン名の接頭辞で決まります。

表9:接頭辞によるIPF版のデータ型
接頭辞 データ型
S 4バイト実数型 (FORTRAN real(kind=4))
D 8バイト実数型 (FORTRAN real(kind=8))
C 8バイト複素数型 (FORTRAN complex(kind=4))
Z 16バイト複素数型 (FORTRAN complex(kind=8))