31 авг. 2012 г.

Запуск GAMESS на кластере

Для запуска GAMESS на кластере ФГБНУ ТИСНУМ нужно выполнить команду

rungms input_name ncpus

где input_name - имя входного файла, ncpus - количество ядер для выполнения расчета, таким образом пример запуска файла input.inp на 16 процессорах будет выглядеть следующим образом:

rungms input.inp 16

После чего в рабочей папке появится файл output

Не забываем перед каждым запуском программы проверять папку /home/$USER/work/scr, если там что-то есть, то нужно ее полностью очистить(!), и только потом запускать программу.

Установка GAMESS на CentOS 6.2

Тут вкратце будет описан процесс установки программы GAMESS на кластер под системой CentOS 6.2 и подобных.
Для установке необходимы установленные Intel MPI Library, Intel Fortran, Intel C++.
После распаковки архива

tar -zxvf gamess.tar.gz

заходим в папка gamess, после чего выполняем скрипт ./config, где отвечаем на вопросы о своей системе:
======================================================================
   GAMESS can compile on the following 32 bit or 64 bit machines:
axp64    - Alpha chip, native compiler, running Tru64 or Linux
cray-xt  - Cray's massively parallel system, running CNL
hpux32   - HP PA-RISC chips (old models only), running HP-UX
hpux64   - HP Intel or PA-RISC chips, running HP-UX
ibm32    - IBM (old models only), running AIX
ibm64    - IBM, Power3 chip or newer, running AIX or Linux
ibm64-sp - IBM SP parallel system, running AIX
ibm-bg   - IBM Blue Gene (P or L model), these are 32 bit systems
linux32  - Linux (any 32 bit distribution), for x86 (old systems only)
linux64  - Linux (any 64 bit distribution), for x86_64 or ia64 chips
           AMD/Intel chip Linux machines are sold by many companies
mac32    - Apple Mac, any chip, running OS X 10.4 or older
mac64    - Apple Mac, any chip, running OS X 10.5 or newer
sgi32    - Silicon Graphics Inc., MIPS chip only, running Irix
sgi64    - Silicon Graphics Inc., MIPS chip only, running Irix
sun32    - Sun ultraSPARC chips (old models only), running Solaris
sun64    - Sun ultraSPARC or Opteron chips, running Solaris
win32    - Windows 32-bit (Windows XP, Vista, 7, Compute Cluster, HPC Edition)
win64    - Windows 64-bit (Windows XP, Vista, 7, Compute Cluster, HPC Edition)
    type 'uname -a' to partially clarify your computer's flavor.
please enter your target machine name: linux64

======================================================================
Where is the GAMESS software on your system?
A typical response might be /u1/mike/gamess,
most probably the correct answer is /share/soft/gamess

GAMESS directory? [/share/soft/gamess]

Жмем enter, если не хотим менять месторасположение
======================================================================
Setting up GAMESS compile and link for GMS_TARGET=linux64
GAMESS software is located at GMS_PATH=/share/soft/gamess

Linux offers many choices for FORTRAN compilers, including the GNU
compiler set ('g77' in old versions of Linux, or 'gfortran' in
current versions), which are included for free in Unix distributions.

There are also commercial compilers, namely Intel's 'ifort',
Portland Group's 'pgf77', and Pathscale's 'pathf90'.  The last
two are not common, and aren't as well tested as the others.

type 'rpm -aq | grep gcc' to check on all GNU compilers, including gcc
type 'which gfortran' to look for GNU's gfortran (a very good choice),
type 'which g77'      to look for GNU's g77,
type 'which ifort'    to look for Intel's compiler,
type 'which pgf77'    to look for Portland Group's compiler,
type 'which pathf90'  to look for Pathscale's compiler.
Please enter your choice of FORTRAN: ifort

Use of 'ifort' requires additional information since library
names, and compiler flags, are very version number specific.
note: ifort's directory tree is typically
         /opt/intel/fc
         /opt/intel/fce
         /opt/intel/Compiler
         /opt/intel/composerxe-2011   (et cetera).

Type 'which ifort' and note the version number in the reply.
Enter only the main version number, such as 8, 9, 10, 11, 12.
In case of the newer 'composerxe' bundles, the version is not
the year, but can be obtained by 'ifort -V'.
Version? 12

Писать сюда полную версию типа 12.1.3 или 12.0.1 не стоит, работать не будет
======================================================================
Linux distributions do not include a standard math library.

There are several reasonable add-on library choices,
       MKL from Intel           for 32 or 64 bit Linux (very fast)
      ACML from AMD             for 32 or 64 bit Linux (free)
     ATLAS from www.rpmfind.net for 32 or 64 bit Linux (free)
and one very unreasonable option, namely 'none', which will use
some slow FORTRAN routines supplied with GAMESS.  Choosing 'none'
will run MP2 jobs 2x slower, or CCSD(T) jobs 5x slower.

Some typical places (but not the only ones) to find math libraries are
Type 'ls /opt/intel/mkl'                 to look for MKL
Type 'ls /opt/intel/Compiler/mkl'        to look for MKL
Type 'ls /opt/intel/composerxe-2011/mkl' to look for MKL
Type 'ls -d /opt/acml*'                  to look for ACML
Type 'ls /usr/lib64/atlas'               to look for Atlas

Enter your choice of 'mkl' or 'atlas' or 'acml' or 'none': mkl

======================================================================
The exact MKL libraries needed depend on its version number.
First, where is your MKL software installed?  For example
            /opt/intel/mkl                    -or-
            /opt/intel/Compiler/mkl           -or-
            /opt/intel/composerxe-2011/mkl    -or-
            /your/sites/nonstandard/path/mkl
Don't enter anything past the mkl subdirectory pathname.
MKL pathname? /share/intel/mkl
Second, it is possible to have multiple version of MKL
installed, but often there is only one version installed.
Your system seems to have the following version(s):
benchmarks  bin  examples  include  interfaces  lib  tests  tools
a) If the above output contains one or more version number,
enter the specific version you prefer, giving all decimals.
b) If the above output contains paths like 'bin' and 'lib',
enter the word 'skip' next.
MKL version (or 'skip')? skip

======================================================================
Далее выведется информация подобная этой 

Math library 'mkl' will be taken from /share/intel/mkl/lib/intel64

please hit <return> to compile the GAMESS source code activator
======================================================================
Далее будет скомпилирован файл активации, не знаю зачем он нужен, но без него ничего не работает :)

ifort -o tools/actvte.x actvte.f
ifort: Command not found.
unset echo
Source code activator was successfully compiled.

please hit <return> to set up your network for Linux clusters.

Файл actvte.x скомпилирован, теперь жмем enter и движемся дальше

======================================================================
If you have a slow network, like Gigabit Ethernet (GE), or
if you have so few nodes you won't run extensively in parallel, or
if you have no MPI library installed, or
if you want a fail-safe compile/link and easy execution,
     choose 'sockets'
to use good old reliable standard TCP/IP networking.

If you have an expensive but fast network like Infiniband (IB), and
if you have an MPI library correctly installed,
     choose 'mpi'.

communication library ('sockets' or 'mpi')? mpi

Выбрали mpi, далее он попросит выбрать тип этого самого MPI
======================================================================
The MPI libraries which work well on linux64/Infiniband are
      Intel's MPI (impi)
      MVAPICH2
      SGI's mpt from ProPack, on Altix/ICE systems
Other libraries may work, please see 'readme.ddi' for info.
The choices listed above will compile and link easily,
and are known to run correctly and efficiently.

Enter 'sockets' if you just changed your mind about trying MPI.

Enter MPI library (impi, mvapich2, mpt, sockets): impi

======================================================================
MPI can be installed in many places, so let's find impi
The person who installed your MPI can tell you where it really is.

impi     is probably located at a directory like
              /opt/intel/impi/3.2
              /opt/intel/impi/4.0.1.007
              /opt/intel/impi/4.0.2.003
         include the version numbers in your reply below.
mvapich2 could be almost anywhere, perhaps some directory like
              /usr/mpi/gcc/mvapich2-1.2p1
openmpi  could be almost anywhere, perhaps some directory like
              /usr/mpi/openmpi-1.4.3
mpt      is probably located at a directory like
              /opt/sgi/mpt/mpt-1.26
Please enter your MPI's location: /opt/intel/impi/4.0.3

======================================================================
Вот так, конфигурация закончилась, и у нас появился файл install.info, который приблизительно должен выглядеть вот так:

#!/bin/csh
#   compilation configuration for GAMESS
#   generated on tisnum-head1.cluster
#   generated at Fri Aug 31 15:43:18 MSK 2012
setenv GMS_PATH            /share/soft/GAMESS/gamess
#         machine type
setenv GMS_TARGET          linux64
#         FORTRAN compiler setup
setenv GMS_FORTRAN         ifort
setenv GMS_IFORT_VERNO     12
#         mathematical library setup
setenv GMS_MATHLIB         mkl
setenv GMS_MATHLIB_PATH    /share/intel/mkl/lib/intel64
setenv GMS_MKL_VERNO       12
#         parallel message passing model setup
setenv GMS_DDI_COMM        mpi
setenv GMS_MPI_LIB         impi
setenv GMS_MPI_PATH        /opt/intel/impi/4.0.3

После того, как конфигурация прошла успешно, заходим в ddi/ и слегка изменяем скрипт compddi, а именно, определяем максимальное число процессоров на узле и максимальное число узлов


set MAXCPUS  = 32
set MAXNODES = 256


запускаем скрипт 

./compddi

После успешной работы скрипта получаем на выходе библиотеку libddi.a, которая нам понадобится.
Далее переходим в обратно и запускаем скрипт 

./compall

который нам скомпилирует нашу программу. Это займет примерно 30 минут времени.
После того, как компилирование завершилось, запускаем 

./lked

который прилинкует все необходимые библиотеки и создаст файл gamess.00.x, который, непосредственно и будет запускаемым файлом.

Но этого мало, чтобы корректно запускать GAMESS нужно отредактировать файл rungms непосредственно под свою систему, потому что запуск программы будет запускаться только через скрипт rungms. Как это сделать каждый решается сам. У меня это заняло 2-3 дня , чтобы привести скрипт rungms к надлежащему виду для запуска.
Удачи!

17 авг. 2012 г.

Основные команды Linux

Работа с файлами
ls – список файлов и каталогов
ls -l – форматированный список со скрытыми каталогами и файлами
cd dir – сменить директорию на dir
cd – сменить на домашний каталог
pwd – показать текущий каталог
mkdir dir – создать каталог dir
rm file – удалить file
rm -r dir – удалить каталог dir
rm -f file – удалить форсированно file
rm -rf dir – удалить форсированно каталог dir
cp file1 file2 – скопировать file1 в file2
cp -r dir1 dir2 – скопировать dir1 в dir2; создаст каталог dir2, если он не существует
mv file1 file2 – переименовать или переместить file1 в file2. если file2 существующий каталог - переместить file1 в каталог file2
ln -s file link – создать символьную ссылку link к файлу file
touch file – создать file
vi file – вывести содержимое file
head file – вывести первые 10 строк file
tail file – вывести последние 10 строк file
Работа с SSH
scp /home/user/file  user@XXX.XXX.XXX.XXX:/home/user – скопировать файл file из директории /home/user/ на удаленный компьютер с адресом XXX.XXX.XXX.XXX в директорию /home/user/
ssh user@host – подключится к host под именем user
ssh -p port user@host – подключится к host на порт port как user
Поиск файлов
find / -name file1 – найти файлы и директории с именем file1. Поиск начать с корня (/)
find / -user user1 – найти файл и директорию принадлежащие пользователю user1. Поиск начать с корня (/)
find /home/user1 -name "*.bin" – найти все файлы и директории, имена которых оканчиваются на '.bin'. Поиск начать с '/ home/user1'
locate "*.ps" – найти все файлы, содержащие в имени '.ps'.
whereis halt – показывает размещение бинарных файлов, исходных кодов и руководств, относящихся к файлу 'halt'
which halt – отображает полный путь к файлу 'halt'
Архивация
tar -cf file.tar files – создать tar-архив с именем file.tar содержащий files
tar -xf file.tar – распаковать file.tar
tar -xzf file.tar.gz – распаковать tar с Gzip
tar -xjf file.tar.bz2 – распаковать tar с Bzip2

16 авг. 2012 г.

Ошибка с mpd

При запуске параллельной программы с использованием PBS или же без него может задача может не запуститься со следующей ошибкой


mpiexec: cannot connect to local mpd (/tmp/mpd.console_user); possible causes:
1. no mpd is running on this host
2. an mpd is running but was started without a "console" (-n option)

Ошибка в том, что не была запущена служба  mpd, которая связывает узлы и процессоры между собой для их параллельной работы. Если прочитать сообщение, то там написано, что ее нужно просто запустить.

Возможно, закономерный вопрос, почему служба сразу не запускается по умолчанию? Не запускается она потому что для каждого нового пользователя она должна быть запущена заново. Если пользователь работает редко на кластере, то служба со времени отключится за экономией ресурсов.

Для обычного многоядерного ПК можно было бы ее запустить командой

mpd &

потому что на обычном ПК имеется всего 1 узел. В случае кластера службу mpd нужно запустить на всех узлах кластера. Поэтому используем 2 команды

mpdallexit

которая завершит все запущенные службы mpd на всех узлах, в случае, если вдруг на одном из узлов она была запущена, но Вы на нем не считали, а попали на узел без mpd. И затем

mpdboot -n 10 -f /home/user/sys/mpd.hosts

Запускаем службу mpd на 10 узлах, которые он возьмет из файл mpd.hosts, который находится в домашнем каталоге в папке sys.
После всего этого можно заново запускать программу на счет, и все будет нормально

15 авг. 2012 г.

Немного про mpienv

На вычислительном кластере ТИСНУМ-а есть специальный скрипт mpienv, который находится в /home/user/sys.
Скрипт позволяет легко менять параллельное окружение.
При наборе команды mpienv появляется краткое описание скрипта

===========================================================
                                           Information about  mpienv
===========================================================
Please run: mpienv [ARG]
ARGS
         impi.i      -    IntelMPI-4.0.3.008 with Intel Compilers
         ompi.g    -    OpenMPI-1.6 with GNU Compilers
         ompi.i     -    OpenMPI-1.6 with Intel Compilers
         chck    -    View the current environment settings
example
         mpienv impi.i
Don't forget to restart your session after changing MPI
===========================================================

Набрав команду 

mpienv impi.i 

получим 


[alex@tisnum-head1 ~]$ mpienv impi.i

Your MPI implimentations at all nodes are IntelMPI-4.0.3.008

!! Please, restart your session (logout) to apply changes!!

После чего необходимо перезагрузить терминал, о чем и говорит красная надпись :)

Если набрать команду 

mpienv chck

то получим вывод типа параллельного окружения на управляющем узле и на вычислительных узлах кластера

Your MPI implimentation at all nodes
intel_mpi_intel64-4.0.3.008

Вот так все легко и просто :)

Работа с PBS заданиями

Чаще всего работа с планированием и запуском задач связана с программой Torque. Torque управляет загрузкой вычислительных комплексов, состоящих из определенного количества вычислительных узлов, работающих под операционной системой семейства Unix.
Итак, чтобы поставить задачу на счет, нужно поставить ее в очередь. Для этого необходим скрипт (файл) в котором будут прописаны параметры задания (время счета, файл запуска, ресурсы и т.п.)

Пример файла приведен ниже (/home/user/job.pbs):

#!/bin/sh
#
#Команды, задающие основные параметры задания
#
#PBS -N JobName                             # Имя задачи
#PBS -l nodes=1:ppn=32                    # Количество узлов и процессоров
#PBS -l walltime=00:10:00                  # Время выполнения задание часы:минуты:секунды
#PBS -M yourmail@mail.ru                 # Адрес почты для уведомлений
#PBS -m abe                                       # Отправлять почту при любой ситуации

date                                                 # Отобразить время запуска
cd /home/alex/test/QE                      # Полный путь к запускаемому файлу расчета
#
# mpiexec -np nodes*cpus /full/path/to/program/prog > input_file    
# Пример строки запуска программы prog на nodes*cpus ядрах
#
# Пример запуска программы quantum espresso на 32 ядрах
mpiexec /share/soft/espresso-4.1.3/bin/pw.x > input
#
date                                                 # Время окончания

Запустить задание в очередь осуществляется командой

qsub job.pbs

После постановки задачи в очередь будет выдан порядковый номер задачи

122.tisnum-head1.cluster

Проверить статус своей задачи в очереди можно командой 

qstat

После чего появится приблизительно следующее

Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
122.tisnum-head1           siesta           alex                   0 R batch

Здесь написано, что задача с номером 122, с именем siesta, запустил которую пользователь alex запущена R в очереди batch.
Ниже приведен список всех возможных статусов задачи

C           -          complete; Задание успешно завершило свою работу
E           -          exit; Прерывание работы задания
H           -          hold; Задание заблокировано
Q           -          queued; Задание поставлено в очередь и готово для выполнения
R           -          running; Задание выполняется
T            -         waiting; Задание ожидает, пока подойдет очередь для его выполнения
S           -          suspended; Пауза в работе задания

Если задание необходимо удалить из очереди по каким любо причинам, то нужно выполнить команду

qdel num

где num - порядковый номер Вашего задания

Знакомство с mpi-selector

Здесь немного опишу одну очень полезную программу, а именно mpi-selector.

Программу mpi-selector можно скачать, используя команду yum:

yum install mpi-selector

Если же так установить не получилось по каким-либо причинам, то есть второй способ: скачать OFED сборку с сайта (https://www.openfabrics.org/downloads/OFED/) и установить оттуда mpi-selector. Все очень просто.

После установки нужно его настроить. Для начала нужно знать какие реализации MPI установлены на Вашей машине. Стандартно это OpenMPI и/или IntelMPI. Как правило при установке mpi-selector он сам находит окружения. На всякий случай, как настроить mpi-selector для работы, например, с IntelMPI.
Пишем в командной строке:

mpi-selector --register intelmpi --source-dir /directory/with/mpivars

/directory/with/mpivars - это путь, где находятся скрипты для определения переменных окружения. В случае IntelMPI они находятся в /opt/intel/impi/.../bin/, этот путь как раз и надо прописать.
затем нужно проверить зарегистрировалось ли наше окружение

mpi-selector --list

если в списке оно появилось, значит все нормально.

Чтобы выбрать окружение, нужно набрать

mpi-selector-menu

после чего вылезет менюшка


Current system default: none
Current user default:   none

    "u" and "s" modifiers can be added to numeric and "U"
    commands to specify "user" or "system-wide".

1. intel_mpi_intel64-4.0.3.008
2. mvapich_gcc-1.2.0
3. openmpi
4. openmpi_gcc-1.4.3
U. Unset default
Q. Quit

Selection (1-4[us], U[us], Q):


из которой интуитивно понятно, чтобы поставить IntelMPI нужно сначала выбрать его, т.е. нажать 1, затем выбрать куда поставить, для все системы или только для пользователя (s или u). Если у Вас есть права администратора, то Вы можете ставить окружение для системы, если нет, то, соответственно, можете только для user.

После установки окружения нужно в обязательном порядке перезагрузиться.
После перезагрузки, написав mpi-selector-menu, Вы уже увидите следующее


Current system default: none
Current user default:   intel_mpi_intel64-4.0.3.008

    "u" and "s" modifiers can be added to numeric and "U"
    commands to specify "user" or "system-wide".

1. intel_mpi_intel64-4.0.3.008
2. mvapich_gcc-1.2.0
3. openmpi
4. openmpi_gcc-1.4.3
U. Unset default
Q. Quit

Selection (1-4[us], U[us], Q): 


значит окружение установлено.

Набрав в терминале

which mpirun 

Вы увидите путь к скрипту mpirun, который будет находиться в директории /opt/intel/impi/..., значит все хорошо работает :)

Установка SIESTA под CentOS 6.2

Установка производится таким же образом, что и для систему Ubuntu.
Отличие заключается в том, что все библиотеки и компиляторы уже стоят. Остается только распаковать архив с программой, затем подправить файл arch.make, как описывалось в записи про Ubuntu и сделать make.
Очень важно помнить, что нужно проверять свое параллельное окружение перед установкой, чтобы быть уверенными, что все установится.

Установка SIESTA под Ubuntu


Будем производить установку параллельной версии SIESTA-3.1-rc2 а также SIESTA-TRUNK-364, потому что не параллельную может установить каждый, да и это не интересно.
Прежде всего, перед установкой, надо убедиться, что стоят следующие пакеты:
Intel® Fortran Compiler 12.0
Intel® Math Kernel Library 10.3
Intel® Debugger
Эти пакеты находятся в Intel® Fortran Composer XE 2011 for Linux
Скачиваем его и устанавливаем, если есть трудности в установке, то можно воспользоваться пособием (http://conquer-ur-computer.blogspot.com/2010/12/install-intel-fortran-c-ifort-icc-in.html).
Далее, нужно установить
Intel® C++ Compiler 12.0
Intel® Integrated Performance Primitives
Intel® Parallel Building Blocks
Эти пакеты можно скачать отсюда Intel® C++ Composer XE 2011 for Linux
Устанавливаются также, как и Fortran.
Далее нужно отредактировать системный файл, для этого пишем
vi ~/.bashrc

и записываем в него строчку
export PATH=$PATH:/opt/intel/bin/
Первый этап закончен.
Далее, нам необходимо установить gfortran и Fortran 77. Сделать это нам поможет менеджер пакетов Synaptic. Необходимо найти и добавить следующие пакеты 
libmpich2-2
libmpich2-dev
mpich2
mpich2-doc
А также хорошо бы добавить еще
debhelper (>= 7)
cdbs
gfortran
txt2man
libxt-dev
x11proto-core-dev
default-jdk
quilt
procps
libhwloc-dev
hwloc-nox
libcr-dev
Если все получилось установить, то тогда можно приступать и к установке самой программы SIESTA. Но, для начала перезагружаемся:)
После перезагрузки распаковываем архив, далее по инструкции в /Obj/README
После того, как мы получили arch.make в директории Obj, нужно его немного поправить, длят ого, чтобы прописать в нем правильные пути в нашим MKL библиотекам.
Для начала нужно проверить, нашел ли он библиотеки mpi, смотрим, если есть строчка 
 
MPI_INTERFACE=libmpi_f90.a
 
значит все в порядке, если нет, то надо разбираться индивидуально.
Начинаем редактирование. Здесь я приведу свой собственный способ задания пути для MKL библиотек. 
Для начала комментируем или удаляем стандартные прописанные пути к библиотекам 
 
#BLAS_LIBS = 
#LAPACK_LIBS =
#BLACS_LIBS =
#SCALAPACK_LIBS = 
 
Кроме
 
COMP_LIBS=
 
и записываем:
 
MKLROOT = /opt/intel/mkl
STAT_LIBS = $(MKLROOT)/lib/ia32/libmkl_scalapack_core.a  -Wl,--start-group $(MKLROOT)/lib/ia32/libmkl_intel.a $(MKLROOT)/lib/ia32/libmkl_sequential.a $(MKLROOT)/lib/ia32/libmkl_core.a $(MKLROOT)/lib/ia32/libmkl_blacs_intelmpi.a -Wl,--end-group -lpthread
DYN_LIBS = -L$(MKLROOT)/lib/ia32 -lmkl_scalapack_core  -Wl,--start-group -lmkl_intel -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi -Wl,--end-group -lpthread

 LIBS=$(STAT_LIBS) $(DYN_LIBS)
 
Все, готово:) Библиотеки были скачаны и прописаны для архитектуры IA-32 и компилятора, соответственно, Intel Fortran. 
Чтобы правильно прописать пути к библиотекам, можно воспользоваться удобным сервисом Intel® Math Kernel Library Link Line Advisor.

Теперь нужно скачать программу mpi-selector, для того, чтобы можно было переключать параллельные окружения. Установить его можно использую программу yum

yum install mpi-selector

или же скачать OFED пакет и установить оттуда (https://www.openfabrics.org/downloads/OFED/).

Далее необходимо произвести установку Intel® MPI Library. Пакет, по большому счет, платный, но для систем Linux можно скачать бесплатную 30-дневную версию и установить ее, все будет работать. Почему 30-дневная? Потому что ее нельзя будет установить после 30 дней с момента скачивания, а работать она будет сколь угодно долго. 
Установив пакет можно проверить, установилось ли Intel MPI окружение. Проверяем через mpi-selector:
Теперь можно делать make, и все будет работать:) 
Удачи!

Установка VASP под Linux


Здесь будет описана установка VASP, как на ПК под 32-битной Linux Ubuntu, так и под 64-битной Linux CentOS.
Вначале нужно было поставить VASP на 12 ядерный ПК. т.к. на нем удобнее тестировать, ну и тоже нужно, чтобы был VASP под рукой.
Для установки VASP на машине с компиляторами Intel существует в папке makefile.linux_ifc_P4, в котором написано, что библиотеки BLAS лучше всего брать из GotoBLAS. Я скачал GotoBLAS2, но он у меня не хотел компилироваться из-за моей версии компилятора, но порывшись в интернете я нашел хороший совет, что можно заменить GotoBLAS на OpenBLAS, который не имеет таких проблем с компиляторами. Сделав это я получил 2 библиотеки libopenblas.so и libopenblas.so.0, которые необходимо включить в makefile.
Важное замечание, для 64-битной системы был установлен GotoBLAS2, поэтому вышеописанной проблемы не возникло.
Еще одна вещь. На многих форумах и википедии, в том числе, пишут, что нужно FFTW3, которая есть в пакете Intel MKL $(MKLROOT)/interfaces/fftw3xf/ , однако его надо компилировать отдельно, что, если честно, у меня не получилось на 32-битном компе. На 64-битном также не получилось, потому что это большой кластер и администратор этого кластера на захотел этого делать.
Итак, чтобы поставить VASP на систему с компилятором Intel, нужно зайти в папку с библиотеками и переименовать makefile.linux_ifc_P4 в Makefile используя команду

cp makefile.linux_ifc_P4 Makefile

Затем нужно отредактировать полученный Makefile, написав


CPP     = mpiicc -E -P -C $*.F >$*.f
FC=mpiifort


В исходном файле используется компилятор ifc, который не подходит, если Вы хотите скомпилировать VASP для параллельной работы. Далее жмем make.
Если все собралось нормально, то переходим в папку vasp.*/ . Также переименовываем  makefile.linux_ifc_P4 в Makefile, и меняем


FC=mpiifort
...
BLAS=-L/opt/intel/mkl/lib/ia32 -lmkl_intel -lmkl_sequential -lmkl_core -lpthread

или для 64-битной


FC=mpiifort
...
BLAS=-L/opt/intel/mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lpthread


Комментируем строки


# LAPACK, simplest use vasp.5.lib/lapack_double
#LAPACK= ../vasp.5.lib/lapack_double.o

# use the mkl Intel lapack
#LAPACK= -lmkl_lapack

Затем для MPI

FC=mpiifort
FCL=$(FC)

Снимаем коммнты с 

CPP    = $(CPP_) -DMPI  -DHOST=\"LinuxIFC\" -DIFC \
     -DCACHE_SIZE=4000 -DPGF90 -Davoidalloc -DNGZhalf \
     -DMPI_BLOCK=8000 

и

Также нужно добавить

SCA=-L/opt/intel/mkl/lib/intel64 -lmkl_intel_lp64 -lmkl_blacs_intelmpi_lp64 -lmkl_scalapack_lp64  -lmkl_sequential -lmkl_core -lpthread

но, если этого не добавить, то ничего страшного, VASP соберется и будет хорошо работать

FFT3D   = fftmpi.o fftmpi_map.o fft3dfurth.o fft3dlib.o 

И после этого жмем make и получаем файл vasp :)

Очень полезная ссылка по этому делу
http://confluence.rcs.griffith.edu.au:8080/display/GHPC/VASP#VASP-VASPmpiintel

Виртуальная машина


Здесь я вкратце опишу процесс установки виртуальной машины Oracle VM VirtualBox.
Во-первых, зачем мне это понадобилось? После получения нового компа на работе (Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz 3.7GHz, 8 Gb ОЗУ) под Windows 7 профессионал я подумал об установке Ubuntu на него, т.к. мне нужно было, чтобы работали все необходимые мне программы, которые могут работать только под Linux. Но! Работать под Linux не есть очень удобоно, в первую очередь из-за офиса. Компромиссным стало решение установки виртуальной машины, где будет стоять Ubuntu.
Итак, мне на глаза попалась Oracle VM VirtualBox, случайно столкнулся с данной прогой, и решил ее использовать. Установка не сложная, все там просто и интуитивно понятно :) Поэтому описывать установку не буду. Установка операционки Ubuntu туда тоже не особо сложна, я думаю, люди также смогут это сделать :)
Самая основная проблема, из-за которой я пишу тут - это определение общедоступных папок гостевой ОС (гостевая ОС - это та, которая установлена на виртуальную машину).
Перед настройкой общих папок нужно сделать следующее:
1) Выбрать в меню гостевой ОС Устройства→Установить дополнение гостевой ОС. В Ubuntu  должен появиться cd-rom, ну или какой-нибудь новый диск в папке /media. Предложение сделать автозапуск следует отклонить.
2) Перейти в терминал и выполнить команду:

cd /media/cdrom

Или, как у меня было

cd /media/VBOXADDITIONS_4.1.18_78361/

3) Запустить файл VBoxLinuxAdditions.run от имени супервользователя командой:

sudo ./VBoxLinuxAdditions.run

4) Ввести пароль, вводимые символы видны не будут. Как только установка завершится, нужно будет перезагрузиться.

Далее нам на помощь приходит всеми любимый пакет synaptic. Нужно ввести в поле поиска virtualbox и установить пакеты

virtualbox-ose-guest-x11
virtualbox-ose-fuse


И снова перезагружаем гостевую систему.
Собственно, для того, чтобы работали общие папке, нужно сделать далее следующее.
1) Зайти на официальный сайт VM VirtualBox (http://www.virtualbox.org/wiki/Downloads) и качаем  версию VBOracle VM VirtualBox Extension PackAll platforms.
2) Заходим во вкладку Свойства в окошке виртуальной машины и тыкаем на плагины и добавляем скачанный файл.
После этого заходим в свойства гостевой ОС и в пункте общие папки выбираем путь к папке, которая будет общей, галочками выделяем все, кроме "только для чтения".


Последний шаг.
Заходим в гостевую ОС и открываем терминал, в котором пишем команду

cat /etc/group | grep plugdev

на экран выведется строчка типа plugdev:x:46:username. Нам нужна будет цифра,  у меня она 46, у вас может быть другой, а может и нет :)
Теперь нужно создать директорию, которая будет общей на гостевой ОС:

sudo mkdir /media/myfolder

Теперь надо отредактировать файл /etc/fstab

sudo gedit /etc/fstab

Где в конец этого файла надо дописать строчку

myfolder /media/myfolder vboxsf defaults,gid=46 0 0

схема строки такая:

[имя папки] [путь к папке] [файловая система] [права на доступ и запись] 0 0

ВСЕ В ОДНУ СТРОЧКУ!

Теперь перезагружаем гостевую ОС и пишем в терминале:

sudo mount -a

И все! Общая папка настроена, тепеерь можно легко и просто копировать файлы из одной ОС в другую :)

Благодарю сайт http://help.ubuntu.ru/wiki за информацию!

Текстовый редактор vi


После начала работы с кластерами, а также системой Linux я задался вопросом: "Как же удобно и быстро для себя можно редактировать файлы в этих системах (в терминале), не копируя их к себе на компьютер каждый раз?"
Вопрос очень давно меня мучил, т.к. в основном работа ведется в ОС Windows, где все быстрые действия можно делать с помощью мышки, ну или же работа ведется с помощью удобной штуки Far manager, в то время как через терминалы SSH доступа визуальные и графические оболочки в большинстве случаев недоступны. Находясь в этом году на суперкомпьютерной академии в МГУ, я заметил, что многие пользуются редактором vi.
В чем же его удобство?
На первый взгляд он выглядит очень просто. Открывая файл с его помощью

vi myfile 

вы получаете содержимое файла прямо в терминале. Ничего особенного, казалось бы. Но когда мне показали, что можно с его помощью быстро редактировать файл, в частности, копировать, удалять, перемещать, вставлять строки, слова, символы, целые страницы и вообще все что хочешь простыми нажатиями на клавиши клавиатуры, то я увидел в чем его мощь.
Действительно, стоит только научиться работать этими простыми комбинациями клавиш и понять как это работает и все будет очень легко и просто, это сэкономит уйму времени при редактировании файла.
Вот кратенькая инструкция, которую я составил, бродя по просторам интернета и ища информацию про этот чудный редактор.

Клавиши перемещения:
h, j, k, l – соответствуют стрелкам влево, вниз, вверх и вправо;
0 («ноль») – в начало текущей строки;
^ - к первому не пробельному символу в строке;
$ – в конец текущей строки;
e – последний символ следующего слова;
w – на слово вправо, первый символ следующего слова;
b – на слово влево;
W – до пробела вправо, переход по длинным словам;
B – до пробела влево, переход по длинным словам;
( - передвинуть курсор назад на предложение (до точки);
) - передвинуть курсор вперед на одно предложение;
} – абзац вниз (до пустой строки);
{ – абзац вверх;
Ctrl+End – перейти на последний символ последней строки файла;
<number>G или <number>gg – перейти на конкретную строку <number> ;
f<symbol> – передвинуться вперед (forward) к символу <symbol> в текущей строке;
F<symbol> – назад (backward) к символу <symbol> в текущей строке;
; – для того что бы повторить последнюю команду f или F;
, - повторяет поиск, но в отличии от «;», в обратном порядке;
t<symbol>/T<symbol> - то же что и описано выше, но при этом курсор устанавливается прямо перед символом, а не на сам символ;
H – передвинуть курсор наверх экрана;
M – передвинуть курсор в центр экрана;
L – передвинуть курсор вниз экрана;
<number>% – передвинуть курсор в соответствующее место документа;
Ctrl+d или Ctrl+f – на страницу вперёд;
Ctrl+u или Ctrl+b – на страницу назад;
% – когда под курсором находиться скобка, то нажатие на % переместит курсор на соответствующую парную скобку(),] или }), при повторном нажатии вернется обратно;
[{ - позволяет переместиться назад по тексту к символу скобки, которая является отрывающей текущий блок кода;
]{ – вперед к закрывающей скобке текущий блок кода;

Примеры использования:
3G - перейти на строку под номером 3;
ft – передвинуть курсор на ближайший символ «f» в строке, потом нажав «;» – перейти на следующий символ «f», если он еще встречается в строке;
gd – перейти к объявлению функции или переменной, которая находиться под курсором;
gD – перемещает к определению глобальной переменной;

Нужная особенность редактора. Если нужно открыть файл на какой-то конкретной строке (допустим, чтобы посмотреть ошибку в этой строке), то можно набрать команду

vi +num myfile

где num - номер строки, например, чтобы открыть файл на 303 строке, нужно набрать

vi +303 myfile 

Для просмотра последней строки файла достаточно написать просто

vi + myfile

После того, как понятно как перемещаться по файлу, можно перейти к командам редактирования.

Клавиши удаления:
- удалить символ под курсором;
- удалить символ влево (удалить символ перед курсором);
d<символ(ы)_перемещения> - удаляет с символа под курсором до положения после ввода команды перемещения;
dd - удалить текущую строку;
d<число_строк>d - стирание числа строк начиная с текущей;
d+ - удаляет текущую строку и следующую за ней;
d/<pattern> - удаляет текст начиная с текущего положения курсора до первого встретившегося "pattern", не включая его;
daw - удаляет слово, даже когда курсор находится в середине этого слова;
- вырежет текст от позиции курсора и до конца текущей строки (аналог d$);
Весь удаляемый текст переносится в буфер обмена, откуда позже может быть вставлен.

Примеры использования:
d^ - удаляет символы с текущего до начала строки;
ciw - удаляет слово под курсором и переходит в режим вставки;
4x - удаляет 4 символы вперед начиная с символа под курсором;

Клавиши удаления с переходом в режим вставки:
- вырезать текущий символ и оставить редактор в режиме вставки (аналогична xi);
- вырезать текущую строку и оставить редактор в режиме вставки (аналогична cc);
с - команда аналогичная d, но после удаление переходит в режим ввода;
- вырезать текст от курсора до конца строки и оставить редактор в режиме вставки;
cc - вырежет текущую строку и оставит редактор в режиме вставки;
- заменить один символ под курсором;
- перейти в режим ввода с забиванием текста (режим замены);

Клавиши копирования и вставки:
yy - копирование текущей строки в неименованный буфер;
y<число>y - копирование числа строк начиная с текущей в неименованный буфер;
Y - скопировать весь текст, подобно yy (аналог y$);
- вставка содержимого неименованного буфера под курсором;
- вставка содержимого неименованного буфера перед курсором;
]p – подобно p, но автоматически подбирает отступ для вставки кода;

Клавиши отмены:
u – отмена последней команды;
U – отмена изменений во всей строке;
Ctrl+r – отмена отмены;

Переход в режим вставки:
Режим вставки позволяет набирать текст в файле
– перейти в режим ввода с текущей позиции;
I – переместиться в начало строки и перейти в режим ввода;
– вставить текст справа от текущего символа;
– вставить текст в конец текущей строки;
o – перейти в режим ввода с новой строки под курсором;
– перейти в режим ввода с новой строки над курсором;

Другие не менее полезные действия:
. – повтор последней команды;
– слияние текущей строки со следующей;
`. – перейти к строке, которая редактировалась последней;
` дважды – переход между двумя последними позициями курсора;
‘ дважды - переход между двумя строками, где находились позиции курсора;
>> – сдвинуть вправо строку (в визуальном режиме – весь выделенный текст;
<< – тоже самое, что и >>, но сдвиг происходит влево;
– посмотреть man-страницу слова под курсором;
gf – открыть файл с именем, находящимся под курсором;
Ctrl+a – перемещает курсор на ближайшее число и увеличивает его на единицу;
Ctrl+x – перемещает курсор на ближайшее число и уменьшает его на единицу;
~ – меняет регистр букв на противоположный по мере прохождения курсора;
g~~/guu/gUU – меняет регистр на противоположный/нижний/верхний во всей строке;

Это еще не все возможности данного редактора, но все необходимые :)

Информация была взята с сайтов
http://system-administrators.info/?p=1193
http://funix.ru/programs_utilities/klavishi-i-kombinacii-klavish-vim.html


Собираем LAMMPS под Ubuntu


Запись крайне похожа на ту, что сделана для CentOS, но тут попроще :)
Опять же, нам нужно будет следующее ПО на компьютере
1) Intel(R) Compiler
2) Intel(R) MKL
3) Intel(R) MPI Library 4.0.*

Основная особенность установки LAMMPS на Ubuntu - это то, что тут почти ничего делать не надо :)
Нужно поставить необходимые пакеты, если они уже стоят, то, значит все хорошо

sudo apt-get install build-essential fftw-dev tcsh mpich2 gfortran

После установки качаем LAMMPS (http://lammps.sandia.gov/download.html), распаковываем его и создаем файл /src/MAKE/Makefile.ubuntu следующего содержания


# ubuntu_parallel = Ubuntu 9.10, mpicxx (g++), MPICH2 1.2, FFTW 2.1.3

SHELL = /bin/sh

# System-specific settings

CC = mpicxx
CCFLAGS = -O -DFFT_FFTW -DLAMMPS_GZIP -DMPICH_IGNORE_CXX_SEEK
DEPFLAGS = -M
LINK = $(CC)
LINKFLAGS = -O
USRLIB = -lfftw
SYSLIB =
ARCHIVE = ar
ARFLAGS = -rc
SIZE = size

# Link target

$(EXE): $(OBJ)
$(LINK) $(LINKFLAGS) $(OBJ) $(USRLIB) $(SYSLIB) -o $(EXE)
$(SIZE) $(EXE)

# Library target

lib: $(OBJ)
$(ARCHIVE) $(ARFLAGS) $(EXE) $(OBJ)

# Compilation rules

%.o:%.cpp
$(CC) $(CCFLAGS) -c $<

%.d:%.cpp
$(CC) $(CCFLAGS) $(DEPFLAGS) $< > $@

# Individual dependencies

DEPENDS = $(OBJ:.o=.d)
include $(DEPENDS)


Как видно, ничего тут сверхестественного нет, все крайне просто, в отличие от CentOS.

Далее переходим в src и делаем

make ubuntu

После чего файл lmp_ubuntu можно запускать:)

Ссылка:
http://katter-world.blogspot.com/2010/07/install-lammps-on-ubuntu.html

Собираем LAMMPS под CentOS 6.2


Сегодня попробовал свои силы на сборке LAMMPS для системы Linux Red Hat CentOS 6.2. Получилось удачно, пакет я собрал.
Итак, что нам нужно для его сборки.
1) Intel(R) Compiler
2) Intel(R) MKL
3) Intel(R) MPI Library 4.0.*

Для начала нужно скачать пакет FFTW библиотек, к сожалению для LAMMPS нужны не самые новые библиотеки, поэтому качаем fftw-2.1.5 с сайта
http://www.fftw.org/fftw-2.1.5.tar.gz

Установка будет состоять из 3-х шагов:
1) Установка FFTW
2) Установка библиотек для LAMMPS
3) Установка LAMMPS

Итак, по порядку:

1) После разархивирования FFTW заходим внутрь и пишем

./configure CC=mpiicc F77=mpiifort FC=mpiifort --prefix=/usr/local/fftw-2.1.5

затем, после успешной конфигурации начинаем сборку

make
make check
make install

Готово.

2) Разархивировали lammps.tar.gz (http:/lammps.sandia.gov/download.html) и заходим

В файлах /lib/reax/Makefile.ifort и lib/meam/Makefile.ifort меняем
F90 =           ifort
на
F90 =           mpiifort
и собираем в каждой папке командой
make -f Makefile.ifort

Далее в lib/poem/ меняем в файле Makefile.icc строчку
CC =            icc
на
CC =            mpiicc
и собираем командой
make -f Makefile.icc

3) Заходим в src
Проверяем установленные пакеты командой
make package-status
Затем редактируем файл MAKE/Makefile.linux, меняя в нем следующие строки:

Комментируем
#MPI_PATH =
#MPI_LIB = -lmpich -lpthread
Исправляем
CC=mpiicc
LINK=mpiicc
FFT_INC = -I/usr/local/fftw-2.1.5/include -DFFT_FFTW
FFT_PATH = -L/usr/local/fftw-2.1.5/lib
FFT_LIB = -lfftw

Вот и все изменения. После этого собираем сам LAMMPS

make linux                                  -              На выходе файл lmp_linux
make makelib                             -              Делаем Makefile для библиотек
make -f Makefile.lib linux         -              Получаем файл liblmp_linux с библиотеками LAMMPS

Ну вот и все:) Получили работающий файл lmp_linux, который готов для параллельной работы.

Хороший сайт:
http://hpclab.blogspot.com/2010/05/quick-install-guide-for-lammps-on-linux.html

14 авг. 2012 г.

Начало

Вот и начался мой новый блог:)
Этот блог будет посвящен различным вещам, которые относятся к высокопроизводительным системам, в частности к кластерам.
Итак, HPC blog :)