Будем производить установку параллельной версии 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) :)
- Удачи!
В системной файле вместо строки:
ОтветитьУдалить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 процах, но не параллельность, увы(
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьЗдравствуйте! Помогите правильно прописать пути к библиотекам 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
Здравствуйте, так как у Вас система х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)
Попробуйте сделать так, должно получиться все как надо.
Ошибку выдает потому, что
ОтветитьУдалитьlibmkl_scalapack_lp64.a и libmkl_blacs_intelmpi_lp64.a библиотеки в другой папке здесь /opt/intel/mkl/lib/mic
и вопрос как правильно написать в этом случае
У вас то они все в одном месте лежат /opt/intel/mkl/lib/intel64
А, теперь ясно в чем вопрос, я не заметил, что их нет в папке 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
Если поменять 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
не может найти, хотя они там есть ).
А если скопировать их из mic в intel64?
ОтветитьУдалитьНа самом деле не понятно, почему у Вас нет их в нужной папке. Если не получится копирование, то предлагаю переустановить MKL библиотеки, может в процессе установки что-то пошло не так.
Не получилось
ОтветитьУдалитьтоже ошибка
cannot find -lmkl_scalapack_lp64
FC=mpifc - по умолчанию ставит, это нормально?
Буду на Ubuntu все ставить.
Хм... странно. А пути для библиотек у Вас прописаны в переменных PATH b LD_LIBRARY_PATH? Мне все таки кажется, что неправильно были установлены библиотеки, раз они находятся не там, где должны.
ОтветитьУдалитьПопробую переустановить библиотеки.
ОтветитьУдалитьА как пути к библиотекам посмотреть?
Вообще просто можно посмотреть содержимое переменных
ОтветитьУдалить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. Это как вариант попробовать.
Но сначала все же лучше переставить.
Добрый день!
ОтветитьУдалитьПереустановил библиотеки, скомпилировало. Теперь другая проблема. При запуске в не параллельном режиме работает, а при запуске в параллельном нет. Вот что пишет:
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
========================================================
Здравствуйте, то что он выдает - это ошибки общего характера, которые говорят о том, что запуск не удался, не получилось параллельно запустить и т.п. Лучше всего при запуске указывать полный путь к запускаемому файлу , или если же вы запускаете расчет в папке с программой, то писать ./siesta, а то в Вашей строке запуска написано просто siesta.
ОтветитьУдалитьЕще вариант посмотреть вывод команды ldd siesta и посмотреть, все ли библиотеки MPI найдены файлом.
строчку MPI_INTERFACE=libmpi_f90.a - руками вписал, по умалчанию не находит
ОтветитьУдалитьВроде заработало, а как узнать, что это именнно паралельная, а не две сиесты одновременно?
ОтветитьУдалитьВ выходном файле должно быть написано parallel или serial version
ОтветитьУдалитьДа написано. Спасибо за помощь!
ОтветитьУдалитьХорошо) Рад помочь:)
ОтветитьУдалить