We present a novel communication-free algorithm for individual-based probabilistic neutral biodiversity simulations. The algorithm transforms a neutral Moran ecosystem model into an embarrassingly parallel problem by trading off inter-process communication at the cost of some redundant computation. Specifically, by careful design of the random number generator that drives the simulation, we arrange for evolutionary parent-child interactions to be modelled without requiring knowledge of the interaction, its participants, or which processor is performing the computation. Critically, this means that every individual can be simulated entirely independently. The simulation is thus fully reproducible irrespective of the number of processors it is distributed over. With our novel algorithm, a simulation can be (1) split up into independent batch jobs and (2) simulated across any number of heterogeneous machines - all without affecting the simulation result. We use the Rust programming language to build the extensible and statically checked simulation package $\texttt{necsim-rust}$. We evaluate our parallelisation approach by comparing three traditional simulation algorithms against a CPU and GPU implementation of our Independent algorithm. These experiments show that as long as some local state is maintained to cull redundant individuals, our Independent algorithm is as efficient as existing sequential solutions. The GPU implementation further outperforms all algorithms on the CPU by a factor ranging from $\sim 2$ to $\sim 80$, depending on the model parameterisation and the analysis that is performed. Amongst the parallel algorithms we have investigated, our Independent algorithm provides the only non-approximate parallelisation strategy that can scale to large simulation domains.
翻译:我们为基于个体的概率中立的生物多样性模拟提供了一个新型的无通信算法。 算法将中性莫兰生态系统模型转换成一个令人尴尬的平行问题, 以一些冗余计算为代价, 将中性莫兰生态系统模型转换成一个令人尴尬的平行问题。 具体地说, 通过仔细设计随机数字生成器, 驱动模拟的随机数字生成器, 我们安排进化父子互动, 不需要了解互动、 参与者或哪个处理者来进行计算。 关键地说, 这意味着每个人都可以完全独立模拟。 因此, 模拟可以完全复制, 不论它所分布的处理器数量多少 。 由于我们的新算法, 模拟可以(1) 拆分成独立的批工作, (2) 模拟在任何数量的混合机器中( 都不影响模拟结果 ) 。 我们使用鲁斯特编程编程语言来构建可扩展的静态的模拟包 $\ textt{ { {neclimsublistrual} 。 我们只能通过比较三种传统的模拟算法方法来评估我们的平行方法。 这些实验显示, 只要某些地方的不独立算法, 我们的算法是连续的Cxxxxxxxx的法, 。 。