arma-thesis

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

commit 8313823ac515cea7e020c55fdf013690505023a5
parent 3d29d6aa036645714778526dbf552f7ab7325f04
Author: Ivan Gankevich <igankevich@ya.ru>
Date:   Thu, 26 Jan 2017 17:00:58 +0300

Sync LB algo p1.

Diffstat:
phd-diss-ru.org | 48++++++++++++++++++++++--------------------------
phd-diss.org | 24+++++++++++++++++++++---
2 files changed, 43 insertions(+), 29 deletions(-)

diff --git a/phd-diss-ru.org b/phd-diss-ru.org @@ -2026,11 +2026,11 @@ cite:malewicz2010pregel,seo2010hama. Конвейер позволяет иск соответствующей сопрограммы. В результате, при аварийном завершении сопрограммы, все его вложенные сопрограммы должны быть выполнены заново. Это подталкивает программиста к созданию - - глубоких иерархий сильно связанных управляющих объектов (которые + - глубоких древовидных иерархий сильно связанных управляющих объектов (которые взаимодействуют между собой на одном уровне иерархии), уменьшающих накладные расходы на повторное выполнение сопрограмм; - - толстых иерархий слабо связанных управляющих объектов, обеспечивающих - максимальную степень параллелизма. + - толстых древовидных иерархий слабо связанных управляющих объектов, + обеспечивающих максимальную степень параллелизма. Глубокие иерархии это не только требование технологии, они помогают оптимизировать сетевое взаимодействие большого количества узлов кластера, сводя его к взаимодейсвтвию соседних узлов. @@ -2041,29 +2041,25 @@ cite:malewicz2010pregel,seo2010hama. Конвейер позволяет иск ** Реализация для систем с общей памятью (SMP) *** Алгоритм распределения нагрузки Наиболее простым и широко применяемым подходом к распределению нагрузки на -вычислительную систему является разбиение данных на однородные части (или -разбиение задачи на однородные подзадачи) с последующим распределением их между -отдельными ядрами вычислительного устройства или узлами кластера, однако такой -подход не всегда работает эффективно. Во-первых, часто общее количество частей, -на которые разбиваются входные данные, диктуется не архитектурой и конфигурацией -вычислительной системы, а самой задачей и присущими ей ограничениями, и такое -распределение не всегда эффективно с точки зрения вычислительной машины: -количество частей оказывается либо слишком большим по сравнению с количеством -процессоров, работающих параллельно, что ведет к увеличению накладных расходов -на обмен данными, либо слишком маленьким, что не позволяет эффективно -использовать все доступные вычислительные ядра. Во-вторых, сам характер деления -входных данных на части может стать причиной появления неоднородности в размерах -различных частей и дисбаланса нагрузки на отдельные вычислительные ядра системы. -В-третьих, поскольку в вычислительной системе процессор --- не единственное -устройство, справляющееся с нагрузкой, и существуют другие компоненты, -участвующие в вычислениях (такие как векторные ускорители, видеокарты и -устройства хранения), то окончательная производительность системы и время -решения конкретной задачи зависят от производительности не только процессоров, -но и всех устройств, принимающих участие в вычислениях. Таким образом, учет -только лишь процессоров при распределении нагрузки на вычислительную систему -является лишь первым приближением к решению задачи о достижении высокой -производительности, и учет всех компонент системы позволит улучшить этот -результат. +вычислительную систему является разбиение данных на равные части (или разбиение +задачи на однородные подзадачи) с последующим их равномерным распределением +между отдельными ядрами процессора и узлами кластера, однако такой подход не +всегда работает эффективно. Во-первых, часто общее количество частей, на которые +разбиваются входные данные, диктуется не архитектурой и конфигурацией +вычислительной системы, а самой задачей, и такое распределение не всегда +эффективно с точки зрения вычислительной машины: количество частей оказывается +либо слишком большим по сравнению с количеством процессоров, работающих +параллельно, что ведет к увеличению накладных расходов на обмен данными, либо +слишком маленьким, что не позволяет использовать все доступные вычислительные +ядра. Во-вторых, накладываемые решаемой задачей ограничения могут не позволить +разделить входные данные на равные части, что может стать причиной дисбаланса в +загрузке ядер процессора. В-третьих, в вычислительной системе в вычислениях +участвуют помимо процессора сразу несколько компонент (таких как векторные +сопроцессоры и устройства хранения), то время решения конкретной задачи зависит +от производительности всех задействованных устройств. Каким же образом сделать +алгоритм распределения нагрузки более эффективным, принимая во внимание разный +размер частей, на которые разделяются входные данные, и учитывая все устройства, +задействованные в вычислениях? Для учета производительности всех компонент вычислительной системы и неоднородности различных частей, на которые делятся входные и выходные данные, diff --git a/phd-diss.org b/phd-diss.org @@ -1944,9 +1944,9 @@ which maximises efficiency of a programme. of a neighbour node, because a node may fail in the middle of its execution of the corresponding routine. As a result, upon failure of a routine all of its subroutines must be restarted. This encourages a programmer to construct - - deep hierarchies of tightly-coupled kernels (which communicate on the same - level of hierarchy) to reduce overhead of recomputation; - - fat hierarchies of loosely-coupled kernels, providing maximal degree of + - deep tree hierarchies of tightly-coupled kernels (which communicate on the + same level of hierarchy) to reduce overhead of recomputation; + - fat tree hierarchies of loosely-coupled kernels, providing maximal degree of parallelism. Deep hierarchy is not only requirement of technology, it helps optimise communication of large number of cluster nodes reducing it to communication of @@ -1957,6 +1957,24 @@ routines and event handlers. ** SMP implementation *** Load balancing algorithm +The simplest approach to balance the load on a multi-processor system is to +split data into equal parts (or a task into homogeneous subtasks) and to +distribute them evenly between processor cores and cluster nodes, however, this +approach does not work efficiently in all cases. First, the total number of +parts, into which input data is split, is often dictated by the problem being +solved, rather than computer system architecture. Such load balancing may not +efficient from the computer system point of view: the number of parts is either +too large compared to the number of processors working in parallel, which +increases data transfer overhead, or too small, which prevents using all +available processor cores. Second, restrictions of problem being solved may not +allow splitting input data into even parts which may result in load imbalance +across processor cores. Third, there are multiple components in the system aside +from the processor that take part in the computation (such as vector +co-processors and storage devices), and the problem solution time depends on the +performance of all the components involved. So, how to make load balancing +algorithm more efficient in the presence of non-homogeneous input data parts and +take into account all the devices involved in the computation? + *** Evaluation **** Performance of MPI, OpenMP, OpenCL implementations. **** Performance of load balancing algorithm.