Задача 2. Параллельная сортировка Бэтчера Дана структура (или Класс) Point{ float coord[2]; int index; } P[n1*n2]; Данная структура будет использоваться для работы с регулярной сеткой. Точки данной сетки имеют координаты P[i*n2+j].coord[0] = x(i, j), P[i*n2+j].coord[1] = y(i,j), где i = 0, …, n1-1, j = 1, …, n2-1. Индекс определяется соотношением P[i*n2+j].index = i*n2+j Особенности: для инициализации координат можете использовать функции, принимающие на вход параметры (i, j), то есть фактически каждая точка этой сетки однозначно определяется (i, j). На входе: на каждом процессе одинаковое количество элементов структуры Point. (Если на некоторых процессах элементов структуры Point меньше чем во всех остальных, тогда необходимо ввести фиктивные элементы, например, с отрицательным значением индекса.) Цель: реализовать параллельную сортировку Бэтчера для структур Point вдоль одной из координат x (или y). То есть с начала необходимо реализовать сортировку на каждом отдельном процессе, а потом реализовать сеть слияния Бэтчера. На выходе: на каждом процессе одинаковое количество элементов структуры Point. Каждый элемент структуры Point одного процесса находиться левее по координате x ( или y) по сравнению с элементом структуры Point любого процесса с большим рангом, за исключением фиктивных элементов. Требования к программе: 1 Программа может быть гибридной: одновременно использовать технологию MPI, для обеспечения взаимодействия вычислительных узлов, и одну из двух технологий posix threads или OpenMP, для взаимодействия процессов, запущенных на ядрах процессоров 2 Программа должна демонстрировать эффективность не менее 80% от максимально возможной, на числе вычислительных ядер, не менее 128 Отчет должен содержать: 1. постановку задачи 2. описание метода решения 3. описание используемой вычислительной системы (число узлов, процессоров, ядер, вид и топология интерконнекта, …) 3.1. Характеристики вычислительной системы: число операций в секунду на ядро, латентность и пропускная способность интерконнекта, … 4. таблицу и графики, содержащие сведения о размерах сеток, времени решения и эффективности распараллеливания 5. Анализ полученных результатов 5.1. Сравнение с наилучшим (выполняющимся наименьшее время) доступным последовательным алгоритмом. В отчете должно быть указано время выполнения последовательного алгоритма на одном ядре – T1. Сравнивать следует с этим временем. Укажите явно значение величины T1/[N*log(N)] для сеток разного размера 5.2. Явное указание числа вычислительных узлов, процессоров и ядер 5.3. Явное указание числа тактов сортировки Бетчера и аналитические выражения для ожидаемого времени, ускорения и эффективности сортировки. 6. Другие требуемые, с вашей точки зрения, материалы 7. Приложение (тексты программ: последовательной и параллельной). Прикладывать в pdf полезно (тогда на них в отчете ссылаться можно), но не обязательно. ! Обязательно прикладывать тексты программ отдельно в c/cpp формате.