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

malyshkin_ve_korneev_vd_-_parallelnoe_programmirovanie_multikompyuterov

.pdf
Скачиваний:
68
Добавлен:
28.03.2016
Размер:
3.12 Mб
Скачать

свойство исключительно важно при программировании мультикомпьютеров с большим числом ПЭ (тысячи), при обеспечении устойчивости программы к сбоям (поломка) ПЭ и/или линков коммуникационной сети.

На основе этих аналогий естественным кажется вывести универсальные алгоритмы динамической балансировки из разностной схемы для двумерного уравнения диффузии.

Построенный алгоритм покажется красивым и обоснованным, но в чистом виде он не работоспособен. Все-таки множество процессов программы – это не жидкость и ведут процессы себя по-другому. Рассмотрим несколько примеров,

когда алгоритм не работает должным образом.

Гора песка. Пусть программа исполняется на мультикомпьютере с решеткой ПЭ размером, к примеру

16×32, и пусть нагрузка ПЭ возрастает вдоль широкой части решётки от ПЭ1,1 до ПЭ1,32, дисбаланс нагрузки между соседними ПЭ не превышает, но близок к порогу дисбаланса нагрузки ε. Тогда дисбаланс нагрузки между

ПЭ1,1 и ПЭ1,32 близок к 32ε. Если учесть, что для рассмотренной задачи моделирования поведения облака плазмы методом частиц порог дисбаланса должен быть около 5%, то дисбаланс нагрузки в 160% между крайними процессорами ПЭ1,1 и ПЭ1,32 представляется неприемлемым. Система процессов ведет себя как гора

218

песка, а не как жидкость, из-за большого «трения» во множества процессов. И надо сильно «трясти» мультикомпьютер (заложить это в алгоритм динамической балансировки), чтобы «песок» процессов равномерно распространился по всем ПЭ мультикомпьютера.

Кольчуга. На самом деле, из-за информационных зависимостей между процессами ситуация с балансировкой загрузки ещё хуже, чем в примере «гора песка». Ведь балансировка загрузки должна обеспечивать короткие межпроцессные коммуникации (желательно не далее соседних ПЭ). Поэтому система информационно зависимых процессов ведёт себя при исполнении как кольчуга: стоит только потянуть одно колечко (перелететь процессу в соседний ПЭ), и оно потянет за собою всех своих соседей, а

те потянут за собою своих соседей и так далее. Обеспечить близость коммуникаций и равномерную загрузку ПЭ мультикомпьютера в этих условиях очень непросто. В

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

Предсказание направления диффузии.

Динамическая балансировка загрузки – не дешевая

219

операция и желательно минимизировать их количество. Для этого в реализации метода частиц на каждом временнόм шаге подсчитывается вектор движения частиц и каждая балансировки делается «с запасом», предвидя последующие перелеты частиц. Такое предсказание развития распределения нагрузки (учет особенностей решения конкретной задачи) позволяет в несколько раз снизить число балансировок. Понятно, что алгоритмы балансировки, учитывающие специфику задачи, будут наиболее эффективными.

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

Рассмотрим теперь, как работает механизм балансировки загрузки в реализации PIC. Вначале каким-либо образом определяется порог разрешенного дисбаланса BP - максимальное количество частиц свыше среднего количества частиц, которое может обрабатываться одним ПЭ. Например, его можно задать константой. После каждого шага по времени каждый ПЭ подсчитывает количество частиц в нем. Если это количество отличается от среднего количества частиц ANP больше, чем на заданный порог, ПЭ сигнализирует о необходимости проведения балансировки загрузки.

Выделенный ПЭ собирает сведения о количестве частиц в

220

каждом слое (алгоритм балансировки централизованный),

записывает данные в уже описанный выше массив А и рассылает этот массив всем ПЭ. Далее, алгоритмом начальной балансировки загрузки, каждый ПЭ строит массив S, в который заносятся данные о новом распределении слоев между ПЭ. После чего производится обмен слоями между соседними ПЭ - сначала

(если необходимо) одновременно обмениваются слоями каждый ПЭ2i и ПЭ2i+1, затем каждый ПЭ2i+1 и ПЭ2i+2.

Определение порога разрешенного дисбаланса BP. Были проведены эксперименты для BP равного 0% (когда расписание балансировки строилось на каждом шаге) и 5% от общего числа частиц. При BP=5% было проведено 2 серии экспериментов. В

первой серии новая карта распределения нагрузки строилась каждый раз, когда уровень дисбаланса превышал заданный порог.

Во второй серии экспериментов новая карта строилась только тогда, когда увеличивалось максимальное количество частиц по сравнению с предыдущим шагом.

В двух других сериях экспериментов BP вычислялся динамически из времени, затраченного на выполнение перебалансировки и времени, затрачиваемого на обработку одной частицы. Таким образом, можно подсчитать, обработке какого количества частиц эквивалентно выполнение одной балансировки. Это значение не является точным, так как время,

затрачиваемое на проведение одной балансировки, может

221

значительно отличаться от времени, затрачиваемого на проведение другой балансировки - в зависимости от того, сколько слоев перелетает из одного процессора в другой. В таблице 2

приводится общее время работы программы моделирования разлета облака плазмы (сетка размера 20х20х30, размер облака,

находящегося в центре ПМ - 106000 частиц; всего 430000 частиц)

при использовании централизованного алгоритма динамической балансировки загрузки для различных значений BP. Как видно из результатов тестирования, алгоритм с динамически вычисляемым

BP имеет лучшие характеристики. Это и понятно, этот алгоритм лучше «чувствует» дисбаланс загрузки.

Таблица 2.

 

 

 

2 ПЭ

3 ПЭ

4

5 ПЭ

 

6 ПЭ

7 ПЭ

 

8 ПЭ

 

 

 

 

 

ПЭ

 

 

 

 

 

 

BP=0%

 

847

597

439

385

 

306

289

 

252

BP=5%

 

851

595

441

387

 

306

288

 

247

BP=5% (при

847

594

438

383

 

306

315

 

272

увел. дисб.)

 

 

 

 

 

 

 

 

 

динам. BP

849

595

437

384

 

306

287

 

247

динам.

BP

845

595

436

383

 

307

315

 

247

 

(при

увел.

 

 

 

 

 

 

 

 

 

дисб.)

 

 

 

 

 

 

 

 

 

 

динам.

 

846

678

483

445

 

361

 

 

297

 

балан-

 

 

 

 

 

 

 

 

 

 

 

сировки нет

 

 

 

 

 

 

 

 

 

6.4.3. Виртуальные слои ПМ

 

 

 

 

 

 

 

 

В процессе

моделирования возможна

ситуация,

когда

большинство частиц собирается в одном слое или в одном

222

столбце ячеек или даже в одной ячейке. Для организации вычислений в таком случае используется понятие виртуального слоя. Слой ПМ (вычисления и сеточные значения, заданные в вершинах ячеек слоя) представляется несколькими копиями

(виртуальными слоями), а множество частиц исходного слоя распределяется между этими виртуальными слоями и,

следовательно, между ПЭ, обеспечивая тем самым их равную нагрузку. Основной недостаток такого решения заключается в том, что появляется потребность в «длинных» взаимодействиях,

так как исходно смежные слои могут теперь располагаться не в соседних ПЭ.

Благодаря введению понятия виртуальных слоев в начальный момент времени достигается сбалансированная загрузка.

Граничные слои дублируются в соседних ПЭ, частицы из этих слоев распределяются между ПЭ таким образом, чтобы в каждом ПЭ находилось равное количество частиц. Алгоритм начальной балансировки загрузки видоизменяется следующим образом.

Слой 0, как и ранее, назначается в ПЭ0. В цикле по элементам массива А, слой j назначается не только в ПЭi, но и в ПЭi+1, если при добавлении частиц слоя j в ПЭi количество частиц в первых i

ПЭ становится большим чем i*ANP. При накоплении дисбаланса в каждом ПЭ по массиву А строится новый массив S. Если новый массив S отличается от предыдущего, ПЭ обмениваются слоями.

После чего распределяются частицы из граничных дублируемых

223

слоев.

6.4.4.Централизованный алгоритм балансировки загрузки при реализации PIC на решетке ПЭ

Если при реализации PIC на мультикомпьютерах с большим количеством ПЭ использовать только линейные связи между ПЭ,

то во время выполнения централизованных алгоритмов динамической балансировки загрузки требуются длинные коммуникации. При использовании топологии связи типа

«решетка» радиус системы значительно уменьшается.

Ячейки (вместе с частицами) назначаются для обработки в ПЭ следующим образом. Пусть имеется l×m ПЭ, образующих решетку. Block_i (состоящий из нескольких прилегающих слоев)

назначается для обработки на ПЭ i-й строки решетки, 0i<l. Эти блоки формируются таким образом, чтобы обеспечить равномерную загрузку всех строк решетки ПЭ. После этого каждый block_i независимо от других блоков делится на m частей

- блок_ij, j=0,...,m-1, которые распределяются между m ПЭ i

строки. Эти блоки имеют форму параллелепипеда (рис. 6.8).

Таким образом сохраняется регулярность структур и сеточные значения хранятся в массивах.

Динамическая балансировка загрузки происходит в два этапа.

Сначала перераспределяются слои между строками ПЭ решетки.

Используется описанный выше алгоритм динамической балансировки для линейки ПЭ. Затем новые блоки

224

распределяются между ПЭ строк.

Вычислительная

ПМ

система

 

(решетка ПЭ)

 

Строка 2 ПЭ

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПЭ (1,1) Block_2

Block_11

Рис. 6.8

6.5.Децентрализованные алгоритмы динамической балансировки загрузки

В таких алгоритмах решение о направлении передачи данных из более загруженных ПЭ в менее загруженные принимается локально. Цель - сбалансировать загрузку нескольких ПЭ в небольшой окрестности - локальной области. Вся вычислительная система покрывается такими локальными областями.

6.5.1. Основной диффузионный алгоритм

В основных диффузионных алгоритмах при выборе локальных областей должно выполняться условие, что нельзя разделить систему на части, не разделив при этом хотя бы одну локальную

225

область (бесшовное покрытие). Балансировка загрузки в области происходит лишь на основе информации о текущей загрузке ПЭ области. Диффузионные алгоритмы отличаются размерами (и

формами) локальных областей. Здесь размер области ограничивается двумя ПЭ. Поведение системы во время принятия решения о направлении передачи данных синхронизовано.

Принятие решения производится в несколько шагов.

На четном шаге каждая пара (ПЭ2i, ПЭ2i+1) (0i<N/2, где N -

количество ПЭ) обменивается информацией о количестве частиц и принимает решение о передаче части частиц из более загруженного ПЭ в менее загруженный с целью выравнивания загрузки. После чего каждый ПЭ имеет новую информацию о количестве частиц в нем.

На нечетном шаге каждая пара (ПЭ2i+1, ПЭ2i+2) (0i<(N-1)/2,

где N - количество ПЭ) обменивается информацией о количестве частиц и принимает решение о передаче части частиц из более загруженного ПЭ в менее загруженный с целью выравнивания загрузки.

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

226

шага.

Тестирование алгоритма показало, что хотя при увеличении количества шагов качество балансировки улучшается, общее время работы программы изменяется незначительно.

Конечно, не все так просто с диффузионными алгоритмами.

Для них, к примеру, характерна такая неприятная черта. Чистые диффузионные алгоритмы не чувствуют медленного нарастания нагрузки (гора песка). Чтобы исправить этот недостаток приходится принимать меры для пошагового распространения глобальной информации по всем ПЭ мультикомпьютера.

6.5.2. Модифицированный диффузионный алгоритм

Вычислительная система разбивается на множество смежных подобластей ПЭ. На первом шаге работы алгоритма в каждой подобласти собирается информация о количестве частиц в ПЭ этой подобласти. Это частично (на подобласти)

централизованный шаг алгоритма. Далее крайние ПЭ подобластей обмениваются собранной информацией и решают,

сколько частиц должно быть передано из одной подобласти в другую. Таким образом, получаем основной диффузионный алгоритм с размером локальной области равным 2, однако в качестве локальной области рассматривается не два ПЭ, а две подобласти ПЭ.

6.5.3.Децентрализованный алгоритм динамической балансировки

227

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