Im Bereich des High-Performance-Computing (HPC) sind Entwickler geradezu fanatisch, was die „Performance-Portabilität“ angeht. Dieses Phänomen rührt von der Notwendigkeit her, dass Computerprogramme und Anwendungen effizient auf verschiedenen Plattformen laufen müssen. Da sich die Technologie ständig weiterentwickelt und die Hardwarearchitekturen sich ändern, sind die Haltbarkeit und Relevanz von High-Performance-Computing-Anwendungen gefährdet. Die Entwickler sind daher gezwungen, sich auf die Verbesserung der Leistungsportabilität zu konzentrieren.
Unter Leistungsportabilität versteht man die Fähigkeit von Computerprogrammen und -anwendungen, auf verschiedenen Plattformen effektiv ausgeführt zu werden. Wenn Entwickler Anwendungen für die Leistungsportabilität entwickeln, hoffen sie, mehrere Plattformen ohne Leistungseinbußen zu unterstützen und plattformspezifischen Code zu minimieren.
Da die Hardwarevielfalt zunimmt, ist die Entwicklung von Software, die auf einer großen Bandbreite von Maschinen ausgeführt werden kann, zu einer Notwendigkeit geworden, um die Rentabilität von Anwendungen zu gewährleisten. Laut der Performance Portability Conference des US-Energieministeriums (DOE) von 2016 ist sich die Branche im Allgemeinen einig, dass Performance Portability als „die Fähigkeit, dieselbe Anwendung auf mehreren Hardwareplattformen auszuführen und auf diesen Plattformen dieselbe Leistung zu erzielen“ interpretiert werden kann. der Leistung."
John Penicuik von Intel sagte beispielsweise auf derselben Konferenz, dass „eine Anwendung als leistungsportabel gilt, wenn sie plattformübergreifend konsistente Leistungsniveaus erreichen kann.“ Das bedeutet, dass es bei der sogenannten Portabilität nicht nur um die Anwendung selbst geht, sondern auch über die Portabilität des Quellcodes.
Derzeit gibt es keine allgemein anerkannte Methode zur Messung der Leistungsportabilität. Einzelne Teams definieren das Konzept möglicherweise anhand ihrer eigenen Kriterien.
Die genaue Quantifizierung der Leistungsportabilität ist ein anspruchsvolles Problem, das in erster Linie von zwei Faktoren abhängt. Der erste Aspekt ist die Portabilität. Diese lässt sich messen, indem man die Gesamtzahl der auf mehreren Architekturen verwendeten Codezeilen mit der Gesamtzahl der speziell für eine einzelne Architektur geschriebenen Codezeilen vergleicht. Der zweite Aspekt ist die Leistung. Dabei wird normalerweise die Leistung zwischen optimierten Versionen für eine bestimmte Plattform und portablen Versionen verglichen.
Derzeit gibt es keinen universellen Standard dafür, was als portabler Code oder portable Anwendungen gilt. Diese Mehrdeutigkeit in der Definition führt zu unterschiedlichen Bewertungskriterien für verschiedene Teams. Laut einem Sprecher der Konferenz 2016 liegt die Entscheidung, ob ein Projekt als portabel gilt oder nicht, ganz beim Entwicklungsteam.
Um Programmierern dabei zu helfen, Leistungsportabilität zu erreichen, gibt es derzeit eine Vielzahl von Programmieranwendungen und -systemen, die dieses Ziel erreichen können. Programmier-Frameworks wie OpenCL, SYCL und Kokkos behaupten, funktionale Portabilität zu unterstützen und die parallele Programmierung auf mehreren Plattformen zu erleichtern. Darüber hinaus gibt es einige Nicht-Framework-Lösungen, wie zum Beispiel selbstoptimierende Technologien und dedizierte Sprachen, die ebenfalls die Leistungsportabilität verbessern können.
Entwickler müssen nach Möglichkeiten suchen, um in einer sich ständig ändernden Computerarchitektur Leistungsportabilität zu erreichen, was nicht nur mit den aktuellen Anforderungen zusammenhängt, sondern auch mit der zukünftigen Überlebensfähigkeit.
Angesichts der rasanten Entwicklung der Computertechnologie könnten künftig neue Herausforderungen hinsichtlich der Leistungsportabilität auftreten. Branchenexperten sind davon überzeugt, dass die Entwicklung paralleler Programmiermodelle ein entscheidender Faktor für die Leistungsportabilität sein wird. Untersuchungen lassen darauf schließen, dass künftige Modelle der parallelen Programmierung in vielen Situationen eine höhere Leistungsportabilität bieten können als die Anwendungen selbst.
Diese Änderung bedeutet, dass sich die Verantwortung, die Programmierer bei der Entwicklung von Anwendungen tragen müssen, schrittweise auf die Implementierung des Programmiermodells und des zugrunde liegenden Compilers verlagert, was den technischen Stil der Programmentwicklung erheblich verändern wird. Diese Untersuchungen und Diskussionen werden den Fortschritt und die Entwicklung des Hochleistungsrechnens weiterhin vorantreiben.
Wie können Entwickler also in diesem sich ständig verändernden technologischen Kontext den Widerspruch zwischen Plattformeigenschaften und Leistungsportabilität effektiv ausbalancieren?