From 29329a13eb85678afb20eefe8ac6656eed8bc96a Mon Sep 17 00:00:00 2001 From: VlJulia <129722951+VlJulia@users.noreply.github.com> Date: Fri, 27 Dec 2024 01:13:02 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D1=82=D1=87=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CMakeLists.txt | 41 + .../vladimirova_j_jarvis_method/image1.png | Bin 0 -> 15797 bytes .../vladimirova_j_jarvis_method/image2.png | Bin 0 -> 20837 bytes .../vladimirova_j_jarvis_method/image3.png | Bin 0 -> 13075 bytes .../vladimirova_j_jarvis_method/image4.png | Bin 0 -> 53979 bytes .../vladimirova_j_jarvis_method.tex | 711 ++++++++++++++++++ 6 files changed, 752 insertions(+) create mode 100644 modules/mpi/vladimirova_j_jarvis_method/CMakeLists.txt create mode 100644 modules/mpi/vladimirova_j_jarvis_method/image1.png create mode 100644 modules/mpi/vladimirova_j_jarvis_method/image2.png create mode 100644 modules/mpi/vladimirova_j_jarvis_method/image3.png create mode 100644 modules/mpi/vladimirova_j_jarvis_method/image4.png create mode 100644 modules/mpi/vladimirova_j_jarvis_method/vladimirova_j_jarvis_method.tex diff --git a/modules/mpi/vladimirova_j_jarvis_method/CMakeLists.txt b/modules/mpi/vladimirova_j_jarvis_method/CMakeLists.txt new file mode 100644 index 0000000..a96070f --- /dev/null +++ b/modules/mpi/vladimirova_j_jarvis_method/CMakeLists.txt @@ -0,0 +1,41 @@ +get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME) + +set(LATEX_OUTPUT_PATH "${CMAKE_BINARY_DIR}/bin") +if (NOT EXISTS ${LATEX_OUTPUT_PATH}) + file(MAKE_DIRECTORY ${LATEX_OUTPUT_PATH}) +endif () + +if (USE_LATEX) + message( STATUS "-- " ${ProjectId} ) + file(GLOB_RECURSE report_files "*.tex") + + foreach (report ${report_files}) + get_filename_component(report_name ${report} NAME_WE) + list(APPEND list_report_names ${report_name}) + endforeach () + + add_custom_target( ${ProjectId}_prebuild + COMMAND ${PDFLATEX_COMPILER} -draftmode -interaction=nonstopmode ${report_files} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${report_files}) + + add_custom_target( ${ProjectId}_pdf + COMMAND ${PDFLATEX_COMPILER} ${report_files} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + DEPENDS ${report_files}) + + add_custom_target(${ProjectId}_all_formats ALL) + add_dependencies(${ProjectId}_all_formats ${ProjectId}_pdf) + + foreach (report_name ${list_report_names}) + add_custom_command( + TARGET ${ProjectId}_all_formats + POST_BUILD + COMMAND mv "${CMAKE_CURRENT_SOURCE_DIR}/${report_name}.aux" "${LATEX_OUTPUT_PATH}/${report_name}.aux" + COMMAND mv "${CMAKE_CURRENT_SOURCE_DIR}/${report_name}.log" "${LATEX_OUTPUT_PATH}/${report_name}.log" + COMMAND mv "${CMAKE_CURRENT_SOURCE_DIR}/${report_name}.pdf" "${LATEX_OUTPUT_PATH}/${report_name}.pdf" + ) + endforeach () +else() + message( STATUS "-- ${ProjectId} - NOT BUILD!" ) +endif() diff --git a/modules/mpi/vladimirova_j_jarvis_method/image1.png b/modules/mpi/vladimirova_j_jarvis_method/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..8ac11f33eeeaa2df9a6bb14d0da651bf725a4a62 GIT binary patch literal 15797 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 ?yD-fxm<#n4*LsAk+K}+$nu#L`IL^Hz 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 Z{f9%uT?aD0h1I0l`#~BU|4G;G90xm6s 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 b`XowD`s@|KW&scW%LPtWN(oviVI1^7hohDX literal 0 HcmV?d00001 diff --git a/modules/mpi/vladimirova_j_jarvis_method/image4.png b/modules/mpi/vladimirova_j_jarvis_method/image4.png new file mode 100644 index 0000000000000000000000000000000000000000..62bf9be8efe32d5c2d49204f5bcb2c66f5f10c51 GIT binary patch literal 53979 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 \\ (ННГУ) \\[1em] + Институт информационных технологий, математики и механики}} + + \vspace{1cm} + {\Huge \textbf{Отчет} \\[1em] + Построение выпуклой оболочки - метод Джарвиса. MPI} + + \vspace{1cm} + \raggedleft + {\textbf{Группа: 3822Б1ПР2 \\ Автор: Владимирова Юлия\\лектор: Сысоев\\ Александр Владимирович\\ доцент, кандидат технических наук\\преподаватель: Оболенский Арсений\\ Андреевич\\преподаватель: Нестеров Александр\\ Юрьевич\\}} + \vspace{2cm} + \centering {\textbf{26 декабря 2024 г.}} +\end{titlepage} + +\section{Введение} +\hspace{1cm}{Данный документ является отчетом к лабораторной работе №3 по предмету <<Параллельное программирование>>} + +\textbf{Задача звучит так:} на вход подается черно-белое изображение, содержащее в себе точки. Необходимо построить выпуклую оболочку для этих точек. + + + +\section{Теоритическая часть} + +\hspace{0.5cm} В моей задаче необходимо найти минимальную выпуклую оболочку. Выпуклой оболочкой называется кривая H без самопересечений, такая, что все точки множества лежат внутри этой кривой. Если кривая H является выпуклой (например, любая касательная к этой кривой не пересекает ее больше ни в одной точке), то соответствующая оболочка также называется выпуклой. + +\textbf{Алгоритм Джарвиса} + +Алгоритм Джарвиса является двухшаговым. Изначально необходимо взять точку, точно входящую в оболочку. В оболочку точно входит граничная точка, легче всего найти граничные точки по осям координат, то есть самую левую, правую, верхнюю, нижнюю. Принято и удобно брать самую нижнюю левую точку. + +Через первую точку проводится горизонтальная прямая. Находим точку, составляющую с этой прямой минимальный угол (по часовой стрелке). + +Теперь у нас есть две точки, через них необходимо провести прямую и найти точку, которая составляет минимальный угол уже с этой прямой. + + +\section{Преобразование и создание алгоритма} +\hspace{1cm}Для того чтобы вычислить угол, я решила использовать \textbf{формулу для нахождения угла между векторами \(\mathbf{\vec{a}}\) и \(\mathbf{\vec{b}}\)}: + +\[ +\cos(\theta) = \frac{\mathbf{\vec{a}} \cdot \mathbf{\vec{b}}}{\|\mathbf{\vec{a}}\| \|\mathbf{\vec{b}}\|} +\] +\\ +Первую точку назовем \textbf{A}, вторую точку \textbf{B}, а искомую \textbf{C}\\ +Т.к. мы теперь используем вектор, а не прямую, правильным будет поменять измеряемый угол, ведь до этого у нас вычислялся угол с прямой, которая точно будет дальше точки C, а сейчас у нас вектор, который имеет длину, поэтому угол $\alpha$ \text{меняем на} $\beta$ . То есть мы применяем правило смежных углов, они пропроциональные и их значения в сумме дают 180$^\circ$ + + +\begin{figure}[h] % "h" означает, что изображение будет вставлено "здесь" + \centering % Центрирование изображения + \includegraphics[width=0.2\textwidth]{image1.png} % Замените путь на путь к вашему изображению + \caption{} % Подпись к изображению + \label{fig:example} % Метка для ссылки на изображение +\end{figure} + +Учитывая то, что нам необходимо было найти наименьший угол $\alpha$ , и то, что чем больше угол $\beta$ , тем меньше угол $\alpha$ , то необходимо найти наибольший угол $\beta$ . Чем больше угол, тем меньше его косинус. Это можно рассмотреть на единичной окружности, косинус берется по оси x. + +\begin{figure}[h] % "h" означает, что изображение будет вставлено "здесь" + \centering % Центрирование изображения + \includegraphics[width=0.45\textwidth]{image2.png} % Замените путь на путь к вашему изображению + \caption{} % Подпись к изображению + \label{fig:example} % Метка для ссылки на изображение +\end{figure} + +В итоге мы пришли к тому, что необходимо найти наименьший косинус угла. +\\ +\textbf{Алгоритм}\\ +Алгоритм состоит из двух частей:\\ +\textit{Нахождение первой точки} +Т.к. изображение двумерное - соответсвенно это вектор, если мы построчно рассматриваем кратинку, то необходимо найти последнюю точку в векторе, а потом перебирать точки в обратном порядке, пока следующая точка не уйдет на более высокую координату y. В данном случае более высокая координата у - это ее меньшее значение, т.к. изображение рассматриваем с левого верхнего угла. + + +\begin{figure}[h] % "h" означает, что изображение будет вставлено "здесь" + \centering % Центрирование изображения + \includegraphics[width=0.45\textwidth]{image3.png} % Замените путь на путь к вашему изображению + \caption{} % Подпись к изображению + \label{fig:example} % Метка для ссылки на изображение +\end{figure} + После этого необходимо сохранить найденную точку, ведь мы собираемся к ней вернуться. + Необходимо провести горизонтальный вектор, чтобы точно не попасть ни в какую точку, мы возьмем мнимую точку \textbf{M}, которая имеет отрицательный х. Проведем вектор между этими двумя точками. + \textit{Нахождение точки C} + Мы будем перебирать все точки в поисках минимального косинуса. После того, как мы нашли точку C с минимальным косинусом, мы убираем предыдущую точку А и точки B, С из рассматриваемых. Теперь A:=B, B:=C. Если B не равен самой первой точке в оболочке - запускаем нахождение минимальной точки С еще раз.\\ + +\textbf{Код} +\begin{lstlisting}[language=C++, caption=Первая часть алгоритма:, label=lst:example] +Point* A = &input_[input_.size() - 1]; +for (size_t i = input_.size() - 1; i >= 0; i--) { + if (A->y != input_[i].y) break; + A = &input_[i]; +} +\end{lstlisting} + +\begin{lstlisting}[language=C++, caption=Вторая часть алгоритма:, label=lst:example] +first = A; +Point tmp = vladimirova_j_jarvis_method_seq::Point(-1, A->y); +Point* B = A; +A = &tmp; +res_ = std::vector(); +do { + size_t i = FindMinAngle(A, B, input_); + if (A != first) { + A->x = -1; + A->y = -1; + } + A = B; + res_.push_back(A->y); + res_.push_back(A->x); + B = &input_[i]; + +} while (B != first); +\end{lstlisting} + +\begin{lstlisting}[language=C++, caption=Формула нахождения минимального угла:, label=lst:example] +size_t min_angle_point = vec.size() + 1; +double min_angle = 550; +int reg_x = A->x - (B->x); +int reg_y = -(A->y - B->y); +for (size_t i = 0; i < vec.size(); i++) { + Point* C = &vec[i]; + if (C->x < 0) continue; + if ((A->x == C->x) && (A->y == C->y)) continue; + if ((B->x == C->x) && (B->y == C->y)) continue; + int tmp_x = (C->x - B->x); + int tmp_y = -(C->y - B->y); + if (reg_x * tmp_y - reg_y * tmp_x <= 0) { + double BA_length = sqrt(reg_x * reg_x + reg_y * reg_y); + double BC_length = sqrt(tmp_x * tmp_x + tmp_y * tmp_y); + double length = BA_length * BC_length; + double angle = tmp_x * reg_x + tmp_y * reg_y; + if (length == 0) + angle = 0; + else + angle = angle / (length); + if (angle < min_angle) { + min_angle = angle; + min_angle_point = i; + } + } +} + +return min_angle_point; +} +\end{lstlisting} +Тут все уже просмотренные точки получают координату -1, мне показалось это лучше чем удалять их из вектора. + + + +\section{Распараллеливание работы} +\hspace{1cm} Если у нас есть несколько процессов, то можно разделить перебор возможных точек C. Необходимо только разделить работу, все остальное остается прежним. +Я взяла такой способ распараллеливания: поделила точки между процессами, каждый процесс считает косинус лишь для своих точек, сам находит минимум и возвращает свой "лучший" результат. + + +\begin{figure}[h] % "h" означает, что изображение будет вставлено "здесь" + \centering % Центрирование изображения + \includegraphics[width=0.45\textwidth]{image4.png} % Замените путь на путь к вашему изображению + \caption{} % Подпись к изображению + \label{fig:example} % Метка для ссылки на изображение +\end{figure} + +Длину вектора \(\vec{AB}\)\ вычисляет только 0-ой процесс, и уже передает длину вместе с координатами точки B. +Если процесс понимает, что переданная точка B находится в его зоне, то он удаляет эту точку из рассматриваемых точек (кроме самой первой итерации, чтоб случайно не удалить первую точку в оболочке, ведь нам надо к ней вернуться). +Процесс 0 собирает все данные от процессов и находит наименьший результат из лучших, меняет точки A, B и С и начинает новую итерацию. +В случае если у процесса закончились точки, он ничего не считает, а просто отправляет "невозможно плохой вариант", то есть косинус угла >1. +Если процесс 0 понял, что оболочка построена (что мы пришли к изначальной точке), то он оповещает об этом все процессы и завершается.\\\\ + +\textbf{Код} +\begin{lstlisting}[language=C++, caption=Распрараллеливание процесс 0:, label=lst:example] + if (rank == 0) { + B = Point(input_[input_.size() - 2], input_[input_.size() - 1]); + Point A = Point(-1, -1); + int j = input_.size() - 3; + while (input_[j] == B.y) { + B.x = input_[j - 1]; + j -= 2; + } + Point first = B; + + reg_x = -1; + reg_y = 0; + + std::vector send_data = {reg_x, reg_y, B.x, B.y, active}; + std::vector send0_data(3); + do { + double min_angle = 1000; + send_data = {reg_x, reg_y, B.x, B.y, 1}; + for (int i = 1; i < world.size(); i++) world.send(i, 0, send_data.data(), 5); + + std::vector ans = getMinAngleMPI(reg_x, reg_y, B, local_input_, f); + C = local_input_[(size_t)ans[0]]; + min_angle = ans[1]; + sz = (size_t)ans[2]; + for (int i = 1; i < world.size(); i++) { + world.recv(i, 0, send0_data.data(), 3); + if (send0_data[0] < min_angle) { + C.x = (int)send0_data[1]; + C.y = (int)send0_data[2]; + } + } + + res_.push_back(B.y); + res_.push_back(B.x); + A = B; + B = C; + reg_x = A.x - (B.x); + reg_y = -(A.y - B.y); + f = true; + } while (first != B); + send_data[4] = 0; + for (int i = 1; i < world.size(); i++) world.send(i, 0, send_data.data(), 5); + } + +\end{lstlisting} + + +\begin{lstlisting}[language=C++, caption=Распрараллеливание Процесс 0:, label=lst:example] + if (rank == 0) { + B = Point(input_[input_.size() - 2], input_[input_.size() - 1]); + Point A = Point(-1, -1); + int j = input_.size() - 3; + while (input_[j] == B.y) { + B.x = input_[j - 1]; + j -= 2; + } + Point first = B; + + reg_x = -1; + reg_y = 0; + + std::vector send_data = {reg_x, reg_y, B.x, B.y, active}; + std::vector send0_data(3); + do { + double min_angle = 1000; + send_data = {reg_x, reg_y, B.x, B.y, 1}; + for (int i = 1; i < world.size(); i++) world.send(i, 0, send_data.data(), 5); + std::vector ans = getMinAngleMPI(reg_x, reg_y, B, local_input_, f); + C = local_input_[(size_t)ans[0]]; + min_angle = ans[1]; + sz = (size_t)ans[2]; + for (int i = 1; i < world.size(); i++) { + world.recv(i, 0, send0_data.data(), 3); + if (send0_data[0] < min_angle) { + C.x = (int)send0_data[1]; + C.y = (int)send0_data[2]; + } + } + + res_.push_back(B.y); + res_.push_back(B.x); + A = B; + B = C; + reg_x = A.x - (B.x); + reg_y = -(A.y - B.y); + f = true; + } while (first != B); + send_data[4] = 0; + for (int i = 1; i < world.size(); i++) world.send(i, 0, send_data.data(), 5); + } + +\end{lstlisting} + + +\begin{lstlisting}[language=C++, caption=Распрараллеливание Процесс не 0:, label=lst:example] + + if (rank != 0) { + std::vector send_data(5); + std::vector send0_data(3); + while (active == 1) { + world.recv(0, 0, send_data.data(), 5); + active = send_data[4]; + if (active != 1) return true; + if (sz <= 0) { + send0_data = {10000, -1, -1}; + world.send(0, 0, send0_data.data(), 3); + continue; + } + B.x = send_data[2]; + B.y = send_data[3]; + double min_angle = 5000; + std::vector ans = getMinAngleMPI(send_data[0], send_data[1], B, local_input_, f); + f = true; + size_t itr = ans[0]; + C = local_input_[itr]; + min_angle = ans[1]; + sz = (size_t)ans[2]; + send0_data = {min_angle, (double)C.x, (double)C.y}; + world.send(0, 0, send0_data.data(), 3); + } + } +\end{lstlisting} + + +\section{Валидация} +\hspace{1cm}{ +Чтобы построить оболочку есть несколько условий, а именно: точек должно быть больше двух, точки не должны стоять на одной прямой. +} + +\section{Препроцессинг} +\hspace{1cm}{В препроцессинге я прохожусь по картинке-массиву, записываю только координаты x и y всех найденных точек, точками считаю все, что не белое, то есть имеет значение отличное от 255.} + + +\section{Работа} +\hspace{1cm}{Работа seq версии заключается в применении алгоритма, описанного выше. Работа mpi версии заключается в изначальном разделении работы (пункт распараллеливания работы), а после в каждом процессе применении алгоритма, описанного выше.} +\section{Постпроцессинг} +\hspace{1cm}{В постпроцессинге записываются точки, через которые проведена оболочка в соответственном порядке, в данном случае порядок необходимо сохранить, иначе оболочка будет совершенно другой. Также я записываю длину вывода.} + +\section{Результат} +\hspace{1cm} Результат вышел таким (его нет в git, из-за ограничения по времени менее 1s)\\ +\begin{table}[h] + \centering + \caption{Результаты теста для метода pipeline} + \begin{tabular}{@{}ll@{}} + \toprule + \textbf{Метод seq} & \textbf{Метод mpi} \\ + \midrule + 1) 1,621302200 & 1) 0,836826 \\ + 2) 1,1716390 & 2) 0,889073900 \\ + 3) 1,1539773 & 3) 0,9007 \\ + \bottomrule + \end{tabular} +\end{table} +\begin{table}[h] + \centering + \caption{Результаты теста} + \begin{tabular}{@{}ll@{}} + \toprule + \textbf{Метод seq} & \textbf{Метод mpi} \\ + \midrule + 1) 39,1089 & 1) 17,5670 \\ + 2) 30,7824 & 2) 17,4288 \\ + 3) 29,5636 & 3) 19,7248 \\ + \bottomrule + \end{tabular} +\end{table} + +\section{Вывод} +\hspace{1cm}{Существенное увеличение эффективности mpi версии видно с увеличением кол-ва данных. Я считаю, что я молодец и поставленная цель выполнена.} +\section{Литература} +\hspace{1cm} https://habr.com/ru/articles/144921/ +https://www.youtube.com/watch?v=B2AJoQSZf4M +\section{Приложение} +Код +\begin{lstlisting}[language=C++, caption=КОД:, label=lst:example] +#include "mpi/vladimirova_j_jarvis_method/include/ops_mpi.hpp" + +#include +#include +#include +#include + +using namespace std::chrono_literals; +using namespace vladimirova_j_jarvis_method_mpi; + +namespace vladimirova_j_jarvis_method_mpi { +double getAngle(int reg_x, int reg_y, Point B, Point C) { + if (C.x < 0) return 1000; + if ((B.x == C.x) && (B.y == C.y)) return 1000; + int tmp_x = (C.x - B.x); + int tmp_y = -(C.y - B.y); + if (reg_x * tmp_y - reg_y * tmp_x > 0) return 1000; + double BA_length = sqrt(reg_x * reg_x + reg_y * reg_y); + double BC_length = sqrt(tmp_x * tmp_x + tmp_y * tmp_y); + double length = BA_length * BC_length; + double angle = tmp_x * reg_x + tmp_y * reg_y; + if (length == 0) + angle = 0; + else + angle = angle / (length); + return angle; +} +std::vector getMinAngleMPI(int reg_x, int reg_y, Point B, std::vector& vec, bool f) { + size_t min_angle_point = vec.size() + 1; + double min_angle = 550; + size_t sz = 0; + for (size_t i = 0; i < vec.size(); i++) { + if (f && (vec[i] == B)) { + vec[i].x = -1; + vec[i].y = -1; + continue; + } + if (vec[i].x < 0) continue; + double angle = getAngle(reg_x, reg_y, B, vec[i]); + if (angle < min_angle) { + min_angle = angle; + min_angle_point = i; + } + sz++; + } + return {(double)min_angle_point, min_angle, (double)sz}; +} + +size_t FindMinAngle(Point* A, Point* B, std::vector vec) { + size_t min_angle_point = vec.size() + 1; + double min_angle = 550; + int reg_x = A->x - (B->x); + int reg_y = -(A->y - B->y); + for (size_t i = 0; i < vec.size(); i++) { + Point* C = &vec[i]; + if (C->x < 0) continue; + if ((A->x == C->x) && (A->y == C->y)) continue; + if ((B->x == C->x) && (B->y == C->y)) continue; + int tmp_x = (C->x - B->x); + int tmp_y = -(C->y - B->y); + if (reg_x * tmp_y - reg_y * tmp_x <= 0) { + double BA_length = sqrt(reg_x * reg_x + reg_y * reg_y); + double BC_length = sqrt(tmp_x * tmp_x + tmp_y * tmp_y); + double length = BA_length * BC_length; + double angle = tmp_x * reg_x + tmp_y * reg_y; + if (length == 0) + angle = 0; + else + angle = angle / (length); + if (angle < min_angle) { + min_angle = angle; + min_angle_point = i; + } + } + } + + return min_angle_point; +} +} // namespace vladimirova_j_jarvis_method_mpi + +bool vladimirova_j_jarvis_method_mpi::TestMPITaskSequential::pre_processing() { + internal_order_test(); + input_ = std::vector(); + col = (size_t)taskData->inputs_count[1]; + row = (size_t)taskData->inputs_count[0]; + auto* tmp_ptr = reinterpret_cast(taskData->inputs[0]); + for (size_t i = 0; i < col * row; i++) { + if (tmp_ptr[i] != 255) { + input_.emplace_back((int)(i % col), (int)(i / col)); + } + } + return true; +} + +bool vladimirova_j_jarvis_method_mpi::TestMPITaskSequential::validation() { + internal_order_test(); + // Check count elements of output + size_t row_i = taskData->inputs_count[0]; + size_t col_i = taskData->inputs_count[1]; + if (row_i <= 1 || col_i <= 1 || taskData->outputs_count[0] <= 0) return false; + auto* tmp_ptr = reinterpret_cast(taskData->inputs[0]); + size_t c = 0; + int one_row = -1; + int one_col = -1; + for (size_t i = 0; i < row_i * col_i; i++) { + if (tmp_ptr[i] != 255) { + c++; + if (one_row == -1) + one_row = i / row_i; + else if ((one_row != -2) && (one_row != (int)(i / row_i))) + one_row = -2; + + if (one_col == -1) + one_col = i % row_i; + else if ((one_col != -2) && (one_col != (int)(i % row_i))) + one_col = -2; + } + if ((one_row == -2) && (one_col == -2) && (c > 2)) return true; + } + return ((c > 2) && (one_row == -2) && (one_col == -2)); +} + +bool vladimirova_j_jarvis_method_mpi::TestMPITaskSequential::run() { + internal_order_test(); + Point* A = &input_[input_.size() - 1]; + for (size_t i = input_.size() - 1; i >= 0; i--) { + if (A->y != input_[i].y) break; + A = &input_[i]; + } + Point* first = A; + Point tmp = Point(-1, A->y); + + Point* B = A; + A = &tmp; + res_ = std::vector(); + do { + size_t i = FindMinAngle(A, B, input_); + if (A != first) { + A->x = -1; + A->y = -1; + } + A = B; + res_.push_back(A->y); + res_.push_back(A->x); + B = &input_[i]; + + } while (B != first); + + return true; +} + +bool vladimirova_j_jarvis_method_mpi::TestMPITaskSequential::post_processing() { + internal_order_test(); + taskData->outputs_count[0] = res_.size(); + auto* output_data = reinterpret_cast(taskData->outputs[0]); + std::copy(res_.begin(), res_.end(), output_data); + return true; +} + +bool vladimirova_j_jarvis_method_mpi::TestMPITaskParallel::pre_processing() { + internal_order_test(); + if (world.rank() == 0) { + col = (size_t)taskData->inputs_count[1]; + row = (size_t)taskData->inputs_count[0]; + } + broadcast(world, col, 0); + broadcast(world, row, 0); + if (world.rank() != 0) return true; + + input_ = std::vector(); + + auto* tmp_ptr = reinterpret_cast(taskData->inputs[0]); + for (size_t i = 0; i < col * row; i++) { + if (tmp_ptr[i] != 255) { + input_.push_back((int)(i % col)); + input_.push_back((int)(i / col)); + } + } + res_.clear(); + return true; +} + +bool vladimirova_j_jarvis_method_mpi::TestMPITaskParallel::validation() { + internal_order_test(); + if (world.rank() == 0) { + size_t row_i = taskData->inputs_count[0]; + size_t col_i = taskData->inputs_count[1]; + if (row_i <= 1 || col_i <= 1 || taskData->outputs_count[0] <= 0) return false; + auto* tmp_ptr = reinterpret_cast(taskData->inputs[0]); + size_t c = 0; + int one_row = -1; + int one_col = -1; + for (size_t i = 0; i < row_i * col_i; i++) { + if (tmp_ptr[i] != 255) { + c++; + if (one_row == -1) + one_row = i / row_i; + else if ((one_row != -2) && (one_row != (int)(i / row_i))) + one_row = -2; + + if (one_col == -1) + one_col = i % row_i; + else if ((one_col != -2) && (one_col != (int)(i % row_i))) + one_col = -2; + } + if ((one_row == -2) && (one_col == -2) && (c > 2)) return true; + } + std::cout << "SOME" << std::endl; + return ((c > 2) && (one_row == -2) && (one_col == -2)); + } + return true; +} + +bool vladimirova_j_jarvis_method_mpi::TestMPITaskParallel::run() { + internal_order_test(); + + int rank = world.rank(); + int delta = ((input_.size() / 2) / world.size()) * 2; + int ost_point = (input_.size() - delta * world.size()) / 2; + broadcast(world, delta, 0); + broadcast(world, ost_point, 0); + if (rank == 0) { + if (world.size() != 1) { + for (int i = 1; i < ost_point; i++) { + world.send(i, 0, input_.data() + i * (delta) + i * 2, delta + 2); + } + for (int i = ost_point + (int)(ost_point == 0); i < world.size(); i++) { + int sdvig = ost_point * 2; + world.send(i, 0, input_.data() + i * (delta) + sdvig, delta); + } + if (ost_point > 0) delta += 2; + } + } else { + delta += 2 * (int)(rank < ost_point); + input_ = std::vector(delta); + world.recv(0, 0, input_.data(), delta); + } + + local_input_ = std::vector(delta / 2); + + for (int i = 0; i < delta; i += 2) { + local_input_[i / 2] = (Point(input_[i], input_[i + 1])); + } + + Point B = Point(-1, -1); + Point C = Point(-1, -1); + int reg_x; + int reg_y; + int active = 1; + size_t sz = local_input_.size(); + bool f = false; + if (rank == 0) { + B = Point(input_[input_.size() - 2], input_[input_.size() - 1]); + Point A = Point(-1, -1); + int j = input_.size() - 3; + while (input_[j] == B.y) { + B.x = input_[j - 1]; + j -= 2; + } + Point first = B; + + reg_x = -1; + reg_y = 0; + std::vector send_data = {reg_x, reg_y, B.x, B.y, active}; + std::vector send0_data(3); + do { + double min_angle = 1000; + send_data = {reg_x, reg_y, B.x, B.y, 1}; + for (int i = 1; i < world.size(); i++) world.send(i, 0, send_data.data(), 5); + std::vector ans = getMinAngleMPI(reg_x, reg_y, B, local_input_, f); + C = local_input_[(size_t)ans[0]]; + min_angle = ans[1]; + sz = (size_t)ans[2]; + for (int i = 1; i < world.size(); i++) { + world.recv(i, 0, send0_data.data(), 3); + if (send0_data[0] < min_angle) { + C.x = (int)send0_data[1]; + C.y = (int)send0_data[2]; + } + } + + res_.push_back(B.y); + res_.push_back(B.x); + A = B; + B = C; + reg_x = A.x - (B.x); + reg_y = -(A.y - B.y); + f = true; + } while (first != B); + send_data[4] = 0; + for (int i = 1; i < world.size(); i++) world.send(i, 0, send_data.data(), 5); + } + + if (rank != 0) { + std::vector send_data(5); + std::vector send0_data(3); + while (active == 1) { + world.recv(0, 0, send_data.data(), 5); + active = send_data[4]; + if (active != 1) return true; + if (sz <= 0) { + send0_data = {10000, -1, -1}; + world.send(0, 0, send0_data.data(), 3); + continue; + } + B.x = send_data[2]; + B.y = send_data[3]; + double min_angle = 5000; + std::vector ans = getMinAngleMPI(send_data[0], send_data[1], B, local_input_, f); + f = true; + size_t itr = ans[0]; + C = local_input_[itr]; + min_angle = ans[1]; + sz = (size_t)ans[2]; + send0_data = {min_angle, (double)C.x, (double)C.y}; + world.send(0, 0, send0_data.data(), 3); + } + } + return true; +} + +bool vladimirova_j_jarvis_method_mpi::TestMPITaskParallel::post_processing() { + internal_order_test(); + if (world.rank() == 0) { + taskData->outputs_count[0] = res_.size(); + auto* output_data = reinterpret_cast(taskData->outputs[0]); + std::copy(res_.begin(), res_.end(), output_data); + res_.clear(); + return true; + } + return true; +} + +\end{lstlisting} +\end{document}