インテル® oneAPI ベース & HPC ツールキットによる VASP* のビルド

ステップ 1 – 概要

このガイドでは、Linux* プラットフォーム上でインテル® oneAPI ベース & HPC ツールキットを使用して VASP (Vienna Ab-Initio Package Simulation) をビルドする方法を説明します。

VASP は、擬ポテンシャルと平面波基底セットを用いて、ab-initio の量子力学的分子動力学 (MD) を実行するためのパッケージです。VAMP/VASP に実装されているアプローチは、有限温度の局所密度近似 (自由エネルギーを変分量とする) と、効率的な行列対角化スキームと効率的な Pulay 混合を使用した各 MD ステップにおける瞬間的な電子基底状態の正確な評価に基づいています。

これらの手法は、電子とイオンの運動方程式の同時積分に基づいているオリジナルの Car-Parrinello 法で発生するすべての問題を回避します。イオンと電子の相互作用は、PAW (Projector Augmented Wave) 法または Vanderbilt が考案した USPP (Ultrasoft Pseudopotentials、ウルトラソフト擬ポテンシャル) 法を用いて記述されます。

どちらの手法も、遷移金属や 1 列目の元素では、原子あたりの必要な平面波の数を大幅に減らすことができます。力と応力は VAMP/VASP で簡単に計算でき、原子を瞬間的な基底状態に緩和するのに使用できます。

バージョン情報について

この説明は、ユーザーが oneAPI を使用して Linux プラットフォーム上で VASP をビルドまたは実装するためのものです。このアプリケーション・ノートは、VASP 6.2.0 およびインテル® oneAPI ベース & HPC ツールキットで検証されています。VASP の詳細については、VASP ホームページ (英語) を参照してください。

注:本製品は、oneAPI を搭載したVASP 6.x バージョンのアップデートです。

前提条件: インテル® oneAPI ベース & HPC ツールキットのダウンロード

ステップ 2 – 構成

以下のコマンドで VASP ファイルを抽出します。

$tar –xvzf vasp.6.2.0.tgz

これにより、vasp.6.2.0 ディレクトリーが作成されます。

インテル® ソフトウェア・ツールの環境変数を設定するには、インテル® 64 プラットフォーム用のデフォルトパスのインストールとビルドを想定して、以下のコマンドを実行します。

$source /opt/intel/oneAPI/2021.2/setvars.sh

注:このアプリケーション・ノートは、インテル® コンパイラーと MPI での使用に特化して書かれています。

ステップ 3 – VASP のビルド

a. libfftw3xf_intel.a のビルド
これは高度に最適化された fftw のパフォーマンス・ライブラリーで、VASP の fftw 部分を高速化することができます。インテル® oneAPI マス・カーネル・ライブラリー (oneMKL) fftw3xf ライブラリーにディレクトリーを変更します。

cd /opt/intel/oneAPI/2021.2/mkl/latest/interfaces/fftw3xf

oneMKL ディレクトリーで fftw3xf をビルドします。

make libintel64

コンパイルが成功すると、同じディレクトリーに libfftw3xf_intel.a がビルドされます。

b. VASP のビルド
ディレクトリーを vasp.6.2.0 に変更します。

cd vasp.6.2.0

arch/makefile.include.linux_intel ファイルをカレント・ディレクトリーにコピーします。

cp arch/makefile.include.linux_intel ./makefile.include

makefile.linux を編集して、以下のようにインテル® oneMKL の fftw ライブラリーとリンクさせます。

OBJECTS    = fftmpiw.o fftmpi_map.o fft3dlib.o fftw3d.o  
/opt/intel/oneAPI/2021.2/mkl/latest/interfaces/fftw3xf/libfftw3xf_intel.a

Fortran および C++ コンパイラーのコマンドが、mpiifort、icc、icpc に正しく割り当てられているか確認してください。

FC         = mpiifort
FCL        = mpiifort -mkl=sequential
……
……
CC_LIB     = icc
……
……
CXX_PARS   = icpc

Fortran のフラグセクションが以下のようになっていることを確認してください。

FFLAGS     = -assume byterecl -w -xHOST

VASP のビルドと実行を同じプラットフォーム上で行う場合は、-xHOST を使用して、利用可能な最高レベルの SIMD 命令を有効にしてください。
VASP で使用される oneMKL BLAS、LAPACK、FFT、BLACS、ScaLAPACK 関数とリンクする oneMKL ライブラリーをインクルードするために、以下のように MKL セクションをチェックします。

MKL_PATH   = $(MKLROOT)/lib/intel64
BLAS       =
LAPACK     =
BLACS      = -lmkl_blacs_intelmpi_lp64
SCALAPACK  = $(MKL_PATH)/libmkl_scalapack_lp64.a $(BLACS)

以下のコマンドを実行して、VASP をビルドします。

$make std gam ncl

これにより、vasp_std、vasp_gam、vasp_ncl の実行ファイルが bin ディレクトリーに作成されます。

ステップ 4 – VASP を実行

必要なパラメーターを指定して mpiexec コマンドを実行し、vasp を実行します。例えば、48 個のプロセスを実行するには、以下のようにワークロードとホスト名を machinefile に記述します。

$mpiexec.hydra –np 48 -f machinefile ./vasp_std

付録 – vasp が oneMKL と連携しているかどうかを確認するには?

oneMKL と VASP のリンクが正常に行われていることを確認するには、以下のように bin/vasp 上で ldd を実行してください。

[vasp.6.2.0]$ ldd bin/vasp_std
        inux-vdso.so.1 =>  (0x00007ffff3bd2000)
        libmkl_intel_lp64.so.1 => 
/opt/intel/oneAPI/2021.2/mkl/2021.2.0/lib/intel64/libmkl_intel_lp64.so.1 (0x00002ac6f2a46000)
        libmkl_cdft_core.so.1 => 
/opt/intel/oneAPI/2021.2/mkl/2021.2.0/lib/intel64/libmkl_cdft_core.so.1 (0x00002ac6f37ab000)
        libmkl_scalapack_lp64.so.1 => 
/opt/intel/oneAPI/2021.2/mkl/2021.2.0/lib/intel64/libmkl_scalapack_lp64.so.1 (0x00002ac6f39d3000)
        libmkl_blacs_intelmpi_lp64.so.1 => 
/opt/intel/oneAPI/2021.2/mkl/2021.2.0/lib/intel64/libmkl_blacs_intelmpi_lp64.so.1 (0x00002ac6f42fe000)
        libmkl_sequential.so.1 => 
/opt/intel/oneAPI/2021.2/mkl/2021.2.0/lib/intel64/libmkl_sequential.so.1 (0x00002ac6f4544000)
        libmkl_core.so.1 => /opt/intel/oneAPI/2021.2/mkl/2021.2.0/lib/intel64/libmkl_core.so.1 (0x00002ac6f6142000)
        libiomp5.so => 
/opt/intel/oneAPI/2021.2/compiler/2021.2.0/linux/compiler/lib/intel64_lin/libiomp5.so (0x00002ac6ff6dd000)
        ……
        libmpifort.so.12 => /opt/intel/oneAPI/2021.2/mpi/2021.2.0//lib/libmpifort.so.12 (0x00002ac6ffdfb000)
        libmpi.so.12 => /opt/intel/oneAPI/2021.2/mpi/2021.2.0//lib/release/libmpi.so.12 (0x00002ac7001b9000)
        ……
        ……
        libfabric.so.1 => /opt/intel/oneAPI/2021.2/mpi/2021.2.0//libfabric/lib/libfabric.so.1 (0x00002ac70238d000)


参照記事: Building VASP* with Intel® oneAPI Base and HPC Toolkits