commit e120ef86062845386deea02e99f22a4dcab79690
parent f3a1aeaa7abbf1671a093bfc9f183ce37a82ebb4
Author: Ivan Gankevich <igankevich@ya.ru>
Date: Tue, 17 Jan 2017 16:26:15 +0300
Sync pipeline diagram.
Diffstat:
phd-diss-ru.org | | | 109 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
phd-diss.org | | | 110 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-- |
2 files changed, 217 insertions(+), 2 deletions(-)
diff --git a/phd-diss-ru.org b/phd-diss-ru.org
@@ -1628,6 +1628,115 @@ eqref:eq:old-sol-2d, сопоставимы для волн малых ампл
** Модель вычислений
*** Основополагающие принципы модели
*** Отображение алгоритма генерации взволнованной поверхности на вычислительную модель
+#+name: fig:pipeline
+#+begin_src dot :exports results :file build/pipeline-ru.pdf
+digraph {
+
+ node [fontsize=14,margin="0.055,0"]
+ graph [nodesep="0.25",ranksep="0.25",rankdir="TB"]
+ edge [arrowsize=0.66]
+
+ # data
+ subgraph xcluster_linear {
+ label="Линейная модель"
+
+ start [label="",shape=circle,style=filled,fillcolor=black,width=0.23]
+ spectrum [label="S(ω,θ)",shape=box]
+ acf [label="K(i,j,k)",shape=box]
+ phi [label="Φ(i,j,k)",shape=box]
+
+ # transformations
+ fourier_transform [label="Преобразование Фурье",shape=box,style=rounded]
+ solve_yule_walker [label="Решение уравнений\nЮла—Уокера",shape=box,style=rounded]
+
+ subgraph cluster_nonlinear_1 {
+ label="Моделир. нелинейности\l"
+ labeljust=left
+ style=filled
+ color=lightgrey
+ acf2 [label="K*(i,j,k)",shape=box]
+ transform_acf [label="Преобразование АКФ",shape=box,style=rounded]
+ }
+ }
+
+ subgraph xcluster_linear2 {
+
+ eps_parts [label="<e1> ε₁|<e2> ε₂|<e3> …|<e4> εₙ|<e> ε(t,x,y)",shape=record]
+ end [label="",shape=doublecircle,style=filled,fillcolor=black,width=0.23]
+
+ generate_white_noise [label="<g1> g₁|<g2> g₂|<g3> …|<g4> gₙ|<gen> Генерация\lбелого шума",shape=record,style=rounded]
+ generate_zeta [label="<g1> g₁|<g2> g₂|<g3> …|<g4> gₙ|<gen> Генерация частей\lвзволнованной мор-\lской поверхности\l",shape=record,style=rounded]
+
+ zeta_parts [label="<g1> ζ₁|<g2> ζ₂|<g3> …|<g4> ζₙ|<gen> Несшитые части реализации",shape=record]
+ overlap_add [label="<g1> ζ₁|<g2> ζ₂|<g3> …|<g4> ζₙ|<gen> Сшивание час-\lтей реализации\l",shape=record,style=rounded]
+
+ zeta_parts:g1->overlap_add:g1
+ zeta_parts:g2->overlap_add:g2
+ zeta_parts:g3->overlap_add:g3
+ zeta_parts:g4->overlap_add:g4
+
+ zeta_parts:g2->overlap_add:g1 [constraint=false]
+ zeta_parts:g3->overlap_add:g2 [constraint=false]
+ zeta_parts:g4->overlap_add:g3 [constraint=false]
+
+ overlap_add:g1->zeta2_parts:g1
+ overlap_add:g2->zeta2_parts:g2
+ overlap_add:g3->zeta2_parts:g3
+ overlap_add:g4->zeta2_parts:g4
+
+ zeta2_parts:g1->transform_zeta:g1->zeta3_parts:g1->write_zeta:g1->eps_end
+ zeta2_parts:g2->transform_zeta:g2->zeta3_parts:g2->write_zeta:g2->eps_end
+ zeta2_parts:g3->transform_zeta:g3->zeta3_parts:g3->write_zeta:g3->eps_end
+ zeta2_parts:g4->transform_zeta:g4->zeta3_parts:g4->write_zeta:g4->eps_end
+
+ }
+
+ subgraph part3 {
+
+ zeta2_parts [label="<g1> ζ₁|<g2> ζ₂|<g3> …|<g4> ζₙ|<gen> Поверхность с нормаль-\lным законом распреде-\lления\l",shape=record]
+
+ subgraph cluster_nonlinear_2 {
+ label="Моделир. нелинейности\r"
+ labeljust=right
+ style=filled
+ color=lightgrey
+ zeta3_parts [label="<g1> ζ₁|<g2> ζ₂|<g3> …|<g4> ζₙ|<gen> ζ(t,x,y)",shape=record]
+ transform_zeta [label="<g1> g₁|<g2> g₂|<g3> …|<g4> gₙ|<gen> Преобразование за-\lкона распределения\lвзволнованной мор-\lской поверхности\l",shape=record,style=rounded]
+ }
+
+ # barriers
+ eps_start [label="",shape=box,style=filled,fillcolor=black,height=0.05]
+ eps_end [label="",shape=box,style=filled,fillcolor=black,height=0.05]
+
+ write_zeta [label="<g1> g₁|<g2> g₂|<g3> …|<g4> gₙ|<gen> Запись готовых\lчастей в файл\l",shape=record,style=rounded]
+ }
+
+ # edges
+ start->spectrum->fourier_transform->acf->transform_acf
+ transform_acf->acf2
+ acf2->solve_yule_walker
+ solve_yule_walker->phi
+ phi->eps_start [constraint=false]
+ eps_start->generate_white_noise:g1
+ eps_start->generate_white_noise:g2
+ eps_start->generate_white_noise:g3
+ eps_start->generate_white_noise:g4
+ generate_white_noise:g1->eps_parts:e1->generate_zeta:g1->zeta_parts:g1
+ generate_white_noise:g2->eps_parts:e2->generate_zeta:g2->zeta_parts:g2
+ generate_white_noise:g3->eps_parts:e3->generate_zeta:g3->zeta_parts:g3
+ generate_white_noise:g4->eps_parts:e4->generate_zeta:g4->zeta_parts:g4
+
+ eps_end->end
+}
+#+end_src
+
+#+RESULTS: fig:pipeline
+[[file:build/pipeline-ru.pdf]]
+
+#+caption: Схема конвейера обработки данных, реализующего генерацию взволнованной морской поверхности по АР модели.
+#+RESULTS:
+[[file:build/pipeline.pdf]]
+
** Реализация для систем с общей памятью (SMP)
*** Алгоритм распределения нагрузки
*** Результаты тестирования
diff --git a/phd-diss.org b/phd-diss.org
@@ -1596,7 +1596,7 @@ source(file.path("R", "common.R"))
par(pty="s", mfrow=c(2, 2))
arma.qqplot_grid(
file.path("build", "propagating_wave"),
- c("elevation", "heights_x", "lengths_x", "periods")
+ c("elevation", "heights_y", "lengths_y", "periods")
)
#+end_src
@@ -1610,7 +1610,7 @@ source(file.path("R", "common.R"))
par(pty="s", mfrow=c(2, 2))
arma.qqplot_grid(
file.path("build", "standing_wave"),
- c("elevation", "heights_x", "lengths_x", "periods")
+ c("elevation", "heights_y", "lengths_y", "periods")
)
#+end_src
@@ -1752,6 +1752,112 @@ work.
- No explicit synchronisation.
- Local communications between adjacent nodes in the hierarchy.
*** Mapping wavy surface generation algorithm on computational model
+#+name: fig:pipeline
+#+begin_src dot :exports results :file build/pipeline.pdf
+digraph {
+
+ node [fontsize=14,margin="0.055,0"]
+ graph [nodesep="0.25",ranksep="0.25",rankdir="TB"]
+ edge [arrowsize=0.66]
+
+ # data
+ subgraph xcluster_linear {
+ label="Linear model"
+
+ start [label="",shape=circle,style=filled,fillcolor=black,width=0.23]
+ spectrum [label="S(ω,θ)",shape=box]
+ acf [label="K(i,j,k)",shape=box]
+ phi [label="Φ(i,j,k)",shape=box]
+
+ # transformations
+ fourier_transform [label="Fourier transform",shape=box,style=rounded]
+ solve_yule_walker [label="Solve Yule—Walker\nequations",shape=box,style=rounded]
+
+ subgraph cluster_nonlinear_1 {
+ label="Simulate non-linearity\l"
+ labeljust=left
+ style=filled
+ color=lightgrey
+ acf2 [label="K*(i,j,k)",shape=box]
+ transform_acf [label="Transform ACF",shape=box,style=rounded]
+ }
+ }
+
+ subgraph xcluster_linear2 {
+
+ eps_parts [label="<e1> ε₁|<e2> ε₂|<e3> …|<e4> εₙ|<e> ε(t,x,y)",shape=record]
+ end [label="",shape=doublecircle,style=filled,fillcolor=black,width=0.23]
+
+ generate_white_noise [label="<g1> g₁|<g2> g₂|<g3> …|<g4> gₙ|<gen> Generate\lwhite noise",shape=record,style=rounded]
+ generate_zeta [label="<g1> g₁|<g2> g₂|<g3> …|<g4> gₙ|<gen> Generate ocean\lwavy surface parts\l",shape=record,style=rounded]
+
+ zeta_parts [label="<g1> ζ₁|<g2> ζ₂|<g3> …|<g4> ζₙ|<gen> Non-crosslinked\lrealisation parts",shape=record]
+ overlap_add [label="<g1> ζ₁|<g2> ζ₂|<g3> …|<g4> ζₙ|<gen> Crosslink realisation\lparts\l",shape=record,style=rounded]
+
+ zeta_parts:g1->overlap_add:g1
+ zeta_parts:g2->overlap_add:g2
+ zeta_parts:g3->overlap_add:g3
+ zeta_parts:g4->overlap_add:g4
+
+ zeta_parts:g2->overlap_add:g1 [constraint=false]
+ zeta_parts:g3->overlap_add:g2 [constraint=false]
+ zeta_parts:g4->overlap_add:g3 [constraint=false]
+
+ overlap_add:g1->zeta2_parts:g1
+ overlap_add:g2->zeta2_parts:g2
+ overlap_add:g3->zeta2_parts:g3
+ overlap_add:g4->zeta2_parts:g4
+
+ zeta2_parts:g1->transform_zeta:g1->zeta3_parts:g1->write_zeta:g1->eps_end
+ zeta2_parts:g2->transform_zeta:g2->zeta3_parts:g2->write_zeta:g2->eps_end
+ zeta2_parts:g3->transform_zeta:g3->zeta3_parts:g3->write_zeta:g3->eps_end
+ zeta2_parts:g4->transform_zeta:g4->zeta3_parts:g4->write_zeta:g4->eps_end
+
+ }
+
+ subgraph part3 {
+
+ zeta2_parts [label="<g1> ζ₁|<g2> ζ₂|<g3> …|<g4> ζₙ|<gen> Wavy surface with\lGaussian distribution\l",shape=record]
+
+ subgraph cluster_nonlinear_2 {
+ label="Simulate non-linearity\r"
+ labeljust=right
+ style=filled
+ color=lightgrey
+ zeta3_parts [label="<g1> ζ₁|<g2> ζ₂|<g3> …|<g4> ζₙ|<gen> ζ(t,x,y)",shape=record]
+ transform_zeta [label="<g1> g₁|<g2> g₂|<g3> …|<g4> gₙ|<gen> Transform wavy\lsurface elevation\lprobability distribution\l",shape=record,style=rounded]
+ }
+
+ # barriers
+ eps_start [label="",shape=box,style=filled,fillcolor=black,height=0.05]
+ eps_end [label="",shape=box,style=filled,fillcolor=black,height=0.05]
+
+ write_zeta [label="<g1> g₁|<g2> g₂|<g3> …|<g4> gₙ|<gen> Write finished\lparts to a file\l",shape=record,style=rounded]
+ }
+
+ # edges
+ start->spectrum->fourier_transform->acf->transform_acf
+ transform_acf->acf2
+ acf2->solve_yule_walker
+ solve_yule_walker->phi
+ phi->eps_start [constraint=false]
+ eps_start->generate_white_noise:g1
+ eps_start->generate_white_noise:g2
+ eps_start->generate_white_noise:g3
+ eps_start->generate_white_noise:g4
+ generate_white_noise:g1->eps_parts:e1->generate_zeta:g1->zeta_parts:g1
+ generate_white_noise:g2->eps_parts:e2->generate_zeta:g2->zeta_parts:g2
+ generate_white_noise:g3->eps_parts:e3->generate_zeta:g3->zeta_parts:g3
+ generate_white_noise:g4->eps_parts:e4->generate_zeta:g4->zeta_parts:g4
+
+ eps_end->end
+}
+#+end_src
+
+#+caption: Diagram of a data processing pipeline, that implements ocean wavy surface generation via AR model.
+#+RESULTS: fig:pipeline
+[[file:build/pipeline.pdf]]
+
** SMP implementation
*** Load balancing algorithm
*** Evaluation