See discussions, stats, and author profiles for this publication at:
https://www.researchgate.net/publication/331975308
Параллельное
программирование : лабораторные работы
Book
· October 2014
CITATIONS
0
READS
146
3 authors:
Some of the authors of this publication are also working on these related projects:
Maxwellian optics geometrization
View project
One-step processes stochastization
View project
Dmitry Sergeevich Kulyabov
Peoples' Friendship University of Russia (RUDN University)
149
PUBLICATIONS
138
CITATIONS
SEE PROFILE
Migran Nelsonovich Gevorkyan
Peoples' Friendship University of Russia (RUDN University)
28
PUBLICATIONS
31
CITATIONS
SEE PROFILE
Anna V. Korolkova
Peoples' Friendship University of Russia (RUDN University)
88
PUBLICATIONS
105
CITATIONS
SEE PROFILE
All content following this page was uploaded by
Dmitry Sergeevich Kulyabov
on 24 March 2019.
The user has requested enhancement of the downloaded file.
РОССИЙСКИЙ УНИВЕРСИТЕТ ДРУЖБЫ НАРОДОВ
Факультет физико-математических и естественных наук
М. Н. Геворкян, А. В. Королькова, Д. С. Кулябов
Параллельное программирование
Лабораторные работы
Учебное пособие
Москва
Российский университет дружбы народов
2014
УДК 004.272 (076.5)
ББК 018.2*32.973
Г 27
Утверждено
РИС Учёного совета
Российского университета
дружбы народов
Рецензент —
старший научный сотрудник ЛИТ ОИЯИ
кандидат физико-математических наук О. И. Стрельцова;
начальник сектора телекоммуникаций УИТО РУДН
кандидат физико-математических наук, доцент К. П. Ловецкий
Г 27
Геворкян М. Н.
Параллельное программирование : лабораторные работы : учебное
пособие / М. Н. Геворкян, А. В. Королькова, Д. С. Кулябов. —
Москва : РУДН, 2014. — 87 с. : ил.
ISBN 978-5-209-06152-6
Пособие представляет собой лабораторный практикум по дисциплине
«Параллельное программирование» и предназначено для студентов направ-
лений «Математика и компьютерные науки», «Фундаментальная информа-
тика и информационные технологии», «Прикладная математика и инфор-
матика».
УДК 004.272 (076.5)
ББК 018.2*32.973
ISBN 978-5-209-06152-6
© Геворкян М. Н., Королькова А. В.,
Кулябов Д. С., 2014
© Российский университет дружбы народов,
Издательство, 2014
3
Оглавление
Глава 1.
Fortran.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
1.1.
История языка Fortran
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5
1.2.
Элементы и объекты программы.
.
.
.
.
.
.
.
.
.
.
.
6
1.3.
Операторы управления .
.
.
.
.
.
.
.
.
.
.
.
.
.
. 10
1.4.
Процедуры: подпрограммы и функции
.
.
.
.
.
.
.
.
. 13
1.5.
Массивы и работа с ними .
.
.
.
.
.
.
.
.
.
.
.
.
. 17
1.6.
Ввод и вывод. Форматирование .
.
.
.
.
.
.
.
.
.
.
. 22
1.7.
Алгоритмы умножения матриц .
.
.
.
.
.
.
.
.
.
.
. 26
1.8.
Задания для лабораторной работы .
.
.
.
.
.
.
.
.
.
. 29
1.9.
Содержание отчёта
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 29
1.10.
Контрольные вопросы .
.
.
.
.
.
.
.
.
.
.
.
.
.
. 29
Глава 2.
Библиотека LAPACK .
.
.
.
.
.
.
.
.
.
.
.
. 31
2.1.
Назначение библиотеки LAPACK .
.
.
.
.
.
.
.
.
.
. 31
2.2.
Процедуры LAPACK .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 31
2.3.
Процедура
sgesv
решения СЛАУ .
.
.
.
.
.
.
.
.
.
. 32
2.4.
Процедура
sgetrf
вычисления LUP-разложения .
.
.
.
.
. 35
2.5.
Процедура
sgeev
вычисления собственных векторов и собствен-
ных значений
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 36
2.6.
Процедура
sgesvd
вычисления SVD-разложения .
.
.
.
.
. 38
2.7.
Задания для лабораторной работы .
.
.
.
.
.
.
.
.
.
. 40
2.8.
Содержание отчёта
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 41
2.9.
Контрольные вопросы .
.
.
.
.
.
.
.
.
.
.
.
.
.
. 41
Глава 3.
OpenMP .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 42
3.1.
Введение .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 42
3.2.
OpenMP и Fortran .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 42
3.3.
Параллельные и последовательные области .
.
.
.
.
.
.
. 44
3.4.
Параллельные циклы .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 47
3.5.
Параллельные секции
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 49
3.6.
Задания для лабораторной работы .
.
.
.
.
.
.
.
.
.
. 49
3.7.
Содержание отчёта
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 53
3.8.
Контрольные вопросы .
.
.
.
.
.
.
.
.
.
.
.
.
.
. 54
Глава 4.
MPI .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 55
4.1.
Введение .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 55
4.2.
MPI и Fortran
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 55
4.3.
Основные процедуры MPI .
.
.
.
.
.
.
.
.
.
.
.
.
. 56
4.4.
Приём и передача сообщений .
.
.
.
.
.
.
.
.
.
.
.
. 58
4.5.
Задания для лабораторной работы .
.
.
.
.
.
.
.
.
.
. 63
4.6.
Содержание отчёта
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 64
4.7.
Контрольные вопросы .
.
.
.
.
.
.
.
.
.
.
.
.
.
. 64
Литература .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 65
4
Оглавление
Учебно-методический комплекс дисциплины
«Параллельное программирование»
67
Программа дисциплины .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 69
Цели и задачи дисциплины .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 69
Место дисциплины в структуре ООП .
.
.
.
.
.
.
.
.
.
.
. 69
Требования к результатам освоения дисциплины .
.
.
.
.
.
.
. 69
Объем дисциплины и виды учебной работы .
.
.
.
.
.
.
.
.
. 72
Содержание дисциплины .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 73
Лабораторный практикум .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 75
Практические занятия (семинары) .
.
.
.
.
.
.
.
.
.
.
.
. 75
Примерная тематика курсовых проектов (работ) .
.
.
.
.
.
.
. 75
Учебно-методическое и информационное обеспечение дисциплины . 76
Материально-техническое обеспечение дисциплины.
.
.
.
.
.
. 76
Методические рекомендации по организации изучения дисциплины . 77
Фонды оценочных средств .
.
.
.
.
.
.
.
.
.
.
.
.
.
. 78
Примерные тестовые задания .
.
.
.
.
.
.
.
.
.
.
.
.
.
. 78
Перечень тем для контроля знаний .
.
.
.
.
.
.
.
.
.
.
.
. 82
Календарный план .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 83
Балльно-рейтинговая система .
.
.
.
.
.
.
.
.
.
.
.
.
. 85
Сведения об авторах
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 87
5
1. Fortran
1.1.
История языка Fortran
В 1953 г. группа учёных-программистов из IBM во главе с Джоном
Бэкусом начала разработку альтернативы языку ассемблер для мейнфрей-
ма IBM 704. Основной задачей нового языка программирования стало упро-
щение процесса написания программ.
Первый компилятор FORTRAN появился в апреле 1975 г. FORTRAN
стал первым языком высокого уровня, а его компилятор — первым оп-
тимизирующим компилятором. По производительности программы, напи-
санные на FORTRAN, лишь немногим уступали программам, написанным
вручную на ассемблере.
Язык быстро завоевал популярность и стал использоваться для написа-
ния вычислительных программ в самых различных областях науки и инже-
нерного дела. Собственно вычислительные задачи и были основным назна-
чением нового языка, название которого произошло от FORMula TRANsla-
tor.
Успех Фортрана повлёк его активное развитие и с 1958 по 1961 г. —
вышло три редакции языка Fortran II, III, IV. В 1966 г. Американская Ас-
социация стандартов (ASA, а ныне ANSI) выпустила стандарт Fortran 66,
основанный на редакции Fortran IV со множеством нововведений. Рабо-
та над стандартом окончательно завершилась лишь в 1972 г. Следующим
стандартом стал Fortran 77 (работа шла с 1977 г. по 1980 г.).
Современная версия языка берёт своё начало с начала 90-х гг. XX ве-
ка, когда был выпущен стандарт Fortran 90. Начиная с этой версии, Фор-
тран приобрёл все атрибуты современного процедурного языка высокого
уровня. Вышедшие позже Fortran 95 (1997 г.), Fortran 2003 и Fortran 2008
(2008–2010 гг.) добавили некоторые новшества, но серьёзно синтаксис не
поменяли.
Хотя Фортран и является самым старым языком высокого уровня, он
активно развивается до сих пор (о чем свидетельствует появление новых
стандартов) и используется на практике в разнообразных научных и инже-
нерных задачах.
Важно отметить, что за время существования Фортрана на нём было
написано множество хорошо отлаженных и оптимизированных библиотек
(например, LAPACK, IMSL). Кроме этого, Фортран сравнительно прост и
лаконичен. Он обладает удобными средствами работы с массивами (в том
числе и динамическими), встроенным типом комплексных чисел и удоб-
ными средствами ввода-вывода.
Наиболее распространённым бесплатным компилятором Фортрана яв-
ляется
gfortran
, который поддерживает практически все конструкции стан-
дарта Fortaran 95 и многие конструкции стандартов Fortaran 2003 и 2008.
6
Глава 1. Fortran
1.2.
Элементы и объекты программы
Сразу же рассмотрим простейший пример программы
Hello World!
на Фортране:
program HelloWorld
print *, "Здравствуй Мир!"
end program HelloWorld
Для компиляции программы следует сохранить исходный код в файле
с расширением
f90
. При этом рекомендуется именовать файл с исходным
кодом так же, как названа программа (в нашем случае файл будет назы-
ваться
HelloWorld.f90
). Сохранять файл следует в кодировке utf, в этом
случае не будет проблем с сообщениями, напечатанными кириллическими
символами. Для компиляции программы следует воспользоваться одной из
следующей команд:
gfortran HelloWorld.f90 -o HelloWorld
gfortran HelloWorld.f90
В первом случае указана опция
-o
, поэтому созданный исполняемый
файл будет именоваться
HelloWorld
. Во втором случае опция
-o
не ука-
зана, поэтому исходный файл будет назван стандартным именем
a.out
.
Напомним, что запуск исполняемого файла из командной строки осуществ-
ляется следующим образом:
./HelloWorld
После запуска программы
HelloWorld
в консоль будет напечатано со-
общение:
Здравствуй Мир!
1.2.1.
Структура программы
В общем случае структура программы на языке Фортран укладывается
в следующую схему:
program <имя_программы>
<Раздел_описания_переменных>
<Раздел_операторов>
[Внутренняя подпрограмма]
end program <имя_программы>
[Внешняя подпрограмма]
Прежде чем переходить к пояснению, приведём ещё один пример про-
граммы:
! Комментарии начинаются с восклицательного знака
program Example
! Раздел описания переменных
! Объявление трёх действительных переменных
real :: x, y, z
Геворкян М. Н., Королькова А. В., Кулябов Д. С. Параллельное программирование
7
! Раздел операторов
! Присвоение значения переменной
x = 6.2
y = 2.0
z = x*y
! Вывод значения переменной на экрана
print *, "z = ", z
end program Example
В данном примере содержится только одна программа, называемая глав-
ной. Текст главной программы открывается ключевым словом
program
со
следующим за ним именем программы и должен быть закрыт посредством
end
с тем же именем программы. Любая программа начинается с раздела
объявления переменных. Только когда все переменные объявлены, мож-
но переходить к разделу операторов, в котором совершаются действия над
объявленными ранее переменными. Присвоение значений переменным мож-
но осуществлять и в области описания, но рекомендуется поступать так
лишь в случае констант.
Алфавит Фортрана (Fortran 90) состоит из 26 букв английского алфа-
вита (регистр символов не играет роли и различается только в строковых
переменных), а также из перечисленных ниже символов:
=
равно
:
двоеточие
+
плюс
_
нижнее подчёркивание
− минус
!
восклицательный знак
∗
умножить
"
кавычки
/
слэш
%
процент
(
левая скобка
&
амперсанд
)
правая скобка
;
точка с запятой
,
запятая
<
меньше
.
точка
>
больше
$
знак доллара
?
вопросительный знак
′
апостроф
Все остальные символы можно использовать только в комментариях и
в строках. Заметим также, что длина одной строки текста программы не
должна превышать 132 символа и 39 строк продолжения. Строки продол-
жения должны начинаться с символа &.
Достарыңызбен бөлісу: |