From e5d2d860b95ac2ce82eedd4a60899a1dc9a776d9 Mon Sep 17 00:00:00 2001 From: PioDer Date: Fri, 9 Dec 2016 19:49:36 +0100 Subject: [PATCH] INIT: zad5 (dziala) --- DergunPiotr-WaskoDominik/zad4/Makefile | 2 +- DergunPiotr-WaskoDominik/zad5/Makefile | 5 + DergunPiotr-WaskoDominik/zad5/Ttiming.h | 40 +++++ DergunPiotr-WaskoDominik/zad5/dane/czas.jpg | Bin 0 -> 28245 bytes .../zad5/dane/przyspieszenie.jpg | Bin 0 -> 26605 bytes .../zad5/dane/wykres.gnuplot | 19 +++ DergunPiotr-WaskoDominik/zad5/dane/wyniki.txt | 15 ++ DergunPiotr-WaskoDominik/zad5/dok.tex | 127 +++++++++++++++ DergunPiotr-WaskoDominik/zad5/gauss_mpi.cpp | 150 ++++++++++++++++++ 9 files changed, 357 insertions(+), 1 deletion(-) create mode 100644 DergunPiotr-WaskoDominik/zad5/Makefile create mode 100644 DergunPiotr-WaskoDominik/zad5/Ttiming.h create mode 100644 DergunPiotr-WaskoDominik/zad5/dane/czas.jpg create mode 100644 DergunPiotr-WaskoDominik/zad5/dane/przyspieszenie.jpg create mode 100644 DergunPiotr-WaskoDominik/zad5/dane/wykres.gnuplot create mode 100644 DergunPiotr-WaskoDominik/zad5/dane/wyniki.txt create mode 100644 DergunPiotr-WaskoDominik/zad5/dok.tex create mode 100644 DergunPiotr-WaskoDominik/zad5/gauss_mpi.cpp diff --git a/DergunPiotr-WaskoDominik/zad4/Makefile b/DergunPiotr-WaskoDominik/zad4/Makefile index 3b755e2..28ee5bb 100644 --- a/DergunPiotr-WaskoDominik/zad4/Makefile +++ b/DergunPiotr-WaskoDominik/zad4/Makefile @@ -1,4 +1,4 @@ -macierz_omp: gauss_omp.cpp +gauss_omp: gauss_omp.cpp g++ -O3 -fopenmp -Wall -o gauss_omp gauss_omp.cpp `pkg-config opencv --cflags --libs` clean: diff --git a/DergunPiotr-WaskoDominik/zad5/Makefile b/DergunPiotr-WaskoDominik/zad5/Makefile new file mode 100644 index 0000000..d2ec1cb --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad5/Makefile @@ -0,0 +1,5 @@ +gauss_mpi: gauss_mpi.cpp + mpicxx -Wall -o gauss_mpi gauss_mpi.cpp `pkg-config opencv --cflags --libs` + +clean: + rm -rf gauss_mpi diff --git a/DergunPiotr-WaskoDominik/zad5/Ttiming.h b/DergunPiotr-WaskoDominik/zad5/Ttiming.h new file mode 100644 index 0000000..93d6e19 --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad5/Ttiming.h @@ -0,0 +1,40 @@ +#if !defined(DEF_TTIMING) +#define DEF_TTIMING +#include + +class TTiming +{ +protected: + struct timeval start; + struct timeval stop; + void getTime(timeval &tv); + +public: + TTiming(void); + + void Begin(void); + long End(void); +}; + +inline TTiming::TTiming(void) +{ + +} + +inline void TTiming::Begin(void) +{ + getTime(start); +} + +inline long TTiming::End(void) +{ + getTime(stop); + return ((stop.tv_sec-start.tv_sec) * 1000 + (stop.tv_usec-start.tv_usec)/1000.0) + 0.5; +} + +inline void TTiming::getTime(timeval &tv) +{ + gettimeofday(&tv,NULL); +} + +#endif diff --git a/DergunPiotr-WaskoDominik/zad5/dane/czas.jpg b/DergunPiotr-WaskoDominik/zad5/dane/czas.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c68ed9f5cef134b112120342c8962f404168de0c GIT binary patch literal 28245 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 N^lxGCzk2RZ{0|&)QBD8= literal 0 HcmV?d00001 diff --git a/DergunPiotr-WaskoDominik/zad5/dane/przyspieszenie.jpg b/DergunPiotr-WaskoDominik/zad5/dane/przyspieszenie.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8c9acafabb5a09c5306650392f165874e5441b53 GIT binary patch literal 26605 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 literal 0 HcmV?d00001 diff --git a/DergunPiotr-WaskoDominik/zad5/dane/wykres.gnuplot b/DergunPiotr-WaskoDominik/zad5/dane/wykres.gnuplot new file mode 100644 index 0000000..0da603a --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad5/dane/wykres.gnuplot @@ -0,0 +1,19 @@ +#set terminal x11 +set terminal jpeg +set xrange [0:16] +set yrange [0:7] + +set xlabel "Liczba watkow [n]" +set ylabel "Przyspieszenie [n]" + +set out "przyspieszenie.jpg" +plot \ + "wyniki.txt" using 1:3 with points ls 3 lc rgb "red" title "przyspieszenie", \ + "wyniki.txt" using 1:3 with lines ls 3 lc rgb "blue" notitle + +set out "czas.jpg" +set ylabel "Czas obliczen [ms]" +set yrange [0:16000] +plot \ + "wyniki.txt" using 1:2 with points ls 3 lc rgb "red" title "czas", \ + "wyniki.txt" using 1:2 with lines ls 3 lc rgb "blue" notitle \ No newline at end of file diff --git a/DergunPiotr-WaskoDominik/zad5/dane/wyniki.txt b/DergunPiotr-WaskoDominik/zad5/dane/wyniki.txt new file mode 100644 index 0000000..54eee6d --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad5/dane/wyniki.txt @@ -0,0 +1,15 @@ +1 13230 1.0 +2 6706 1.9729 +3 4462 2.965 +4 3344 3.9563 +5 2690 4.9182 +6 2271 5.8256 +7 2689 4.92 +8 2529 5.2313 +9 2459 5.3802 +10 2358 5.6107 +11 2348 5.6346 +12 2257 5.8618 +13 2351 5.6274 +14 2327 5.6854 +15 2310 5.7273 \ No newline at end of file diff --git a/DergunPiotr-WaskoDominik/zad5/dok.tex b/DergunPiotr-WaskoDominik/zad5/dok.tex new file mode 100644 index 0000000..444b3fe --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad5/dok.tex @@ -0,0 +1,127 @@ +\documentclass[a4paper,12pt]{article} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage[polish]{babel} +\usepackage{polski} +\usepackage[utf8]{inputenc} +\usepackage{indentfirst} +\usepackage{geometry} +\usepackage{array} +\usepackage[pdftex]{color,graphicx} +\usepackage{subfigure} +\usepackage{afterpage} +\usepackage{setspace} +\usepackage{color} +\usepackage{wrapfig} +\usepackage{listings} +\usepackage{datetime} + +\renewcommand{\onehalfspacing}{\setstretch{1.6}} + +\geometry{tmargin=2.5cm,bmargin=2.5cm,lmargin=2.5cm,rmargin=2.5cm} +\setlength{\parindent}{1cm} +\setlength{\parskip}{0mm} + +\newenvironment{lista}{ +\begin{itemize} + \setlength{\itemsep}{1pt} + \setlength{\parskip}{0pt} + \setlength{\parsep}{0pt} +}{\end{itemize}} + +\newcommand{\linia}{\rule{\linewidth}{0.4mm}} + +\definecolor{lbcolor}{rgb}{0.95,0.95,0.95} +\lstset{ + backgroundcolor=\color{lbcolor}, + tabsize=4, + language=C++, + captionpos=b, + tabsize=3, + frame=lines, + numbers=left, + numberstyle=\tiny, + numbersep=5pt, + breaklines=true, + showstringspaces=false, + basicstyle=\footnotesize, + identifierstyle=\color{magenta}, + keywordstyle=\color[rgb]{0,0,1}, + commentstyle=\color{Darkgreen}, + stringstyle=\color{red} + } + +\begin{document} + +\noindent +\begin{tabular}{|c|p{11cm}|c|} \hline +Grupa 1 & Piotr Dergun, Dominik Waśko & \ddmmyyyydate\today \tabularnewline +\hline +\end{tabular} + + +\section*{Zadanie 4 - Rozmycie Gaussa w OpenMP} + +Celem zadania jest wykonanie rozmycia obrazu za pomocą algorytmu Gaussa o rozmiarze maski 5x5 + +\begin{lstlisting} + #pragma omp parallel for private(i, j, k, l, m, n, sumka_r, sumka_g, sumka_b) + for (i=0; iimg.rows-3 || j<2 || j>img.cols-3){ + img_out.at(i, j)[0] = img.at(i, j)[0]; + img_out.at(i, j)[1] = img.at(i, j)[1]; + img_out.at(i, j)[2] = img.at(i, j)[2]; + } + else{ + sumka_r = 0; + sumka_g = 0; + sumka_b = 0; + m=i-2; + for (k=0; k(m, n)[0]; + sumka_g += ratio[k][l] * img.at(m, n)[1]; + sumka_r += ratio[k][l] * img.at(m, n)[2]; + } + } + img_out.at(i, j).val[0] = sumka_b / suma_wag; + img_out.at(i, j).val[1] = sumka_g / suma_wag; + img_out.at(i, j).val[2] = sumka_r / suma_wag; + } + } + } +\end{lstlisting} + +Zmienne \textit{i} oraz \textit{j} służą do iteracji po wszystkich pikselach obrazu. W przypadkach brzegowych tzn. 2 piksele od krawędzi obrazu, piksele są pozostawiane bez zmian. Jest to spowodowane tym, że w przypadku tych pikseli nie można zastosować maski 5x5. Wartość pozostałych pikseli jest zmieniana przy pomocy algorytmu Gaussa. + +Do wczytania obrazu użyto biblioteki OpenCV. + +Zadanie zostało uruchomione na komputerze MacPro3,1 wyposażonym w 2 procesory Xeon E5462, przy czym do dyspozycji było 6 rdzeni. + +Program został uruchomiony dla obrazu o rozmiarze AxB. Obliczenia przeprowadzono tworząc od 1 do 15 wątków, dla każdej ilości wykonano 10 powtórzeń. Z otrzymanych wyników obliczono przyspieszenie oraz średni czas obliczania rozmycia. + +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 ilości rdzeni. Powyżej sześciu następuje już przetwarzanie współbieżne. Rysunek 2. przedstawia wykres zależności czasu obliczeń od liczby wątków. Można zobaczyć na nim, że powyżej 6 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. + + + + +\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} +\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} +\end{figure} + + + +\end{document} diff --git a/DergunPiotr-WaskoDominik/zad5/gauss_mpi.cpp b/DergunPiotr-WaskoDominik/zad5/gauss_mpi.cpp new file mode 100644 index 0000000..379104f --- /dev/null +++ b/DergunPiotr-WaskoDominik/zad5/gauss_mpi.cpp @@ -0,0 +1,150 @@ +#include +#include +#include +#include +#include "Ttiming.h" +#include + +using namespace std; +using namespace cv; + +#define RX 5 +#define RY 5 +int main(int argc, char *argv[]) +{ + int i,j,k,l,m,n; + TTiming tt; + int sumka_r, sumka_g, sumka_b; + int suma_wag = 0; + Mat img_out; + int buff_max=0,porcja_new=0; + Mat img; + Mat img_part_out; + + int ratio[RX][RY] = + { + {1, 4, 7, 4, 1}, + {4, 16, 26, 16, 4}, + {7, 26, 41, 26, 7}, + {4, 16, 26, 16, 4}, + {1, 4, 7, 4, 1} + }; + + if (argc < 3) + { + cerr << "Usage: " << argv[0] << " " << endl; + exit(1); + } + + img = cv::imread(argv[1]); + if(!img.data ) + { + cerr << "File " << argv[1] << " does not exist" << endl; + MPI::Finalize(); + exit(1); + } + + for (i=0; i=ntasks) ? (int)round(img.rows*1.0/ntasks) : 1; + //porcja *= img.cols; //porcję mnożymy przez ilość elementów w jednym wektorze + porcja_new = porcja; + + // dla kompatybilności liczę jeszcze rozmiar bufora odbioru, + // np. jeżeli chunki będą jednolitego rozmiaru, a ostatni będzie większy + // to bufor odbioru musi być zwiększony (żeby go nie ucinało) + buff_max = img.rows - porcja*(ntasks-1); + if (porcja > buff_max) + buff_max = porcja; // na wypadek, jeżeli jednak ostatni kawałek będzie mniejszy + + if (taskid == 0) + img_out.create(/*buff_max*ntasks*/img.rows, img.cols, img.type()); + + MPI::COMM_WORLD.Barrier(); + + // + // część licząca --------------------------------------------------------------------------------- + // + + MPI::COMM_WORLD.Barrier(); + if (taskid == 0) + tt.Begin(); + int start_pos = taskid*porcja; + int stop_pos = (taskid+1)*porcja; + + if (taskid == ntasks -1) //przelicz porcję dla ostatniego procesu (w przypadku dzielenia z resztą) + { + porcja_new = img.rows - porcja*(ntasks-1); + + // myk jest taki, że muszę podać jakąś niezerową porcję do gathera, + // mimo, że proces nie ma żadnych (sensownych) danych do przetworzenia + if (porcja_new > 0) + { + stop_pos = img.rows; + porcja = porcja_new; + } + } + img_part_out.create(porcja, img.cols, img.type()); + + int p=0, q=0; + + for (i=start_pos; iimg.rows-3 || j<2 || j>img.cols-3) + { + img_part_out.at(p, q)[0] = img.at(i, j)[0]; + img_part_out.at(p, q)[1] = img.at(i, j)[1]; + img_part_out.at(p, q)[2] = img.at(i, j)[2]; + } + else + { + sumka_r = 0; + sumka_g = 0; + sumka_b = 0; + m=i-2; + for (k=0; k(m, n)[0]; + sumka_g += ratio[k][l] * img.at(m, n)[1]; + sumka_r += ratio[k][l] * img.at(m, n)[2]; + } + } + img_part_out.at(p, q).val[0] = sumka_b / suma_wag; + img_part_out.at(p, q).val[1] = sumka_g / suma_wag; + img_part_out.at(p, q).val[2] = sumka_r / suma_wag; + } + ++q; + } + ++p; + } + + MPI::COMM_WORLD.Barrier(); + if (taskid == 0) + { + long elapsed = tt.End(); + cout << "Time: " << elapsed << " ms" << endl; + } + // zwróć wszystko do programu głównego + MPI::COMM_WORLD.Gather(&img_part_out.data[0], porcja*img.cols*3, MPI::CHAR, &img_out.data[0], porcja*img.cols*3, MPI::CHAR, 0); + + if (taskid == 0) + imwrite(argv[2], img_out); + MPI::Finalize(); + + exit(0); +} \ No newline at end of file