<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Sequence: Pipeline Modelling in Pharo</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author role="corresp">
							<persName><forename type="first">Dmitry</forename><surname>Matveev</surname></persName>
							<email>dmitry.matveev@intel.com</email>
							<affiliation key="aff0">
								<orgName type="institution">Intel Corporation</orgName>
							</affiliation>
						</author>
						<title level="a" type="main">Sequence: Pipeline Modelling in Pharo</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">D07DE577263FD3E9506A1198E5AF70E3</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2025-04-23T18:31+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>Pipeline modelling</term>
					<term>Simulation</term>
					<term>Live programming D. Matveev) 0009-0009-6423-4440 (D. Matveev)</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>In the modern computing systems, data processing is often organized as a pipeline: a sequence of operations including data acquisition, different processing stages, and visualization. Normally, these sequences make recurring patterns: as the input data stream produces new data frames in time, the same or nearly the same sequence of operations is applied to this data to produce results.</p><p>Modelling pipeline performance is a complex problem and an interesting topic for research. With respect to the computing systems, pipeline stages can run on different parts of the system, so parallel execution is possible. Also, a computing system can run multiple different pipelines concurrently, and as the compute resources are finite, scheduling problems can arise when concurrent pipelines are trying to access the same resource.</p><p>Finally, modelling systems at early stages can generate important performance insights for system designers. It applies to both software performing the processing, and hardware executing this software.</p><p>This paper introduces Sequence: a Pharo package for rapid pipeline execution modelling. Built on powers of Smalltalk and the Pharo interactive environment, Sequence offers a compact syntax to express pipelines and their properties, a sophisticated simulation engine, and Roassal-based visualization for interactive trace inspection.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>Today data processing is all around us. Be it video analytics, audio enhancement, conference calls, document indexing, etc. -it happens everywhere and everytime when data is generated and digitized to be processed by a compute device. Data, software processing this data, and hardware running this software together form a compute system. Modelling such systems generates important insights for system designers:</p><p>• For existing systems, their actual measured performance can be compared with theorethical modelling numbers, and possible inefficiencies can be spotted or the observed behavior can be explained; • For systems at the design stage, modelling can provide projections that can support design decisions, e.g. identify early which parts of the system should be optimized or how resources should be distributed to help system meet its performance expectations.</p><p>Many compute-intensive audio and video workloads can be represented in the form of a pipeline, where a number of processing stages is executed in order. These pipelines often include input and output: data acquisition and visualization. What makes audio and video workloads interesting for modelling is their regularity: input data is produced at a predefined rate (e.g., by a camera at 30 frames per second), and the number of operations performed is usually the same for every frame. For such systems, properties like latency and throughput are key to evaluating their performance. Other important metrics include idle time and power consumption. If the system assumes real-time processing or communication, quality of service may become a concern.</p><p>Simulation is one of the methods to model systems and evaluate the aforementioned properties. There are many different types of simulations <ref type="bibr" target="#b0">[1]</ref>. For compute systems, the most comprehensive ones are cycle-approximate and cycle-accurate simulations <ref type="bibr" target="#b1">[2]</ref> <ref type="bibr" target="#b2">[3]</ref>. Such simulations construct a complete microprocessor pipeline to collect actual timing information down to individual cycles. However, for the evaluation purposes such fine-grain precision is not only rarely needed, but may not be even possible -as it requires excessive and a very detailed description of the modelled system compute resource but also a very detailed description of the modelled system, which may be hard to populate at the prototyping stage. In such cases, methods like discrete event simulation (DES) <ref type="bibr" target="#b3">[4]</ref> with more coarse-grain models may provide a reasonable estimate in a much shorter time.</p><p>In this paper, we present Sequence, a framework for rapid pipeline modelling in Pharo <ref type="bibr" target="#b4">[5]</ref>. Sequence combines a compact language to express pipelines and define their execution environment, an event stream-based execution simulator, and an interactive trace visualization powered by Roassal <ref type="bibr" target="#b5">[6]</ref>, a Smalltalk package for scriptable interactive visualizations. As Sequence is built with Pharo, a modern Smalltalk dialect and environment, it follows the "everything is object" approach where both pipeline definition and the resulting trace are objects. It enables developers and researches with scripting capabilities when synthesizing simulations (e.g., to evaluate different hypotheses or perform a parameter search) as well as when processing the simulation results, all in the same environment and in the same programming language.</p><p>The paper is organized as follows: a brief overview of related work and DES simulation tools is given in section 2. Section 3 covers the functionality and different aspects of Sequence and provides a number of examples. Section 4 highlights some key properties of Sequence which make it stand out from other tools. Finally, section 5 concludes the paper and outlines directions for the future work.</p><p>Initially, Sequence was designed to model computer vision workloads in heterogeneous systems. However, as those scenarios are quite complex and, at the same time, the resulting framework turned out generic enough, for illustrative purposes this paper lists some real-life scenarios as modelling examples in section 3.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Related work</head><p>A general overview of open-source DES tools is given in <ref type="bibr" target="#b6">[7]</ref>. Most of those tools are generic, which makes them flexible and applicable in different domains, but at the same time it requires them to provide low-level means to express and organize simulations, which brings its extra cost for developers to adopt. Among those, SimPy <ref type="bibr" target="#b7">[8]</ref> stands out as one of the closest analogues from the Python world. SimPy follows process-oriented simulation and relies on Python generators and coroutines, calling itself "pseudo-parallel". SimPy is still seen as a low-level tool where additional effort is required to build process simulations atop of it.</p><p>OMNeT++ <ref type="bibr" target="#b8">[9]</ref>[10] is a C++ component-based simulation library and framework. Components or modules in OMNeT++ can communicate with message passing; modules can be simple and compound (built from other modules). OMNeT++ also provides its own domain-specific language called NED to describe the simulation component model. The object model in OMNeT++ implies using inheritance to implement module classes; simulations are built into ready-made simulation programs linked with the OMNeT++ simulation kernel. The resulting simulations can be configured with .INI files and visualized through a dedicated graphical runtime environment.</p><p>PowerDEVS <ref type="bibr" target="#b10">[11]</ref>[12] is a C++ toolkit which implements DEVS, the Discrete EVent System formalism. It allows to code atomic DEVS models in C++, and combine them into systems (structures) in a graphical tool. PowerDEVS is a powerful tool to model dynamic and continuous systems, but may be too formal and low-level to simulate simpler DES processes.</p><p>ns-3 <ref type="bibr" target="#b12">[13]</ref> is C++ DES framework for computer network simulation. ns-3 is an example of purpose-built simulation software, where domain specifics are reflected in the library API. Having said that, ns-3 provides means to express computer networks at the high level, directly operating with a computer network vocabulary: network topologies, protocols, channels, and packet flow simulation.</p><p>JaamSim <ref type="bibr" target="#b13">[14]</ref> is a free, open-source simulation package written in Java. Similar to OMNeT++, JaamSim specifies its own language to define simulation models, as well as the graphical user interface. The object model can be extended with custom classes in Java. JaamSim supports both process-orientated and event-orientated simulation models. DESMO-J <ref type="bibr" target="#b14">[15]</ref> is positioned as a modern open-source library for Java-based discrete event simulation. DESMO-J expects the model structure (including properties and behavior of all components) to be coded in appropriate Java classes and makes the simulation environment (simulation clock clock, random number generation, event list, reporting) readily available atop of that. Similar to JaamSim, DESMO-J also supports event-oriented and process-oriented perspectives to implement a model.</p><p>Finally, Cormas <ref type="bibr" target="#b15">[16]</ref> is a generic agent-based modeling platform dedicated to common-pool resource management, written in Smalltalk. In contrast with other tools mentioned in this section, Cormas implements a different paradigm with focus on multi-agent interactive simulation. Cormas is an important example of simulation tool built on powers of Smalltalk programming language and environment, the same as used to implement Sequence.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Workload simulation with Sequence</head><p>In this section we present our own pipeline simulation package Sequence. We explain how to define workloads in Sequence and model various scenarios in it.</p><p>Sequence implements DES characteristics as defined in <ref type="bibr" target="#b3">[4]</ref> and <ref type="bibr" target="#b0">[1]</ref>. Sequence API design is inspired by classic Smalltalk packages Roassal <ref type="bibr" target="#b5">[6]</ref> and PetitParser <ref type="bibr" target="#b16">[17]</ref>. In contrast with the majority of DES libraries decribed in Section 2, Sequence doesn't require programmer to derive new classes to express the simulated domain. Instead, Sequence offers an ad-hoc compositional approach where a simulation can be defined as a script in a single Playground <ref type="bibr" target="#b17">[18]</ref> window.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.1.">Blocks and Sequences</head><p>Pipeline workloads are defined as sequences of operations. In Sequence, operations are called Blocks. Objects of class "SeqBlock" are basic building blocks of any sequence. Every block has two mandatory properties, a name and its execution time. Sequence extends standard Smalltalk classes with new messages to construct blocks and specify this information in a compact manner as shown in Listing 1. Blocks are connected using message #&gt;&gt;. After all required blocks are created and configured, a Sequence object is constructed and is sent to a 500 ms simulation. The simulation result is a trace represented by class SeqTrace; instances of this class support Pharo inspectors and by default open as Roassal canvas as shown in Figure <ref type="figure">1</ref>.</p><p>Trace represents events registered during the simulation. Every box stands for an executed block; boxes are placed in order on a time line. Number suffixes are data frame numbers, we see block A executed on frame 0 is followed by block B executed on frame 0, as defined in the scenario from Listing 1.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.2.">Data</head><p>Input data is an important aspect of modelling. On Figure <ref type="figure">1</ref> we see a pipeline of two connected blocks executed repeatedly -Sequence creates data stream implicitly and automatically produces frames 0..7 to feed the pipeline.</p><p>In real-world scenarios, pipeline execution may depend on data. For example, every data frame may contain a different amount of information to process, which would affect the block's execution time. Imagine a car workshop where service work ("S") depends on the complexity of the issue, but in the end there is a car wash procedure ("W") which takes nearly the same amount of time for every car. Example of such modelling is shown in Listing 2: Sequence accepts a generator block which produces data for every frame using a Poisson generator from   PolyMath<ref type="foot" target="#foot_0">1</ref>  <ref type="bibr" target="#b18">[19]</ref>, where a generated number represents repair complexity; latency for a block is specified as a callback (a BlockClosure).</p><p>Note that in listing 2 and in other examples, the block duration is specified in milliseconds while the domain assumes durations in minutes or hours; this is a known limitation as Sequence was initially designed with millisecond-scale task simulations in mind; this limitation will be addressed in the future versions.</p><p>There are cases when input data may spawn multiple tasks to process, for example in selfservice checkouts customers need to scan a number of products and then proceed to payment. Sequence allows to specify this behavior using #tasks: callback as shown in Listing 3.  </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.3.">Multi-process execution</head><p>In the previous examples we demonstrated how Sequence can model various processes. Sequence, however, is not limited to a single-process modelling -it can run simulation for multiple pipelines in parallel. The way how Sequence runs a simulation depends on an executor class, in Listings 1, 2, and 3, a default SeqNaiveExecutor was used implicitly. Listing 4 shows how to model two parallel processes using a special executor class, a SeqNaiveMultiExecutor.</p><p>Visualization of the multi-process scenario is shown on Figure <ref type="figure" target="#fig_4">4</ref>. When there are multiple sequences executing in the same simulation, every sequence gets its individual color in the trace.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.4.">Targets and scheduling</head><p>In Sequence, Targets represent resources where blocks can be executed. On a visualized trace targets are shown as logical rows (defining every block event's position on Y-axis): if the events are placed in the same row on a trace, it means that they have happened on the same target. By default, every block has its own unique target, this is why Figures <ref type="figure" target="#fig_5">1, 2, 3, and 4</ref> show events only of the same block in every row.</p><p>Listing 5 shows how the same target can be specified to two pipeline blocks explicitly. Note Sequence relies on Smalltalk's cascading messages to configure blocks with new details in a compact way.</p><p>When two separate processes access the same resource, they become concurrent. In this case, if the resource is already locked by one block, another block assigned to the same resource can't be executed and has to wait. In this situation, scheduling is required to distribute properly resource time between the concurrent processes. Sequence allows to customize this behavior using scheduler objects and provides some basic scheduler implementations out of the box. Figure <ref type="figure" target="#fig_6">5</ref> shows a trace for the case when a simple round-robin scheduler is involved.</p><p>Resources may be quantitive; in this case the amount of resources available on target is   specified by the message lanes:, the same message configures how much resource is required for a block. Currently resource allocation is atomic, so if there's 𝑁 resources (lanes) available on a target, and a block requires such number 𝑀 of lanes where 𝑀 &gt; 𝑁 , no allocation will happen.</p><p>Example of this situation is given in Listing 6 and Figure <ref type="figure" target="#fig_8">6</ref>: a shared target has two lanes, block "A" requires two lanes to run, while block "B" needs only one. The round-robin scheduler balances execution between "A" and "B"; even if there's room available on the target when "B" executes, "A" can't trigger since there's not enough lanes available. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.5.">Metrics. Live sources</head><p>Sequence trace contains comprehensive information about all events registered during modelling.</p><p>For the convience, Sequence keeps track of the most interesting pipeline properties such as the number of completed frames and pipeline latency. Pipeline latency is calculated as a duration between a point in time when pipeline started processing a frame, and a point in time when pipeline finished processing the frame.</p><p>The start time of a pipeline is the moment when there is (new) data to process. By default, Sequence assumes new data is available as soon as a pipeline can process a new frame. The finish time of the pipeline is the moment when pipeline's last block completes its execution for the given frame. As a classic DES system, Sequence tracks its own simulated clock and advances the time point as new events are handled by the executor.</p><p>In real-world scenarios, when real-time processes are modelled, data is generated by the real world and is registered by the system with some sample rate. In this case, the modelling source is called live and runs with its own cadence, independently from a processing pipeline. If a pipeline is fast enough to process data until a new data frame arrives, it maintains its real-time property. Otherwise, it will accumulate an output delay or cause a frame drop. In the case of a live source, the pipeline start time is taken as the time when pipeline started processing data from a live source (the live source own latency is excluded from that time).</p><p>Pipeline latency, pipeline output latency (an inverse of its throughput), number of frames processed and dropped (when enabled by executor) are the metrics Sequence collects and displays by default. As trace is a regular Smalltalk objects containing a collection of all registered events, developers can calculate their own metrics of interest based on this data.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Discussion: What makes Sequence special</head><p>Sequence combines real-time approach of short scriptable programming paired with quick response based on standard Smalltalk inspectors. This is unique quality of Smalltalk as a live environment. Sequence provides rapid response so a researcher can adjust parameters and explore different behaviors in an interactive manner. Sequence avoids the "compile-and-run" loop which is specific to C++ and Java-based solutions. This makes Sequence-powered simulations easier to debug: as Sequence stays a Smalltalk library and doesn't introduce its own language, the existing superior Smalltalk debugging tools and workflows <ref type="bibr" target="#b19">[20]</ref> can be reused. Sequence doesn't use coroutines and other complicated control flow mechanisms which makes debugging deterministic and clean, as the Sequence's simulation state can be clearly seen in the standard Pharo debugger.</p><p>Another strong point behind Sequence is that there is no semantic gap between the simulated data and its visual representation. Objects visualized in the trace are the same objects generated during the simulation, which allows any sorts of analysis or post-processing to be done in the same Smalltalk environment where the simulation has been executed.</p><p>At the same time, as a purpose-built package, Sequence remains relatively compact and simple inside, whilst providing powerful pipeline modelling capabilities.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Conclusion and future work</head><p>Sequence illustrates how a powerful simulation can be built atop of very basic concepts. With programmable interface and inspectable results, Sequence builds a solid foundation on the future work in the field.</p><p>One of the logical directions for further development of Sequence may be seen in expanding its applicability to other areas, e.g. modelling of real-life processes, service load, manufacturing, etc.</p><p>Section 3 shows that Sequence already can be applied for modelling of different processes, not only limited to computer data processing workloads. While this scaling shouldn't require dramatic changes in the Sequence's event stream execution engine, a revision of supported event durations and visualized trace scale may be required.</p><p>Another perspective topic is composable simulations <ref type="bibr" target="#b20">[21]</ref>. Currently Sequence implements a flat structure where a pipeline can consist only of terminal blocks. Extending Sequence to handle pipelines of pipelines would enable new types of simulations at different levels: engineers could simulate smaller portions of the system and then combine those into more complex and sophisticated simulations. Also, the same machinery could enable simulating branching and conditional execution within Sequence.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Listing 1 :Figure 1 :</head><label>11</label><figDesc>Figure 1: Modelling result for a simple pipeline</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Listing 2 :</head><label>2</label><figDesc>Data stream and data-dependent block latency | s w g | s := 'S' asSeqBlock latency: [ :f | (f data * 10) ms ]. w := 'W' asSeqBlock latency: 25 ms. s &gt;&gt; w. g := PMPoissonGenerator new lambda: 5. (Sequence startingWith: s) runFor: 800 ms on: [ g next ]</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 2 : 3 :</head><label>23</label><figDesc>Figure 2: Visualization of car workshop modelling</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_3"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: A day in a life of self-service checkout kiosk</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_4"><head>Listing 4 :</head><label>4</label><figDesc>Parallel process execution | a b | a := 'A' asSeqBlock latency: 27 ms. b := 'B' asSeqBlock latency: 30 ms. SeqNaiveMultiExecutor new add: (Sequence startingWith: a); add: (Sequence startingWith: b); runFor: 500 ms; trace.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_5"><head>Figure 4 :</head><label>4</label><figDesc>Figure 4: Parallel process execution</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_6"><head>Listing 5 :</head><label>5</label><figDesc>Concurrent process execution| a b t | t := SeqTarget new. a := 'A' asSeqBlock latency: 27 ms; target: t. b := 'B' asSeqBlock latency: 30 ms; target: t. SeqNaiveMultiExecutor new add: (Sequence startingWith: a); add: (Sequence startingWith: b); scheduler: SeqRoundRobinScheduler new; runFor: 500 ms; trace.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_7"><head>Figure 5 : 6 :</head><label>56</label><figDesc>Figure 5: Concurrent process execution</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_8"><head>Figure 6 :</head><label>6</label><figDesc>Figure 6: Concurrent execution on a target with lanes</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_9"><head>Listing 7 :</head><label>7</label><figDesc>Execution with a live source | s1 a s2 b | s1 := 'Src1' asSeqBlock latency: 30 fps; live. a := 'A' asSeqBlock latency: 22 fps. s2 := 'Src2' asSeqBlock latency: 30 fps; live. b := 'B' asSeqBlock latency: 30 fps. s1 &gt;&gt; a. s2 &gt;&gt; b. SeqNaiveMultiExecutor new add: (Sequence startingWith: s1); add: (Sequence startingWith: s2); runFor: 500 ms; trace.</figDesc></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_10"><head>Figure 7 : 9 Figure 8 :</head><label>798</label><figDesc>Figure 7: Execution with a live source and pipeline metrics. Stream "A" accumulates delay: while data frame #12 is already available, "A" only processes frame #9</figDesc><graphic coords="9,89.29,215.65,416.71,240.83" type="bitmap" /></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">https://github.com/PolyMathOrg/PolyMath</note>
		</body>
		<back>
			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">An introductory guide for hybrid simulation modelers on the primary simulation methods in industrial engineering identified through a systematic review of the literature</title>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">P</forename><surname>Galvão Scheidegger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">Fernandes</forename><surname>Pereira</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">L</forename><surname>Moura De Oliveira</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Banerjee</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">A</forename><surname>Barra Montevechi</surname></persName>
		</author>
		<idno type="DOI">10.1016/j.cie.2018.07.046</idno>
		<ptr target="https://doi.org/10.1016/j.cie.2018.07.046" />
	</analytic>
	<monogr>
		<title level="j">Computers &amp; Industrial Engineering</title>
		<imprint>
			<biblScope unit="volume">124</biblScope>
			<biblScope unit="page" from="474" to="492" />
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">PTLsim: A cycle accurate full system x86-64 microarchitectural simulator</title>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">T</forename><surname>Yourst</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE International Symposium on Performance Analysis of Systems &amp; Software</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2007">2007. 2007</date>
			<biblScope unit="page" from="23" to="34" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Simulation of computer architectures: Simulators, benchmarks, methodologies, and recommendations, Computers</title>
		<author>
			<persName><forename type="first">J</forename><surname>Yi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Lilja</surname></persName>
		</author>
		<idno type="DOI">10.1109/TC.2006.44</idno>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on</title>
		<imprint>
			<biblScope unit="volume">55</biblScope>
			<biblScope unit="page" from="268" to="280" />
			<date type="published" when="2006">2006</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Introduction to Simulation</title>
		<author>
			<persName><forename type="first">J</forename><surname>Banks</surname></persName>
		</author>
		<idno type="DOI">10.1145/324138.324142</idno>
		<idno>doi:10.1145/324138.324142</idno>
		<ptr target="https://doi.org/10.1145/324138.324142" />
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 31st Conference on Winter Simulation: Simulation-a Bridge to the Future -Volume 1, WSC &apos;99</title>
				<meeting>the 31st Conference on Winter Simulation: Simulation-a Bridge to the Future -Volume 1, WSC &apos;99<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Association for Computing Machinery</publisher>
			<date type="published" when="1999">1999</date>
			<biblScope unit="page" from="7" to="13" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><forename type="middle">P</forename><surname>Black</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Nierstrasz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ducasse</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Pollet</surname></persName>
		</author>
		<title level="m">Pharo by example</title>
				<imprint>
			<publisher>Lulu. com</publisher>
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Bergel</surname></persName>
		</author>
		<ptr target="http://AgileVisualization.com" />
		<title level="m">Agile Visualization</title>
				<imprint>
			<publisher>LULU Press</publisher>
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">A review of open source discrete event simulation software for operations research</title>
		<author>
			<persName><forename type="first">G</forename><surname>Dagkakis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Heavey</surname></persName>
		</author>
		<idno type="DOI">10.1057/jos.2015.9</idno>
		<ptr target="https://doi.org/10.1057/jos.2015.9" />
	</analytic>
	<monogr>
		<title level="j">Journal of Simulation</title>
		<imprint>
			<biblScope unit="volume">10</biblScope>
			<biblScope unit="page" from="193" to="206" />
			<date type="published" when="2016">2016</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<monogr>
		<title level="m" type="main">Introduction to Discrete-Event Simulation and the SimPy Language</title>
		<author>
			<persName><forename type="first">N</forename><surname>Matloff</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2008-08-02">August 2 (2008</date>
			<biblScope unit="page" from="1" to="33" />
			<pubPlace>Davis, CA</pubPlace>
		</imprint>
		<respStmt>
			<orgName>Dept of Computer Science. University of California at Davis</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Varga</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-642-12331-3_3</idno>
		<idno>doi:</idno>
		<ptr target="10.1007/978-3-642-12331-3_3" />
		<title level="m">OMNeT++</title>
				<meeting><address><addrLine>Berlin Heidelberg; Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="35" to="59" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<monogr>
		<title level="m" type="main">A Practical Introduction to the OMNeT++ Simulation Framework</title>
		<author>
			<persName><forename type="first">A</forename><surname>Varga</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-030-12842-5_1</idno>
		<idno>doi:</idno>
		<ptr target="10.1007/978-3-030-12842-5_1" />
		<imprint>
			<date type="published" when="2019">2019</date>
			<publisher>Springer International Publishing</publisher>
			<biblScope unit="page" from="3" to="51" />
			<pubPlace>Cham</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<monogr>
		<title level="m" type="main">PowerDEVS: A DEVS-based environment for hybrid system modeling and simulation</title>
		<author>
			<persName><forename type="first">E</forename><surname>Kofman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Lapadula</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Pagliero</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2003">2003</date>
			<biblScope unit="volume">0306</biblScope>
			<biblScope unit="page" from="1" to="25" />
		</imprint>
		<respStmt>
			<orgName>School of Electronic Engineering, Universidad Nacional de Rosario, Tech. Rep</orgName>
		</respStmt>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<monogr>
		<title level="m" type="main">An approach to develop a user friendly way of implementing DEV&amp;DESS models in powerDEVS</title>
		<author>
			<persName><forename type="first">F</forename><forename type="middle">J</forename><surname>Preyser</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2015">2015</date>
			<publisher>Masterthesis</publisher>
			<pubPlace>TU Wien</pubPlace>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<monogr>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">F</forename><surname>Riley</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">R</forename><surname>Henderson</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-642-12331-3_2</idno>
		<idno>doi:</idno>
		<ptr target="10.1007/978-3-642-12331-3_2" />
		<title level="m">The ns-3 Network Simulator</title>
				<meeting><address><addrLine>Berlin Heidelberg; Berlin, Heidelberg</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2010">2010</date>
			<biblScope unit="page" from="15" to="34" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Open-source simulation software &quot;JaamSim</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">H</forename><surname>King</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">S</forename><surname>Harrison</surname></persName>
		</author>
		<idno type="DOI">10.1109/WSC.2013.6721593</idno>
	</analytic>
	<monogr>
		<title level="m">2013 Winter Simulations Conference (WSC)</title>
				<imprint>
			<date type="published" when="2013">2013</date>
			<biblScope unit="page" from="2163" to="2171" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<monogr>
		<title level="m" type="main">The Discrete Event Simulation Framework DESMO-J: Review, Comparison To Other Frameworks And Latest Development</title>
		<author>
			<persName><forename type="first">J</forename><surname>Göbel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Joschko</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Koors</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Page</surname></persName>
		</author>
		<idno type="DOI">10.7148/2013-0100</idno>
		<imprint>
			<date type="published" when="2013">2013</date>
			<biblScope unit="page" from="100" to="109" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Cormas: An agent-based simulation platform for coupling human decisions with computerized dynamics</title>
		<author>
			<persName><forename type="first">P</forename><surname>Bommel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Becu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">Le</forename><surname>Page</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Bousquet</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Simulation and Gaming in the Network Society</title>
				<editor>
			<persName><forename type="first">T</forename><surname>Kaneda</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">H</forename><surname>Kanegae</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">Y</forename><surname>Toyoda</surname></persName>
		</editor>
		<editor>
			<persName><forename type="first">P</forename><surname>Rizzi</surname></persName>
		</editor>
		<meeting><address><addrLine>Singapore, Singapore</addrLine></address></meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="387" to="410" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<monogr>
		<author>
			<persName><forename type="first">J</forename><surname>Kurs</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Larcheveque</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Renggli</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Bergel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Cassou</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ducasse</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename></persName>
		</author>
		<title level="m">Petitparser: Building modular parsers</title>
				<imprint>
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<analytic>
		<title level="a" type="main">The Road to Live Programming: Insights from the Practice</title>
		<author>
			<persName><forename type="first">J</forename><surname>Kubelka</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Robbes</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Bergel</surname></persName>
		</author>
		<idno type="DOI">10.1145/3180155.3180200</idno>
		<idno>doi:10.1145/3180155.3180200</idno>
		<ptr target="https://doi.org/10.1145/3180155.3180200" />
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 40th International Conference on Software Engineering, ICSE &apos;18</title>
				<meeting>the 40th International Conference on Software Engineering, ICSE &apos;18<address><addrLine>New York, NY, USA</addrLine></address></meeting>
		<imprint>
			<publisher>Association for Computing Machinery</publisher>
			<date type="published" when="2018">2018</date>
			<biblScope unit="page" from="1090" to="1101" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<monogr>
		<title level="m" type="main">Object-oriented implementation of numerical methods; An introduction with Smalltalk</title>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">H</forename><surname>Besset</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Object-centric debugging</title>
		<author>
			<persName><forename type="first">J</forename><surname>Ressia</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Bergel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">O</forename><surname>Nierstrasz</surname></persName>
		</author>
		<idno type="DOI">10.1109/ICSE.2012.6227167</idno>
	</analytic>
	<monogr>
		<title level="m">2012 34th International Conference on Software Engineering (ICSE)</title>
				<imprint>
			<date type="published" when="2012">2012</date>
			<biblScope unit="page" from="485" to="495" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Composable simulations</title>
		<author>
			<persName><forename type="first">S</forename><surname>Kasputis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">H</forename><forename type="middle">C</forename><surname>Ng</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Winter Simulation Conference Proceedings (Cat. No. 00CH37165)</title>
				<imprint>
			<publisher>IEEE</publisher>
			<date type="published" when="2000">2000. 2000</date>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="page" from="1577" to="1584" />
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
