PARUS
Страница проекта ПАРУС EnglishRus
Подсказка
Текущее состояние проекта может быть получено из Subversion репозитория. В будущем мы обеспечим доступ к устоявшейся версии исходных файлов. Версия в виде бинарного кода не будет доступна, так как многопроцессорные системы очень сильно различаются. Если Вы нуждаетесь в последней версии исходных кодов, Вы можете напечатать в консоли
«svn co https://parus.svn.sourceforge.net/svnroot/parus/trunk/parus parus»

Ссылки
Проект разрабатывается в МГУ в рамках этого семинара.
Информация о проекте на Sourceforge.
Администратор проекта: Алексей Сальников.
Наиболее популярный способ написания параллельных программ это создание параллельного программного кода с использованием таких библиотек как MPI для кластеров и систем с распределённой памятью, а также OpenMP для систем на общей памяти. Эти библиотеки позволяют создавать высоко эффективные параллельные программы.

Однако при написании параллельной программы для обеспечения эффективности работы полученной реализации и достижения сбалансированности нагрузки на процессоры и коммуникационную среду многопроцессорной системы приходится учитывать массу деталей: как минимум пропускную способность канала между парой процессоров и производительность каждого из процессоров, если множество процессоров разнородно. C целью облегчения человеку написания параллельной программы популярен подход создания программных надстроек над MPI и OpenMP. Эти надстройки пытаются изолировать пользователя от части проблем, связанных с параллельным программированием для многопроцессорных систем. К таким средствам можно отнести DVM, Cilk, PETSc, а также создаваемое автором в коллективе разработчиков инструментальное средство для написания программы как графа зависимости по данным PARUS.

Написание программы как графа зависимости по данным обладает некоторым преимуществом. В случае распараллеливания задачи очень крупными блоками бывает достаточно удобно декларировать связи между блоками, а затем каждый такой блок выполнять на своём подмножестве процессоров многопроцессорной системы. Алгоритм решаемой задачи представляется в виде ориентированного графа, где в вершинах сосредоточены вычислительные операции (действия над данными), а рёбра задают зависимости по данным. При этом дуга направлена от вершины-источника данных, к вершине, принимающей данные. Предполагается, что вершина, принимающая данные, будет как-то их использовать, и вырабатывать, на основе полученных, новые данные, которые затем будут использоваться другими вершинами графа. Таким образом, программа описывается как сеть с вершинами-истоками (в этих вершинах чаще всего происходит чтение входных данных из файлов), внутренними вершинами (в них происходит обработка данных), и вершинами-стоками, в которых обычно происходит запись результатов в файлы. Граф затем преобразуется в программу на C++ с MPI вызовами. Полученная таким образом программа в процессе исполнения на многопроцессорной системе будет пытаться минимизировать как накладные расходы на передачу данных, так и время исполнения своего кода путём выбора процессора для каждой вершины графа.

Одной из целей деятельности было исследование применимости подхода к написанию параллельной программы как графа зависимости по данным на следующих примерах: искусственной нейронной сети, параллельного персептрона, параллельного частотного фильтра звуковых сигналов, задаче организации распределённой операции над большим массивом данных. Результаты тестирования показали, что данный подход имеет практическую ценность.

Support This Project

 
Администратор: Алексей Сальников