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-03 02 01 Физическая культура, 1-89 01 01 Туризм и гостеприимство Новополоцк 2012 УДК 796.01 (075.8) ББК 75.1я73 Одобрены и рекомендованы к изданию методической комиссией спортивно-педагогического факультета Кафедра физической культуры, спорта и туризма...»

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

«Национальная библиотека Удмуртской Республики Библиотечное краеведение Удмуртии Выпуск 9 Книжная выставка: традиции и инновации Книгаосын адытон: дышемез но вылез Ижевск 2010 Составители Н. П. Лимонова, Г. Ю. Шантурова Редакторы И. Г. Абугова, М. В. Богомолова Верстка А. Г. Абугова Дизайн обложки, ответственный за выпуск Т. В. Панова 2 СОДЕРЖАНИЕ Предисловие Организация книжной выставки Нетрадиционные выставки Виртуальные выставки Список литературы ПРИЛОЖЕНИЯ Удмуртские писатели – лауреаты...»

«МОЗ Украины Днепропетровская государственная медицинская академия Кафедра медико-биологической физики и информатики Методическое пособие по биофизике для иностранных студентов специальности Фармация г. Днепропетровск 2011 год 2 Предлагаемое методическое пособие для иностранных студентов предназначено оказать помощь в изучении курса Биофизика. Конечная цель данного пособия: – знание общих биофизических закономерностей, что лежат в основе процессов в организме человека; – умение пояснить...»

«2 3 Лист – вкладка рабочей программы учебной дисциплины Русский язык и культура речи, ТО.Ф.ОГСЭ.03, федеральный название дисциплины, цикл, компонент Список основной учебной литературы *Указания о контроле на Соответствие ГОС (для Количество момент переутверждения Сведения об учебниках федеральных дисциплин) экземпляров в программы или соответствия библиотеке на требованиям ООП (для момент Дата Внесение, региональных и переутверждения продление или вузовских) - указание на программы исключение /...»

«С.В. Григорьева, С.В. Пономарев, А.В. Трофимов СТАНДАРТИЗАЦИЯ И СЕРТИФИКАЦИЯ ИЗДАТЕЛЬСТВО ТГТУ УДК 001.89(075) ББК Ж.я73 Г834 Р е ц е н з е н т ы: Доктор технических наук, профессор П.С. Беляев Кандидат технических наук, профессор Т.Я. Лазарева Григорьева, С.В. Г834 Стандартизация и сертификация : учеб. пособие / С.В. Григорьева, С.В. Пономарев, А.В. Трофимов. – 4-е изд., доп. – Тамбов : Изд-во Тамб. гос. техн. ун-та, 2008. – 116 с. – 85 экз. – ISBN 978-5-8265-0742-1. Изложены общие требования...»

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ЭКОНОМИКИ, СТАТИСТИКИ И ИНФОРМАТИКИ             Учебное пособие по курсу Студент в среде E-learning.                 Автор: Кузьмина Т.В. Тихомирова Е.В. Гольдфарб Л.Ю. Дворников Н.Ю. 2008г. Содержание Тема 1. Понятие e-Learning Тема 2. E-Learning в МЭСИ Тема 3. СДО Виртуальный Кампус     Тема 1. Понятие e­Learning  1.1.1 Плюсы Elearning.  Начнём с приятного - с преимуществ смешанного обучения, а точнее информационных технологий в обучении. На счёт этих...»

«ФГБ ОУ ВПО МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ Кафедра Экономика и управление на транспорте М.Г. ДАНИЛИНА В.А. ПОДСОРИН ЭКОНОМИКА ПРЕДПРИЯТИЯ ПЕРВАЯ ЧАСТЬ УЧЕБНОЕ ПОСОБИЕ Москва – 2011 ФГБ ОУ ВПО МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ПУТЕЙ СООБЩЕНИЯ Кафедра Экономика и управление на транспорте М.Г. ДАНИЛИНА В.А. ПОДСОРИН ЭКОНОМИКА ПРЕДПРИЯТИЯ УЧЕБНОЕ ПОСОБИЕ ПЕРВАЯ ЧАСТЬ Москва – ФГБ ОУ ВПО МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ...»

«Учреждение образования БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ Кафедра менеджмента и экономики природопользования ОСНОВЫ ЭКОЛОГИИ И ЭКОНОМИКА ПРИРОДОПОЛЬЗОВАНИЯ Методические указания к практическим занятиям для студентов специальностей 1-26 02 02 Менеджмент, 1-25 01 08 Бухгалтерский учет, анализ и аудит Минск 2011 УДК 574+502.171 ББК 28.081я73 О-75 Рассмотрены и рекомендованы к изданию редакционно-издательским советом университета Составители: доктор экономических наук,...»

«Бюджетное образовательное учреждение Чувашской Республики дополнительного образования Центр молодежных инициатив Министерства образования и молодежной политики Чувашской Республики Технология трудоустройства, или наука о том, как выгоднее продать себя на рынке труда Методические рекомендации Чебоксары Новое Время 2013 УДК 331 ББК 65.240 К 17 Гаврилова О.В., Крюковская А.П. Технология трудоустройства, или наука о том, как выгоднее продать себя на рынке труда. Методические рекомендации....»

«Министерство образования Республики Беларусь УО ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ МЕТОДИЧЕСКИЕ УКАЗАНИЯ к выполнению курсовой работы по дисциплине Бухгалтерский учет и отчетность в промышленности для специальности 1-25 01 08 Бухгалтерский учет, анализ и аудит г. Новополоцк, ПГУ, 2013 УДК 657(075.8) ББК 65.052 (4 БЕИ) я 73 Одобрено и рекомендовано к изданию Методической комиссией финансово-экономического факультета в качестве методических указаний (протокол № ) кафедра бухгалтерского учета и...»

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

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

«60 И 90 История политических учений: учебник для бакалавров / ред.: А. К. Голиков, Б. А. Исаев. - СПб.: Питер, 2012. - 432 с. - (Учебник для вузов. Стандарт третьего поколения). - ISBN 978-5-459-01081-7 ББК 60 Аннотация: В учебнике прослеживается развитие всемирной истории политической мысли от истоков до первой четверти XX в. Главное внимание уделено наиболее значимым политическим учениям, теориям и концепциям, оказавшим существенное влияние на развитие мировой политической мысли. Данное...»

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

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

«ОГЛАВЛЕНИЕ Предисловие Раздел 1. Гидрология. Общие сведения об организации гидрометрических измерений – основы изысканий для составления проектов охрны земель от подтопления 1.1 Уровни воды 1.1.1 Приборы и устройства для измерения уровней воды 1.1.2 Задание к работе Обработка материалов наблюдений за уровнем воды 16 1.1.3 Измерение и вычисление уровня воды 1.1.4 Составление ведомости повторяемости (частоты) и продолжительности (обеспеченности) 1.1.5 Построение графика кривых повторяемости и...»

«ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ ЖИДКИЕ ЛЕКАРСТВЕННЫЕ ФОРМЫ Учебное пособие для самостоятельной работы студентов обучающихся по специальности 060108 Фармация 2 УДК 615.015 Рецензент: доктор фармацевтических наук, профессор Панкрушева Т.А., заведующая кафедрой фармацевтической технологии Курского государственного медицинского университета В.Ф. Дзюба., А.И. Сливкин., С.Н. Зубова. Стерильные и асептически приготовляемые лекарственные формы: Учебное пособие / под ред. докт. фарм. наук проф. Н.Б....»

«2 1. Цели и задачи дисциплины Учебная дисциплина Основы бухгалтерского учета и финансы в АПК является курсом, ознакомляющим студентов неэкономических специальностей со знаниями в экономической сфере, придающим практическую направленность и системность в области бухгалтерского учета и финансов предприятий АПК. Цель курса Основы бухгалтерского учета и финансы в АПК – формирование у будущих специалистов фундаментальных знаний в области теории бухгалтерского учета и финансов предприятий аграрной...»

«П.Д. Павленок М.Я. РуДнева ТеХнолоГИИ СоЦИалЬноЙ РаБоТЫ С РаЗлИЧнЫМИ ГРуППаМИ наСеленИЯ учебное пособие Рекомендовано Учебно-методическим объединением по образованию в области социальной работы в качестве учебного пособия для студентов высших учебных заведений, обучающихся по направлению и специальности Социальная работа Москва инФРА-М 2009 УДК 364(075.8) ББК 65.272я73 П12 Авторы: Павленок П.Д.— введение, гл. 1, 16, 18; Руднева М.Я.— гл. 2–15, 17. Рецензенты: д-р филос. наук, профессор...»








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

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