|
\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; i<img.rows; ++i){
|
|
for (j=0; j<img.cols; ++j){
|
|
if (i<2 || i>img.rows-3 || j<2 || j>img.cols-3){
|
|
img_out.at<Vec3b>(i, j)[0] = img.at<Vec3b>(i, j)[0];
|
|
img_out.at<Vec3b>(i, j)[1] = img.at<Vec3b>(i, j)[1];
|
|
img_out.at<Vec3b>(i, j)[2] = img.at<Vec3b>(i, j)[2];
|
|
}
|
|
else{
|
|
sumka_r = 0;
|
|
sumka_g = 0;
|
|
sumka_b = 0;
|
|
m=i-2;
|
|
for (k=0; k<RX; ++k,++m){
|
|
n=j-2;
|
|
for (l=0; l<RY; ++l,++n){
|
|
sumka_b += ratio[k][l] * img.at<Vec3b>(m, n)[0];
|
|
sumka_g += ratio[k][l] * img.at<Vec3b>(m, n)[1];
|
|
sumka_r += ratio[k][l] * img.at<Vec3b>(m, n)[2];
|
|
}
|
|
}
|
|
img_out.at<Vec3b>(i, j).val[0] = sumka_b / suma_wag;
|
|
img_out.at<Vec3b>(i, j).val[1] = sumka_g / suma_wag;
|
|
img_out.at<Vec3b>(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}
|