CPMD

De i2basque

CPMD es una implementación paralelizada de la teoría de la densidad funcional para ondas planares y pseudopotenciales, principalmente diseñada para el cálculo de dinámica molecular basada en simulaciones de Car-Parrinello.

Instalación de CPMD para 64 bits

Primero hay que descargar el código fuente del programa desde CPMD. En el sistema se ha instalado la versión 3.9.2 de este programa.

Una vez descomprimido necesitamos instalar un parche ya que hay algunos errores que hay que arreglar en la rutina fileopen. Hay que descargar el parche y el script para instalarlo. El parche se instala desde el directorio de los fuentes, directorio SOURCE.

La mayoría de las instrucciones están adaptadas de CPMD vs. Linux personalizadas para el tipo de máquinas que vamos a usar, Intel EM64T biprocesadores usando MPI y OpenMP y las librerías matemáticas de alto rendimiento Intel MKL (Math Kernel Libraries).

Previamente a la instalación de CPMD hemos procedido a instalar las librerías Intel MKL, si bien se pueden usar las librerías matemáticas LAPACK y BLAS precompiladas para diferentes arquitecturas que se pueden descargar de la página arriba mencionada. En nuestro caso hemos probado con la librería libatlas_x86_64.a en vez de la libatlas_x86_64_mt.a que es la misma para biprocesadores pero que no funcionaba, supongo que tendrá que ver que están compiladas para AMD Opteron en vez de para la arquitectura Intel EM64T.

Las pruebas realizadas nos dan un rendimiento superior con el uso de la librería Intel MKL sobre las LAPACK y BLAS.

A la hora de instalar CPMD procederemos a crear el fichero Makefile necesario para la compilación de la librería y programa. Para ello nos situamos en el directorio SOURCE y ahí ponemos:

./mkconfig.sh -m -SRC=$PWD -DEST=../IFORT-AMD64-MPI/ IFORT-AMD64-MPI

Lo que nos creará un directorio en la raíz de CPMD llamado IFORT-AMD64-MPI donde se ha creado el fichero Makefile que nos permitirá la compilación de los fuentes.

Por si en la versión de los fuentes no viene el script IFORT-AMD64-MPI aquí abajo lo indico, y hay que ponerlo en SOURCE/CONFIGURE/IFORT-AMD64-MPI

#INFO#
#INFO# Configuration to build a parallel cpmd executable for a linux machine
#INFO# with an AMD64/EM64T cpu (Opteron/AthlonFX/Athlon64/Xeon-EM64T) using 
#INFO# the Intel Fortran Compiler with EM64T extensions.
#INFO#
#INFO# For optimal performance you should use a specifically tuned BLAS/LAPACK
#INFO# library. 
#INFO#
#INFO# see http://www.theochem.ruhr-uni-bochum.de/~axel.kohlmeyer/cpmd-linux.html
#INFO# for more information on compilind and running CPMD on linux machines.
#INFO#
#INFO# NOTE: CPMD cannot be compiled with the GNU Fortran compiler.
#INFO#
    IRAT=2
    CFLAGS='-O2 -Wall -m64'
    CPP='/lib/cpp -P -C -traditional'
    CPPFLAGS='-D__Linux -D__PGI -DFFT_DEFAULT -DPOINTER8 -DLINUX_IFC \
       -DPARALLEL -DMYRINET'
    FFLAGS='-pc64  -tpp7 -O3 -unroll'
    LFLAGS='-static-libcxa -L. -latlas_x86_64'
    FFLAGS_GROMOS='-Dgood_luck'
    if [ $debug ]; then
      FC='mpif77 -c -g'
      CC='mpicc -g -Wall -m64'
      LD='mpif77 -g'
    else
      FC='mpif77 -c '
      CC='mpicc'
      LD='mpif77 '
    fi

Se usa el script IFORT-AMD64-MPI porque como su nombre indica es para realizar un fichero Makefile basado en el compilador de Fortran ifort (de Intel), para la arquitectura AMD64 (igual que EMT64), y con posibilidad de uso paralelizado con MPI.

Entramos en el directorio IFORT-AMD64-MPI que cuelga del raíz de los fuentes del CPMD y que se acaba de crear. Editamos dicho fichero y realizamos los siguientes cambios:

#----------------------------------------------------------------------------
# Makefile for cpmd.x (plane wave electronic calculation)
# Configuration: IFORT-AMD64-MPI
# Creation of Makefile: Aug 23 2006
# on Linux vit1.grid.i2bask.net 2.6.8-10-em64t-p4-smp #1 SMP Fri Jan 28 05:39:41 CET 2005 x86_64 GNU/Linux
# Author: ridruejo
#----------------------------------------------------------------------------
#
SHELL = /bin/sh
#
#--------------- Default Configuration for IFORT-AMD64-MPI ---------------
SRC  = .
DEST = .
BIN  = .
#QMMM_FLAGS = -D__QMECHCOUPL
#QMMM_LIBS  = -L. -lmm
FFLAGS = -pc64  -tpp7 -O3 -unroll -fpp -openmp
LFLAGS = -Xlinker -lsvml -L. \
 -L/opt/mkl/8.0.1/lib/em64t -lmkl_lapack -lmkl_em64t \
 -lguide -Vaxlib

CFLAGS = -O2 -Wall -m64
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DFFT_DEFAULT -DPOINTER8 -DLINUX_IFC \
        -DPARALLEL -DMYRINET
NOOPT_FLAG =
CC = /opt/mpich-cpmd64/bin/mpicc
FC = /opt/mpich-cpmd64/bin/mpif77 -c
LD = /opt/mpich-cpmd64/bin/mpif77
AR = ar

#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
# Personal Configuration
#----------------------------------------------------------------------------
SRC = /home/julen/instalation_files/CPMD-3.9.2/SOURCE
FC = /opt/mpich-cpmd64/bin/mpif77 -c  -I. -I$(SRC)
#----------------------------------------------------------------------------
# End of Personal Configuration
#----------------------------------------------------------------------------
CFGDEST = ../IFORT-AMD64-MPI/
CFGMACH = IFORT-AMD64-MPI
#
#  LIST OF FILES
#.......................
#.......................
#.......................
################## SIGUE EL FICHERO Makefile SIN MODIFICACIONES #############

En el texto mostrado arriba se pueden ver las modificaciones subrayadas en cyan. La variable FFLAGS se ha modificado para su uso con OpenMP (-fpp -openmp). La variable LFLAGS se ha modificado para su uso con la librería Intel MKL, y las variables CC, FC y LD se han modificado para que usen la implementación de MPICH específicamente compiladas para su uso con CPMD.

Después de la modificación se hace el make y se espera a que de un error la compilación justo al final debido a la duplicación de la función IZAMAX que se encuentra tanto en el fichero util.f como en la librería Intel MKL, ver Error IZAMAX. Basta con modificar el fichero util.f que se ha generado en este directorio y comentar todas las líneas de la función IZAMAX que se encuentran en él, para así usar sólo la función IZAMAX que se encuentra en la librería Intel MKL. Una vez comentada la función se vuelve a hacer el make.

El ejecutable se encuentra en:

/opt/mpich-cpmd64/bin/cpmd64.x

También se ha instalado la versión de 32 bits de CPMD de la misma forma que se encuentra:

/opt/mpich-cpmd32/bin/cpmd.x

La línea de configuración es:

./mkconfig.sh -m -SRC=$PWD -DEST=../PC-IFC-P4-MPI/ PC-IFC-P4-MPI

El fichero Makefile de la versión de 32 bits:

#----------------------------------------------------------------------------
# Makefile for cpmd.x (plane wave electronic calculation)
# Configuration: PC-IFC-P4-MPI
# Creation of Makefile: Jan 11 2006
# on Linux don1.grid.i2bask.net 2.6.10-1-686-smp #1 SMP Fri Mar 11 01:49:45 EST 2005 i686 GNU/Linux
# Author: ridruejo
#----------------------------------------------------------------------------
#
SHELL = /bin/sh
#
#--------------- Default Configuration for PC-IFC-P4-MPI ---------------
SRC  = .
DEST = .
BIN  = .
#QMMM_FLAGS = -D__QMECHCOUPL
#QMMM_LIBS  = -L. -lmm
FFLAGS = -c -w90 -w95 -O2 -unroll -pc64 -tpp7 -cm -fpp -openmp
#LFLAGS = -llapack-ifc -lblas-ifc -latlas-ifc -Vaxlib $(QMMM_LIBS)
#LFLAGS = -L. -latlas -Vaxlib $(QMMM_LIBS)
LFLAGS =  -static-libcxa -Xlinker -Bstatic -lsvml         \
 -L/opt/mkl/8.0.1/lib/32 -lmkl_lapack -lmkl_ia32 \
 -lguide -Vaxlib -Xlinker -Bdynamic -lpthread
CFLAGS = -c -O2 -Wall
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DFFT_DEFAULT \
               -DPARALLEL -DMYRINET -DLINUX_IFC  
NOOPT_FLAG = 
CC = /opt/mpich-cpmd/bin/mpicc 
FC = /opt/mpich-cpmd/bin/mpif77 
LD = /opt/mpich-cpmd/bin/mpif77
AR = ar
#----------------------------------------------------------------------------
  
#----------------------------------------------------------------------------
# Personal Configuration
#----------------------------------------------------------------------------
SRC = /home/julen/CPMD-3.9.2/SOURCE
FC = /opt/mpich-cpmd/bin/mpif77 -fpp -openmp -I. -I$(SRC)
#----------------------------------------------------------------------------
# End of Personal Configuration
#----------------------------------------------------------------------------
CFGDEST = ../cpmd-pc-ifc-p4-mpi/
CFGMACH = PC-IFC-P4-MPI
#
#  LIST OF FILES
#.......................
#.......................
#.......................
################## SIGUE EL FICHERO Makefile SIN MODIFICACIONES #############

Otro ejemplo de Makefile para 64 bits sin MPI pero con soporte OpenMP, con las Intel MKL en un Core 2 Duo de Intel y con la versión de CPMD 3.11:

#----------------------------------------------------------------------------
# Makefile for cpmd.x (plane wave electronic calculation)
# Configuration: IFORT-AMD64
# Creation of Makefile: Nov 24 2006
# on Linux nubo.localdomain 2.6.18-1.2849.fc6 #1 SMP Fri Nov 10 12:34:46 EST 2006 x86_64 x86_64 x86_64 GNU/Linux
# Author: root
#----------------------------------------------------------------------------
#
SHELL = /bin/sh
#
#--------------- Default Configuration for IFORT-AMD64 ---------------
SRC  = .
DEST = .
BIN  = .
FFLAGS = -pc64  -tpp6 -O2 -unroll -fpp -openmp 
LFLAGS =  -L. -L/opt/intel/mkl/8.1/lib/em64t -lmkl_lapack \
          -lmkl_em64t -lguide -lpthread
CFLAGS = -O2 -Wall -m64
CPP = /lib/cpp -P -C -traditional
CPPFLAGS = -D__Linux -D__PGI -DFFT_DEFAULT -DPOINTER8 -DLINUX_IFC  
NOOPT_FLAG = 
CC = gcc
FC = /opt/intel/fce/9.1.036/bin/ifort -c 
LD = /opt/intel/fce/9.1.036/bin/ifort -i-static
AR = ar
#----------------------------------------------------------------------------
# Personal Configuration
#----------------------------------------------------------------------------
SRC = /home/julen/Gauzak/Programak/CPMD/CPMD-3.11.1/SOURCE
FC = /opt/intel/fce/9.1.036/bin/ifort -c  -I. -I$(SRC)
#----------------------------------------------------------------------------
# End of Personal Configuration
#----------------------------------------------------------------------------
CFGDEST = ../IFORT-AMD64/
CFGMACH = IFORT-AMD64
CFGQMMM = 
# 
#  LIST OF FILES
#.......................
#.......................
#.......................
################## SIGUE EL FICHERO Makefile SIN MODIFICACIONES #############

Volver a Manual GRID de i2BASK

Herramientas personales
Otros idiomas