diff --git a/assignment1.pdf b/assignment1.pdf index c00c28f..656dd20 100644 --- a/assignment1.pdf +++ b/assignment1.pdf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4069f79d64645ab608ec29b726e5e9941bf0f1ae789ee02fb45f43999e2c99c2 -size 52496 +oid sha256:7ffdade2b784194044edfe27c9ad74ecdc36336e10f4a6e5278661645c0692c0 +size 52493 diff --git a/assignment1.tex b/assignment1.tex index 9309c0d..bb99ef6 100644 --- a/assignment1.tex +++ b/assignment1.tex @@ -39,7 +39,7 @@ \subsection*{Paralelná dekompozícia problému} -Master proces sa stará o načítanie dát a rozpočítanie počtu prvkov priradených pre slave procesy na približne rovnaké časti. Tie sú následne rozoslané medzi všetky dostupné slave procesy, vrátane master procesu, pomocou funkcie \verb|MPI_Scatterv| Proces so získanej časti nájde maximum. Jednotlivé maximá sú následne spätne získané master procesom pomocou \verb|MPI_Gather|, ktorý z nich nájde absolútne maximum. Po ukončení behu pralelnej časti algoritmu master proces vypíše výsledok na štandardný výstup. +Master proces sa stará o načítanie dát a rozpočítanie počtu prvkov priradených pre slave procesy na približne rovnaké časti. Tie sú následne rozoslané medzi všetky dostupné slave procesy, vrátane master procesu, pomocou funkcie \verb|MPI_Scatterv| Proces so získanej časti nájde maximum. Jednotlivé maximá sú následne spätne získané master procesom pomocou \verb|MPI_Gather|, ktorý z nich nájde absolútne maximum. Po ukončení behu paralelnej časti algoritmu master proces vypíše výsledok na štandardný výstup. Program využije všetky dostupné vlákna. Jedinou podmienkou je, aby počet párov vstupných hodnôt bol rovný alebo väčší ako počet vlákien, inak algoritmus nemá zmysel paralelizovať. diff --git a/assignment2.pdf b/assignment2.pdf index 2143ac7..b9406c5 100644 --- a/assignment2.pdf +++ b/assignment2.pdf @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:91c62f465d3b467882ec5603005e9394db475749f49a15f23d7cb53d74cddbb1 -size 52441 +oid sha256:bf58d6ca27ac7f4bb852e6a1600f0e6da8a0a29583a442e334f8c8faf9128a0c +size 52442 diff --git a/assignment2.tex b/assignment2.tex index 53ac8ce..c1d2132 100644 --- a/assignment2.tex +++ b/assignment2.tex @@ -39,7 +39,7 @@ \subsection*{Paralelná dekompozícia problému} -Matica je v programe reprezentovaná ako jedno-rozmerné pole. Riešenie netrenasponuje aktuálne dáta, iba indexy. Master proces sa stará o načítanie dát a rozpočítanie počtu indexov priradených pre slave procesy na približne rovnaké časti. Tie sú následne indivuálne rozoslané medzi všetky dostupné slave procesy, vrátane master procesu, blokujúcou komunikáciou \verb|MPI_Send| a \verb|MPI_Receive|. Rozmery matice sú uložené do poľa a zdieľadné medzi všetkými procesmi pomocou \verb|MPI_Bcast|. Proces transponuje všetky získané indexya tie sú následne spätne získané master procesom pomocou \verb|MPI_Gatherv|. Po ukončení behu pralelnej časti algoritmu master proces vypíše výsledok na štandardný výstup. +Matica je v programe reprezentovaná ako jedno-rozmerné pole. Riešenie netrenasponuje aktuálne dáta, iba indexy. Master proces sa stará o načítanie dát a rozpočítanie počtu indexov priradených pre slave procesy na približne rovnaké časti. Tie sú následne indivuálne rozoslané medzi všetky dostupné slave procesy, vrátane master procesu, blokujúcou komunikáciou \verb|MPI_Send| a \verb|MPI_Receive|. Rozmery matice sú uložené do poľa a zdieľadné medzi všetkými procesmi pomocou \verb|MPI_Bcast|. Proces transponuje všetky získané indexy a tie sú následne spätne získané master procesom pomocou \verb|MPI_Gatherv|. Po ukončení behu paralelnej časti algoritmu master proces vypíše výsledok na štandardný výstup. Program využije všetky dostupné vlákna. diff --git a/assignment3.pdf b/assignment3.pdf new file mode 100644 index 0000000..da1465d --- /dev/null +++ b/assignment3.pdf @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e10665e2aa1d6cb48165f5da26148efbb0bb7a43c9aaf945ff749f89a3004bd2 +size 51543 diff --git a/assignment3.tex b/assignment3.tex new file mode 100644 index 0000000..9b3802c --- /dev/null +++ b/assignment3.tex @@ -0,0 +1,79 @@ +\documentclass[fleqn,12pt]{article} +\usepackage[utf8]{inputenc} +\usepackage[slovak]{babel} +\usepackage{amsmath} +% --------------------------------------------------------------- +% pri pouziti pdftex-u s obrazkami jpg pouzit nasledujuci riadok +\usepackage[pdftex]{color,graphicx} +% pri pouziti cslatex-u s obrazkami eps namiesto predosleho riadku +% pouzit nasledujuci riadok +% \usepackage{color,graphicx} +% ---------------------------------------------------------------- +\setlength\textheight{200mm} +\setlength\textwidth{160mm} +\oddsidemargin=0mm\evensidemargin=0mm +\sloppy +\begin{document} +\thispagestyle{empty} +\begin{center} +{\Large Katedra počítačov a informatiky FEI TU v Košiciach} +\end{center} +\vfill +\begin{center} +{\huge Paralelné programovanie} +\end{center} + +\begin{center} +{\large 2015/2016} +\end{center} +\vfill + +\begin{center} +{\large Peter Babič} \hfill {\large Počítačové modelovanie} +\end{center} + +\clearpage + +\setcounter{section}{2} +\section{Paralelné násobenie matíc} + +\subsection*{Paralelná dekompozícia problému} + +Matice sú v programe reprezentované ako jedno-rozmerné polia. Master proces sa stará o načítanie dát a rozpočítanie počtu riadkov z prvej matice a počtu stĺpcov z druhej matice na približne rovnaké počty, ktoré sú následne rozdelené medzi dostupné procesy pre znásobenie. Rozmery matice sú uložené do poľa a zdieľadné medzi všetkými procesmi pomocou \verb|MPI_Bcast|. Znásobí získané riadky a stĺpce podľa matematických pravidiel pre násobenie matice. Výsledné hodnoty sú získané master procesom pomocou \verb|MPI_Gatherv|. Po ukončení behu paralelnej časti algoritmu master proces vypíše výsledok na štandardný výstup. + +Program využije všetky dostupné vlákna. Podmienkou je, aby prvá matica mala rovnaký počet riadkov ako druhá matica stĺpcov, a zároveň, aby počet riadkov prvej matice bol väčší alebo rovný ako počet vlákien. + +\subsection*{Spôsob využitia nových komunikátorov} + +V riešení boli implementované dva nové komunikátory pre riadky a stĺpce. + +\subsection*{Spôsob využitia topológie procesov} + +Karteziánska (mriežková) virtuálna topológia je použitá na získanie riadkov a stĺpcov z násobených matíc, čo je esenciálne pre implementovaný algoritmus. + +\subsection*{Hodnotenie efektívnosti výpočtu} + +Experimentálne namerané výsledky behu sekvenčného a paralelného algoritmu na processore Intel Core2 Duo Processor T9500 so 4 GB priľahlej RAM sú uvedené v tabuľke \ref{t:efecti}. Vstupom boli súbory obsahujúce matice s rozmermi 5 x 10 a 10 x 5, respektíve. + +\begin{table}[h!] +\caption{Porovnanie sekvenčného (1) a paralelného (2+) algoritmu} +\label{t:efecti} +\centering +\begin{tabular}{l|rrrrrrrr} +\hline +Počet procesov & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 \\ +\hline +Čas v ms & 0.18 & 0.20 & 0.21 & 0.22 & 0.25 & 0.27 & 0.28 & 0.31 \\ +\hline +Vyťaženie CPU v \% & 89 & 95 & 106 & 113 & 115 & 116 & 126 & 132 \\ +\hline +\end{tabular} +\end{table} + +Výsledky naznačujú, že použitá implementácia algoritmu dosahuje najlepšie výsledky v sekvenčnej forme. S nárastom vlákien sa zvyšuje čas aj vyťaženosť CPU. + + + +\end{document} + +