Параллельные вычисления Сергей Васильевич Федоров, Лекция № 4 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SPMD модель параллельного программирования. 3. Группа процессов в коммуникаторе. 4. Передача/прием сообщений между отдельными процессами Компиляция и запуск программы на кластере make – технология управления проектом (и для Windows) (см. public/GNU Make Программа управления компиляцией.html) 1. Автоматизирует, и оптимизирует компиляцию проектов 2. Позволяет обходиться БЕЗ IDE – интегрированной графической облочки 3. Позволяет легко программировать, и в дальнейшем использовать любые рутинные операции, например: выборочная очистка, копирование, сохранение (Backup), передача по сети, в т.ч. с посылкой почты Bash - язык сценариев командной оболочки (будет лабор-я) (см. public/Искусство программирования на языке сценариев командной оболочки.html) 1. Единственный способ выполнения любых команд в текстовом режиме 2. Простая поддержка удаленного использования и администрирования 3. Простейший скриптовый язык, где большая часть простых задач по управлению файловой системой, и процессами уже реализована. Как и Linux, используется практически во всех масштабируемых сетях, В том числе в научных Grid – сетях, Непригоден для задач с большими массивами, с длительной обработкой файлов Компиляция и запуск программы на кластере make – технология управления проектом (см. public/GNU Make Программа управления компиляцией.html) 1. Две разновидности (flavors) переменных, и ссылка с заменой x = N.o T.c y = $(x) x = N.a T.c z = $(y) (z N.a T.c) x = N.o T.c y = $(x) x = N.a T.c z = $(y: %.a=%.o) (z N.o T.c) x := N.o T.c y := $(x) x := N.a T.c z = $(y) (z N.o T.c) 2. явные правила (перед командами обязателен \TAB, табуляция) name.exe : fname1.obj fname2.obj link --o:$@ $^ # $^ заменяется на список пререквизитов # $@ заменяется на цель (предопределенный макрос) 3. неявные правила, использование шаблонов (% - любое имя) %.obj %.mod : %.f90 %.fi %.fd ifort -c -o:$@ $< # $< первый пререквизит из списка Компиляция и запуск программы на кластере make – технология управления проектом (см. public/GNU Make Программа управления компиляцией.html) 4. Множественные цели проекта, all – начальная цель по умолчанию all : echo warn # повтор цели приводит к накоплению пререквизитов all : name.lib name.exe # порядок важен ! clean : del *.obj echo : # общепринятая цель для перекомпиляции # команда оболочки (rm в Linux) # цель для отладки @echo name = $(name) # команда оболочки 5. Трудности одновременного использования в Linux и Windows разные разделители директорий “/” и “\” имена файлов - желательно без пробелов возможно – разная форма флагов компилятора и точно – разный набор флагов для линковки модулей разных типов (в том числе разные расширения для загружаемых и промежуточных файлов) Компиляция и запуск программы на кластере Искусство программирования на языке сценариев командной оболочки.html #!/usr/bin/bash - командная оболочка Linux (CygWin под Windows) Внутренние команды Bash: echo "внутренняя команда \"echo\".“ /bin/echo “Внешняя команда /bin/echo.“ read; printf – интерактивный Вввод и Вывод на консоль read var < commands.sh; printf var > text.log – переопредление ввода/вывода cd dir, pwd – переход в каталог, текущий каталог pushd; popd; dirs – работа со стеком последних каталогов set; unset – установка и сброс внутренних переменных Bash export – установка переменных, доступных родительским облочкам source file.sh; . file.sh – запуск сценария из файла в той же оболочке exec file.sh – замещение текущего сценария новым (дочерним) (последняя команда тек.сценария, например перезапуск после засыпания) Компиляция и запуск программы на кластере Искусство программирования на языке сценариев командной оболочки.html Внешние команды Bash в Linux (доступны под Windows в C:\usr\bin): /bin/echo– полный путь для вызова одноименных команд; поиск в $Path ls; ls -R – вывод "списка" файлов, в том числе рекурсивно cat file1 file2 > file; tac … –вывод файлов в прямом и обратном порядке cp file1 file2; mv; rm – копирование, перемещение и удаление файлов mkdir; rmdir – создание и удаление каталогов (удаляет только пустой) ln; ln -s –создает жесткую и мягкую (soft) ссылку (отличаются при уд-и) Позволяет задавать несколько имен одному и тому же файлу chmod – Изменяет атрибуты доступа (rwx) к файлу (владелец,группа,все) chmod +x file - доступен для исполнения всем пользователям, chmod u+s file - для всех - привилегии владельца файла, chmod 644 file – право на чтение/запись–владельцу, на чтение–группе, всем (rw_,r__,r__) =>(110,100,100) =>(644) – восьмеричное число (see menu Файл/Права в Midnight Commander) Компиляция и запуск программы на кластере Искусство программирования на языке сценариев командной оболочки.html Смена прав доступа к файлу: chmod [u g o a][+ - =][r w x] file1… u – смена права доступа для пользователя, g – для группы, o – для других пользователей, a – для всех трех категорий. + – добавление соответствующего права, - – удаление, а = – присвоение chmod g+w test chown и chgrp – смена владельцапользователя и владельца-группы файла Компиляция и запуск программы на кластере Искусство программирования на языке сценариев командной оболочки.html Самые распространенные внешние команды find dir – поиск в файловой системе, начиная с каталога dir grep <рег_выражение> file1… – поиск в файлах вхождений регулярного выражения рег_выражение … Компиляция и запуск программы на кластере Искусство программирования на языке сценариев командной оболочки.html Синтаксис переменных Bash: Переменные Bash не имеют типа: v=2; let “v+=2 ”; echo “v=$v” # => (v=4): let - команда арифметики Специальные типы переменных: локальные переменные, переменные окружения, позиционные параметры: $1, $2, ..$9, $#, $@ - аргументы по номеру, число и все аргументы сценария $var, ${var} – прямые ссылки на переменную var args=$# ; lastarg=${!args} – косвенная ссылка на последний аргумент echo ${username-`whoami`} – параметр со значением по умолчанию “\n”, “\t”, $’\033’ - способы экранирования символов, специальные символы Компиляция и запуск программы на кластере Искусство программирования на языке сценариев командной оболочки.html Синтаксис команд Bash: Конструкции проверки условий: (код возврата comm: ‘0’ -истина) if comm; then tComm else fComm fi [ -z ‘name’ ]; test –z ‘name’ : test - команда проверки строк [ -n ‘name’ ] && echo ‘Info: variable $name is defined’ – условная печать if [ -z ‘name’ ]; then tComm # условная конструкция test fi [[ $a == z* ]] - команда test с расширенными возможностями сравнения (($var+7 )) Арифметические выражения возвращающие ‘0’ (истина) если само выражение не ноль (противоположно [[] ]) if [ "$a" -le "$b" ]; (($var <= 7 )) операции сравнения (строковые и ариф-е)