arma-thesis

git clone https://git.igankevich.com/arma-thesis.git
Log | Files | Refs | LICENSE

commit f951693c77c446c05d84950fb8c2353eba376a3f
parent 2e27c0cf07412b3eb2a9f4d392816fba9ef005d2
Author: Ivan Gankevich <igankevich@ya.ru>
Date:   Wed, 18 Jan 2017 16:21:40 +0300

Copy load balancing algorithm.

Diffstat:
phd-diss-ru.org | 146+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 146 insertions(+), 0 deletions(-)

diff --git a/phd-diss-ru.org b/phd-diss-ru.org @@ -1937,9 +1937,155 @@ cite:malewicz2010pregel,seo2010hama. Преимущество конвейера ** Реализация для систем с общей памятью (SMP) *** Алгоритм распределения нагрузки +Наиболее простым и широко применяемым подходом к распределению нагрузки на +вычислительную систему является разбиение данных на однородные части (или +разбиение задачи на однородные подзадачи) с последующим распределением их между +отдельными ядрами вычислительного устройства или узлами кластера, однако такой +подход не всегда работает эффективно. Во-первых, часто общее количество частей, +на которые разбиваются входные данные, диктуется не архитектурой и конфигурацией +вычислительной системы, а самой задачей и присущими ей ограничениями, и такое +распределение не всегда эффективно с точки зрения вычислительной машины: +количество частей оказывается либо слишком большим по сравнению с количеством +процессоров, работающих параллельно, что ведет к увеличению накладных расходов +на обмен данными, либо слишком маленьким, что не позволяет эффективно +использовать все доступные вычислительные ядра. Во-вторых, сам характер деления +входных данных на части может стать причиной появления неоднородности в размерах +различных частей и дисбаланса нагрузки на отдельные вычислительные ядра системы. +В-третьих, поскольку в вычислительной системе процессор --- не единственное +устройство, справляющееся с нагрузкой, и существуют другие компоненты, +участвующие в вычислениях (такие как векторные ускорители, видеокарты и +устройства хранения), то окончательная производительность системы и время +решения конкретной задачи зависят от производительности не только процессоров, +но и всех устройств, принимающих участие в вычислениях. Таким образом, учет +только лишь процессоров при распределении нагрузки на вычислительную систему +является лишь первым приближением к решению задачи о достижении высокой +производительности, и учет всех компонент системы позволит улучшить этот +результат. + +Для учета производительности всех компонент вычислительной системы и +неоднородности различных частей, на которые делятся входные и выходные данные, +распределение нагрузки можно провести в два этапа. На первом этапе часть входных +данных (или подзадача) направляется на соответствующее устройство, на которое +предполагается произвести нагрузку, например, видеокарту или процессор; если же +предполагается произвести нагрузку на устройство хранения, то подзадача +направляется на процессор или процессорное ядро, специально выделенное под такой +тип нагрузки. На втором этапе, когда тип устройства уже выбран, подзадача +распределяется на одно из доступных в системе устройств данного типа. Несмотря +на то, что на этом этапе подсистема в большинстве случаев является однородной +(состоящей из устройств одного типа), для учета неоднородных подзадач необходим +алгоритм распределения, который бы учитывал размер частей, на которые делится +задача. + +Такой алгоритм можно построить на основе алгоритма "заполнения" (англ. +backfill), который широко применяется для распределения нагрузки на узлы +вычислительного кластера, но для его эффективной работы в случае +многопроцессорной системы нужно произвести определенные модификации. Для расчета +времени решения задачи на кластере не существует надежного метода, и часто это +время задается вручную перед отправкой задачи в очередь cite:zotkin1999job, что +неприемлемо в случае многопроцессорной системы, и поэтому время решения +отдельных подзадач необходимо предсказать. Для получения надежного предсказания +можно воспользоваться любым подходящим статистическим методом и использовать +время выполнения предыдущих подзадач в качестве исходных данных. Для учета +неоднородной производительности устройств можно воспользоваться тем же методом, +только в качестве исходных данных взять производительность устройства на +предыдующих задачах (количество задач, завершенных в единицу времени). Чтобы +сократить накладные расходы, метод должен быть достаточно простым, и поэтому в +тестах был использовано осреднение $N$ последних значений характеристики. +Использование статистических методов в случае многопроцессорной системы +оправдано, поскольку в отличие от задач, решаемых на кластерах, время решения +подзадач достаточно мало, чтобы статистические методы работали эффективно. В +случае же кластерных систем ввиду очень большого времени решения одной задачи +использование статистических методов не может дать надежный результат, и +алгоритм "заполнения" работает эффективно для небольших задач +cite:zotkin1999job. + +Таким образом, распределение нагрузки осуществляется в два этапа: на первом +этапе задача направляется на соответствующее ее типу нагрузки устройство, а на +втором этапе она направляется на одно из выбранных устройств по алгоритму +распределения. Сам же алгоритм является алгоритмом "заполнения" с модификациями, +позволяющими автоматически предсказывать время выполнения задачи и +производительность устройств. + *** Результаты тестирования **** Производительности реализаций на MPI, OpenMP и OpenCL. **** Производительность алгоритма распределения нагрузки. +Программа, реализующая генерацию взволнованнной поверхности сбалансированна с +точки зрения нагрузки на процессорные ядра, однако, как показали тесты, +характеризуется высокой нагрузкой на устройства хранения. До проведения +тестирования программа была реализована на OpenMP и для сравнения переписана в +соответствии с разработанным подходом к распределению нагрузки, реализованным в +виде отдельной библиотеки. Конфигурация оборудования, использованная в тестах, +приведена в таблице [[tab:multicore-specs]]. В результате две реализации были +сопоставлены с точки зрения производительности. + +#+name: tab:multicore-specs +#+caption: Конфигурация многопроцессорной вычислительной системы. +#+attr_latex: :booktabs t +| Компонента | Подробности | +|-------------------------------+----------------------------------| +| Язык программирования | C++11 | +| Библиотека потоков | C++11 STL threads | +| Библиотека атомарных операций | C++11 STL atomic | +| Подпрограммы замера времени | ~clock_gettime(CLOCK_MONOTONIC)~ | +| | ~/usr/bin/time -f \%e~ | +| Компилятор | GCC 4.8.2 | +| Опции компиляции | ~-std=c++11 -O2 -march=native~ | +| Операционная система | Debian 3.2.51-1 x86_64 | +| Файловая система | ext4 | +| Процессор | Intel Core 2 Quad Q9650 | +| Частота процессора (ГГц) | 3.00 | +| Количество ядер | 4 | +| Емкость ОЗУ (ГБ) | 8 | +| Диск | Seagate ST3250318AS | +| Скорость диска (об./мин.) | 7200 | + +В процессе экспериментов была измерена эффективность описанного метода +распределения нагрузки, и он показал более высокую производительность в задаче +генерации взволнованной поверхности (в задаче генерации большого объема данных) +по сравнению с реализацией OpenMP. В результате предыдущих исследований было +установлено, что реализация OpenMP имеет наилучшую производительность по +сравнению с другими технологиями параллельного программирования +cite:degtyarev2011effi, поэтому эксперимент заключался в сравнении ее +производительности с производительностью нового метода на ряде входных данных. +При каждом запуске варьировался только размер взволнованной поверхности. В +результате эксперимента было установлено, что с увеличением размера поверхности +увеличивается разрыв в производительности этих двух реализаций (см. рис. +[[fig:factory-performance]]), а высокая производительность предложенного метода +обуславливается наложением по времени фазы генерации взволнованной поверхности и +фазы записи ее на диск (см. рис. [[fig:factory-overlap]]). В реализации OpenMP +такого наложения не происходит, и запись на диск начинается сразу после +окончания генерации поверхности в отличие от новой реализации, в которой +генерация и запись на диск заканчиваются почти одновременно. Таким образом, в +программах, работающих с большим объемом данных, конвейеризация параллельных +вычислительных фаз более эффективна, чем их последовательное выполнение и +позволяет сбалансировать нагрузку не только на процессорные ядра, но и на +дисковую подсистему. + +#+name: fig:factory-performance +#+caption: Сравнение производительности реализаций программы на OpenMP и на разработанной технологии. + +#+name: fig:factory-overlap +#+caption: Наложение параллельных вычислений на $[G_0,G_1]$ и записи данных на диск на $[W_0,W_1]$. В реализации OpenMP наложение отсутствует. + +Несмотря на то, что технология OpenMP содержит примитивы для создания +конвейеров, соединить конвейером две распараллеленные фазы программы можно +только вручную. Такое соединение можно реализовать с помощью синхронизированной +очереди, в которую направляются сгенерированные части взволнованной поверхности, +готовые к записи в файл. Используя директиву /omp section/, можно описать работу +каждого из звеньев получившегося конвейера, однако реализовать параллельную +обработку каждого из звеньев (или хотя бы первого) не представляется возможным, +так как требуется поддержка вложенных директив /omp parallel/, что редко +встречается в реализациях OpenMP. Таким образом, реализация описанного метода +распределения нагрузки в рамках стандарта OpenMP затруднена. + +Предложенный метод распределения нагрузки на многопроцессорную систему позволяет +получить прирост производительности для приложений, считывающих и записывающих +большой объем данных на диск, позволяет сбалансировать нагрузку на процессорные +ядра вычислительной системы и назначить различные типы рабочей нагрузки разным +процессорным ядрам, а также различным устройствам, в том числе дискам. В +дальнейших исследованиях предполагается обобщить этот метод на распределенную +вычислительную среду. + ** Реализация для систем с распределенной памятью (MPP) *** Алгоритм обнаружения узлов кластера *** Алгоритм восстановления после сбоев