|

|

CP2K: квантовая химия "для кающихся грешников"(с)
Разгребаюсь потихоньку с CP2K.
Совершенно примечательная программа для квантовохимических расчетов. Свободная и бесплатная, от перечня возможностей начинается бурное слюноотделение, но уровень документирования... просто катастрофически ужасен. Есть reference manual с кратким описанием параметров, есть набор собственных тестов, несколько туториалов и упражнений по отдельным вопросам, плюс гугл-группа (весьма живая). Влазить в этот трэш без предварительного опыта с какой-нибудь более вменяемой программой настоятельно не рекомендуется.
Ну а я попробую изобразить небольшую серию постов с примерами и объяснениями, по мотивам и итогам, может кому поможет.
Итак, для начала о том, как поставить это себе на комп. В Debian и особо мною любимом LMDE делается, как и полагается, линейно через apt-get install cp2k (cp2k есть в стандартном репозитории Debian).
Однако, если нужна более свежая версия (в том числе экспериментальная), а также если хочется использовать CUDA (да, cp2k это умеет), то нужно ставиться из исходников.
В системе нужно поставить следующие пакеты: subversion gfortran gcc make libopenblas-dev libfftw3-dev libint-dev libxc-dev g++ (названия указаны для пакетной базы Debian, все присутствуют в репозитории. UPD 16.01.2016: добавил g++). Для CUDA нужен также nvidia-cuda-toolkit. На самом деле часть этих пакетов опциональна, кроме того, можно использовать еще некоторые дополнительные библиотеки, которых нет в репозитории --- я перечислил все, что можно выжать из обычного репозитория Debian.
Отдельное замечание о libopenblas-dev: при установке этот пакет через механизм update-alternatives изменяет конфигурацию системы таким образом, чтобы функции динамически подключаемой библиотеки BLAS на системе выполняла именно OpenBLAS. Если вы устанавливали OpenBLAS ранее или пользуетесь другими библиотеками --- трахайтесь с компиляцией самивнимательно настройте параметры под себя.
Инструкции по получению исходников приведены на оф.сайте: http://www.cp2k.org/download Для получения текущей экспериментальной версии нужно выполнить команду svn checkout http://svn.code.sf.net/p/cp2k/code/trunk cp2k
Настройка параметров компиляции производится с помощью файлов в подкаталоге cp2k/cp2k/arch полученного дерева исходников. Название файла в этом каталоге соответствует представляемой им "платформе" --- важнейшим параметрам системы: ОС, компилятор, набор инструкций процессора, а также способ параллелизации. CP2K поддерживает параллельность через MPI и через OpenMP, а также через комбинацию двух этих вариантов. По опыту работы на однопроцессорных многоядерных системах --- OpenMP в CP2K работает быстрее и [естественно] жрет меньше памяти, чем MPI. Потому править будем файл Linux-x86-64-gfortran.ssmp.
Мой конфиг, удачно прошедший компиляцию, выглядит так:
Без CUDA:
CC = gcc CPP = FC = gfortran LD = gfortran AR = ar -r OPENBLAS_INC = /usr/include/openblas OPENBLAS_LIB = /usr/lib GCC_DIR= FFTW_INC = /usr/include FFTW_LIB = /usr/lib/x86_64-linux-gnu LIBINT_INC = /usr/include/libint LIBINT_LIB = /usr/lib DFLAGS = -D__FFTW3 -D__LIBINT\ -D__LIBINT_MAX_AM=7 -D__LIBDERIV_MAX_AM1=6 -D__MAX_CONTR=4 #-D__PW_CUDA CPPFLAGS = FCFLAGS = $(DFLAGS) -O2 -ffast-math -ffree-form -ffree-line-length-none\ -fopenmp -ftree-vectorize -funroll-loops\ -mtune=native\ -I$(OPENBLAS_INC) -I$(FFTW_INC) -I$(LIBINT_INC) LDFLAGS = $(FCFLAGS) -static-libgfortran LIBS = $(OPENBLAS_LIB)/libopenblas.a\ $(FFTW_LIB)/libfftw3.a\ $(FFTW_LIB)/libfftw3_threads.a\ $(LIBINT_LIB)/libderiv.a\ $(LIBINT_LIB)/libint.a
С CUDA:
CC = gcc CPP = FC = gfortran LD = gfortran AR = ar -r OPENBLAS_INC = /usr/include/openblas OPENBLAS_LIB = /usr/lib GCC_DIR= FFTW_INC = /usr/include FFTW_LIB = /usr/lib/x86_64-linux-gnu LIBINT_INC = /usr/include/libint LIBINT_LIB = /usr/lib DFLAGS = -D__FFTW3 -D__LIBINT\ -D__LIBINT_MAX_AM=7 -D__LIBDERIV_MAX_AM1=6 -D__MAX_CONTR=4 CPPFLAGS = FCFLAGS = $(DFLAGS) -O2 -ffast-math -ffree-form -ffree-line-length-none\ -fopenmp -ftree-vectorize -funroll-loops\ -mtune=native\ -I$(OPENBLAS_INC) -I$(FFTW_INC) -I$(LIBINT_INC) LDFLAGS = $(FCFLAGS) -static-libgfortran LIBS = $(OPENBLAS_LIB)/libopenblas.a\ $(FFTW_LIB)/libfftw3.a\ $(FFTW_LIB)/libfftw3_threads.a\ $(LIBINT_LIB)/libderiv.a\ $(LIBINT_LIB)/libint.a
NVCC = /usr/bin/nvcc DFLAGS += -D__ACC -D__DBCSR_ACC -D__PW_CUDA NVFLAGS = $(DFLAGS) --gpu-architecture=compute_30 CUDAPATH = /usr/lib/x86_64-linux-gnu LIBS += -L$(CUDAPATH) -lcudart -lcublas -lcufft -lrt
Особо обращаю внимание, что $NVFLAGS обязательно должны содержать $(DFLAGS) --- инструкции по сборке этого не упоминают, но без этого компиляция не удастся.
Поместив нужный файл в подкаталог cp2k/cp2k/arch, переходим в подкаталог cp2k/cp2k/makefiles и выполняем make ARCH=Linux-x86-64-gfortran VERSION=ssmp
Если используете версию с CUDA, я бы рекомендовал отдельно собрать версию без CUDA, и держать рядом на всякий случай. Например, на карте с 1 Гб видеопамяти CP2K периодически ругается на невозможность выделить видеопамять и вылетает, приходится запускать без GPU. Названия версий стандартные, но принципиально не ограничены --- скажем, для конфигурации без CUDA можно создать конфигурационный файл Linux-x86-64-gfortran.ssmpnc (nc всмысле no-CUDA) или как-то так.
Результат компиляции будет в подкаталоге cp2k/cp2k/exe, там будет ряд файлов, реально нужен только cp2k.ssmp (ну и cp2k.ssmpnc), который можно копировать куда угодно и использовать.
Отдельное замечание об очистке каталога при неудачной сборке. Авторы наделали много разных опций для очистки, до конца там не совсем понятно, что следует использовать в каких случаях, я использую make clean ; make veryclean ; make realclean ; make distclean --- упорото, но вроде работает.
|
|