<?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">High-Performance Computation on a Rust-based distributed ABM engine</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Daniele</forename><surname>De Vinco</surname></persName>
							<email>ddevinco@unisa.itd.d.vinco</email>
							<affiliation key="aff0">
								<orgName type="institution">Università degli Studi di Salerno</orgName>
								<address>
									<settlement>Salerno</settlement>
									<country key="IT">Italy</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Andrea</forename><surname>Tranquillo</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Università degli Studi di Salerno</orgName>
								<address>
									<settlement>Salerno</settlement>
									<country key="IT">Italy</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Alessia</forename><surname>Antelmi</surname></persName>
							<email>alessia.antelmi@unito.it</email>
							<affiliation key="aff1">
								<orgName type="institution">Università degli Studi di Torino</orgName>
								<address>
									<settlement>Torino</settlement>
									<country key="IT">Italy</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Carmine</forename><surname>Spagnuolo</surname></persName>
							<email>cspagnuolo@unisa.it</email>
							<affiliation key="aff0">
								<orgName type="institution">Università degli Studi di Salerno</orgName>
								<address>
									<settlement>Salerno</settlement>
									<country key="IT">Italy</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Vittorio</forename><surname>Scarano</surname></persName>
							<affiliation key="aff0">
								<orgName type="institution">Università degli Studi di Salerno</orgName>
								<address>
									<settlement>Salerno</settlement>
									<country key="IT">Italy</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">High-Performance Computation on a Rust-based distributed ABM engine</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">1AFC1ACEF7678EB71F8574BF4A09C0AD</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2025-04-23T16:49+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>High-performance computing</term>
					<term>Agent-based modeling</term>
					<term>Distributed computing</term>
					<term>Simulation</term>
					<term>Complex systems</term>
					<term>Computational social science</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>An agent-based model (ABM) is a computational model for simulating autonomous agents' actions and interactions to understand a system's behavior and what governs its outcomes. When the data or number of agents grow or multiple runs are necessary, agent-based simulations are generally computationally costly. Therefore, adopting different computing paradigms, such as the distributed one, is essential to manage long-running simulations. The main problem with this approach is finding a way to distribute and balance the simulation field so that the agents can move from one machine to another with the least amount of synchronization overhead. Based on our experiences, we present a Rust-based ABM engine capable of distributing models on high-performance computing resources, gaining remarkable speedup against the sequential version.</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>Modeling real-world phenomena is incredibly challenging due to the intricate interactions among numerous interconnected elements. Understanding these systems is nearly impossible when they are viewed in isolation. Consequently, such systems are often referred to as complex systems, though a precise definition of complexity remains elusive <ref type="bibr" target="#b0">[1]</ref>. These systems typically share features such as non-linearity, decentralized control, and feedback mechanisms. In recent years, Computational Science has leveraged data-intensive computing and analysis to study such issues. ABMs offer a bottom-up approach for analyzing complex systems, allowing modelers to design the behaviors of individual agents (e.g., members of a population) and the environments in which they operate. The interactions among these agents in the simulated environment produce emergent properties and phenomena that the modeler aims to examine and understand. These three components (behavior, environment, and interactions) are the building blocks of an ABM and have been proven to be very effective in modeling different scenarios across a vast corpora of fields <ref type="bibr" target="#b1">[2]</ref>.</p><p>ABMs are also a recurring theme in High-Performance Computing (HPC), since these models are designed to mimic social interactions, the global economy, or natural phenomena. In addition, they can help predict potential outcomes involving numerous entities. However, when the number of agents consistently grows, traditional ABM engines fail because the computational power required by a single execution becomes an unbearable limitation. The literature states that ABMs can intersect with HPC through two distinct ways: the outer and inner loops <ref type="bibr" target="#b2">[3]</ref>. The former usually describes optimization techniques such as model parameters sweeping <ref type="bibr" target="#b3">[4]</ref>. The latter, which is also the focus of this paper, typically involves distributing a model across different computational nodes using de facto standards such as MPI (Message Protocol Interface) <ref type="bibr" target="#b4">[5]</ref> or OpenMP (Open Multiprocessing) <ref type="bibr" target="#b5">[6]</ref>.</p><p>This paper presents the early stages of implementing a distributed version of krABMaga, an ABM engine written entirely in Rust. We have employed our experiences in ABMs and the distributed computing field to enhance the capabilities of the krABMaga engine, assessing the possibilities and opportunities for deploying a high-optimized tool to an HPC cluster with minimal effort and achieving good results <ref type="bibr" target="#b3">[4]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">Related Work</head><p>ABMs have been extensively studied and applied across various domains, providing valuable insights into complex systems through simulations <ref type="bibr" target="#b6">[7,</ref><ref type="bibr" target="#b7">8]</ref>. However, while there is a substantial body of work focused on ABMs in general, research into their distributed versions is relatively limited, with tools outdated or not supported anymore.</p><p>Generally, distributed ABMs involve partitioning the simulation across multiple computational nodes to handle larger-scale models or to achieve higher performance. This approach can significantly improve the scalability and efficiency of simulations by leveraging parallel processing and distributed computing resources. Despite its potential, the distributed version of ABMs presents additional challenges, such as managing communication between nodes, ensuring data consistency, and effectively balancing the computational load. Several frameworks have explored a distributed approach, such as:</p><formula xml:id="formula_0">Mason [9]</formula><p>. Mason is a Java-based ABM simulation toolkit. A distributed version of this library, known as D-Mason <ref type="bibr" target="#b9">[10]</ref>, was developed to enhance performance. It uses a Quad-Tree data structure to manage the simulation field.</p><p>Flame <ref type="bibr" target="#b10">[11]</ref>. Flame is an ABM system designed to run on a wide range of heterogeneous computing platforms. It offers a formal framework for model creation using the XXML language, a variant of XML, along with automatic parallel code generation. <ref type="bibr" target="#b11">[12]</ref>. Flame-GPU extends Flame to support GPU translation. It simplifies GPU programming by using an API that leverages the FLAME template to generate CUDA code for target GPU devices, eliminating the need for users to engage directly with GPU programming languages or optimization techniques.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Flame-GPU</head><p>Pandora <ref type="bibr" target="#b12">[13]</ref>. Pandora is an ABM framework for large-scale distributed simulations. It provides two identical programming interfaces in different programming languages, one of them including the automatic generation of parallel and distributed code. <ref type="bibr" target="#b13">[14]</ref>. Repast-HPC is a component of the Repast suite, specifically designed for largescale simulations on C++-based systems. It is tailored for execution on large computing clusters and supercomputers.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Repast-HPC</head><p>This work revolves around a distributed version of krABMaga <ref type="foot" target="#foot_0">1</ref> , an open-source discrete events simulation engine written in Rust for developing ABM simulations <ref type="bibr" target="#b3">[4,</ref><ref type="bibr" target="#b14">15]</ref>. The distributed engine, as described in the next sections, simplifies the simulation development process by abstracting the complexities involved in distributed computing. Therefore, this implementation allows modelers to focus on the core logic of their simulations without getting bogged down by technical issues and communication layers. KrABMaga aims to be an intuitive toolbox inspired by the popular MASON library, particularly its modular design that separates the simulation and visualization subsystems. The Rust programming language underpins this approach <ref type="bibr" target="#b15">[16]</ref>, thanks to its main principles:</p><p>• Performance: Rust offers both speed and memory efficiency. Its memory model eliminates the need for a garbage collector at runtime, making it well-suited for critical services, embedded devices, and seamless integration with other languages.</p><p>• Reliability: It exploits its ownership and borrowing system to guarantee memory and thread safety, removing many classes of bugs at compile time. • Productivity: The language is shipped with great documentation, a friendly compiler with useful error messages, and a fast-growing community that has written a large corpus of high-optimized crates (libraries in the Rust ecosystem).</p><p>Rust stands out by performance similar to C, which can shorten the duration of a single simulation and by a unique programming approach that ensures no memory-related bugs occur throughout long-running experiments, hence enabling simulation reliability <ref type="bibr" target="#b16">[17]</ref>. Every ABM engine needs each simulation to have at least two important components: a state and an agent. The state describes the environment of the simulation, which contains different elements, such as a field and its dimensions, the number of steps, the initial number of agents and others, while the agent contains the behavior of the population inside the simulation. Thanks to this decoupled structure, the simulation field can be modified without impacting other parts of the simulation, such as the agent behavior or the simulation parameters. Finally, the framework provides additional functionalities, such as monitoring, reproducibility, and visualization tools.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Methodology</head><p>A key aspect of ABM computation is the communication between agents. Typically, each simulation agent needs to identify its neighbors to exchange information and perform its tasks. In sequential execution, this process is routine and has a moderate impact on performance. However, in distributed execution, where neighbors may be located on different machines, discovering and interacting with them can become a significant performance bottleneck. Moreover, when an agent moves between partitions or is removed from the simulation, the process must proceed seamlessly as if all agents were in a single field. Addressing these challenges is crucial when developing an efficient distributed system that can manage multiple partitions of the same field across remote machines.</p><p>To facilitate the distribution of the simulation, we began by modifying an existing field in our framework. Our first attempt takes as a reference the Field2D implementation on the krABMaga repository <ref type="foot" target="#foot_1">2</ref> , which is the standard field where an agent can move on a continuous 2D space.</p><p>Sequential structure. The Field2D uses a two-dimensional toroidal grid as a simulation field characterized by an origin point (x;y), a width, and a height. Each grid coordinate identifies a cell in which an agent can reside and interact with other agents. Distributed structure. K-Dimensional Tree (K-D Tree) data structures are widely used in distributed computing, particularly for tasks like clustering and closest neighbors search when a scalable solution is required <ref type="bibr" target="#b17">[18]</ref>. A K-D Tree is a tree structure in which each node has exactly two children and can be split until the desired number of nodes is reached. For each pair of children created, the parent node keeps references to them, allowing us to reach any leaf, starting from the root, in a short time <ref type="bibr" target="#b18">[19]</ref>. We implemented a customized version of a K-D Tree, where each child node stores references to all other nodes created in the tree, referred to as blocks. Each block represents a segment of the simulation field and includes an ID corresponding to the process rank it will be assigned to, its origin point (x, y), as well as its width and height, as shown in Figure <ref type="figure" target="#fig_0">1</ref>. By maintaining references to every child node, each node gains access to comprehensive information about all nodes, facilitating efficient neighbor search and synchronization operations. Although this modification increases the physical space required, the resulting efficiency in communication justifies this trade-off. Moreover, this approach remains practical since the growth rate of machines -and thus partitions -does not scale as rapidly as the number of agents.</p><p>After the main process has computed each block, it sends a reference to each block to all other processes. These processes then receive and store the reference in local memory, allowing them to communicate using the associated ID when necessary. When an agent changes position during the simulation and exits from a block's border, it must be sent to another block. Since every block knows the exact size and ID of all the others, when an agent moves outside its border, it can easily calculate the ID of the processor that will be responsible for the agent based on its position. To make this exchange possible, the object is saved into an array whenever an agent moves outside the border of its process field. At the end of every step, every process sends all the agents who have moved off their partition to their respective neighbors and receives all agents sent by their neighbors. This phase is preceded by a message exchange phase, where each process sends the number of agents it will exchange to each neighbor and receives the value from all its neighbors. When this process is complete, each process allocates the buffer with adequate slots for the incoming agents. This communication phase is handled using MPI collective operations, such as scatter and gather, combined with non-blocking send and receive operations to facilitate data exchange across processors efficiently.</p><p>Additionally, in many simulations, an agent needs to be aware of nearby agents within a specific area of interest (AOI), usually defined by a fixed-size radius (see Figure <ref type="figure">2</ref>). This can be particularly challenging in distributed simulations because an agent's AOI may be divided across different processes. To accomplish this task, it is essential to identify first agents that could be neighbors of agents from other processes. This process is facilitated by Halo Regions, of which an example is illustrated in Figure <ref type="figure">2</ref>. A Halo Region is a fixed-length zone located near the borders. When an agent moves inside the field and enters a Halo region, a copy of the agent is placed inside an array of agents, indexed by the Halo Region that keeps it. At the end of every step, these agents are sent to the potential neighbors and received from each one. This operation uses the same principles of the exchange between processors. Once all agents have been received, the process can calculate the neighbors of each agent, considering both the local agents and the received agents that are in the AOI.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Results</head><p>To evaluate the proposed implementation, we have chosen Flockers as the main benchmark model <ref type="bibr" target="#b19">[20]</ref>. Tests are based on known parameters for the model <ref type="bibr" target="#b14">[15]</ref>. The number of steps for each simulation is fixed to 200. The model is evaluated using the configurations for the number of agents and field dimensions listed in Table <ref type="table">1</ref>.</p><p>The code to reproduce the model is available on the GitHub repository <ref type="foot" target="#foot_2">3</ref> . We have built a cluster on Microsoft Azure 4 to make the benchmark as fair as possible, eliminating the noise from background Figure <ref type="figure">2</ref>: An example of halo region. In this example, the central square represents the main actor. The red-highlighted areas are the Halo regions of its neighboring agents, while the green areas indicate the portions of the field shared with those neighbors. Agents located within these green regions are locally stored by the processor managing them. At the end of each step, processors sharing borders exchange information about the agents in the red halo regions and, if needed, transfer agents between processors.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Table 1</head><p>Size of the examples.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head># Agents</head><p>Field size Density</p><formula xml:id="formula_1">1Million 3162x3162 ≈ 10% 2Million 4472x4472 ≈ 10% 5Million 7071x7071 ≈ 10% 10Million 10000x10000 ≈ 10%</formula><p>activities on local machines. Each virtual machine on the Azure cluster was created within a Proximity Placement Group <ref type="foot" target="#foot_4">5</ref> and has the following specifications:</p><p>• Size: standard_DS1_v2 • Number vCPU : 1 • CPU family: Intel Xeon Platinum 8370C (or similar <ref type="foot" target="#foot_5">6</ref> ).</p><p>• Memory: 3.5 GiB • S.O.: Ubuntu Server 22.04 LTS • Disk: 8 GB Standard SSD All numerical results obtained with an average execution time of 10 runs for each setup are displayed in Table <ref type="table" target="#tab_0">2</ref>. The curve trend of this model is displayed when varying the number of processors in Figure <ref type="figure" target="#fig_1">3</ref>. It is evident that when computation is the main task of the distributed system, every configuration performs efficiently, closely approaching the optimal curve. However, it is also apparent that the curves tend to slow down at specific thresholds and can sometimes deteriorate. The primary culprit is the communication phase, which becomes a bottleneck when many halo regions are filled with agents and need to exchange information at each step. The simulation with 1M agents running on 8 processing nodes reveals a speed-up exceeding 8, which is an unexpected result that warrants further investigation. This anomaly could be due to near-perfect system load balancing or optimal memory alignment with the machine's cache. However, these explanations seem improbable, considering the benchmark was executed multiple times with randomized seed values. These results highlight the need for load balancing to optimize the size of each partition, thereby reducing the number of agents that need to be exchanged each step.  </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="5.">Conclusion</head><p>The results demonstrate that the current implementation achieves significant speed-up with an increasing number of processors, outperforming the sequential algorithm even with just 2 processes. Additionally, this implementation allows each simulation to utilize the modified K-D Tree with minimal adjustments required to the sequential model. These changes are related to the state and the launching parameters of the simulation and involve the necessity, until a new version of the library is released, to define the Equivalence trait on the agent to make the communication with MPI possible. This work comes with two main limitations. First, the field structure does not implement any loadbalancing system. The lack of this feature explains the degradation of the model's performance as the number of agents increases. An example of how the load balance should work is shown in Figure <ref type="figure" target="#fig_2">4</ref>. Second, the tests have been evaluated only on the krABMaga engine, not against different engines. The next step should include a more extensive study comparing it with other distributed ABM engines.</p><p>Future work should concentrate on balancing the distribution of agents across partitions, ensuring each processor shares a fair amount of work. To provide a more comprehensive assessment, we will evaluate and compare the engine's performance against that of current state-of-the-art open-source engines with available distributed versions. Finally, after a more polished version of the framework is released, we should focus on abstracting the distributed field as much as possible from the modeler. This will make it easier to write a new model from scratch without dealing with the complex layer of the distributed computing paradigm. </p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Partitioning of the field when there are 7 processors. Each block has a unique ID, height and width of its perimeter, an origin point, and it is assigned to a different processor (or machine).</figDesc><graphic coords="4,184.82,65.60,225.64,182.99" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>Figure 3 :</head><label>3</label><figDesc>Figure 3: Speedup and execution times of the experiments.</figDesc><graphic coords="6,75.27,65.61,221.13,165.85" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_2"><head>Figure 4 :</head><label>4</label><figDesc>Figure 4: Load balance mechanism in the K-D Tree. Whenever a partition assigned to a processor is empty, or the distribution of the agents is not proportionate (left side), or the agents are heavily located in halo regions, the load balancer should rearrange the partitions to equalize the average work of each processor (right side) and minimize the communications overhead.</figDesc><graphic coords="7,139.69,65.61,315.91,110.62" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" type="table" xml:id="tab_0"><head>Table 2</head><label>2</label><figDesc>Numerical results of the experiments.</figDesc><table><row><cell></cell><cell></cell><cell cols="4">Virtual Machines (vCPU)</cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell>Speedup</cell><cell>Seq.</cell><cell>1</cell><cell>2</cell><cell>4</cell><cell>8</cell><cell>16</cell><cell>32</cell><cell>64</cell><cell>128</cell></row><row><cell>1M agents</cell><cell>1,00</cell><cell>0,89</cell><cell>1,78</cell><cell>3,60</cell><cell cols="5">8,04 15,64 22,90 20,49 15,68</cell></row><row><cell>2M agents</cell><cell>1,00</cell><cell>0,89</cell><cell>1,45</cell><cell>3,06</cell><cell cols="5">6,68 14,88 26,59 29,78 31,29</cell></row><row><cell>5M agents</cell><cell>1,00</cell><cell>0,82</cell><cell>1,46</cell><cell>3,33</cell><cell cols="5">6,80 14,90 28,87 55,32 67,57</cell></row><row><cell>10M agents</cell><cell>1,00</cell><cell>0,73</cell><cell>1,49</cell><cell>3,09</cell><cell cols="5">7,04 14,86 29,51 59,76 93,05</cell></row><row><cell></cell><cell></cell><cell cols="4">Virtual Machines (vCPU)</cell><cell></cell><cell></cell><cell></cell><cell></cell></row><row><cell>Exec. time (sec)</cell><cell>Seq.</cell><cell>1</cell><cell>2</cell><cell>4</cell><cell>8</cell><cell>16</cell><cell>32</cell><cell>64</cell><cell>128</cell></row><row><cell>1M agents</cell><cell>397,2</cell><cell>441,1</cell><cell>223,4</cell><cell>110,2</cell><cell>49,3</cell><cell>25,4</cell><cell>17,3</cell><cell>19,4</cell><cell>25,3</cell></row><row><cell>2M agents</cell><cell>841,4</cell><cell>946,9</cell><cell>578,8</cell><cell cols="3">274,4 125,8 56,5</cell><cell>31,6</cell><cell>28,2</cell><cell>26,8</cell></row><row><cell>5M agents</cell><cell cols="7">2417,1 2950,2 1656,4 726,2 355,3 162,2 83,7</cell><cell>43,6</cell><cell>35,7</cell></row><row><cell>10M agents</cell><cell cols="8">5206,9 7107,3 3501,8 1685,0 739,8 350,4 176,4 87,1</cell><cell>55,9</cell></row></table></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">https://github.com/krabmaga/krabmaga/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">https://github.com/krABMaga/krABMaga/blob/main/src/engine/fields/field_2d.rs</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="3" xml:id="foot_2">https://github.com/krABMaga/examples/tree/main/flockers_mpi</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="4" xml:id="foot_3">https://azure.microsoft.com</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="5" xml:id="foot_4">https://azure.microsoft.com/en-us/pricing/details/virtual-machines/series/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="6" xml:id="foot_5">https://learn.microsoft.com/it-it/azure/virtual-machines/dv2-dsv2-series</note>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Acknowledgments</head><p>This work has been partially supported by the spoke "FutureHPC &amp; BigData" of the ICSC -Centro Nazionale di Ricerca in High-Performance Computing, Big Data and Quantum Computing funded by European Union -NextGenerationEU.</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<analytic>
		<title level="a" type="main">What is a complex system?</title>
		<author>
			<persName><forename type="first">J</forename><surname>Ladyman</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Lambert</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Wiesner</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">European Journal for Philosophy of Science</title>
		<imprint>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="page" from="33" to="67" />
			<date type="published" when="2013">2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">All-in-One Framework for Design, Simulation, and Practical Implementation of Distributed Multiagent Control Systems</title>
		<author>
			<persName><forename type="first">L</forename><surname>Xue</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G.-P</forename><surname>Liu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><surname>Hu</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">IEEE Transactions on Systems, Man, and Cybernetics: Systems</title>
		<imprint>
			<biblScope unit="page" from="1" to="14" />
			<date type="published" when="2024">2024</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">Experiences in Developing a Distributed Agent-based Modeling Toolkit with Python</title>
		<author>
			<persName><forename type="first">N</forename><forename type="middle">T</forename><surname>Collier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Ozik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><forename type="middle">R</forename><surname>Tatara</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">IEEE/ACM 9th Workshop on Python for High-Performance and Scientific Computing (PyHPC)</title>
				<imprint>
			<date type="published" when="2020">2020. 2020</date>
			<biblScope unit="page" from="1" to="12" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Reliable and Efficient Agent-Based Modeling and Simulation</title>
		<author>
			<persName><forename type="first">A</forename><surname>Antelmi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Caramante</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Cordasco</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>D'ambrosio</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">De</forename><surname>Vinco</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Foglia</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Postiglione</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Spagnuolo</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Artificial Societies and Social Simulation</title>
		<imprint>
			<biblScope unit="volume">27</biblScope>
			<biblScope unit="page">4</biblScope>
			<date type="published" when="2024">2024</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<monogr>
		<ptr target="https://www.mpi-forum.org/docs/mpi-4.1/mpi41-report.pdf" />
		<title level="m">Message Passing Interface Forum, MPI: A Message-Passing Interface Standard Version 4</title>
				<imprint>
			<date type="published" when="2023">2023</date>
			<biblScope unit="volume">1</biblScope>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<monogr>
		<title level="m" type="main">Parallel programming in OpenMP</title>
		<author>
			<persName><forename type="first">R</forename><surname>Chandra</surname></persName>
		</author>
		<imprint>
			<date type="published" when="2001">2001</date>
			<publisher>Morgan kaufmann</publisher>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Covasim: an agent-based model of COVID-19 dynamics and interventions</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">C</forename><surname>Kerr</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">M</forename><surname>Stuart</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Mistry</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">G</forename><surname>Abeysuriya</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Rosenfeld</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><forename type="middle">R</forename><surname>Hart</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">C</forename><surname>Núñez</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">A</forename><surname>Cohen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Selvaraj</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Hagedorn</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">PLOS Computational Biology</title>
		<imprint>
			<biblScope unit="volume">17</biblScope>
			<biblScope unit="page">e1009149</biblScope>
			<date type="published" when="2021">2021</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">Analysis of resilience strategies and ripple effect in blockchaincoordinated supply chains: An agent-based simulation study</title>
		<author>
			<persName><forename type="first">J</forename><surname>Lohmer</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Bugert</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Lasch</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">International journal of production economics</title>
		<imprint>
			<biblScope unit="volume">228</biblScope>
			<biblScope unit="page">107882</biblScope>
			<date type="published" when="2020">2020</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Mason: A multiagent simulation environment</title>
		<author>
			<persName><forename type="first">S</forename><surname>Luke</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Cioffi-Revilla</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Panait</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Sullivan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Balan</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Simulation</title>
		<imprint>
			<biblScope unit="volume">81</biblScope>
			<biblScope unit="page" from="517" to="527" />
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">Distributed mason: A scalable distributed multi-agent simulation environment</title>
		<author>
			<persName><forename type="first">G</forename><surname>Cordasco</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Scarano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Spagnuolo</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Simulation Modelling Practice and Theory</title>
		<imprint>
			<biblScope unit="volume">89</biblScope>
			<biblScope unit="page" from="15" to="34" />
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Flame: simulating large populations of agents on parallel hardware architectures</title>
		<author>
			<persName><forename type="first">M</forename><surname>Kiran</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Richmond</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Holcombe</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><forename type="middle">S</forename><surname>Chin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Worth</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Greenough</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 9th International Conference on Autonomous Agents and Multiagent Systems</title>
				<meeting>the 9th International Conference on Autonomous Agents and Multiagent Systems</meeting>
		<imprint>
			<date type="published" when="2010">2010</date>
			<biblScope unit="volume">1</biblScope>
			<biblScope unit="page" from="1633" to="1636" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">High performance cellular level agent-based simulation with FLAME for the GPU</title>
		<author>
			<persName><forename type="first">P</forename><surname>Richmond</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Walker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Coakley</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Romano</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Briefings in bioinformatics</title>
		<imprint>
			<biblScope unit="volume">11</biblScope>
			<biblScope unit="page" from="334" to="347" />
			<date type="published" when="2010">2010</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Pandora: a versatile agent-based modelling platform for social simulation</title>
		<author>
			<persName><forename type="first">X</forename><surname>Rubio-Campillo</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of SIMUL</title>
				<meeting>SIMUL</meeting>
		<imprint>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="29" to="34" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">Repast HPC: A Platform for Large-Scale Agent-Based Modeling</title>
		<author>
			<persName><forename type="first">N</forename><surname>Collier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>North</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Large-Scale Computing</title>
		<imprint>
			<biblScope unit="page" from="81" to="109" />
			<date type="published" when="2011">2011</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">Experimenting with Agent-Based Model Simulation Tools</title>
		<author>
			<persName><forename type="first">A</forename><surname>Antelmi</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Cordasco</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>D'ambrosio</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><forename type="middle">De</forename><surname>Vinco</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Spagnuolo</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Applied Sciences</title>
		<imprint>
			<biblScope unit="volume">13</biblScope>
			<date type="published" when="2023">2023</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<monogr>
		<author>
			<persName><forename type="first">W</forename><surname>Bugden</surname></persName>
		</author>
		<author>
			<persName><forename type="first">A</forename><surname>Alahmar</surname></persName>
		</author>
		<idno type="arXiv">arXiv:2206.05503</idno>
		<title level="m">Rust: The programming language for safety and performance</title>
				<imprint>
			<date type="published" when="2022">2022</date>
		</imprint>
	</monogr>
	<note type="report_type">arXiv preprint</note>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">RustBelt: Securing the foundations of the Rust programming language</title>
		<author>
			<persName><forename type="first">R</forename><surname>Jung</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J.-H</forename><surname>Jourdan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Krebbers</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Dreyer</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the ACM on Programming Languages</title>
				<meeting>the ACM on Programming Languages</meeting>
		<imprint>
			<date type="published" when="2017">2017</date>
			<biblScope unit="volume">2</biblScope>
			<biblScope unit="page" from="1" to="34" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<monogr>
		<author>
			<persName><forename type="first">A</forename><surname>Chakravorty</surname></persName>
		</author>
		<author>
			<persName><forename type="first">W</forename><forename type="middle">S</forename><surname>Cleveland</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">J</forename><surname>Wolfe</surname></persName>
		</author>
		<idno type="arXiv">arXiv:2201.08288</idno>
		<title level="m">Scalable 𝑘-d trees for distributed data</title>
				<imprint>
			<date type="published" when="2022">2022</date>
		</imprint>
	</monogr>
	<note type="report_type">arXiv preprint</note>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Building a Balanced 𝑘-d Tree in 𝑂(𝑘𝑛 log 𝑛) Time</title>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">A</forename><surname>Brown</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="j">Journal of Computer Graphics Techniques (JCGT)</title>
		<imprint>
			<biblScope unit="volume">4</biblScope>
			<biblScope unit="page" from="50" to="68" />
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Flocks, herds and schools: A distributed behavioral model</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">W</forename><surname>Reynolds</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proceedings of the 14th annual conference on Computer graphics and interactive techniques</title>
				<meeting>the 14th annual conference on Computer graphics and interactive techniques</meeting>
		<imprint>
			<date type="published" when="1987">1987</date>
			<biblScope unit="page" from="25" to="34" />
		</imprint>
	</monogr>
</biblStruct>

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