ПАРАЛЛЕЛЬНЫЕ МОДЕЛИ Введение Модели физической

advertisement
ПАРАЛЛЕЛЬНЫЕ МОДЕЛИ
1. Введение
2. Модели физической области – уровни представления
2.1.
Физическая модель
2.2.
Математическая модель
2.3.
Дискретная вычислительная модель
2.4.
Программно-аппаратная модель
3. Параллелизм на разных уровнях представления
3.1.
«Естественный» параллелизм физической модели
3.2.
Параллельные программные системы
3.2.1. Процессно-ориентированные модели
3.2.2. Объектно-ориентированные модели
3.2.3. Средства синхронизации параллельных вычислений - синхронизация
эволюции частей модели
3.2.4. Средства связи частей модели
3.3.
Параллельные дискретные вычислительные модели
3.3.1. Традиционные методы распараллеливания последовательных
алгоритмов
3.3.2. Методы декомпозиции/композиции областей – описание интерфейсов
между подобластями
3.3.2.1.
Метод Шварца для декомпозиции областей
3.3.2.2.
Метод композиции вычислительных объектов – построение
области путем композиции первичных подобластей с выделением
приграничных полос между подобластями
3.3.2.3.
Использование приграничных «потоков» для композиции
подобластей
3.4.
Уравнения и параллелизм – уровень математической модели
4. Эффективность распараллеливания
4.1.
Коэффициент ускорения при распараллеливании
4.2.
Соотношения между количеством данных, обрабатываемых в узле МВС на
каждом шаге вычислений, и количеством данных, пересылаемых между узлами
в конце шага
4.3.
Оптимальное соотношение между производительностью процессорных
узлов, скоростью обмена между узлами и объемом памяти в узлах
5. Программирование примеров для МВС
5.1.
Параллельное умножение матриц
5.1.1. Реализация через MPI и С++
5.1.2. Реализация через OST
5.2.
Решение уравнения параболического типа на интервале [0,L]
5.2.1. Реализация через MPI и С++
5.2.2. Реализация через OST
1. Введение.
Рассмотрим последовательность шагов по получению параллельной программно-аппаратной
модели для некоторой физической области. В настоящее время при построении
вычислительной модели некоторой физической области обычно используется
последовательность «физическая модель – математическая модель – дискретная
вычислительная модель – программно-аппаратная модель». Основной нашей целью будет
рассмотрение параллельной эволюции частей модели и взаимодействие этих частей в процессе
эволюции для вычислительного и программно-аппаратного уровней представления. Если нам
нужен параллельный счет на многих процессорах, то из этого однозначно следует необходимость
разбиения модели на взаимодействующие и параллельно эволюционирующие части. При этом
возникает вопрос – на каких уровнях представления модели кроме программно-аппаратного такое
разбиение необходимо? Ответ не является однозначным. В данной работе в качестве
неформальной обобщенной схемы построения моделей на любом уровне представления принята
следующая схема построения:
- модель на любом уровне состоит из параллельно эволюционирующих, связанных друг с другом и
через эти связи взаимодействующих в процессе эволюции частей. Статический случай
рассматривается как частный случай эволюции;
- топологическая структура моделей на разных уровнях подобна вплоть до взаимно однозначного
соответствия частей и связей;

используется архитектура «натурного цифрового» моделирования, в которой модель
строится из виртуальных цифровых частей по аналогии с натурным моделированием, при
котором модель строится из материальных частей;

проблема, возникшая при построении модели на одном уровне представления,
обязательно имеет аналог на других уровнях представления. При выборе варианта
решения очень часто целесообразно рассмотреть, как решается эта проблема на других
уровнях представления. Другая формулировка этого правила — нужно видеть физический
смысл действий с вычислительными моделями.
Перечисленные архитектурные принципы касаются только обобщенной картины построения
моделей, которая нужна исключительно для неформального обоснования принятия тех или иных
конкретных решений на двух последних уровнях представления физической области, которые
рассматриваются более подробно. Принятие этой схемы в качестве «правдоподобного рабочего
инструмента» даст возможность ориентироваться в множестве излагаемых технических деталей. В
то же время ничто не мешает в конкретной разработке начать применять ее, например, только с
программно-аппаратного уровня, где она абсолютно необходима.
Кратко рассмотрим возможные уровни представления физической области.
2. Модели физической области – уровни представления
2.1. Физическая модель.
Это – описание физической области в терминах физических законов. Так как нашей
целью является рассмотрение параллельных вычислительных и программноаппаратных моделей, то этот уровень нам нужен лишь в качестве части обобщенной
картины построения моделей. Такая обобщенная картина использована как
неформальное основание для принятия тех или иных конкретных решений на
подробно рассматриваемых уровнях. Тем не менее, в рамках принятой за основу
архитектуры уже на этом уровне желательно выделение параллельно
эволюционирующих частей и связей между ними. Из принципа подобия моделей на
разных уровнях представления, в частности, следует, что часть физической модели
отображается, в конце концов, на программно-аппаратном уровне на отдельный
возможно виртуальный процессор.
2.2. Математическая модель.
Это обычное описание физической области в виде систем уравнений,
начальных и граничных условий. В случае декомпозиции области на
параллельно эволюционирующие части еще на уровне физической модели для
каждой подобласти создается своя система уравнений. Тогда для «внутренних»
границ между подобластями граничные условия должны быть заданы в виде
уравнений, связывающих значения существенных переменных, условно
выражаясь, на «левых» и «правых» сторонах этих внутренних границ.
2.3.
Дискретная вычислительная модель.
Вычислительная модель некоторой физической области обычно представляется в виде
некоторого набора матриц, векторов, чисел и некоторого последовательного алгоритма для
их обработки. Мы рассматриваем параллельную вычислительную модель физической
области из одновременно эволюционирующих и независимо описанных подобластей. В
этом случае
естественно возникает проблема граничных условий на внутренних
границах, разделяющих соседние подобласти. Ясно, что до начала счета невозможно
определить значения существенных граничных переменных. Эти значения должны
определяться в результате взаимодействия подобластей в процессе их эволюции. Поэтому
традиционные граничные условия необходимо заменить на описание некоторого
интерфейса между взаимодействующими подобластями. Широко известны такого рода
алгоритмы на основе метода декомпозиции области, предложенного Шварцем [1]. В
качестве другого примера можно привести использование граничных потоков, как,
например, в методе С.К. Годунова [2]. В настоящей работе используется алгоритм
взаимодействия подобластей, основанный на использовании «приграничных» областей.
Этот алгоритм отличается минимальными требованиями к типу физической области.
Единственным условием применимости предлагаемого алгоритма является конечность
скорости распространение возмущений от границ подобластей [3].
2.4.
Программно-аппаратная модель.
На программно-аппаратном уровне модель физической области в нашем случае
представлена в виде множества программ, одновременно выполняющихся на множестве
процессоров и взаимодействующих друг с другом во время выполнения путем
межпроцессорных обменов. В настоящее время между собой конкурируют две
архитектуры построения параллельных программных систем:
- процессно-ориентированная, в которой каждая часть модели оформляется в виде
процесса (например, в контексте операционной системы UNIX). Эти процессы,
распределяются по разным процессорам, и взаимодействуют, посылая друг другу
сообщения;
- объектно-ориентированная, в которой каждая часть модели оформляется в виде
программного объекта (например, в контексте языка С++). Эти объекты распределяются
по разным процессорам и взаимодействуют, вызывая друг в друге операции. Вызов
операции в из одного объекта в другом объекте реализуется путем удаленного вызова
подпрограмм.
3. Параллелизм на разных уровнях представления
3.1. «Естественный» параллелизм физической модели
Имея в виду цель в виде построения параллельной программно-аппаратной модели,
будем рассматривать физическую область как множество частей и множество физических
процессов, параллельно протекающих в этих частях. При этом процессы могут быть как
разделены по пространству или времени, так и совмещены. Подчеркнем, что необходимо
отобразить физические части и процессы на соответствующие программные конструкции
и, желательно, взаимно однозначным образом. По мнению автора именно
параллельность или последовательность действий в физической модели должна
непосредственно браться за основу при построении параллельных программных
моделей. К сожалению, в настоящее время основные усилия и средств затрачиваются на
автоматизацию распараллеливания последовательных программ, в которых от
естественного параллелизма исходной физической системы осталось очень мало
информации.
3.2. Параллельные программные системы
Для представления на программном уровне частей физической системы и физических
процессов в этих частях в настоящее время предлагаются системы программирования,
основанные на двух альтернативных архитектурах — процессно-ориентированные и
объектно-ориентированные. Следует отметить, что несмотря на «непримиримый»
антагонизм некоторых сторонников той или иной архитектуры, по моему мнению, они
эволюционируют навстречу друг другу, заимствуя лучшие черты у соперника. Дело в том,
что любая система программирования должна дать возможность описать данные,
программы, обрабатывающие эти данные, и процессы исполнения программ обработки
данных. Различия в архитектурах описания этих базисных элементов проявляются в той
или иной сложности (трудоемкости) создания достаточно больших программных систем. В
контексте нашей проблемы создания распределенных программных моделей, состоящих
из многих взаимодействующих и параллельно эволюционирующих частей, в качестве
критериев сравнения естественно использовать оценки сложности для описания
компонент создаваемой параллельной системы:
- самих частей,
- связей между этими частями,
- синхронизации взаимодействия частей.
3.2.1. Процессно-ориентированные модели
В этой архитектуре часть физической системе предлагается представлять процессом. В
контексте конкретной операционной системы и системы программирования процесс это
стандартизованная конструкция, создаваемая командой «создать процесс» с указание
программы, которая начнет выполняться после создания этого процесса. Кроме задания
исполняемой программы при создании процесса указываются или устанавливаются по
умолчанию значения различных атрибутов процесса. В качестве примера можно указать
приоритет процесса, указания на ресурсы, которые процесс может использовать во время
своего исполнения и т.п. С точки зрения построения системы, состоящей из многих
процессов, главным атрибутом является идентификатор процесса, который необходим
для указания адресата сообщения при посылке сообщений между процессами.
Простейший используемый способ идентификации это присвоение последовательных
номеров процессам по ходу их создания. Соответствие между номерами процессов,
указываемыми в операциях обмена сообщениями, и сложными физическими адресами
процессов (адрес процессора в сети, идентификатор задачи в процессоре, адрес
системного описания процесса в оперативной памяти, выделенной задаче)
поддерживается в виде некоторых таблиц соответствия, управляемых системой
управления счетом.
Достоинства архитектуры:
- простота основных примитивов работы с процессами, а именно примитива создания
процесса с конкретным номером и примитива посылки сообщения от одного процесса к
другому процессу с указанным номером.
Недостатки архитектуры:
- вне архитектуры осталось описание данных и программ, реализующих операции с этими
данными. Из за отсутствия соответствующих стандартизованных компонент остаются не
стандартизованными описания частей физической модели в виде данных и программ,
становится, в частности, затруднительным автоматическое распределение процессов по
процессорам,
- «ручное» построение связей между процессами в виде сохранения номеров «соседних»
процессов, с которыми необходимо взаимодействие,
- низкоуровневый способ синхронизации через сообщения, который плохо защищен от
ошибок программиста.
Очевидно, что недостатки архитектуры являются следствием ее основного достоинства —
простоты. В ней не нашли отражения многие существенные черты физических моделей.
3.2.2. Объектно-ориентированные модели
В этой архитектуре часть физической системы предлагается представлять программным
объектом. Программный объект создается командой «создать объект» с указанием
экземпляра данных и набора подпрограмм, реализующих операции с этими данными.
Результатом операции создания является ссылка на объект, через которую осуществляется
доступ к объекту (вызов операций в объекте). Вызов операции должен быть удаленным в
том случае, когда вызываемый и вызывающий объекты расположены в разных
процессорах. Понятие процесса и соответствующая программная конструкция
существенно используется и в объектно-ориентированной модели. Содержательно в
рамках процесса идет исполнения подпрограмм, входящих в состав объектов и вызов
операций из одного объекта в другом. При этом процесс «перетекает» из одного объекта
в другой. Так как вызывающий и вызываемый объекты могут располагаться в разных
процессорах, то естественно обобщить традиционное понятие локального процесса на
«распределенный» процесс, в рамках которого совершается последовательные вызовы из
подпрограммы в подпрограмму в цепочке объектов, распределенных по сети
процессоров. В этом, в частности, заключается существенное архитектурное отличие двух
рассмотренных архитектур, так как в процессно-ориентированной архитектуре каждый
процесс локализован в конкретном процессоре. Конечно, можно использовать различные
критерии при сравнении архитектур, однако в данной работе предлагается использовать
принцип подобия различных представлений одной физической области. В случае выбора
между «локальными» и «распределенными» процессами этот принцип можно
использовать следующим образом. Рассмотрим в качестве примера некоторую
физическую среду через которую распространяется какая то волна. В физической области
естественно представлять себе процесс распространения волны через все части области
как единое целое. Распределенный программный процесс полностью соответствует этому
представлению, а локальный нет. Это означает, что программисту придется при создании
распределенной программной модели как то вручную оформлять соответствующее
понятие в виде цепочки локальных процессов. Заметим, что в других случаях для
физической модели может быть адекватным представление о цепочке физических
процессов, но в О-О архитектуру укладывается представление как локальных, так и
распределенных процессов.
Предпочтительное соотношение конструкций «объект-процесс» можно охарактеризовать
как «много-много». Это соотношение означает, что один процесс может пройти через
много объектов, а в один объект могут войти и одновременно существовать много
процессов. По указанному соотношению можно классифицировать многие современные
программные системы, которые могут соответствовать вариантам «один-один», «многоодин» и «один-много».
Достоинства архитектуры:
- для основных понятий физической модели (физического объекта, физического процесса,
распределенного по физической области) имеются однозначно соответствующие понятия
(программного объекта, процесса, распространяющегося через части программной
модели, расположенные на разных процессорах),
Недостатки базовой объектно-ориентированной архитектуры:
- «ручное» построение связей между объектами в виде сохранения ссылок на «соседние»
объекты, с которыми необходимо взаимодействие,
- множество способов синхронизации (порядка десятка, практически эквивалентных),
плохо защищенных от ошибок программиста.
3.2.3. Средства синхронизации параллельных вычислений - синхронизация эволюции
частей модели
Методы синхронизации процессов рассматривались еще в 1960-х гг. в пионерской работе
Э. Дейкстры [17], который механизм синхронизации с помощью «семафоров». С тех пор
появились много других конструкций — критические области, мониторы, мьютексы,
сообщения и т.д.[] . Все эти конструкции достаточно просто сводятся одна к другой и не
решают основной проблемы синхронизации с точки зрения прикладного программиста —
обеспечение гарантированно безошибочной синхронизации с малыми трудозатратами
при планировании и программировании.
Рассмотрим пример синхронизации с помощью семафоров.
В работе [] предлагается принципиально другой способ синхронизации путем разметки
синхронизируемых действий и данных временными метками. Действие над данными
разрешается только тогда, когда и действие и данные помечены одним и тем же
временем.
Рассмотрим пример синхронизации с помощью времни.
3.2.4. Средства связи частей модели
В обеих конкурирующих архитектурах для организации связей используются
концептуально одни и теже средства. Программной конструкции, на которую
отображается часть модели, при создании присваивается некоторый идентификатор. Это
может быть, например, последовательный номер создаваемого процесса или уникальный
идентификатор (УИД) создаваемого объекта. Отображение идентификатора на реальный
физический адрес части осуществляет системой управления счетом. В управлении
связями следует различать две фазы:
- фаза создания связей. Точнее это фаза создания модели, в которой создаются сами части
модели и устанавливаются связи между ними. В базовых систем управления процессами
(например, MPI) или объектами (например,
) прикладной программист сам
программирует установления связей путем сохранения идентификаторов частей в
переменных, которые находятся в тех частях модели, которым нужна некоторая
конкретная связь. В ряде надстроек над базовыми системами связи устанавливаются
автоматически, например, по описанию топологии системы[], или полностью
автоматически в случае автоматической декомпозиции исходной модели на одном из
уровней представления[];
- фаза использования связей для обмена информацией между частями.
3.3. Параллельные дискретные вычислительные модели
3.3.1. Традиционные методы распараллеливания последовательных алгоритмов
3.3.2. Методы декомпозиции/композиции областей – описание интерфейсов между
подобластями.
3.3.3.1. Метод Шварца для декомпозиции областей
Пусть у нас имеется разностная схема для решения дифференциальных
уравнений, определенных на всей области, тогда логично использовать ее же для
подобластей. Но нам не хватает граничных условий, ведь они заданы только на границе
“большой” области, а границы подобластей будут совпадать с ней только частично. Для
решения этой проблемы существуют методы декомпозиции области, один из которых –
метод Шварца.
Суть метода Шварца проста: изначально угадывается граничное условие на одной
из подобластей, ищется решение на этой подобласти, которое затем используется для
определения граничных условий для других подобластях. После этого подсчета других
подобластей (для чего, возможно, придется еще брать произвольные граничные условия)
используются для определения граничных условий первой подобласти, решение на ней
ищется заново, а затем вновь используется другими областями. Эти итерации постепенно
приближают текущее решение на подобластях к реальному, тому которое было бы
получено, если бы мы не делили область. Есть несколько модификаций метода Шварца,
каждая может быть применена к определенному типу уравнений. Здесь будет рассмотрен
метод Шварца с пересекающимися подобластями для параболических уравнений.
Рассмотрим уравнение в частных производных параболического типа на
интервале [0,L] с заданными начальным условием и граничными условиями на концах
интервала:
𝜕𝑢
𝜕𝑡
=
𝜕2 𝑢
𝜕𝑥 2
+ 𝑓(𝑥, 𝑡)
0 < 𝑥 < 𝐿, 𝑡 > 0
𝑢(0, 𝑡) = 𝑔1 (𝑡)
𝑡>0
𝑢(𝐿, 𝑡) = 𝑔2 (𝑡)
𝑡>0
𝑢(𝑥, 0) = 𝑢0 (𝑥)
0≤𝑥≤𝐿
Будем считать, что начальные данные удовлетворяют условиям необходимым для
существования и единственности решения. Для функции 𝑓(𝑡) ∶ ℝ+ ⟶ ℝ определим
норму следующим образом:
∥ f(∙) ∥∞ ∶= sup|f(t)|.
t>0
Разобьем область Ω = [0, 𝐿] × [0, ∞) на две пересекающиеся подобласти
Ω1 = [0, 𝛽𝐿] × [0, ∞) и Ω2 = [𝛼𝐿, 𝐿] × [0, ∞), 0 < 𝛼 < 𝛽 < 1. На первой
подобласти рассмотрим функцию 𝑣(𝑥, 𝑡), а на второй 𝑤(𝑥, 𝑡) , которые удовлетворяют
решаемому уравнению, а также новым граничным условиям 𝑣(𝛽𝐿, 𝑡) = 𝑤(𝛽𝐿, 𝑡) и
𝑤(𝛼𝐿, 𝑡) = 𝑣(𝛼𝐿, 𝑡).
Для 𝑣(𝑥, 𝑡) это уравнения:
𝜕𝑣
𝜕𝑡
=
𝜕2 𝑣
𝜕𝑥 2
+ 𝑓(𝑥, 𝑡)
𝑣(0, 𝑡) = 𝑔1 (𝑡)
0 < 𝑥 < 𝛽𝐿, 𝑡 > 0
𝑡>0
𝑣(𝐿, 𝑡) = 𝑤(𝛽𝐿, 𝑡)
𝑡>0
𝑣(𝑥, 0) = 𝑢0 (𝑥)
0 ≤ 𝑥 ≤ 𝛽𝐿
Для 𝑤(𝑥, 𝑡)соотвестственно:
𝜕𝑤
𝜕𝑡
=
𝜕2 𝑤
𝜕𝑥 2
+ 𝑓(𝑥, 𝑡)
𝑤(𝛼𝐿, 𝑡) = 𝑣(𝛼𝐿, 𝑡)
𝛼𝐿 < 𝑥 < 𝐿, 𝑡 > 0
𝑡>0
𝑤(𝐿, 𝑡) = 𝑔2 (𝑡)
𝑡>0
𝑤(𝑥, 0) = 𝑢0 (𝑥)
𝛼𝐿 ≤ 𝑥 ≤ 𝐿
Если возьмем 𝑣 = 𝑢 и 𝑤 = 𝑢 на соответствующих подобластях, то это будет
решением этих уравнений. Из единственности решения уравнения на всей области и
уравнений на подобластях получаем, что решения уравнений на подобластях будут равны
решению уравнения всей области.
Найти точные значения функций 𝑣(𝑥, 𝑡) и 𝑤(𝑥, 𝑡) мы не можеммы не можем.
Однако, можно постепенно приближать их значения к точному, используя метод Шварца.
Мы будем по очереди находить промежуточные функции, все время, используя новые
граничные условия: на k+1 итерации мы получаем функцию 𝑣 k+1 (𝑥, 𝑡), используя
значения 𝑤 k (𝑥, 𝑡) на части границы Ω1 , принадлежащей Ω2 и полученные на
предыдущей итерации. Для нахождения 𝑤 k+1 (𝑥, 𝑡) используем соответственно значения
𝑣 k+1 (𝑥, 𝑡) на части границы Ω2 , принадлежащей Ω1 . Таким образом, получаем
уравнения:
𝜕𝑣 k+1
𝜕𝑡
=
𝜕2 𝑣 k+1
𝜕𝑥 2
+ 𝑓(𝑥, 𝑡)
𝑣 k+1 (0, 𝑡) = 𝑔1 (𝑡)
𝑣 k+1 (𝛽𝐿, 𝑡) = 𝑤 k (𝛽𝐿, 𝑡)
𝑣 k+1 (𝑥, 0) = 𝑢0 (𝑥)
0 < 𝑥 < 𝛽𝐿, 𝑡 > 0
𝑡>0
𝑡>0
0 ≤ 𝑥 ≤ 𝛽𝐿
и
𝜕𝑤 k+1
𝜕𝑡
=
𝜕2 𝑤 k+1
𝜕𝑥 2
+ 𝑓(𝑥, 𝑡)
𝑤 k+1 (𝛼𝐿, 𝑡) = 𝑣 k (𝛼𝐿, 𝑡)
𝛼𝐿 < 𝑥 < 𝐿, 𝑡 > 0
𝑡>0
𝑤 k+1 (𝐿, 𝑡) = 𝑔2 (𝑡)
𝑡>0
𝑤 k+1 (𝑥, 0) = 𝑢0 (𝑥)
𝛼𝐿 ≤ 𝑥 ≤ 𝐿
Рассмотрим также функции ошибок: 𝑑 k (𝑥, 𝑡) = 𝑣 k (𝑥, 𝑡) − 𝑣(𝑥, 𝑡) и
𝑒 k (𝑥, 𝑡) = 𝑤 k (𝑥, 𝑡) − 𝑤(𝑥, 𝑡). Также рассмотрим соответствующие уравнения для них:
𝜕𝑑 k+1
𝜕𝑡
=
𝜕2 𝑑 k+1
𝜕𝑥 2
𝑑 k+1 (0, 𝑡) = 0
0 < 𝑥 < 𝛽𝐿, 𝑡 > 0
𝑡>0
𝑑k+1 (𝛽𝐿, 𝑡) = 𝑒 k (𝛽𝐿, 𝑡)
𝑡>0
𝑑k+1 (𝑥, 0) = 0
0 ≤ 𝑥 ≤ 𝛽𝐿
и
𝜕𝑒 k+1
𝜕𝑡
=
𝜕2 𝑒 k+1
𝜕𝑥 2
0 < 𝑥 < 𝛽𝐿, 𝑡 > 0
𝑒 k+1 (𝐿, 𝑡) = 0
𝑡>0
𝑒 k+1 (𝛼𝐿, 𝑡) = 𝑑 k (𝛼𝐿, 𝑡)
𝑡>0
𝑒 k+1 (𝑥, 0) = 0
0 ≤ 𝑥 ≤ 𝛽𝐿
Если норма данных функций будет стремиться к нулю при увеличении количества
итераций, то метод построенная модель действительно будет давать решение уравнения.
Согласно принципу максимума решение 𝑢(𝑥, 𝑡) изначального уравнения в
случае, когда 𝑓(𝑥, 𝑡) ≡ 0, достигает своего минимального и максимального значения
либо на линии 𝑡 = 0, либо на линиях границы 𝑥 = 0, 𝑥 = 𝐿. Дополнительно
будем считать, что 𝑢0 (𝑥) ≡ 0 и докажем следующее:
∥ 𝑢(x,∙) ∥∞ ≤
L−x
L
x
∥ g1 (∙) ∥∞ + ∥ g 2 (∙) ∥∞ , 0≤x≤L.
L
Для этого определим вспомогательную функцию 𝑢
̃ , как решения уравнения:
̃
𝜕𝑢
𝜕𝑡
=
̃
𝜕2 𝑢
0 < 𝑥 < 𝐿, 𝑡 > 0
𝜕𝑥 2
𝑢̃(0, 𝑡) = ∥ g1 (∙) ∥∞
𝑢̃(𝐿, 𝑡) = ∥ g 2 (∙) ∥∞
𝑢̃(𝑥, 0) =
L−x
x
∥ g1 (∙) ∥∞ + ∥ g 2 (∙) ∥∞
L
L
𝑡>0
𝑡>0
0≤𝑥≤𝐿
Решение этого уравнения легко угадать, оно будет единственным, причем
независящим от t:
𝑢̃(𝑥, 𝑡) =
L−x
x
∥ g1 (∙) ∥∞ + ∥ g 2 (∙) ∥∞
L
L
По построению мы имеем 𝑢
̃(𝑥, 𝑡) − 𝑢(x, t) ≥ 0 на линиях 𝑡 = 0, 𝑥 = 0 и
𝑥 = 𝐿. Так как 𝑢̃(𝑥, 𝑡) − 𝑢(x, t) принадлежит ядру дифференциального оператора, то
согласно принципу максимума мы имеем 𝑢
̃(𝑥, 𝑡) − 𝑢(x, t) ≥ 0 на всей
рассматриваемой области, а это значит, что
𝑢(x, 𝑡) ≤
L−x
x
∥ g1 (∙) ∥∞ + ∥ g 2 (∙) ∥∞
L
L
Точно также 𝑢
̃(𝑥, 𝑡) + 𝑢(x, t) ≥ 0 на границах и принадлежит ядру
дифференциального оператора, откуда получаем
𝑢(x, 𝑡) ≥ −
L−x
x
∥ g1 (∙) ∥∞ − ∥ g 2 (∙) ∥∞ )
L
L
Объединяя, эти два результата в итоге имеем
|𝑢(x, t)∞ | ≤
L−x
x
∥ g1 (∙) ∥∞ + ∥ g 2 (∙) ∥∞
L
L
Так как правая часть не зависит от t, мы можем взять супремум по t и получить
доказываемую оценку для ∥ 𝑢(x,∙) ∥∞
Применяя, только что доказанную оценку к функциям ошибок получаем
∥ 𝑑 𝑘+2 (𝑥,∙) ∥∞ ≤
𝑥
𝛽𝐿
∥ 𝑒 𝑘+1 (∙) ∥∞ , ∀𝑥 ∈ [0, 𝛽𝐿]
и
∥ 𝑒 𝑘+2 (𝑥,∙) ∥∞ ≤
𝐿−𝑥
(1−𝛼)𝐿
∥ 𝑑 𝑘+1 (∙) ∥∞ , ∀𝑥 ∈ [𝛼𝐿, 𝐿].
Если взять 𝑥 = 𝛽𝐿 и 𝑥 = 𝛼𝐿 в соответствующих неравенствах, то применяя
второе из них к первому, и наоборот первое ко второму получаем
∥ 𝑑 𝑘+2 (𝛼𝐿,∙) ∥∞ ≤
𝛼(1−𝛽)
𝛽(1−𝛼)
∥ 𝑑 𝑘 (𝛼𝐿,∙) ∥∞ ,
и
∥ 𝑒 𝑘+2 (𝛽𝐿,∙) ∥∞ ≤
𝛼(1 − 𝛽)
∥ 𝑒 𝑘 (𝛽𝐿,∙) ∥∞ .
𝛽(1 − 𝛼)
Теперь применим к 𝑑 𝑘 и 𝑒 𝑘 принцип максимума, согласно которому они
принимают максимальное значение на границе области, которая состоит из части линии
𝑡 = 0 и соответствующих лучей 𝑥 = 𝛼, 𝑥 = 𝛽, 𝑥 = 0 и 𝑥 = 1. Учитывая то, что при 𝑡 =
0 ошибки равны нулю, получаем ошибки равны нулю получаем
sup ∥ 𝑑 2𝑘+1 (𝑥,∙) ∥∞ ≤∥ 𝑒 2𝑘 (𝛽𝐿,∙) ∥∞ ,
𝑥
и
sup ∥ 𝑒 2𝑘+1 (𝑥,∙) ∥∞ ≤∥ 𝑑 2𝑘 (𝛼𝐿,∙) ∥∞ .
𝑥
Используя эти и предыдущие неравенства, выводим оценки
𝛼(1−𝛽) 𝑘
sup ∥ 𝑑 2𝑘+1 (𝑥,∙) ∥∞ ≤ (
𝛽(1−𝛼)
𝑥
) ∥ 𝑒 0 (𝛽𝐿,∙) ∥∞ ,
и
𝛼(1−𝛽) 𝑘
sup ∥ 𝑒 2𝑘+1 (𝑥,∙) ∥∞ ≤ (
𝑥
𝛽(1−𝛼)
) ∥ 𝑑 0 (𝛼𝐿,∙) ∥∞ ,
которые доказывают сходимость метода при выбранном нами диапазоне значений 𝛼 и 𝛽.
При делении области на несколько подобластей, доказательство применимости
метода становится существенно длиннее, в нем используется оценки для норм векторов,
составленных из норм функций ошибки. Это доказательство, как и доказательство для
дискретного случая не будет приведено здесь в силу своего значительного объема.
3.3.3.2. Метод композиции вычислительных объектов – построение области путем
композиции первичных подобластей с выделением приграничных полос между
подобластями.
Для большинства моделируемых физических процессов скорость распространения
возмущений ограничена. При выполнении этого условия возможно применение
описываемого далее метода, существенно облегчающего декомпозицию.
Опишем метод на простом примере. Пусть имеется область 𝐷, на которой задана
функция 𝑢(𝑥, 0). и система уравнений для 𝑢(𝑥, 𝑡) с граничными условиями первого рода,
описывающая некоторый физический процесс во времени. Будем считать, что скорость
распространения возмущений в среде ограничена константой 𝑃, то есть если поставить в
точке 𝐴 источник, то через время 𝑡 его влияние достигнет всех точек 𝐵, расстояние до
которых меньше 𝑃𝑡: 𝜌(𝐴, 𝐵) ≤ 𝑃𝑡.
Пусть имеется алгоритм численного решения заданных уравнений с дискретизацией
по времени и пространству, использующий на входе значения 𝑢(𝑥, 𝑡 ) и граничные условия,
а на выходе дающий решение 𝑢(𝑥, 𝑡 + ∆𝑡). Как правило, сами уравнения не обладают
свойством, описанном в предыдущем абзаце: влияние источника сразу же достигнет всех
точек, однако оно быстро спадает (например, по экспоненте) и мы будем считать, что
численный метод обладает этим свойством. Это предположение не искажает результатов
счета: на практике ошибка нефизичного влияния источника меньше погрешности
разностных схем, используемых для расчета. Важное значение имеет шаг по времени ∆𝑡,
если его увеличивать, то увеличивается зона влияния источника 𝑃∆𝑡, а в дискретном
случае может расти ошибка влияния, однако при этом падает точность алгоритма.
Если использовать декомпозицию области и разбить 𝐷 на подобласти 𝐷1 и 𝐷2, то
считать их отдельно на разных процессорах не получится, так как на границе 𝐺 между
ними неизвестны граничные условия. На каждом временном шаге они меняются и заранее
известны только для начального момента времени, в который задана 𝑢0 . Однако, если мы
возьмем их с предыдущего шага, то можно считать, что мы поставили на 𝐺 источники,
влияние которых сосредоточено в области 𝐿, состоящей из точек 𝑥: 𝜌(𝑥, 𝐺) ≤ 𝑃∆𝑡. Таким
образом, зная значения 𝑢 на момент 𝑡0 мы можем применить последовательный алгоритм
к каждой из подобластей и получить правильное решение в областях 𝐷1 \𝐿 и 𝐷2 \𝐿, даже не
зная граничных условий на 𝐺.
Рассмотрим теперь область 𝐾 ⊂ 𝐷, такую что: 𝐿 ⊂ 𝐾, 𝜕𝐾 ⋂ L̅ = ∅.
Область 𝐾, которую мы назовем граничной областью, включает в себя область
неправильных значений, но в тоже время его граница лежит в области правильных
значений. Непосредственно при расчете, с дискретными координатами, точки по которым
̅ \L̅.
проходит 𝜕𝐾 нужно выбирать максимально близко к 𝐺 и 𝐿, то есть минимизировать 𝐾
Это необходимо для убыстрения счета. Применив к 𝐾 последовательный алгоритм, взяв
𝑢(𝑡 ) и граничные условия из области правильных значений 𝑢(𝑥, 𝑡 + ∆𝑡), мы получим
правильные значения для 𝐿 ⊂ 𝐾 и, таким образом, для всей области 𝐷, после чего можно
переходить к следующему шагу по времени.
Расчет граничной области 𝐾 может производиться либо на одном из процессоров, с
последующей передачей данных, либо на обоих одновременно. При большем количестве
подобластей 𝐷1 , … 𝐷𝑛 в двумерном и трехмерном случаях 𝐾 может стать очень большой для
расчета на одном процессоре. В таком случае ее можно разделить на подобласти и
применить к ней тот же метод. Например, в двумерном случае при делении квадратной 𝐷
на одинаковые подобласти-квадраты, 𝐾 будет представлять собой решетку с узлами в углах
квадратов, которую можно разделить на подобласти-кресты, для которых граничными
подобластями будут небольшие прямоугольники.
3.3.3.3. Использование приграничных «потоков» для композиции подобластей
Методы конечного объема подразумевают интегрирование системы дифференциальных
уравнений. Изменения параметров внутри некоторой замкнутой области определяются потоками
через боковые грани и источниками или стоками внутри области. Разновидностью методов
конечного объема являются методы Годунова, которые применяются для нахождения разрывных
решений. Расчет ячеек ведется таким образом, что в большинстве случаев достаточно легко
подвергается распараллеливанию.
Для примера рассмотрим двумерную систему уравнений Сен-Венана (уравнения мелкой воды),
записанных в консервативной форме.
,
где
𝑞𝑥 = 𝑢ℎ, 𝑞𝑦 = 𝑣ℎ, ℎ − глубина, 𝑔 − ускорение свободного падения, (𝑢, 𝑣) −
компоненты скорости по координатам 𝑥 и 𝑦 соответственно, 𝑆 −функция источнкиа.
Уравнения могут быть переписаны в виде:
где
Неизвестные, которые необходимо найти: ℎ, 𝑞𝑥 и 𝑞𝑦 .
При дискретизации область сеткой разбивается на ячейки или контрольные объемы.
Запишем уравнения в интегральной форме для некоторого контрольного объема (на
рисунке – Control volume)
𝑁𝑆 − чило граней (сторон)контрольного, 𝑑𝑘 − длина стороны под номером 𝑘.
После применения теоремы Гаусса последнее выражения может быть переписано в виде:
Где 𝜕𝛺 обозначает границу контрольного объема, а 𝑛 −единичный вектор нормали к
границе, направленный наружу.
Запишем это выражения для каждой ячейки сетки, введя при этом 𝑈𝑖 −среднее значение
𝑈 на 𝛺𝑖 и 𝐴𝑖 −площадь 𝛺𝑖 :
Применим самую простую аппроксимацию по времени для первого члена и правило
средней точки для интеграла по границе. После вынесения в левую часть 𝑈𝑖𝑛+1 получим:
Основную сложность при реализации данной разностной схемы представляет
аппроксимация потоков 𝐸𝑘∗ , именно для этого применяются методы Годунова, решающие
задачи о распаде произвольного разрыва. Здесь мы не будем их подробно рассматривать,
а перейдем к реализации параллельного расчета.
Будем считать, что сетка состоит из треугольных ячеек. Для простоты разобьем ее только
на 2 подобласти, каждая из которых считается на отдельном процессоре. На рисунке
граница между подобластями обозначена толстой линией.
Рассмотрим расчет ячейки IV: для нахождения 𝑈 𝑛+1 или ℎ, 𝑞𝑥 и 𝑞𝑦 в ней необходимо знать
эти значения из ячеек I, V и VI. Ячейка I находится на другом процессоре, соответственно
данные с нее необходимо передать перед началом счета. То же самое актуально для
остальных ячеек на границе и их соседей с другого процессора. После же того как граница
просчитана, можно переходить к внутренним ячейкам, для расчета которых имеются все
данные на процессоре.
Таким образом, для каждого процессора алгоритм расчета на шаге по времени n+1 можно
представить так:
1. Получить значения ℎ, 𝑞𝑥 и 𝑞𝑦 граничных ячеек с другого процессора, рассчитанные
на n-ом шаге.
2. Просчитать граничные и внутренние ячейки.
3. Отправить значения просчитанных граничных ячеек.
В случае если процессоров больше, в алгоритме лишь меняется то, что получение и
отправка значений граничных ячеек производится для всех соседей.
3.4. Уравнения и параллелизм – уровень математической модели
При рассмотрении вопроса о том, какое отношение друг к другу имеют уравнения и
параллелизм возможно уместно воспользоваться аналогией с хорошо и давно
известными функциональными языками в программировании. В этих языках в отличие от
процедурных языков описывается не алгоритм в виде последовательности действий над
данными, а соотношения между рассматриваемыми данными. Конечно, и в процедурных,
и функциональных языках описываются и обрабатываемые данные в виде переменных
различных типов, значениями которых являются обрабатываемые данные. Во многих
случаях функциональное описание аналогично виду математических уравнений. Отличие
скорее в типах используемых операторов, набор которых в существующих
функциональных языках весьма невелик по сравнению с тем, что используется в
математике. Транслятор переводит описание на функциональном языке в алгоритм
обработки на языке некоторого виртуального (или реального) процессора, который затем
и выполняется во время счета. При трансляции в исполняемую программу чаще всего
идет речь о фиксированном алгоритме времени счета, который лишь параметризуется по
описанию, сделанному на функциональном языке. Из сказанного должно быть понятно,
что с одной стороны описание на функциональном языке никак не ограничивает
возможностей построения параллельных программ для обработки данных, связанных
описанными соотношениями. С другой стороны наличие фиксированного алгоритма
интерпретации описания делает такие языки «нишевыми», а готовые программы чаще
всего существенно проигрывают по времени счета программам, написанным на
процедурных языках.
По аналогии с функциональными языками про уравнения можно сказать, что они,
описывая лишь отношения между переменными (и задавая тем самым лишь связи между
частями физической модели), с одной стороны никак не ограничивают возможности по
построению параллельных программных моделей. С другой стороны в них нет никакой
информации (и это обратная сторона медали) об эффективном отображении
математической модели на множество последовательных процессоров и построение
такого отображения является трудной задачей индивидуально для каждого типа
уравнений. Дело в том, что из уравнений нужно извлечь информацию о том, какие
действия над данными, моделирующие эволюцию частей физической системы, можно
выполнять параллельно, а какие последовательно. Обязательное выполнение некоторых
действий чисто последовательно можно интерпретировать как наличие в физическом
системе причинно-следственной связи между этими действиями. К сожалению в тех
разделах математики, которые используются при построении вычислительных моделей,
отсутствует общеизвестная конструкция, специально предназначенная, для отражения
такой существенной для моделирования физических систем черты как причинноследственная зависимость между двумя действиями. В программировании такой
конструкцией является оператор присваивания. Выражение Y := f(X) означает, что из
переменной Х в конкретный момент исполнения программы выбирается значение, это
значение используется при вычислении функции f и полученное значение этой функции
присваивается переменной Y в некоторый следующий момент исполнения программы. В
результате можно утверждать, что причиной появления в некоторый момент конкретного
значения переменной Y стало значение переменной Х в некоторый предыдущий момент
времени. Запись в программе последовательности из нескольких операторов
присваивания можно трактовать лишь как упорядочение действий во времени, но не
обязательно причинно-следственную связь, так как последовательно выполняемые
действий могут относится к разным переменным. Напротив в математике запись y=f(x),
вообще говоря, может быть записана в виде u(x,y)=0. И что является причиной, а что
следствием в данной записи не находит никакого отражения. Поскольку обнаружение
причинно-следственных зависимостей в физических системах является чуть ли не главной
целью их моделирования, то было бы естественно в математических моделях
использовать соответствующую конструкцию. Например, «направленное» равенство,
аналогичное оператору присваивания в программировании.
В итоге можно сказать, что в механизме уравнений не находят явного отражения два
взаимосвязанных понятия - «причинная зависимость действий» и «независимость
действий», хотя сами действия в уравнениях присутствуют. Как следствие уравнения, так
сказать, «перпендикулярны» к проблемам распараллеливания.
4. Эффективность распараллеливания
Эффективность при создании и счете параллельных программно-аппаратных моделей
можно оценивать самым обычным образом в терминах «производительность стоимость». Как обычно, можно оптимизировать, например, производительность за счет
стоимости или наоборот. Производительность можно измерять в терминах
астрономического времени счета тестовой задачи или представительной смеси задач
(см.,например, []). Обозначим это время как ТА. Стоимость можно измерять в суммарном
«платном» времени процессоров, использованных для счета. Обозначим это время как ТP.
Тогда ТP = ТА * P . Здесь P — это число использованных процессоров. Конечно, на
практике и стоимость счета может не быть пропорциональна времени использования и
количеству использованных процессоров, и процессоры могут быть использованы разные
даже в в пределах одного счета. Однако для целей сравнения качества различных
программно-аппаратных моделей эти характеристики по мнению авторов вполне
пригодны.
4.1.
Коэффициент ускорения при распараллеливании
Из соотношения ТP = ТА * P видно, что если бы время счета уменьшалось
пропорционально числу использованных процессоров, то можно было бы ничего не
оптимизировать. Стоимость счета с увеличением числа процессоров не увеличивалась бы,
а время счета уменьшалось. Можно было бы просто запрашивать максимально доступное
число процессоров. Однако, хорошо известно, что при увеличении числа участвующих в
счете процессоров чаще всего не происходит пропорционального уменьшения времени
счета, а иногда время счета увеличивается. Поэтому качество программно-аппаратной
модели в целом удобно оценивать величиной, показывающей насколько реально
ускоряется счет при увеличении числа процессоров. Будем называть эту величину
коэффициентом распараллеливания КР и определим ее как:
КР = (ТА1 / TA2) / (P2 / P1)
Здесь
Р1 и ТА1 — это число процессоров, использованных для счета, и измеренное
астрономическое время счета в первом тесте, а Р2 и ТА2 — соответствующие значения во
втором тесте одной и той же программно-аппаратной модели. Зная значение КР для
конкретной программно-аппаратной конфигурации, можно оценить эффект
использования большего или меньшего числа процессоров. Например, при
использовании 10 процессоров вместо одного при КР = 1 время счета уменьшится в 10
раз, а при КР = 0.5 только в 5 раз.
Нашей задачей не является выбор за прикладного программиста целей оптимизации —
времени счета или стоимости счета. Поэтому перейдем к рассмотрению факторов,
которые влияют на коэффициент распараллеливания КР, который достаточно хорошо
отражает суммарное качество вычислительного алгоритма, системного ПО и аппаратуры.
Так как коэффициент КР характеризует эффективность применения большего или
меньшего числа процессоров, то варьируя выявленные факторы, влияющие на его
значения, прикладной программист сам может выбрать оптимальный для него вариант.
Рассмотрим в следующем разделе, какие характеристики вычислительного алгоритма и
используемой аппаратуры существенным образом влияют на этот коэффициент.
4.2. Соотношения между количеством данных, обрабатываемых в узле МВС на
каждом шаге вычислений, и количеством данных, пересылаемых между узлами
в конце шага
Пусть имеется область, для которой из соображений, которые здесь не рассматриваются,
уже выбрана конкретная сетка. В частности определены величины шагов по пространству
и времени. Требуется разбить область на части, которые будут параллельно считаться на
большем или меньшем числе процессоров. Алгоритм разбиения здесь не
рассматривается. Анализируется только влияние используемого числа процессоров
(количества частей, на которые разбита область, и соответственно количество данных,
обсчитываемых на одном процессоре) на эффективность вычислений.
Счет вычислительной модели на МВС складывается из выполнения шагов счета на
каждом процессоре без межпроцессорных обменов внутри шага и обменов
насчитанными данными между процессорами после окончания каждого шага. В
некоторых случаях удается совместить счет с обменами, но это требует разработки
специальных схем счета и не всегда возможно в основном из за дополнительных
трудозатрат на соответствующую модификацию уже существующего алгоритма.
Эффективность параллельного счета зависит прежде всего от отношения времени
счета шага и времени обмена данными, не совмещенного с временем процессорного
счета (проще говоря, это время простоя процессоров). Если это отношение равно,
например 9, то даже без использования по тем или иным причинам совмещения счета
и обменов мы получим ускорение счета модели на 100 процессорах в 90 раз по
сравнению со счетом на одном процессоре (КР=0.9).
//___________________________________________________________________//
Связь коэффициента распараллеливания и отношения обмены/счет.
КР = 1/(1+КО) где КО = ТО / ТП
Здесь:
ТО - астрономическое время обменов, не совмещенных с счетом, для одного
процессора. Рассматривается упрощенная ситуация, когда времена счета и обменов
одни и те же для всех процессоров.
ТП - астрономическое время счета одного процессора без учета простоев.
//___________________________________________________________________//
Для современных МВС характеристики доступных технических средств, а именно,
скорости процессоров, скорости сред передачи данных, объемы оперативной памяти в
расчете на один процессор, хорошо известны. Поэтому у создателя вычислительной
модели для оптимизации счета остается фактически лишь один параметр – время шага
без обменов. Это время существенно зависит от объема данных, обрабатываемых на
каждом шаге, и алгоритма обработки. Алгоритм обработки – это, вообще говоря, почти
предопределенный фактор. В результате получается, что единственный параметр,
который мы можем варьировать – это количество данных, обрабатываемых на одном
процессоре (размер подобласти). Очевидно, что объем данных на одном процессоре
должен быть достаточно большим, так как при малом количестве данных и
соответственно малом времени счета время обмена данными после окончания шага
будет заведомо больше времени счета при любой технической скорости среды
передачи из-за накладных расходов на организацию начала и окончание передачи.
4.3. Рассмотрим как характеристики физической задачи, вычислительной схемы и
аппаратуры влияют на возможность получения оптимального соотношения между
счетом и обменами.
4.3.1. Физическая среда
Во-первых, рассмотрим такую характеристику физической среды как скорость распространения
возмущений. Для наших оценок оказалось удобнее работать не со скоростью, а с расстоянием, на
которое распространяется изменение существенной переменной за время шага по времени,
зафиксированного в предопределенной сетке. Важность этой характеристики становится
очевидной из рассмотрения двух предельных случаев.
При нулевой скорости и соответственно нулевом расстоянии становится возможно разбиение
сетки на достаточно малые подобласти, так как их обсчет можно производить независимо друг от
друга и без обмена данными между соседями. Соответственно возможно эффективное
использование большого числа процессоров, которые не будут простаивать из-за ожидания
обменов.
При бесконечной скорости параллельный счет становится практически невозможным, так как все
процессоры будут стоять, ожидая окончания обменов. Любопытно, что в моделирующей среде
таким образом отражается невозможность существования реальных физических систем с
мгновенным распространением сигналов, которое очевидно требует бесконечной мощности.
Конечно, в ряде задач можно пренебречь, например временем распространения в случае
некоторого поля. Однако, этот фактор обычно компенсируется малой скоростью изменений поля
по сравнению с другими моделируемыми процессами.
В практически интересных случаях к границе подобласти примыкает приграничная подобласть,
такая, что изменение значений во внутренней части исходной подобласти, находящейся за
внутренней границей между приграничной подобластью и внутренностью исходной подобласти,
никак не влияет в пределах шага по времени на значения в соседней подобласти. Тогда обмен в
конце шага между соседями должен происходить только значениями из приграничных
подобластей. То есть, время обмена существенно зависит от размера приграничной подобласти
(скорости распространения возмущений).
Случай «мгновенного» распространения нового значения в случае поля должен компенсироваться
относительно малой частотой изменений поля по отношению к остальным моделируемым
процессам.
4.3.2. Вычислительный алгоритм
Идеальным является случай, когда счет совмещается с обменами. Такой алгоритм
должен начинаться с обсчета ячеек в приграничной полосе, предназначенной для
обмена с соседними подобластями, запускать отсылку значений из обсчитанной
приграничной полосы и лишь после этого переходить к счету внутренней части
подобласти, который в этом случае будет совмещен с обменом. В этом случае простои
процессоров отсутствуют, требования к системе обмена минимальны и КР=1.
4.3.3. Аппаратура
Из сказанного выше следуют вполне определенные требования к аппаратуре.
Соотношение вычислительной мощности процессора, объема памяти и времени
обмена (время передачи плюс время запуска операции обмена) должно быть в
некотором смысле «подобно» физической среде. Если, например, для физической
среды характерна очень большая скорость распространения возмущений, то большая
часть процессоров будет простаивать, дожидаясь окончания обменов, если скорость
обменов мала, или мал объем оперативной памяти, или производительность
процессоров слишком большая.
По-видимому, этих качественных рассуждений достаточно, чтобы путем небольшого
числа тестовых прогонов экспериментально подобрать оптимальный размер
подобластей и тем самым число используемых процессоров для конкретной
программно-аппаратной среды. В приложении Х приведено несколько
дополнительных соображений.
5. Программирование примеров для МВС
5.1. Параллельное умножение матриц
5.1.1. Реализация через MPI и С++
5.1.2. Реализация через OST
5.2. Решение уравнения параболического типа на интервале [0,L]
5.2.3. Реализация через MPI и С++
5.2.4. Реализация через OST
Приложение Х. Коэффициент распараллеливания
Рассмотрим зависимость коэффициента распараллеливания от числа используемых
процессоров, так как известно, что после увеличения числа процессоров выше
некоторого предела эффективность распараллеливания существенно падает.
Поскольку в рассматриваемом нами случае КР = 1 / (1 + КО) будем рассматривать
зависимость доли обменов КО от Р (числа используемых процессоров) или точнее от
числа подобластей (так как процессоры могут быть и виртуальными). Будем считать,
что и время счета и время обменов линейно зависят от количества обрабатываемых и
соответственно передаваемых данных. Предполагается, что такое упрощение не
влияет существенно на качественные результаты анализа. На самом деле, во-первых,
зависимость является кусочно-линейной из за организационных расходов в начале и
конце как очередного шага счета на процессоре, так и очередного обмена. Во-вторых,
хотя на практике считается, что процессорное время одного шага линейно зависит от
числа обсчитываемых ячеек сетки для большинства используемых алгоритмов, однако,
например, при умножении матриц процессорное время растет как n**1.5 (где n —
число элементов матрицы, правда это существенно только для плотно заполненных
матриц, которые, по-видимому, не описывают реальных физических систем, так как
полностью заполненная матрица отражает «мгновенную» связь между всеми частями
системы).
В предположении о линейной зависимости рассматриваемых времен от количества
данных, нам остается оценить долю данных для обмена по отношению ко всем
обрабатываемым данным. Мы также предполагаем, что скорость распространения
возмущений ограничена сверху и, как результат, ширина приграничной полосы, в
которой находятся передаваемые соседям данные, также ограничена и достаточно
мала по сравнению с самой подобластью. Тогда, чтобы получить зависимость
коэффициента распараллеливания от числа процессоров и тем самым оценить
итоговое качество модели некоторой физической области, достаточно чисто
геометрических оценок длины границы в двумерном случае и площади границы в
трехмерном.
Рассмотрим сначала двумерный случай. Очевидно, что в практически интересных
случаях по мере дробления области длина границ будет расти как квадратный корень
от числа подобластей. Так как число параллельно запускаемых операций
ввода/вывода линейно растет с увеличением числа процессоров (подобластей), то
казалось бы качество распараллеливания должно только расти с увеличением числа
процессоров (со скоростью n**0.5). И это действительно верно для тех случаев, когда
величина накладных расходов на пуск/стоп обменов и шагов счета мала по сравнению
с временем передачи через среду связи в случае обменов и временем «чистого» счета
шага на процессоре. В реальности эти накладные расходы достаточно велики и их
необходимо учитывать. Дело в том, что эти расходы в случае пересылки блока данных
практически не зависят от длины блока. При увеличении числа подобластей и
соответственно уменьшении количества передаваемых и обсчитываемых данных в
пределе основное время будут занимать именно накладные расходы. В результате с
увеличением числа процессоров астрономическое время счета будет оставаться
постоянным, а соответственно коэффициент распараллеливания будет уменьшаться в
обратной пропорциональной зависимости от числа процессоров. И такая ситуация
достаточно часто наблюдается на практике.
Итоговый вывод совершенно тривиален — дробление области и соответственно
увеличение числа процессоров нужно остановить в тот момент, когда накладные
расходы на операции «пуск/стоп» будут составлять существенную долю от самого
счета и обменов.
Приложение У. Оптимальное соотношение между производительностью процессорных
узлов, скоростью обмена между узлами и объемом памяти в узлах
Приложение Z. OST и функциональное программирование
Попытаемся сравнить программирование на OST и на каком либо функциональном языке,
например, языке Норма.
Начнем с того, что вызов операции в объекте и факт наличия связи между вызываемым и
вызывающим объектом может быть записан в “фукциональном” стиле в виде:
А.У = B.F(А.X)
Где:
А.У – переменная-результат внутри вызывающего объекта А. Так как в функциональных
языках отсутствуют переменные, меняющие свое состояние в процессе исполнения, здесь
используется лишь “стилизация” под функциональную запись, а не строгое следование
всем принципам функционального программирования.
В.F – операция, которую умеет выполнять вызываемый объект В
А.Х – переменная-аргумент внутри А
Тогда, по-видимому, можно утверждать, что описание внешних интерфейсов всех
объектов модели (в обычном смысле объектно-ориентированных языков в виде описания
операций и их параметров) плюс описание топологии связей объектов фактически
является функциональным. Действительно, оно почти эквивалентно заданию множества
равенств вида А.У = B.F(А.X). Так как описание связей в OST основано на использовании
координат объектов, которые могут меняться в момент счета, то в отличие от известных
функциональных языков отношения в OST могут изменяться динамически.
Можно утверждать, что, OST предлагает для программирования “внутренности”
объектов, вообще говоря, любой стиль программирования (из соображений
эффективности, конечно, прежде всего, процедурный или в терминологии
функциональных языков императивный), а для “внешнего” по отношению к объектам,
составляющим модель, программирования предлагает функциональный стиль. Кроме
того в отличие от функциональных языков предлагается конкретный механизм
интерпретации функциональной записи. Вводится понятие локального времени объекта,
времени выполнения операции и упорядочения актов выполнения операций путем
разрешения выполнения операции только при равенстве локальных времен
вызывающего и вызываемого объектов.
В заключение можно высказать предположение, что в действительности самым ценным в
функциональных языках являются не строгие ограничения типа отсутствия изменяемых
переменных, из за которых они собственно и не получили распространения на практике, а
возможность явно задать структуру связей программируемой системы с возможностью
последующей интерпретации этих связей.
Download