日付:2022/11/02

CPMDをインテル oneapi環境にインストールする.oneapiの2020.4バージョンをmoduleからロードした.コンパイラのバージョンは以下の通り.

$ mpiifort --version
ifort (IFORT) 19.1.3.304 20200925
Copyright (C) 1985-2020 Intel Corporation.  All rights reserved.

configureを実行してMakefileを作成する.

CPMDはさまざまな環境にあわせてMakefileをつくるためのconfigure.shというスクリプトを用意している../configure.shを実行したところ,LINUX-X86_64-INTEL-MPI-FFTWLINUX-X86_64-INTEL-IMPI-FFTWという環境用の設定を見つけたのでこれらを試してみることにした1.さらに,環境別に複数のcpmdを作成するため,./bin以下にディレクトリを掘って対応する.

# 環境についてさらに詳しい情報を見る
./configure.sh -i LINUX-X86_64-INTEL-MPI-FFTW

# ./bin/cpmd_intel以下にMakefileを作成する
./configure.sh -SRC=$PWD -DEST=./bin/cpmd_intel LINUX-X86_64-INTEL-MPI-FFTW

作成されたMakefileで,compilerの指定をgnuからintel系に変更した.-cppオプションをつけないとコンパイルに失敗する.(この点についてはLINUX-X86_64-INTEL-IMPI-FFTWの方の情報をconfigure.shで見ると記載されている.)

# compilerをgnuからintelに変更
# FC = mpif90
# LD = mpif90

FC = mpiifort -cpp
LD = mpiifort -cpp

# FC = mpif90 -I.

FC = mpiifort -I. -cpp 

LINUX-X86_64-INTEL-IMPI-FFTW

もう一つ,LINUX-X86_64-INTEL-IMPI-FFTWの方も試したが,こちらは

ld: cannot find -lfftw3_mpi

という単純なエラーで止まってしまった.探してみたところインストールしようとした環境にはこのライブラリがない.というわけで,このライブラリをリンクしないようにして試してみた.

# LFLAGS = -static-intel -mkl=sequential -axMIC-AVX512 -lfftw3_mpi
LFLAGS = -static-intel -mkl=sequential -axMIC-AVX512 

するとすんなりコンパイルに成功してしまった...というわけで,少なくとも自分の環境ではどちらの設定ファイルを使ってもコンパイルできることがわかった.

 Configuration to build a parallel cpmd executable for a
 Xeon Phi x86_64 machine using INTEL Fortran compiler
 version 16/17 or later, intelMPI and MKL.
 WARNING: (1) Intel Fortran Compilers up to version 13.1.0.146
          are affected by a bug compilation in the Jacobi
          rotation (GMAX -> Infinity) if optimization levels
          higher than -O1 are used.
          (2) If the option -cpp is not included, intel places a
          nasty and undesired line in the .f90 routines starting
          with '/* Copyright(C) 1991-2012 ... etc.' with TAB
          and other characters that make the code not compilable.

とあるので,intel Xeon Phi系のマシンを想定しているようだ.しかし結局のところ後者もコンパイラをgnuからintelにかえたところすんなりコンパイルに成功してしまったので,細かい違いはあまり気にしなくてもよいのかも.

  1. 両者の違いはインテルコンパイラを使う(IMPI)かgnuコンパイラを使う(MPI)かの違いかなと思う.一応前者は