Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

8970

.pdf
Скачиваний:
0
Добавлен:
25.11.2023
Размер:
2.08 Mб
Скачать

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«Нижегородский государственный архитектурно-строительный университет»

Д. И. Кислицын

ОСНОВЫ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ С ИСПОЛЬЗОВАНИЕМ ТЕХНОЛОГИИ OpenMP

Учебно-методическое пособие

по выполнению лабораторных работ для обучающихся по дисциплине «Основы параллельных вычислений для систем с общей памятью»

по направлению подготовки 09.03.02 Информационные системы и технологии, без профиля

Нижний Новгород

2016

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

«Нижегородский государственный архитектурно-строительный университет»

Д. И. Кислицын

ОСНОВЫ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ С ИСПОЛЬЗОВАНИЕМ ТЕХНОЛОГИИ OpenMP

Учебно-методическое пособие

по выполнению лабораторных работ для обучающихся по дисциплине «Основы параллельных вычислений для систем с общей памятью»

по направлению подготовки 09.03.02 Информационные системы и технологии, без профиля

Нижний Новгород ННГАСУ

2016

УДК

Кислицын Д. И./ Основы параллельного программирования с использованием технологии OpenMP [Электронный ресурс]: учеб. – метод. пос./ Д. И. Кислицын; Нижегор. гос. архитектур. – строит. ун-т – Н. Новгород: ННГАСУ, 2016. - ___ с. 1 электрон. опт. диск (CD-R)

В методических указаниях представлены задания и пояснения к выполнению лабораторных работ в среде разработки Microsoft Visual С++ с поддержкой технологии OpenMP в рамках курса «Основы параллельных вычислений для систем с общей памятью».

Д. И. КислицынННГАСУ. 2016.

Введение

Одним из наиболее популярных средств программирования для компьютеров с общей памятью, базирующихся на традиционных языках программирования, в настоящее время является технология OpenMP. За основу берётся последовательная программа, а для создания её параллельной версии пользователю предоставляется набор директив, функций и переменных окружения. Предполагается, что создаваемая параллельная программа будет переносимой между различными компьютерами с разделяемой памятью, поддерживающими OpenMP API. Технология OpenMP нацелена на то, чтобы пользователь имел один вариант программы для параллельного и последовательного выполнения. Однако возможно создавать программы, которые работают корректно только в параллельном режиме или дают в последовательном режиме другой результат. Например, из-за накопления ошибок округления результат вычислений с использованием различного количества нитей (потоков) может в некоторых случаях различаться.

Разработкой стандарта занимается некоммерческая организация OpenMP ARB (Architecture Review Board), в которую вошли представители крупнейших компаний – разработчиков SMP-архитектур и программного обеспечения. OpenMP поддерживает работу с языками Фортран и Си/Cи++.

Интерфейс OpenMP задуман как стандарт для программирования на масштабируемых SMP-системах (SSMP, ccNUMA и других) в модели с общей памятью (shared memory model). OpenMP реализует параллельные вычисления с помощью многопоточности, в которой «главный» (master) поток создает набор «подчиненных» (slave) потоков и задача распределяется между ними. Предполагается, что потоки выполняются параллельно на машине с несколькими процессорами, причём количество процессоров не обязательно должно быть больше или равно количеству потоков. В простейшем случае процесс состоит из одной нити. Нити иногда называют также легковесными процессами, LWP (lightweight processes).

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

Дополнительную информацию об интерфейсе OpenMP можно найти в работах Воеводина В.В. [1] и Антонова А.С. [2], а также на тематической странице Информационно-аналитического центра по параллельным вычислениям в сети Интернет Parallel.ru (http://parallel.ru/tech/tech_dev/openmp.html).

Требования к выполнению работ

При подготовке к лабораторной работе студент должен изучить соответствующие разделы лекционного курса. Сводный перечень некоторых OpenMP-функций, OpenMP-директив, их параметров, а также их совместимость приведены в ПРИЛОЖЕНИЯХ 1 – 5. В ходе выполнения лабораторной работы студент должен подготовить письменный отчет, включающий:

номер, тему и цель лабораторной работы;

перечень заданий работы;

входные и выходные данные для каждого задания;

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

тексты последовательной и параллельной программ;

таблицу и графики с результатами вычислений;

общие выводы по результатам лабораторной работы.

ЛАБОРАТОРНАЯ РАБОТА № 1

Тема: Создание простейшего консольного многопоточного Windowsприложения в среде Visual С++ для систем с общей памятью.

Цель работы: Знакомство со средой Visual С++. Создание консольного многопоточного Windows-приложения в среде Visual С++ на основе технологии

OpenMP.

Лабораторная работа состоит из пяти последовательно выполняемых заданий.

1.Создать пустой проект консольного Windows – приложения в среде Visual

С++.

2.Написать последовательную программу, выводящую на экран сообщение: “Hello World!”.

3.Написать параллельную программу, в которой каждый поток выводит на экран сообщение: “Hello World!”.

4.Модифицировать программу из Задания 3 так, чтобы потоки выводили на экран сообщение: “Hello World!” и свой порядковый номер, а нулевой поток дополнительно выводил бы общее количество потоков.

5.Модифицировать программу из Задания 4 так, чтобы порядковый номер выводился в порядке возрастания.

Порядок выполнения работы

1.Создание нового проекта.

1.1.Запустить среду разработки MS Visual Studio.

1.2.Создать новый проект, используя следующие пункты меню: Файл – Создать – Проект (File - New - Project) см. рис.1.

Рис. 1. Создание нового проекта

1.3.Указать тип нового проекта: Visual С++ (рис. 2.).

 

Рис. 2. Выбор типа проекта

1.4. Указать

шаблон, на основе

которого создаётся проект: Консольное приложение Win32 (Win32Console Application).

1.5.Ввести имя (Name) создаваемого проекта: WindowsApplication_N , где N – идентификатор пользователя (например, фамилия). При необходимости кнопкой Browse можно изменить расположение (Location) файлов проекта на диске. Рекомендуется сохранять в папку с номером Вашей группы.

1.6.После нажатия кнопки ОК появится окно мастера настройки проекта (рис. 3) – нажмите кнопку Далее (Next).

Рис. 3. Мастер настройки проекта

1.7. В окне настройки параметров приложения укажите Консольное приложение (Console application) и Пустой проект (Empty project) и нажмите кнопку Готово (Finish) см. рис. 4.

Рис. 4. Настройка проекта

1.8. В появившемся окне Обозревателя решений (Solution Explorer) на рис. 5 добавьте новый cpp-файл в Файлы исходного кода (Source Files) через контекстное меню Добавить – Создать элемент (Add New Item) см. рис. 6. В

открывшемся окне выберите C++ File, укажите имя создаваемого файла и нажмите кнопку Добавить (Add) см. рис. 7.

Рис. 5. Дерево проекта

Рис. 6. Добавление нового файла

Рис. 7. Указание типа и имени файла

2. Написание последовательной программы, выводящей на экран сообщение: “Hello World!”.

2.1. Для вывода сообщений на экран воспользуемся функцией printf(). Для этого командой include подключим библиотеку stdio.h:

#include <stdio.h>

2.2. Вывод сообщения опишем в функции main():

int main () { printf("Hello World!\n");

}

2.3. Сборка программы выполняется командой Построить решение (Build Solution) из меню Построение (Build) см. рис. 8.

Рис. 8. Сборка программы

В случае успешной сборки в окне Output будет выведена соответствующая информация:

=====Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ======

В противном случае следует проверить правильность написанного кода.

2.4. Запуск программы выполняется командой Начать отладку (Start Debugging) из меню Отладка (Debug) см. рис. 9.

Рис. 9. Запуск программы

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]