Im heutigen stark vernetzten digitalen Zeitalter ist die Leistungsportabilität zu einem wichtigen Thema in der Softwareentwicklung geworden. Leistungsportabilität bezieht sich auf die Fähigkeit einer Anwendung, effektiv auf verschiedenen Hardwareplattformen zu laufen. Wenn Entwickler leistungsfähige und portable Anwendungen entwerfen, müssen sie mehrere Plattformen ohne Leistungseinbußen unterstützen, idealerweise bei gleichzeitiger Minimierung plattformspezifischen Codes.
Leistungsportabilität gilt in der High-Performance-Computing-Community (HPC) als äußerst gefragte Funktion, es gibt jedoch derzeit keinen universellen oder einheitlichen Messstandard.
Die Leistung wird auf zwei Arten gemessen: Zum einen durch den Vergleich der Leistung einer optimierten Version der Anwendung mit ihrer portablen Version, zum anderen anhand der Anzahl der ausgeführten Gleitkommaoperationen (FLOPs), die während der Ausführung aus dem Hauptspeicher verschoben werden . Daten zur Prozessorfrequenz, um die theoretische Spitzenleistung der Anwendung zu vergleichen. Da die Hardwarevielfalt zunimmt, wird es immer wichtiger, Software zu entwickeln, die auf einer Vielzahl von Maschinen ausgeführt werden kann, was sich auf die langfristige Nutzung der Anwendung und die Möglichkeit ihrer Aktualisierung auswirkt.
Leistungsportabilität wird in der Branche häufig erwähnt und bezieht sich in der Regel auf Folgendes: Erstens die Fähigkeit, dieselbe Anwendung auf mehreren Hardwareplattformen auszuführen, zweitens das Erreichen bestimmter Leistungsziele auf diesen Plattformen. Auf der Performance Portability Conference des US-Energieministeriums (DOE) im Jahr 2016 erklärte ein Experte: „Eine Anwendung kann als Anwendung betrachtet werden, wenn sie auf jeder Plattform ein konsistentes Leistungsniveau im Vergleich zur bekanntesten Implementierung erreichen kann.“ Für Effizienz und Portabilität.“
Jeff Larkin (NVIDIA) wies direkt darauf hin, dass Leistungsportabilität bedeutet, dass „derselbe Quellcode produktiv auf mehreren verschiedenen Architekturen ausgeführt werden kann“.
Daher ist Leistungsportabilität zu einem wichtigen Diskussionsthema in der High-Performance-Computing-Community geworden. Partner aus Industrie, Wissenschaft und DOE National Laboratories veranstalten seit 2016 regelmäßig das „Performance, Portability and High-Efficiency Computing Productivity Forum“, um Forschung und Entwicklung im Bereich Leistungsportabilität zu fördern.
Während sich die Computerarchitektur weiterentwickelt, bleibt die Leistungsportabilität wichtig. Entwickler gehen davon aus, dass ihre einzelne Codebasis sowohl auf neueren Architekturen als auch auf einer Vielzahl aktueller Architekturen, die noch nicht getestet wurden, eine akzeptable Leistung erzielen wird. Mit zunehmender Hardwarevielfalt wird es notwendig, Software zu entwickeln, die auf mehreren Plattformen ausgeführt werden kann. Dies hängt mit der Vitalität und anhaltenden Relevanz von Anwendungen zusammen.
Das Exascale Computing Project (ECP) des US-Energieministeriums betont, dass Leistungsportabilität ein anhaltendes Anliegen ist, insbesondere in einer Umgebung mit mehreren Plattformen.
Seit 2016 veranstaltet das DOE mehrere Workshops, um die wachsende Bedeutung der Leistungsportabilität zu diskutieren. An der Konferenz 2017 nahmen viele bekannte Institutionen teil, darunter das National Energy Research Scientific Computing Center (NERSC) und das Los Alamos National Laboratory (LANL).
Um zu quantifizieren, wann ein Programm Leistungsportabilität erreicht hat, müssen zwei Faktoren berücksichtigt werden. Erstens kann die Leistungsportabilität gemessen werden, indem die Anzahl der Codezeilen, die über Architekturen hinweg verwendet werden, mit der Anzahl der Codezeilen verglichen wird, die nur für eine einzelne Architektur verwendet werden. Zweitens kann Leistung auf verschiedene Arten gemessen werden. Um beispielsweise die Leistung einer plattformoptimierten Version einer Anwendung mit einer tragbaren Version zu vergleichen, besteht eine effektive Messmethode darin, ein Dachleistungsmodell zu verwenden, mit dem die theoretische Spitzenleistung der Anwendung ermittelt werden kann.
Auf der Konferenz 2016 erwähnte ein Teilnehmer: „Wenn das Anwendungsteam behauptet, dass es leistungsübertragbar ist, gilt dieser Code als leistungsübertragbar.“
In den letzten Jahren hat die Forschung darauf hingewiesen, dass portabler Code, der für verschiedene Parallel-Computing-Architekturen geschrieben wurde, offenen Standard-Programmiermodellen entsprechen muss und dass der Code auf mehreren Plattformen gleichzeitig entwickelt und verbessert werden muss. Diese Strategien können Entwicklern dabei helfen, für verschiedene Plattformen geeignete Parameter zu finden.
Es gibt eine Vielzahl von Programmieranwendungen und -systemen auf dem Markt, die Entwicklern dabei helfen sollen, Leistungsportabilität zu erreichen. Zu den gängigen Frameworks gehören OpenCL, SYCL, Kokkos, RAJA usw. Diese Programmierschnittstellen unterstützen die plattformübergreifende Multiprozessprogrammierung. Einige Nicht-Framework-Lösungen umfassen selbstoptimierende und domänenspezifische Sprachen.
Sind wir angesichts des technologischen Fortschritts bereit für eine neue Ära der Programmierung, die die Möglichkeiten der Leistungsportabilität auf ein neues Niveau hebt?