Modernization and Optimization of MPI Codes
Modernization and Optimization of MPI Codes
MPI has become the de facto standard for distributed memory computing since its inception in 1994. While the MPI standard has evolved to include new technologies like RDMA, many applications still rely on the original set of MPI operations. This thesis initially investigates the current usage of MPI. We note that developers underutilize modern MPI features, as their implementations often are not optimized. On the other hand, as many users rely on the ”old” MPI features, the MPI implementation developers have no incentive to optimize implementations for the new features. As a consequence, there is no incentive for the MPI users to learn the new features, creating a vicious cycle. To break this cycle, this thesis explores three main approaches: (1) facilitating correctness checking tool support, (2) modernizing MPI codes with compiler based approaches, and (3) exploiting compiler knowledge to further optimize the implementation of modern MPI features. In order to facilitate the development and improvement of tools aiding with MPI develop- ment, this thesis introduces the correctness benchmark MPI-BugBench, as a standardized benchmark to evaluate the real world applicability of such tools. Further we show that compiler-based automatic modernization methods can encourage early adoption of new MPI features with minimal programmer effort, for example partitioned operations. Lastly, compiler knowledge can be utilized in order to further optimize the performance of MPI implementations, for example in persistent operations. The use of compiler knowledge, in particular, enables modernization of existing MPI codes without the need of application developers to rewrite existing MPI codes.
MPI ist seit seiner Einführung im Jahr 1994 zum De-facto-Standard für parallele Computersysteme mit verteiltem Speicher geworden. Obwohl sich der MPI-Standard weiterentwickelt hat, um neue Technologien wie RDMA zu integrieren, verlassen sich viele Anwendungen immer noch auf die ursprünglichen MPI-Operationen. Diese Arbeit untersucht zunächst die aktuelle Nutzung von MPI. Wir stellen fest, dass moderne MPI-Funktionen von Entwicklern selten genutzt werden, da deren Implementierungen oft nicht optimiert sind. Andererseits haben die Entwickler der MPI-Implementierungen keinen Anreiz, die neuen Funktionen zu optimieren, da viele Nutzer die ”alten” MPI-Funktionen benutzen. Dies führt dann dazu, dass die Nutzer keinen Anreiz haben, die neuen Funktionen zu erlernen, wodurch ein Teufelskreis entsteht. Um diesen Teufelskreis zu durchbrechen, untersucht diese Arbeit drei Hauptansätze: (1) Unterstützung der Entwicklung von Korrektheitsprüfungs-Werkzeugen, (2) Modernisierung von MPI-Codes mit compilerbasierten Ansätzen und (3) Nutzung von Compilerwissen zur weiteren Optimierung der Implementierung moderner MPI-Operationen. Um die Entwicklung und Verbesserung von Werkzeugen zur Unterstützung der MPI-Entwicklung zu erleichtern, führt diese Arbeit den Korrektheits-Benchmark MPI-BugBench als standardisierten Benchmark ein, um die Anwendbarkeit solcher Tools in der realen Welt zu bewerten. Weiterhin zeigen wir, dass compilerbasierte automatische Modernisierungsmethoden die frühzeitige Einführung neuer MPI-Funktionen mit minimalem Programmieraufwand fördern können, zum Beispiel partitionierte Operationen. Schließlich kann Compilerwissen genutzt werden, um die Leistung von MPI-Implementierungen weiter zu optimieren, beispielsweise bei persistenten Operationen. Die Nutzung von Compilerwissen ermöglicht insbesondere die Modernisierung bestehender MPI-Codes, ohne dass Anwendungsentwickler vorhandene MPI-Codes neu schreiben müssen.
