148
Язык и система программирования mpC разработана в Институте
системного программирования РАН. Детали описания и текущее состояние
проекта можно найти на сайте http://www.ispras.ru/~mpc.
Основы программирования на
mpC
mpC-программа
‒
множество
параллельных
процессов,
взаимодействующих посредством неявной передачи сообщений. Количество
процессов, составляющих программу и характеристики компьютеров, на
которых эти процессы выполняются, указываются пользователем программы
в момент ее запуска. Реализацию этого механизма
обеспечивают внешние
средства. Код на mpC, составленный в соответствии с моделью SPMD,
управляет тем, какие именно вычисления выполняются каждым из процессов
программы.
Группа процессов, совместно выполняющих некоторый параллельный
алгоритм, в языке mpC называется сетью. Сеть в mpC ‒
механизм,
позволяющий программисту абстрагироваться от реальных физических
процессов параллельной программы. В простом случае сеть - множество
виртуальных процессоров.
Определение сети в программе вызывает создание группы реальных
процессов, представляющей эту сеть: каждому виртуальному процессору
соответствует отдельный процесс параллельной программы. В
разные
моменты времени выполнения параллельной программы один и тот же
реальный
параллельный
процесс
может
представлять
различные
виртуальные процессоры различных сетей.
Вопросы и задания
1.
Какие конструкции языка С препятствуют автоматическому
распараллеливанию программ?
2.
Отвечая на предыдущий вопрос, вы
сформировали список
конструкций,
препятствующих
автоматическому
распараллеливанию
программ. Внимательно проанализируйте полученный список и подумайте,
149
верно ли такое утверждение: "Любую программу, в которой нет конструкций
из списка, можно автоматически распараллелить"?
3.
В цикле содержится вызов функции. Какие конструкции языков
необходимо учитывать, чтобы определить, являются ли все итерации данного
цикла независимыми или нет? Рассмотрите языки С и Fortran.
4.
Какой вычислительной системе лучше соответствует технология
ОрепМР: вычислительному кластеру из рабочих станций или SMP-
компьютеру?
5.
Чем отличаются понятия "процесс" и "нить"?
6.
Верно ли утверждение: "OpenMP-программы
работают согласно
модели SingleProgram Multiple Data (SPMD)?"
7.
Чем различаются общие и локальные переменные в
последовательной секции ОреnМР-программы?
8.
Допускает ли ОреnМР изменение числа параллельных нитей по
ходу работы программы?
9.
Как будет обрабатываться такая конструкция: в параллельном
цикле стоит вызов функции, в теле которой так же есть параллельный цикл?
10.
Почему в ОрепМР нет конструкций,
аналогичных директивам
DVM ALIGN и
DISTRIBUTE?
11.
Предположим, что в ОрепМР не было бы директивы BARRIER.
Смоделируйте барьерную синхронизацию нитей с помощью других средств
ОрепМР, в частности, с помощью механизма критических секций.
12.
Можно ли автоматически конвертировать DVM-программу в
программу на ОреnМР?
13.
Напишите с помощью ОреnМР,
DVM и трС программы
перемножения двух матриц, решения системы линейных уравнений методом
Гаусса, нахождения обратной матрицы. Проанализируйте выполненную
работу с точки зрения эффективности полученных программ, простоты
написания программ, переносимости программ.
150
14.
Проанализируйте, что общего и
чем различаются классы
переменных вОреnМР, DVM и трС.
15.
Для чего в DVM введена директива ALIGN?
16.
Сравните модели выполнения параллельных циклов в ОреnМР и
DVM.
17.
Для нахождения суммы элементов вектора в рамках ОреnМР при
сложении частичных сумм можно воспользоваться критической секцией. Как
выполнить эту же операцию в DVM?
Do'stlaringiz bilan baham: