Введение Основная идея Spring PPI – концепция асинхронных методов – впервые предложена Ником Бентоном, Лукой Корделли и Кедриком Фоурнетом в модели Polyphonic C#[1]. В Polyphonic C# асинхронный метод – это метод, выполняющийся в отдельном потоке. Spring PPI использует понятие удаленного (distance) метода, который выполняется асинхронно на одном из вычислительных узлов кластера, а также предоставляет программисту высокоуровневый интерфейс для обмена сообщениями между удаленными методами. Вторая цель Spring PPI – повышение абстрактного уровня проектирования параллельных приложений путем реализации фреймворка паттернов[2] (шаблонных, устоявшихся приемов, методов) параллельного программирования. Таким образом, система позволяет программисту легко использовать испытанные, проверенные приемы проектирования параллельных программ и при разработке алгоритма мыслить на более высоком абстрактном уровне. Вторая цель Spring PPI – повышение абстрактного уровня проектирования параллельных приложений путем реализации фреймворка паттернов[2] (шаблонных, устоявшихся приемов, методов) параллельного программирования. Таким образом, система позволяет программисту легко использовать испытанные, проверенные приемы проектирования параллельных программ и при разработке алгоритма мыслить на более высоком абстрактном уровне.
Реализация системы Spring PPI Фреймворк предоставляет программисту интерфейс для создания параллельных приложений. Используя интерфейс фреймворка, программист взаимодействует с Run-time системой, которая обеспечивает корректное выполнение удаленных методов на узлах кластера и поддерживает функционирование каналов как средства обмена сообщениями между удаленными методами. Основная идея реализации параллелизма – асинхронный вызов удаленных (distance) методов. Таким образом, любой открытый (public) метод можно вызвать асинхронно на кластере. На основе интерфейса вызова удаленных методов Spring PPI реализует паттерн-ориентированный подход к проектированию параллельных приложений. Таким образом, в Spring PPI разработчик может создавать параллельные приложения, рассуждая исключительно в терминах теории паттернов. Система реализована на основе работы с портами и не использует дополнительных технологий взаимодействия между компьютерами, таких как MSMQ, .NET Remoting, Indigo, WCF и т.д.
Паттерны параллельного программирования, реализованные в Spring PPI Фреймворк Spring PPI позволяет программисту разрабатывать параллельные приложения, опираясь исключительно на паттерн - ориентированный подход к проектированию. Spring PPI реализует работу со следующими паттернами параллельного проектирования:
1. Singleton
2. Pipeline
3. Master-Slave Рис. 1 - Структура паттерна Master-Slave
4. Divide and Conquer Рис. 2 - Пример дерева задач паттерна Divide and Conquer
5. Repository Рис. 3 – Структура паттерна Repository
Результаты вычислительных экспериментов Каждый из алгоритмов запускался последовательно на 1-ом, 2-ух и 4-х процессорах. Эксперименты проводились на кластере, построенном на основе локальной сети (100 Мб/с) и компьютерах с тактовой частотой 2.4 ГГц. На рисунках 4, 5, 6 представлены графики, позволяющие оценить масштабируемость каждого из приведенных алгоритмов умножения матриц.
Рис. 4 – Масштабируемость алгоритма Фокса, реализованного с использованием Spring PPI
Рис. 5 – Масштабируемость алгоритма Кеннона, реализованного с использованием Spring PPI
Рис. 6 – Масштабируемость ленточного алгоритма, реализованного с использованием Spring PPI Можно сделать вывод, что алгоритмы Кеннона и Фокса показали замечательную масштабируемость, т.е. при увеличении числа вычислительных узлов (процессоров) вдвое – вдвое уменьшалось и время выполнения алгоритма. Особенно хорошо это можно увидеть на матрицах больших размеров. Ленточный же алгоритм демонстрирует худшее повышение производительности при увеличении числа вычислительных узлов – это может быть связано с тем, что данный алгоритм использует больше памяти. Таким образом, на примере реализации трех известных алгоритмов умножения матриц было продемонстрировано, что Run-time система и интерфейс параллельного программирования Spring PPI представляют собой хорошо масштабируемую систему.
Заключение Фреймворк Spring PPI прелагает разработчику использовать паттерны параллельного программирования в качестве способа универсализации и повышения качества подхода к разработке параллельного программного обеспечения. В качестве демонстрации работоспособности и эффективности предложенной модели параллелизма основанного на паттернах, с помощью интерфейса Spring PPI были реализованы классические алгоритмы параллельного умножения матриц: Фокса, Кеннона и ленточный. При проведении тестов все три алгоритма показали достаточно высокий уровень масштабируемости, что говорит о масштабируемости самой Run-time системы Spring PPI. В ходе над системой будут проводиться работы над дальнейшим совершенствованием и анализом параллельного паттерн - ориентированного фреймворка Spring PPI. Будут проведены работы по созданию и исследованию параллельной модели доступа и обработки данных, источником которых является реляционная база данных. Кроме уже реализованных паттернов будет проводиться работа над анализом и реализацией других шаблонных решений в области параллельного программирования. Планируется использование Spring PPI для реализации параллельных версий алгоритмов из различных предметных областей.
Литература |