Der technische Appell eines Anukari-Entwicklers an Apple
(anukari.com)- Anukari, ein GPU-Echtzeit-Audiosimulator, erläutert das Problem, dass auf Apple-Silicon-macOS-Geräten keine vorhersehbare Leistung garantiert werden kann, und bittet darum, direkt mit dem Apple-Metal-Team in Kontakt gebracht zu werden
- Anukari ist ein physikbasierter Audiosynthesizer, der für jeden Audiopufferblock Hunderte von Objekten auf der GPU integrieren muss und vollständig von der GPU-ALU-Leistung abhängt
- Da die automatische Energie-/Leistungsregelung von macOS diese spezielle Audio-Workload nicht gut erkennt, bleibt der GPU-Takt niedrig, was zu Leistungseinbußen und Aussetzern führt
- Um das zu umgehen, wurde mit der Strategie „waste makes haste“ ein Spin-Kernel eingeführt, der eine künstliche Last erzeugt und so die GPU täuscht, doch auf leistungsstarken Macs seit dem M1 steigt die Wahrscheinlichkeit des Scheiterns
- Als Lösungen werden unter anderem die Einführung einer Echtzeiterkennung für GPU-Befehlsqueues oder die Erweiterung des Audio-Workgroup-Konzepts auf Metal vorgeschlagen
Was ist Anukari?
- Anukari ist ein 3D-Echtzeit-Audiosynthesizer auf physikalischer Basis, der Audio erzeugt, indem große Feder-Masse-Modelle auf der GPU berechnet werden
- Es wird in Audio-Workstations (DAWs) als AudioUnit/VST3 verwendet und fordert Berechnungen von der GPU in Einheiten von Audiopuffern an
- Die Berechnung ist eher rechen- als speicherlastig (= ALU-zentriert) und nutzt den threadgroup memory der GPU, um Hochgeschwindigkeitsverarbeitung auf L1-Cache-Niveau zu erreichen
Das Wesen des Leistungsproblems
- macOS regelt den GPU-Takt automatisch mit Fokus auf Energieeffizienz und senkt ihn, wenn eine geringe GPU-Last erkannt wird
- Anukari wiederholt kurze, hochdichte Echtzeitaufgaben, wodurch macOS die GPU-Last nicht korrekt erkennt
- Dadurch lässt sich die zur Einhaltung der Echtzeitbedingungen erforderliche Leistung nicht sicherstellen
Nachweise und Tests
- Mit dem Metal Profiler in Apple Xcode wurden Taktunterschiede je nach Leistungszustand direkt überprüft
- Im Zustand Maximum performance läuft alles reibungslos, im Zustand Minimum kommt es zu Audioaussetzern
Die Strategie „waste makes haste“
- Um den GPU-Takt zwangsweise anzuheben, führt Anukari parallel GPU-Arbeit zur Erzeugung einer Spin-Loop-Last aus
- Diese Strategie ist auf dem M1 wirksam, kann aber bei Pro-/Max-Chips scheitern, weil die Last stattdessen auf andere GPU-Kerne verteilt wird
Vorgeschlagene Lösungen
- Audio Workgroup bis zur GPU erweitern, damit die Workload als echtzeitkritisch erkannt wird
- Der Metal API ein Flag für Echtzeit-Sensitivität hinzufügen
- (Hoffnungsvoll) Hinweise erbitten, falls es bereits eine bestehende Lösung gibt
Prüfung weiterer Alternativen und Grenzen
- Game Mode arbeitet auf Basis des Gesamtprozesses und ist daher für Anukari in Plugin-Form nicht nutzbar
- Unter Windows gibt es dieses Problem nicht, vermutlich wegen lockerer Taktsteuerung oder möglicher Kontrolle über die Einstellungen
- Multi-Kernel-Ausführung als Hedging-Ansatz ist wegen höherer Audiolatenz und Problemen bei der Zustandssynchronisation ungeeignet
- Der GPU-Code ist bereits bis ans Limit optimiert (FP16-Nutzung, SIMD-Gruppenausrichtung, ALU-Optimierung usw.)
Warum die GPU und nicht die CPU?
- Anukari führt physikalische Berechnungen für 768 bis 1024 Objekte 48.000-mal pro Sekunde aus und unterstützt bis zu 16-fache Polyphonie
- Die CPU kann das weder bei der Rechenmenge noch bei der Parallelität bewältigen
- Die Fähigkeiten der GPU bei ALU, L1-Cache-Kontrolle und paralleler Steuerung über
threadgroup_barriersind absolut notwendig
Warum sollte Apple sich darum kümmern?
- Anukari ist zwar ein Nischenprodukt eines kleinen Startups, hat aber eine leidenschaftliche Nutzerschaft und weckt Interesse bekannter Künstler
- Apple Silicon verfügt über genügend Leistung für diese Workload, doch eine Änderung der Taktregelungsrichtlinie allein könnte das Problem lösen
Warum ist eine GPU-Audio-API keine Lösung?
- Anukari ist kein klassisches DSP, sondern ein Integrator numerischer Differentialgleichungen, also eher mit einer Game-Physics-Engine vergleichbar; deshalb passt es nicht zum Abstraktionsniveau von GPU Audio
- Es verwendet die Metal API direkt, und extreme, domänenspezifische Optimierung ist unverzichtbar
Zusammenfassung der Bitte: Es wird auf eine Antwort von Apple-Ingenieuren gewartet, die für GPU-Audio im Metal API oder in der macOS-Leistungsregelung eine Erkennung von Echtzeitverarbeitung hinzufügen können
1 Kommentare
Hacker-News-Kommentar
Hallo zusammen, ich hatte ein sehr produktives Gespräch mit der richtigen Person aus dem Metal-Team. Danke, dass ihr geholfen habt, Apples Aufmerksamkeit zu gewinnen. Ich hätte nie erwartet, so viel Unterstützung zu bekommen.
Ich bin neugierig auf die Herkunft des Namens Anukari.
Ich habe bei zwei bekannten Unternehmen gearbeitet, die sehr bekannte Apps im Apple App Store haben.
Der Metal-Profiler hat eine sehr nützliche Funktion: Während man eine Anwendung profiliert, kann man den Metal-"Leistungszustand" auswählen. Außerhalb des Profilers lässt sich das nicht konfigurieren.
Das Problem dabei, für dieses Thema eine API offenzulegen, ist, dass zu viele Entwickler dann ständig den höchsten Leistungszustand erzwingen würden. Ich weiß nicht, ob es einen guten Weg gibt, das zu verhindern und die API trotzdem beizubehalten.
Der beste Weg, dieses Problem zu lösen:
Verpasst nicht den Link, der im vorletzten Absatz eingestreut ist. Er verweist auf eine Demo von Mick Gordon. @anukarimusic antwortet darauf.
Zusätzlich sollte Anukari ein Mick-Gordon-Sound-Pack veröffentlichen und die Einnahmen mit ihm teilen. Der Mann erschafft unglaubliche Dinge. Seine Demo ist großartig. Mit Künstlern zusammenzuarbeiten, wenn man ein mächtiges Werkzeug hat, ist gutes Business und gut für die Welt. Falls ihr Mick Gordon mögt. Ich mag ihn.
Ich brauche diese App nicht, aber sie ist wirklich cool. Solche Apps bringen den "Spaß" zurück ins Computing. Nicht, dass es heute keinen Spaß gäbe, aber sie erinnert an früher, als mehr grafische und experimentelle Programme unterwegs waren. Sogar an die Demoszene.