Сведения об операционной системе UNIX
ББК
Нефедев К.В.
Основы высокопроизводительных вычислений. Методическое пособие. – Владивосток: Издательство Дальневосточного федерального университета, 2011. – 70 с. | |
Данное пособие предназначено для начального освоения практического курса высокопроизводительных вычислений. Предполагается, что приводимой информации достаточно для начала работы на высокопроизводительных компьютерах (кластерах). При этом основной упор делается на освоение практических навыков работы на вычислительном HP-кластере ДВФУ. Курс включает в себя вводные сведения об операционной системе UNIX, архитектуре суперкомпьютеров и вычислительных кластеров, обнаружении и использовании параллелизма программ, технологиях параллельного программирования, использовании редактора vi. Методическое пособие может быть полезно для студентов естественнонаучных специальностей, интересующихся разработкой параллельных алгоритмов и созданием параллельных программ. | |
ББК
© К.В. Нефедев, 2011
© ИФИТ ДВФУ, 2011
Оглавление
Операционная система UNIX.. 5
Источники информации. 5
План занятий, практические задания, политика доступа. 5
Сведения об операционной системе UNIX.. 5
Вход на кластер. 7
Компиляция. 7
Запуск программ.. 7
Полноэкранный редактор vi 7
Режимы работы редактора. 8
Ввод текста. 8
Команды.. 8
Перемещение курсора. 8
Командная строка. 9
Блоки, буферы, окна редактирования. 9
Параллелизм и его использование.. 10
Параллелизм.. 10
Использование параллелизма. 12
Эффективность распараллеливания. 15
Задание 1. 16
Технология MPI. 16
Обзор MPI. 17
Формат функций MPI. 19
Пример MPI-программы.. 19
Коммуникаторы.. 23
Прием/передача сообщений между отдельными процессами. 25
Взаимодействующие вычислительные процессы в технологии MPI. 33
Коллективные взаимодействия процессов. 33
Синхронизация процессов. 35
Работа с группами процессов. 35
Технологии параллельного программирования.. 36
Спецкомментарии. 36
Расширения существующих языков программирования. 36
Технологии построения суперкомпьютеров. Кластерные технологии.. 38
Производительность параллельных компьютеров. 38
Задание 2. 39
Классификация параллельных компьютеров. 39
Вычислительные кластеры.. 39
Список ТОР500. 40
Сравнение коммуникационных технологий построения кластеров. 40
Системы хранения данных. 41
Высокопроизводительные вычисления в России. 42
Модель программирования. 43
MIMD и SPMD.. 43
Коммуникации типа «точка-точка». 44
Неблокирующие операции передачи сообщений. 47
Задание 3. 48
Коллективные коммуникации. 48
Задание 4. 55
Группы, контексты, коммуникаторы и топологии. 55
Задание 5. 60
Интеркоммуникаторы.. 60
Задание 6. 61
Сложные типы данных в MPI. 61
Задание 7. 64
MPI 2.0: Односторонние коммуникации. 64
Задание 8. 67
MPI 2.0: Динамическое управление процессами. 67
Задание 9. 68
Задание 10. 68
Задание 11. 68
ОСНОВНАЯ РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА.. 69
Операционная система UNIX
Источники информации
В качестве основного источника информации по данному курсу рекомендуется глобальная сеть Интернет
http://parallel.ru/
http://www.viva64.com/ru/articles/parallel-programming/
http://www.computerra.ru/hitech/242551/
http://software.intel.com/ru-ru/parallel/
План занятий, практические задания, политика доступа
Первые занятия направлены на то, чтобы дать необходимый минимум информации для начала практической работы на вычислительном кластере. Настоятельно рекомендуется начинать выполнять практические задания с первого же занятия. Первое из предлагаемых после каждого занятия заданий является обязательным для выполнения, остальные задания рекомендуется выполнять по возможности. Для выполнения некоторых заданий могут потребоваться несколько больший объем знаний, чем затрагиваемый в данном пособии (это касается языка программирования С++), что должно служить стимулом к более полному освоению темы.
Сведения об операционной системе UNIX
UNIX - это многозадачная, многопользовательская система, обладающая широкими возможностями. Ее реализации существуют практически на всех распространенных компьютерных платформах. Более того, подавляющее большинство параллельных компьютеров работает под управлением той или иной разновидности UNIX, например, суперкомпьютеры Cray - под управлением UNICOS, Hewlett-Packard - под управлением HP-UX, IBM - под управлением AIX и т.д. В частности, вычислительный кластер ДВГУ работает под управлением LINUX, одного из наиболее известных свободно распространяемых диалектов UNIX.
В рамках данного курса нет необходимости и возможности описывать все подробности и принципы организации операционной системы, остановимся на том, что требуется для нормальной работы пользователя в данной среде.
Все объекты в UNIX делятся на два типа: файлы и процессы. Все данные хранятся в файлах, доступ к периферийным устройствам осуществляется через специальные файлы. Вся же функциональность операционной системы определяется выполнением различных процессов.
Важнейшим пользовательским процессом является основной командный интерпретатор (login shell). При входе пользователя в систему он спрашивает учетное имя пользователя (login) и пароль (password) пользователя. Первое, что нужно сделать после входа в систему с использованием стандартного или назначенного администратором пароля, - это поменять пароль при помощи команды passwd. Общим пожеланием при выборе нового пароля является следующее: пароль должен хорошо запоминаться и быть трудным для подбора. Для завершения сеанса работы нужно набрать команду exit.
Для того чтобы посмотреть встроенную в систему справку о командах, нужно использовать команду man. В частности, чтобы посмотреть описание и ключи самой команды man, нужно набрать команду man man.
Каждый пользователь системы имеет уникальное имя, с которым ассоциируется идентификатор пользователя (UID). Именно это имя используется при входе в систему (login). Пользователь является членом одной или нескольких групп, с которыми связаны идентификаторы групп (GID). Принадлежность к группе определяет дополнительные права, которыми обладают все пользователи группы. Информация о пользователях и группах обычно хранится в системных файлах /etc/passwd, /etc/shadow и /etc/group.
В UNIX все множество файлов организовано в виде древовидной структуры, называемой файловой системой. Каждый файл имеет имя, определяющее его расположение в файловой системе. Связь между именами файлов и собственно файлами обеспечивается при помощи каталогов. Корнем файловой системы является корневой каталог, имеющий имя "/". Имена всех остальных файлов содержат путь - список каталогов, которые нужно пройти, чтобы достичь файла. При этом имена каталогов разделяются знаком "/". Например, "/home/asa/myfile.txt". При перемещении по файловой системе текущий каталог называется а каталог на единицу более высокого уровня. Кроме
того, с каждым пользователем ассоциируется его домашний каталог, в котором по умолчанию хранятся его файлы.
Файлы и каталоги в UNIX имеют набор атрибутов, среди которых важно отметить владельца и группу. С их использованием организуется гибкое разграничение доступа к файлам и каталогам. Для просмотра всех атрибутов файла можно использовать команду ls -l. Результат выполнения команды для каждого файла будет иметь примерно следующий вид:
1 2 3 4 5 6 7 8
-rwxr-xr-- 1 asa group 3422 Feb 28 13:30 test
В первом столбце выдачи приводится список прав доступа к файлу. Первый символ обозначает тип файла (в данном случае "-" означает обычный файл; другие возможные значения: "d" - каталог, "l" - ссылка и др.), далее идут три группы по три символа, задающие собственно права доступа: первая группа из трех символов - права для владельца-пользователя, следующая группа - для владельца-группы и последняя группа - права для всех остальных пользователей. При этом "-" означает отсутствие права доступа, "r" - право на чтение файла, "w" - право на запись в файл или его удаление, "x" - право на выполнение файла. В нашем примере владелец файла (asa) имеет права на чтение, запись и выполнение (rwx), члены группы-владельца (group) имеют права на чтение и выполнение файла, но не имеют права на запись в файл (r-x), а все остальные пользователи имеют только право на чтение файла (r-- ). Существует также несколько дополнительных атрибутов, а для других типов файлов (например, для каталогов) приведенные атрибуты могут иметь несколько иное значение.
Сменить права доступа к файлу можно при помощи команды
chmod [u g o a][+ - =][r w x] filel...
При этом "u" означает смену права доступа для пользователя, "g" - для группы, "o" - для других пользователей, "a" - сразу для всех трех категорий. "+" означает добавление соответствующего права, "- " - удаление, а "=" - присвоение. Например, для добавления членам группы group права записи в файл test нужно выполнить команду chmod g+w test.
Владельцем-пользователем вновь созданного файла является пользователь, который его создал, а владельцем-группой - или первичная группа данного пользователя, или наследуется группа, приписанная текущему каталогу. Для смены владельца-пользователя и владельца-группы файла существуют команды chown и chgrp соответственно.
Рассмотрим основные операции, которые можно производить с файлами и каталогами:
• cd [dir] - переход в каталог dir. Если каталог не указан, то переход осуществляется в домашний каталог пользователя;
• cp file1 file2 - копирование файла;
• scp file1 file2 - копирование файла с использованием парольной защиты;
• mv filel file2 - перемещение (изменение имени) файла;
• rm filel... - удаление файлов;
• rmdir dirl... - удаление каталогов;
• mkdir dirl... - создание каталога;
• pwd - вывести имя текущего каталога;
• cat file, more file, less file - утилиты просмотра содержимого файла;
• find dir - поиск в файловой системе, начиная с каталога dir.
• grep <рег_выражение> filel... - поиск в файлах вхождений регулярного выражения рег_выражение.
^ ...
Второй тип объектов в UNIX - это процессы. Под процессом упрощенно можно понимать программу в стадии ее выполнения. Одновременно в системе выполняется достаточно большое число процессов, часть из которых является системными, а часть - пользовательскими. Для того чтобы просмотреть список выполняющихся процессов, нужно воспользоваться командой ps. Каждый процесс имеет некоторый набор атрибутов, в частности, уникальный идентификатор процесса (PID), который используется для управления его работой, например, посредством посылки сигналов. Для того чтобы завершить выполнение процесса, нужно послать ему соответствующий сигнал командой kill -9 pid. Список процессов, занимающих наибольшее количество процессорного времени или системных ресурсов, можно посмотреть, используя команду top.
Каждая запущенная программа получает три открытых потока ввода/вывода: стандартный ввод, стандартный вывод и стандартный вывод ошибок. По умолчанию все эти потоки ассоциированы с терминалом, однако могут быть перенаправлены на другое устройство, например, в файл. Для перенаправления стандартного ввода можно использовать символ "<", для стандартного вывода - ">"
или ">>" (с добавлением), для потока ошибок - "2>". Например:
program > file.log
Здесь запускается программа program, а ее стандартный вывод перенаправляется в файл file.log.
Можно запустить сразу несколько программ так, что стандартный вывод одной передается непосредственно на стандартный ввод другой. Для этого используется конструкция " |", называемая конвейером команд: programl | program2 | program3...
Команды конвейера выполняются асинхронными процессами, связь между которыми осуществляется через соответствующие потоки ввода-вывода.
Можно запустить программу в фоновом режиме. В этом случае не будет ожидаться завершение ее выполнения, а сразу появится системное приглашение, и можно будет продолжить работу в командном интерпретаторе. Для этого строку команды необходимо завершить символом "&": program &
Список пользователей, работающих в данный момент в системе, можно посмотреть при помощи команды who. Некоторые сведения о системе выдаются по команде uname.
Для редактирования файлов в разных системах могут быть предусмотрены различные наборы средств. Чаще всего имеются редакторы vi, joe и другие, можно также пользоваться встроенным редактором файлового менеджера Midnight Commander (mc). Другим возможным вариантом является удаленное редактирование файлов с последующей их пересылкой на целевой компьютер.
Компилятор с языка Си обычно вызывается командой cc (cc для Си++), компилятор с языка Фортран - f77 (f90 для Фортрана 90).
Для удаленного доступа на другой компьютер можно пользоваться командой telnet (или ssh для защищенного доступа), а для копирования файлов - командой ftp (для защищенного sftp или scp).
Вход на кластер
Удаленный доступ к вычислительному кластеру осуществляется через головную машину. В настоящий момент удаленный терминальный доступ на кластер осуществляется по протоколу SSH версии 2 (SSH1 пока также поддерживается). В Unix этот протокол поддерживается стандартной командой ssh. В среде Windows можно пользоваться терминальной программой TeraTerm с дополнительным модулем для поддержки SSH или другими программами (Telneat, SSHSecureShellClient, sshNT.exe, PuTTY и др.).
В связи с проблемами безопасности протокола FTP, передача файлов на кластер осуществляется по другим протоколам, таким как scp, Zmodem, SFTP и др.
все зарегистрированы с паролем badpass.
просьба пароль сменить.
вход в сети матфака - ssh abacus1
снаружи - ssh [email protected] - пароль magistrat2010
Компиляция
Для компиляции MPI-приложений рекомендуется пользоваться командами mpicc (для программ на С), mpiCC (для программ на С++), и mpif77/mpif90 (для программ на Фортране 77/90). Опция компилятора "-o name" позволяет задать имя name для получаемого выполнимого файла, по умолчанию выполнимый файл называется a.out. Для оптимизации рекомендуется использовать ключ компилятора "-fast", например:
mpif77 -fast -o program program.f
Если необходимо только скомпилировать один объектный модуль и не выполнять линковку, используется опция "-с", например: mpiCC -c program2.C
Для сборки многомодульных приложений целесообразно пользоваться утилитой make. Простейшие примеры MPI-программ на языках Си и Фортран 77/90 доступны на кластере в каталоге /usr/local/examples.
Запуск программ
Задача ставится в очередь обычной командой запуска MPI-приложений (в квадратных скобках указаны необязательные параметры):
mpirun -np N <программа с аргументами!>
где N - число процессоров, которое должно быть не более разрешенного числа процессоров для одной задачи.
Система автоматически подбирает свободные узлы (процессоры) для запуска задачи. На каждом узле может быть запущено прикладных процессов более, чем реально доступно процессоров. Если задача запущена, то система присваивает задаче уникальный номер (ID). В дальнейшем ID может использоваться для получения информации о состоянии задачи и о результатах ее выполнения.