Стадник Е. Г. ФПМИ НГТУ Руководитель: Городничев М.А., м.н.с. ИВМ и МГ СО РАН.

Презентация:



Advertisements
Похожие презентации
Стадник Е. Г. ФПМИ НГТУ Руководители: Городничев М.А., м.н.с. ИВМ и МГ СО РАН Ларин В.В., магистрант ФПМИ НГТУ.
Advertisements

Методика распараллеливания программ в модели DVM Институт прикладной математики им. М.В.Келдыша РАН
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 4 Томский политехнический университет.
Проект: Система управления распределенными структурами данных (СУРД) «Разработка MPI-приложения для численного решения уравнения Пуассона» Выполнил: Халяпин.
Кафедра ЮНЕСКО по НИТ1 Передача упакованных данных Параллельное программирование.
Лекция 9 Функции. Массивы-параметры функции Передача массива в функцию Пример: void array_enter(int a[], int size) { int i; for (i = 0; i < size; i++)
Массивы и строки Лекция 5. Одномерные массивы. Объявление. Общая форма объявления: тип имя_переменной[размер]; Пример: double balance[100]; balance[3]
Лекция 6 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SIMD модель параллельного.
Параллельные аппаратные архитектуры и модели программирования Традиционная архитектура фон Неймана Расширение традиционной архитектуры Сопроцессоры Многоядерные.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции. Редукционные операции параллельное программирование Часть2.
Двумерные динамические массивы. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы. Другими словами, это набор.
POSIX Threads & OpenMP Общая память Сергей Петрович Нечаев, Сибирский Суперкомпьютерный центр.
Использование STL. Преимущества STL увеличение скорости написания программ гарантированное отсутствие ошибок универсальность (независимость от типов данных)
Программируемый клиент ORACLE Технология Pro C/C++
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 9 Методы разработки параллельных программ при использования интерфейса передачи.
Половинкин А.Н.. Постановка задачи Алгоритм умножения матриц на GPU Программная реализация.
Половинкин А.Н.. Постановка задачи Алгоритм вычисления функции axpy на GPU Программная реализация.
Система автоматизации распараллеливания: DVM-эксперт Блюменберг Э.П. 528 Научный руководитель: профессор В.А. Крюков.
OpenMP. Различие между тредами и процессами ПроцессыТреды.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Транксрипт:

Стадник Е. Г. ФПМИ НГТУ Руководитель: Городничев М.А., м.н.с. ИВМ и МГ СО РАН

Пример задачи с использованием распределённых данных

Декомпозиция данных

Организация коммуникаций

Оптимизация коммуникаций Вычисления Коммуникации (приём и отправка данных)

Оптимизация коммуникаций Вычисления Отправка данных Приём данных Вычисления Отправка данных Вычисления Отправка данных Приём данных Вычисления Отправка данных

Балансировка Вычисления Отправка данных Приём данных Вычисления Отправка данных Вычисления Отправка данных Приём данных Вычисления Отправка данных

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

Анализ системы 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();

Измерение вычислительных затрат

Результаты работы Исследованы особенности работы с распределёнными данными Разработана библиотека для работы с распределёнными данными Получен прирост производительности за счёт организации очереди готовых фрагментов Не удалось получить существенного ускорения за счёт увеличения количества фрагментов и асинхронных коммуникаций. Требуется модификация алгоритмов приёма-передачи данных В настоящее время разрабатываются алгоритмы балансировки на основе анализа времени обработки фрагментов