diff --git a/report/img/task1-cuda-node.png b/report/img/task1-cuda-node.png new file mode 100644 index 0000000..a7e2c2d Binary files /dev/null and b/report/img/task1-cuda-node.png differ diff --git a/report/img/task1-cuda-run.png b/report/img/task1-cuda-run.png new file mode 100644 index 0000000..be8bf2e Binary files /dev/null and b/report/img/task1-cuda-run.png differ diff --git a/report/img/task1-cuda-sacct.png b/report/img/task1-cuda-sacct.png new file mode 100644 index 0000000..c94ec05 Binary files /dev/null and b/report/img/task1-cuda-sacct.png differ diff --git a/report/img/task1-gflops-comparison.png b/report/img/task1-gflops-comparison.png new file mode 100644 index 0000000..770efb5 Binary files /dev/null and b/report/img/task1-gflops-comparison.png differ diff --git a/report/img/task1-intel-run.png b/report/img/task1-intel-run.png new file mode 100644 index 0000000..4dbb803 Binary files /dev/null and b/report/img/task1-intel-run.png differ diff --git a/report/img/task1-intel-sacct.png b/report/img/task1-intel-sacct.png new file mode 100644 index 0000000..90290cb Binary files /dev/null and b/report/img/task1-intel-sacct.png differ diff --git a/report/img/task1-login.png b/report/img/task1-login.png new file mode 100644 index 0000000..b6f5b5f Binary files /dev/null and b/report/img/task1-login.png differ diff --git a/report/img/task1-time-comparison.png b/report/img/task1-time-comparison.png new file mode 100644 index 0000000..0dcac14 Binary files /dev/null and b/report/img/task1-time-comparison.png differ diff --git a/report/report.tex b/report/report.tex index 57222b1..2846300 100755 --- a/report/report.tex +++ b/report/report.tex @@ -55,17 +55,7 @@ \newcommand{\specialcell}[2][l]{\begin{tabular}[#1]{@{}l@{}}#2\end{tabular}} \newcommand{\imgplaceholder}[2][0.9\textwidth]{% - \IfFileExists{#2}{% - \includegraphics[width=#1]{#2}% - }{% - \fbox{% - \parbox[c][0.22\textheight][c]{0.82\textwidth}{% - \centering - Заглушка для изображения\\ - \texttt{#2}% - }% - }% - }% + \includegraphics[width=#1]{#2}% } @@ -197,9 +187,8 @@ Все вычислительные эксперименты проводились на вычислительном кластере Суперкомпьютерного центра Политехнического университета (СКЦ Политехнический). Доступ к вычислительным ресурсам осуществлялся через удалённое подключение по протоколу SSH. Для выполнения экспериментов использовалась учётная запись \texttt{tm3u21}, вход на кластер производился через узел доступа \texttt{login1.hpc.spbstu.ru}. -Полученные в ходе работы результаты позволяют оценить влияние различных технологий параллельных вычислений на производительность алгоритмов решения вычислительных задач и сравнить эффективность использования различных вычислительных архитектур. - +\newpage \section{Задача 1} \subsection{Постановка задачи} @@ -212,7 +201,15 @@ \item сравнить результаты собственной программы и стандартного Intel LINPACK. \end{enumerate} -В данной работе все скриншоты и вычислительные эксперименты выполнялись под учётной записью \texttt{tm3u21}. Этот логин должен быть виден на скриншоте входа в систему и на терминальных снимках, приложенных к отчёту. +\begin{lstlisting}[caption={Фрагмент файла \texttt{\~{}/.ssh/config}}, label={lst:ssh-config}] +Host polytech + HostName login1.hpc.spbstu.ru + User tm3u21 + IdentityFile ~/.ssh/09 + ForwardAgent yes +\end{lstlisting} + +Для подключения к СКЦ Политехнический в файл \texttt{\~{}/.ssh/config} была добавлена запись, приведённая в листинге~\ref{lst:ssh-config}. После этого вход на кластер выполнялся командой \texttt{ssh polytech}. Подтверждение входа под учётной записью \texttt{tm3u21} приведено на рис.~\ref{fig:task1-login}. \subsection{Математическое описание} @@ -261,106 +258,69 @@ \end{itemize} Такой вариант не является буквальной реализацией классического LU-LINPACK, однако решает ту же прикладную задачу --- измерение производительности при решении плотной СЛАУ --- и позволяет исследовать эффективность распараллеливания на GPU. +Полный текст исходного кода CUDA-реализации приведён в приложении А. \subsection{Сборка и запуск} -Подготовленные файлы для выполнения задания расположены в каталоге \texttt{task1/}. Сборка и запуск на СКЦ выполняются по шагам: +Подготовленные файлы для выполнения задания были размещены в каталоге \texttt{/home/ipmmstudy1/tm3u21/supercomputers/task1}. Запуск собственной CUDA-реализации выполнялся пакетным файлом \texttt{task1/scripts/run\_cuda.slurm}, который загружал модули \texttt{compiler/gcc/11} и \texttt{nvidia/cuda/11.6u2}, собирал программу через \texttt{nvcc} и запускал серию вычислительных экспериментов. Полный текст данного файла приведён в приложении Б. -\begin{lstlisting} -scp -r task1 polytech:~/supercomputers/ -ssh polytech -cd ~/supercomputers/task1 -sbatch scripts/run_cuda.slurm -\end{lstlisting} +Эталонный CPU-вариант Intel LINPACK запускался из архива Intel oneMKL Benchmarks Suite for Linux, предварительно распакованного в каталог \\ \texttt{/home/ipmmstudy1/tm3u21/LINPACK}. В результате файл \texttt{xlinpack\_xeon64} был получен по пути \texttt{LINPACK/benchmarks\_2025.3/linux/share/mkl/benchmarks/linpack}. Для запуска использовался пакетный файл \texttt{task1/scripts/run\_intel\_linpack.slurm}, полный текст которого приведён в приложении В. -Скрипт \texttt{scripts/run\_cuda.slurm} автоматически: -\begin{itemize} - \item загружает модули \texttt{compiler/gcc/11} и \texttt{nvidia/cuda/11.6u2}; - \item собирает программу через \texttt{nvcc}; - \item печатает в лог данные учётной записи, имя узла, дату, параметры Slurm и конфигурацию узла; - \item запускает набор экспериментов и сохраняет CSV с численными результатами. -\end{itemize} - -Для запуска эталонного CPU-варианта Intel LINPACK используется отдельный пакетный скрипт: -\begin{lstlisting} -скачать архив Intel oneMKL Benchmarks Suite for Linux с официального сайта Intel -scp linpack.tgz polytech:~/linpack.tgz -ssh polytech -mkdir -p ~/LINPACK -tar -xzf ~/linpack.tgz -C ~/LINPACK -find ~/LINPACK -name xlinpack_xeon64 2>/dev/null -cd <каталог_с_xlinpack_xeon64> -mkdir -p stdio -chmod +x * -chmod -x *.* -cd ~/supercomputers/task1 -sbatch --export=ALL,LINPACK_DIR=<каталог_с_xlinpack_xeon64> \ - /home/ipmmstudy1/tm3u21/supercomputers/task1/scripts/run_intel_linpack.slurm -\end{lstlisting} - -При этом в пакетном сценарии используется собственный входной файл \texttt{task1/intel/lininput\_report\_xeon64}, в котором заданы те же размеры задач, что и для CUDA-реализации: $1000$, $1500$, $2000$, $2500$, $3000$, $3500$. Это позволяет напрямую перенести результаты Intel LINPACK в сравнительную таблицу. - -Сведения о завершённых заданиях рекомендуется получать командой: -\begin{lstlisting} -sacct -j --format=JobID,JobName,Partition,State,Start,End,Elapsed,NNodes,AllocTRES%40,NodeList,ExitCode -\end{lstlisting} - -Именно эти данные затем используются в отчёте как подтверждение времени выполнения, количества задействованных узлов и их идентификаторов. +Для Intel LINPACK был подготовлен отдельный входной файл \texttt{lininput\_report\_xeon64}, в котором зафиксированы те же размеры задач, что и для CUDA-реализации: $1000$, $1500$, $2000$, $2500$, $3000$, $3500$. Полный текст этого файла приведён в приложении Г. \subsection{Результаты эксперимента} -Для корректного оформления отчёта необходимо приложить скриншоты, подтверждающие, что эксперименты выполнялись именно в учётной записи \texttt{tm3u21}. В подготовленном шаблоне отчёта для этого предусмотрены следующие изображения: -\begin{itemize} - \item скрин входа в систему с командами \texttt{whoami}, \texttt{hostname}, \texttt{date}; - \item скрин конфигурации узла и GPU из лога CUDA-задания; - \item скрин таблицы результатов собственной CUDA-реализации; - \item скрин \texttt{sacct} для CUDA-задания; - \item скрин запуска и итогов Intel LINPACK; - \item скрин \texttt{sacct} для Intel LINPACK. -\end{itemize} - \begin{figure}[H] \centering \imgplaceholder{img/task1-login.png} \caption{Подключение к СКЦ Политехнический под учётной записью \texttt{tm3u21}} + \label{fig:task1-login} \end{figure} \begin{figure}[H] \centering \imgplaceholder{img/task1-cuda-node.png} \caption{Конфигурация узла и графического ускорителя, использованных для CUDA-эксперимента} + \label{fig:task1-cuda-node} \end{figure} \begin{figure}[H] \centering \imgplaceholder{img/task1-cuda-run.png} - \caption{Вывод собственной CUDA-реализации теста} + \caption{Терминальный вывод собственной CUDA-реализации теста} + \label{fig:task1-cuda-run} \end{figure} \begin{figure}[H] \centering \imgplaceholder{img/task1-cuda-sacct.png} \caption{Сведения Slurm о выполнении собственной CUDA-реализации} + \label{fig:task1-cuda-sacct} \end{figure} \begin{figure}[H] \centering \imgplaceholder{img/task1-intel-run.png} - \caption{Запуск и результаты стандартного Intel LINPACK} + \caption{Терминальный вывод стандартного Intel LINPACK} + \label{fig:task1-intel-run} \end{figure} \begin{figure}[H] \centering \imgplaceholder{img/task1-intel-sacct.png} \caption{Сведения Slurm о выполнении Intel LINPACK} + \label{fig:task1-intel-sacct} \end{figure} Для сравнения были использованы два фактических запуска на СКЦ Политехнический: собственная CUDA-реализация (задание \texttt{6616336}, узел \texttt{n02p009}, раздел \texttt{tornado-k40}) и стандартный Intel LINPACK (задание \texttt{6616818}, узел \texttt{n01p090}, раздел \texttt{tornado}). Для Intel LINPACK использовался отдельный входной файл, содержащий те же размеры задач, что и в CUDA-реализации. +Подключение к кластеру под учётной записью \texttt{tm3u21} показано на рис.~\ref{fig:task1-login}. Конфигурация вычислительного узла и графических ускорителей, задействованных при CUDA-эксперименте, приведена на рис.~\ref{fig:task1-cuda-node}. Терминальный вывод собственной CUDA-реализации и сведения Slurm о её выполнении приведены на рис.~\ref{fig:task1-cuda-run} и рис.~\ref{fig:task1-cuda-sacct}. Аналогичные материалы для эталонного CPU-запуска Intel LINPACK приведены на рис.~\ref{fig:task1-intel-run} и рис.~\ref{fig:task1-intel-sacct}. + Численные результаты сведены в таблицу \ref{tab:task1-results}. Для столбцов CUDA использованы значения из файла \texttt{results/task1-cuda-6616336.csv}. Для Intel LINPACK в таблицу внесены минимальное время из серии прогонов и максимальная производительность из секции \texttt{Performance Summary}. \begin{table}[H] \centering + \small \caption{Сравнение собственной CUDA-реализации и Intel LINPACK} \label{tab:task1-results} \begin{tabular}{cccccccc} @@ -377,6 +337,22 @@ sacct -j --format=JobID,JobName,Partition,State,Start,End,Elapsed,NNode \end{tabular} \end{table} +\begin{figure}[H] + \centering + \imgplaceholder{img/task1-time-comparison.png} + \caption{Сравнение времени решения эталонной и собственной реализаций} + \label{fig:task1-time-comparison} +\end{figure} + +\begin{figure}[H] + \centering + \imgplaceholder{img/task1-gflops-comparison.png} + \caption{Сравнение производительности эталонной и собственной реализаций} + \label{fig:task1-gflops-comparison} +\end{figure} + +Графическое сравнение времени решения приведено на рис.~\ref{fig:task1-time-comparison}, а сравнение достигнутой производительности --- на рис.~\ref{fig:task1-gflops-comparison}. Скрипт, использованный для построения этих графиков, приведён в приложении Д. + По полученным результатам можно сделать следующие наблюдения: \begin{itemize} \item все тестовые случаи для размеров от $1000$ до $3500$ успешно сошлись за $5$--$6$ итераций; @@ -390,11 +366,12 @@ sacct -j --format=JobID,JobName,Partition,State,Start,End,Elapsed,NNode В рамках первого задания была подготовлена собственная CUDA-реализация LINPACK-подобного теста для решения плотной СЛАУ методом Якоби. Программа поддерживает запуск серии экспериментов, измерение времени выполнения, оценку производительности в GFLOPS, а также вычисление невязки и ошибки относительно известного точного решения. -Дополнительно были подготовлены сценарии пакетного запуска на СКЦ Политехнический: отдельный скрипт для собственной CUDA-реализации и отдельный скрипт для стандартного Intel LINPACK. Это позволяет провести воспроизводимое сравнение двух подходов и получить необходимые для отчёта доказательства выполнения работы: логин пользователя, конфигурацию узла, время выполнения и число задействованных узлов. +Дополнительно были подготовлены пакетные файлы запуска для собственной CUDA-реализации и для стандартного Intel LINPACK. Полные тексты этих файлов приведены в приложениях Б и В. На текущем этапе можно зафиксировать, что собственная CUDA-реализация корректно работает на узле \texttt{tornado-k40}, обеспечивает сходимость на всём исследованном диапазоне размеров и достигает производительности до $1920.138$ GFLOPS. В сопоставлении со стандартным Intel LINPACK на CPU она показывает меньшее время решения на всех исследованных размерах: ускорение возрастает от $2.00$ при $N = 1000$ до $6.72$ при $N = 3500$, а достигнутая производительность существенно выше во всём рассмотренном диапазоне. +\newpage \section{Задача 2} \subsection{Постановка задачи} @@ -406,5 +383,35 @@ sacct -j --format=JobID,JobName,Partition,State,Start,End,Elapsed,NNode \newpage \printbibliography[heading=bibintoc] +\newpage +\section*{Приложение А} +\addcontentsline{toc}{section}{Приложение А} +\label{app:task1-cuda-source} +\lstinputlisting[caption={Файл \texttt{task1/src/main.cu}}, label={lst:task1-main}]{../task1/src/main.cu} + +\newpage +\section*{Приложение Б} +\addcontentsline{toc}{section}{Приложение Б} +\label{app:task1-cuda-slurm} +\lstinputlisting[caption={Файл \texttt{task1/scripts/run\_cuda.slurm}}, label={lst:task1-cuda-slurm}]{../task1/scripts/run_cuda.slurm} + +\newpage +\section*{Приложение В} +\addcontentsline{toc}{section}{Приложение В} +\label{app:task1-intel-slurm} +\lstinputlisting[caption={Файл \texttt{task1/scripts/run\_intel\_linpack.slurm}}, label={lst:task1-intel-slurm}]{../task1/scripts/run_intel_linpack.slurm} + +\newpage +\section*{Приложение Г} +\addcontentsline{toc}{section}{Приложение Г} +\label{app:task1-intel-input} +\lstinputlisting[caption={Файл \texttt{task1/intel/lininput\_report\_xeon64}}, label={lst:task1-intel-input}]{../task1/intel/lininput_report_xeon64} + +\newpage +\section*{Приложение Д} +\addcontentsline{toc}{section}{Приложение Д} +\label{app:task1-plot-script} +\lstinputlisting[caption={Файл \texttt{task1/scripts/plot\_task1\_results.py}}, label={lst:task1-plot-script}]{../task1/scripts/plot_task1_results.py} + \end{document} diff --git a/task1.md b/task1.md new file mode 100644 index 0000000..668e52c --- /dev/null +++ b/task1.md @@ -0,0 +1,60 @@ + +# Задание 1 +## Постановка задачи +В рамках данной работы необходимо: +### 1. Изучить методы определения производительности вычислительных систем. +### 2. Разработать собственную реализацию теста LINPACK, применив уникальный метод распараллеливания вычислений. +### 3. С помощью собственной реализации и стандартного теста LINPACK исследовать производительность узла СКЦ .Политехнический. + +Математическое описание +### 2.1 Задача решения СЛАУ +Дано: +a11x1 + a12x2 + ・ ・ ・ + a1nxN = b1 +a21x1 + a22x2 + ・ ・ ・ + a2nxN = b2 +. . . +aN1x1 + am2x2 + ・ ・ ・ + amnxN = bN +Ax = b — система N линейных уравнений с N неизвестными, где: +– A — матрица N × N коэффициентов +– x — вектор N неизвестных +– b — вектор N свободных членов уравнений +Найти: +Элементы вектора x, при которых |Ax − b| ≤ ϵ, где ϵ — точность найденного +решения. +Численные методы решения СЛАУ +Для решения СЛАУ применяют в основном два класса методов: прямые (выполняемые за заранее известное количество действий) и итерационные (обеспечивающие постепенную сходимость к корню уравнения, зависящую от многих +факторов). +### 2.2.1 Прямые методы +Прямые методы используют конечные соотношения (формулы) для вычисления неизвестных. К ним относятся: метод Гаусса, Крамера, метод прогонки и др. +Достоинства: +– дают решение после выполнения заранее известного числа операций +– сравнительно просты и наиболее универсальны (пригодны для решения широкого класса линейных систем). +Недостатки: +– необходимость хранения в оперативной памяти компьютера сразу всей матрицы, +– накапливание погрешностей в процессе решения. +В связи с этим прямые методы используют обычно для не слишком больших +(N ≤ 200) систем с плотно заполненной матрицей и не близким к нулю определителем. Для больших N используются итерационные методы. +### 2.2.2 Итерационные методы +Итерационные методы – это методы последовательных приближений. Среди +них: метод Якоби, метод Гаусса-Зейделя и др. +В итерационных методах необходимо задать некоторое приближённое решение – начальное приближение. После этого с помощью некоторого алгоритма +проводится один цикл вычислений, называемый итерацией. В результате итерации находят новое приближение. Итерации проводятся до получения решения с +требуемой точностью. +### 2.3 Метод Якоби +Пусть требуется численно решить систему линейных уравнений: +a11x1 + . . . + a1nxn = b1 +. . . +an1x1 + . . . + annxn = bn +Предполагается, что aii ̸= 0, i ∈ {1, . . . , n} (иначе метод Якоби неприменим). +Выразим x1 через первое уравнение, x2 — через второе и т.д.: +В методе Якоби последовательность приближений x(k) строится следующим +образом. Выбирается первое приближение x(0), формула для остальных приближений имеет вид: + + +Постановка эксперимента + +(Произведено исследование производительности с помощью реализации теста +от Intel - Intel High Performance Linpack, - и собственной реализации на CUDA. +Тестирование производилось для набора значений N от 1000 до 15000.) + + + diff --git a/task1/.gitignore b/task1/.gitignore index 9b23ed1..621f5c5 100644 --- a/task1/.gitignore +++ b/task1/.gitignore @@ -2,3 +2,4 @@ bin/ results/*.out results/*.err results/*.csv +*.pyc \ No newline at end of file diff --git a/task1/README.md b/task1/README.md index 05195f9..6356346 100644 --- a/task1/README.md +++ b/task1/README.md @@ -103,15 +103,13 @@ tar -xzf ~/linpack.tgz -C ~/LINPACK find ~/LINPACK -name xlinpack_xeon64 2>/dev/null ``` -Если команда вернёт, например, путь -`/home/ipmmstudy1/tm3u21/LINPACK/benchmarks/linpack/xlinpack_xeon64`, -то нужный каталог для запуска: -`/home/ipmmstudy1/tm3u21/LINPACK/benchmarks/linpack`. +В вашем случае по логам нужный каталог уже известен: +`/home/ipmmstudy1/tm3u21/LINPACK/benchmarks_2025.3/linux/share/mkl/benchmarks/linpack`. 6. Подготовь этот каталог, как в примере: ```bash -cd <НУЖНЫЙ_КАТАЛОГ_С_XLINPACK> +cd /home/ipmmstudy1/tm3u21/LINPACK/benchmarks_2025.3/linux/share/mkl/benchmarks/linpack mkdir -p stdio chmod +x * chmod -x *.* @@ -121,7 +119,7 @@ chmod -x *.* ```bash cd ~/supercomputers/task1 -sbatch --export=ALL,LINPACK_DIR=<НУЖНЫЙ_КАТАЛОГ_С_XLINPACK> scripts/run_intel_linpack.slurm +sbatch --export=ALL,LINPACK_DIR=/home/ipmmstudy1/tm3u21/LINPACK/benchmarks_2025.3/linux/share/mkl/benchmarks/linpack scripts/run_intel_linpack.slurm ``` По умолчанию скрипт использует файл `task1/intel/lininput_report_xeon64`, где уже зафиксированы размеры @@ -136,7 +134,7 @@ sacct -j --format=JobID,JobName,Partition,State,Start,End,Elapsed, 9. Посмотри вывод: ```bash -less <НУЖНЫЙ_КАТАЛОГ_С_XLINPACK>/stdio/task1-intel-linpack-.out +less ~/supercomputers/task1/stdio/task1-intel-linpack-.out ``` В этом файле ищи строки с размерами `1000`, `1500`, `2000`, `2500`, `3000`, `3500`, а внизу --- секцию `Performance Summary`. diff --git a/task1/scripts/plot_task1_results.py b/task1/scripts/plot_task1_results.py new file mode 100644 index 0000000..ddc1e8b --- /dev/null +++ b/task1/scripts/plot_task1_results.py @@ -0,0 +1,94 @@ +from __future__ import annotations + +from pathlib import Path + +import matplotlib.pyplot as plt + + +N_VALUES = [1000, 1500, 2000, 2500, 3000, 3500] + +CUDA_TIME_MS = [5.0083, 7.4931, 8.3563, 10.4837, 12.6709, 14.8861] +INTEL_TIME_S = [0.010, 0.020, 0.028, 0.042, 0.069, 0.100] +INTEL_TIME_MS = [value * 1000.0 for value in INTEL_TIME_S] + +CUDA_GFLOPS = [133.114, 300.277, 638.244, 993.608, 1420.573, 1920.138] +INTEL_GFLOPS = [67.331, 114.360, 193.276, 250.731, 260.451, 286.264] + + +def configure_plot() -> None: + plt.style.use("seaborn-v0_8-whitegrid") + plt.rcParams["figure.figsize"] = (8.4, 5.2) + plt.rcParams["figure.dpi"] = 140 + plt.rcParams["savefig.dpi"] = 220 + plt.rcParams["font.size"] = 11 + plt.rcParams["axes.labelsize"] = 11 + plt.rcParams["axes.titlesize"] = 12 + plt.rcParams["legend.fontsize"] = 10 + + +def plot_time(output_path: Path) -> None: + plt.figure() + plt.plot( + N_VALUES, + INTEL_TIME_MS, + marker="o", + linewidth=2.2, + color="#1f77b4", + label="Intel LINPACK", + ) + plt.plot( + N_VALUES, + CUDA_TIME_MS, + marker="s", + linewidth=2.2, + color="#d62728", + label="CUDA-реализация", + ) + plt.xlabel("Размер матрицы N") + plt.ylabel("Время решения, мс") + plt.title("Сравнение времени решения") + plt.legend(loc="upper left") + plt.tight_layout() + plt.savefig(output_path, bbox_inches="tight") + plt.close() + + +def plot_gflops(output_path: Path) -> None: + plt.figure() + plt.plot( + N_VALUES, + INTEL_GFLOPS, + marker="o", + linewidth=2.2, + color="#1f77b4", + label="Intel LINPACK", + ) + plt.plot( + N_VALUES, + CUDA_GFLOPS, + marker="s", + linewidth=2.2, + color="#d62728", + label="CUDA-реализация", + ) + plt.xlabel("Размер матрицы N") + plt.ylabel("Производительность, GFLOPS") + plt.title("Сравнение производительности") + plt.legend(loc="upper left") + plt.tight_layout() + plt.savefig(output_path, bbox_inches="tight") + plt.close() + + +def main() -> None: + configure_plot() + + output_dir = Path(__file__).resolve().parents[2] / "report" / "img" + output_dir.mkdir(parents=True, exist_ok=True) + + plot_time(output_dir / "task1-time-comparison.png") + plot_gflops(output_dir / "task1-gflops-comparison.png") + + +if __name__ == "__main__": + main() diff --git a/task2.md b/task2.md new file mode 100644 index 0000000..334eb21 --- /dev/null +++ b/task2.md @@ -0,0 +1,15 @@ +# задание 2 + +## Постановка задачи +В рамках данной лабораторной работы необходимо решить следующие задачи: +1. Изучить технологию межпроцессного взаимодействия MPI. +2. Разработать параллельный масштабируемый алгоритм для решения вычислительной задачи. +3. Реализовать разработанный алгоритм с использованием технологии MPI. +4. Исследовать производительность реализации на 1, 2 и 4-х узлах СКЦ .Политехнический.. +5. Сравнить время решения вычислительной задачи с использованием MPI и +CUDA. + + + + +Рис. 5: Зависимость времени вычисления от размера полигона P