Anukari geliştiricisinden Apple’a teknik çağrı
(anukari.com)- GPU tabanlı gerçek zamanlı ses simülatörü Anukari, Apple Silicon macOS cihazlarda öngörülebilir performans garantisi alamama sorununu açıklıyor ve Apple Metal ekibine doğrudan ulaşmayı talep ediyor
- Anukari, fizik tabanlı bir ses sentezleyicisi; her ses arabellek bloğunda GPU üzerinde yüzlerce nesneyi entegre etmek zorunda ve tamamen GPU ALU performansına bağımlı
- macOS’teki otomatik güç/perfomans ayarlama mantığı bu özel ses iş yükünü iyi tanımadığı için, GPU saat hızı düşük kalıyor ve performans düşüşü ile takılmalar yaşanıyor
- Bunu çözmek için “waste makes haste” stratejisiyle GPU’yu kandırmak üzere sahte yük oluşturan bir spin kernel eklendi; ancak M1 sonrası yüksek performanslı Mac’lerde başarısız olma olasılığı artıyor
- Çözüm olarak GPU komut kuyruğuna gerçek zaman farkındalığı eklenmesi veya Audio Workgroup kavramının Metal’e kadar genişletilmesi gibi öneriler sunuluyor
Anukari nedir?
- Anukari, gerçek zamanlı 3D fizik tabanlı bir ses sentezleyicisi; büyük ölçekli yay-kütle modellerini GPU üzerinde hesaplayarak ses üretiyor
- Ses iş istasyonlarında (DAW) AudioUnit/VST3 biçiminde kullanılıyor ve GPU’dan ses arabellekleri bazında hesaplama istiyor
- Hesaplama bellekten çok işlem yoğunluğu (=ALU) odaklı ve GPU’nun threadgroup memory özelliğini kullanarak L1 önbellek düzeyinde yüksek hızlı işleme sağlıyor
Performans sorununun özü
- macOS, enerji verimliliği odaklı olarak GPU saat hızını otomatik ayarlıyor ve GPU yükü düşük algılanırsa saat hızını düşürüyor
- Anukari, kısa ama çok yoğun gerçek zamanlı işleri tekrar eden bir yapıya sahip olduğu için macOS GPU yükünü doğru algılayamıyor
- Bu da gerçek zaman kısıtlarını karşılamak için gereken performansın sağlanamamasına yol açıyor
Kanıtlar ve testler
- Apple Xcode’un Metal Profiler aracıyla performans durumlarına göre saat hızı farkı doğrudan doğrulanmış
- Maximum performance durumunda sorunsuz çalışırken, Minimum durumunda ses kesilmeleri oluşuyor
“waste makes haste” stratejisi
- GPU saat hızını zorla yükseltmek için Anukari, spin loop yükü üretmek amacıyla ek GPU işleri aynı anda çalıştırıyor
- Bu strateji M1’de etkili olsa da Pro/Max sınıfı çiplerde yükün başka GPU çekirdeklerine dağılması nedeniyle başarısız olma ihtimali var
Önerilen çözümler
- Audio Workgroup’un GPU’ya kadar genişletilmesi ve iş yükünün gerçek zamanlı olarak tanınması
- Metal API’ye gerçek zaman hassasiyeti bayrağı eklenmesi
- (Umutla) Böyle bir yöntem zaten varsa bunun paylaşılması
Diğer alternatifler ve sınırlamalar
- Game Mode tüm süreç bazlı çalıştığı için eklenti biçimindeki Anukari’ye uygulanamıyor
- Windows’ta sorun yok; bunun nedeni saat hızı yönetiminin daha gevşek olması veya ayarların denetlenebilmesi olabilir
- Koruma amaçlı çoklu kernel çalıştırma yaklaşımı, ses gecikmesini artırdığı ve durum senkronizasyonu sorunları yarattığı için uygun değil
- GPU kodu optimizasyonu zaten sınırına kadar yapılmış durumda (FP16 kullanımı, SIMD grup hizalaması, ALU optimizasyonu vb.)
Neden CPU değil de GPU?
- Anukari, saniyede 48.000 kez 768~1024 nesnenin fizik hesaplamasını yapıyor ve 16 sese kadar polifoni destekliyor
- CPU, hem hesap yükü hem de paralellik açısından bunun altından kalkamıyor
- GPU’nun ALU, L1 önbellek kontrolü ve threadgroup_barrier paralellik denetimi yetenekleri kesin olarak gerekli
Apple neden bu konuyla ilgilenmeli?
- Anukari, küçük bir girişimin niş ürünü olsa da tutkulu bir kullanıcı kitlesi ve tanınmış sanatçıların ilgisi var
- Apple Silicon, bu iş yükünü rahatlıkla kaldırabilecek performansa sahip; yalnızca saat hızı politikasının değişmesiyle sorun çözülebilir
GPU Audio API neden uygun değil?
- Anukari, geleneksel bir DSP değil; sayısal diferansiyel denklem entegratörü, yani oyun fizik motoruna daha yakın olduğu için GPU Audio’nun soyutlama seviyesiyle uyuşmuyor
- Metal API doğrudan kullanılıyor ve alana özgü aşırı düzey optimizasyon şart
İstek özeti: GPU ses işleme için Metal API’ye veya macOS performans ayarlama politikasına gerçek zamanlı işleme farkındalığı ekleyebilecek bir Apple mühendisi yanıtı bekleniyor
1 yorum
Hacker News görüşü
Herkese merhaba, Metal ekibindeki doğru kişiyle çok verimli bir konuşma yaptım. Apple'ın dikkatini çekmeme yardımcı olduğunuz için teşekkürler. Bu kadar çok destek almayı hiç beklemiyordum
Anukari adının kökenine dair merakım var
Apple App Store'da çok bilinen uygulamaları olan iki ünlü şirkette deneyimim var
Metal profiler çok faydalı bir özelliğe sahip: uygulamayı profillerken Metal "performans durumu" seçebiliyorsunuz. Bu, profiler dışında yapılandırılamıyor
Bu sorun için bir API açığa çıkarmanın problemi, çok fazla geliştiricinin sürekli en yüksek performans durumunu zorla ayarlayacak olması. Bunu engelleyip aynı zamanda API'yi korumanın iyi bir yolu var mı bilmiyorum
Bu sorunu çözmenin en iyi yolu:
Sondan bir önceki paragrafta atılan bağlantıyı kaçırmayın. Mick Gordon'ın yaptığı bir demoya ait bağlantı. @anukarimusic buna yanıt veriyor
Yan not olarak, Anukari bir Mick Gordon ses paketi yayımlayıp gelirini onunla paylaşmalı. O adam inanılmaz şeyler üretiyor. Demoları harika. Güçlü bir aracınız olduğunda sanatçılarla iş birliği yapmak hem iyi bir iş modeli hem de dünya için iyi. Mick Gordon'ı seviyorsanız tabii. Ben seviyorum
Bu uygulamaya ihtiyacım yok ama gerçekten çok havalı. Bu tür uygulamalar bilişime yeniden "eğlence" katıyor. Şu anda eğlence yok demek değil, ama etrafta daha fazla grafik ve deneysel programın dolaştığı eski günleri hatırlatıyor. Hatta demoscene'i bile