15 авг. 2012 г.

Установка 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, и все будет работать:) 
Удачи!

17 комментариев:

  1. Добрый день..
    1) Для начала нужно проверить, нашел ли он библиотеки mpi, смотрим, если есть строчка

    MPI_INTERFACE=libmpi_f90.a
    строчки нет :(
    2) Теперь нужно скачать программу mpi-selector, для того, чтобы можно было переключать параллельные окружения.
    где ее найти?
    3) или же скачать OFED пакет и установить оттуда (https://www.openfabrics.org/downloads/OFED/).
    Какую именно версию скачать, попробовал версию 1.5.4 и 3.5 - там нет пакетов mpi- selector..
    заранее спасибо..

    ОтветитьУдалить
  2. Если строчки нет, значит не найдено параллельное окружение, а точнее библиотеки MPI
    По поводу mpi-selector. Команда yum search mpi-selector не находит никаких пакетов?
    Если не находит, то нужно качать OFED сборку. Я качал эту
    http://www.openfabrics.org/downloads/OFED/ofed-1.4.2/OFED-1.4.2.tgz
    По сути от того какая версия, для mpi-selector ничего не изменится. Значит скачали, распаковали и запустили
    sudo ./install.pl
    после этого нужно будет выбрать
    2) Install OFED Software
    и затем
    4) Customize
    Далее смотрите какие пакеты появляются на экране и жмете "n" для всех кроме mpi-selector. После этого он установится.

    ОтветитьУдалить
  3. большое спасибо за ответ,
    1) Если строчки нет, значит не найдено параллельное окружение, а точнее библиотеки MPI
    как можно проверить- есть ли это окружение, кроме записи в arch.make
    2) Команда yum search mpi-selector не находит никаких пакетов?
    не находит..
    может надо подключить репозитарий?
    3) Install OFED Software
    Получилось поставить с третьго раза, так и не понял, почему на третий раз..

    ОтветитьУдалить
  4. Если у вас установлено OpenMPI или Intel MPI, значит у вас все должно быть, просто SIESTA хорошо ставится именно под IntelMPI.

    Ага, если не получается, значит нужно репозиторий подключить

    Главное что получилось установить:) Если дальше есть вопросы, то могу помочь

    ОтветитьУдалить
  5. 1) Если у вас установлено OpenMPI или Intel MPI, значит у вас все должно быть, просто SIESTA хорошо ставится именно под IntelMPI.
    я поставил оба эти пакета, но в arch.make строчки нет, вручную вписывать эту строчку ведь нет смысла?? может нужно сначала настроить mpi-selector? моежт нет смысла ставить openmpi, если уж все равно скачал и установил intel-mpi? как проверить, что окружение установлено именно на intel?
    2) Ага, если не получается, значит нужно репозиторий подключить
    а какой именно репозитарий, их ведь великое множество, и как это сделать?

    ОтветитьУдалить
  6. Строчку вписывать не надо самому, это верно. Да, нужно настроит mpi-selector на то, чтобы у Вас определилось именно intel mpi. Вот здесь http://alex-hpc.blogspot.ru/2012/08/mpi-selector.html у меня написано как устанавливать и настраивать mpi-selector для случай intel mpi.
    На счет репозиториев, я сам этим делом занимался только один раз и давно, а потом не было надобности, можно посмотреть, например, вот здесь http://help.ubuntu.ru/wiki/%D1%80%D0%B5%D0%BF%D0%BE%D0%B7%D0%B8%D1%82%D0%BE%D1%80%D0%B8%D0%B9

    ОтветитьУдалить
  7. большое спасибо за ответы,
    mpi-selector работает. команда
    which mpirun
    выдает правильные пути
    но arch.make по прежнему без строчки
    MPI_INTERFACE=libmpi_f90.a
    что делать - куда копать дальше?

    ОтветитьУдалить
  8. Да не за что:)
    Иногда помогает просто удалить сиесту и разархивировать заново. Но в данном случае можно попробовать сделать конфиг таким образом

    ./configure --enable-mpi

    и по идее должна прописаться эта строчка. Попробуйте, должно получиться

    ОтветитьУдалить
  9. Попробовал,
    выдает сообщение об ошибке:
    Don't know how to compile MPI program

    ОтветитьУдалить
  10. Значит нет компилятора, или не прописаны пути к нему.
    попробуйте написать
    which ifort
    Если выдаст путь, значит надо попробовать для конфига указать компилятор вручную
    ./configure FC=ifort --enable-mpi

    Если опять тоже самое повторится, то надо подумать будет. А Вы точно установили все пакеты?
    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

    ОтветитьУдалить
  11. which ifort
    путь выдает
    компилятор вручную указывал и даже указывал MPIFC=mpif90
    пакете все установил
    все равно та же ошибка..

    ОтветитьУдалить
  12. может быть проблема в том что поставил всё 64 битные версии,

    ОтветитьУдалить
  13. Тогда да, скорее всего из-за того, что версия 64 битная, нужно все удалить и переставить на 32 битную

    ОтветитьУдалить
  14. переставить на 32 битную не помогло..
    вопрос: как с помощью mpi-selector переключить окружение не openmpi, в случае intel понятно где брать mpivars.sh, а в случае openmpi что подключать?

    ОтветитьУдалить
  15. В таком случае нужно в директории/var/mpi-selector/data создать файл типа openmpi.sh где прописать пути к месту где установлен openmpi, по аналогии с файлами для Intelmpi. Например, написать вот такое
    # PATH
    if test -z "`echo $PATH | grep /share/openmpi/bin`"; then
    PATH=/share/openmpi/bin:${PATH}
    export PATH
    fi

    # LD_LIBRARY_PATH
    if test -z "`echo $LD_LIBRARY_PATH | grep /share/openmpi/lib`"; then
    LD_LIBRARY_PATH=/share/openmpi/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}
    export LD_LIBRARY_PATH
    fi

    # MANPATH
    if test -z "`echo $MANPATH | grep /share/openmpi/bin/share/man`"; then
    MANPATH=/share/openmpi/bin/share/man:${MANPATH}
    export MANPATH
    fi

    ОтветитьУдалить
  16. Добрый вечер,
    отчаившись поставить на ubuntu, попробовал поставить сиесту на centos 6.2 В итоге все работает, но пришлось самому компилировать scalapack. Так и должно быть или я что то упустил?

    ОтветитьУдалить
  17. Ну если все заработало, то значит нормально, но все же предпочтительнее использовать Intel-овские библиотеки. Основной вопрос здесь стоит в их линковке. Для того, чтобы их правильно прилинковать, лучше пользоваться http://software.intel.com/sites/products/mkl/
    Указать свои параметры и получить правильные строчки для динамических и статических библиотек. В моем случае для CentOS строки для линковки библиотек выглядят вот так
    MKLROOT=/share/intel/mkl/lib/intel64
    STAT_LIBS = $(MKLROOT)/libmkl_scalapack_lp64.a -Wl,--start-group $(MKLROOT)/libmkl_intel_lp64.a $(MKLROOT)/libmkl_sequential.a $(MKLROOT)/libmkl_core.a $(MKLROOT)/libmkl_blacs_intelmpi_lp64.a -Wl,--end-group -lpthread
    DYN_LIBS = -L$(MKLROOT)/ -lmkl_scalapack_lp64 -Wl,--start-group -lmkl_intel_lp64 -lmkl_sequential -lmkl_core -lmkl_blacs_intelmpi_lp64 -Wl,--end-group -lpthread
    LIBS=$(STAT_LIBS) $(DYN_LIBS)

    ОтветитьУдалить