<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Archiving and Interchange DTD v2.3 20070202//EN" "archivearticle.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="methods-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">Front. Neuroinform.</journal-id>
<journal-title>Frontiers in Neuroinformatics</journal-title>
<abbrev-journal-title abbrev-type="pubmed">Front. Neuroinform.</abbrev-journal-title>
<issn pub-type="epub">1662-5196</issn>
<publisher>
<publisher-name>Frontiers Media S.A.</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3389/fninf.2017.00013</article-id>
<article-categories>
<subj-group subj-group-type="heading">
<subject>Neuroscience</subject>
<subj-group>
<subject>Methods</subject>
</subj-group>
</subj-group>
</article-categories>
<title-group>
<article-title>Parallel STEPS: Large Scale Stochastic Spatial Reaction-Diffusion Simulation with High Performance Computers</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author" corresp="yes">
<name><surname>Chen</surname> <given-names>Weiliang</given-names></name>
<xref ref-type="author-notes" rid="fn001"><sup>&#x0002A;</sup></xref>
<uri xlink:href="http://loop.frontiersin.org/people/22060/overview"/>
</contrib>
<contrib contrib-type="author">
<name><surname>De Schutter</surname> <given-names>Erik</given-names></name>
<uri xlink:href="http://loop.frontiersin.org/people/132/overview"/>
</contrib>
</contrib-group>
<aff><institution>Computational Neuroscience Unit, Okinawa Institute of Science and Technology Graduate University</institution> <country>Okinawa, Japan</country></aff>
<author-notes>
<fn fn-type="edited-by"><p>Edited by: Arjen Van Ooyen, Vrije Universiteit Amsterdam, Netherlands</p></fn>
<fn fn-type="edited-by"><p>Reviewed by: Mikael Djurfeldt, Royal Institute of Technology, Sweden; Hans Ekkehard Plesser, Norwegian University of Life Sciences, Norway; Wolfram Schenck, Bielefeld University of Applied Sciences, Germany</p></fn>
<fn fn-type="corresp" id="fn001"><p>&#x0002A;Correspondence: Weiliang Chen <email>w.chen&#x00040;oist.jp</email></p></fn>
</author-notes>
<pub-date pub-type="epub">
<day>10</day>
<month>02</month>
<year>2017</year>
</pub-date>
<pub-date pub-type="collection">
<year>2017</year>
</pub-date>
<volume>11</volume>
<elocation-id>13</elocation-id>
<history>
<date date-type="received">
<day>06</day>
<month>10</month>
<year>2016</year>
</date>
<date date-type="accepted">
<day>27</day>
<month>01</month>
<year>2017</year>
</date>
</history>
<permissions>
<copyright-statement>Copyright &#x000A9; 2017 Chen and De Schutter.</copyright-statement>
<copyright-year>2017</copyright-year>
<copyright-holder>Chen and De Schutter</copyright-holder>
<license xlink:href="http://creativecommons.org/licenses/by/4.0/"><p>This is an open-access article distributed under the terms of the Creative Commons Attribution License (CC BY). The use, distribution or reproduction in other forums is permitted, provided the original author(s) or licensor are credited and that the original publication in this journal is cited, in accordance with accepted academic practice. No use, distribution or reproduction is permitted which does not comply with these terms.</p></license>
</permissions>
<abstract>
<p>Stochastic, spatial reaction-diffusion simulations have been widely used in systems biology and computational neuroscience. However, the increasing scale and complexity of models and morphologies have exceeded the capacity of any serial implementation. This led to the development of parallel solutions that benefit from the boost in performance of modern supercomputers. In this paper, we describe an MPI-based, parallel operator-splitting implementation for stochastic spatial reaction-diffusion simulations with irregular tetrahedral meshes. The performance of our implementation is first examined and analyzed with simulations of a simple model. We then demonstrate its application to real-world research by simulating the reaction-diffusion components of a published calcium burst model in both Purkinje neuron sub-branch and full dendrite morphologies. Simulation results indicate that our implementation is capable of achieving super-linear speedup for balanced loading simulations with reasonable molecule density and mesh quality. In the best scenario, a parallel simulation with 2,000 processes runs more than 3,600 times faster than its serial SSA counterpart, and achieves more than 20-fold speedup relative to parallel simulation with 100 processes. In a more realistic scenario with dynamic calcium influx and data recording, the parallel simulation with 1,000 processes and no load balancing is still 500 times faster than the conventional serial SSA simulation.</p>
</abstract>
<kwd-group>
<kwd>STEPS</kwd>
<kwd>parallel simulation</kwd>
<kwd>stochastic</kwd>
<kwd>spatial reaction-diffusion</kwd>
<kwd>HPC</kwd>
</kwd-group>
<contract-sponsor id="cn001">Okinawa Institute of Science and Technology Graduate University<named-content content-type="fundref-id">10.13039/501100004199</named-content></contract-sponsor>
<counts>
<fig-count count="11"/>
<table-count count="2"/>
<equation-count count="1"/>
<ref-count count="31"/>
<page-count count="15"/>
<word-count count="8309"/>
</counts>
</article-meta>
</front>
<body>
<sec sec-type="intro" id="s1">
<title>Introduction</title>
<p>Recent research in systems biology and computational neuroscience, such as the study of Purkinje cell calcium dynamics (Anwar et al., <xref ref-type="bibr" rid="B3">2014</xref>), has significantly boosted the development of spatial stochastic reaction-diffusion simulators. These simulators can be separated into two major categories, voxel-based and particle-based. Voxel-based simulators, such as STEPS (Hepburn et al., <xref ref-type="bibr" rid="B19">2012</xref>), URDME (Drawert et al., <xref ref-type="bibr" rid="B9">2012</xref>), MesoRD (Hattne et al., <xref ref-type="bibr" rid="B16">2005</xref>), and NeuroRD (Oliveira et al., <xref ref-type="bibr" rid="B26">2010</xref>), divide the geometry into small voxels where different spatial variants of the Gillespie Stochastic Simulation Algorithm (Gillespie SSA) (Gillespie, <xref ref-type="bibr" rid="B13">1976</xref>) are applied. Particle-based simulators, for example, Smoldyn (Andrews and Bray, <xref ref-type="bibr" rid="B1">2004</xref>) and MCell (Kerr et al., <xref ref-type="bibr" rid="B20">2008</xref>), track the Brownian motion of individual molecules, and simulate molecular reactions caused by collisions. Although greatly successful, both voxel-based and particle-based approaches are computationally expensive. Particle-based simulators suffer from the requirement of tracking the position and movement of every molecule in the system. While tracking individual molecules is not required for voxel-based simulators, the exact solution of Gillespie SSA is highly sequential and inefficient for large-scale simulation due to the massive amount of SSA events (Dematt&#x000E9; and Mazza, <xref ref-type="bibr" rid="B8">2008</xref>).</p>
<p>There is a major need for more efficient stochastic spatial reaction-diffusion simulation of large-scale systems. Over the years several efforts have achieved considerable success, both in algorithm development and software implementation, but increasing simulation scale and complexity have significantly exceeded the gains in speed.</p>
<p>Since the introduction of the original Gillespie SSA, performance of voxel-based simulators has been substantially improved thanks to new algorithms and data structures. Giving <italic>N</italic> as the number of possible kinetic events (reactions and diffusions) in the system, the computational complexity of a single SSA iteration has been reduced from O(<italic>N</italic>) with the Direct method (Gillespie, <xref ref-type="bibr" rid="B13">1976</xref>), to O(log(<italic>N</italic>)) with Gibson and Bruck&#x00027;s modification (Gibson and Bruck, <xref ref-type="bibr" rid="B12">2000</xref>), to O(1) with the composition and rejection SSA (Fricke and Schnakenberg, <xref ref-type="bibr" rid="B11">1991</xref>; Slepoy et al., <xref ref-type="bibr" rid="B29">2008</xref>). Approximate solutions for well-stirred systems, such as the well-known tau-leaping method (Gillespie, <xref ref-type="bibr" rid="B14">2001</xref>) can also be applied to the spatial domain (Marquez-Lago and Burrage, <xref ref-type="bibr" rid="B24">2007</xref>; Koh and Blackwell, <xref ref-type="bibr" rid="B21">2011</xref>), providing further speedup with controllable errors. It is clear, however, that the performance of a serial simulator is restricted by the clock speed of a single computing core, while multi-core CPU platforms have become mainstream.</p>
<p>One possible way to bypass the clock speed limitation is parallelization, but development of an efficient and scalable parallel solution has proven challenging. An optimistic Parallel Discrete Event Simulation (PDES) solution has been applied to the exact Gillespie SSA, achieving a maximum 8x speedup with a 12-core cluster (Dematt&#x000E9; and Mazza, <xref ref-type="bibr" rid="B8">2008</xref>). This approach has been further investigated and tested with different synchronization algorithms available for PDES systems (Wang et al., <xref ref-type="bibr" rid="B31">2009</xref>), such as Time Warp (TW), Breathing Time Bucket (BTB) and Breathing Time Warp (BTW). Their results indicate that while considerable speedup can be achieved, for example 5x speedup with 8 cores using the BTW method, speed decays rapidly once inter-node communication is involved, due to significant network latency. Another optimization attempt using the PDES solution with thread-based implementation achieved a 9x acceleration with 32 processing threads (Lin et al., <xref ref-type="bibr" rid="B22">2015</xref>). All the foregoing studies show scalability limitations due to the dramatic increase in rollbacks triggered by conflicting diffusion events between partitions, even with support from well-developed PDES algorithms.</p>
<p>Parallelization of approximate SSA methods has also been investigated. D&#x00027;Agostino et al. (<xref ref-type="bibr" rid="B6">2014</xref>) introduced a parallel spatial tau-leaping solution with both Message Passing Interface (MPI)-based and Graphics Processing Unit (GPU)-based implementations, achieving a 20-fold acceleration with 32 CPU cores, and about 50x on a 192-core GTX-Titan. Two variants of the operator-splitting approach, originating from the serial Gillespie Multi-Particle (GMP) method (Rodr&#x000ED;guez et al., <xref ref-type="bibr" rid="B28">2006</xref>), have been independently employed by Roberts (Roberts et al., <xref ref-type="bibr" rid="B27">2013</xref>) and Vigelius (Vigelius et al., <xref ref-type="bibr" rid="B30">2011</xref>). Both GPU implementations achieve more than 100-fold speedup compared to the CPU-based serial SSA implementations. It is worth noting that the above-mentioned parallel solutions divide simulated geometries into sub-volumes using cubic mesh grids, which may not accurately represent realistic morphologies (Hepburn et al., <xref ref-type="bibr" rid="B19">2012</xref>).</p>
<p>Several studies of parallel particle-based implementations have been reported. Balls et al. (<xref ref-type="bibr" rid="B4">2004</xref>) demonstrated their early attempt at parallel MCell implementation under the KeLP infrastructure (Fink et al., <xref ref-type="bibr" rid="B10">1998</xref>) with a 64-core cluster. Two GPU-based parallel implementations of Smoldyn have also been reported (Gladkov et al., <xref ref-type="bibr" rid="B15">2011</xref>; Dematt&#x000E9;, <xref ref-type="bibr" rid="B7">2012</xref>); both show 100&#x0007E;200-fold speedup gains compared to the CPU-based serial Smoldyn implementation.</p>
<p>Here we introduce an MPI-based parallel implementation of the STochastic Engine for Pathway Simulation (STEPS) (Hepburn et al., <xref ref-type="bibr" rid="B19">2012</xref>). STEPS is a GNU-licensed, stochastic spatial reaction-diffusion simulator implemented in C&#x0002B;&#x0002B; with a Python user interface. The main solver of serial STEPS simulates reaction and diffusion events by applying a spatial extension of the composition and rejection SSA (Slepoy et al., <xref ref-type="bibr" rid="B29">2008</xref>) to sub-volumes of unstructured tetrahedral meshes. Our parallel implementation aims to provide an efficient and scalable solution that can utilize state-of-the-art supercomputers to simulate large scale stochastic reaction-diffusion models with complex morphologies. In Section Methods we explain the main algorithm and details essential to our implementation. In Section Results, we then showcase two examples, from a simple model to a complex real-world research model, and analyze the performance of our implementation with their results. Finally, we discuss possible future developments of parallel STEPS in Section Discussion and Future Directions.</p>
</sec>
<sec sec-type="methods" id="s2">
<title>Methods</title>
<p>We choose the MPI protocol for CPU clusters as the development environment of our parallel implementation, since it is currently the best-supported parallel environment in academic research. Modern clusters allow us to explore the scalability of our implementation with a massive number of computing nodes, and provide insights for further optimization for super-large-scale simulations. The MPI-based implementation also serves as the foundation of future implementations with other parallel protocols and hardware, such as GPU and Intel Xeon Phi clusters.</p>
<p>Previous attempts (Dematt&#x000E9; and Mazza, <xref ref-type="bibr" rid="B8">2008</xref>; Wang et al., <xref ref-type="bibr" rid="B31">2009</xref>; Lin et al., <xref ref-type="bibr" rid="B22">2015</xref>) to parallelize the exact Gillespie SSA have shown that system rollbacks triggered by straggler cross-process diffusion events can negate any performance gained from parallelization. The issue is further exacerbated for MPI-based implementations due to significant network latency. To take full advantage of parallelization, it is important to relax exact time dependency of diffusion events and to take an approximate, time-window approach that minimizes data communication and eliminates system rollbacks. Inspired by the GMP method, we developed a tetrahedral-based operator-splitting algorithm as the fundamental algorithm of our parallel implementation. The serial implementation of this algorithm and its accuracy have been discussed previously (Hepburn et al., <xref ref-type="bibr" rid="B18">2016</xref>). Here we discuss implementation details of the parallel version.</p>
<sec>
<title>Initialization of a parallel STEPS simulation</title>
<p>To initialize a parallel STEPS simulation, the user is required to provide the biochemical model and geometry to the parallel solver. For user convenience, our parallel implementation accepts the same biochemical model and geometry data used as inputs in the serial SSA solver. In addition, mesh partitioning information is required so that tetrahedrons can be distributed and simulated. Partitioning information is a simple list that can be generated automatically using the grid-based partitioning solution provided in the STEPS utility module, or more sophisticated, third-party partitioning applications, such as Metis (Coupez et al., <xref ref-type="bibr" rid="B5">2000</xref>). The STEPS utility module currently provides necessary support functions for format conversions between STEPS and Metis files.</p>
<p>Assuming that a set of tetrahedrons is hosted by an MPI process <italic>p</italic>, {<italic>tet</italic>|<italic>tet</italic> is hosted by <italic>p</italic>}, parallel STEPS first creates a standard Gillespie SSA system for all reactions in each hosted tetrahedron. This includes the population state of all molecule species and propensities of reactions. For each reaction <italic>R</italic><sub><italic>tet</italic>,<italic>p</italic></sub>, it also creates an update dependency list deps(<italic>R</italic><sub><italic>tet,p</italic></sub>), that is, a list of reactions and diffusions that require an update if <italic>R</italic><sub><italic>tet</italic>,<italic>p</italic></sub> is chosen and applied by the SSA. Since a reaction only affects molecule states and propensities of reactions and diffusions within its own tetrahedron, the above information can be stored locally in <italic>p</italic>. The localized storage of SSA and dependency information significantly reduces memory consumption for each process compared to a serial SSA implementation, which is crucial to simulator performance. We will further address its importance with simulation results in section Results.</p>
<p>The simulation also stores the set of hosted diffusion processes {<italic>D</italic><sub><italic>tet</italic>,<italic>p</italic></sub>|<italic>D</italic><sub><italic>tet</italic>,<italic>p</italic></sub> is in <italic>tet</italic> hosted by <italic>p</italic>} and the dependency list deps(<italic>D</italic><sub><italic>tet</italic>, <italic>p</italic></sub>) for each diffusion <italic>D</italic><sub><italic>tet</italic>,<italic>p</italic></sub>. In addition, if a tetrahedron <italic>tet</italic> is a boundary tetrahedron of <italic>p</italic>, in other words, the molecule state of <italic>tet</italic> is affected by diffusions in tetrahedrons hosted by other MPI processes rather than <italic>p</italic>, a species update dependency list for every diffusive species <italic>S</italic><sub><italic>tet</italic>,<italic>p</italic></sub> in <italic>tet</italic> is also created. The species update dependency list, deps(<italic>S</italic><sub><italic>tet,p</italic></sub>), is defined as the list of reactions and diffusions that are hosted by <italic>p</italic>, and that require an update if the count of <italic>S</italic><sub><italic>tet</italic>,<italic>p</italic></sub> is modified by cross-process diffusion. The species dependency list allows each MPI process to update hosted reactions and diffusions independently after receiving molecule change information from other processes, thus reducing the need for cross-process communication.</p>
<p>Furthermore, a suitable diffusion time window is determined according to the biochemical model and geometry being simulated (Hepburn et al., <xref ref-type="bibr" rid="B18">2016</xref>). Given <italic>d</italic><sub><italic>S,tet</italic></sub> as the local diffusion rate for diffusive species <italic>S</italic> in tetrahedron <italic>tet</italic>, each process <italic>p</italic> computes a local minimal time window <inline-formula><mml:math id="M1"><mml:msub><mml:mrow><mml:mo>&#x003C4;</mml:mo></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mtext>min</mml:mtext><mml:mfrac><mml:mrow><mml:mn>1</mml:mn></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi>d</mml:mi></mml:mrow><mml:mrow><mml:mi>S</mml:mi><mml:mo>,</mml:mo><mml:mi>t</mml:mi><mml:mi>e</mml:mi><mml:mi>t</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:math></inline-formula>, over all diffusive species in every hosted tetrahedron. Collective communication is then performed to determine the global minimum, &#x003C4; &#x0003D; min(&#x003C4;<sub><italic>p</italic></sub>), which is set as the diffusion time window for every process in the simulation. Note that &#x003C4; is completely determined by the biochemical model and geometry, and remains constant regardless of changes in the molecule population. Therefore, continual updates of &#x003C4; are not required during the simulation.</p>
<p>The final step is to initialize the molecule population state of the simulation, which can be done using various API functions provided in parallel STEPS. Once this is completed, the simulation is ready to enter the runtime main loop described below.</p>
</sec>
<sec>
<title>Runtime main loop</title>
<p>The runtime main loop for each MPI process is shown in Algorithm <xref ref-type="supplementary-material" rid="SM2">1</xref> in Supplementary Material. When a process is asked to execute the simulation from time <italic>t</italic> to <italic>t</italic><sub><italic>end</italic></sub>, a remote change buffer for cross-process data communication is created for each of the neighboring processes of <italic>p</italic>. Details of the buffer will be discussed later.</p>
<p>The entire runtime [<italic>t, t</italic><sub><italic>end</italic></sub>] is divided into iterations of the constant time window &#x003C4;, the value of which is computed during initialization. At the start of every time window, each process first executes the Reaction SSA operator for the period of &#x003C4;. The mean number of a molecule species <italic>S</italic> present in a tetrahedron <italic>tet</italic> during &#x003C4; is used to determine the number of <italic>S</italic> to be distributed among neighbors of <italic>tet</italic>. Therefore, in addition to the standard exact SSA routine, the process also updates time and occupancy for each reactant and product species (Hepburn et al., <xref ref-type="bibr" rid="B18">2016</xref>).</p>
<p>The parallel solver treats diffusion events differently, based on ownerships of tetrahedrons involved. If both source and destination tetrahedrons of a diffusion event are in a single process, diffusion is applied directly. If a diffusion is cross-process, that is, the source tetrahedron and destination tetrahedron are hosted by different processes, the change to the source tetrahedron is applied directly, while the change to the destination tetrahedron is registered to the corresponding remote change buffer. Once all diffusion events are applied or registered, the buffers are sent to associated remote processes via non-blocking communication, where molecule changes in destination tetrahedrons are applied.</p>
<p>The algorithm is designed for optimal operation in a parallel environment. Most of its operations can be performed independently without network communication. In fact, the only data communication required is the transfer of remote change buffers between neighboring processes. This has two important implications. First and foremost, the communication is strictly regional, meaning that each process only communicates to a small subset of processes with which it shares geometric boundaries, regardless of the overall scale of the simulation. Secondly, thanks to the non-blocking communication, each process can start the Reaction SSA Operator for the next iteration <italic>t</italic><sub>1</sub>, as soon as it receives remote change buffers for the current iteration <italic>t</italic><sub>0</sub> from all neighboring processes and applies those changes (Figure <xref ref-type="fig" rid="F1">1</xref>). Therefore, data communication can be hidden behind computation, which helps to reduce the impact of network latency.</p>
<fig id="F1" position="float">
<label>Figure 1</label>
<caption><p><bold>Schematic illustration of different runtime stages of two processes, <italic><bold>p</bold></italic><sub><bold>1</bold></sub> and <italic><bold>p</bold></italic><sub><bold>2</bold></sub>, assuming that <italic><bold>p</bold></italic><sub><bold>1</bold></sub> is the only neighboring process of <italic><bold>p</bold></italic><sub><bold>2</bold></sub></bold>. Once <italic>p</italic><sub>2</sub> receives and applies the remote change buffer from <italic>p</italic><sub>1</sub> for iteration <italic>t</italic><sub>0</sub>, it can immediately start the reaction SSA computation for iteration <italic>t</italic><sub>1</sub>, without waiting for <italic>p</italic><sub>1</sub> to complete iteration <italic>t</italic><sub>0</sub>. Due to non-blocking communication mechanism, the actual data transfer may take place any time within the communication period. Data communication between <italic>p</italic><sub>1</sub> and its neighboring processes except <italic>p</italic><sub>2</sub> is skipped for simplification.</p></caption>
<graphic xlink:href="fninf-11-00013-g0001.tif"/>
</fig>
<p>Since the remote change buffer holds the only data being transferred across the network, it is important to limit its size so that communication time can be reduced. Furthermore, an efficient registering method is also required since all molecule changes applied to remotely hosted tetrahedrons need to be recorded. Algorithm <xref ref-type="supplementary-material" rid="SM2">2</xref> in Supplementary Material and Figure <xref ref-type="fig" rid="F2">2</xref> illustrate the procedure and data structure for the registration. Instead of recording every cross-process diffusion event, the remote change buffer records the accumulated change of a molecule species in a remotely hosted tetrahedron. Thus, the size of the remote change buffer has an upper bound corresponding to the number of remotely-hosted neighboring tetrahedrons and the number of diffusive species within those tetrahedrons. The lower bound is zero if no cross-process diffusion event occurs during an iteration. The remote change buffer is a vector that stores entries of molecule changes sequentially. Each entry consists of three elements, the destination tetrahedron <italic>tet</italic>&#x02032;, the diffusive species <italic>S</italic>, as well as its accumulated change <italic>m</italic><sub><italic>tet</italic>&#x02032;,<italic>S</italic></sub>. All elements are represented by integers. For every possible cross-process diffusion event, <italic>D</italic><sub><italic>tet</italic>&#x02192;<italic>tet</italic>&#x02032;,<italic>S</italic></sub>, the host process stores a location marker <italic>Loc</italic><sub><italic>tet</italic>&#x02032;,<italic>S</italic></sub>, that indicates where the corresponding entry is previously stored in the buffer. When a cross-process diffusion event occurs, the host process of the source tetrahedron first compares the destination tetrahedron and information about the diffusive species to the entry data stored at the marked location in the buffer. If the data match the record, the accumulated change of this entry is increased according to the diffusion event. Each buffer is cleared after its content has been sent to corresponding processes, thus a mismatch of entry information indicates that a reset has taken place since the previous registration of the same diffusion event, in which case a new entry is appended to the end of the buffer and the location of this entry is stored at the location marker for future reference. Both accessing entry data and appending new entries have constant complexity with C&#x0002B;&#x0002B; Standard Template Library (STL) vectors, providing an efficient solution for registering remote molecule changes.</p>
<fig id="F2" position="float">
<label>Figure 2</label>
<caption><p><bold>Schematic illustration of the remote change buffer data structure</bold>. For every cross-process diffusion event taking place in <italic>tet</italic>, it first compares its destination tetrahedron and species information with the entry data stored at <italic>Loc</italic><sub><italic>tet</italic>&#x02032;,<italic>S</italic></sub> of the remote change buffer. If the match is successful, the accumulated change of this entry is increased, otherwise a new entry is appended to the buffer.</p></caption>
<graphic xlink:href="fninf-11-00013-g0002.tif"/>
</fig>
</sec>
</sec>
<sec sec-type="results" id="s3">
<title>Results</title>
<p>Because the accuracy of the solution method has been examined previously (Hepburn et al., <xref ref-type="bibr" rid="B18">2016</xref>), here we mainly focus on the performance and scalability of our implementation. The implementation passed all validations, and simulation results were checked with serial SSA solutions. It is worth mentioning that the diffusion time window approximation unavoidably introduces small errors into simulations, as discussed in the publication above. Simulations reported in this paper were run on OIST&#x00027;s high performance cluster, &#x0201C;Sango.&#x0201D; Each computing node on Sango has two 12-core 2.5 GHz Intel Xeon E5-2680v3 processors, sharing 128 GiB of system memory. All nodes are interconnected using 56 Gbit/s InfiniBand FDR. In total, Sango comprises 10,224 computing cores and 60.75 TiB of main memory. Due to the sharing policy, only a limited number of cores could be used for our tests. Cluster conditions were different for each test and in some cases, computing cores were scattered across the entire cluster. Unfortunately, cluster conditions may affect simulation performance. To measure this impact and to understand how our implementation performs under real-life cluster restrictions, we repeated the tests multiple times, each starting at a different date and time with variable cluster conditions. For simulations with the simple model (Section Reaction-Diffusion Simulation with Simple Model and Geometry) we were able to limit the number of cores used per processor to 10. We were unable to exert the same control over large-scale simulations due to resource restriction. In all cases, hyper-threading was deactivated. Our results show that the standard deviations in wall-clock time amount to &#x0007E;1% of the mean results; therefore, only mean results are reported.</p>
<p>Simulation performance was measured by both speedup and efficiency. Each simulation was run for a predefined period, and the wall-clock time was recorded. Given a problem with fixed size, the average wall-clock time for a set of repeated simulations to solve this problem is denoted as <italic>T</italic><sub><italic>p</italic></sub>, where <italic>p</italic> is the number of MPI processes used in each simulation. The speedup of a parallel simulation with <italic>p</italic> processes relative to one with <italic>q</italic> processes is defined as <italic>S</italic><sub><italic>p/q</italic></sub> &#x0003D; <italic>T</italic><sub><italic>q</italic></sub> / <italic>T</italic><sub><italic>p</italic></sub>. Specifically, the speedup of parallel simulation with <italic>p</italic> processes relative to its serial SSA counterpart is defined as <italic>S</italic><sub><italic>p/SSA</italic></sub> &#x0003D; <italic>T</italic><sub><italic>SSA</italic></sub> / <italic>T</italic><sub><italic>p</italic></sub>, where <italic>T</italic><sub><italic>SSA</italic></sub> is the wall-clock time for the same simulation run by the serial SSA solver. Note that while sharing many similarities, the parallel operator-splitting implementation and the serial SSA implementation have different algorithms, data structures as well as core routines, so there is no guarantee that <italic>S</italic><sub>1/SSA</sub> equals one. We further define the strong scaling efficiency of a simulation with <italic>p</italic> processes relative to one with <italic>q</italic> processes as <inline-formula><mml:math id="M6"><mml:msub><mml:mrow><mml:mi>E</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mi>q</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>S</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi><mml:mo>/</mml:mo><mml:mi>q</mml:mi></mml:mrow></mml:msub><mml:mo>&#x000B7;</mml:mo><mml:mfrac><mml:mrow><mml:mi>q</mml:mi></mml:mrow><mml:mrow><mml:mi>p</mml:mi></mml:mrow></mml:mfrac></mml:math></inline-formula>. Strong scaling efficiency is used to investigate the scalability performance of parallel implementations of fixed-size problems.</p>
<p>Scalability of a parallel implementation can also be studied by scaling both process count and problem size of the simulation together, called the weak scaling efficiency. Given <italic>T</italic><sub><italic>N,p</italic></sub> as the wall-clock time of a <italic>p</italic>-process simulation with problem size <italic>N</italic>, and <italic>T</italic><sub><italic>kN,kp</italic></sub> as the wall-clock time of another simulation in which both problem size and the number of processes are multiplied by <italic>k</italic> times, we define the weak scaling efficiency as <italic>E</italic><sub><italic>k</italic></sub> &#x0003D; <italic>T</italic><sub><italic>N,p</italic></sub> / <italic>T</italic><sub><italic>kN,kp</italic></sub>. We will investigate both scalability performances of our implementation in later sections.</p>
<sec>
<title>Reaction-diffusion simulation with simple model and geometry</title>
<p>We first examine simulation results of a fixed-size reaction-diffusion problem. The simulated model (Table <xref ref-type="table" rid="T1">1</xref>) was previously used to benchmark our serial spatial SSA solver (Hepburn et al., <xref ref-type="bibr" rid="B19">2012</xref>) and to test the accuracy of our serial operator-splitting solution (Hepburn et al., <xref ref-type="bibr" rid="B18">2016</xref>). It consists of 10 diffusive species, each with differing diffusion coefficients and initial molecule counts, and 4 reversible reactions with various rate constants. The model was simulated in a 10 &#x000D7; 10 &#x000D7; 100&#x003BC;m<sup>3</sup> cuboid mesh with 3363 tetrahedrons. It is worth mentioning that different partitioning approaches can affect simulation performance dramatically, as will be shown hereafter. Here we partitioned the tetrahedrons linearly based on the y and z coordinates of their barycenters (the center of mass) where the numbers of partitions of each axis for a simulation with <italic>p</italic> processes was arranged as [Parts<sub>x</sub> &#x0003D; 1, Parts<sub>y</sub> &#x0003D; 5, Parts<sub>z</sub> &#x0003D; <italic>p</italic>/5]. At the beginning of each simulation, species molecules were placed uniformly into the geometry, and the simulation was run for <italic>t</italic><sub><italic>end</italic></sub> &#x0003D; 20 s, after which the wall-clock time was recorded. We started each series of simulations from <italic>p</italic> &#x0003D; 5 and progressively increased the number of processes in increments of 5 until <italic>p</italic> &#x0003D; 300. Each series was repeated 30 times to produce an average result.</p>
<table-wrap position="float" id="T1">
<label>Table 1</label>
<caption><p><bold>Simple reaction-diffusion model</bold>.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold>Species</bold></th>
<th valign="top" align="center"><bold>Diffusion Coefficient (&#x003BC;m<sup>2</sup>/s)</bold></th>
<th valign="top" align="center"><bold>Initial Count</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">A</td>
<td valign="top" align="center">100</td>
<td valign="top" align="center">1,000</td>
</tr>
<tr>
<td valign="top" align="left">B</td>
<td valign="top" align="center">90</td>
<td valign="top" align="center">2,000</td>
</tr>
<tr>
<td valign="top" align="left">C</td>
<td valign="top" align="center">80</td>
<td valign="top" align="center">3,000</td>
</tr>
<tr>
<td valign="top" align="left">D</td>
<td valign="top" align="center">70</td>
<td valign="top" align="center">4,000</td>
</tr>
<tr>
<td valign="top" align="left">E</td>
<td valign="top" align="center">60</td>
<td valign="top" align="center">5,000</td>
</tr>
<tr>
<td valign="top" align="left">F</td>
<td valign="top" align="center">50</td>
<td valign="top" align="center">6,000</td>
</tr>
<tr>
<td valign="top" align="left">G</td>
<td valign="top" align="center">40</td>
<td valign="top" align="center">7,000</td>
</tr>
<tr>
<td valign="top" align="left">H</td>
<td valign="top" align="center">30</td>
<td valign="top" align="center">8,000</td>
</tr>
<tr>
<td valign="top" align="left">I</td>
<td valign="top" align="center">20</td>
<td valign="top" align="center">9,000</td>
</tr>
<tr style="border-bottom: thin solid #000000;">
<td valign="top" align="left">J</td>
<td valign="top" align="center">10</td>
<td valign="top" align="center">10,000</td>
</tr>
<tr style="border-bottom: thin solid #000000;">
<td valign="top" align="left"><bold>Reaction</bold></td>
<td valign="top" align="center" colspan="2"><bold>Rate Constant</bold></td>
</tr>
<tr>
<td valign="top" align="left"><italic>A</italic> &#x0002B; <italic>B</italic> &#x021C4; <italic>C</italic></td>
<td valign="top" align="center" colspan="2"><inline-formula><mml:math id="M7"><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo>:</mml:mo><mml:mn>1</mml:mn><mml:mo>,</mml:mo><mml:mn>000</mml:mn><mml:mtext>&#x000A0;</mml:mtext><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x003BC;</mml:mo><mml:mstyle class="text"><mml:mtext class="textrm" mathvariant="normal">M</mml:mtext></mml:mstyle><mml:mo>&#x000B7;</mml:mo><mml:mstyle class="text"><mml:mtext class="textrm" mathvariant="normal">s</mml:mtext></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>, <inline-formula><mml:math id="M8"><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mo>:</mml:mo><mml:mn>100</mml:mn><mml:msup><mml:mrow><mml:mtext>s</mml:mtext></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula></td>
</tr>
<tr>
<td valign="top" align="left"><italic>C</italic> &#x0002B; <italic>D</italic> &#x021C4; <italic>E</italic></td>
<td valign="top" align="center" colspan="2"><inline-formula><mml:math id="M9"><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo>:</mml:mo><mml:mn>100</mml:mn><mml:mtext>&#x000A0;</mml:mtext><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x003BC;</mml:mo><mml:mstyle class="text"><mml:mtext class="textrm" mathvariant="normal">M</mml:mtext></mml:mstyle><mml:mo>&#x000B7;</mml:mo><mml:mstyle class="text"><mml:mtext class="textrm" mathvariant="normal">s</mml:mtext></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>, <inline-formula><mml:math id="M10"><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mo>:</mml:mo><mml:mn>10</mml:mn><mml:msup><mml:mrow><mml:mtext>s</mml:mtext></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula></td>
</tr>
<tr>
<td valign="top" align="left"><italic>F</italic> &#x0002B; <italic>G</italic> &#x021C4; <italic>H</italic></td>
<td valign="top" align="center" colspan="2"><inline-formula><mml:math id="M11"><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo>:</mml:mo><mml:mn>10</mml:mn><mml:mtext>&#x000A0;</mml:mtext><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x003BC;</mml:mo><mml:mstyle class="text"><mml:mtext class="textrm" mathvariant="normal">M</mml:mtext></mml:mstyle><mml:mo>&#x000B7;</mml:mo><mml:mstyle class="text"><mml:mtext class="textrm" mathvariant="normal">s</mml:mtext></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>, <inline-formula><mml:math id="M12"><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mo>:</mml:mo><mml:mn>1</mml:mn><mml:msup><mml:mrow><mml:mtext>s</mml:mtext></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula></td>
</tr>
<tr>
<td valign="top" align="left"><italic>H</italic> &#x0002B; <italic>I</italic> &#x021C4; <italic>J</italic></td>
<td valign="top" align="center" colspan="2"><inline-formula><mml:math id="M13"><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>f</mml:mi></mml:mrow></mml:msub><mml:mo>:</mml:mo><mml:mn>1</mml:mn><mml:mtext>&#x000A0;</mml:mtext><mml:msup><mml:mrow><mml:mrow><mml:mo stretchy="false">(</mml:mo><mml:mrow><mml:mo>&#x003BC;</mml:mo><mml:mstyle class="text"><mml:mtext class="textrm" mathvariant="normal">M</mml:mtext></mml:mstyle><mml:mo>&#x000B7;</mml:mo><mml:mstyle class="text"><mml:mtext class="textrm" mathvariant="normal">s</mml:mtext></mml:mstyle></mml:mrow><mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula>, <inline-formula><mml:math id="M14"><mml:msub><mml:mrow><mml:mi>k</mml:mi></mml:mrow><mml:mrow><mml:mi>b</mml:mi></mml:mrow></mml:msub><mml:mo>:</mml:mo><mml:mn>1</mml:mn><mml:msup><mml:mrow><mml:mtext>s</mml:mtext></mml:mrow><mml:mrow><mml:mo>-</mml:mo><mml:mn>1</mml:mn></mml:mrow></mml:msup></mml:math></inline-formula></td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Speedup and strong scaling efficiency are reported relative to the simulation result with 5 processes, in other words, <italic>S</italic><sub><italic>p</italic>/5</sub> and <italic>E</italic><sub><italic>p</italic>/5</sub>. By increasing the number of processes, simulation performance of the fixed-size problem improves dramatically. In fact, the simulation maintains super-linear speedup until <italic>p</italic> &#x02248; 250 (Figure <xref ref-type="fig" rid="F3">3A</xref>). While efficiency decreases in general, it remains above 0.8 with <italic>p</italic> &#x0003D; 300 (Figure <xref ref-type="fig" rid="F3">3B</xref>), where on average each process hosts approximately 10 tetrahedrons.</p>
<fig id="F3" position="float">
<label>Figure 3</label>
<caption><p><bold>Strong scaling performance of parallel simulations with a simple model and geometry</bold>. Each series starts from <italic>p</italic> &#x0003D; 5 and progressively increases to <italic>p</italic> &#x0003D; 300. Both speedup and efficiency are measured relative to simulations with <italic>p</italic> &#x0003D; 5. <bold>(A)</bold> Simulations maintain super-linear speedup until <italic>p</italic> &#x02248; 200. <bold>(B)</bold> In general, efficiency decreases as <italic>p</italic> increases, but remains above 0.8 in the worst case (<italic>p</italic> &#x0003D; 300). <bold>(C</bold>,<bold>D)</bold> <italic>T</italic><sub><italic>comp</italic></sub> accounted for most of the acceleration, as it is the most time-consuming segment during simulation; it maintains super-linear speedup throughout the whole series. However, as <italic>T</italic><sub><italic>comp</italic></sub> decreases, <italic>T</italic><sub><italic>idle</italic></sub> becomes a critical factor because its change is insignificant once <italic>p</italic> exceeds 100.</p></caption>
<graphic xlink:href="fninf-11-00013-g0003.tif"/>
</fig>
<p>In addition to the overall wall-clock time, we also recorded the time cost of each algorithm segment in order to analyze the behavior of the implementation. The total time cost for the simulation <italic>T</italic><sub><italic>total</italic></sub> is divided into three portions. The computation time <italic>T</italic><sub><italic>comp</italic></sub> includes the time cost for the reaction SSA and the cost of diffusion operations within the process (corresponds to the Reaction SSA Operator and Diffusion Operator in Algorithm <xref ref-type="supplementary-material" rid="SM2">1</xref> in Supplementary Material, colored black and red in Figure <xref ref-type="fig" rid="F1">1</xref>). The synchronization time <italic>T</italic><sub><italic>sync</italic></sub> includes the time cost for receiving remote change buffers from neighboring processes, and the time cost for applying those changes (corresponds to the Cross-Process Synchronization Period in Algorithm <xref ref-type="supplementary-material" rid="SM2">1</xref> in Supplementary Material, colored yellow and blue in Figure <xref ref-type="fig" rid="F1">1</xref>). The time spent waiting for the buffer&#x00027;s arrival, as well as the wait time for all buffers to be sent after completion of reaction SSA, is recorded as the idle time, <italic>T</italic><sub><italic>idle</italic></sub> (corresponds to the Idle Period in Algorithm <xref ref-type="supplementary-material" rid="SM2">1</xref> in Supplementary Material, colored white in Figure <xref ref-type="fig" rid="F1">1</xref>). In summary,
<disp-formula id="E1"><mml:math id="M15"><mml:mtable columnalign="left"><mml:mtr><mml:mtd><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>t</mml:mi><mml:mi>o</mml:mi><mml:mi>t</mml:mi><mml:mi>a</mml:mi><mml:mi>l</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>c</mml:mi><mml:mi>o</mml:mi><mml:mi>m</mml:mi><mml:mi>p</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>s</mml:mi><mml:mi>y</mml:mi><mml:mi>n</mml:mi><mml:mi>c</mml:mi></mml:mrow></mml:msub><mml:mo>&#x0002B;</mml:mo><mml:msub><mml:mrow><mml:mi>T</mml:mi></mml:mrow><mml:mrow><mml:mi>i</mml:mi><mml:mi>d</mml:mi><mml:mi>l</mml:mi><mml:mi>e</mml:mi><mml:mo>,</mml:mo></mml:mrow></mml:msub></mml:mtd></mml:mtr></mml:mtable></mml:math></disp-formula></p>
<p>A detailed look at the time cost distribution of a single series trial (Figure <xref ref-type="fig" rid="F3">3C</xref>) suggests that the majority of the speedup is contributed by <italic>T</italic><sub><italic>comp</italic></sub>, which is consistently above the theoretical ideal (Figure <xref ref-type="fig" rid="F3">3D</xref>), thanks to the improved memory caching performance caused by distributed storage of SSA and to update dependency information mentioned above. The result shows that <italic>T</italic><sub><italic>sync</italic></sub> also decreases significantly as the number of processes increases; however, as the number of boundary tetrahedrons is limited in the simulations, <italic>T</italic><sub><italic>sync</italic></sub> contributes the least to overall time consumption (Figure <xref ref-type="fig" rid="F3">3C</xref>). Another important finding is that the change of <italic>T</italic><sub><italic>idle</italic></sub> becomes insignificant when <italic>p</italic> &#x0003E; 100. Since <italic>T</italic><sub><italic>comp</italic></sub> and <italic>T</italic><sub><italic>sync</italic></sub> decrease as <italic>p</italic> increases, <italic>T</italic><sub><italic>idle</italic></sub> becomes progressively more critical in determining simulation performance.</p>
<p>To further study how molecule density affects simulation performance, we repeated the above test with two new settings, one reduces the initial count of each molecular species by 10x, and the other increases molecule counts by 10x (Figure <xref ref-type="fig" rid="F4">4A</xref>). We named these tests &#x0201C;Default,&#x0201D; &#x0201C;0.1x&#x0201D; and &#x0201C;10x,&#x0201D; respectively. Speedups relative to the serial SSA counterparts <italic>S</italic><sub><italic>p</italic>/<italic>SSA</italic></sub> are also reported for comparison (Figure <xref ref-type="fig" rid="F4">4B</xref>). As the number of molecules in the system increases, the simulation achieves better speedup performance. This is because in the 0.1x simulations <italic>T</italic><sub><italic>comp</italic></sub> quickly decreases below <italic>T</italic><sub><italic>idle</italic></sub>, and the speedup becomes less significant as <italic>T</italic><sub><italic>idle</italic></sub> is mostly consistent throughout the series (Figure <xref ref-type="fig" rid="F4">4C</xref>). In the 10x simulations <italic>T</italic><sub><italic>comp</italic></sub> maintains its domination, thus simulations achieve similar speedup ratio as the default ones (Figure <xref ref-type="fig" rid="F4">4D</xref>). This result also indicates that <italic>S</italic><sub><italic>p</italic>/<italic>SSA</italic></sub> greatly depends on molecule density. In general, parallel simulations with high molecule density and high number of processes can achieve higher speedup relative to the serial SSA counterpart (Figure <xref ref-type="fig" rid="F4">4B</xref>).</p>
<fig id="F4" position="float">
<label>Figure 4</label>
<caption><p><bold>Strong scaling performance of simulations with different molecule density. (A)</bold> Speedups relative to simulations with <italic>p</italic> &#x0003D; 5. Simulations with low molecule density (0.1x) achieve smaller speedups compared to the default and high density (10x) cases. <bold>(B)</bold> In general, simulation with higher molecule density and larger scale of parallelization achieves higher speedup relative to its serial SSA counterpart. <bold>(C)</bold> In the 0.1x cases, <italic>T</italic><sub><italic>comp</italic></sub> rapidly decreases and eventually drops below <italic>T</italic><sub><italic>idle</italic></sub>; thus, the overall speedup is less significant. <bold>(D)</bold> In the 10x cases, <italic>T</italic><sub><italic>comp</italic></sub> remains above <italic>T</italic><sub><italic>idle</italic></sub>, therefore its contribution to speedup is significant throughout the series.</p></caption>
<graphic xlink:href="fninf-11-00013-g0004.tif"/>
</fig>
<p>Mesh coarseness also greatly affects simulation performance. Figure <xref ref-type="fig" rid="F5">5</xref> shows the results of simulations with the same model, geometry, and dimensions, but different numbers of tetrahedrons within the mesh. Simulations with a finer mesh generally take longer to complete because while the number of reaction events remains similar regardless of mesh coarseness, the number of diffusion events increases with a finer mesh. The number of main loop iterations also increases for finer mesh due to the inverse relationship between the diffusion time window &#x003C4; and the local diffusion rate <italic>d</italic><sub><italic>S,tet</italic></sub> (Figure <xref ref-type="fig" rid="F5">5B</xref>). This leads to increases of all three timing segments (Figure <xref ref-type="fig" rid="F5">5C</xref>). Nevertheless, giving <italic>n</italic>_<italic>tets</italic> as the number of tetrahedrons simulated, the relative time cost of the simulation, that is, <italic>T</italic><sub><italic>total</italic></sub>/<italic>n</italic>_<italic>tets</italic>, decreases more significantly for a finer mesh (Figure <xref ref-type="fig" rid="F5">5D</xref>), indicating improved efficiency. It is further confirmed in Figure <xref ref-type="fig" rid="F5">5E</xref> as both 13,009 and 113,096 cases achieve dramatic relative speedups from parallelization, where the 113,096 series is the most cost-efficient with high process counts. This is because in these simulations, reaction events take place stochastically over the whole extent of the mesh with no specific &#x0201C;hot-spot,&#x0201D; due to the homogeneous distribution of molecules and similar sizes of tetrahedrons. Therefore, the average memory address distance between two consecutive reaction events in each process is determined by the size of partitions hosted by the process. This distance is essential to memory caching performance. In general, smaller hosted partitions mean shorter address distances and are more cache-friendly. The performance boost from the caching effect is particularly significant for simulations with a fine mesh because the address space frequently accessed by the main loop cannot fit in the cache completely when a small number of processes is used.</p>
<fig id="F5" position="float">
<label>Figure 5</label>
<caption><p><bold>Strong scaling performance of simulations with different mesh coarseness. (A)</bold> Meshes with the same geometry and dimensions, but different numbers of tetrahedrons are simulated. <bold>(B)</bold> While the number of reaction events remains similar across mesh coarseness, both the number of diffusion events and the number of main loop iterations increase for the finer mesh. <bold>(C)</bold> Time distribution of simulations with <italic>p</italic> &#x0003D; 300, all three segments increase as the number of tetrahedrons increases. <bold>(D)</bold> Finer mesh results in a more significant decrease of relative time cost, defined as <italic>T</italic><sub><italic>total</italic></sub>/<italic>n</italic>_<italic>tets</italic>, improving efficiency. <bold>(E)</bold> Speedups relative to <italic>T</italic><sub>5</sub>. Simulation with finer mesh achieves much higher speedup in massive parallelization, thanks to the memory caching effect.</p></caption>
<graphic xlink:href="fninf-11-00013-g0005.tif"/>
</fig>
<p>To investigate the weak scaling efficiency of our implementation, we used the &#x0201C;Default&#x0201D; simulation with 300 processes as a baseline, and increased the problem size by duplicating the geometry along a specific axis, as well as by increasing the number of initial molecules proportionally. Table <xref ref-type="table" rid="T2">2</xref> gives a summary of all simulation settings. As the problem size increases, the simulation efficiency progressively deteriorates (Figure <xref ref-type="fig" rid="F6">6</xref>). While &#x0007E;95% efficiency is maintained after doubling the problem size, tripling the problem size reduces the efficiency to &#x0007E;80%. This is an expected outcome of the current implementation, because although the storage of reaction SSA and update dependency information are distributed, each process in the current implementation still keeps the complete information of the simulation state, including geometry and connectivity data of each tetrahedron, as well as the number of molecules within. Therefore, the memory footprint per process for storing this information increases linearly with problem size. The increased memory footprint of the simulation state widens the address distances between frequently accessed data, reducing cache prefetching performance and consequently the overall simulation efficiency. Optimizing memory footprint and memory caching for super-large-scale problems will be a main focus of our next development iteration. Our result also indicates that geometry partitioning plays an important role in determining simulation performance, as extending the mesh along the z axis gives better efficiency than extending it along the y axis, even though they have similar numbers of tetrahedrons. This can be explained by the increase of boundary tetrahedrons in the latter case. Since the number of boundary tetrahedrons determines the upper-bound of the size of remote change buffer and consequently the time for communication, reducing the number of boundary tetrahedrons is a general recommendation for geometry partitioning in parallel STEPS simulations.</p>
<table-wrap position="float" id="T2">
<label>Table 2</label>
<caption><p><bold>Simulation settings for weak scalability study</bold>.</p></caption>
<table frame="hsides" rules="groups">
<thead><tr>
<th valign="top" align="left"><bold>Geometry Dimensions (&#x003BC;m<sup>3</sup>)</bold></th>
<th valign="top" align="left"><bold>Initial Count</bold></th>
<th valign="top" align="center"><bold>Num. Processes</bold></th>
</tr>
</thead>
<tbody>
<tr>
<td valign="top" align="left">10 &#x000D7; 10 &#x000D7; 100</td>
<td valign="top" align="left">Default</td>
<td valign="top" align="center">300</td>
</tr>
<tr>
<td valign="top" align="left">10 &#x000D7; 10 &#x000D7; 200</td>
<td valign="top" align="left">2x</td>
<td valign="top" align="center">600</td>
</tr>
<tr>
<td valign="top" align="left">10 &#x000D7; 20 &#x000D7; 100</td>
<td valign="top" align="left">2x</td>
<td valign="top" align="center">600</td>
</tr>
<tr>
<td valign="top" align="left">10 &#x000D7; 10 &#x000D7; 300</td>
<td valign="top" align="left">3x</td>
<td valign="top" align="center">900</td>
</tr>
<tr>
<td valign="top" align="left">10 &#x000D7; 30 &#x000D7; 100</td>
<td valign="top" align="left">3x</td>
<td valign="top" align="center">900</td>
</tr>
</tbody>
</table>
</table-wrap>
<fig id="F6" position="float">
<label>Figure 6</label>
<caption><p><bold>Weak scaling performance of the implementation. (A)</bold> The default 10 &#x000D7; 10 &#x000D7; 100&#x003BC;m<sup>3</sup> mesh is extended along either the y or z axis as problem size increases. <bold>(B)</bold> Weak scaling efficiencies relative to the default case (<italic>p</italic> &#x0003D; 300).</p></caption>
<graphic xlink:href="fninf-11-00013-g0006.tif"/>
</fig>
</sec>
<sec>
<title>Large scale reaction-diffusion simulation with real-world model and geometry</title>
<p>Simulations from real-world research often consist of reaction-diffusion models and geometries that are notably more complex than the ones studied above. As a preliminary example, we extracted the reaction-diffusion components of a previously published spatial stochastic calcium burst model (Anwar et al., <xref ref-type="bibr" rid="B2">2013</xref>) as our test model to investigate how our implementation performs with large-scale real-world simulations. The extracted model consists of 15 molecule species, 8 of which are diffusive, as well as 22 reactions. Initial molecule concentrations, reaction rate constants and diffusion coefficients were kept the same as in the published model.</p>
<p>The Purkinje cell sub-branch morphology, published along with the model, was also used to generate a tetrahedral mesh that is suitable for parallel simulation. The newly generated mesh has 111,664 tetrahedrons, and was partitioned using Metis and STEPS supporting utilities. As discussed before, reducing boundary tetrahedrons is the general partitioning strategy for parallel STEPS simulations. This is particularly important for simulations with a tree-like morphology because a grid-based partitioning approach used for the previous models cannot capture and utilize spatial features of such morphology. The sub-branch mesh for our simulation is partitioned based on the connectivity of tetrahedrons. Specifically, a connectivity graph of all tetrahedrons in the mesh was presented to Metis as input. Metis then produced a partitioning profile which met the following criteria. First of all, the number of tetrahedrons in each partition was similar. Secondly, tetrahedrons in the same partition were all connected. Finally, the average degree of connections is minimal. Figure <xref ref-type="fig" rid="F7">7</xref> shows the mesh itself as well as two partitioning profiles generated for <italic>p</italic> &#x0003D; 50 and <italic>p</italic> &#x0003D; 1000. As a preliminary test, this partitioning procedure does not account for any size differences of tetrahedrons and the influence from the biochemical model and molecule concentrations, although their impacts can be significant in practice. At present, some of these factors can be abstracted as weights between elements in Metis; however, substantial manual scripting is required and the solution is project-dependent.</p>
<fig id="F7" position="float">
<label>Figure 7</label>
<caption><p><bold>(A)</bold> Tetrahedral mesh of a Purkinje cell with sub-branch morphology. This mesh consists of 111,664 tetrahedrons. <bold>(B)</bold> Partitioning generated by Metis for <italic>p</italic> &#x0003D; 50 and <italic>p</italic> &#x0003D; 1000. Each color segment indicates a set of tetrahedrons hosted by a single process.</p></caption>
<graphic xlink:href="fninf-11-00013-g0007.tif"/>
</fig>
<p>To mimic the calcium concentration changes caused by voltage-gated calcium influx simulated in the published results (Anwar et al., <xref ref-type="bibr" rid="B2">2013</xref>), we also extracted the region-dependent calcium influx profile from the results, which can be applied periodically to the parallel simulation. Depending on whether this profile is applied, the parallel simulation behaved differently. Without calcium influx, the majority of simulation time was spent on diffusion events of mobile buffer molecules. As these buffer molecules were homogeneously distributed within the mesh, the loading of each process was relatively balanced throughout the simulation. When calcium influx was applied and constantly updated during the simulation, it triggered calcium burst activities that rapidly altered the calcium concentration gradient, consequently unbalancing the process loading. It also activated calcium-dependent pathways in the model and increased the simulation time for reaction SSA operations.</p>
<p>Two series were simulated, one without calcium influx and data recording, and the other one with the influx enabled and data recorded periodically. Each series of simulations started from <italic>p</italic> &#x0003D; 50, and finished at <italic>p</italic> &#x0003D; 1,000, with an increment of 50 processes each time. Both series of simulations were run for 30 ms, and repeated 20 times to acquire the average wall-clock times. For the simulations with calcium influx, the influx rate of each branch segment was adjusted according to the profile every 1 ms, and the calcium concentration of each branch was recorded to a file every 0.02 ms, as in the original simulation. Figure <xref ref-type="fig" rid="F8">8A</xref> shows the recorded calcium activity of each branch segment over a single simulation trial period, which exhibits great spatial and temporal variability as reported previously (Anwar et al., <xref ref-type="bibr" rid="B2">2013</xref>). A video of the same simulation is also provided in the Supplementary Material (Video <xref ref-type="supplementary-material" rid="SM1">1</xref>). As a consequence of calcium influx changes, process loading of the series was mostly unbalanced so that simulation speedup and efficiency were significantly affected. However, a substantial improvement was still achieved (Figures <xref ref-type="fig" rid="F8">8B,C</xref>). Figure <xref ref-type="fig" rid="F9">9</xref> demonstrates the loading of an influx simulation with 50 processes, where the imbalance can be observed across processes and time. To improve the performance of simulations with strong concentration gradients, a sophisticated and efficient dynamic load balancing algorithm is required (see Discussion).</p>
<fig id="F8" position="float">
<label>Figure 8</label>
<caption><p><bold>Calcium burst simulations with a Purkinje cell sub-branch morphology. (A)</bold> Calcium activity of each branch segment over a single trial period, visualized by the STEPS visualization toolkit. Calcium activity shows large spatial and temporal variability, which significantly affects the speedup <bold>(B)</bold> and efficiency <bold>(C)</bold> of the simulation.</p></caption>
<graphic xlink:href="fninf-11-00013-g0008.tif"/>
</fig>
<fig id="F9" position="float">
<label>Figure 9</label>
<caption><p><bold>Process loading of a calcium burst simulation with sub-branch morphology and calcium influx, using 50 processes. (A)</bold> Time-cost distribution for each process shows the loading imbalance across processes. <bold>(B)</bold> The computation time cost per recording step for each process varies significantly during the simulation. Each curve in the figure represents one process. The three peaks in each curve are caused by the three burst periods (Figure <xref ref-type="fig" rid="F8">8A</xref>).</p></caption>
<graphic xlink:href="fninf-11-00013-g0009.tif"/>
</fig>
<p>Finally, to test the capability of our implementation for full cell stochastic spatial simulation in the future, we generated a mesh of a full Purkinje dendrite tree from a publically available surface reconstruction (3DModelDB; McDougal and Shepherd, <xref ref-type="bibr" rid="B25">2015</xref>, ID: 156481) and applied the above model to it. To the best of our knowledge, this is the first parallel simulation of a mesoscopic level, stochastic, spatial reaction-diffusion system with full cell dendritic tree morphology. The mesh consisted of 1,044,155 tetrahedrons. Because branch diameters of the original reconstruction have been modified for 3D printing, the mesh is not suitable for actual biological study, but only to evaluate computational performance. Because of this, and the fact that no calcium influx profile can be acquired for this reconstruction, we only ran simulations without calcium influx. The simulation series started from <italic>p</italic> &#x0003D; 100, and progressively increased to <italic>p</italic> &#x0003D; 2000 by an increment of 100 processes each time. The maximum number of processes (<italic>p</italic> &#x0003D; 2000) was determined by the fair-sharing policy of the computing center. We repeated the series 20 times to produce the average result. Figure <xref ref-type="fig" rid="F10">10A</xref> gives an overview of the full cell morphology as well as a zoom-in look at the mesh. Both speedup and efficiency relative to simulation with <italic>p</italic> &#x0003D; 100 (Figures <xref ref-type="fig" rid="F10">10B,C</xref>) show super-linear scalability and has the best performance with <italic>p</italic> &#x0003D; 2000. This result suggests that simulation performance may be further improved with a higher number of processes.</p>
<fig id="F10" position="float">
<label>Figure 10</label>
<caption><p><bold>Performance of a reaction-diffusion simulation with a mesh of a complete Purkinje dendrite tree. (A)</bold> Morphology of the mesh and a close look at its branches. The mesh consists of 1,044,155 tetrahedrons. <bold>(B)</bold> Speedup relative to the simulation with <italic>p</italic> &#x0003D; 100 shows super-linear scalability. <bold>(C)</bold> Efficiency also increases as <italic>p</italic> increases, suggesting that better efficiency may be achieved with more processes.</p></caption>
<graphic xlink:href="fninf-11-00013-g0010.tif"/>
</fig>
<p>All parallel simulations above perform drastically better than their serial SSA counterparts. For each of the test cases above, 20 realizations were simulated using the serial SSA solver in STEPS, and average wall-clock times are used for comparison. The speedups relative to the serial SSA simulations are shown in Figure <xref ref-type="fig" rid="F11">11</xref>. Even in the most realistic case, with dynamically updated calcium influx as well as data recording, without any special load balancing treatment, the parallel simulation with 1000 processes is still 500 times faster than the serial SSA simulation. The full cell parallel simulation without calcium influx achieves an unprecedented 3600-fold speedup with 2000 processes. This means with full usage of the same computing resources and time, parallel simulation is not only faster than single serial SSA simulation, but is also 1.8 times the speed of batch serial SSA simulations.</p>
<fig id="F11" position="float">
<label>Figure 11</label>
<caption><p><bold>Speedups of parallel calcium burst simulations relative to their serial SSA counterparts, including sub-branch simulations with and without calcium influx, and the full cell simulation without calcium influx</bold>. The dashed curve assumes that <italic>p</italic> processes are used to simulate a batch of <italic>p</italic> serial SSA realizations of the full cell simulation.</p></caption>
<graphic xlink:href="fninf-11-00013-g0011.tif"/>
</fig>
</sec>
</sec>
<sec id="s4">
<title>Discussion and future directions</title>
<p>Our current parallel STEPS implementation achieves significant performance improvement and good scalability, as shown in our test results. However, as a preliminary implementation, it lacks or simplifies several functionalities that could be important for real-world simulations. These functionalities require further investigation and development in future generations of parallel STEPS.</p>
<p>Currently, STEPS models with membrane potential as well as voltage-dependent gating channels (Hepburn et al., <xref ref-type="bibr" rid="B17">2013</xref>) cannot be efficiently simulated using the parallel solver because a scalable parallelization of the electric field (E-Field) sub-system is still under development. This is the main reason why we were unable to fully simulate the stochastic spatial calcium burst model with Purkinje sub-branch morphology in our example, but relied on the calcium influx profile extracted from a previous serial simulation instead. The combined simulation of neuronal electrophysiology and molecular reaction-diffusion has recently raised interest, as it bridges the gap between computational neuroscience and systems biology, and is expected to be greatly useful in the foreseeable future. To address such demand, we are actively collaborating with the Human Brain Project (Markram, <xref ref-type="bibr" rid="B23">2012</xref>) on the development of a parallel E-Field, which will be integrated into parallel STEPS upon its completion.</p>
<p>As analyzed in the results, the majority of the performance speedup is contributed by the reduction of <italic>T</italic><sub><italic>comp</italic></sub>, thanks to parallel computing. Eventually <italic>T</italic><sub><italic>idle</italic></sub> becomes the main bottleneck, as it is mostly constant relative to the process count, unlike <italic>T</italic><sub><italic>comp</italic></sub> which decreases consistently. This observation suggests two future investigational and developmental directions, maximizing the speedup gained from <italic>T</italic><sub><italic>comp</italic></sub>, and minimizing <italic>T</italic><sub><italic>idle</italic></sub>.</p>
<p>Maximizing the speedup gained from <italic>T</italic><sub><italic>comp</italic></sub> is important to real-world research because significant performance improvement needs to be achieved with reasonable computing resources. Adapting advanced algorithms and optimizing memory caching are two common approaches to achieve this goal. At present, we mainly focus on further optimizing memory footprint and caching ability for super-large scale simulations. In the current implementation, although reaction SSA and propensity update information are distributed, each process still stores complete information of the simulation state. This noticeably affects the weak scalability of our implementation (Figure <xref ref-type="fig" rid="F6">6</xref>). The redundant information is so far required for the purpose of interfacing with other non-parallel sub-systems, such as serial E-Field, but we will investigate whether state information can be split, based on the demand of individual processes.</p>
<p>Process load balancing plays a crucial role in determining the idle time of the simulation <italic>T</italic><sub><italic>idle</italic></sub>, and consequently the maximum speed improvement the simulation can achieve. In an unbalanced-loading simulation, processes will always be idle until the slowest one finishes, thus dramatically increasing <italic>T</italic><sub><italic>idle</italic></sub>. This issue is essential to spatial reaction-diffusion simulations as high concentration gradients of molecules can be observed in many real-world models, similar to our calcium burst model. Because molecule concentrations change significantly during simulation due to reactions and diffusion, the loading of each process may change rapidly. While adding model and initial molecule concentration information to the partitioning procedure may help to balance the loading for early simulation, the initial partitioning will eventually become inefficient as molecule concentrations change. An efficient load balancing algorithm is required to solve this problem. The solution should be able to redistribute tetrahedrons between processes automatically on the fly based on their current workloads. Data exchange efficiency is the main focus of the solution, because constantly copying tetrahedron data between processes via network communication can be extremely time consuming, and may overshadow any benefit gained from the rebalancing.</p>
<p>In its current status, our parallel STEPS implementation constitutes a great improvement over the serial SSA solution. The calcium burst simulation with Purkinje cell sub-branch morphology, dynamic calcium influx, and periodic data recording is representative of the simulation condition and requirements of typical real-world research. Similar models that previously required years of simulation can now be completed within days. The shortening of the simulation cycle is greatly beneficial to research as it provides opportunities to further improve the model based on simulation results.</p>
</sec>
<sec id="s5">
<title>Code availability</title>
<p>Parallel STEPS can be accessed via the STEPS homepage (<ext-link ext-link-type="uri" xlink:href="http://steps.sourceforge.net">http://steps.sourceforge.net</ext-link>), or the HBP Collaboration Portal (<ext-link ext-link-type="uri" xlink:href="https://collaboration.humanbrainproject.eu">https://collaboration.humanbrainproject.eu</ext-link>). Simulation scripts for this manuscript are available at ModelDB (<ext-link ext-link-type="uri" xlink:href="https://senselab.med.yale.edu/modeldb/">https://senselab.med.yale.edu/modeldb/</ext-link>).</p>
</sec>
<sec id="s6">
<title>Author contributions</title>
<p>WC designed, implemented and tested the parallel STEPS described, and drafted the manuscript. ED conceived and supervised the STEPS project and helped draft the manuscript. Both authors read and approved the submission.</p>
<sec>
<title>Conflict of interest statement</title>
<p>The authors declare that the research was conducted in the absence of any commercial or financial relationships that could be construed as a potential conflict of interest.</p>
</sec>
</sec>
</body>
<back>
<ack><p>This work was funded by the Okinawa Institute of Science and Technology Graduate University. All simulations were run on the &#x0201C;Sango&#x0201D; cluster therein. We are very grateful to Iain Hepburn of the Computational Neuroscience Unit, OIST, for discussion and critical review of the initial draft of this manuscript.</p>
</ack>
<sec sec-type="supplementary-material" id="s7">
<title>Supplementary material</title>
<p>The Supplementary Material for this article can be found online at: <ext-link ext-link-type="uri" xlink:href="http://journal.frontiersin.org/article/10.3389/fninf.2017.00013/full#supplementary-material">http://journal.frontiersin.org/article/10.3389/fninf.2017.00013/full#supplementary-material</ext-link></p>
<supplementary-material xlink:href="Video1.MP4" id="SM1" mimetype="video/mp4" xmlns:xlink="http://www.w3.org/1999/xlink">
<label>Video 1</label>
<caption><p><bold>Data recording of a calcium burst simulation with Purkinje cell sub-branch morphology, visualized using STEPS visualization toolkit</bold>.</p></caption>
</supplementary-material>
<supplementary-material xlink:href="DataSheet1.docx" id="SM2" mimetype="application/vnd.openxmlformats-officedocument.wordprocessingml.document" xmlns:xlink="http://www.w3.org/1999/xlink"/>
</sec>
<ref-list>
<title>References</title>
<ref id="B1">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Andrews</surname> <given-names>S. S.</given-names></name> <name><surname>Bray</surname> <given-names>D.</given-names></name></person-group> (<year>2004</year>). <article-title>Stochastic simulation of chemical reactions with spatial resolution and single molecule detail</article-title>. <source>Phys. Biol.</source> <volume>1</volume>, <fpage>137</fpage>&#x02013;<lpage>151</lpage>. <pub-id pub-id-type="doi">10.1088/1478-3967/1/3/001</pub-id><pub-id pub-id-type="pmid">16204833</pub-id></citation>
</ref>
<ref id="B2">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Anwar</surname> <given-names>H.</given-names></name> <name><surname>Hepburn</surname> <given-names>I.</given-names></name> <name><surname>Nedelescu</surname> <given-names>H.</given-names></name> <name><surname>Chen</surname> <given-names>W.</given-names></name> <name><surname>De Schutter</surname> <given-names>E.</given-names></name></person-group> (<year>2013</year>). <article-title>Stochastic calcium mechanisms cause dendritic calcium spike variability</article-title>. <source>J. Neurosci.</source> <volume>33</volume>, <fpage>15848</fpage>&#x02013;<lpage>15867</lpage>. <pub-id pub-id-type="doi">10.1523/jneurosci.1722-13.2013</pub-id><pub-id pub-id-type="pmid">24089492</pub-id></citation>
</ref>
<ref id="B3">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Anwar</surname> <given-names>H.</given-names></name> <name><surname>Roome</surname> <given-names>C. J.</given-names></name> <name><surname>Nedelescu</surname> <given-names>H.</given-names></name> <name><surname>Chen</surname> <given-names>W.</given-names></name> <name><surname>Kuhn</surname> <given-names>B.</given-names></name> <name><surname>De Schutter</surname> <given-names>E.</given-names></name></person-group> (<year>2014</year>). <article-title>Dendritic diameters affect the spatial variability of intracellular calcium dynamics in computer models</article-title>. <source>Front. Cell. Neurosci.</source> <volume>8</volume>:<fpage>168</fpage>. <pub-id pub-id-type="doi">10.3389/fncel.2014.00168</pub-id><pub-id pub-id-type="pmid">25100945</pub-id></citation>
</ref>
<ref id="B4">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Balls</surname> <given-names>G. T.</given-names></name> <name><surname>Baden</surname> <given-names>S. B.</given-names></name> <name><surname>Kispersky</surname> <given-names>T.</given-names></name> <name><surname>Bartol</surname> <given-names>T. M.</given-names></name> <name><surname>Sejnowski</surname> <given-names>T. J.</given-names></name></person-group> (<year>2004</year>). <article-title>A large scale monte carlo simulator for cellular microphysiology</article-title>, in <source>Proceedings of 18th International Parallel and Distributed Processing Symposium</source> (<publisher-loc>Santa Fe, NM</publisher-loc>), <volume>Vol 42</volume>, <fpage>26</fpage>&#x02013;<lpage>30</lpage>.</citation>
</ref>
<ref id="B5">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Coupez</surname> <given-names>T.</given-names></name> <name><surname>Digonnet</surname> <given-names>H.</given-names></name> <name><surname>Ducloux</surname> <given-names>R.</given-names></name></person-group> (<year>2000</year>). <article-title>Parallel meshing and remeshing</article-title>. <source>Appl. Math. Model.</source> <volume>25</volume>, <fpage>153</fpage>&#x02013;<lpage>175</lpage>. <pub-id pub-id-type="doi">10.1016/S0307-904X(00)00045-7</pub-id></citation>
</ref>
<ref id="B6">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>D&#x00027;Agostino</surname> <given-names>D.</given-names></name> <name><surname>Pasquale</surname> <given-names>G.</given-names></name> <name><surname>Clematis</surname> <given-names>A.</given-names></name> <name><surname>Maj</surname> <given-names>C.</given-names></name> <name><surname>Mosca</surname> <given-names>E.</given-names></name> <name><surname>Milanesi</surname> <given-names>L.</given-names></name> <etal/></person-group>. (<year>2014</year>). <article-title>Parallel solutions for voxel-based simulations of reaction-diffusion systems</article-title>. <source>Biomed. Res. Int.</source> <volume>2014</volume>, <fpage>980501</fpage>&#x02013;<lpage>980510</lpage>. <pub-id pub-id-type="doi">10.1155/2014/980501</pub-id><pub-id pub-id-type="pmid">25045716</pub-id></citation>
</ref>
<ref id="B7">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Dematt&#x000E9;</surname> <given-names>L.</given-names></name></person-group> (<year>2012</year>). <article-title>Smoldyn on graphics processing units: massively parallel Brownian dynamics simulations</article-title>. <source>IEEE/ACM Trans. Comput. Biol. Bioinform.</source> <volume>9</volume>, <fpage>655</fpage>&#x02013;<lpage>667</lpage>. <pub-id pub-id-type="doi">10.1109/TCBB.2011.106</pub-id><pub-id pub-id-type="pmid">21788675</pub-id></citation>
</ref>
<ref id="B8">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Dematt&#x000E9;</surname> <given-names>L.</given-names></name> <name><surname>Mazza</surname> <given-names>T.</given-names></name></person-group> (<year>2008</year>). <article-title>On Parallel Stochastic Simulation of Diffusive Systems</article-title>, in <source>Computational Methods in Systems Biology Lecture Notes in Computer Science</source>. eds <person-group person-group-type="editor"><name><surname>Heiner</surname> <given-names>M.</given-names></name> <name><surname>Uhrmacher</surname> <given-names>A. M.</given-names></name></person-group> (<publisher-loc>Berlin, Heidelberg</publisher-loc>: <publisher-name>Springer Berlin Heidelberg</publisher-name>), <fpage>191</fpage>&#x02013;<lpage>210</lpage>.</citation>
</ref>
<ref id="B9">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Drawert</surname> <given-names>B.</given-names></name> <name><surname>Engblom</surname> <given-names>S.</given-names></name> <name><surname>Hellander</surname> <given-names>A.</given-names></name></person-group> (<year>2012</year>). <article-title>URDME: a modular framework for stochastic simulation of reaction-transport processes in complex geometries</article-title>. <source>BMC Syst. Biol.</source> <volume>6</volume>:<fpage>76</fpage>. <pub-id pub-id-type="doi">10.1186/1752-0509-6-76</pub-id><pub-id pub-id-type="pmid">22727185</pub-id></citation>
</ref>
<ref id="B10">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fink</surname> <given-names>S. J.</given-names></name> <name><surname>Baden</surname> <given-names>S. B.</given-names></name> <name><surname>Kohn</surname> <given-names>S. R.</given-names></name></person-group> (<year>1998</year>). <article-title>Efficient run-time support for irregular block-structured applications</article-title>. <source>J. Parallel Distrib. Comput.</source> <volume>50</volume>, <fpage>61</fpage>&#x02013;<lpage>82</lpage>. <pub-id pub-id-type="doi">10.1006/jpdc.1998.1437</pub-id></citation>
</ref>
<ref id="B11">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Fricke</surname> <given-names>T.</given-names></name> <name><surname>Schnakenberg</surname> <given-names>J.</given-names></name></person-group> (<year>1991</year>). <article-title>Monte-Carlo simulation of an inhomogeneous reaction-diffusion system in the biophysics of receptor cells</article-title>. <source>Z. Phy. B Condens. Matter</source> <volume>83</volume>, <fpage>277</fpage>&#x02013;<lpage>284</lpage>. <pub-id pub-id-type="doi">10.1007/BF01309430</pub-id></citation>
</ref>
<ref id="B12">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gibson</surname> <given-names>M. A.</given-names></name> <name><surname>Bruck</surname> <given-names>J.</given-names></name></person-group> (<year>2000</year>). <article-title>Efficient exact stochastic simulation of chemical systems with many species and many channels</article-title>. <source>J. Phys. Chem. A</source> <volume>104</volume>, <fpage>1876</fpage>&#x02013;<lpage>1889</lpage>. <pub-id pub-id-type="doi">10.1021/jp993732q</pub-id></citation>
</ref>
<ref id="B13">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gillespie</surname> <given-names>D. T.</given-names></name></person-group> (<year>1976</year>). <article-title>A general method for numerically simulating the stochastic time evolution of coupled chemical reactions</article-title>. <source>J. Comput. Phys.</source> <volume>22</volume>, <fpage>403</fpage>&#x02013;<lpage>434</lpage>. <pub-id pub-id-type="doi">10.1016/0021-9991(76)90041-3</pub-id></citation>
</ref>
<ref id="B14">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Gillespie</surname> <given-names>D. T.</given-names></name></person-group> (<year>2001</year>). <article-title>Approximate accelerated stochastic simulation of chemically reacting systems</article-title>. <source>J. Chem. Phys.</source> <volume>115</volume>:<fpage>1716</fpage>. <pub-id pub-id-type="doi">10.1063/1.1378322</pub-id></citation>
</ref>
<ref id="B15">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Gladkov</surname> <given-names>D. V.</given-names></name> <name><surname>Alberts</surname> <given-names>S.</given-names></name> <name><surname>D&#x00027;Souza</surname> <given-names>R. M.</given-names></name> <name><surname>Andrews</surname> <given-names>S.</given-names></name></person-group> (<year>2011</year>). <article-title>Accelerating the Smoldyn spatial stochastic biochemical reaction network simulator using GPUs</article-title>, in <source>Society for Computer Simulation International</source> (<publisher-loc>San Diego, CA</publisher-loc>), <fpage>151</fpage>&#x02013;<lpage>158</lpage>.</citation>
</ref>
<ref id="B16">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hattne</surname> <given-names>J.</given-names></name> <name><surname>Fange</surname> <given-names>D.</given-names></name> <name><surname>Elf</surname> <given-names>J.</given-names></name></person-group> (<year>2005</year>). <article-title>Stochastic reaction-diffusion simulation with MesoRD</article-title>. <source>Bioinformatics</source> <volume>21</volume>, <fpage>2923</fpage>&#x02013;<lpage>2924</lpage>. <pub-id pub-id-type="doi">10.1093/bioinformatics/bti431</pub-id><pub-id pub-id-type="pmid">15817692</pub-id></citation>
</ref>
<ref id="B17">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hepburn</surname> <given-names>I.</given-names></name> <name><surname>Cannon</surname> <given-names>R.</given-names></name> <name><surname>De Schutter</surname> <given-names>E.</given-names></name></person-group> (<year>2013</year>). <article-title>Efficient calculation of the quasi-static electrical potential on a tetrahedral mesh and its implementation in STEPS</article-title>. <source>Front. Comput. Neurosci.</source> <volume>7</volume>:<fpage>129</fpage>. <pub-id pub-id-type="doi">10.3389/fncom.2013.00129</pub-id><pub-id pub-id-type="pmid">24194715</pub-id></citation>
</ref>
<ref id="B18">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hepburn</surname> <given-names>I.</given-names></name> <name><surname>Chen</surname> <given-names>W.</given-names></name> <name><surname>De Schutter</surname> <given-names>E.</given-names></name></person-group> (<year>2016</year>). <article-title>Accurate reaction-diffusion operator splitting on tetrahedral meshes for parallel stochastic molecular simulations</article-title>. <source>J. Chem. Phys.</source> <volume>145</volume>, <fpage>054118</fpage>&#x02013;<lpage>054122</lpage>. <pub-id pub-id-type="doi">10.1063/1.4960034</pub-id><pub-id pub-id-type="pmid">27497550</pub-id></citation>
</ref>
<ref id="B19">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Hepburn</surname> <given-names>I.</given-names></name> <name><surname>Chen</surname> <given-names>W.</given-names></name> <name><surname>Wils</surname> <given-names>S.</given-names></name> <name><surname>De Schutter</surname> <given-names>E.</given-names></name></person-group> (<year>2012</year>). <article-title>STEPS: efficient simulation of stochastic reaction&#x02013;diffusion models in realistic morphologies</article-title>. <source>BMC Syst. Biol.</source> <volume>6</volume>:<fpage>36</fpage>. <pub-id pub-id-type="doi">10.1186/1752-0509-6-36</pub-id><pub-id pub-id-type="pmid">22574658</pub-id></citation>
</ref>
<ref id="B20">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Kerr</surname> <given-names>R. A.</given-names></name> <name><surname>Bartol</surname> <given-names>T. M.</given-names></name> <name><surname>Kaminsky</surname> <given-names>B.</given-names></name> <name><surname>Dittrich</surname> <given-names>M.</given-names></name> <name><surname>Chang</surname> <given-names>J.-C. J.</given-names></name> <name><surname>Baden</surname> <given-names>S. B.</given-names></name> <etal/></person-group>. (<year>2008</year>). <article-title>Fast monte carlo simulation methods for biological reaction-diffusion systems in solution and on surfaces</article-title>. <source>SIAM J. Sci. Comput.</source> <volume>30</volume>, <fpage>3126</fpage>&#x02013;<lpage>3149</lpage>. <pub-id pub-id-type="doi">10.1137/070692017</pub-id><pub-id pub-id-type="pmid">20151023</pub-id></citation>
</ref>
<ref id="B21">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Koh</surname> <given-names>W.</given-names></name> <name><surname>Blackwell</surname> <given-names>K. T.</given-names></name></person-group> (<year>2011</year>). <article-title>An accelerated algorithm for discrete stochastic simulation of reaction&#x02013;diffusion systems using gradient-based diffusion and tau-leaping</article-title>. <source>J. Chem. Phys.</source> <volume>134</volume>:<fpage>154103</fpage>. <pub-id pub-id-type="doi">10.1063/1.3572335</pub-id><pub-id pub-id-type="pmid">21513371</pub-id></citation>
</ref>
<ref id="B22">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Lin</surname> <given-names>Z.</given-names></name> <name><surname>Tropper</surname> <given-names>C.</given-names></name> <name><surname>Ishlam Patoary</surname> <given-names>M. N.</given-names></name> <name><surname>McDougal</surname> <given-names>R. A.</given-names></name> <name><surname>Lytton</surname> <given-names>W. W.</given-names></name> <name><surname>Hines</surname> <given-names>M. L.</given-names></name></person-group> (<year>2015</year>). <article-title>NTW-MT: a multi-threaded simulator for reaction diffusion simulations in neuron</article-title>, in <source>Proceedings of the 3rd ACM SIGSIM Conference on Principles of Advanced Discrete Simulation</source> (<publisher-loc>London, UK</publisher-loc>), <fpage>157</fpage>&#x02013;<lpage>167</lpage>.</citation>
</ref>
<ref id="B23">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Markram</surname> <given-names>H.</given-names></name></person-group> (<year>2012</year>). <article-title>The human brain project</article-title>. <source>Sci. Am.</source> <volume>306</volume>, <fpage>50</fpage>&#x02013;<lpage>55</lpage>. <pub-id pub-id-type="doi">10.1038/scientificamerican0612-50</pub-id><pub-id pub-id-type="pmid">22649994</pub-id></citation>
</ref>
<ref id="B24">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Marquez-Lago</surname> <given-names>T. T.</given-names></name> <name><surname>Burrage</surname> <given-names>K.</given-names></name></person-group> (<year>2007</year>). <article-title>Binomial tau-leap spatial stochastic simulation algorithm for applications in chemical kinetics</article-title>. <source>J. Chem. Phys.</source> <volume>127</volume>, <fpage>104101</fpage>&#x02013;<lpage>104110</lpage>. <pub-id pub-id-type="doi">10.1063/1.2771548</pub-id><pub-id pub-id-type="pmid">17867731</pub-id></citation>
</ref>
<ref id="B25">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>McDougal</surname> <given-names>R. A.</given-names></name> <name><surname>Shepherd</surname> <given-names>G. M.</given-names></name></person-group> (<year>2015</year>). <article-title>3D-printer visualization of neuron models</article-title>. <source>Front. Neuroinform.</source> <volume>9</volume>:<fpage>18</fpage>. <pub-id pub-id-type="doi">10.3389/fninf.2015.00018</pub-id><pub-id pub-id-type="pmid">26175684</pub-id></citation>
</ref>
<ref id="B26">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Oliveira</surname> <given-names>R. F.</given-names></name> <name><surname>Terrin</surname> <given-names>A.</given-names></name> <name><surname>Di Benedetto</surname> <given-names>G.</given-names></name> <name><surname>Cannon</surname> <given-names>R. C.</given-names></name> <name><surname>Koh</surname> <given-names>W.</given-names></name> <name><surname>Kim</surname> <given-names>M.</given-names></name> <etal/></person-group>. (<year>2010</year>). <article-title>The role of type 4 phosphodiesterases in generating microdomains of cAMP: large scale stochastic simulations</article-title>. <source>PLoS ONE</source> <volume>5</volume>:<fpage>e11725</fpage>. <pub-id pub-id-type="doi">10.1371/journal.pone.0011725</pub-id><pub-id pub-id-type="pmid">20661441</pub-id></citation>
</ref>
<ref id="B27">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Roberts</surname> <given-names>E.</given-names></name> <name><surname>Stone</surname> <given-names>J. E.</given-names></name> <name><surname>Luthey-Schulten</surname> <given-names>Z.</given-names></name></person-group> (<year>2013</year>). <article-title>Lattice Microbes: high-performance stochastic simulation method for the reaction-diffusion master equation</article-title>. <source>J. Comput. Chem.</source> <volume>34</volume>, <fpage>245</fpage>&#x02013;<lpage>255</lpage>. <pub-id pub-id-type="doi">10.1002/jcc.23130</pub-id><pub-id pub-id-type="pmid">23007888</pub-id></citation>
</ref>
<ref id="B28">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Rodr&#x000ED;guez</surname> <given-names>J. V.</given-names></name> <name><surname>Kaandorp</surname> <given-names>J. A.</given-names></name> <name><surname>Dobrzynski</surname> <given-names>M.</given-names></name> <name><surname>Blom</surname> <given-names>J. G.</given-names></name></person-group> (<year>2006</year>). <article-title>Spatial stochastic modelling of the phosphoenolpyruvate-dependent phosphotransferase (PTS) pathway in <italic>Escherichia coli</italic></article-title>. <source>Bioinformatics</source> <volume>22</volume>, <fpage>1895</fpage>&#x02013;<lpage>1901</lpage>. <pub-id pub-id-type="doi">10.1093/bioinformatics/btl271</pub-id><pub-id pub-id-type="pmid">16731694</pub-id></citation>
</ref>
<ref id="B29">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Slepoy</surname> <given-names>A.</given-names></name> <name><surname>Thompson</surname> <given-names>A. P.</given-names></name> <name><surname>Plimpton</surname> <given-names>S. J.</given-names></name></person-group> (<year>2008</year>). <article-title>A constant-time kinetic Monte Carlo algorithm for simulation of large biochemical reaction networks</article-title>. <source>J. Chem. Phys.</source> <volume>128</volume>:<fpage>205101</fpage>. <pub-id pub-id-type="doi">10.1063/1.2919546</pub-id><pub-id pub-id-type="pmid">18513044</pub-id></citation>
</ref>
<ref id="B30">
<citation citation-type="journal"><person-group person-group-type="author"><name><surname>Vigelius</surname> <given-names>M.</given-names></name> <name><surname>Lane</surname> <given-names>A.</given-names></name> <name><surname>Meyer</surname> <given-names>B.</given-names></name></person-group> (<year>2011</year>). <article-title>Accelerating reaction-diffusion simulations with general-purpose graphics processing units</article-title>. <source>Bioinformatics</source> <volume>27</volume>, <fpage>288</fpage>&#x02013;<lpage>290</lpage>. <pub-id pub-id-type="doi">10.1093/bioinformatics/btq622</pub-id><pub-id pub-id-type="pmid">21062761</pub-id></citation>
</ref>
<ref id="B31">
<citation citation-type="book"><person-group person-group-type="author"><name><surname>Wang</surname> <given-names>B.</given-names></name> <name><surname>Yao</surname> <given-names>Y.</given-names></name> <name><surname>Zhao</surname> <given-names>Y.</given-names></name> <name><surname>Hou</surname> <given-names>B.</given-names></name> <name><surname>Peng</surname> <given-names>S.</given-names></name></person-group> (<year>2009</year>). <article-title>Experimental analysis of optimistic synchronization algorithms for parallel simulation of reaction-diffusion systems</article-title>, in <source>International Workshop on High Performance Computational Systems Biology</source>, (<publisher-loc>Trento</publisher-loc>).</citation>
</ref>
</ref-list>
</back>
</article>