Составители:
Рубрика:
Глава 8. О ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ
OPEN MP
§ 1. Трудности перехода от последовательных
программ к параллельным
Исторически сложилось так, что при численном решении задач
пользователи пишут программы на последовательном языке. Если
оказалось, что без распараллеливания та или иная программа рабо-
тает не эффективно, то ее можно попытаться распараллелить с тем,
чтобы запустить задачу на параллельной системе. Кроме того, для
многих пользователей психологически удобнее программирование
начинать с последовательной программы. Поэтому естественно за-
даться вопросом о возможности автоматического распараллелива-
ния программ транслятором. Однако, решение задачи распаралле-
ливания данной программы достаточно сложно.
Для распараллеливания программы требуется:
1) найти участки программы, где распараллеливание возмож-
но,
2) распределить эти участки по вычислительным модулям,
3) обеспечить вычисления правильной синхронизацией.
Особенно трудно выполнить эти требования в случае системы
с распределенной памятью. Но даже для системы с разделяемой
памятью это достаточно сложно сделать автоматически.
Об этом свидетельствует следующий простой пример.
Задача 1. Пусть имеется фрагмент программы (назовем его
фрагмент (A)), состоящий из трех строк:
C программный фрагмент (A)
DO 10 i=1,n
DO 10 j=1,n
10 U(i+j)=U(2 * n-i-j+1)
Вопрос заключается в следующем: какие итерации в этой конструк-
ции независимы и можно ли ее распараллелить?
Попытаемся заменить фрагмент (A) фрагментом (B) вида
C программный фрагмент (B)
DO 10 i=1,n
130
Страницы
- « первая
- ‹ предыдущая
- …
- 127
- 128
- 129
- 130
- 131
- …
- следующая ›
- последняя »
