Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
40_алгоритмов_Python.pdf
Скачиваний:
8
Добавлен:
07.04.2024
Размер:
13.02 Mб
Скачать

334

Глава 13. Крупномасштабные алгоритмы

Пропускная способность

В контексте параллельных вычислений пропускная способность (throughput) — это количество отдельных вычислений, которые могут выполняться одновре­ менно. Например, если при t1 можно выполнить четыре одновременных вы­ числения, C1, C2, C3 и C4, то пропускная способность равна четырем.

Полоса бисекции сети

Полоса пропускания между двумя равными частями сети называется полосой бисекции сети (network bisection bandwidth). Это самый важный параметр, влияющий на эффективность распределенных вычислений. При недостаточной полосе бисекции скорость соединения будет медленной. Таким образом, будет потеряно преимущество, полученное благодаря наличию нескольких механиз­ мов выполнения.

Эластичность

Способность инфраструктуры среагировать на внезапное увеличение требований к обработке и выделить большее количество ресурсов называется эластичностью.

Три гиганта облачных вычислений, Google, Amazon и Microsoft, спо­ собны обеспечить высокоэластичную инфраструктуру. Их общий пул ресурсов огромен, и существует очень мало компаний, способных до­ биться такой же эластичности.

Если инфраструктура эластична, она способна создать масштабируемое решение для задачи.

РАЗРАБОТКА ПАРАЛЛЕЛЬНЫХ АЛГОРИТМОВ

Важно отметить, что параллельные алгоритмы не являются панацеей. Даже лучшие параллельные архитектуры могут не обеспечить ожидаемой произво­ дительности. Рассмотрим закон, который широко применяется для разработки параллельных алгоритмов, — закон Амдала.

Закон Амдала

Джин Амдал был одним из первооткрывателей параллельной обработки в 1960-х годах. Он предложил закон, который актуален до сих пор. Закон Ам­

Разработка параллельных алгоритмов

335

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

Согласно закону Амдала, не все части вычислительного процесса могут выпол­ няться параллельно. Всегда будет последовательная часть процесса, которая не может быть распараллелена.

Рассмотрим конкретный пример. Предположим, необходимо прочитать большое количество файлов, хранящихся на компьютере, и обучить модель МО, исполь­ зуя полученные данные.

Назовем этот процесс P. Очевидно, что P можно разделить на два подпро­ цесса:

zz P1: просканировать файлы в каталоге, создать список имен файлов, соот­ ветствующих входному файлу, и передать список дальше.

zzP2: прочитать файлы, создать пайплайн обработки данных, обработать фай­ лы и обучить модель.

Анализ последовательного процесса

Время выполнения P представлено как Tseq(P). Время выполнения P1 и P2 пред­

ставлено как Tseq(P1) и Tseq(P2). Очевидно, что при работе на одной ноде мы будем наблюдать следующее:

zz P2 не может начать работу до завершения P1. Это представляется как P1 -->P2. zzTseq(P) = Tseq(P1) + Tseq(P2).

Предположим, что запуск P на одной ноде в целом занимает 11 секунд . Из них выполнение P1 занимает 2 секунды, а выполнение P2 — 9 секунд. Работа алго­ ритма показана на следующей схеме (рис. 13.1).

Рис. 13.1

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

336

Глава 13. Крупномасштабные алгоритмы

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

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

Анализ параллельного выполнения

Если используется более одной ноды для ускорения P, это повлияет на P2 толь­ ко с коэффициентом s > 1:

Ускорение процесса P можно легко рассчитать следующим образом:

Отношение распараллеливаемой части процесса к его общему количеству пред­ ставлено b и рассчитывается так:

Например, в предыдущем сценарии b = 9/11 = 0.8182.

Упрощение этих уравнений даст нам закон Амдала:

Итак‚ мы имеем следующее:

zz P — это общий процесс;

zz b — отношение распараллеливаемой части P;

zzs — ускорение, достигнутое в распараллеливаемой части P.

Разработка параллельных алгоритмов

337

Предположим, процесс P запускается на трех параллельных нодах:

zz P1 является последовательным и не может быть сокращен с помощью парал­ лельных нод. Он по-прежнему длится 2 секунды.

zzP2 теперь занимает 3 секунды вместо 9.

Таким образом, общее время, затрачиваемое процессом P, сокращается до 5 се­ кунд, как показано на следующей диаграмме (рис. 13.2).

Рис. 13.2

Вычислим также:

zz np = количество процессоров = 3;

zz b = параллельная часть = 9/11 = 81,82 %; zzs = ускорение = 3.

Теперь взглянем на типичный график, объясняющий закон Амдала (рис. 13.3).

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

Гранулярность задачи

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