-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathperformance.html
189 lines (168 loc) · 12.6 KB
/
performance.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
<!DOCTYPE html>
<html class="writer-html5" lang="en" data-content_root="./">
<head>
<meta charset="utf-8" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Performance in OpenDrift — OpenDrift documentation</title>
<link rel="stylesheet" type="text/css" href="_static/pygments.css?v=b86133f3" />
<link rel="stylesheet" type="text/css" href="_static/css/theme.css?v=e59714d7" />
<link rel="stylesheet" type="text/css" href="_static/graphviz.css?v=4ae1632d" />
<link rel="stylesheet" type="text/css" href="_static/plot_directive.css" />
<link rel="stylesheet" type="text/css" href="_static/sg_gallery.css?v=d2d258e8" />
<link rel="stylesheet" type="text/css" href="_static/sg_gallery-binder.css?v=f4aeca0c" />
<link rel="stylesheet" type="text/css" href="_static/sg_gallery-dataframe.css?v=2082cf3c" />
<link rel="stylesheet" type="text/css" href="_static/sg_gallery-rendered-html.css?v=1277b6f3" />
<link rel="stylesheet" type="text/css" href="_static/theme_overrides.css" />
<script src="_static/jquery.js?v=5d32c60e"></script>
<script src="_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script>
<script src="_static/documentation_options.js?v=5929fcd5"></script>
<script src="_static/doctools.js?v=9bcbadda"></script>
<script src="_static/sphinx_highlight.js?v=dc90522c"></script>
<script src="_static/js/theme.js"></script>
<link rel="index" title="Index" href="genindex.html" />
<link rel="search" title="Search" href="search.html" />
<link rel="next" title="Tutorial" href="tutorial.html" />
<link rel="prev" title="Installing OpenDrift" href="install.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="index.html" class="icon icon-home">
OpenDrift
<img src="_static/opendrift_logo.png" class="logo" alt="Logo"/>
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="index.html">Introduction to OpenDrift</a></li>
</ul>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="history_link.html">History</a></li>
<li class="toctree-l1"><a class="reference internal" href="install.html">Installing OpenDrift</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">Performance in OpenDrift</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#generic-settings">Generic settings</a></li>
<li class="toctree-l2"><a class="reference internal" href="#addtitional-packages">Addtitional packages</a></li>
<li class="toctree-l2"><a class="reference internal" href="#tuning-the-simulation">Tuning the simulation</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#some-notes-about-performance">Some notes about performance</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="tutorial.html">Tutorial</a></li>
<li class="toctree-l1"><a class="reference internal" href="theory/index.html">Theory</a></li>
<li class="toctree-l1"><a class="reference internal" href="theory/index.html#drift-in-the-ocean">Drift in the Ocean</a></li>
<li class="toctree-l1"><a class="reference internal" href="choosing_a_model.html">How to choose which model to use</a></li>
<li class="toctree-l1"><a class="reference internal" href="writing_a_new_model.html">How to write a new module</a></li>
<li class="toctree-l1"><a class="reference internal" href="gallery/index.html">Gallery</a></li>
<li class="toctree-l1"><a class="reference internal" href="oil_types.html">Oil types</a></li>
<li class="toctree-l1"><a class="reference internal" href="interaction_with_coastline.html">Interaction with coastline</a></li>
<li class="toctree-l1"><a class="reference internal" href="docker.html">Using OpenDrift in a container</a></li>
<li class="toctree-l1"><a class="reference internal" href="gui.html">Graphical User Interface</a></li>
<li class="toctree-l1"><a class="reference internal" href="references.html">Publications</a></li>
<li class="toctree-l1"><a class="reference internal" href="services.html">Services using OpenDrift</a></li>
<li class="toctree-l1"><a class="reference internal" href="autoapi/index.html">API Reference</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="index.html">OpenDrift</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">Performance in OpenDrift</li>
<li class="wy-breadcrumbs-aside">
<a href="_sources/performance.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="performance-in-opendrift">
<h1>Performance in OpenDrift<a class="headerlink" href="#performance-in-opendrift" title="Link to this heading"></a></h1>
<section id="generic-settings">
<h2>Generic settings<a class="headerlink" href="#generic-settings" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Check if <cite>OMP_NUM_THREADS</cite> is set in a way that restricts the number of cores that can be used.</p></li>
</ul>
</section>
<section id="addtitional-packages">
<h2>Addtitional packages<a class="headerlink" href="#addtitional-packages" title="Link to this heading"></a></h2>
<p>Some optional packages might increase performance for your use case:</p>
<blockquote>
<div><ul class="simple">
<li><p>roaring-landmask (<cite>pip install roaring-landmask</cite>), will save you disk-space and startup-time. Especially if you run many small simulations this can make a big difference.</p></li>
<li><p>pykdtree (among other areas this might speed up cartopy and the unstructured readers)</p></li>
<li><p>imagemagick (might yield faster gif generation)</p></li>
</ul>
</div></blockquote>
</section>
<section id="tuning-the-simulation">
<h2>Tuning the simulation<a class="headerlink" href="#tuning-the-simulation" title="Link to this heading"></a></h2>
<p>OpenDrift is fairly optimised Python code, but simulations may take long time (even several days) if many elements (~millions) and many time steps (~thousands).
We hope to parallelise OpenDrift in the near future, to improve performance on machines with many cores. In the meantime, the following can be done to increase performance or decrease memory and disk usage:</p>
<ul class="simple">
<li><p>Decrease the number of particles to a minimum</p></li>
<li><p>Not using as larger time steps than necessary. When calling method <code class="docutils literal notranslate"><span class="pre">run()</span></code>, one can specify <code class="docutils literal notranslate"><span class="pre">time_step</span></code> which is the internal time step for calculation, and <code class="docutils literal notranslate"><span class="pre">time_step_output</span></code> which is the steps at which data are stored in memory (and written to file if <code class="docutils literal notranslate"><span class="pre">outfile</span></code> is specified)</p></li>
<li><p>Reduce memory consumption by either:</p>
<ul>
<li><p>specifying <code class="docutils literal notranslate"><span class="pre">export_buffer_length</span></code> in run(). 100 is default, but a smaller value may be specified if there are very many elements (~millions)</p></li>
<li><p>limit the number of variables saved to disk (and stored in memory) by providing a list of needed variables as the list <code class="docutils literal notranslate"><span class="pre">export_variables</span></code> when calling run()</p></li>
</ul>
</li>
<li><p>Reading data from local files is faster than from remote servers, e.g. Thredds, although the latter is very convenient.</p></li>
<li><p>For the 3D models, vertical mixing takes considerable time. If not needed, this can be switched off by setting <code class="docutils literal notranslate"><span class="pre">o.set_config('processes:vertical_mixing',</span> <span class="pre">False)</span></code></p>
<ul>
<li><p>An upper limit may be given to the number of iterations per outer timestep, as illustrated in example_long_verticalmixing.py.</p></li>
<li><p>The mixing can also be significantly speeded up by using constant TS-profiles during the iterations, by specifying <code class="docutils literal notranslate"><span class="pre">o.set_config('vertical_mixing:TSprofiles',</span> <span class="pre">False)</span></code> (which is default)</p></li>
</ul>
</li>
<li><p>Quasi-parallelisation can be done by splitting the initial elements up in geographical sub-regions, and running simulations in parallel for each subset.</p></li>
</ul>
<section id="some-notes-about-performance">
<h3>Some notes about performance<a class="headerlink" href="#some-notes-about-performance" title="Link to this heading"></a></h3>
<p>Each OpenDrift module has an attribute <code class="docutils literal notranslate"><span class="pre">max_speed</span></code> which indicates the maximum velocity that elements will likely encounter. This is accessible as <code class="docutils literal notranslate"><span class="pre">o.max_speed</span></code> for an OpenDrift object <code class="docutils literal notranslate"><span class="pre">o</span></code>. Typical values are 2 m/s for ocean drift models, but as large as 12 m/s for the WindBlow module where elements move at the speed of the wind. It might be overriden by the user at any time, simply by writing <code class="docutils literal notranslate"><span class="pre">o.max_speed</span> <span class="pre">=</span> <span class="pre">3</span></code> before starting a run. This parameter is not an absolute bound for instantaneous velocity, but rather for the average velocity in a particular direction over a time period. It serves two purposes:</p>
<ul class="simple">
<li><p>During the run, all readers are called to return data (2D or 3D “blocks”) covering all the elements. This block of data should not only cover elements at their present position, but also the area over which elements might move within the next timestep of the reader (e.g. typically 1, 3, 6 or 24 hours for an ocean model). As with the landmask above, this buffer around present positions is calculated as <code class="docutils literal notranslate"><span class="pre">o.max_speed</span> <span class="pre">*</span> <span class="pre">timestep_of_reader</span></code>. Again, it of interest to keep the buffer as small as possible to save time reading data from file (or from Thredds), but still avoiding that elements will leave the reader-block coverage within the timestep.</p></li>
</ul>
</section>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="install.html" class="btn btn-neutral float-left" title="Installing OpenDrift" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="tutorial.html" class="btn btn-neutral float-right" title="Tutorial" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>© Copyright 2020, Knut-Frode Dagestad ([email protected]) and Gaute Hope ([email protected])..</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>