WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

ВЫСОКОПРОИЗВОДИТЕЛЬНЫЕ

ВЫЧИСЛЕНИЯ НА КЛАСТЕРАХ

Учебное пособие

Под редакцией д-ра физ.-мат. наук А.В. Старченко

Рекомендовано УМС по математике и механике УМО по классическому университетскому образованию РФ в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлениям подготовки «010100 Математика», «010800 Механика и математическое моделирование»

Издательство Томского университета 2008 УДК 519.6 ББК 22.18 В 93 Составители:

Д.А. Беликов, И.В. Говязов, Е.А. Данилкин, В.И. Лаева, С.А. Проханов, А.В. Старченко В 93 Высокопроизводительные вычисления на кластерах: Учебн. пособие/ Под ред. А.В. Старченко. – Томск: Изд-во Том. ун-та, 2008. – 198 с.

ISBN 978-5-7511-1879- В учебном пособии представлены необходимые сведения для работы на многопроцессорной вычислительной системе (кластере) ТГУ:

даны основные понятия операционной системы Linux, перечислены правила работы с функциями библиотеки Message Passing Interface, современными компиляторами и технологией OpenMP. Большое внимание уделено практическим вопросам создания параллельных программ для вычисления кратных интегралов, проведения матричных вычислений, решения СЛАУ, численного решения систем ОДУ и уравнений в частных производных. Подробно рассмотрены основные особенности использования математической библиотеки PETSc для параллельных вычислений. Для быстрого освоения и получения практического опыта параллельного программирования в пособии содержится большое количество примеров, необходимых для пользователя, решающего задачи математического моделирования с помощью вычислительной техники.

Для научных сотрудников, аспирантов, студентов, преподавателей, использующих высокопроизводительные вычислительные ресурсы в научной и учебной работе.

УДК 519. ББК 22. Рецензенты:

кафедра прикладной математики и информатики Томского государственного университета систем управления и электроники;

доктор физико-математических наук М. А. Т о л с т ы х ISBN 978-5-7511-1879-2 © Д.А. Беликов, И.В. Говязов, Е.А. Данилкин, В.И. Лаева, С.А. Проханов, А.В. Старченко,

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

1 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПАРАЛЛЕЛЬНОГО

ПРОГРАММИРОВАНИЯ И ПОРЯДОК РАБОТЫ НА

ВЫЧИСЛИТЕЛЬНОМ КЛАСТЕРЕ ТГУ СКИФ Cyberia 1.1 Программное обеспечение 1.2 Порядок работы на кластере СКИФ Cyberia 1.3 Операционная система Linux 1.3.1 Интерфейс ОС Linux 1.3.2 Некоторые команды Linux 1.3.3 Работа с каталогами 1.3.4 Работа с файлами 1.3.5 Другие полезные команды 1.3.6 Редактирование файлов 1.4 Компилирование последовательных программ (Fortran/C/C++) 1.5 Создание параллельной программы с использованием MPI 1.6 Запуск параллельной MPI-программы 1.7 Работа с системой пакетной обработки задач 1.7.1 Основные команды

2 СОВРЕМЕННЫЕ КОМПИЛЯТОРЫ ПРОГРАММ.

КОМПИЛЯТОР INTEL COMPILER 9.

2.1 Общие сведения 2.2 Совместное использование модулей на Фортране и Си 2.3 Основные опции компиляторов 2.4 Технологии OpenMP 2.4.1 Основные директивы OpenMP 2.4.2 Runtime-процедуры и переменные окружения 2.4.3 Переменные окружения 2.4.4 Процедуры для контроля/запроса параметров среды исполнения 2.4.5 Процедуры для синхронизации на базе замков 2.4.6 Примеры 2.5 Результаты применения OpenMP на многоядерных системах 2.6 Intel Math Kernel Library

3 ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ С

ИСПОЛЬЗОВАНИЕМ СТАНДАРТА MPI

3.4 Некоторые функции коллективного взаимодействия процессов 3.6 Примеры параллельных MPI-программ на языке FORTRAN 3.6.2 Коммуникационные операции между двумя процессами

4 ВЫЧИСЛЕНИЕ КРАТНЫХ ИНТЕГРАЛОВ

4.2 Параллельная программа расчета двойного интеграла 4.3 Метод повторного применения квадратурных формул 4.4 Параллельная программа расчета двойного интеграла методом повторного применения квадратурной формулы

5 МАТРИЧНЫЕ ВЫЧИСЛЕНИЯ

5.1 Способы повышения производительности умножения матриц 5.2 Распараллеливание операции умножения матриц

6. СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ

УРАВНЕНИЙ

6.4 Итерационные методы решения систем линейных уравнений 6.5 MPI-программа решения СЛАУ методом Якоби 6.6 OpenMP-программа решения СЛАУ методом Якоби 6.7 Оценка ускорения параллельной программы решения

7 ПАРАЛЛЕЛЬНЫЕ АЛГОРИТМЫ РЕШЕНИЯ ЗАДАЧИ

КОШИ ДЛЯ СИСТЕМЫ ОДУ

7.2 Одношаговые методы Рунге–Кутты четвертого порядка 7.3 Параллельная реализация метода Рунге–Кутты четвертого 7.4 Многошаговые методы Адамса. Схема «предиктор– 7.5 Параллельный алгоритм многошагового метода Адамса.

8 ПАКЕТ PETSc ДЛЯ РЕШЕНИЯ УРАВНЕНИЙ В

ЧАСТНЫХ ПРОИЗВОДНЫХ

8.5 Методы решений систем линейных уравнений

9 РЕШЕНИЕ ЗАДАЧ НЕСТАЦИОНАРНОЙ

ТЕПЛОПРОВОДНОСТИ С ПОМОЩЬЮ ЯВНЫХ И

НЕЯВНЫХ РАЗНОСТНЫХ СХЕМ



ВВЕДЕНИЕ

Начиная с момента появления вычислительной техники, человек постоянно стремится улучшить ее производительность, т.е. повысить количество обрабатываемой информации в единицу времени или сократить временные затраты компьютера на выполнение конкретной программы. Осуществление этой цели достигается двумя путями. Первый – непрерывное совершенствование аппаратных элементов вычислительной техники, сокращение связей между ними, повышение скорости их работы. Другой путь повышения производительности – создание суперкомпьютеров за счет увеличения количества исполнителей программы или использования способа обработки информации, отличного от традиционного последовательного. Ясно, что второй путь требует дополнительных затрат при программировании. Но тем не менее он позволяет получать результат быстрее, чем на серийных компьютерах.

Суперкомпьютер – это высокопроизводительная вычислительная система для выполнения сложных расчетов и обработки больших массивов информации.

В настоящее время суперкомпьютерные технологии широко используются в научных исследованиях, при поиске оптимальных технических решений, а также в коммерческой деятельности. С помощью высокопроизводительных вычислительных средств решают задачи следующих научных и научно-технических направлений:

- предсказание погоды, климата и глобальных изменений в атмосфере;

- генетика человека;

- астрономия;

- гидрогазодинамика и теплоперенос;

- прогноз катастрофических явлений в окружающей среде;

- разведка нефти и газа;

- исследование сверхпроводимости;

- распознавание изображений; распознавание и синтез речи;

- автомобиле- и авиастроение;

- прогнозирование в финансовой и экономической областях;

- оптимизация транспортных потоков;

- управление и логистика на крупных и средних предприятиях;

- разработка фармацевтических препаратов;

- обработка больших баз данных;

- защита информации, а также в стратегических областях:

- управляемый термоядерный синтез, расчет реакторов, расчет поведения плазмы;

- моделирование взрывов и ядерных испытаний;

- разработка военной и авиакосмической техники;

- системы ПВО (распознавание и слежение за большим количеством целей);

- космические разработки и исследования и т.д.

Суперкомпьютеры делятся на:

- векторно-конвейерные, особенностью которых является конвейерная обработка данных на специальных функциональных устройствах с использованием векторных команд для работы с целыми массивами данных;

- массивно-параллельные компьютеры с распределенной памятью (MPP-машины), построенные путем объединения большого числа (до нескольких тысяч) микропроцессоров с локальной памятью, связанных между собой некоторой высокоскоростной коммуникационной средой;

- параллельные компьютеры с общей памятью (SMP-машины), которые отличаются тем, что общая оперативная память в процессе работы вычислительной системы делится между несколькими одинаковыми процессорами, количество которых, как правило, не велико;

- кластеры, подобно массивно-параллельным системам, представляют собой многопроцессорные компьютеры, образованные из вычислительных модулей высокой степени готовности, которые связаны между собой системой связи или разделяемыми устройствами внешней памяти. Сейчас часто для кластеров используют в качестве вычислительных узлов обычные серийно выпускаемые компьютеры, а также высокоскоростное сетевое оборудование и специальное программное обеспечение. Из-за малой стоимости комплектующих изделий, возможности постоянного обновления и применения свободно распространяемого программного обеспечения эти системы являются наиболее перспективными с точки зрения получения высокой производительности.

В Томском государственном университете высокопроизводительная многопроцессорная вычислительная система появилась в конце 2000 г. Это кластер Student, состоящий из 9 двухпроцессорных узлов с локальной памятью на базе процессоров Intel Pentium III с тактовой частотой 650 МГц. Один узел, снабженный 512 Мб оперативной памяти и двумя жесткими дисками объемом 18 Гб, является сервером, на котором происходят компиляция и запуск программ, а также хранятся каталоги пользователей. На остальных узлах установлено по 256 Мб локальной памяти. Они используются наряду с сервером для параллельных расчетов. Вычислительные узлы кластера объединены в локальную компьютерную сеть Fast Ethernet с пропускной способностью 100 Мбит/с с коммуникационной топологией «звезда». Пиковая производительность кластера 11,7 Гфлопс, реальная производительность на тесте Linpack – 5,6 Гфлопс. На кластере установлено следующее программное обеспечение:

- операционная система Red Hat Enterprise Linux AS release 4;

- кластерный пакет LAM MPI для организации параллельных вычислений;

- специализированные библиотеки SCALAPACK, Intel MKL, FFTW для решения задач линейной алгебры и применения преобразования Фурье, SPRNG для генерации последовательностей псевдослучайных чисел, FLUENT и ANSYS для инженерных расчетов.

В 2007 г. в ТГУ введен в эксплуатацию вычислительный кластер СКИФ Cyberia. Этот суперкомпьютер состоит из 283 вычислительных узлов (один узел – управляющий). На каждом вычислительном узле установлено 4 Гб оперативной памяти, два двухъядерных процессора Intel Xeon 5150 Woodcrest с тактовой частотой 2,66 ГГц с поддержкой 64-разрядных расширений, жесткий диск 80 Гб. Управляющий узел с объемом оперативной памяти 8 Гб является сервером, на котором производятся компиляция и запуск программ. Для хранения системных каталогов и каталогов пользователей используется внешняя дисковая система хранения данных объемом 10 Тб.

Вычислительные узлы кластера связаны:

- системной сетью InfiniPath для обеспечения одновременной работы всех вычислительных узлов;

- вспомогательной сетью Gigabit Ethernet для связывания управляющего и вычислительных узлов;

- сервисной сетью для удаленного независимого включения / выключения питания, консольного доступа к каждому вычислительному узлу.

Пиковая производительность кластера СКИФ Cyberia 12 Тфлопс, реальная на тесте Linpack – 9,013 Тфлопс. В 2007 г. по своим показателям этот суперкомпьютер занимал 105-е место в списке TOP-500 (29-я редакция) и 1-е место в списке TOP-50 (5-я и 6-я редакции). На кластере СКИФ Cyberia установлено следующее программное обеспечение:

операционная система Linux SUSE Enterprise Server 10.0;

операционная система Microsoft Windows Compute Cluster поддержка стандартов параллельного программирования средства разработки приложений – высокопроизводительные оптимизирующие компиляторы с языков С/С++/Fortran (Intel 9.1, PGI 7.0);

средства параллельной отладки и трассировки приложений (Intel Vtune, TotalView 8.3);

системы управления заданиями и мониторинга для суперкомпьютера (Ganglia);

специализированное программное обеспечение – пакеты для научных и инженерных расчетов Fluent и ANSYS, моделирующие системы для исследований погоды и климата MM5 и WRF, системы для решения задач охраны окружающей среды CAMx и CMAQ; программа для докинга низкомолекулярных лигандов в белковые рецепторы AUTODOCK и комплекс программ для визуализации и анализа молекулярной структуры MGLTools, квантовохимический комплекс библиотеки для проведения параллельных вычислений PETSc, FFTW, MKL, SPRNG.

Прежде чем приступить к написанию параллельной программы для исследовательских целей, необходимо выяснить следующие вопросы:

1) Будет ли созданная параллельная программа работать быстрее, чем ее последовательные варианты?

2) Соизмерим ли полученный выигрыш во времени, который дает параллельная программа, с затратами на программирование?

Частичные ответы на эти вопросы могут быть получены на основе закона Амдаля. Он устанавливает связь между ускорением S p работы параллельной программы по сравнению с последовательной, числом процессоров p и долей вычислительных операций параллельной программы 0 1, которые выполняются сугубо последовательно:

Обычно ускорение S p определяется как отношение процессорного времени T на выполнение последовательной программы на одном процессоре ко времени T p выполнения вычислений параллельной программой на p -процессорной машине. При этом предполагается, что обе программы реализуют один и тот же алгоритм.

Если в параллельной программе доля последовательных операций (т.е. операций, которые обязательно должны выполняться одна за другой, а не одновременно) не может быть уменьшена более чем наполовину 0, 5, то ускорение параллельной программы будет невзирая на количество процессоров, используемых в расчетах.

Заметим также, что формулировка закона Амдаля не учитывает временных затрат на обеспечение обмена информацией между вычислительными узлами. Поскольку эти затраты (обусловленные необходимостью обеспечения коммуникационных обменов, предотвращения конфликтов памяти, синхронизации) лишь увеличивают общее время работы параллельной программы, то реальное ускорение S p будет еще ниже.

Поэтому прежде чем приступить к распараллеливанию вычислительной процедуры и проектированию программы для многопроцессорной машины, необходимо путем простого пересчета оценить время, которое будет затрачено на осуществление арифметических операций и межпроцессорные обмены при выполнении параллельного алгоритма. После этого следует соотнести полученный результат с итогом аналогичных расчетов для последовательного алгоритма и сделать вывод о перспективности планируемых действий.

1 ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ

ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ И

ПОРЯДОК РАБОТЫ НА ВЫЧИСЛИТЕЛЬНОМ

КЛАСТЕРЕ ТГУ СКИФ Cyberia Вычислительный кластер ТГУ СКИФ Cyberia работает под управлением операционных систем – Suse Linux Enterprise Server 10 и Microsoft Windows Compute Cluster Server 2003.

Suse Linux Enterprise Server 10 (SLES) – один из дистрибутивов операционной системы Linux, представляющий собой масштабируемую, высокопроизводительную платформу безопасных корпоративных вычислений, реализующую все преимущества Linux и OpenSource.

Microsoft Windows Compute Cluster Server 2003 (CCS) является интегрированной, стандартной кластерной платформой, основанной на высокопроизводительной системе Windows Server 2003 x64.

Это решение реализует возможности высокопроизводительных вычислений в обычном рабочем окружении Windows.

На кластере установлены компиляторы gcc 4.1.0 и Intel C/C++/Fortran Compilers.

GCC (GNU Compiler Collection) – набор свободно доступных компиляторов для различных языков программирования (С/C++/Fortran и др.). Он используется как стандартный компилятор для свободных Unix-подобных операционных систем.

Intel С/C++/Fortran Compilers – компиляторы нового поколения, позволяющие обеспечить высокую производительность на процессорах Intel.

Компиляторы Intel дополнены эффективными средствами разработки многопоточного кода, поддерживающими стандарт OpenMP и технологию автораспараллеливания кода. Например, библиотека Intel Math Kernel Library 9.0 (Intel MKL) предоставляет набор оптимизированных математических функций, позволяющих создавать максимально быстродействующие инженерные, научные и финансовые приложения для процессоров Intel. Функциональные области библиотеки включают линейные алгебраические функции LAPACK и BLAS, быстрые преобразования Фурье и трансцендентные векторные функции (библиотека векторной математики VML).

На кластере используется параллельная среда QLogic MPI.

Qlogic MPI – библиотека MPI для работы с высокопроизводительной сетью Infiniband.

Установлен анализатор производительности Intel VTune. Анализатор Intel VTune собирает и отображает данные о производительности программы, позволяет определить и локализовать «узкие места» программного кода.

MM5 – негидростатическая мезомасштабная модель для исследования региональной погоды над ограниченной поверхностью со сложным рельефом.

Также на кластере СКИФ Cyberia для выполнения инженерных расчетов используются специализированные пакеты ANSYS, FLUENT.

ANSYS – многоцелевой конечно-элементный пакет для проведения анализа в широкой области инженерных дисциплин (акустика, прочность, деформация, теплофизика, динамика жидкостей и газов и электромагнетизм и др.).

FLUENT – современный программный комплекс, предназначенный для решения задач механики жидкости и газа. Пакеты адаптированы для работы на кластерной системе.

Установленная на кластере библиотека PETSc (Portable, Extensible Toolkit for Scientific Computation) используется для численного решения дифференциальных уравнений в частых производных.

1.2 Порядок работы на кластере СКИФ Cyberia Для входа на кластер с персонального компьютера, имеющего выход в Интернет, необходимо использовать ssh-клиент.

Пользователям операционной системы Microsoft Windows рекомендуется использовать программу putty.

(http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html).

Чтобы установить соединение с кластером при помощи putty, необходимо:

1. В поле Host Name ввести cyberia.tsu.ru, port 22.

2. Connection type: SSH.

3. В Category — Window — Translation — Character set translation on received data выбрать UTF-8.

4. В SSH — Preferred SSH protocol version должно быть указано 2.

5. В поле Saved Sessions ввести любое удобное название.

Нажать кнопку «Save». Под этим именем будут сохранены настройки.

6. Теперь для входа на кластер достаточно загрузить сохраненные настройки, выбрать их в меню Saved sessions и нажать «Load».

7. Нажать «Open».

Сеанс работы с операционной системой начинается с ввода идентификатора пользователя (username) и его пароля (password).

Приглашением к вводу идентификатора является фраза «login as».

Пароль при вводе не отображается.

Пользователи Unix-подобных операционных систем также могут воспользоваться putty или использовать стандартный консольный ssh-клиент.

Чтобы установить соединение с кластером при помощи стандартного ssh-клиента, необходимо:

1. В командной строке выполнить команду:

ssh -l username cyberia.tsu.ru или ssh [email protected] 2. Ввести пароль (password).

Для обмена файлами с кластером пользователям ОС Microsoft рекомендуется применять программу WinSCP Windows (http://winscp.net/eng/docs/lang:ru) или консольный клиент psftp из пакета putty. WinSCP выполняет все основные операции с файлами, такие как загрузка и выгрузка файлов. Он также позволяет переименовывать файлы и папки, создавать папки, изменять свойства файлов и папок.

Для передачи файлов через WinSCP необходимо:

1. В поле Host Name указать cyberia.tsu.ru, port 22.

2. Указать User name.

3. File Protocol: SFTP.

4. Сохранить настройки.

5. Нажать «login», ввести пароль.

Работа с WinSCP во многом похожа на работу Norton Commander (Far). Также существует возможность использовать WinSCP Far plugin. (http://winscp.net/eng/docs/fm_plugins).

Для передачи файлов с помощью psftp необходимо:

1. Запустить psftp.

2. Вызвать команду open [email protected].

3. Ввести пароль.

Основные команды psftp:

ls – показывает список файлов и подкаталогов;

get filename – «cкачивает» файл filename на ваш компьютер;

put filename – загружает файл filename из локального каталога на удаленный компьютер;

cd dir – устанавливает текущим каталогом удаленный каталог с именем dir.

Дополнительную справку можно получить командами «help» и «help имя_команды».

Под Unix-подобными операционными системами можно пользоваться программами sftp, scp или Midnight Commander (пункт меню «shell link»).

Операционная система (ОС) – это комплекс программ, обеспечивающих управление ресурсами компьютера и процессами, выполняющимися на компьютере, а также взаимодействие пользователей и компьютера.

Linux — это свободная UNIX-подобная операционная система.

На кластере установлена операционная система Suse Linux Enterprise Server 10 (SLES).

В операционной системе Linux при наборе команд, имен файлов и каталогов различаются заглавные и прописные буквы. Процесс общения с ОС Linux осуществляется в основном при помощи консольного терминала (при помощи клавиатуры и монитора). После входа в систему на экране можно увидеть один из двух элементов интерфейса Linux: командную строку или графическую оболочку.

Командная строка – традиционный способ общения в Linux. Когда Linux ожидает команду, на экране высвечивается приглашение – «$». Чтобы дать команду системе, нужно в командной строке набрать имя команды, а затем – ее опции и аргументы (могут отсутствовать), разделенные пробелами. После набора ввод команды осуществляется нажатием клавиши ENTER. Команды Linux имеют структуру command option(s) argument(s) Опции обычно сопровождаются знаком «минус» и модифицируют поведение команды. Аргументы – это обычно имена каталогов или файлов. Следует помнить, что строчные и заглавные буквы в Linux обрабатываются по-разному, поэтому, например, команды man и Man воспринимаются ОС как различные. Это распространяется и на имена файлов.

Заметим, что каталог пользователя находится в папке /home/user_name корневого каталога системы.

Ниже приводятся некоторые наиболее употребляемые команды Linux. Чтобы получить более полную информацию по любой отдельной команде command, нужно ввести man command Выход из описания команды производится при нажатии клавиши «q».

pwd – показывает название текущей директории;

cd dir – устанавливает текущим каталогом каталог с именем dir, вызов команды cd без параметров возвращает в домашний каталог /home/username ($HOME);

mkdir subdir – создает новый подкаталог с именем subdir;

rmdir subdir – удаляет пустой подкаталог с именем subdir;

ls – показывает список файлов и подкаталогов текущей директории;

ls dir – показывает список файлов и подкаталогов каталога dir;

ls –A – показывает все файлы, в том числе и скрытые;

ls –l – показывает атрибуты (владелец, разрешение на доступ, размер файла и время последней модификации);

mv oldname newname – изменяет имя подкаталога или перемещает его;

cp -R dirname destination – копирует подкаталог dirname в другое место destination.

file filename(s) – определяет тип файла (например, ASCII, JPEG image data и др.);

cat filename(s) – показывает содержание файлов (используется только для текстовых файлов!);

more filename(s) – действует так же, как и cat, но позволяет листать страницы;

less filename(s) – улучшенный вариант команды more;

head filename – показывает первые десять строк файла filename;

tail filename – показывает последние десять строк файла filename;

wc filename(s) – показывает число строк, слов и байт для указанного файла;

rm filename(s) – уничтожает файлы или директории, для рекурсивного удаления следует использовать rm с ключом -rf.

cp filename newname – создает копии файлов с новыми именами;

cp filename(s) dir – копирует один или более файлов в другой каталог;

mv oldname newname – изменяет имя файла или каталога;

mv filename(s) dir – перемещает один или более файлов в другой каталог;

find dir -name filename – пытается локализовать файл (подкаталог) filename рекурсивно в подкаталоге dir.

passwd – изменяет пароль пользователя системы Linux; требует подтверждения старого;

who – показывает, кто в настоящее время работает в сети;

finger – дает более подробную информацию о пользователях сети;

write – позволяет послать сообщение пользователю, работающему в сети в данное время;

top – отображает информацию о процессах, использующих процессоры узла;

ps –U user_name – показывает номера процессов (pid), инициированных пользователем user_name;

kill xxxxx – досрочно завершает работу процесса с номером xxxxx;

killall proc_name – досрочно завершает работу процесса proc_name;

date – отображает дату и время;

cal – показывает календарь;

exit – выйти из терминала;

clear – очистить окно терминала;

du dir – показывает занятое место в директории dir.

Для облегчения взаимодействия с ОС были предложены программы-оболочки, которые делают наглядным и простым выполнение следующих базовых операций над файлами и каталогами:

- перемещение по каталогам и подкаталогам;

- создание и удаление подкаталога;

- просмотр, редактирование файла;

- копирование, перенос, переименование, удаление файлов;

- запуск программ и др.

В ОС Linux к таким программам-оболочкам относится Midnight Commander, который в основных чертах аналогичен известным оболочкам операционных систем DOS и Windows – Norton Commander и FAR. Запуск Midnight Commander осуществляется выполнением команды mc. Выход производится после последовательного нажатия клавиш F10 и Enter.

Текстовый редактор необходим для изменения содержания текстового файла или подготовки и редактирования текста программы на каком-либо языке программирования. В операционной системе Linux кластера ТГУ СКИФ Cyberia используются редакторы vim, mcedit.

Редактор vim – простой, но очень мощный, однако неопытным пользователям не рекомендуется его применять. Выход из редактора без сохранения изменений редактируемого файла – :qa!. Подробнее о его работе можно узнать, выполнив команду vimtutor Встроенный в Midnight Commander редактор mcedit гораздо проще в работе.

Запуск этих редакторов в командной строке производится следующим образом:

vi(m) filename mcedit filename Если же используется программа-оболочка (Midnight Commander), то нужно установить курсор на filename и нажать клавишу F4. Загрузится редактор, настроенный на действие этой опции.

1.4 Компилирование последовательных программ После подготовки текста программы с помощью текстового редактора необходимо получить исполняемый файл, запуск которого позволит провести расчеты по написанной программе.

На вычислительном кластере установлены компиляторы Intel (icc, ifort) и компиляторы GNU (gcc, gfortran). Рекомендуется пользоваться компиляторами Intel.

В случае, если была подготовлена программа на языке FORTRAN, соответствующий текстовый файл должен иметь расширение.f или.for (например, myprog.f). Для программы, написанной в соответствии со стандартом FORTRAN 90, -.f90. Чтобы произвести его компиляцию, нужно ввести команду ifort –O myprog.f –o myprog.exe Опция –О означает, что будет создан рабочий модуль, оптимизированный с точки зрения скорости выполнения программы, если компилятор не обнаружит ошибки. Подчеркнутая часть команды говорит о том, что рабочий модуль будет иметь имя myprog.out.

Если же эта часть будет опущена, то имя рабочей программы будет a.out.

Для компиляции программ, написанных на языке программирования C (С++), используется программа iсc. Более подробно о ifort и icc можно узнать, выполнив команды man ifort Для запуска рабочего модуля последовательной программы необходимо использовать установленную систему очередей (см.

п.1.7).

1.5 Создание параллельной программы с использованием Библиотека MPI (Message Passing Interface) была разработана для создания параллельных программ. Реализация MPI-программ позволяет наиболее оптимально использовать кластерный вычислительный ресурс. На вычислительном кластере установлена библиотека MPI, оптимизированная для работы с высокопроизводительной средой передачи данных InfiniPath, входящей в состав вычислительного комплекса.

Кроме самой библиотеки на кластере установлены «привязки» к языкам программирования C, C++ и Fortran. Для облегчения компиляции и сборки программ рекомендуется использовать следующие утилиты:

mpicc – для программ, написанных на языке программирования mpixx (mpiCC) – для программ, написанных на языке программирования C++;

mpif77 и mpif90 – для программ, написанных на языке программирования Fortran.

Синтаксис данных утилит во многом похож на синтаксис компиляторов icc и ifort, более полная информация о синтаксисе доступна по команде man имя_утилиты.

Например, для компиляции программы fisrt.f90 можно выполнить команду mpif90 -O first.f90 -o first.exe 1.6 Запуск параллельной MPI-программы Запуск MPI-приложения на вычислительном кластере возможен только через систему пакетной обработки заданий (см. п. 1.7).

Для упрощения запуска и постановки в очередь параллельной программы предусмотрен специальный скрипт mpirun.

Например, mpirun -np 20./first.exe запустит параллельную программу first.exe на 20 процессорах, т.е.

на 5 узлах (каждый узел имеет 2 двухъядерных процессора). Стоит обратить внимание, что для запуска исполняемого модуля, находящегося в текущей директории ($pwd), необходимо явно указать путь «./»

1.7 Работа с системой пакетной обработки задач На вычислительном кластере установлена система пакетной обработки заданий torque. Данная система предназначена для контроля вычислительных ресурсов и выделения их под задачи пользователя.

Скрипт mpirun помещает задачу в очередь, но при таком подходе на каждом узле будет использоваться максимальное количество процессоров/ядер, т.е. задача будет запущена 4 раза на каждом вычислительном узле. В некоторых случаях, например при использовании OpenMP, MPI+OpenMP или для запуска последовательных программ, целесообразно использовать систему пакетной обработки заданий.

qstat – утилита для просмотра состояния очереди заданий. По команде «qstat -f» на экране выводится полный список задач пользователя с параметрами.

qsub – утилита для установки задачи в очередь на выполнение.

По данной команде в очередь на выполнение будет поставлен сценарий оболочки, из которого происходит запуск самой вычислительной задачи. При постановке задачи на выполнение пользователь указывает требуемое количество ресурсов, а также дополнительные параметры, такие, как рабочая директория, имена файлов вывода стандартных потоков stdout и stderr, имена переменных для передачи в качестве системного окружения задачи и т.д. Полное описание ресурсов задачи можно получить по команде man pbs_resources, а описание атрибутов задачи – по команде man pbs_job_attributes.

Пример:

qsub script.sh Синтаксис script.sh #PBS -o $DIR/stdout.log Определяет имя файла, в который будет перенаправлен стандартный поток stdout.

#PBS -e $DIR/stderr.log Определяет имя файла, в который будет перенаправлен стандартный поток stderr.

#PBS -l nodes=8:ppn=2:cpp= Определяет, какое количество узлов и процессоров на них необходимо задействовать:

nodes – количество узлов;

ppn – число процессоров на узле;

cpp – число процессов на процессоре.

#PBS -l walltime=20:00: Определяет максимальное время счета задания.

#PBS -l mem=4000mb Определяет количество необходимой оперативной памяти.

cat $PBS_NODEFILE | grep -v master | sort | uniq -c | awk '{printf "%s:%s\n", $2, $1}' > $PBS_O_WORKDIR/temp.tmp Составляет список узлов в необходимом формате, на которых будет запущена задача, и записывает их в файл temp.tmp.

cd $PBS_O_WORKDIR /usr/bin/mpirun.ipath -m temp.tmp –np 16./a.out Запускает на узлах указанных в файле temp.tmp 16 копий параллельной программы.

Пример скрипта:

#PBS -o $DIR/stdout.log #PBS -e $DIR/stderr.log #PBS -l nodes=50:ppn= #PBS -l walltime=20:00: #PBS -l mem=4000mb cat $PBS_NODEFILE | grep -v master | sort | uniq -c | awk '{printf "%s:%s\n", $2, $1}' > $PBS_O_WORKDIR/script.mf cd $PBS_O_WORKDIR /usr/bin/mpirun.ipath -m script.mf -np 100./a.out Здесь будет запущена параллельная программа a.out на 50 узлах, с каждого узла будет использоваться 2 процессора. Файл вывода стандартного потока stdout — stdout.log, стандартного потока stderr — stderr.log. $DIR содержит путь к файлам stdout.log и stderr.log, например, может принимать значение /home/user_name.

Под задачу отведено 20 часов. Необходимое количество памяти 1000 мегабайт.

Для запуска последовательной программы first.exe можно использовать следующий скрипт:

#PBS -o $DIR/stdout.log #PBS -e $DIR/stderr.log #PBS -l walltime=10: #PBS -l mem=100mb./first.exe При запуске программы через команду qsub заданию присваивается уникальный целочисленный идентификатор.

qsub script.sh Starting MPI job under Torque resource manager...

20213.master.cyberia.tsu.ru Здесь идентификатор задания 20213.

qdel – утилита для удаления задачи. В случае, если задача уже запущена, процесс ее работы будет прерван. Синтаксис данной утилиты следующий:

qdel [-W время задержки] идентификаторы задачи.

Выполнение такой команды удалит задачи с заданными идентификаторами через указанное время.

Более подробное описание синтаксиса команд можно получить, выполнив команду man имя_утилиты.

2 СОВРЕМЕННЫЕ КОМПИЛЯТОРЫ ПРОГРАММ.

КОМПИЛЯТОР INTEL COMPILER 9.

Компилятор Intel позволяет достичь высочайшей производительности Windows и UNIX приложений на 32- и 64-разрядных платформах Intel, включая системы на базе процессоров Pentium M, Pentium 4 с технологией Hyper-Threading, Xeon, Itanium и Itanium 2. Компилятор предлагает мощные средства оптимизации кода, встроенную поддержку многопоточных приложений и инструменты для реализации технологии Hyper-Threading. Он поддерживает популярные средства разработки и индустриальные стандарты языка Fortran. Вспомогательные инструменты для тестового покрытия кода и установки приоритетов тестирования помогают существенно сократить период отладки и тестирования приложений.

Компиляторы Intel вызываются с помощью команд icc (C или C++), icpc (C++) и ifort (Фортран 77/90). Команды mpicc, mpiCC и mpif77 для компиляции и сборки MPI-программ также настроены на использование компиляторов Intel.

По умолчанию файлы с расширением.cpp и.cxx считаются исходными текстами на языке С++, файлы с расширением.c – исходными текстами на языке С, а компилятор icpc также компилирует файлы.c как исходные тексты на С++.

Файлы с расширениями.f,.ftn и.for распознаются как исходные тексты на языке Фортран с фиксированной формой записи, а файлы.fpp и.F дополнительно пропускаются через препроцессор языка Фортран. Файлы с расширением.f90 считаются исходными текстами Фортран 90/95 со свободной формой записи. Явным образом можно задать фиксированную или свободную форму записи Фортран-программ с помощью опций -FI и -FR соответственно.

Файлы с расширением.s распознаются как код на языке ассемблера для IA-32.

Компиляторы Intel характеризуются следующими возможностями:

значительной оптимизацией исходной программы на высоком уровне, т.е. прежде всего выполняют различные преобразования циклов, что с большим или меньшим успехом делают почти все компиляторы;

оптимизацией вычислений с плавающей точкой путем максимального использования команд, реализованных на аппаратном уровне;

межпроцедурной оптимизацией, т.е. глобальной оптимизацией всей программы в отличие от обычной оптимизации, которая затрагивает только код конкретных функций;

оптимизацией на базе профилей, т.е. возможностью прогнать программу в тестовом режиме, собрать данные о времени прохождения тех или иных фрагментов кода внутри часто вызываемых функций, а затем использовать эти данные для оптимизации;

поддержкой системы команд SSE в процессорах Pentium III;

автоматической векторизацией, т.е. использованием команд SSE и SSE2, вставляемых автоматически компилятором;

поддержкой OpenMP для программирования на SMPсистемах;

предвыборкой данных – использованием команд предварительной загрузки из памяти в кэш данных, которые понадобятся через некоторое время;

«диспетчеризацией» кода для различных процессоров, т.е.

возможностью генерации кода для различных процессоров в одном исполняемом файле, что позволяет использовать преимущества новейших процессоров для достижения на них наибольшей производительности.

Согласно результатам выполнения тестов SPEC CPU2000, опубликованным на сервере http://www.ixbt.com, компиляторы Intel версии 6.0 практически везде оказались лучше по сравнению с компиляторами gcc версий 2.95.3, 2.96 и 3.1 и PGI версии 4.0.2. Эти тесты проводились в 2002 г. на компьютере с процессором Pentium 4/1.7 ГГц и ОС RedHat Linux 7.3.

Согласно результатам тестов, проведенных компанией Polyhedron, компилятор Intel Fortran версии 7.0 почти везде оказался лучше по сравнению с другими компиляторами Fortran для Linux (Absoft, GNU, Lahey, NAG, NAS, PGI). Только в некоторых тестах компилятор Intel незначительно проигрывает компиляторам Absoft, NAG и Lahey. Эти тесты были проведены на компьютере с процессором Pentium 4/1.8 ГГц и ОС Mandrake Linux 8.1.

Компиляторы Intel версии 9.1 также обгоняют по производительности компиляторы gcc и показывают производительность, сравнимую с Absoft, PathScale и PGI.

2.2 Совместное использование модулей на Фортране и Си Чтобы совместно использовать модули, написанные на языках Фортран и Си, нужно согласовать наименование процедур в объектных модулях, передачу параметров, а также доступ к глобальным переменным, если такие есть.

По умолчанию компилятор Intel Fortran переводит имена процедур в нижний регистр и добавляет в конец имени процедуры знак подчеркивания. Компилятор Си никогда не изменяет имена функций. Таким образом, если мы хотим из модуля на Фортране вызвать функцию или процедуру FNNAME, реализованную на Си, то в модуле на Си она должна именоваться fnname_.

Компилятор Фортрана поддерживает опцию -nus [имя файла], которая позволяет отключать добавление знаков подчеркивания к внутренним именам процедур. Если задано имя файла, то это производится только для имен процедур, перечисленных в заданном файле.

По умолчанию на Фортране параметры передаются по ссылке, а на Си – всегда по значению. Таким образом, при вызове Фортранпроцедуры из модуля на Си необходимо в качестве параметров передавать указатели на соответствующие переменные, содержащие значения фактических параметров. При написании на Си функции, которую надо будет вызывать из модуля на Фортране, требуется описывать формальные параметры как указатели соответствующих типов.

В модулях на Си возможно использование COMMON-блоков, определенных внутри модулей на Фортране (подробнее об этом см.

Intel Fortran Compiler User's Guide, глава Mixing C and Fortran).

Наиболее интересными, конечно же, являются опции оптимизации кода. Большинство опций совпадают для Intel компиляторов С++ и Fortran.

Базовая оптимизация, ориентированная на скорость работы. Отключается инлайн-вставка библиотечных функций. Для компилятора С++ эти опции дают одинаковую оптимизацию, для компилятора Фортрана опция -O2 предпочтительнее, т.к. включает еще раскрутку циклов. Раскрутка циклов заключается в дублировании тела цикла и сокращении числа итеO раций. Кроме того, необходимо позаботиться, чтобы все вхождения переменной цикла в тело были заменены выражениями, вычисляющими требуемые значения с учетом измененных значений переменной цикла Более мощная оптимизация, включая преобразования циклов, предвыборку данных, использование OpenMP. На некоторых программах может не гарантироваться повышенная производительность по сравнению с -O2. Имеет смысл использовать вместе с опциями векторизации -xK и -unroll[n] Оптимизация для процессоров Penitum Pro, Pentium II и Pentium III -tpp Оптимизация для процессоров Penitum 4 (эта опция включена по умолчанию для компилятора на IA-32) Генерация кода с использованием расширений MMX, специфических для процессоров Pentium MMX, Pentium II и более поздних Генерация кода с использованием расширений SSE, специфических Генерация кода с использованием расширений SSE2, специфических Включается межпроцедурная оптимизация внутри одного файла. Если при этом указать опцию -ip_no_inlining, то отключаются инлайн-вставки Включается межпроцедурная оптимизация между различными файipo Генерируется «профилировочный» код, который будет использован для профилировки, т.е. сбора данных о частоте прохождения тех или иных -prof_gen Производится оптимизация на основе данных, полученных на этапе профилировки. Имеет смысл использовать вместе с опцией межпроцедурprof_use Включается поддержка стандарта OpenMP 2. -openmp Включается автоматическое распараллеливание циклов -parallel Более подробное описание можно посмотреть в руководстве пользователя Intel Fortran Compiler User's Guide.

В табл. 2.1 представлено время центрального процессора в секундах, затраченное на перемножение матриц размерностью 1000х1000, 2000х2000, 4000х4000, 8000х8000 элементов для различных уровней оптимизации. Анализируя данные, следует отметить, что правильный выбор параметров оптимизации позволяет существенно сократить время решения задачи.

Время счета Fortran-программ, откомпилированных с использованием опций -O2 и -O3, практически не отличается, однако компиляция с ключом -O3 происходит гораздо дольше.

OpenMP (Open specifications for Multi-Processing) – стандарт для написания параллельных программ для многопроцессорных вычислительных систем с общей оперативной памятью. Программа представляется как набор потоков (нитей), объединённых общей памятью, где проблема синхронизации решается введением критических секций и мониторов. Разработкой стандарта занимается организация OpenMP ARB (ARchitecture Board), в которую вошли представители крупнейших компаний-разработчиков SMPархитектур (Symmetric Multiprocessing) и программного обеспечения. Спецификации для языков Fortran и C/C++ появились соответственно в октябре 1997 г. и октябре 1998 г. OpenMP – это набор специальных директив компилятору, библиотечных функций и переменных окружения. Наиболее оригинальны директивы компилятору, которые используются для обозначения областей в коде с возможностью параллельного выполнения. Компилятор, поддерживающий OpenMP, преобразует исходный код и вставляет соответствующие вызовы функций для параллельного выполнения этих областей кода.

За счет идеи «частичного распараллеливания» OpenMP идеально подходит для разработчиков, желающих быстро распараллелить свои вычислительные программы с большими параллельными циклами. Разработчик не создает новую параллельную программу, а просто добавляет в текст последовательной программы OpenMPдирективы. Предполагается, что OpenMP-программа на однопроцессорной платформе может быть использована в качестве последовательной программы, т.е. нет необходимости одновременно поддерживать последовательную и параллельную версии. Директивы OpenMP просто игнорируются последовательным компилятором, а для вызова процедур OpenMP могут быть подставлены заглушки (stubs), текст которых приведен в спецификациях.

OpenMP прост в использовании и включает лишь два базовых типа конструкций: директивы pragma и функции исполняющей среды OpenMP. Директивы pragma, как правило, указывают компилятору, как реализовать параллельное выполнение блоков кода. Все эти директивы начинаются с фразы !$OMP. Как и любые другие директивы pragma, они игнорируются компилятором, не поддерживающим конкретную технологию – в данном случае OpenMP. Каждая директива может иметь несколько дополнительных атрибутов. Отдельно специфицируются атрибуты для назначения классов переменных, которые могут быть атрибутами различных директив.

Функции OpenMP служат в основном для изменения и получения параметров окружения. Кроме того, OpenMP включает API-функции для поддержки некоторых типов синхронизации. Чтобы задействовать эти функции OpenMP библиотеки периода выполнения (исполняющей среды), в программу нужно включить заголовочный файл omp.h. Если же используется в приложении только OpenMP-директивы pragma, включать этот файл не требуется.

!$OMP PARALLEL [атрибут [[,] атрибут] …] блок операторов программы !$OMP END PARALLEL Определяет параллельную область программы. При входе в эту область порождаются новые (N-1) нити, образуется «команда» из N нитей, а порождающая нить получает номер 0 и становится основной нитью команды (так называемой «master thread»). При выходе из параллельной области основная нить дожидается завершения остальных нитей и продолжает выполнение программы в одном экземпляре. Предполагается, что в SMP-системе нити будут распределены по различным процессорам (однако это, как правило, находится в ведении операционной системы). Атрибут – это необязательный модификатор директивы, влияющий на ее выполнение.

Атрибуты могут быть следующими:

PRIVATE (список) Каждая нить имеет свою собственную неинициализированную локальную копию переменных и общих блоков, перечисленных в списке.

SHARED (список) Этот атрибут определяет, что переменные, перечисленные в списке, являются доступными для всех нитей. Если переменная определяется как SHARED, то тем самым утверждается, что все нити могут работать только с одной копией переменной.

DEFAULT (атрибут) Атрибут может иметь одно из следующих значений:

PRIVATE

SHARED

Когда в директиве PARALLEL используется атрибут DEFAULT, то тем самым объявляется, что все переменные в блоке операторов параллельной области программы должны быть PRIVATE, SHARED или NONE.

FIRSTPRIVATE (список) Этот атрибут используется подобно PRIVATE за исключением того, что каждая нить получает инициализированные копии переменных, перечисленных в списке.

REDUCTION ({оператор|встроенная функция}:список) Здесь оператор|встроенная функция могут принимать одно из следующих значений (начальное значение переменной из списка приведено в скобках):

.AND.(.TRUE.).OR. (.FALSE.).NEQV. (.FALSE.) MAX (наименьшее «компьютерное» число) MIN (наибольшее «компьютерное» число) IAND (все биты равны единице) IEOR (0) Когда установлен атрибут REDUCTION, окончательные локальные значения (для каждой нити) для каждой переменной из списка получаются с учетом выбранного оператора или встроенной функции редукции. Это значение затем комбинируется со значениями локальных переменных из списка, полученных с остальных нитей перед завершением параллельной области. Внутри параллельной области переменные из списка имеют атрибут PRIVATE и инициализируются, как указано выше.

IF (логическое_выражение) Если логическое_выражение имеет значение «истина», то блок выполняется параллельно, если – «ложь», то последовательно.

COPYIN (список имен общих блоков) Атрибут COPYIN применяется только к общим блокам, которые объявлены как THREADPRIVATE (локальные). В параллельной области COPYIN определяет, какие данные (общие блоки) из главной (порождающей) нити должны быть скопированы на другие нити в начале параллельной области.

!$OMP DO [атрибут[[,] атрибут] …] do_цикл !$OMP END DO [NOWAIT] Директива DO определяет, что итерации непосредственно следующего цикла DO должны быть выполнены параллельно. Директива DO должна обязательно располагаться в параллельной области программы, поскольку она сама не создает нитей.

Атрибуты могут быть следующими:

PRIVATE (список) FIRSTPRIVATE (список) REDUCTION ({оператор|встроенная функция}:список) SСHEDULE (тип [,количество])) Атрибут SHEDULE задает, как итерации цикла DO будут распределяться между нитями. Количество оценивается из контекста конструкции директивы DO.

SCHEDULE (STATIC, m) – итерации делятся на блоки размером, определенным в m. Блоки назначаются нитям циклически.

SCHEDULE (DYNAMIC, m) – итерации делятся на блоки размером, определенным в m. Как только нить закончит выполнение блока, она динамически получает следующий блок итераций для выполнения.

SCHEDULE (GUIDED, m) – итерации цикла делятся на блоки, размер которых уменьшается. Наименьший размер блока определяется в m. Как только нить закончит выполнение очередного блока, она динамически получает следующий блок итераций для выполнения.

SCHEDULE (RUNTIME) – распределение итераций по нитям может меняться во время вычислений в зависимости от значения переменной окружения OMP_SCHEDULE.

ORDERED

Этот атрибут используется тогда, когда необходимо внутри цикла do иметь ORDERED-секции. Внутри этих секций код выполняется в порядке, который был бы при последовательном исполнении.

ORDERED-секции определяются с помощью директивы ORDERED.

По умолчанию при завершении директивы DO все нити дожидаются последней. Если же определен атрибут NOWAIT, нити не синхранизируют свою работу в конце параллельного выполнения цикла.

!$OMP PARALLEL DO [атрибут[[,] атрибут] …]

!$OMP END PARALLEL DO

Директива PARALLEL DO позволяет более кратко записать параллельную область, которая содержит единственную DOдирективу. Семантика полностью идентична PARALLELдирективе и следующей за ней DO-директиве. Атрибуты этой директивы совпадают с атрибутами PARALLEL-директивы и DOдирективы, описанными выше.

!$OMP SECTIONS [атрибут[[,] атрибут] …] [!$OMP SECTION] блок операторов программы [!$OMP SECTION блок операторов программы] !$OMP END SECTIONS [NOWAIT] Директива SECTIONS обрамляет параллельную секцию программы. Вложенные секции программы, задаваемые директивами SECTION, распределяются между нитями. Атрибутами этой директивы могут быть:

PRIVATE (список) REDUCTION ({оператор|встроенная функция}:список) FIRSTPRIVATE (список) LASTPRIVATE (список) По окончании параллельного цикла или блока параллельных секций нить, которая выполнила последнюю итерацию цикла или последнюю секцию блока, обновляет значение переменной из списка.

!$OMP SINGLE [атрибут[[,] атрибут] …] блок операторов программы !$OMP END SINGLE [NOWAIT] Директива SINGLE определяет, какая часть блока операторов программы должна быть выполнена только одной нитью. Нити, которые не участвуют в выполнении операторов в блоке SINGLE, ожидают завершения этого блока в том случае, если не установлен атрибут NOWAIT. Атрибутами этой директивы могут быть:

PRIVATE (список) FIRSTPRIVATE (список) !$OMP MASTER блок операторов программы !$OMP END MASTER Обрамляет блок операторов программы, который должен выполняться только главной нитью.

!$OMP CRITICAL [(имя)] блок операторов программы !$OMP END CRITICAL [(имя)] Директива CRITICAL разрешает доступ к выделенному блоку только для одной нити в любой момент времени. Каждая оставшаяся нить приостанавливает выполнение программы перед этой директивой до тех пор, пока выделенный блок операторов программы не освободится.

!$OMP BARRIER Директива BARRIER синхронизирует работу всех нитей. Каждая нить, выполнение которой достигло данной точки, ждет до тех пор, пока все нити примут это состояние.

!$OMP FLUSH (список) Директива FLUSH задает точку синхронизации, в которой значения переменных, указанных в списке и видимых из данной нити, записываются в память. Тем самым обеспечивается согласование содержимого памяти, доступного разным нитям. Неявно FLUSH присутствует в следующих директивах: BARRIER, CRITICAL,

END CRITICAL, END DO, END PARALLEL, END SECTIONS,

END SINGLE, ORDERED, END ORDERED.

!$OMP ATOMIC Объявляет операцию атомарной (при выполнении атомарной операции одновременный доступ к памяти по записи разных нитей запрещен). Применяется только к оператору, непосредственно следующему после данной директивы. Он может иметь следующий вид:

x = x {+||*|/|.AND.|.OR.|.EQV.|.NEQV.} expression x = expression {+||*|/|.AND.|.OR.|.EQV.|.NEQV.} x x = {MAX|MIN|IAND|IOR|IEOR} (x, expression) x = {MAX|MIN|IAND|IOR|IEOR} (expression, x) Здесь expression – скалярное выражение, не содержащее x.

!$OMP ORDERED блок операторов программы !$OMP END ORDERED Обеспечивает сохранение того порядка выполнения итераций цикла, который соответствует последовательному выполнению программы.

2.4.2 Runtime-процедуры и переменные окружения В целях создания переносимой среды запуска параллельных программ в OpenMP определен ряд переменных окружения, контролирующих поведение приложения. В OpenMP предусмотрен также набор библиотечных процедур, которые позволяют:

во время исполнения контролировать и запрашивать различные параметры, определяющие поведение приложения (такие как число нитей и процессоров, возможность вложенного параллелизма); процедуры назначения параметров имеют приоритет над соответствующими переменными окружения;

использовать синхронизацию на базе замков (locks).

В UNIX переменные окружения задаются следующим образом:

export ПЕРЕМЕННАЯ = значение.

OMP_SCHEDULE

Эта переменная определяет способ распределения итераций в цикле между нитями.

OMP_NUM_THREADS Определяет число нитей для исполнения параллельных областей приложения.

OMP_DYNAMIC Разрешает (.TRUE.) или запрещает (.FALSE.) динамическое распределение итераций между нитями.

OMP_NESTED Разрешает или запрещает вложенный параллелизм.

2.4.4 Процедуры для контроля/запроса параметров среды

SUBROUTINE OMP_SET_NUM_THREADS (THREADS)

INTEGER THREADS

Позволяет назначить максимальное число нитей для использования в следующей параллельной области (если это число разрешено менять динамически). Вызывается из последовательной области программы.

INTEGER FUNCTION OMP_GET_MAX_THREADS ()

Возвращает максимальное число нитей, которое можно использовать в параллельной части программы.

INTEGER FUNCTION OMP_GET_NUM_THREADS ()

Возвращает фактическое число нитей в параллельной области программы.

INTEGER FUNCTION OMP_GET_THREAD_NUM () Возвращает идентификатор нити, из которой вызывается данная функция.

INTEGER FUNCTION OMP_GET_NUM_PROCS () Возвращает число процессоров, доступных приложению.

LOGICAL FUNCTION OMP_IN_PARALLEL()

Возвращает.TRUE., если функция вызвана из параллельной области программы.

SUBROUTINE OMP_SET_DYNAMIC(FLAG)

LOGICAL FLAG

LOGICAL FUNCTION OMP_GET_DYNAMIC()

Устанавливает/запрашивает состояние флага, разрешающего динамически изменять число нитей.

SUBROUTINE OMP_GET_NESTED(NESTED)

INTEGER NESTED

LOGICAL FUNCTION OMP_SET_NESTED()

Устанавливает/запрашивает состояние флага, разрешающего вложенный параллелизм.

2.4.5 Процедуры для синхронизации на базе замков В качестве замков используются общие переменные типа INTEGER (размер должен быть достаточным для хранения адреса).

Данные переменные должны использоваться только как параметры примитивов синхронизации.

SUBROUTINE OMP_INIT_LOCK(var) SUBROUTINE OMP_DESTROY_LOCK(var) Инициализирует замок, связанный с переменной var.

SUBROUTINE OMP_SET_LOCK(var) Заставляет вызвавшую нить дождаться освобождения замка, а затем захватывает его.

SUBROUTINE OMP_UNSET_LOCK(var) Освобождает замок, если он был захвачен вызвавшей нитью.

LOGICAL FUNCTION OMP_TEST_LOCK(var) Пробует захватить указанный замок. Если это невозможно, возвращает.FALSE.

Рассмотрим параллельную OpenMP-программу, выполняющую умножение матриц.

Program matrix !подключение модуля

USE IFPORT

!задание размерности матриц Parameter (n=1000) Double precision A(n,n), B(n,n), C(n,n), tm(3) ! определение типа переменных блока распараллеливания !$ integer omp_get_num_threads !$ double precision omp_get_wtime !$ double precision tm0, tm ! вывод на экран количества используемых нитей !$omp parallel !$ write(*,*) 'OpenMP-parallel with', omp_get_num_threads() !$omp end parallel ! подготовка датчика случайных чисел для задания значений ! матриц ! фиксируется время начала счета omp-блока !$ tm0=omp_get_wtime() write(*,*) 'Calculation... ' ! начало области распараллеливания !$omp parallel ! распараллеливание цикла !$omp do private (i,j,k) C(i,j)=C(i,j) + A(i,k) * B(k,j) !$omp end do ! конец области распараллеливания !$omp end parallel ! фиксируется время завершения счета omp-блока !$ tm1=omp_get_wtime() !$ write(*,*) tm1-tm Использование библиотеки OpenMP Для вычисления определенного интеграла.

Данный пример идентичен первому примеру из раздела (3.6. Вычисление определенного интеграла). Различие заключается только в числе разбиений области интегрирования.

Program example3aOMP double precision sum, a, b, f, x parameter (a=0.d0, b=1.d0) ! подынтегральная функция f(x)=dlog(1/x) !$ integer omp_get_num_threads !$ double precision omp_get_wtime, tm ! фиксируется время начала счета !$ tm0=omp_get_wtime() ! отключение выбора количества нитей по умолчанию !$ call omp_set_dynamic(.false.) ! заданние числа используемых нитей !$ call omp_set_num_threads(2) ! вывод на экран количества используемых нитей !$omp parallel !$ write(*,*) 'openmp-parallel with', omp_get_num_threads() !$omp end parallel ! число разбиений области интегрирования ! начало области распараллеливания цикла переменная i приватная, переменная sum обновляется всеми нитями !$omp parallel do !$omp& default(shared) private(i) !$omp& schedule(static,10) !$omp& reduction(+:sum) x = a+(b-a)*(i-0.5d0)/n !$omp end parallel do ! конец области распараллеливания ! вычисление итогового результата и печать на экран write (6,*) 'result= ',sum,' error= ',1-sum ! фиксируется время окончания счета и выдается время работы ! программы !$ tm0=omp_get_wtime()-tm !$ write(6,*) 'time of calculation', tm 2.5 Результаты применения OpenMP на многоядерных Вычислительный узел кластера ТГУ СКИФ Cyberia построен с использованием двух процессоров Intel Xeon 5150 с двухъядерной архитектурой, что позволяет провести испытания по запуску OpenMP-приложений одновременно для четырех параллельных потоков (нитей). В качестве тестовой программы рассматривалась программа в приведенном выше примере. Команда для компиляции OpenMP-приложения имеет следующий вид:

ifort –openmp –O2 example.f –o example.exe Перед запуском необходимо указать число параллельных потоков выполнения OpenMP-программы, для чего требуется изменить OMP_NUM_THREADS. Например, так:

export OMP_NUM_THREADS= После этого запуск исполняемой программы осуществлялся по команде:

qsub./script.sh Скрипт script.sh имеет вид:

#!/bin/sh #PBS -l nodes=1:ppn= #PBS -v OMP_NUM_THREADS cd $PBS_O_WORKDIR ulimit -s unlimited./example.exe При перемножении матриц размерности 1000х1000 (рис. 2.1) было получено, что при распараллеливании матричных вычислений на два или четыре потока получается ускорение в два и четыре раза соответственно по сравнению с обычной последовательной программой.

Рис. 2.1 Процессорное время при умножении матриц 1000х Рис. 2.2 Процессорное время при умножении матриц 2000х Рис. 2.3 Процессорное время при умножении матриц 4000х Далее были произведены замеры времени вычислений для квадратных матриц размерности 2000х2000 и 4000х4000 (рис. 2.2 и 2.3).

В рассмотренных случаях на двух потоках так же получено ускорение приблизительно в два раза, однако на четырех потоках с увеличением размерности задачи ускорение уменьшается. Так, при перемножении матриц размерности 4000х4000 время вычислений при распараллеливании на два и четыре потока практически одинаково.

Возможно, данный эффект обусловлен используемой архитектурой вычислительных узлов кластера (размером кэш-памяти).

Время и ускорение программы вычисления определенного интеграла, написанной с использованием OpenMP представлены в табл. 2.2. Расчеты выполнены на кластере ТГУ Скиф-Cyberia. Достигнутое ускорение позволяет говорить о высокой эффективности использования OpenMP для подобного класса задач.

Таблица 2.2 Время и ускорение программы вычисления определенного Библиотека Intel Math Kernel Library (MKL) представляет собой набор функций линейной алгебры, быстрого преобразования Фурье и векторной математики для разработки научного и инженерного ПО. Она представлена в вариантах для Windows и Linux, есть версия для Linux-кластеров. Библиотеки MKL состоят из нескольких двоичных файлов, каждый из которых оптимизирован для определенного семейства процессоров Intel, включая Intel Itanium 2, Intel Xeon, Intel Pentium III и Intel Pentium 4.

На стадии выполнения MKL автоматически определяет модель процессора и запускает соответствующую версию вызываемой функции, что гарантирует максимальное использование возможностей процессора и максимально возможную производительность.

Все библиотеки MKL поддерживают работу в многопоточном режиме, а ключевые функции LAPACK, BLAS (третьего уровня) и дискретных преобразований Фурье (DFT) допускают распараллеливание по стандарту OpenMP.

Так как библиотека MKL максимально оптимизирована под процессоры Intel и учитывает их архитектуру, использование компонентов библиотеки более предпочтительно, чем ручное написание кода. Для демонстрации вышесказанного сравним пользовательскую программу блочного умножения матриц с процедурой DGEMM из пакета BLAS3. Данная библиотека позволяет производить вычисления следующего вида:

где А, В, С – соответствующие по размерности матрицы с базовым типом двойной точности, а и – некоторые коэффициенты.

Зададим значения коэффициентам и соответственно 1 и 0 и получим простое перемножение матрицы А на В. Результат времени умножения матриц с использованием DGEMM будем сопоставлять с временем, полученным при оптимизированном перемножении блочных матриц на основе пользовательского кода.

Рис. 2.4 Процессорное время при умножении матриц 1000х Рис. 2.5 Процессорное время при умножении матриц 4000х На рис. 2.4–2.5 показано сравнение процессорного времени перемножения матриц, полученного с использованием обычного алгоритма блочных скалярных произведений, и специализированных процедур MKL. На рис. 2.4 приведены результаты при перемножении матриц размерностью 1000х1000 элементов. Видно, что применение MKL позволяет получить результат в 4-5 раз быстрее. Подобные сравнительные расчеты проводились и с матрицами 4000х4000 элементов (рис. 2.5). Из рисунков видно, что обнаруженный эффект повышения быстродействия вычислений сохраняется. Таким образом, использование специализированных библиотек существенно ускоряет процесс вычислений.

Компилятор Intel Compiler 9.1 имеет большое количество опций, которые позволяют максимально оптимизировать задачу под архитектуру компьютера.

Применение технологии OpenMP для матричных вычислений на двух потоках дало ускорение почти в два раза, а на четырех потоках – в четыре раза, однако в связи с архитектурными особенностями процессоров Xeon 5150 четырехкратное ускорение можно получить лишь при перемножении матриц относительно небольших размерностей (1000х1000).

Нужно стараться заменять разработанный пользователем код процедурами из специализированных библиотек. Благодаря этому можно получить ускорение в 4-5 раз за счет максимального использования архитектуры процессора.

Все вычисления производились с помощью компилятора Intel Compiler 9.1 на процессорах Intel различной производительности.

3 ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ С

ИСПОЛЬЗОВАНИЕМ СТАНДАРТА MPI

Наиболее общим подходом при создании параллельных программ в настоящее время является применение библиотеки передачи сообщений, где процессы используют обращения к библиотеке MPI (Message Passing Interface), чтобы обмениваться сообщениями (информацией) с другими процессами. Механизм передачи сообщений позволяет процессам, запущенным на многопроцессорной вычислительной системе, совместно решать большие задачи.

MPI – это стандарт передачи сообщений, который разрабатывался группой 60 человек из 40 организаций США и Европы. Первый вариант стандарта MPI 1.0 был опубликован в 1994 г. Большинство современных реализаций соответствуют стандарту MPI 1. (опубликован в 1995 г.). В 1997 г. был опубликован стандарт MPI 2.0, однако он не получил широкого распространения. MPI пригоден для различных платформ, начиная с массивно-параллельных систем (например, IBM SP2, Cray T3D, Intel Paragon) и заканчивая сетями рабочих станций (Sun4, Dec Alpha). Основной целью, преследуемой при создании MPI, было разработать практический, переносимый, эффективный и удобный стандарт для передачи сообщений между процессами.

Стандарт MPI включает 129 функций для:

- инициализации и закрытия параллельной части приложения;

- приема и передачи сообщений между отдельными процессами;

- осуществления коллективного взаимодействия процессов;

- работы с группами процессов и коммуникаторами;

- определения производных (составных) типов данных;

- создания виртуальных топологий для обеспечения более простого взаимодействия процессов.

Однако начинающему пользователю при написании своих параллельных программ можно обойтись их малым подмножеством (например, минимально — шестью).

К базовым понятиям MPI относятся процесс, группа процессов и коммуникатор. Процесс – это исполнение программы одним процессорным элементом, на котором загружен MPI. Процессы объединяются в группы с единой областью связи, внутри которой каждый процесс имеет свой уникальный номер в диапазоне от 0 до N–1, где N – количество процессов в группе. Для взаимодействия процессов в группе используется коммуникатор, который реализует передачу сообщений (обмен данными) между процессами и их синхронизацию. Коммуникатор осуществляет обмены только внутри области связи группы, с которой он ассоциируется.

Обычно MPI-программа для многопроцессорных вычислительных систем пишется на языке С, C++ или FORTRAN с использованием коммуникационных функций библиотеки MPI. Запуск на выполнение MPI-программы представляет собой одновременный запуск совокупности параллельных процессов, количество которых определяет пользователь при запуске. Параллельная часть программы начинается с инициализации MPI. При этом все активированные процессы объединяются в группу с коммуникатором, который имеет имя MPI_COMM_WORLD. Далее средствами MPI в программу передается число активированных процессов, каждому из них присваивается свой номер. Процессы, как правило, отличаются тем, что каждый отвечает за исполнение своей ветви параллельной MPIпрограммы.

3.2 Начала MPI и программа `Hello World' Полный стандарт MPI состоит из 129 функций. Однако начинающему пользователю MPI достаточно научиться применять в практической работе лишь несколько из них (6 или 24 – в зависимости от квалификации). Без чего действительно нельзя обойтись, так это без функций, передающих и принимающих сообщения. Выполнение следующих правил позволит легко сконструировать большинство MPI-программ.

- Все MPI-программы должны включать заголовочный файл (в С-программе mpi.h; в FORTRAN-программе mpif.h).

- Все MPI-программы должны вызывать подпрограмму MPI_INIT как первую вызываемую подпрограмму MPI для того, чтобы инициализировать MPI.

- Большинство MPI-программ вызывает подпрограмму MPI_COMM_SIZE, чтобы определить размер активированной виртуальной машины, т.е. количество запущенных процессов - Большинство MPI-программ вызывает MPI_COMM_RANK, чтобы определить номер каждого активированного процесса, который находится в диапазоне от 0 до size-1.

В каждой MPI-программе активируются процессы, характер выполнения которых может меняться по условию.

Взаимодействие процессов производится путем передачи сообщений между отдельными процессами с помощью вызова функций MPI_SEND и MPI_RECV.

Все MPI-программы должны обращаться к MPI_FINALIZE как к последнему вызову функций из MPI-библиотеки.

Таким образом, можно написать достаточное количество MPI-программ, пользуясь только следующими шестью функциями:

MPI_INIT, MPI_COMM_SIZE, MPI_COMM_RANK, MPI_SEND, MPI_RECV, MPI_FINALIZE.

Однако для более удобного программирования следует изучить и несколько коллективных коммуникационных функций. Эти функции позволяют взаимодействовать нескольким процессам одновременно.

Ниже представлены Fortran и С-версии параллельной MPIпрограммы ‘Hello World’. Ее можно взять в качестве начального примера при освоении правил написания MPI-программ. Эти простые программы являются SPMD (Single Program Multiple Data) программами, где все процессы представляют собой запуск одного и того же кода, но могут выполнять различные действия в зависимости от значений данных (например, номера процесса). В представленной ниже программе главный процесс (rank = 0) посылает сообщение из символов ‘Hello World’ остальным процессам (rank > 0).

Они принимают это сообщение и печатают его на экране.

Если эта программа будет запущена командой mpirun – np 3./hello, то на экране может быть напечатано следующее:

process 2 : Hello, world!

process 0 : Hello, world!

process 1 : Hello, world!

C-версия программы ‘Hello World’:

#include #include main(int argc, char **argv) int rank, size, tag, rc, i;

MPI_Status status;

char message[20];

rc = MPI_Init(&argc, &argv);

rc = MPI_Comm_size(MPI_COMM_WORLD, &size);

rc = MPI_Comm_rank(MPI_COMM_WORLD, &rank);

tag = 8;

if (rank == 0) { strcpy(message, "Hello, world!");





Похожие работы:

«ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ Государственное образовательное учреждение высшего и профессионального образования Российской Федерации Ивановская государственная текстильная академия (ИГТА) В.Д. Шеманаев, А.К. Ефимова, Ю.В. Павлов, А.А. Минофьев ПРОЕКТИРОВАНИЕ ХЛОПКОПРЯДИЛЬНЫХ ПРОИЗВОДСТВ (организационно-технологический раздел) Учебное пособие Допущено учебно-методическом объединением по образованию в области технологии и проектирования текстильных изделий в качестве учебного пособия для...»

«В.А. Лопота1, Е.И. Юревич2, А.С. Кондратьев2, В.В. Кириченко2 КОНЦЕПЦИЯ МЕХАТРОННЫЕ ТЕХНОЛОГИИ И МИКРОРОБОТОСТРОЕНИЕ 1 ОАО РКК Энергия им. С.П. Королева, г. Королев 2 ГНЦ РФ ЦНИИ робототехники и технической кибернетики, Санкт-Петербург [email protected] Концепция разработана под научно-методическим руководством член-корреспондента РАН Лопоты В.А., при формировании использованы научно-технические материалы, опубликованные в открытой печати ведущих научных школ возглавляемых: академиком РАН Макаровым...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ МУРМАНСКОЙ ОБЛАСТИ МУРМАНСКИЙ ОБЛАСТНОЙ ИНСТИТУТ ПОВЫШЕНИЯ КВАЛИФИКАЦИИ РАБОТНИКОВ ОБРАЗОВАНИЯ И КУЛЬТУРЫ Основы религиозных культур и светской этики  МУРМАНСК 2011 МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ МУРМАНСКОЙ ОБЛАСТИ МУРМАНСКИЙ ОБЛАСТНОЙ ИНСТИТУТ ПОВЫШЕНИЯ КВАЛИФИКАЦИИ РАБОТНИКОВ ОБРАЗОВАНИЯ И КУЛЬТУРЫ Основы религиозных культур и светской этики Учебно-методические материалы МУРМАНСК 2011 Содержание ЧАСТЬ 1. Опыт апробации курса ОРКСЭ в общеобразовательных...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Ивановская государственная текстильная академия (ИГТА) Кафедра проектирования текстильных изделий МЕТОДИЧЕСКИЕ УКАЗАНИЯ к первой учебной практике для студентов 2 курса направления подготовки 261100 Технологии и проектирование текстильных изделий Иваново 2012 Настоящие методические указания предназначены для студентов второго курса дневной...»

«3. Сахаров П. В. Проектирование электрических аппаратов (общие вопросы проектирования): учебное пособие для студентов электротехнических вузов. М. : Энергия, 1971. 560 с. A. M. Markov PARTICULARITIES OF THE CALCULATION OF THE SYSTEM OF THE EXTINGUISHING THE ELECTRIC ARC IN ELECTROMAGNETIC CONTACTOR OF THE DIRECT CURRENT They are considered problems calculation systems of the extinguishing the arc, allowing stable to extinguish the arc of the direct current, appearing on contact of the electric...»

«Геоэкономика туризма Учебное пособие / А.И. Тарасенок. - М.: ИНФРА-М; Мн.: Нов. знание, 2011. - 272 с.: ил.; 60x90 1/16. Высшее образование). (переплет) ISBN 978-5-16-004960-1 Изложены теоретические основы геоэкономики туризма, факторы и эффекты развития пространственно-экономических процессов в туризме, геоэкономические системы туризма. Особое внимание уделено методическим вопросам исследований внутренней структуры, факторам конкурентоспособности и рынкам сбыта туристских дестинаций....»

«МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ ПО УСТАНОВЛЕНИЮ МЕДИЦИНСКИХ ПОКАЗАНИЙ И ПРОТИВОПОКАЗАНИЙ ПРИ НАЗНАЧЕНИИ СПЕЦИАЛИСТАМИ МЕДИКО-СОЦИАЛЬНОЙ ЭКСПЕРТИЗЫ ТЕХНИЧЕСКИХ СРЕДСТВ РЕАБИЛИТАЦИИ ИНВАЛИДА И МЕТОДИКА ИХ РАЦИОНАЛЬНОГО ПОДБОРА Методические рекомендации содержат современную и актуальную информацию о видах и типах технических средств реабилитации, входящих в Федеральный перечень реабилитационных мероприятий, технических средств реабилитации и услуг, предоставляемых инвалиду, утвержденный распоряжением...»

«НАЧАЛЬНОЕ И СРЕДНЕЕ ПРОФЕССИОНАЛЬНОЕ ОБРАЗОВАНИЕ А.И.ГОМОЛА, В. Е. КИРИЛЛОВ ЭКОНОМИКА ДЛЯ ПРОФЕССИЙ И СПЕЦИАЛЬНОСТЕЙ СОЦИАЛЬНО-ЭКОНОМИЧЕСКОГО ПРОФИЛЯ Методические рекомендации Рекомендовано Федеральным государственным автономным учреждением Федеральный институт развития образования в качестве учебного пособия для использования в учебном процессе образовательных учреждений, реализующих программы общего образования по профессиям начального профессионального образования и специальностям среднего...»

«АННОТАЦИЯ В методических рекомендациях рассмотрены организационные мероприятия и вопросы разработки и реализации проектов реконструкции жилых домов с надстройкой и обстройкой здания без отселения жителей с привлечением средств собственников и других источников внебюджетного финансирования в условиях города Москвы (далее – Проект). Приведены перечни необходимых работ, основополагающих законодательных и нормативных актов, участников проекта реконструкции, а также регламент их взаимодействия....»

«Федеральное агентство по образованию Санкт-Петербургский государственный архитектурно-строительный университет СТРОИТЕЛЬНАЯ МЕХАНИКА Методические указания и схемы заданий к расчетно-проектировочным работам для студентов очной и безотрывной форм обучения специальности 270102 – промышленное и гражданское строительство Санкт-Петербург 2007 Введение УДК 624.04 Рецензент канд. техн. наук, доц. Ю. В. Бондарев При изучении курса строительной механики студенты выполняют 6 расчетно-проектировочных...»

«СПИСОК книг по экологии, поступивших в библиотеку во 2-е полугодие 2012 года. 20.1я7 Габдуллин Р.Р., Ильин И.В., Иванов А.В. Г 121 Введение в палеоглобалистику : учебное пособие. ОЧ М.: Издательство Московского университета, 2011. - 352 с.Библиотека факультета глобальных процессов МГУ). Познание закономерностей совместной истории Земли, жизни, человечества и применения этих знаний для объяснения современных глобальных процессов и решения стоящих перед человеческой цивилизацией глобальных...»

«ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ САРАТОВСКАЯ ГОСУДАРСТВЕННАЯ ЮРИДИЧЕСКАЯ АКАДЕМИЯ УТВЕРЖДАЮ Первый проректор, проректор по учебной работе _С.Н. Туманов __2012 г. УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС ДИСЦИПЛИНЫ МИКРОЭКОНОМИКА по направлению подготовки 08010062 – Экономика (квалификация (степень) бакалавр) САРАТОВ – Учебно-методический комплекс дисциплины обсужден на заседании кафедры экономической теории 30 мая 2012 г. Протокол № Зав....»

«1 Владимирская областная универсальная научная библиотека им. М. Горького Научно-методический отдел В БИБЛИОТЕКАХ ОБЛАСТИ ИНФОРМАЦИОННЫЙ БЮЛЛЕТЕНЬ ВЫПУСК 2 – 2014 г. Владимир 2014 2 УДК 021.6(470.314) ББК 78.3 В-11 Составитель М.В. Трубина В 11 В библиотеках области: информационный бюллетень. Вып. 2 / Владим. обл. универс. науч. б-ка им. М. Горького, научно-метод. отдел; сост. М.В. Трубина. – Владимир, 2014. – 70 с. УДК 021.6(470.314) ББК 78. © ГБУК Владимирская областная универсальная научная...»

«НОУ Православная Гимназия во имя Преподобного Сергия Радонежского РАБОЧАЯ ПРОГРАММА УЧЕБНОГО ПРЕДМЕТА ОСНОВЫ ПРАВОСЛАВНОЙ КУЛЬТУРЫ для 4 класса Новосибирск 2010 Одобрено Высокопреосвященнейшим Тихоном, Архиепископом Новосибирским и Бердским Принято педагогическим советом Православной Гимназии во имя Преподобного Сергия Радонежского 30.08.2010 Составитель программы и учебно методического комплекта по основам православной культуры — авторский коллектив Православной Гимназии во имя Преподобного...»

«ИВАНОВСКИЙ ФАРМАЦЕВТИЧЕСКИЙ КОЛЛЕДЖ ИССЛЕДОВАТЕЛЬСКИЕ РАБОТЫ СТУДЕНТОВ Методические рекомендации по подготовке и написанию Иваново 2012 ИВАНОВСКИЙ ФАРМАЦЕВТИЧЕСКИЙ КОЛЛЕДЖ Ж. В. Брусочкина, И. Б. Горелова, Г. Л. Ершова ИССЛЕДОВАТЕЛЬСКИЕ РАБОТЫ СТУДЕНТОВ Методические рекомендации по подготовке и написанию Иваново 2012 Методические рекомендации предназначены для студентов и преподавателей Ивановского фармацевтического колледжа. Одобрены Цикловой методической комиссией гуманитарных,...»

«Заказ на книгу можно отправить по: ФГБОУ ВПО СГГА - электронной почте [email protected] 630108, г. Новосибирск - факсу (383) 343-25-44 с пометкой ул. Плахотного, 10 Для РИО - телефон РИО (383) 343-12-55 ПРАЙС-ЛИСТ 2012-2002 гг. Автор Наименование ISBN Вид Год Цена издания, изда- 1экз., Гриф ния руб. (в т.ч. НДС) Хацевич Т.Н. 978-5-87693- Учебное Эндоскопы Михайлов И.О. 598-4 пособие Гриф УМО Журкин И.Г. 978-5-87693- Монография Цифровое моделирова- Хлебникова Т.А. 569- ние измерительных...»

«Учебный центр Каталог курсов Авторизованные курсы Майкрософт УЧЕБНЫЙ ЦЕНТР / КАТАЛОГ КУРСОВ Microsoft Windows Server 2003 Курс 2209: Updating Systems Administrator Skills from Microsoft Windows 2000 to Windows Server 2003 Курс позволяет слушателям приобрести необходимые знания и навыки для управления и поддержки сетевой среды Windows Server 2003 и предназначен для системных администраторов и инженеров Windows 2000, имеющих опыт управления и поддержки Windows 2000 Active Directory, а также...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Сыктывкарский лесной институт (филиал) федерального государственного бюджетного образовательного учреждения высшего профессионального образования Санкт-Петербургский государственный лесотехнический университет имени С. М. Кирова Федеральное государственное бюджетное учреждение науки Институт биологии Коми научного центра Уральского отделения РАН Кафедра общей и прикладной экологии Е. Н. Патова, Е. Г. Кузнецова ЭКОЛОГИЧЕСКИЙ МОНИТОРИНГ...»

«Уважаемые выпускники! В перечисленных ниже изданиях содержатся методические рекомендации, которые помогут должным образом подготовить, оформить и успешно защитить выпускную квалификационную работу. Рыжков, И. Б. Основы научных исследований и изобретательства [Электронный ресурс] : [учебное пособие для студентов вузов, обучающихся по направлению подготовки (специальностям) 280400 — Природообустройство, 280300 — Водные ресурсы и водопользование] / И. Б. Рыжков.— СанктПетербург [и др.] : Лань,...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Ивановская государственная текстильная академия (ИГТА) Кафедра технологии швейных изделий МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ ОСНОВНЫХ РАЗДЕЛОВ КУРСОВЫХ ПРОЕКТОВ (РАБОТ) И ВЫПУСКНЫХ КВАЛИФИКАЦИОННЫХ РАБОТ Иваново 2012 Методические указания определяют содержание и требования к оформлению отдельных разделов курсовых проектов (работ) и...»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.