You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
4.2 KiB

8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
  1. \documentclass[a4paper,12pt]{article}
  2. \usepackage{amsmath}
  3. \usepackage{amssymb}
  4. \usepackage[polish]{babel}
  5. \usepackage{polski}
  6. \usepackage[utf8]{inputenc}
  7. \usepackage{indentfirst}
  8. \usepackage{geometry}
  9. \usepackage{array}
  10. \usepackage[pdftex]{color,graphicx}
  11. \usepackage{subfigure}
  12. \usepackage{afterpage}
  13. \usepackage{setspace}
  14. \usepackage{color}
  15. \usepackage{wrapfig}
  16. \usepackage{listings}
  17. \usepackage{datetime}
  18. \renewcommand{\onehalfspacing}{\setstretch{1.6}}
  19. \geometry{tmargin=2.5cm,bmargin=2.5cm,lmargin=2.5cm,rmargin=2.5cm}
  20. \setlength{\parindent}{1cm}
  21. \setlength{\parskip}{0mm}
  22. \newenvironment{lista}{
  23. \begin{itemize}
  24. \setlength{\itemsep}{1pt}
  25. \setlength{\parskip}{0pt}
  26. \setlength{\parsep}{0pt}
  27. }{\end{itemize}}
  28. \newcommand{\linia}{\rule{\linewidth}{0.4mm}}
  29. \definecolor{lbcolor}{rgb}{0.95,0.95,0.95}
  30. \lstset{
  31. backgroundcolor=\color{lbcolor},
  32. tabsize=4,
  33. language=C++,
  34. captionpos=b,
  35. tabsize=3,
  36. frame=lines,
  37. numbers=left,
  38. numberstyle=\tiny,
  39. numbersep=5pt,
  40. breaklines=true,
  41. showstringspaces=false,
  42. basicstyle=\footnotesize,
  43. identifierstyle=\color{magenta},
  44. keywordstyle=\color[rgb]{0,0,1},
  45. commentstyle=\color{Darkgreen},
  46. stringstyle=\color{red}
  47. }
  48. \begin{document}
  49. \noindent
  50. \begin{tabular}{|c|p{11cm}|c|} \hline
  51. Grupa 1 & Piotr Dergun, Dominik Waśko & \ddmmyyyydate\today \tabularnewline
  52. \hline
  53. \end{tabular}
  54. \section*{Zadanie 1 - Macierze OMP}
  55. Celem zadania jest obliczenie iloczynu dwóch macierzy prostokątnych na konkretnej liczbie wątków (dane te podane jako parametry programu). Istotą problemu są trzy pętle, których złożoność obliczeniowa jest O($n^3$)
  56. \begin{lstlisting}
  57. #pragma omp parallel for default(none) shared(A, B, C) firstprivate(rozmiar)private(i, j)
  58. for (i=0; i<rozmiar; ++i)
  59. for (j=0; j<rozmiar; ++j)
  60. {
  61. C[i][j] = 0;
  62. for (long k=0; k<rozmiar; ++k)
  63. C[i][j] += A[i][k]*B[k][j];
  64. }
  65. \end{lstlisting}
  66. Zmienna \textit{i} ma za zadanie przechodzić po wierszach macierzy wyjściowej, a zmienna \textit{j} - jej kolumnach. Za przemnażanie wszystkich elementów z wektora macierzy A (po wierszach) i wektora macierzy B (po kolumnach) odpowiedzialna jest wewnętrzna pętla.
  67. Poniższa dyrektywa:
  68. \begin{lstlisting}
  69. #pragma omp parallel for default(shared)
  70. \end{lstlisting}
  71. oznacza, że wszystkie zmienne w przetwarzanym równolegle bloku kodu będą zmiennymi współdzielonymi, z wyjątkiem liczników pętli
  72. Natomiast dyrektywa
  73. \begin{lstlisting}
  74. #pragma omp parallel for default(none) shared(A, B, C)
  75. firstprivate(rozmiar)private(i, j)
  76. \end{lstlisting}
  77. oznacza, że współdzielone będą wskaźniki tablic (A,C,B), zmienna \textit{rozmiar} jest prywatna dla każdego wątki i gdy jest tworzona jest kopią zmiennej globalnej. Zmienne \textit{i} i \textit{j} są prywatne.
  78. Program został skompilowany i uruchomiony z następującymi parametrami: macierz 1500x1500, ilość wątków 1-15, dla każdego wątku wykonano 10 powtórzeń. Z otrzymanych wyników obliczono przyspieszenie oraz średni czas liczenia macierzy.
  79. Rysunek 1 przedstawia wykres zależności przyspieszenia od ilości wątków. Można na nim zauważać że wzrost przyspieszenia uzyskuje się tylko do momentu gdy liczba wątków jest mniejsza lub równa 4. Spowodowane jest to tym, że komputer na którym obliczane było zadanie posiada procesor o 4 rdzeniach oraz wykorzystuje technologię HyperThreading która pozwala na prace w sumie ośmiu wątków. Rysunek 2. przedstawia wykres zależności czasu obliczeń od liczby wątków. Można zobaczyć na nim, że powyżej 4 wątków czas obliczeń nie ulega już skróceniu.
  80. Z powyższych obserwacji wynika, że wykorzystanie większej liczby wątków pozwala znacząco skrócić czas wykonania programu. Jednak zwiększanie liczby wątków ponad to co oferuje procesor nie powoduje wzrostu wydajności i wymusza współbieżne liczenie.
  81. \begin{figure}[!h]
  82. \centering
  83. \includegraphics[width=0.7\textwidth]{dane/przyspieszenie.jpg}
  84. \caption{Wykres zależności przyspieszenia obliczeń od liczby wykorzystanych wątków}
  85. \end{figure}
  86. \begin{figure}[!h]
  87. \centering
  88. \includegraphics[width=0.7\textwidth]{dane/czas.jpg}
  89. \caption{Wykres zależności czasu obliczeń od liczby wykorzystanych wątków}
  90. \end{figure}
  91. \end{document}