Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
U
uva
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Taddeüs Kroes
uva
Commits
2ed3ac6e
Commit
2ed3ac6e
authored
Jul 10, 2011
by
Taddeüs Kroes
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ModSim ass4 taddeus: Worked on report.
parent
cf1d3eef
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
102 additions
and
55 deletions
+102
-55
modsim/ass4_taddeus/vibstring/par.c
modsim/ass4_taddeus/vibstring/par.c
+1
-3
modsim/ass4_taddeus/vibstring/plot_benchmark.py
modsim/ass4_taddeus/vibstring/plot_benchmark.py
+2
-1
modsim/ass4_taddeus/vibstring/report/bench.txt
modsim/ass4_taddeus/vibstring/report/bench.txt
+45
-45
modsim/ass4_taddeus/vibstring/report/benchmark.pdf
modsim/ass4_taddeus/vibstring/report/benchmark.pdf
+0
-0
modsim/ass4_taddeus/vibstring/report/report.tex
modsim/ass4_taddeus/vibstring/report/report.tex
+53
-4
modsim/ass4_taddeus/vibstring/seq.c
modsim/ass4_taddeus/vibstring/seq.c
+1
-2
No files found.
modsim/ass4_taddeus/vibstring/par.c
View file @
2ed3ac6e
...
@@ -4,7 +4,7 @@
...
@@ -4,7 +4,7 @@
#include <math.h>
#include <math.h>
#include <mpi.h>
#include <mpi.h>
//
#define VERBOSE
#define VERBOSE
double
**
y
=
NULL
;
double
**
y
=
NULL
;
int
tasks
,
rank
,
steps
,
start
;
int
tasks
,
rank
,
steps
,
start
;
...
@@ -95,14 +95,12 @@ void print(int index) {
...
@@ -95,14 +95,12 @@ void print(int index) {
* number of time steps.
* number of time steps.
*/
*/
void
calculate_steps
(
int
time
,
double
dx
,
double
tau
)
{
void
calculate_steps
(
int
time
,
double
dx
,
double
tau
)
{
double
x
;
int
i
,
t
,
prev
=
0
,
current
=
1
,
next
=
2
,
int
i
,
t
,
prev
=
0
,
current
=
1
,
next
=
2
,
s
=
rank
?
1
:
2
,
e
=
rank
==
tasks
-
1
?
steps
-
1
:
steps
;
s
=
rank
?
1
:
2
,
e
=
rank
==
tasks
-
1
?
steps
-
1
:
steps
;
// Calculate the position over the entire string at time dt using the
// Calculate the position over the entire string at time dt using the
// position at t = 0 and the information that y(x, -dt) == y(x, dt)
// position at t = 0 and the information that y(x, -dt) == y(x, dt)
for
(
i
=
s
;
i
<=
e
;
i
++
)
{
for
(
i
=
s
;
i
<=
e
;
i
++
)
{
x
=
i
*
dx
;
y
[
current
][
i
]
=
y
[
0
][
i
]
+
.
5
*
tau
*
tau
*
(
y
[
0
][
i
-
1
]
-
2
*
y
[
0
][
i
]
y
[
current
][
i
]
=
y
[
0
][
i
]
+
.
5
*
tau
*
tau
*
(
y
[
0
][
i
-
1
]
-
2
*
y
[
0
][
i
]
+
y
[
0
][
i
+
1
]);
+
y
[
0
][
i
+
1
]);
}
}
...
...
modsim/ass4_taddeus/vibstring/plot_benchmark.py
View file @
2ed3ac6e
#!/usr/bin/env python
#!/usr/bin/env python
from
sys
import
argv
from
sys
import
argv
from
pylab
import
plot
,
xlabel
,
ylabel
,
show
,
savefig
from
pylab
import
plot
,
xlabel
,
ylabel
,
show
,
savefig
,
ylim
from
scipy
import
polyfit
,
polyval
from
scipy
import
polyfit
,
polyval
# Collect data
# Collect data
...
@@ -31,6 +31,7 @@ fit = polyval(c, x)
...
@@ -31,6 +31,7 @@ fit = polyval(c, x)
plot
(
x
,
y
,
'x'
)
plot
(
x
,
y
,
'x'
)
plot
(
x
,
fit
,
'-'
)
plot
(
x
,
fit
,
'-'
)
plot
(
seq
[
0
],
seq
[
1
],
'x'
)
plot
(
seq
[
0
],
seq
[
1
],
'x'
)
ylim
(
ymin
=
0
)
xlabel
(
'Aantal processen'
)
xlabel
(
'Aantal processen'
)
ylabel
(
'Tijd (s)'
)
ylabel
(
'Tijd (s)'
)
if
len
(
argv
)
>
1
:
if
len
(
argv
)
>
1
:
...
...
modsim/ass4_taddeus/vibstring/report/bench.txt
View file @
2ed3ac6e
1 9.67
1 9.67
1 9.69
1 9.69
1 9.69
1 9.69
1 9.69
2 5.86
1 10.84
2 5.81
2 5.8
3
2 5.8
1
2 5.81
2 5.81
2 5.78
2 5.78
3 4.38
3 4.35
3 4.38
3 4.38
3 4.36
3 4.40
3 4.37
3 4.37
4 4.00
4 3.72
4 3.67
4 3.65
4 3.65
4 3.68
4 3.66
5 3.60
4 3.66
5 3.24
5 3.47
5 3.46
5 3.87
5 3.24
5 3.65
6 4.10
5 3.26
6 3.55
6 3.59
6 3.18
6 3.56
6 3.44
6 3.38
7 3.09
6 3.21
7 2.99
7 3.05
7 3.18
7 3.21
7 3.18
7 3.24
8 3.73
7 3.02
8 3.00
8 2.68
8 2.86
8 3.24
8 2.67
8 2.67
8 2.85
9 3.38
9 3.25
9 2.57
9 2.76
9 2.96
9 2.76
9 2.75
9 2.56
10 3.50
10 2.74
10 3.08
10 3.51
10 3.11
10 2.88
10 3.09
10 3.68
11 2.85
11 3.05
11 2.63
11 3.65
11 3.85
11 3.43
11 2.89
11 3.03
12 2.74
12 3.66
12 3.20
12 2.58
12 4.01
12 3.19
12 2.80
12 2.57
13 3.19
13 3.47
13 3.03
13 3.94
13 3.14
13 2.36
13 3.15
13 3.54
modsim/ass4_taddeus/vibstring/report/benchmark.pdf
View file @
2ed3ac6e
No preview for this file type
modsim/ass4_taddeus/vibstring/report/report.tex
View file @
2ed3ac6e
\documentclass
[10pt,a4paper]
{
article
}
\documentclass
[10pt,a4paper]
{
article
}
\usepackage
[dutch]
{
babel
}
\usepackage
[dutch]
{
babel
}
\usepackage
[utf8]
{
inputenc
}
\usepackage
[utf8]
{
inputenc
}
\usepackage
{
booktabs,graphicx,float,hyperref,amsmath
}
\usepackage
{
booktabs,graphicx,float,hyperref,amsmath
,listings
}
% Paragraph indentation
% Paragraph indentation
\setlength
{
\parindent
}{
0pt
}
\setlength
{
\parindent
}{
0pt
}
...
@@ -364,13 +364,57 @@ geconcludeerd dat ook het parallelle programma correct is geïmplementeerd..
...
@@ -364,13 +364,57 @@ geconcludeerd dat ook het parallelle programma correct is geïmplementeerd..
\subsection
{
Performance
}
\subsection
{
Performance
}
\subsubsection
*
{
Testomgeving
}
Alle tijdmetingen worden uitgevoerd door het script
\emph
{
benchmark.sh
}
. Omdat
het programma is geparallelliseerd in de afstandsdimensie, is de enige
variabele het aantal te berekenen afstandsstappen
(
\texttt
{
STRING
\_
STEPS
}
)
. We
kiezen
$
l = 1.0
$
, zodat
$
dx =
\frac
{
1.0
}{
\texttt
{
STRING
\_
STEPS
}}$
. De rest van
de parameters zijn als volgt gekozen:
$
tijdstappen = 10000,
\tau
= 1
$
en
$
n = 2
$
.
Ondanks de aanwezigheid van dualcore
-
machines wordt elk proces op een
afzonderlijke machine uitgevoerd. Hierdoor is de communicatie altijd tussen
aparte machines, en niet binnen dezelfde machine
(
wat de latency zou verlagen
)
.
Elke tijdmeting wordt vier maal uitgevoerd, waarna de laagste waarde wordt
gebruikt. De laagste waarde is interessanter dan de gemiddelde waarde, omdat
bij de laagste waarde de ``idle time'' van een proces het kleinst is We zijn
immers alleen geïnteresseerd in de tijd die een proces daadwerkelijjk aan het
rekenen is.
\subsubsection
*
{
Speedup
}
De benchmark wordt uitgevoerd met een vast aantal afstandsstappen. Indien dit
aantal te klein is zal de communicatie in het parallelle programma veel
overhead opleveren. Figuur
\ref
{
fig:benchmark
}
toont het resultaat voor
50000
stappen
\footnote
{
Zie bijlage
\ref
{
app:benchmark
}
voor de precieze metingen
}
,
waarbij een zichtbare speedup is in het parallelle programma. Een Least Squares
fit laat een minimum zien bij
9
-
10
processen. Dit betekent dat het programma
het meest efficiënt wordt uitgevoerd met
9
tot
10
processen. De kleinste meting
is gedaan bij
9
processen, de speedup bij dit aantal is
$
\frac
{
9.67
}{
2.57
}
=
3.76
$
ten opzichte van het sequentële programma.
\begin
{
figure
}
[
H
]
\begin
{
figure
}
[
H
]
\includegraphics
[
width
=
10
cm
]
{
benchmark.pdf
}
\label
{
fig:benchmark
}
\caption
{
Runtime met parameters
\texttt
{
sinus
10000
1
.
00002
1
2
}
.
}
\includegraphics
[
width
=
13
cm
]
{
benchmark.pdf
}
\caption
{
Runtime met parameters
\texttt
{
sinus
10000
1
.
00002
1
2
}
. De
blauwe punten zijn de metingen van het parallelle programma, de
groene lijn is een Least Squares datafit van die metingen. Het
rode punt linksboven is het resultaat van het sequentiële
programma.
}
\end
{
figure
}
\end
{
figure
}
\subsubsection
*
{
Overhead communicatie
}
Zoals al eerder gezegd is het waarschijnlijk dat bij een klein aantal
afstandsstappen het parallelle programma langzamer zal zijn dan het
sequentiële programma, door overhead van de communicatie. Omdat het parallelle
programma bij de benchmark het snelst is met
9
processen, zullen we vergelijken
wanneer het sequentiële programma voordeel heeft t.o.v.
9
parallelle processen.
%TODO: add graph
\pagebreak
\pagebreak
\appendix
\appendix
...
@@ -400,4 +444,9 @@ geconcludeerd dat ook het parallelle programma correct is geïmplementeerd..
...
@@ -400,4 +444,9 @@ geconcludeerd dat ook het parallelle programma correct is geïmplementeerd..
\caption
{
Resultaten met parameters
\texttt
{
plucked
2000
1
.
001
1
.
3
}
.
}
\caption
{
Resultaten met parameters
\texttt
{
plucked
2000
1
.
001
1
.
3
}
.
}
\end
{
figure
}
\end
{
figure
}
\section
{
Uitvoer benchmarkscript
}
\label
{
app:benchmark
}
\lstinputlisting
{
bench.txt
}
\end
{
document
}
\end
{
document
}
modsim/ass4_taddeus/vibstring/seq.c
View file @
2ed3ac6e
...
@@ -3,7 +3,7 @@
...
@@ -3,7 +3,7 @@
#include <string.h>
#include <string.h>
#include <math.h>
#include <math.h>
//
#define VERBOSE
#define VERBOSE
double
**
y
=
NULL
,
dx
;
double
**
y
=
NULL
,
dx
;
int
steps
,
time
;
int
steps
,
time
;
...
@@ -66,7 +66,6 @@ void calculate_steps(int time, double tau) {
...
@@ -66,7 +66,6 @@ void calculate_steps(int time, double tau) {
// Calculate the position over the entire string at time dt using the
// Calculate the position over the entire string at time dt using the
// position at t = 0 and the information that y(x, -dt) == y(x, dt)
// position at t = 0 and the information that y(x, -dt) == y(x, dt)
for
(
i
=
1
;
i
<
steps
-
1
;
i
++
)
{
for
(
i
=
1
;
i
<
steps
-
1
;
i
++
)
{
x
=
i
*
dx
;
y
[
1
][
i
]
=
y
[
0
][
i
]
+
.
5
*
tau
*
tau
*
(
y
[
0
][
i
-
1
]
-
2
*
y
[
0
][
i
]
y
[
1
][
i
]
=
y
[
0
][
i
]
+
.
5
*
tau
*
tau
*
(
y
[
0
][
i
-
1
]
-
2
*
y
[
0
][
i
]
+
y
[
0
][
i
+
1
]);
+
y
[
0
][
i
+
1
]);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment