-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
388 lines (336 loc) · 19.9 KB
/
index.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
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
<!-- this pages is rendered on https://lpsmodsimteam.github.io/ -->
<!DOCTYPE html>
<HTML lang='en'>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Survey of Software for Simulating Computers, Networks, Memory, HPCs</title>
<meta property="og:title" content="Survey of Software for Simulation" /> <!-- https://ogp.me/ -->
<meta property="og:type" content="website" /> <!-- https://ogp.me/#types -->
<meta property="og:site_name" content="Survey of Software for Simulation" /> <!-- https://ogp.me/#optional -->
<!-- when clicking on an named anchor, highlight the hyperlinked text -->
<style>
/* https://css-tricks.com/on-target/ */
:target {
background: yellow;
}
</style>
<style>
/* TOC formatting
from https://www.tipsandtricks-hq.com/simple-table-of-contents-toc-using-pure-html-and-css-code-9217 */
#toc_container {
background: #f9f9f9 none repeat scroll 0 0;
border: 1px solid #aaa;
display: table;
font-size: 95%;
margin-bottom: 1em;
padding: 20px;
width: auto;
}
.toc_title {
font-weight: 700;
text-align: center;
}
/* table of contents ordering
from https://jsfiddle.net/jasonkarns/6xkzv37e/
linked from https://stackoverflow.com/questions/14138507/creating-table-of-contents-in-html/21684020#21684020 */
/* ol {
counter-reset: item
}
li {
display: block
}
li:before {
content: counters(item, ".")" ";
counter-increment: item
}
*/
/* a bit of space around the edges looks cleaner */
html, body {
height: 100%;
margin: 5;
padding: 5;
}
/* CSS trick for forcing images to fit inside window */
img {
padding: 0;
display: block;
margin: 0 auto;
max-height: 100%;
max-width: 100%;
}
</style>
<!-- defines the default zoom for mobile devices -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
</head>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-Y839ZLCG2T"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-Y839ZLCG2T');
</script>
<BODY>
<h2>A Survey of Software for Simulating Computers, Networks, Memory, HPCs</h2>
<P><I>Warning</i>: Includes deprecated software.</P>
<P>Want to contribute something to this page? <BR>
Submit a Pull Request to <a href="https://github.com/lpsmodsimteam/lpsmodsimteam.github.io">github.com/lpsmodsimteam/lpsmodsimteam.github.io</a></P>
</P>
<P>Disclaimers:</P>
<UL>
<LI>Inclusion of software on the page (or forked repos) doesn't imply endorsement by anyone.</LI>
<LI>Software has not been tested and may not work.</LI>
</UL>
<P> </P>
<P>There are many types of <a href="https://en.wikipedia.org/wiki/Computer_simulation">computer simulation</a>,
including
<UL>
<LI><a href="https://en.wikipedia.org/wiki/Finite_element_method">finite element analysis</a> for structural analysis, electromagnetics, etc</LI>
<LI><a href="https://en.wikipedia.org/wiki/Discrete-event_simulation">discrete event simulation</a> -- "how long does this take?" -- Useful for timing in the context of multiple queues</LI>
<LI><a href="https://en.wikipedia.org/wiki/Finite-state_machine">finite-state machine (FSM)</a> -- "what happens next?"</LI>
<LI>numerical simulation, e.g., differential equations for fluid dynamics (weather models)
</uL>
<P>This page is focused on simulating computers using computers.
<div id="toc_container">
<p class="toc_title">Contents</p>
<!-- the following table was generated on the command line using
cat user_documentation.html |\
grep "^<H" |\
sed 's/<\/H.*>/<\/a><\/LI>/' |\
sed 's/<H2 id="/ <LI><a href="#/' |\
sed 's/<H3 id="/ <LI><a href="#/' |\
sed 's/<H4 id="/ <LI><a href="#/'
-->
<OL class="toc_list">
<LI><a href="#DES">Discrete Event Simulation (DES)</a></LI>
<OL>
<LI><a href="#SST">Structural Simulation Toolkit (SST)</a></LI>
<LI><a href="#SimPy">SimPy</a></LI>
</OL>
<LI><a href="#nework_simulation">Network Simulators</a></LI>
<LI><a href="#processor_simulation">Processor Simulators</a></LI>
<LI><a href="#HDL">HDL</a></LI>
<LI><a href="#survey_of_simulation_surveys">Survey of Simulation Surveys</a></LI>
</OL>
</div>
<P> </P>
<fieldset><legend><H2 id="DES">Discrete Event Simulation</H2></legend>
<P>
<a href="https://en.wikipedia.org/wiki/Discrete-event_simulation">en.wikipedia.org/wiki/Discrete-event_simulation</a>
</P>
<P><a href="https://en.wikipedia.org/wiki/List_of_discrete_event_simulation_software">en.wikipedia.org/wiki/List_of_discrete_event_simulation_software</a>
</P>
<a href="https://www.southampton.ac.uk/~mb1a10/sim/Discrete_Event.pdf">discrete event simulation</a>
<a href="https://en.wikipedia.org/wiki/DEVS">wikipedia: DEVS</a>; see also <a href="https://hal.archives-ouvertes.fr/hal-01562929/document">Formal Framework for Discrete-Event Simulation</a>
<P>Domains that share the DES label but are not relevant
because they feature person-in-the-loop:
<a href="https://www.ncbi.nlm.nih.gov/books/NBK293948/">hospital simulations</a> and <BR>
military training in aviation.
<P>DES jargon: A "referent" is the thing being simulated.
<fieldset><legend><H3 id="SST">Structural Simulation Toolkit (SST)</H3></legend>
<P>written in C++, with input specified in Python</P>
<P>Official SST documentation is on <a href="http://sst-simulator.org/">sst-simulator.org/</a> and a subpage <a href="http://sst-simulator.org/sst-docs/">sst-simulator.org/sst-docs/</a></P>
<P>Official <a href="https://github.com/orgs/sstsimulator/repositories">SST repos</a>:</P>
<UL>
<LI><a href="https://github.com/sstsimulator/sst-core">github.com/sstsimulator/sst-core</a></LI>
<LI><a href="https://github.com/sstsimulator/sst-elements">github.com/sstsimulator/sst-elements</a></LI>
<LI><a href="https://github.com/sstsimulator/sst-macro">github.com/sstsimulator/sst-macro</a></LI>
<LI><a href="https://github.com/sstsimulator/sst-docs">github.com/sstsimulator/sst-docs</a></LI>
</UL>
Unofficial tutorial materials:
<UL>
<LI><a href="https://github.com/lpsmodsimteam/sst_introductory_tutorial">github.com/lpsmodsimteam/sst_introductory_tutorial</a></LI>
<LI><a href="https://github.com/jleidel/sst-documentation/tree/Level3Container">github.com/jleidel/sst-documentation in the Level3Container branch</a></LI>
<LI><a href="https://github.com/lpsmodsimteam/sst_statistics_tutorial">github.com/lpsmodsimteam/sst_statistics_tutorial</a></LI>
<LI><a href="https://github.com/lpsmodsimteam/sst_logging_tutorial">github.com/lpsmodsimteam/sst_logging_tutorial</a></LI>
<LI><a href="https://www.youtube.com/watch?v=ipxoVb2dEcw&list=PLgehegDe4T2y1badxrxcuvIsX42V64t2x">YouTube video of SST</a>; see also <a href="https://github.com/lpsmodsimteam/sst-video-demo-examples">github.com/lpsmodsimteam/sst-video-demo-examples</a></LI>
<LI>a "car wash" model: <a href="https://github.com/sstsimulator/sst-elements/tree/master/src/sst/elements/simpleSimulation">github.com/sstsimulator/sst-elements</a></LI>
</UL>
<P><a href="sst_frequently_asked_questions.html">Frequently asked questions (FAQ)</a>
<P>Utilties:
<UL>
<LI><a href="https://github.com/tactcomplabs/sst-containers">github.com/tactcomplabs/sst-containers</a></LI>
<LI><a href="https://github.com/lpsmodsimteam/ahp_graph">github.com/lpsmodsimteam/ahp_graph</a></LI>
<LI><a href="https://github.com/tactcomplabs/sst-dbg">github.com/tactcomplabs/sst-dbg</a></LI>
<UL>
<LI>per component debug data dumps using the SIGUSR2 signaling method</LI>
<LI>data can be dumped in JSON or CSV form (compile-time selectable)</LI>
<LI>the library is "header only" so it doesn't require you to link against anything new</LI>
<LI>there is support for MPI dumps whereby the library will dump a single file per rank, per requested dump. the default is to dump a file per component per requested dump (which is fine for small runs)</LI>
<LI>there are two built-in "consoles" to help you enable/use the library</LI>
<UL>
<LI>sst-dbg : basic command line console that will allow you to dump data at a specific wall clock cadence, single dump (one shot) or a random cadence. Supports sequential, threaded and MPI SST runs. Supports ALL SST command line options
<LI>sst-dbg-console : ftxui based console infrastructure for executing and visualizing the debugger output
</UL>
</UL>
</UL>
<P>More SST-related effors: <a href="https://github.com/orgs/lpsmodsimteam/repositories">github.com/orgs/lpsmodsimteam/repositories</a></P>
<H2>SST use cases</h2>
<ul>
<LI>Use SST for coursework. Students run existing models and tweak available parameters. Expected duration is semester-long coursework or project. </li>
<ul>
<li>Performance of SST and scaling of SST are not crucial -- simulation runs on desktop for less than a few hours. Existing components provided by SST suffice</li>
<li>student project or coursework may be focused on a specific aspect (network, memory, cpu) or generic system modeling</li>
<li>Desktop-scale workflow and using Excel for plotting</li>
<LI>Professor has vetted the viability of SST for the coursework.</LI>
</ul>
<LI>Extension of existing components for graduate research (masters or PhD level)</li>
<ul>
<li>2-3 years of actual research with a year of onboarding. </li>
<li>Performance and scaling are nice-to-have. If SST is too slow or too costly student might switch to other DES software.</li>
<li>Desktop-scale workflow to Excel for plotting</li>
<li>Graduate student starts by writing either their own serial DES of a specific aspect, e.g., network, memory, cpu and
then migrate to SST for more complicated aspects of integration. Study at system-level is of consequences of changing one aspect -
memory size, network topology, routing strategy, CPU isa, CPU cache size, file system access <BR>
Or<BR>
How an application will perform on a system with specific memory size, network topology, routing strategy, CPU isa, CPU cache size, file system access</li>
</ul>
<LI>non-SST architect: Given a set of parameters for an existing model, produce plots. </li>
<ul>
<li>SST is not that visible to user</li>
<li>Desktop-scale workflow to Excel for plotting</li>
</ul>
<LI>Core IP development for commercial companies</li>
<ul>
<li>Modifying sst-core is typically seen as out-of-scope. If SST doesn't scale or isn't performant the Engineer will switch to using Excel or some other DES.</li>
<li>Desktop-scale workflow to Excel for plotting; may grow to use an HPC to host SST simulations. At large scale the simulation logs output in hdf5 or elastic</li>
<li>Core IP may be narrowly focused on network, memory, cpu; or may be an integrator asking questions of the system design. </li>
<li>Limitations of performance and scaling constrain scope of business use case </li>
<li>The competition to using SST is just buying off the shelf DES, e.g. from Siemens</li>
</ul>
<LI>Folks interested in answering complex questions but unable to simulate using SST as-is due to limitations of performance or scalability or lack of components</li>
<ul>
<li>motivated by performance or scaling, interested in modifying sst-core</li>
<li>Includes both (desktop-scale workflow to Excel for plotting) and (large scale the simulation logs output in hdf5 or elastic)</li>
</ul>
</ul>
<P>For questions about running serial software on non-existent hardware, use <a href="#gem5">Gem5</a>.</p>
<P>For network questions that doen't involve endpoints, use <a href="#omnet">OMNet++</a> or NS2/<a href="#ns3">NS3</a>.</p>
<h2>Tutorial content needed for SST</h2>
<ul>
<LI>what is <a href="https://en.wikipedia.org/wiki/Discrete-event_simulation">DES</a>? </li>
<LI>SST vs other computer architecture simulation software like
<a href="#verilator">Verilator</a>,
<a href="#ns3">ns3</a>,
<a href="#omnet">OMNet++</a>,
<a href="#gem5">gem5</a></li>
<LI>Is SST cycle accurate?</li>
<LI>how does SST relate to DES?</li>
<LI>how does SST compare to alternative DES options?</li>
<ul><li><a href="#simpy">SimPy</a></li></ul>
<LI>How to specify architecture using Python driver file. [TODO: demo needed.]</li>
<LI>How to specify complicated arch using Python ahp_graph. See <a href="https://github.com/lpsmodsimteam/ahp_graph/tree/master/examples">https://github.com/lpsmodsimteam/ahp_graph/tree/master/examples</a></li>
<LI>Why is running my MPI application on a simulated HPC architecture non-trivial?</li>
<ul><li>SST is just a DES. That means it doesn't run an operating system or have a compiler. An application needs to be compiled, and the compiled application relies on system calls provided by the operating system. Also, applications may rely on having access to a filesystem. There's no model of I/O included in SST. As a consequence, “running an application” is often replaced with relying on patterns of message passing rather than the actual messages associated with an application.</li>
<li>See QEMU and gem5 instead</li>
</ul>
<LI>How to avoid using Python for sst: JSON input [TODO: demo needed.]</li>
<LI>How to specify absurdly large simulations: parallel JSON input [TODO: demo needed.]</li>
<LI>What type and size of computer do I need for SST?</li>
<ul>
<li>Desktop to HPC</li>
<LI>TODO: link to benchmarks that are used for characterizing scalability and performance, e.g.
<a href="https://github.com/sstsimulator/sst-benchmark">https://github.com/sstsimulator/sst-benchmark</a>
</LI>
</ul>
<LI>quickstart for SST -- run a (serial) demo
<UL>
<LI><a href="https://github.com/lpsmodsimteam/sst_introductory_tutorial">introductory turorial</a></LI>
<LI><a href="https://github.com/lpsmodsimteam/sst_airport_sim">airport sim</a></LI>
<LI><a href="https://github.com/lpsmodsimteam/sst-carwash-example">carwash</a></LI>
</UL>
</li>
<LI>quickstart for SST -- run a SST demo that uses MPI</li>
<LI>how to install SST baremetal:
<a href="https://sst-simulator.org/SSTPages/SSTBuildAndInstall_14dot1dot0_SeriesQuickStart/">https://sst-simulator.org/SSTPages/SSTBuildAndInstall_14dot1dot0_SeriesQuickStart/</a>
and
<a href="https://sst-simulator.org/SSTPages/SSTBuildAndInstall_14dot1dot0_SeriesDetailedBuildInstructions/">https://sst-simulator.org/SSTPages/SSTBuildAndInstall_14dot1dot0_SeriesDetailedBuildInstructions/</a>
</li>
<LI>How to run SST from a container: <a href="https://github.com/lpsmodsimteam/sst-containers">github.com/lpsmodsimteam/sst-containers</a></li>
<LI>how to create a new SST component from scratch:
<a href="https://github.com/lpsmodsimteam/sst_introductory_tutorial">github.com/lpsmodsimteam/sst_introductory_tutorial</a>
and
<a href="https://github.com/sstsimulator/sst-external-element/tree/master">https://github.com/sstsimulator/sst-external-element/tree/master</a>
</li>
<LI>how to leverage an existing SST element. See <a href="https://sst-simulator.org/sst-docs/docs/elements/intro">https://sst-simulator.org/sst-docs/docs/elements/intro</a></li>
<LI>how to combine existing SST elements [TODO: demo needed.]</li>
<LI>an overview of SST-core. See <a href="https://sst-simulator.org/sst-docs/docs/core/component/introduction">https://sst-simulator.org/sst-docs/docs/core/component/introduction</a></li>
<LI>an overview of statistics in SST: <a href="https://github.com/lpsmodsimteam/sst_statistics_tutorial">github.com/lpsmodsimteam/sst_statistics_tutorial</a></li>
<LI>Can sst run faster on GPUs or FPGA?</li>
<LI>How does SST use ML or AI or LLM? [Currently doesn't.]</li>
</ul>
</fieldset>
<fieldset><legend><H3 id="SimPy">SimPy</H3></legend>
written in Python<BR>
<a href="https://en.wikipedia.org/wiki/SimPy">https://en.wikipedia.org/wiki/SimPy</a><BR>
<a href="https://gitlab.com/team-simpy/simpy/">gitlab.com/team-simpy/simpy/</a><BR>
<a href="https://simpy.readthedocs.io/en/latest/">simpy.readthedocs.io/en/latest/</a><BR>
<a href="https://www.researchgate.net/publication/322949363_Discrete_Event_Simulation_It's_Easy_with_SimPy">DES: It's easy with SimPy</a>
</fieldset><!-- simpy -->
<fieldset><legend><H3>simmer</H3></legend>
written in R<BR>
<a href="https://rdrr.io/cran/simmer/">simmer</a>
</fieldset>
</fieldset><!-- DES -->
<HR>
<fieldset><legend><H2 id="nework_simulation">Network Simulators</H2></legend>
<fieldset><legend id="ns3">NS-3</legend>
<a href="https://www.nsnam.org/">nsnam.org</a>
</fieldset>
<BR>
<fieldset><legend id="omnet">OMNet++</legend>
<a href="https://en.wikipedia.org/wiki/OMNeT%2B%2B">wikipedia.org/wiki/OMNeT++</a><BR>
<a href="https://omnetpp.org/">omnetpp.org</a><BR>
<a href="https://github.com/omnetpp/omnetpp">github.com/omnetpp/omnetpp</a>
</fieldset>
<BR>
<fieldset><legend>TOPAZ</legend>
<a href="https://github.com/abadp/tpzsimul">github.com/abadp/tpzsimul</a>; as of 2023-10-14, last update was July 2015.<BR>
<a href="https://ieeexplore.ieee.org/document/6209268">TOPAZ: An Open-Source Interconnection Network Simulator for Chip Multiprocessors and Supercomputers</a>
</fieldset><!-- TOPAZ -->
<BR>
</fieldset><!-- network sim -->
<HR>
<fieldset><legend><H2 id="processor_simulation">Processor Simulators</H2></legend>
<fieldset><legend id="gem5">Gem5</legend>
<a href="https://www.gem5.org/">gem5.org</a>
</fieldset>
<BR>
<fieldset><legend>mic1</legend>
<P>mic1 is a Java-based simulator which implements the Mic-1 microarchitecture</P>
<a href="https://www.ontko.com/mic1/">www.ontko.com/mic1/</a>
</P>
</fieldset>
<BR>
<fieldset><legend>logisim</legend>
<P>
<a href="https://github.com/andersbll/logisim-diku">github.com/andersbll/logisim-diku</a>; as of 2023-10-14, last update was Oct 2011
</P>
</fieldset>
</fieldset><!-- processor -->
<HR>
<fieldset><legend><H2 id="HDL">HDL</H2></legend>
<a href="https://en.wikipedia.org/wiki/List_of_HDL_simulators">en.wikipedia.org/wiki/List_of_HDL_simulators</a>
<fieldset><legend id="verilator">Verilator</legend>
<a href="https://www.veripool.org/verilator/">Verilog/SystemVerilog simualtor</a>
</fieldset>
<BR>
<fieldset><legend>VHDL 2008/93/87 simulator</legend>
<a href="http://ghdl.free.fr/">ghdl.free.fr</a>
</P>
</fieldset><!-- GHDL -->
</fieldset><!-- VHDL -->
<HR>
<fieldset><legend><H2 id="survey_of_simulation_surveys">Survey of Simulation Surveys</H2></legend>
<P>
<a href="https://www.brianlinkletter.com/2023/02/network-emulators-and-network-simulators-2023/">Twenty-five open-source network emulators and simulators you can use in 2023</a><BR>
with comments: <a href="https://news.ycombinator.com/item?id=37842161">news.ycombinator.com/item?id=37842161</a>
</P>
<P>
<a href="https://ieeexplore.ieee.org/document/8718630">A Survey of Computer Architecture Simulation Techniques and Tools</a>
</P>
</fieldset><!-- survey -->
<HR>
<P>Last updated 2024-05-24</P>
</BODY>
</HTML>