Стадник Е. Г. ФПМИ НГТУ Руководитель: Городничев М.А., м.н.с. ИВМ и МГ СО РАН
Пример задачи с использованием распределённых данных
Декомпозиция данных
Организация коммуникаций
Оптимизация коммуникаций Вычисления Коммуникации (приём и отправка данных)
Оптимизация коммуникаций Вычисления Отправка данных Приём данных Вычисления Отправка данных Вычисления Отправка данных Приём данных Вычисления Отправка данных
Балансировка Вычисления Отправка данных Приём данных Вычисления Отправка данных Вычисления Отправка данных Приём данных Вычисления Отправка данных
Суммарные требования к фрагментам Регулярная структура и возможность обработки фрагментов при помощи циклов также, как и в массивах. Количество фрагментов на узле должно регулироваться с целью повышения асинхронности Возможность балансировки вычислительной нагрузки. Асинхронность коммуникаций и вычислений. Автоматическое удовлетворение всех зависимостей по данным посредством коммуникаций.
Анализ системы DVM Достоинства Повышение скорости разработки параллельных программ, реализующих численные методы с регулярными структурами данных и вычислений. Возможность контролировать процесс распараллеливания, добиваясь максимальной эффективности программ. Имеется встроенный отладчик и профайлер Недостатки Элементы массивов не могут иметь произвольный тип, только стандартные int, long, float, double Отсутствие автоматической динамической балансировки Не обеспечивается правильная обработка указателей на элементы массивов при перераспределении данных.
Distributed data system
Структура библиотеки доступ к данным для пользователя, команды управления Прикладной хранение информации о местоположении фрагментов Организационный обмен данными между процессами средствами MPI Транспортный
Пример использования библиотеки int main(int argc, char** argv) { //инициализация библиотеки DDS_Init(&argc, &argv); //объявление переменных типа "распределённый массив" DDS_Array Lay1; DDS_Array Lay2; //задание параметров для распределённых переменных Lay2.set_all_size(bsizex, bsizey, block_count_X, block_count_Y); Lay2.set_parametrs(1, DA_LINE_DISTRIB); Lay1.set_all_size(bsizex, bsizey, block_count_X, block_count_Y); Lay1.set_parametrs(0, DA_LINE_DISTRIB); //сообщаем системе, что готовы к работе(запускается поток для приёма данных) DDS_Begin();... //завершаем работу с библиотекой DDS_Finalize(); }
Пример использования библиотеки for (int iter=0; iterGet_block_index(&global_j, &global_i); //получаем данные из текущего фрагмента double *dat=it1->Get_Data(); //обрабатываем массив из текущего фрагмента for (int i=Y; i
Интерфейс библиотеки //инициализация библиотеки int DDS_Init(int *argc, char ***argv); //запуск потока для асинхронного приёма данных int DDS_Begin(); //завершение работы с библиотекой int DDS_Finalize();
Интерфейс библиотеки Контейнер фрагментов //задаёт размеры и количество фрагментов int set_all_size(int _Nx, int _Ny, int _kx, int _ky); //задаёт идентификатор переменной и тип распределения фграментов int set_parametrs(int _id, int _distrib_type); //возвращает итератор на первый фрагмент iterator begin(); //возвращает итератор на последний фрагмент iterator end(); //возвращает итератор фрагмента с индексом i iterator operator[] (unsigned i);
Интерфейс библиотеки Фрагмент данных //возвращает указатель на данные фрагмента T* Get_Data(); //заменяет данные фрагмента int Replace_Data(T* source, int delete_flag); //возвращает координаты фрагмента void Get_block_index(int *number_x, int *number_y); //возвращает размеры фрагмента void Get_block_dim(int *count_x, int *count_y); //возвращает глобальные координаты элемента с индексом (0,0) void Get_start_element_index(int *x, int *y); //указывает системе, что фрагмент готов для обмена данными int border_ready();
Измерение вычислительных затрат
Результаты работы Исследованы особенности работы с распределёнными данными Разработана библиотека для работы с распределёнными данными Получен прирост производительности за счёт организации очереди готовых фрагментов Не удалось получить существенного ускорения за счёт увеличения количества фрагментов и асинхронных коммуникаций. Требуется модификация алгоритмов приёма-передачи данных В настоящее время разрабатываются алгоритмы балансировки на основе анализа времени обработки фрагментов