Vergeltungswaffe-3
This commit is contained in:
@@ -108,9 +108,11 @@ __global__ void gauss(int rows, int cols, unsigned char *in_r, unsigned char *in
|
|||||||
}
|
}
|
||||||
\end{lstlisting}
|
\end{lstlisting}
|
||||||
|
|
||||||
Obraz do kernela przesyłany jest w postaci 3 tablic jednowymiarowych( po jednej dla każdego koloru). Konwersja z tablicy dwuwymiarowej A o rozmiarze NxM na jednowymiarową tablice B o rozmiarze N*M odbywa się wg wzoru: A[i][j] = B[M*i+j].
|
Obraz do kernela przesyłany jest w postaci 3 tablic jednowymiarowych( po jednej dla każdego koloru RGB). Konwersja obrazu z tablicy dwuwymiarowej A o rozmiarze NxM na jednowymiarową tablice B o rozmiarze N*M odbywa się wg wzoru: A[i][j] = B[M*i+j].
|
||||||
|
|
||||||
|
Każdy wątek oblicza co najmniej jeden piksel. Zaczyna od piksela o numerze równym numerowi wątku. W celu celu obliczenia numeru następnego piksela dodaje do aktualnego numeru liczbę wszystkich wątków. Następnie oblicza ten piksel i powtarza czynność z dodawaniem liczby wątków, sprawdzając oczywiście czy otrzymana wartość nie jest większa od całkowitej liczby pikseli w obrazie.
|
||||||
|
|
||||||
Zadanie zostało uruchomione na komputerze wyposażonym w karte graficzna NVIDIA GeForce GT 640M. Karta posiada dwa multiprocesory po 192 rdzenie CUDA, taktowane zegarem 709 MHz. Pamięć karty to 980MB.
|
Zadanie zostało uruchomione na komputerze wyposażonym w kartę graficzna NVIDIA GeForce GT 640M. Karta posiada dwa multiprocesory po 192 rdzenie CUDA, taktowane zegarem 709 MHz. Pamięć karty to 980MB.
|
||||||
|
|
||||||
Program testowano na obrazie o rozmiarze 24107x4491 pikseli. Parametry dla jakich uruchomiono program to 3 rozmiary siatki: 16, 64, 256 oraz dla każdego rozmiaru siatki rozmiar bloku: 64,128,192,256,320.
|
Program testowano na obrazie o rozmiarze 24107x4491 pikseli. Parametry dla jakich uruchomiono program to 3 rozmiary siatki: 16, 64, 256 oraz dla każdego rozmiaru siatki rozmiar bloku: 64,128,192,256,320.
|
||||||
|
|
||||||
@@ -127,10 +129,19 @@ Na rysunku 1. przedstawiono wykres zależności czasu obliczeń od rozmiaru blok
|
|||||||
\end{figure}
|
\end{figure}
|
||||||
|
|
||||||
\section*{Porównanie}
|
\section*{Porównanie}
|
||||||
Porównanie technologii OpenMP i MPI wykonano na komputerze MacPro3.1 wyposażonym w 2 procesory Xeon E5462, przy czym do dyspozycji było 6 rdzeni. Program z CUDA uruchomiono na innym komputerze wyposażonym w katę graficzną NVIDIA GeForce GT 640M z dwoma multiprocesorami po 192 rdzenie CUDA, taktowane zegarem 709 MHz. Do porównania użyto wykonanych na laboratoriach programów obliczających rozmycie Gaussa . Do testów wybrano obraz o rozdzielczości 24107x4491. W tabeli przedstawiono czas wykonania przez poszczególne programy oraz liczbę użytych przez nie wątków, w przypadku CUDA jest to iloczyn rozmiaru siatki oraz rozmiaru bloku.
|
Porównanie technologii OpenMP i MPI wykonano na komputerze MacPro3.1 wyposażonym w 2 procesory Xeon E5462, przy czym do dyspozycji było 6 rdzeni. Program z CUDA uruchomiono na innym komputerze wyposażonym w katę graficzną NVIDIA GeForce GT 640M z dwoma multiprocesorami po 192 rdzenie CUDA, taktowane zegarem 709 MHz. Do porównania użyto wykonanych na laboratoriach programów obliczających rozmycie Gaussa . Do testów wybrano obraz o rozdzielczości 24107x4491. W tabeli 1. przedstawiono czas wykonania przez poszczególne programy oraz liczbę użytych przez nie wątków, w przypadku CUDA jest to iloczyn rozmiaru siatki oraz rozmiaru bloku.
|
||||||
|
Na podstawie danych w tabeli 1. oraz wniosków wyciągniętych z poprzednich laboratoriów można sformułować następujące wnioski:
|
||||||
|
|
||||||
|
\begin{itemize}
|
||||||
|
\item OpenMP przez to, że sam zarządza tym jak i co będzie zrównoleglone nie jest tak szybki jak pozostałe rozwiązania
|
||||||
|
|
||||||
|
\item MPI przy starannym zaprojektowaniu programu pozwana na dość dobre wyniki oraz umożliwia dużą skalowalność.
|
||||||
|
\item Umiejąc odpowiednio zdekomponować problem i przystosować go do obliczeń na karcie graficznej, CUDA okazuje się najlepszym wyborem do obliczeń równoległych.
|
||||||
|
\end{itemize}
|
||||||
|
|
||||||
|
|
||||||
\vspace{8mm}
|
|
||||||
\begin{table}
|
\begin{table}
|
||||||
|
|
||||||
\centering
|
\centering
|
||||||
\begin{tabular}{|c|c|c|}
|
\begin{tabular}{|c|c|c|}
|
||||||
\hline
|
\hline
|
||||||
@@ -144,5 +155,6 @@ Porównanie technologii OpenMP i MPI wykonano na komputerze MacPro3.1 wyposażon
|
|||||||
\textbf{CUDA} & 98304 & 571\\
|
\textbf{CUDA} & 98304 & 571\\
|
||||||
\hline
|
\hline
|
||||||
\end{tabular}
|
\end{tabular}
|
||||||
|
\caption{Porównanie}
|
||||||
\end{table}
|
\end{table}
|
||||||
\end{document}
|
\end{document}
|
||||||
|
|||||||
Reference in New Issue
Block a user