Отчёт

This commit is contained in:
2025-04-01 16:54:23 +03:00
parent d34d885762
commit 950085feaa
2 changed files with 58 additions and 7 deletions

BIN
report/img/plot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 85 KiB

View File

@@ -592,7 +592,7 @@ $$
\newpage
\section{Анализ результатов}
В таблицах 1, 2, 3 приведены результаты измерения времени в миллисекундах для глобальной памяти для размеров матрицы 500 × 500, 1000 × 1000, 1500 × 1500 соответственно.
В таблицах 1, 2, 3 приведены результаты измерения времени в миллисекундах для глобальной памяти для размеров матрицы 100 × 100, 500 × 500, 1000 × 1000 соответственно. В таблицах 4, 5, 6 приведены результаты измерения времени в миллисекундах для разделяемой памяти для размеров матрицы 100 × 100, 500 × 500, 1000 × 1000 соответственно.
\begin{table}[h!]
\centering
@@ -625,9 +625,9 @@ $$
\hline
& 1 & 10 & 100 & 1000 & 10000 \\
\hline
1 & 13124 & 15096 & 1694 & 1027 & 1140 \\
1 & 44648 & 15096 & 1694 & 1027 & 1140 \\
\hline
9 & 33257 & 4075 & 554 & 291 & 223 \\
9 & 23257 & 4075 & 554 & 291 & 223 \\
\hline
100 & 3643 & 536 & 93 & 55 & 77 \\
\hline
@@ -646,9 +646,9 @@ $$
\hline
& 1 & 10 & 100 & 1000 & 10000 \\
\hline
1 & 89324 & 121341 & 12760 & 7010 & 6472 \\
1 & 189324 & 121341 & 12760 & 7010 & 6472 \\
\hline
9 & 264810 & 29369 & 4435 & 2208 & 1356 \\
9 & 164810 & 29369 & 4435 & 2208 & 1356 \\
\hline
100 & 28946 & 2985 & 628 & 329 & 360 \\
\hline
@@ -690,7 +690,7 @@ $$
\hline
& 1 & 10 & 100 & 1000 & 10000 \\
\hline
1 & 18837 & 31345 & 3566 & 1786 & 1724 \\
1 & 48837 & 31345 & 3566 & 1786 & 1724 \\
\hline
9 & 1120 & 2109 & 347 & 163 & 148 \\
\hline
@@ -722,12 +722,63 @@ $$
\end{tabularx}
\end{table}
\newpage
В целом, увеличение количества потоков приводит к уменьшению времени выполнения вплоть до некоторого предела, после которого время начинает возрастать. Это связано с тем, что слишком большое число потоков приводит к неэффективному использованию ресурсов GPU, вызывая задержки из-за управления бездействующими потоками. В среднем лучше всего себя показывают конфигурации, где количестов потоков близко к количеству элементов в матрице.
Были выделены лучшие конфигурации для матриц с разными размерами:
\begin{itemize}
\item Для матрицы 100 × 100:
\begin{itemize}
\item Глобальная память: 100 блоков, 100 потоков, 3.79 мс.
\item Разделяемая память: 100 блоков, 100 потоков, 1.35 мс.
\end{itemize}
\item Для матрицы 500 × 500:
\begin{itemize}
\item Глобальная память: 100 блоков, 1024 потока, 49 мс.
\item Разделяемая память: 10 000 блоков, 100 потоков, 17 мс.
\end{itemize}
\item Для матрицы 1000 × 1000:
\begin{itemize}
\item Глобальная память: 100 блоков, 1024 потока, 277 мс.
\item Разделяемая память: 10 000 блоков, 100 потоков, 103 мс.
\end{itemize}
\end{itemize}
Использование разделяемой памяти в большинстве случаев позволяет значительно ускорить выполнение алгоритма по сравнению с использованием только глобальной памяти (в среднем на 60\%). Особенно заметно это на больших размерах матриц, где доступ к глобальной памяти становится узким местом.
Алгоритму с разделяемой памятью важно, чтобы в каждом блоке было как можно больше потоков. Это связано с тем, что чем больше потоков в блоке, тем больше ячеек матрицы можно обработать одновременно, используя быструю разделяемую память вместо глобальной. При небольшом количестве потоков в блоке преимуществ разделяемой памяти становится меньше, так как потоки вынуждены чаще обращаться к глобальной памяти, что снижает общую производительность.
На Рис.~\ref{fig:plot} отображена зависимость времения от разного числа потоков в определенной выборке блоков.
\begin{figure}[h!]
\centering
\includegraphics[width=1\linewidth]{img/plot.png}
\caption{Зависимость времени выполнения программы от разного числа потоков в блоке для матрицы 1000 x 1000 и глобальной памяти. Используется логарифмический масштаб по обеим осям.}
\label{fig:plot}
\end{figure}
\newpage
\phantom{text}
\newpage
\section*{Заключение}
\addcontentsline{toc}{section}{Заключение}
В рамках курсовой работы было изучена технология параллельного программирования на основе архитектуры Nvidia CUDA.
Для задачи построения пути движения робота по полигону был разработан параллельный асинхронный алгоритм, алгоритм был реализован на языке CUDA C. Программа была
запущена на ресурсах суперкомпьютерного центра «Политехнический». Для запуска использовался узел типа «Торнадо» с видеокартой NVIDIA Tesla K40X. Запуск
программы проводился на одном узле с использованием одной видеокарты.
Было измерено время работы программы при различной степени распараллеливания, разных размерах матриц и разной памяти. Использование оптимальной конфигурации позволило
уменьшить время выполнения в 100 раз относительно наихудшей конфигурации для
матрциы 100 × 100, в 1000 раз для 500 × 500 и в 1500 раз для 1000 × 1000.
Реализация алгоритма с использованием разделяемой памяти показала значительно более высокую эффективность. Время выполнения алгоритма снизилось в среднем на 60\%.
В рамках курсовой работы была написана программа размером 280 строк. Работа на СКЦ «Политехнический» шла две недели, за это время было сделано примерно 100 запусков задач на исполнение.
Для сборки использовался компилятор NVCC версии 11.6u2.
\newpage
\section*{Список литературы}
@@ -736,7 +787,7 @@ $$
\vspace{-1.5cm}
\begin{thebibliography}{0}
\bibitem{mayers}
Майерс, Г. Искусство тестирования программ. -- Санкт-Петербург: Диалектика, 2012 г.
Сандерс, Д. Технология CUDA в примерах: введение в программирование графических процессоров -- Москва: изд. ДМК Пресс, 2013 г -- 232 с.
\end{thebibliography}
\end{document}