воскресенье, 29 мая 2011 г.

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

Будем производить установку параллельной версии SIESTA-3.0-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.
Далее нужно отредактировать системный файл, для этого пишем
gedit ~/.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.
Теперь можно делать make, и все будет работать, если далее вы сделаете то, что написано в (http://blog-from-alex.blogspot.com/2011/07/siesta.html) :) 
Удачи!

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

  1. В системной файле вместо строки:
    export PATH=$PATH:/opt/intel/bin/
    лучше написать следующее:

    #Intel Fortran configuration
    source /opt/intel/composerxe-2011.4.191/bin/compilervars.sh ia32

    PATH=/opt/intel/bin:$PATH

    export PATH

    LD_LIBRARY_PATH=/opt/intel/composerxe-2011.4.191/compiler/lib/ia32:
    $LD_LIBRARY_PATH

    export LD_LIBRARY_PATH

    ОтветитьУдалить
  2. А вот, как оказалось, ничего не будет работать)) микста не параболоидам так просто. В этом случае получается просто одновременный запуск сиесты сразу на 2 процах, но не параллельность, увы(

    ОтветитьУдалить
  3. Этот комментарий был удален автором.

    ОтветитьУдалить
  4. Здравствуйте! Помогите правильно прописать пути к библиотекам mkl для 64-x, а то они все в разных папках. Вот где все лежит.
    khsu:/opt/intel/mkl/lib # ls
    ia32 intel64 mic
    khsu:/opt/intel/mkl/lib # cd intel64
    khsu:/opt/intel/mkl/lib/intel64 # ls
    libmkl_avx2.so libmkl_core.a libmkl_gf_lp64.a libmkl_intel_ilp64.so libmkl_lapack95_ilp64.a libmkl_rt.so libmkl_vml_avx.so libmkl_vml_mc.so
    libmkl_avx512_mic.so libmkl_core.so libmkl_gf_lp64.so libmkl_intel_lp64.a libmkl_lapack95_lp64.a libmkl_sequential.a libmkl_vml_cmpt.so libmkl_vml_p4n.so
    libmkl_avx.so libmkl_def.so libmkl_gnu_thread.a libmkl_intel_lp64.so libmkl_mc3.so libmkl_sequential.so libmkl_vml_def.so locale
    libmkl_blas95_ilp64.a libmkl_gf_ilp64.a libmkl_gnu_thread.so libmkl_intel_thread.a libmkl_mc.so libmkl_vml_avx2.so libmkl_vml_mc2.so
    libmkl_blas95_lp64.a libmkl_gf_ilp64.so libmkl_intel_ilp64.a libmkl_intel_thread.so libmkl_p4n.so libmkl_vml_avx512_mic.so libmkl_vml_mc3.so
    khsu:/opt/intel/mkl/lib/intel64 # ..
    khsu:/opt/intel/mkl/lib # cd mic
    khsu:/opt/intel/mkl/lib/mic # ls
    libmkl_ao_worker.so libmkl_blacs_intelmpi_lp64.so libmkl_cdft_core.so libmkl_intel_ilp64.so libmkl_intel_thread.so libmkl_scalapack_ilp64.so libmkl_sequential.so
    libmkl_blacs_intelmpi_ilp64.a libmkl_blas95_ilp64.a libmkl_core.a libmkl_intel_lp64.a libmkl_lapack95_ilp64.a libmkl_scalapack_lp64.a locale
    libmkl_blacs_intelmpi_ilp64.so libmkl_blas95_lp64.a libmkl_core.so libmkl_intel_lp64.so libmkl_lapack95_lp64.a libmkl_scalapack_lp64.so
    libmkl_blacs_intelmpi_lp64.a libmkl_cdft_core.a libmkl_intel_ilp64.a libmkl_intel_thread.a libmkl_scalapack_ilp64.a libmkl_sequential.a
    khsu:/opt/intel/mkl/lib/mic # ..
    khsu:/opt/intel/mkl/lib # cd ia32 ls
    khsu:/opt/intel/mkl/lib/ia32 # ls
    libmkl_avx2.so libmkl_core.so libmkl_gnu_thread.so libmkl_intel_thread.so libmkl_p4p.so libmkl_sequential.so libmkl_vml_ia.so libmkl_vml_p4p.so
    libmkl_avx.so libmkl_gf.a libmkl_intel.a libmkl_lapack95.a libmkl_p4.so libmkl_vml_avx2.so libmkl_vml_p4m2.so libmkl_vml_p4.so
    libmkl_blas95.a libmkl_gf.so libmkl_intel.so libmkl_p4m3.so libmkl_rt.so libmkl_vml_avx.so libmkl_vml_p4m3.so locale
    libmkl_core.a libmkl_gnu_thread.a libmkl_intel_thread.a libmkl_p4m.so libmkl_sequential.a libmkl_vml_cmpt.so libmkl_vml_p4m.so

    ОтветитьУдалить
  5. Здравствуйте, так как у Вас система х64, то, соответственно, библиотеки нужно брать из папки intel64. Я бы вписал строки для линковки в arch.make файл следующим образом:
    MKLROOT=/opt/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)

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

    ОтветитьУдалить
  6. Ошибку выдает потому, что
    libmkl_scalapack_lp64.a и libmkl_blacs_intelmpi_lp64.a библиотеки в другой папке здесь /opt/intel/mkl/lib/mic
    и вопрос как правильно написать в этом случае
    У вас то они все в одном месте лежат /opt/intel/mkl/lib/intel64

    ОтветитьУдалить
  7. А, теперь ясно в чем вопрос, я не заметил, что их нет в папке intel64. В таком случае, если я правильно увидел, то все нужные библиотеки лежат в папке mic, тогда просто можно поменять intel64 на mic и попробовать.

    MKLROOT=/opt/intel/mkl/lib/mic
    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)

    Либо же скопировать недостающие библиотеки в папку intel64 командой
    cp -apr libmkl_scalapack_lp64.a ../intel64/libmkl_scalapack_lp64.a
    cp -apr libmkl_blacs_intelmpi_lp64.a ../intel64/libmkl_blacs_intelmpi_lp64.a

    ОтветитьУдалить
  8. Если поменять intel64 на mic то в конце вот, что пишет

    /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /opt/intel/mkl/lib/mic//libmkl_scalapack_lp64.so when searching for -lmkl_scalapack_lp64
    /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: skipping incompatible /opt/intel/mkl/lib/mic//libmkl_scalapack_lp64.a when searching for -lmkl_scalapack_lp64
    /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-linux/bin/ld: cannot find -lmkl_scalapack_lp64

    не может найти, хотя они там есть ).

    ОтветитьУдалить
  9. А если скопировать их из mic в intel64?
    На самом деле не понятно, почему у Вас нет их в нужной папке. Если не получится копирование, то предлагаю переустановить MKL библиотеки, может в процессе установки что-то пошло не так.

    ОтветитьУдалить
  10. Не получилось
    тоже ошибка
    cannot find -lmkl_scalapack_lp64

    FC=mpifc - по умолчанию ставит, это нормально?

    Буду на Ubuntu все ставить.









    ОтветитьУдалить
  11. Хм... странно. А пути для библиотек у Вас прописаны в переменных PATH b LD_LIBRARY_PATH? Мне все таки кажется, что неправильно были установлены библиотеки, раз они находятся не там, где должны.

    ОтветитьУдалить
  12. Попробую переустановить библиотеки.
    А как пути к библиотекам посмотреть?

    ОтветитьУдалить
  13. Вообще просто можно посмотреть содержимое переменных
    echo PATH
    echo LD_LIBRARY_PATH
    Если там указаны пути к библиотекам или к папке с интеловскими компиляторами, то все должно быть нормально.
    Еще можно проверить содержимое папки /etc/ld.so.conf.d, там должны лежать файлы *.conf в которых прописаны пути к динамическим библиотекам *.so. В принципе, можно попробовать и туда вбить в какой-нибудь из файлов (или свой создать, например, intel.conf) куда прописать путь /opt/intel/mkl/lib/mic или/и /opt/intel/mkl/lib/intel64. Это как вариант попробовать.
    Но сначала все же лучше переставить.

    ОтветитьУдалить
  14. Добрый день!
    Переустановил библиотеки, скомпилировало. Теперь другая проблема. При запуске в не параллельном режиме работает, а при запуске в параллельном нет. Вот что пишет:
    ab:~/siesta-3.2/Obj/Tests/1$ mpirun -np 2 siesta < 32_h2o.fdf | tee 32_h2o.out
    [proxy:0:0@nanolab] HYDU_create_process (./utils/launch/launch.c:75): execvp error on file siesta (No such file or directory)
    [proxy:0:0@nanolab] HYDU_create_process (./utils/launch/launch.c:75): execvp error on file siesta (No such file or directory)

    ===================================================================================
    = BAD TERMINATION OF ONE OF YOUR APPLICATION PROCESSES
    = EXIT CODE: 255
    = CLEANING UP REMAINING PROCESSES
    = YOU CAN IGNORE THE BELOW CLEANUP MESSAGES
    ========================================================

    ОтветитьУдалить
  15. Здравствуйте, то что он выдает - это ошибки общего характера, которые говорят о том, что запуск не удался, не получилось параллельно запустить и т.п. Лучше всего при запуске указывать полный путь к запускаемому файлу , или если же вы запускаете расчет в папке с программой, то писать ./siesta, а то в Вашей строке запуска написано просто siesta.
    Еще вариант посмотреть вывод команды ldd siesta и посмотреть, все ли библиотеки MPI найдены файлом.

    ОтветитьУдалить
  16. строчку MPI_INTERFACE=libmpi_f90.a - руками вписал, по умалчанию не находит

    ОтветитьУдалить
  17. Вроде заработало, а как узнать, что это именнно паралельная, а не две сиесты одновременно?

    ОтветитьУдалить
  18. В выходном файле должно быть написано parallel или serial version

    ОтветитьУдалить
  19. Да написано. Спасибо за помощь!

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