SlideShare a Scribd company logo
1 of 12
Чётно-нечётная
сортировка
Реализация алгоритма с использованием CUDA и MPI
Чётно-нечётная сортировка
 Для каждой итерации алгоритма операции сравнения-обмена для всех пар
элементов независимы и выполняются одновременно. Рассмотрим случай,
когда число процессоров равно числу элементов, т.е. p=n - число процессоров
(сортируемых элементов). Предположим, что вычислительная система имеет
топологию кольца. Пусть элементы ai (i = 1, .. , n), первоначально
расположены на процессорах pi (i = 1, ... , n). В нечетной итерации каждый
процессор с нечетным номером производит сравнение-обмен своего элемента
с элементом, находящимся на процессоре-соседе справа. Аналогично в
течение четной итерации каждый процессор с четным номером производит
сравнение-обмен своего элемента с элементом правого соседа.
 На каждой итерации алгоритма нечетные и четные процессоры выполняют шаг
сравнения-обмена с их правыми соседями за время Q(1). Общее количество
таких итераций – n; поэтому время выполнения параллельной сортировки –
Q(n).
dmitry@protopopov.ru
Чётно-нечётная сортировка
 Когда число процессоров p меньше числа элементов n, то каждый из
процессов получает свой блок данных n/p и сортирует его за время
Q((n/p)·log(n/p)).
 Затем процессоры проходят p итераций (р/2 и чётных, и нечётных) и
делают сравнивания-разбиения:
1. смежные процессоры передают друг другу свои данные, и внутренне их
сортируют (на каждой паре процессоров получаем одинаковые массивы).
2. Затем удвоенный массив делится на 2 части; левый процессор обрабатывает
далее только левую часть (с меньшими значениями данных), а правый – только
правую (с большими значениями данных).
 Получаем отсортированный массив после p итераций
dmitry@protopopov.ru
Чётно-нечётная сортировка
 Когда число процессоров p меньше числа элементов n, когда смежные
процессоры передают друг другу свои данные, и внутренне их сортируют,
то переданные массивы уже являются отсортированными
 Поэтому для получения общего отсортированного массива применяется
алгоритм слияния двух отсортированных массивов в один
отсортированный итоговый массив
dmitry@protopopov.ru
Чётно-нечётная сортировка
 Схема алгоритма
dmitry@protopopov.ru
Параметры алгоритма
 Для определения порядка сортировки используется функция fn_compare,
со следующими свойствами
fn_compare(a,b) < 0 если a < b
fn_compare(a,b) > 0 если a > b
fn_compare(a,b) == 0 если a == b
 И параметр direction = 1, -1 – определяющий порядок сортировки
алгоритмом
dmitry@protopopov.ru
Ограничения в реализации алгоритма
 Данная реализация алгоритма реализует сортировку массивов только из
целых чисел, но может быть легко изменена для сортировки массивов
требуемого типа данных
 Настройки реализации алгоритма для CUDA вынесены в макросы
///////////////////////////////////////////////////////////////////////////////////////
/////
// Настроечные аттрибуты
// _comparer - функция сравнения двух элементов массива
// _indexator - функция определения номера корзины для элемента массива
// _non_parallel_sort - фунция сортировки без использования паралельных вычислений
// _parallel_sort - фунция сортировки с использованием паралельных вычислений
#define fn_comparer device_comparer<long>
#define fn_indexator device_indexator<long>
#define fn_non_parallel_sort device_bubble_sort<long>
#define fn_parallel_sort host_bucket_sort<long>
dmitry@protopopov.ru
Разделение исходного массива на
подмассивы
 При программировании для CUDA используется модель общей памяти,
доступной всем параллельным нитям.
 Поэтому для разделения исходного массива на подмассивы создаётся массив
индексов – индекса первого элемента подмассива в исходном массиве
 Архитектура MPI предполагает модель независимых вычислительных
устройств, со своей неразделяемой памятью и использованием “хост”
процесса, отвечающего за ввод-вывод информации.
 Поэтому “хост” процесс равномерно делит все данные исходного массива
между всеми процессами, включая себя.
dmitry@protopopov.ru
Количество подмассивов и их
организация
 При программировании для CUDA мы можем определять количество
параллельных нитей, запускаемых на GPU, поэтому создаём чётное
количество подмассивов и рассматриваем вычислительную модель, при
которой блоки объединены циклически, то есть левым блоком для
первого блока является последний блок
 При программировании для MPI мы не можем контролировать количество
запущенных процессов, поэтому рассматриваем вычислительную модель,
при которой блоки объединены последовательно, то есть первый блок не
имеет левого, а последний - правого
dmitry@protopopov.ru
Сортировка подмассивов
 В данной реализации для CUDA каждый подмассив сортируется отдельной
нитью с помощью реализованного алгоритма пузырьковой сортировки
 В данной реализации для MPI каждый подмассив сортируется
соответствующим процессом вызовом библиотечной функции qsort,
реализующей алгоритм быстрой сортировки
dmitry@protopopov.ru
Шаг алгоритма
 При программировании для CUDA используется модель общей памяти,
доступной всем параллельным нитям.
 Поэтому для каждой пары подмассивов производится сортировка слияниями с
копированием результата в новый массив, при этом на GPU запускается
количество параллельных нитей равное числу пар подмассивов
 Архитектура MPI предполагает модель независимых вычислительных
устройств, со своей неразделяемой памятью.
 Поэтому каждый процесс определяет своего соседа исходя из своего номера
процесса, полученного вызовом метода MPI_Comm_rank
 производит взаимный обмен данными подмассива с соседом
 производит сортировку слияниями двух уже отсортированных массивов и
оставляет у себя нужную часть
dmitry@protopopov.ru
Соединение подмассивов в итоговый
массив
 При программировании для CUDA используется модель общей памяти,
доступной всем параллельным нитям и разделение исходного массива
производилось только с помощью создания вспомогательной таблицы –
индексов первого элемента подмассива в исходном массиве
 Поэтому итоговый массив уже соединён в результате выхода последнего шага
алгоритма
 Архитектура MPI предполагает модель независимых вычислительных
устройств, со своей неразделяемой памятью.
 Поэтому итоговый массив формируется “хост” процессом в результате
последовательного опроса “дочерних” процессов
dmitry@protopopov.ru

More Related Content

What's hot

Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Mikhail Kurnosov
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Mikhail Kurnosov
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Mikhail Kurnosov
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Mikhail Kurnosov
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Mikhail Kurnosov
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPMikhail Kurnosov
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Mikhail Kurnosov
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Mikhail Kurnosov
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey Paznikov
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey Paznikov
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey Paznikov
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Mikhail Kurnosov
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Mikhail Kurnosov
 
Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Dmitry Tsitelov
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Mikhail Kurnosov
 
Измерение времени выполнения коллективных операций обменов информацией между ...
Измерение времени выполнения коллективных операций обменов информацией между ...Измерение времени выполнения коллективных операций обменов информацией между ...
Измерение времени выполнения коллективных операций обменов информацией между ...Mikhail Kurnosov
 

What's hot (19)

Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)Семинар 9. Параллельное программирование на MPI (часть 2)
Семинар 9. Параллельное программирование на MPI (часть 2)
 
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)Семинар 1. Многопоточное программирование на OpenMP (часть 1)
Семинар 1. Многопоточное программирование на OpenMP (часть 1)
 
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)Семинар 2. Многопоточное программирование на OpenMP (часть 2)
Семинар 2. Многопоточное программирование на OpenMP (часть 2)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)Семинар 6. Многопоточное программирование на OpenMP (часть 6)
Семинар 6. Многопоточное программирование на OpenMP (часть 6)
 
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)Семинар 7. Многопоточное программирование на OpenMP (часть 7)
Семинар 7. Многопоточное программирование на OpenMP (часть 7)
 
Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)Семинар 12. Параллельное программирование на MPI (часть 5)
Семинар 12. Параллельное программирование на MPI (часть 5)
 
Лекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMPЛекция 6. Стандарт OpenMP
Лекция 6. Стандарт OpenMP
 
Векторизация кода (семинар 1)
Векторизация кода (семинар 1)Векторизация кода (семинар 1)
Векторизация кода (семинар 1)
 
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
Лекция 7: Многопоточное программирование: часть 3 (OpenMP)
 
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...
 
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...
 
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...
 
2020 03-31-lection
2020 03-31-lection2020 03-31-lection
2020 03-31-lection
 
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)Семинар 4. Многопоточное программирование на OpenMP (часть 4)
Семинар 4. Многопоточное программирование на OpenMP (часть 4)
 
Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)Семинар 11. Параллельное программирование на MPI (часть 4)
Семинар 11. Параллельное программирование на MPI (часть 4)
 
Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)Multiprocessor Programming Intro (lecture 1)
Multiprocessor Programming Intro (lecture 1)
 
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)Семинар 3. Многопоточное программирование на OpenMP (часть 3)
Семинар 3. Многопоточное программирование на OpenMP (часть 3)
 
Измерение времени выполнения коллективных операций обменов информацией между ...
Измерение времени выполнения коллективных операций обменов информацией между ...Измерение времени выполнения коллективных операций обменов информацией между ...
Измерение времени выполнения коллективных операций обменов информацией между ...
 

Similar to сортировка слияниями

Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Alexey Paznikov
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Mikhail Kurnosov
 
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матрицКэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матрицSemen Martynov
 
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMikhail Kurnosov
 
якобовский - введение в параллельное программирование (1)
якобовский - введение в параллельное программирование (1)якобовский - введение в параллельное программирование (1)
якобовский - введение в параллельное программирование (1)Michael Karpov
 
Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Technopark
 
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...ITMO University
 
"Лавриненко Ярослав" HPC GPU CUDA
"Лавриненко Ярослав" HPC GPU CUDA"Лавриненко Ярослав" HPC GPU CUDA
"Лавриненко Ярослав" HPC GPU CUDAOleg Nazarevych
 
АВТОМАТИЧЕСКИЙ ПОДБОР ПАРАМЕТРОВ ВНЕШНЕЙ СРЕДЫ ПРИ ГЕНЕРАЦИИ АВТОМАТНЫХ ПРОГР...
АВТОМАТИЧЕСКИЙ ПОДБОР ПАРАМЕТРОВ ВНЕШНЕЙ СРЕДЫ ПРИ ГЕНЕРАЦИИ АВТОМАТНЫХ ПРОГР...АВТОМАТИЧЕСКИЙ ПОДБОР ПАРАМЕТРОВ ВНЕШНЕЙ СРЕДЫ ПРИ ГЕНЕРАЦИИ АВТОМАТНЫХ ПРОГР...
АВТОМАТИЧЕСКИЙ ПОДБОР ПАРАМЕТРОВ ВНЕШНЕЙ СРЕДЫ ПРИ ГЕНЕРАЦИИ АВТОМАТНЫХ ПРОГР...ITMO University
 
Моделирование|Обучение
Моделирование|ОбучениеМоделирование|Обучение
Моделирование|Обучениеfunkypublic
 
Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Technopark
 
Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]Qrator Labs
 
Bgp методякоби
Bgp методякобиBgp методякоби
Bgp методякобиMichael Karpov
 
инструменты параллельного программирования
инструменты параллельного программированияинструменты параллельного программирования
инструменты параллельного программированияAlexander Petrov
 
Расчет минимального времени выполнения задач при оптимальном распределении на...
Расчет минимального времени выполнения задач при оптимальном распределении на...Расчет минимального времени выполнения задач при оптимальном распределении на...
Расчет минимального времени выполнения задач при оптимальном распределении на...Sergey Vasilyev
 
Управление памятью в GO
Управление памятью в GOУправление памятью в GO
Управление памятью в GOssuserb5dd93
 
Вечный вопрос измерения времени
Вечный вопрос измерения времениВечный вопрос измерения времени
Вечный вопрос измерения времениTatyanazaxarova
 

Similar to сортировка слияниями (20)

Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
Лекция 6. Параллельная сортировка. Алгоритмы комбинаторного поиска. Параллель...
 
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
Лекция 7: Фибоначчиевы кучи (Fibonacci heaps)
 
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матрицКэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
Кэш-независимые алгоритмы: анализ алгоритма перемножения квадратных матриц
 
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPIMPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
MPIPerf: пакет оценки эффективности коммуникационных функций стандарта MPI
 
якобовский - введение в параллельное программирование (1)
якобовский - введение в параллельное программирование (1)якобовский - введение в параллельное программирование (1)
якобовский - введение в параллельное программирование (1)
 
Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3Алгоритмы и структуры данных осень 2013 лекция 3
Алгоритмы и структуры данных осень 2013 лекция 3
 
Алгоритмы сортировки
Алгоритмы сортировкиАлгоритмы сортировки
Алгоритмы сортировки
 
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
МЕТОД ПРЕДСТАВЛЕНИЯ АВТОМАТОВ ЛИНЕЙНЫМИ БИНАРНЫМИ ГРАФАМИ ДЛЯ ИСПОЛЬЗОВАНИЯ В...
 
"Лавриненко Ярослав" HPC GPU CUDA
"Лавриненко Ярослав" HPC GPU CUDA"Лавриненко Ярослав" HPC GPU CUDA
"Лавриненко Ярослав" HPC GPU CUDA
 
АВТОМАТИЧЕСКИЙ ПОДБОР ПАРАМЕТРОВ ВНЕШНЕЙ СРЕДЫ ПРИ ГЕНЕРАЦИИ АВТОМАТНЫХ ПРОГР...
АВТОМАТИЧЕСКИЙ ПОДБОР ПАРАМЕТРОВ ВНЕШНЕЙ СРЕДЫ ПРИ ГЕНЕРАЦИИ АВТОМАТНЫХ ПРОГР...АВТОМАТИЧЕСКИЙ ПОДБОР ПАРАМЕТРОВ ВНЕШНЕЙ СРЕДЫ ПРИ ГЕНЕРАЦИИ АВТОМАТНЫХ ПРОГР...
АВТОМАТИЧЕСКИЙ ПОДБОР ПАРАМЕТРОВ ВНЕШНЕЙ СРЕДЫ ПРИ ГЕНЕРАЦИИ АВТОМАТНЫХ ПРОГР...
 
Mod Film
Mod FilmMod Film
Mod Film
 
Моделирование|Обучение
Моделирование|ОбучениеМоделирование|Обучение
Моделирование|Обучение
 
Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3
 
Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]Анализ количества посетителей на сайте [Считаем уникальные элементы]
Анализ количества посетителей на сайте [Считаем уникальные элементы]
 
01 вводная
01 вводная01 вводная
01 вводная
 
Bgp методякоби
Bgp методякобиBgp методякоби
Bgp методякоби
 
инструменты параллельного программирования
инструменты параллельного программированияинструменты параллельного программирования
инструменты параллельного программирования
 
Расчет минимального времени выполнения задач при оптимальном распределении на...
Расчет минимального времени выполнения задач при оптимальном распределении на...Расчет минимального времени выполнения задач при оптимальном распределении на...
Расчет минимального времени выполнения задач при оптимальном распределении на...
 
Управление памятью в GO
Управление памятью в GOУправление памятью в GO
Управление памятью в GO
 
Вечный вопрос измерения времени
Вечный вопрос измерения времениВечный вопрос измерения времени
Вечный вопрос измерения времени
 

More from Dmitry Protopopov

аппроксимация функции нескольких переменных
аппроксимация функции нескольких переменныхаппроксимация функции нескольких переменных
аппроксимация функции нескольких переменныхDmitry Protopopov
 
Обработка приватных данных на публичных вычислительных сетях
Обработка приватных данных на публичных вычислительных сетяхОбработка приватных данных на публичных вычислительных сетях
Обработка приватных данных на публичных вычислительных сетяхDmitry Protopopov
 
фурье вычисления для сравнения изображений
фурье вычисления для сравнения изображенийфурье вычисления для сравнения изображений
фурье вычисления для сравнения изображенийDmitry Protopopov
 
метод широкополосного сигнала
метод широкополосного сигналаметод широкополосного сигнала
метод широкополосного сигналаDmitry Protopopov
 
чётно нечётная сортировка
чётно нечётная сортировкачётно нечётная сортировка
чётно нечётная сортировкаDmitry Protopopov
 
фурье обработка цифровых изображений
фурье обработка цифровых изображенийфурье обработка цифровых изображений
фурье обработка цифровых изображенийDmitry Protopopov
 

More from Dmitry Protopopov (6)

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

сортировка слияниями

  • 2. Чётно-нечётная сортировка  Для каждой итерации алгоритма операции сравнения-обмена для всех пар элементов независимы и выполняются одновременно. Рассмотрим случай, когда число процессоров равно числу элементов, т.е. p=n - число процессоров (сортируемых элементов). Предположим, что вычислительная система имеет топологию кольца. Пусть элементы ai (i = 1, .. , n), первоначально расположены на процессорах pi (i = 1, ... , n). В нечетной итерации каждый процессор с нечетным номером производит сравнение-обмен своего элемента с элементом, находящимся на процессоре-соседе справа. Аналогично в течение четной итерации каждый процессор с четным номером производит сравнение-обмен своего элемента с элементом правого соседа.  На каждой итерации алгоритма нечетные и четные процессоры выполняют шаг сравнения-обмена с их правыми соседями за время Q(1). Общее количество таких итераций – n; поэтому время выполнения параллельной сортировки – Q(n). dmitry@protopopov.ru
  • 3. Чётно-нечётная сортировка  Когда число процессоров p меньше числа элементов n, то каждый из процессов получает свой блок данных n/p и сортирует его за время Q((n/p)·log(n/p)).  Затем процессоры проходят p итераций (р/2 и чётных, и нечётных) и делают сравнивания-разбиения: 1. смежные процессоры передают друг другу свои данные, и внутренне их сортируют (на каждой паре процессоров получаем одинаковые массивы). 2. Затем удвоенный массив делится на 2 части; левый процессор обрабатывает далее только левую часть (с меньшими значениями данных), а правый – только правую (с большими значениями данных).  Получаем отсортированный массив после p итераций dmitry@protopopov.ru
  • 4. Чётно-нечётная сортировка  Когда число процессоров p меньше числа элементов n, когда смежные процессоры передают друг другу свои данные, и внутренне их сортируют, то переданные массивы уже являются отсортированными  Поэтому для получения общего отсортированного массива применяется алгоритм слияния двух отсортированных массивов в один отсортированный итоговый массив dmitry@protopopov.ru
  • 5. Чётно-нечётная сортировка  Схема алгоритма dmitry@protopopov.ru
  • 6. Параметры алгоритма  Для определения порядка сортировки используется функция fn_compare, со следующими свойствами fn_compare(a,b) < 0 если a < b fn_compare(a,b) > 0 если a > b fn_compare(a,b) == 0 если a == b  И параметр direction = 1, -1 – определяющий порядок сортировки алгоритмом dmitry@protopopov.ru
  • 7. Ограничения в реализации алгоритма  Данная реализация алгоритма реализует сортировку массивов только из целых чисел, но может быть легко изменена для сортировки массивов требуемого типа данных  Настройки реализации алгоритма для CUDA вынесены в макросы /////////////////////////////////////////////////////////////////////////////////////// ///// // Настроечные аттрибуты // _comparer - функция сравнения двух элементов массива // _indexator - функция определения номера корзины для элемента массива // _non_parallel_sort - фунция сортировки без использования паралельных вычислений // _parallel_sort - фунция сортировки с использованием паралельных вычислений #define fn_comparer device_comparer<long> #define fn_indexator device_indexator<long> #define fn_non_parallel_sort device_bubble_sort<long> #define fn_parallel_sort host_bucket_sort<long> dmitry@protopopov.ru
  • 8. Разделение исходного массива на подмассивы  При программировании для CUDA используется модель общей памяти, доступной всем параллельным нитям.  Поэтому для разделения исходного массива на подмассивы создаётся массив индексов – индекса первого элемента подмассива в исходном массиве  Архитектура MPI предполагает модель независимых вычислительных устройств, со своей неразделяемой памятью и использованием “хост” процесса, отвечающего за ввод-вывод информации.  Поэтому “хост” процесс равномерно делит все данные исходного массива между всеми процессами, включая себя. dmitry@protopopov.ru
  • 9. Количество подмассивов и их организация  При программировании для CUDA мы можем определять количество параллельных нитей, запускаемых на GPU, поэтому создаём чётное количество подмассивов и рассматриваем вычислительную модель, при которой блоки объединены циклически, то есть левым блоком для первого блока является последний блок  При программировании для MPI мы не можем контролировать количество запущенных процессов, поэтому рассматриваем вычислительную модель, при которой блоки объединены последовательно, то есть первый блок не имеет левого, а последний - правого dmitry@protopopov.ru
  • 10. Сортировка подмассивов  В данной реализации для CUDA каждый подмассив сортируется отдельной нитью с помощью реализованного алгоритма пузырьковой сортировки  В данной реализации для MPI каждый подмассив сортируется соответствующим процессом вызовом библиотечной функции qsort, реализующей алгоритм быстрой сортировки dmitry@protopopov.ru
  • 11. Шаг алгоритма  При программировании для CUDA используется модель общей памяти, доступной всем параллельным нитям.  Поэтому для каждой пары подмассивов производится сортировка слияниями с копированием результата в новый массив, при этом на GPU запускается количество параллельных нитей равное числу пар подмассивов  Архитектура MPI предполагает модель независимых вычислительных устройств, со своей неразделяемой памятью.  Поэтому каждый процесс определяет своего соседа исходя из своего номера процесса, полученного вызовом метода MPI_Comm_rank  производит взаимный обмен данными подмассива с соседом  производит сортировку слияниями двух уже отсортированных массивов и оставляет у себя нужную часть dmitry@protopopov.ru
  • 12. Соединение подмассивов в итоговый массив  При программировании для CUDA используется модель общей памяти, доступной всем параллельным нитям и разделение исходного массива производилось только с помощью создания вспомогательной таблицы – индексов первого элемента подмассива в исходном массиве  Поэтому итоговый массив уже соединён в результате выхода последнего шага алгоритма  Архитектура MPI предполагает модель независимых вычислительных устройств, со своей неразделяемой памятью.  Поэтому итоговый массив формируется “хост” процессом в результате последовательного опроса “дочерних” процессов dmitry@protopopov.ru
  • 13. Возможности оптимизации реализации алгоритма  В реализации для MPI, на этапе слияния двух отсортированных подмассивов в один отсортированный массив, нет необходимости производить формирование массива полного размера, равного сумме размеров двух подмассивов. Достаточно сформировать только отсортированную оставляемую часть, что позволит сократить количество необходимых вычислительных операций до 2-х раз, хотя в среднем сокращение количества вычислительных операций будет значительно меньше чем 2 раза. dmitry@protopopov.ru
  • 14. Алгоритм чётно-нечётной сортировки с использованием MPI 1. Хост-процесс формирует исходный массив 2. Хост-процесс равномерно распределяет элементы исходного массива между всеми P процессами, включая сам хост-процесс 3. Все процессы сортируют полученные подмассивы процедурой qsort 4. Каждый процесс p задаёт в качестве соседа для чётного шага процесс p-n, а в качестве соседа для нечётного шага процесс p+n, где n=(-1)p 5. Цикл для i от 0 до P-1 1. Каждый процесс t обменивается подмассивом с соседом, определяемым чётностью I 2. Каждый процесс t применяет процедуру слияния отсортированных подмассивов 3. Каждый процесс t оставляет у себя левую или правую половину отсортированного массива, в зависимости, с соседом слева или справа был произведён обмен подмассивами 6. Конец цикла для i 7. Хост-процесс последовательно опрашивает процессы и присоединяет полученные подмассивы к результирующему массиву dmitry@protopopov.ru
  • 15. Алгоритм чётно-нечётной сортировки с использованием CUDA 1. Исходный массив размера N загружается в память GPU 2. В памяти GPU создаётся массив INDEX из 2*K+1 индексов элементов исходного массива, где INDEX[0]=0 и INDEX[2*K]=N, а остальные элементы равномерно распределены по возрастанию между 0 и N 3. На GPU запускается 2*K параллельных процесса, каждый из которых сортирует один подмассив между индексами INDEX[t]-INDEX[t+1] методом пузырьковой сортировки 4. Цикл для i от 0 до 2*K-1 1. На GPU запускается K параллельных процесса, каждый из который применяет процедуру слияния отсортированных массивов к массиву между индексами INDEX[2*t+p]-INDEX[2*t+1+p mod 2*K] и к массиву между индексами INDEX[2*t+1+p mod 2*K]-INDEX[2*t+2+p mod 2*K] 5. Конец цикла для i dmitry@protopopov.ru
  • 16. Спасибо за внимание  Контакты  Дмитрий Протопопов, Москва, Россия dmitry@protopopov.ru +7 916 6969591 Исходные коды и примеры использования доступны по адресу https://github.com/dprotopopov/ParallelSorting dmitry@protopopov.ru