\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 2 - Mnożenie macierzy MPI} 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. Zadanie zostało uruchomione na klastrze składającym się z 3 komputerów MacPro 3,1 z dwoma procesorami Xeon E5462 oraz z 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. Rysunek 1 przedstawia wykres zależności przyspieszenia od ilości procesów. Dla pewnych wartości procesów można zauważyć nierównomierne przyspieszanie, tzw. ,,schodki". 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. 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 wzrost przyspieszenia nadal jest duży. \begin{figure}[!h] \centering \includegraphics[width=0.7\textwidth]{dane/przyspieszenie.jpg} \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 procesów} \end{figure} \end{document}