{'fraction_non_alphanumeric': 0.0171606864274571, 'fraction_numerical': 0.0, 'mean_word_length': 5.897849462365591, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Distributed Memory Implementation Strategies for the kinetic Monte Carlo Algorithm

This paper presents strategies to parallelize a previously implemented kinetic Monte Carlo (kMC) algorithm. The process under simulation is the precipitation in an aluminum scandium alloy. The selected parallel algorithm is called synchronous parallel kinetic Monte Carlo (spkMC). spkMC was implemented with a distributed memory architecture and using the Message Passing Interface (MPI) communication protocol. In spkMC the different processes synchronize at regular points, called end of sprint. During a sprint there is no interaction among processes. A checker board scheme was adopted to avoid possible conflicts among processes during each sprint. To optimize performance different implementations were explored, each one with a different computation vs. communication strategy. The obtained results prove that a rigorous distributed and parallel implementation reproduces accurately the statistical behavior observed with the sequential kMC. Results also prove that simulation time can be reduced with a distributed parallelization but, due to the non-deterministic nature of kMC, significant and scalable gains in parallelization oblige to introduce some simplifications and approximations.