ABSTRACT
The Message-Passing Interface (MPI) requires implementations that are able to adapt to new hardware and architectures while ensuring correctness and usability. The most widely used MPI implementations, however, are written in older programming languages that can lead to memory-unsafe code with poor isolation between modules, and complicated interfaces that can lead to serious bugs, all of which leads to difficulty in testing, debugging, and checking for correctness. In order to improve development of MPI implementations, we posit that new components, and key existing code segments, may benefit from being written in the Rust programming language. In this work we reimplement a core component of Open MPI used for intra-node communication in Rust and show that it achieves performance approaching that of the existing, highly optimized, C code, demonstrating that Rust is able to provide performance while allowing for better testing, memory safety guarantees, and correctness.
- Michael Blesel, Michael Kuhn, and Jannek Squar. 2021. heimdallr: Improving Compile Time Correctness Checking for Message Passing with Rust. In High Performance Computing, Heike Jagode, Hartwig Anzt, Hatem Ltaief, and Piotr Luszczek (Eds.). Springer International Publishing, Cham, 199–211.Google Scholar
- D. Buntinas, G. Mercier, and W. Gropp. 2006. Design and evaluation of Nemesis, a scalable, low-latency, message-passing communication subsystem. In Sixth IEEE International Symposium on Cluster Computing and the Grid (CCGRID’06), Vol. 1. 10 pp.–530. https://doi.org/10.1109/CCGRID.2006.31Google ScholarDigital Library
- Simon Byrne, Lucas C. Wilcox, and Valentin Churavy. 2021. MPI.jl: Julia bindings for the Message Passing Interface. Proceedings of the JuliaCon Conferences 1, 1 (2021), 68. https://doi.org/10.21105/jcon.00068Google ScholarCross Ref
- Lei Chai, Albert Hartono, and Dhabaleswar K. Panda. 2006. Designing High Performance and Scalable MPI Intra-node Communication Support for Clusters. In 2006 IEEE International Conference on Cluster Computing. 1–10. https://doi.org/10.1109/CLUSTR.2006.311850Google ScholarCross Ref
- Joong-Yeon Cho, Hyun-Wook Jin, and Dukyun Nam. 2017. Enhanced Memory Management for Scalable MPI Intra-Node Communication on Many-Core Processor. In Proceedings of the 24th European MPI Users’ Group Meeting (Chicago, Illinois) (EuroMPI ’17). Association for Computing Machinery, New York, NY, USA, Article 10, 9 pages. https://doi.org/10.1145/3127024.3127035Google ScholarDigital Library
- Rust Community. 2023. The Rust Programming Language. https://doc.rust-lang.org/stable/book/.Google Scholar
- Rust Community. 2023. The Rust Reference. https://doc.rust-lang.org/stable/reference/.Google Scholar
- Rust Community. 2023. The Rustonomicon. https://doc.rust-lang.org/nomicon/atomics.html.Google Scholar
- Manuel Costanzo, Enzo Rucci, Marcelo Naiouf, and Armando De Giusti. 2021. Performance vs Programming Effort between Rust and C on Multicore Architectures: Case Study in N-Body. In 2021 XLVII Latin American Computing Conference (CLEI). 1–10. https://doi.org/10.1109/CLEI53233.2021.9640225Google ScholarCross Ref
- Lisandro Dalcin. 2023. MPI for Python. https://mpi4py.readthedocs.io/en/stable/.Google Scholar
- Arthur Azevedo de Amorim, Catalin Hritcu, and Benjamin C. Pierce. 2018. The Meaning of Memory Safety. arxiv:1705.07354 [cs.PL]Google Scholar
- Linux Kernel Developers. 2023. perf: Linux profiling with performance counters. https://perf.wiki.kernel.org/index.php/Main_Page.Google Scholar
- RSMPI Developers. 2023. RSMPI. https://github.com/rsmpi/rsmpi.Google Scholar
- Mehmet Emre, Ryan Schroeder, Kyle Dewey, and Ben Hardekopf. 2021. Translating C to Safer Rust. Proc. ACM Program. Lang. 5, OOPSLA, Article 121 (oct 2021), 29 pages. https://doi.org/10.1145/3485498Google ScholarDigital Library
- Rust for Linux Maintainers. 2023. Rust for Linux. https://rust-for-linux.com/.Google Scholar
- Viktor Franzén and Carl Östling. 2022. Evaluation of Rust for GPGPU high-performance computing. (2022).Google Scholar
- Edgar Gabriel, Graham E. Fagg, George Bosilca, Thara Angskun, Jack J. Dongarra, Jeffrey M. Squyres, Vishal Sahay, Prabhanjan Kambadur, Brian Barrett, Andrew Lumsdaine, Ralph H. Castain, David J. Daniel, Richard L. Graham, and Timothy S. Woodall. 2004. Open MPI: Goals, Concept, and Design of a Next Generation MPI Implementation. In Proceedings, 11th European PVM/MPI Users’ Group Meeting. Budapest, Hungary, 97–104.Google ScholarCross Ref
- Sayan Ghosh, Clara Alsobrooks, Martin Ruefenacht, Anthony Skjellum, Purushotham V. Bangalore, and Andrew Lumsdaine. 2021. Towards Modern C++ Language Support for MPI. In 2021 Workshop on Exascale MPI (ExaMPI). 27–35. https://doi.org/10.1109/ExaMPI54564.2021.00009Google ScholarCross Ref
- Richard L. Graham, Timothy S. Woodall, and Jeffrey M. Squyres. 2006. Open MPI: A Flexible High Performance MPI. In Parallel Processing and Applied Mathematics, Roman Wyrzykowski, Jack Dongarra, Norbert Meyer, and Jerzy Waśniewski (Eds.). Springer Berlin Heidelberg, Berlin, Heidelberg, 228–239.Google Scholar
- Brendan Gregg. 2021. Flame Graphs. https://www.brendangregg.com/flamegraphs.html.Google Scholar
- Dan Grossman, Greg Morrisett, Trevor Jim, Michael Hicks, Yanling Wang, and James Cheney. 2002. Region-Based Memory Management in Cyclone. SIGPLAN Not. 37, 5 (may 2002), 282–293. https://doi.org/10.1145/543552.512563Google ScholarDigital Library
- Samuel K. Gutierrez, Nathan T. Hjelm, Manjunath Gorentla Venkata, and Richard L. Graham. 2012. Performance Evaluation of Open MPI on Cray XE/XK Systems. In 2012 IEEE 20th Annual Symposium on High-Performance Interconnects. 40–47. https://doi.org/10.1109/HOTI.2012.11Google ScholarDigital Library
- Ralf Jung, Hoang-Hai Dang, Jeehoon Kang, and Derek Dreyer. 2019. Stacked Borrows: An Aliasing Model for Rust. Proc. ACM Program. Lang. 4, POPL, Article 41 (dec 2019), 32 pages. https://doi.org/10.1145/3371109Google ScholarDigital Library
- NOWLAB: Network Based Computing Lab. 2023. OSU Micro-Benchmarks 7.2. https://mvapich.cse.ohio-state.edu/benchmarks/.Google Scholar
- Linhan Li, Qianying Zhang, Shijun Zhao, Zhiping Shi, and Yong Guan. 2022. Design and Implementation of OOM Module based on Rust. In 2022 IEEE 22nd International Conference on Software Quality, Reliability, and Security Companion (QRS-C). 774–775. https://doi.org/10.1109/QRS-C57518.2022.00129Google ScholarCross Ref
- Ivan Lozano. 2021. Integrating Rust Into the Android Open Source Project. https://security.googleblog.com/2021/05/integrating-rust-into-android-open.html.Google Scholar
- Aravind Machiry, John Kastner, Matt McCutchen, Aaron Eline, Kyle Headley, and Michael Hicks. 2022. C to Checked C by 3c. Proc. ACM Program. Lang. 6, OOPSLA1, Article 78 (apr 2022), 29 pages. https://doi.org/10.1145/3527322Google ScholarDigital Library
- Samantha Miller, Anirudh Kumar, Tanay Vakharia, Tom Anderson, Ang Chen, and Danyang Zhuo. 2023. Agile Development of Linux Schedulers with Ekiben. arxiv:2306.15076 [cs.OS]Google Scholar
- Samantha Miller, Kaiyuan Zhang, Mengqi Chen, Ryan Jennings, Ang Chen, Danyang Zhuo, and Tom Anderson. 2021. High Velocity Kernel File Systems with Bento. https://www.usenix.org/publications/loginonline/high-velocity-kernel-file-systems-bento.Google Scholar
- Yuvraj Singh. 2022. RUST Programming for HPC application. https://hps.vi4io.org/_media/teaching/summer_term_2022/nthpda_report_rust_for_hpc_by_yuvraj_singh.pdf. (2022).Google Scholar
- Michal Sudwoj. 2020-09-11. Rust programming language in the high-performance computing environment. Bachelor Thesis. ETH Zurich, Zurich. https://doi.org/10.3929/ethz-b-000474922Google ScholarCross Ref
Index Terms
- Embedding Rust within Open MPI
Recommendations
Open issues in MPI implementation
ACSAC'07: Proceedings of the 12th Asia-Pacific conference on Advances in Computer Systems ArchitectureMPI (the Message Passing Interface) continues to be the dominant programming model for parallel machines of all sizes, from small Linux clusters to the largest parallel supercomputers such as IBM Blue Gene/L and Cray XT3. Although the MPI standard was ...
MPI + MPI: a new hybrid approach to parallel programming with MPI plus shared memory
Hybrid parallel programming with the message passing interface (MPI) for internode communication in conjunction with a shared-memory programming model to manage intranode parallelism has become a dominant approach to scalable parallel programming. While ...
Performance Evaluation of Open MPI on Cray XE/XK Systems
HOTI '12: Proceedings of the 2012 IEEE 20th Annual Symposium on High-Performance InterconnectsOpen MPI is a widely used open-source implementation of the MPI-2 standard that supports a variety of platforms and interconnects. Current versions of Open MPI, however, lack support for the Cray XE6 and XK6 architectures -- both of which use the Gemini ...
Comments