Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОСЫ / Parallelnye_vychislenia.doc
Скачиваний:
282
Добавлен:
15.02.2016
Размер:
410.62 Кб
Скачать

5. Общие свойства параллельных алгоритмов. Полная и неполная параллельность. Особенности выбора способов распараллеливания.

Мощные компьютеры стимулировали быстрый рост нового вида научной деятельности. К двум обширным классическим ветвям науки - теоретической и экспериментальной - добавилась вычислительная наука. На суперкомпьютерах выполняется моделирование физических процессов, слишком сложных, чтобы быть достоверно предсказуемыми теоретически, и слишком опасных или дорогостоящих при их воспроизведении в лаборатории. Успехи вычислительной науки резко повысили требования к вычислительным ресурсам и стимулировали быстрое развитие параллельных архитектур.

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

Однако, постоянное требование к росту производительности параллельных вычислительных систем и необходимость выполнения крупномасштабных вычислений привело вычислительную науку в область создания параллельных ВС смешанной архитектуры - распределенные мультиядерные вычислительные узлы с высокопроизводительной коммуникационной архитектурой и топологий сети. На сегодняшний день производительность самого мощного суперкомпьютера мира — IBM Roadrunner достигает 1,105 PFLOP.

Однако, различные формы параллелизма должны быть выражены в реальной программе, поэтому проблема эффективного распараллеливания переходит в плоскость программного обеспечения. Компиляторы, автоматически распараллеливающие последовательные алгоритмы, остаются ограниченными по применимости. Несмотря на то, что современные компиляторы при наличии технической возможности (напр. многоядерность) способны строить параллельный код на некоторых программах, наилучшая производительность достигается тогда, когда сам программист распараллеливает алгоритм.

Параллельный алгоритм должен быть эффективным и мобильным.

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

Свойство 1- использование в алгоритме параллельной программы множественного выполнения (N раз) одного и того же элементарного алгоритма:

Этим свойством обладают алгоритмы задач, в которых надо найти состояния S1, S2, … Snфизической системы в разные последовательные моменты времени:T1, T2, …, Tnи дано состояние физической системы S0в момент времени T0.

Состояние физической системы в момент времени i+1можно описать какSi+1=Э(Si). Т.е. алгоритм представляет собой последовательное выполнение элементарного алгоритмаЭс входными даннымиSiи выходнымиSi+1, гдеЭ– не зависит от i. (от i зависят входные данные и результат). Нельзя вычислить состояниеSi,не вычислив предыдущее состояниеSi-1

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

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

Свойство 3– параллельные алгоритмы допускают совмещение множества операций.

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

В качестве примеров рассмотрим распараллеливание простых алгоритмов.

Пример 1.Поэлементное сложение векторов - функцияaxpy(Z, a, X, Y)выполняет следующее действие: Z = a*X+Y, где a – скаляр с плавающей точкой, X, Y и Z – векторы размера n. Для получения результата можно разработать параллельный алгоритм, в котором вычисления выполняются над распределенными по процессам частями векторов X, Y и Z.

Рассмотрим понятие полной параллельностина примере функцииaxpy(Z, a, X, Y). Очевидно, эта функция может быть выполнена наp-процессорах абсолютно параллельно, если каждый процесс будет иметь в своей памяти соответствующую компоненту векторов X, Y и результирующего вектора Z.

В случае Р<n (число процессов меньше длины векторов), можно сгруппировать компоненты векторов так, чтобы на каждом процессе оказалось компонент векторов (для простоты предполагаем, что n – кратноP). Тогда, выполняя вычисления k компонент на каждом процессе, мы получим ускорение в Р раз. В общем случае ускорение на P-процессорной ЭВМ составит min(P,n).

Идентичность результата этой функции. Здесь обратим внимание, на то, что при параллельном выполнении функции результат будет точно таким же, как и при её последовательном исполнении (т.е. при P=1).

Пример 2. Скалярное произведение векторов - функцияvecvec_dot (a, X, Y)выполняет следующее действиеa = X*Y где a – скаляр и X и Y – векторы размера n..

По определению скалярного произведения – это . Предположим, что компоненты векторов распределены по n процессам и результатом(значениема)должен обладать, только 0 процесс, в отличие от примера 1, где результат хранится как распределенный вектор Z на каждом процессе.

Распараллелить вычисление этой функции можно выполнив независимо операций умножения с соответствующим сложением во временные переменныеtmp_a, на каждом процессе. Потом, соответственно, просуммировать эти k временных переменных для получения окончательного результата на процессе 0.

Неполная параллельность этой функции.

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

Отсюда следуют следующие два свойства параллельных алгоритмов.

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

Свойство 5 – незначительное отличие численного результата у последовательного и параллельного алгоритмов.

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

Общие особенности выбора способов распараллеливания.

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

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

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

Соседние файлы в папке ГОСЫ