Browse Source

sprawozdanie

master
Dominik 7 years ago
parent
commit
2456088d3f
1 changed files with 7 additions and 32 deletions
  1. +7
    -32
      DergunPiotr-WaskoDominik/zad2/dok.tex

+ 7
- 32
DergunPiotr-WaskoDominik/zad2/dok.tex View File

@ -60,41 +60,16 @@ Grupa 1 & Piotr Dergun, Dominik Waśko & \ddmmyyyydate\today \tabularnewline
\end{tabular}
\section*{Zadanie 1 - Macierze OMP}
\section*{Zadanie 2 - Mnożenie macierzy MPI}
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$)
Celem zadania jest obliczenie iloczynu dwóch macierzy prostokątnych o wymiarach n x n, na określonej liczbie procesów p (dane te podane jako parametry programu). Posługując się zapisem matematycznym zadanie można zapisać jako równanie: A*B = C. Kluczowy jest odpowiedni podział obliczeń pomiędzy procesami. Przyjęto, że gdy n/p jest liczbą całkowitą każdy proces oblicza n/p kolumn macierzy C. W przeciwnym wypadku jeden z procesów oblicza n modulo p kolumn macierzy C, a pozostałe procesy otrzymują po [n/p] kolumn macierzy C.
\begin{lstlisting}
#pragma omp parallel for default(none) shared(A, B, C) firstprivate(rozmiar)private(i, j)
for (i=0; i<rozmiar; ++i)
for (j=0; j<rozmiar; ++j)
{
C[i][j] = 0;
for (long k=0; k<rozmiar; ++k)
C[i][j] += A[i][k]*B[k][j];
}
\end{lstlisting}
Zadanie zostało uruchomione na klastrze składającego się z 3 komputerów MacPro 3.1 z procesorem Xeon E5462 oraz 3 komputerów iMac14.2 z procesorem i5-4570.Taka konfiguracja daje w sumie 30 rdzeni bez Hyper Threading. Na potrzeby tego zadania wykorzystano jednak tylko 24, ponieważ pozostałe rdzenie były wykorzystywane do innych obliczeń. Program został skompilowany i uruchomiony z następującymi parametrami: macierz 2000x2000, ilość procesów 1-24, dla każdego przypadku wykonano 10 powtórzeń. Z otrzymanych wyników obliczono przyspieszenie oraz średni czas liczenia macierzy.
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.
Rysunek 1 przedstawia wykres zależności przyspieszenia od ilości procesów. Można zauważyć skokowe, nie równomierne przyspieszanie. Jest to spowodowane tym, że wraz z zwiększaniem liści rdzeni dokładane są kolejne maszyny co wymaga komunikacji sieciowej, która powoduje kilkudziesięcio milisekundowe opóźnienia. Rysunek 2 przedstawia wykres zależności czasu obliczeń od liczby procesów.
Poniższa dyrektywa:
\begin{lstlisting}
#pragma omp parallel for default(shared)
\end{lstlisting}
oznacza, że wszystkie zmienne w przetwarzanym równolegle bloku kodu będą zmiennymi współdzielonymi, z wyjątkiem liczników pętli
Natomiast dyrektywa
\begin{lstlisting}
#pragma omp parallel for default(none) shared(A, B, C)
firstprivate(rozmiar)private(i, j)
\end{lstlisting}
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.
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.
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.
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.
Z powyższych obserwacji wynika, że wykorzystanie większej liczby rdzeni -zwiększając tym samym liczbę procesów- pozwala znacząco skrócić czas obliczeń. Pomimo, że konieczność komunikacji sieciowej spowalnia działanie programu nadal wzrost przyspieszenia jest duży.
@ -102,14 +77,14 @@ Z powyższych obserwacji wynika, że wykorzystanie większej liczby wątków poz
\begin{figure}[!h]
\centering
\includegraphics[width=0.7\textwidth]{dane/przyspieszenie.jpg}
\caption{Wykres zależności przyspieszenia obliczeń od liczby wykorzystanych wątków}
\caption{Wykres zależności przyspieszenia obliczeń od liczby procesów}
\end{figure}
\begin{figure}[!h]
\centering
\includegraphics[width=0.7\textwidth]{dane/czas.jpg}
\caption{Wykres zależności czasu obliczeń od liczby wykorzystanych wątków}
\caption{Wykres zależności czasu obliczeń od liczby procesów}
\end{figure}

Loading…
Cancel
Save