# Metal (API)

Metal ist eine von Apple entwickelte Low-Level-, Hardware-beschleunigte 3D-Grafik- und Compute-Shader-Computergrafik-API mit geringem Overhead. Es debütierte in iOS 8. Metal kombiniert Funktionen ähnlich wie OpenGL und OpenCL in einer API. Es soll die Leistung verbessern, indem es für Apps auf iOS, iPadOS, macOS und tvOS einen Low-Level-Zugriff auf die GPU-Hardware bietet. Es kann mit Low-Level-Programmierschnittstellen wie Vulkan und DirectX 12 verglichen werden.
Metal ist eine objektorientierte Programmierschnittstelle, die mit den Programmiersprachen Swift, C++ oder Objective-C aufgerufen werden kann. Die vollständige GPU-Ausführung wird über die Metal Shading Language gesteuert.

## Features

Metal zielt darauf ab, den Zugriff auf die GPU mit geringem Overhead zu ermöglichen. Befehle werden vorher codiert und dann zur asynchronen Ausführung an die GPU gesendet. Die Anwendung steuert, wann auf den Abschluss einer Ausführung gewartet werden soll, sodass Anwendungsentwickler den Durchsatz erhöhen können, indem sie andere Befehle codieren, während Befehle auf der GPU ausgeführt werden, oder Energie sparen, indem sie explizit auf den Abschluss der GPU-Ausführung warten. Außerdem ist die Befehlscodierung CPU-unabhängig, sodass Anwendungen Befehle für jeden CPU-Thread unabhängig programmieren können. Schließlich werden die Renderstati im Voraus berechnet, sodass der GPU-Treiber im Voraus weiß, wie die Renderpipeline vor der Befehlsausführung konfiguriert und optimiert werden muss.
Metal verbessert die Fähigkeiten der GPGPU-Programmierung durch die Verwendung von Compute-Shadern. Metal verwendet eine spezielle Shading-Sprache basierend auf C++14, implementiert mit Clang und LLVM.
Metal bietet Anwendungsentwicklern die Flexibilität, wo Metal-Ressourcen (Puffer, Texturen) erstellt werden können. Ressourcen können auf der CPU, GPU oder beiden zugewiesen werden und bieten Möglichkeiten zum Aktualisieren und Synchronisieren zugewiesener Ressourcen. Metal kann auch den Zustand einer Ressource während der Lebensdauer eines Befehlscodierers erzwingen.
Auf macOS kann Metal Anwendungsentwicklern die Möglichkeit geben, festzulegen, auf welcher GPU ausgeführt werden soll. Anwendungsentwickler können zwischen der energiesparenden integrierten GPU der CPU, der diskreten GPU (bei bestimmten MacBooks und Macs) oder einer über Thunderbolt angeschlossenen externen GPU wählen. Anwendungsentwickler haben auch die Vorliebe, wie GPU-Befehle auf welchen GPUs ausgeführt werden, und geben Vorschläge, auf welcher GPU ein bestimmter Befehl am effizientesten auszuführen ist (Befehle zum Rendern einer Szene können von der diskreten GPU ausgeführt werden, während Nachbearbeitung und Anzeige von der integrierten GPU verarbeitet werden).

### Metal Performance Shader

Metal Performance Shaders ist eine hochoptimierte Bibliothek von Grafikfunktionen, die Anwendungsentwicklern dabei helfen kann, eine hervorragende Leistung zu erzielen und gleichzeitig den Aufwand für die Aufrechterhaltung der spezifischen Funktionen der GPU-Familie zu verringern. Sie bietet Funktionen wie:
* Bildfilteralgorithmen
* Verarbeitung neuronaler Netze
* Erweiterte mathematische Operationen
* Raytracing

## Geschichte

Metal ist seit dem 2. Juni 2014 auf iOS-Geräten mit Apple A7 oder höher verfügbar und seit 8. Juni 2015 auf Macs (2012-Modelle oder höher). Am 5. Juni 2017 kündigte Apple auf der WWDC die zweite Version von Metal an, die von macOS High Sierra, iOS 11 und tvOS 11 unterstützt wird. Metal 2 ist keine separate API von Metal und wird von derselben Hardware unterstützt. Metal 2 ermöglicht effizienteres Profiling und Debugging in Xcode, beschleunigtes maschinelles Lernen, geringere CPU-Auslastung, Unterstützung für Virtual Reality auf macOS und insbesondere Besonderheiten der Apple A11 GPU.
Auf der WWDC 2020 kündigte Apple die Migration des Mac auf Apple silicon an. Macs, die Apple silicon verwenden, verfügen über Apple-GPUs mit einem Funktionssatz, der das kombiniert, was zuvor auf macOS und iOS verfügbar war, und ist in der Lage, TBDR-Funktionen zu nutzen.
Auf der WWDC 2022 kündigte Apple die nächste Version, Metal 3, an, welche mit macOS Ventura, iOS 16 bzw. iPadOS 16 ausgeliefert wurde. Metal 3 führte mit MetalFX ein upscaling framework ein um komplexe Szenen effizient zu rendern. Ebenso wurde die Möglichkeit der Verwendung von C++ für den Aufruf der Metal API verkündet.