|
\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}
|