{'fraction_non_alphanumeric': 0.01805337519623234, 'fraction_numerical': 0.0, 'mean_word_length': 5.071428571428571, '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}}
Bi-modal MPI and MPI + threads Computing on Scalable Multicore Systems

There is ample evidence that many single level MPIonly applications will not perform optimally on scalable multicore systems as core counts per node increase. However, within a given application, certain phases of computation are impacted more than others. For example, finite element applications tend to scale very well with MPI-only when performing stiffness matrix computations, but scale poorly in the solvers. We present and demonstrate use of bi-modal parallel programming using proposed new MPI features. Specifically, for MPI processes on the same node, we exploit the underlying architecture to create shared memory regions visible to some or all processes on that node. Using these regions we can reduce memory usage for some algorithms with minimal effort. We can also initialize buffers in MPI-only mode and then switch to MPI+threads mode to use threaded algorithms. We demonstrate this bi-modal approach on several problems and show how it provides essential value for current and future computer systems. Specifically we illustrate how the bi-modal features enable tunable shared memory thread counts that can be changed to match the needs of various phases within a single application.