In der Welt des High Performance Computing (HPC) ist Leistungsportabilität ein Ziel, das viele Entwickler verfolgen. Mit der Diversifizierung der Computerplattformen sind jedoch auch zahlreiche Herausforderungen bei der Verwirklichung dieses Ziels verbunden. Bei der Leistungsportabilität geht es nicht nur darum, eine Anwendung auf unterschiedlichen Hardwareplattformen laufen zu lassen, sondern noch wichtiger: darum, die Kompatibilität ohne Leistungseinbußen aufrechtzuerhalten. Bislang gibt es keinen universellen Standard zur Quantifizierung und Bewertung der Leistungsportabilität, was die Arbeit für Entwickler bei der Softwaregestaltung erschwert.
Leistungsportabilität stellt die Annahme dar, dass die einzelne Codebasis eines Entwicklers auf neuen Architekturen eine gute Leistung erbringt und auf einer Vielzahl aktueller, noch nicht getesteter Architekturen akzeptable Leistungsgrenzen einhält.
Die Definition und Messung der Leistungsportabilität wird heiß diskutiert. Einige argumentieren, dass es in erster Linie auf die Anwendungsportabilität ankommt, während andere darauf bestehen, dass die Portabilität des Quellcodes der Schlüssel ist. Besonders in der aktuellen Situation, in der sich die Hardware täglich ändert, müssen Entwickler darüber nachdenken, wie sie die Ausführung ihrer Produkte auf mehreren Plattformen weiterhin ermöglichen können. Das Supercomputing Program (ECP) des US-Energieministeriums betont diesen Punkt, da es ein kompatibles Computer-Ökosystem für unterschiedliche Hardwarearchitekturen schaffen muss.
Es wird allgemein angenommen, dass „ein Code auf mehreren Architekturen gut ausgeführt werden kann, was Leistungsportabilität bedeutet.“
Bei der Bewertung der Leistungsportabilität berücksichtigen Entwickler normalerweise zwei Faktoren: Portabilität und Leistung. Die Portabilität lässt sich durch Betrachtung der auf unterschiedlichen Architekturen verwendeten Codezeilen messen, während die Leistung durch den Vergleich plattformoptimierter Versionen mit portablen Versionen ermittelt werden kann. Trotz dieser Messmethoden mangelt es der Branche noch immer an transparenten Standards, was es für Entwickler schwierig macht, klar zu verstehen, wie sich die beste Leistungsportabilität erreichen lässt.
Auf der Portability Conference 2016 des US-Energieministeriums (DOE) diskutierten die Teilnehmer hitzig über die Leistungsportabilität. Viele namhafte Entwickler und Wissenschaftler nahmen an dem Treffen teil, um neue Erkenntnisse und Anforderungen zur Leistungsportabilität auszutauschen. Es ist anzumerken, dass es die Auffassung gibt, dass die durch zukünftige parallele Programmiermodelle ermöglichte Leistungsportabilität bedeutender sein wird als das, was die Anwendungen selbst bereitstellen können.
Wie in der Besprechung erwähnt: „Ein Code ist portabel, wenn das Anwendungsteam ihn für portabel hält.“
Angesichts der unterschiedlichen Hardwareplattformen müssen Entwickler ein geeignetes Framework zur Unterstützung ihres Codes finden. Bekannte Frameworks wie OpenCL, SYCL und OpenMP behaupten, die Portabilität von Funktionen zu erleichtern. Diese Frameworks unterstützen die parallele Programmierung auf mehreren Plattformen und ermöglichen Entwicklern, in mehreren Sprachen zu programmieren. Neben Frameworks gibt es jedoch auch Nicht-Framework-Lösungen, wie z. B. selbstoptimierende und domänenspezifische Sprachen, die ebenfalls zur Verbesserung der Leistungsportabilität beitragen können.
Kurz gesagt: Das Thema Leistungsportabilität wird im Hochleistungsrechnen immer wichtiger, da es sich direkt auf die Arbeitseffizienz des Entwicklers und die nachhaltige Entwicklung von Anwendungen auswirkt. Die Computeranforderungen der Zukunft ändern sich und die Computertechnologie entwickelt sich rasch weiter. Wie sollten sich Entwickler anpassen und diese Herausforderungen bewältigen?