Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
U
uva
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Model registry
Operate
Environments
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Taddeüs Kroes
uva
Commits
6eeac410
Commit
6eeac410
authored
13 years ago
by
Taddeüs Kroes
Browse files
Options
Downloads
Patches
Plain Diff
ModSim ass4 taddeus: Wrote 'Theorie' section of report.
parent
253c9703
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
modsim/ass4_taddeus/vibstring/report/report.tex
+147
-3
147 additions, 3 deletions
modsim/ass4_taddeus/vibstring/report/report.tex
with
147 additions
and
3 deletions
modsim/ass4_taddeus/vibstring/report/report.tex
+
147
−
3
View file @
6eeac410
\documentclass
[10pt,a4paper]
{
article
}
\usepackage
[dutch]
{
babel
}
\usepackage
[utf8]
{
inputenc
}
\usepackage
{
booktabs,graphicx,float,hyperref
}
\usepackage
{
booktabs,graphicx,float,hyperref
,amsmath
}
% Paragraph indentation
\setlength
{
\parindent
}{
0pt
}
...
...
@@ -20,14 +20,145 @@
\section
{
Inleiding
}
Het tweede deel van practicumopdracht 4 omhelst het programmeren van een
Het tweede deel van practicumopdracht 4 omhelst het simuleren van een
trillende snaar in een parallel programma. Hierbij wordt ook een sequëntieel
programma ontwikkeld, zodat de stijging in performance door parallellisatie kan
worden bepaald.
\section
{
Theorie
}
\subsection
{
Simulatie
}
De uitwijking van de snaar wordt gegeven als een functie van positie en tijd.
De bijbehordende differentiaalvergelijking is
$$
\frac
{
\delta
^
2
y
}{
\delta
t
^
2
}
=
c
^
2
\frac
{
\delta
^
2
y
}{
\delta
x
^
2
}$$
De oplossing van deze vergelijking,
$
y
(
x, t
)
$
, is de uitwijking van het punt
van de snaar op positie
$
x
$
op een bepaald moment in de tijd
$
t
$
. Om een
computersimulatie te kunnen uitvoeren moet deze oplossing worden
gediscretiseerd. De formule hiervoor is gegeven in de opdracht:
$$
y
(
x
_
i, t
_
j
+
\Delta
t
)
=
2
y
(
x
_
i, t
_
j
)
-
y
(
x
_
i, t
_
j
-
\Delta
t
)
+
\tau
^
2
(
y
(
x
_
i
-
\Delta
x, t
_
j
)
-
2
y
(
x
_
i, t
_
j
)
+
y
(
x
_
i
+
\Delta
x, t
_
j
))
$$
Met:
$$
\tau
=
\frac
{
c
\Delta
t
}{
\Delta
x
}$$
$
\tau
$
geeft de stabiliteit van de oplossing. In het document dat is
meegeleverd met de opdracht is bewezen dat de oplossing stabiel is als, en
alleen dan als
$
\tau
\leq
1
$
.
\subsubsection*
{
Initialisatie
}
Voor de begintoestand (
$
t
=
0
$
) van de snaar zijn er twee toestanden
geïmplementeerd:
\begin{itemize}
\item
Een sinusvorm:
$
y
(
x
)
=
sin
(
n
\pi
\frac
{
x
}{
l
}
)
$
. Hierbij is
$
n
$
een
constante en
$
l
$
is de lengte van de snaar.
\item
Een snaar vastgegegrepen op positie
$
x
_
p
$
:
$$
y
(
x
)
=
\left\{
\begin
{
array
}{
ll
}
\frac
{
x
}{
x
_
p
}
&
(
x < x
_
p
)
\\
\frac
{
l
-
x
}{
l
-
x
_
p
}
&
(
x > x
_
p
)
\\
\end
{
array
}
\right
.
$$
\end{itemize}
De gegeven formule berekent de toestand van een punt
$
x
_
i
$
op de snaar op het
tijdstip
$
t
_
j
+
\Delta
t
$
. Hiervoor zijn de vorige twee tijdstoestanden nodig
(op tijdstip
$
t
_
j
$
en
$
t
_
j
-
\Delta
t
$
). Bovenstaande initialisatiemethoden
berekenen alleen de toestand van de snaar op
$
t
=
0
$
. Om de toestand op
$
t
=
1
$
te berekenen zijn volgens de gegeven formule de tooestand op
$
t
=
0
$
en op
$
t
=
-
1
$
nodig. Omdat de toestand op
$
t
=
-
1
$
onbekend is, moet
$
y
(
x
_
i,
1
)
$
op een
andere manier worden berekend. Voor dit uitzonderingsgeval wordt gebruik
gemaakt van het feit dat de snaar op tijdstip
$
t
=
0
$
in rusttoestand is. Dit
betekent dat de toestand op tijdstip
$
t
=
-
1
$
gelijk is aan de toestand op
tijdstip
$
t
=
1
$
. Met dit gegeven kan de formule als volgt worden beschreven
voor
$
t
=
1
$
:
\begin{tabular}
{
rl
}
$
y
(
x
_
i, t
_
1
)
$
&
$
=
2
y
(
x
_
i, t
_
0
)
-
y
(
x
_
i, t
_{
-
1
}
)
+
\tau
^
2
(
y
(
x
_
i
-
\Delta
x, t
_
j
)
-
2
y
(
x
_
i, t
_
j
)
+
y
(
x
_
i
+
\Delta
x, t
_
j
))
$
\\
&
$
=
2
y
(
x
_
i, t
_
0
)
-
y
(
x
_
i, t
_
1
)
+
\tau
^
2
(
y
(
x
_
i
-
\Delta
x, t
_
j
)
-
2
y
(
x
_
i, t
_
j
)
+
y
(
x
_
i
+
\Delta
x, t
_
j
))
$
\\
\end{tabular}
$$
2
y
(
x
_
i, t
_
1
)
=
2
y
(
x
_
i, t
_
0
)
+
\tau
^
2
(
y
(
x
_
i
-
\Delta
x, t
_
j
)
-
2
y
(
x
_
i, t
_
j
)
+
y
(
x
_
i
+
\Delta
x, t
_
j
))
$$
$$
y
(
x
_
i, t
_
1
)
=
y
(
x
_
i, t
_
0
)
+
\frac
{
1
}{
2
}
\tau
^
2
(
y
(
x
_
i
-
\Delta
x, t
_
j
)
-
2
y
(
x
_
i, t
_
j
)
+
y
(
x
_
i
+
\Delta
x, t
_
j
))
$$
Deze formule heeft alleen de toestand op
$
t
=
0
$
nodig. In de implementatie
moet (alleen) voor het tijdstip
$
t
=
1
$
dus deze omgeschreven formule worden
gebruikt, in plaats van de gegeven formule.
\subsection
{
Parallellisatie
}
Omdat voor de toestand van een punt op de snaar de vorige tijdtoestand nodig
is, zijn er weinig mogelijkheden om te parallelliseren in de tijddimensie.
Omdat deze afhankelijkheid er in de afstandsdimensie niet is (om de uitwijking
op een punt van de snaar te berekenen zijn immers alleen waarden uit de vorige
tijdstippen nodig), is ervoor gekozen om hierin te parallelliseren. Dit gebeurt
door het verdelen van de snaar in stukken van een grootte die proportioneel is
aan de verwerkingskracht van de bijbehorende ``node''. Omdat de computers die
in dit geval worden gebruikt hetzelfde zijn, kan de snaar in gelijke stukken
worden verdeeld. Elke node berekent voor zijn eigen snaargedeelte steeds de
volgende tijdstpestand voor elke positie op het gedeelte, waarbij tussen de
tijdstappen de meest linker- en rechter waardes worden opgehaald van de
``omliggende'' nodes.
Omdat slechts voor de twee randwaardes telkens hoeft te worden gecommuniceerd
tussen de nodes, zal de parallellisatie waarschijnlijk weinig overhead
opleveren. Vooral bij een kleine
$
\Delta
x
$
verwacht ik dat het parallelle
programma een merkbare performancewinst zal laten zien. Merk op dat tijdens de
communicatie moet worden gewacht op de randwaardes van de omliggende nodes, wat
ervoor kan zorgen dat een node korte tijd ``idle'' is.
\subsubsection*
{
Tijdstappen parallelliseren
}
Bij wijze van gedachtenexperiment ben ik nagegaan of er in de tijdsdimensie ook
te parallelliseren is, en het viel mij op dat een vorm van ``pipelining'' te
implementeren zou zijn:
Op het moment dat de toestand op het punt
$
i
$
tijdstip
$
j
$
(
$
y
(
x
_
i, t
_
j
)
$
) is
berekend, kan de volgende toestand (
$
y
(
x
_
i, t
_{
j
+
1
}
)
$
) pas worden berekend
wanneer
$
y
(
x
_{
i
-
1
}
, t
_
j
)
$
en
$
y
(
x
_{
i
+
1
}
, t
_
j
)
$
zijn berekend. De rest van
de posities zijn irrelevant, en hoeven dus ook niet te worden berekend voordat
$
y
(
x
_
i, t
_{
j
+
1
}
)
$
kan worden berekend. In berekeningsstappen is dit als volgt
uit te beelden:
\begin{table}
[H]
\begin{tabular}
{
rc
}
$
\stackrel
{
\uparrow
}{
t
}$
&
$
\left
.
\begin
{
array
}{
ccccc
}
1
&
2
&
3
&
4
&
\ldots
\\
4
&
5
&
6
&
\ldots
&
\ldots
\\
6
&
7
&
\ddots
&
\ldots
&
\ldots
\\
8
&
\vdots
&
\vdots
&
\ddots
&
\ldots
\\
\vdots
&
\vdots
&
\vdots
&
\vdots
&
\ddots
\\
\end
{
array
}
\right
.
$
\\
&
$
x
\rightarrow
$
\\
\end{tabular}
\end{table}
We zien dat op het moment dat van de eerste toestand de derde waarde is
berekend, van de tweede toestand de eerste waarde kan worden berekend, etc..
Deze methode is moeilijk te implementeren en zal veel communicatie vergen
tussen de verschillende processen. Het is daarom niet verstandig om eerst in
de tijddimensie te parallelliseren. De genoemde eigenschappen zouden echter
wellicht wel kunnen worden gebruikt als uitbreiding op het verdelen van de
snaar in delen, bijvoorbeeld zou bij het wacthen op de randwaardes van
omliggende nodes al in het midden van het snaargedeelte kunnen worden begonnen
met doorrekenen (merk op dat het maximum aantal door te rekenen tijdsstappen in
dat geval een maximum heeft dat proportioneel is aan het aantal afstandsstappen
van het snaargedeelte).
\section
{
Implementatie
}
\subsection
{
Sequentiëel
}
\subsection
{
Parallel
}
\subsection
{
Shell scripts
}
\subsection
{
Gebruik
}
...
...
@@ -36,6 +167,19 @@ Het tweede deel van practicumopdracht 4 omhelst het programmeren van een
\section
{
Resultaten
}
\subsection
{
Trillende snaar
}
\subsubsection*
{
Parallellisatie
}
\subsection
{
Performance
}
\appendix
%\begin{figure}[H]
% \label{fig:sinus}
% \includegraphics[width=15cm]{sinus.pdf}
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment