Anukari डेवलपर की Apple से तकनीकी अपील
(anukari.com)- GPU रीयल-टाइम ऑडियो सिम्युलेटर Anukari ने यह समझाया है कि Apple Silicon macOS डिवाइसों पर उसे पूर्वानुमेय प्रदर्शन की गारंटी नहीं मिल रही, और Apple Metal टीम से सीधे संपर्क की मांग की है
- Anukari एक physics-based ऑडियो synthesizer है, जिसे हर ऑडियो बफ़र ब्लॉक पर GPU में सैकड़ों ऑब्जेक्ट्स को इंटीग्रेट करना पड़ता है, और यह पूरी तरह GPU ALU प्रदर्शन पर निर्भर है
- macOS का ऑटोमैटिक पावर/परफॉर्मेंस कंट्रोल लॉजिक इस विशेष ऑडियो वर्कलोड को ठीक से पहचान नहीं पाता, जिससे GPU clock कम बनी रहती है और प्रदर्शन गिरावट तथा ऑडियो कटने-फटने जैसी समस्या आती है
- इसे हल करने के लिए “waste makes haste” रणनीति के तहत नकली लोड पैदा कर GPU को धोखा देने वाला spin kernel जोड़ा गया, लेकिन M1 के बाद के हाई-परफॉर्मेंस Mac पर इसके असफल होने की आशंका बढ़ रही है
- समाधान के तौर पर GPU command queue में रीयल-टाइम पहचान क्षमता जोड़ना या Audio Workgroup की अवधारणा को Metal तक बढ़ाना जैसी बातें प्रस्तावित की गई हैं
Anukari क्या है?
- Anukari एक रीयल-टाइम 3D physics-based ऑडियो synthesizer है, जो बड़े spring-mass models की गणना GPU पर करके ऑडियो बनाता है
- इसे ऑडियो वर्कस्टेशन (DAW) में AudioUnit/VST3 के रूप में इस्तेमाल किया जाता है, और यह ऑडियो बफ़र इकाई के हिसाब से GPU से गणना करवाता है
- गणना memory से अधिक compute (=ALU) केंद्रित है, और GPU की threadgroup memory का उपयोग करके L1 cache स्तर की तेज प्रोसेसिंग हासिल की जाती है
प्रदर्शन समस्या की असल प्रकृति
- macOS पावर एफिशिएंसी को प्राथमिकता देते हुए GPU clock को अपने-आप समायोजित करता है, और जब GPU लोड कम महसूस होता है तो clock नीचे कर देता है
- Anukari की संरचना छोटे लेकिन बहुत घने रीयल-टाइम कामों को बार-बार चलाने वाली है, इसलिए macOS GPU लोड को ठीक से पहचान नहीं पाता
- इसका नतीजा यह है कि रीयल-टाइम सीमाओं को पूरा करने के लिए जरूरी प्रदर्शन नहीं मिल पाता
प्रमाण और परीक्षण
- Apple Xcode के Metal Profiler के जरिए अलग-अलग performance states में clock का फर्क सीधे देखा गया
- Maximum performance state में यह स्मूद चलता है, लेकिन Minimum state में ऑडियो रुक-रुक कर चलने लगता है
“waste makes haste” रणनीति
- GPU clock को जबरन ऊपर रखने के लिए, Anukari spin loop लोड बनाने वाला GPU काम साथ में चलाता है
- यह रणनीति M1 पर असरदार है, लेकिन Pro/Max श्रेणी के chips में लोड दूसरे GPU cores पर बंट जाने से इसके विफल होने की संभावना है
प्रस्तावित समाधान
- Audio Workgroup को GPU तक बढ़ाया जाए, ताकि इसे रीयल-टाइम वर्कलोड के रूप में पहचाना जा सके
- Metal API में रीयल-टाइम sensitivity flag जोड़ा जाए
- (आशावादी रूप से) अगर कोई तरीका पहले से मौजूद है, तो उसके बारे में मार्गदर्शन मिले
अन्य विकल्पों की समीक्षा और सीमाएँ
- Game Mode पूरे process पर आधारित है, इसलिए plugin रूप में चलने वाले Anukari पर लागू नहीं होता
- Windows में यह समस्या नहीं है, संभवतः clock management के अधिक ढीले होने या settings control उपलब्ध होने के कारण
- hedging शैली में multi-kernel execution ऑडियो latency बढ़ाने और state synchronization समस्याओं के कारण उपयुक्त नहीं है
- GPU code optimization पहले ही अपनी सीमा तक की जा चुकी है (FP16 उपयोग, SIMD group alignment, ALU optimization आदि)
CPU नहीं, GPU क्यों?
- Anukari 768~1024 ऑब्जेक्ट्स की physics गणनाएँ प्रति सेकंड 48,000 बार चलाता है, और 16-voice polyphony तक सपोर्ट करता है
- CPU इस गणनात्मक भार और parallelism, दोनों को संभाल नहीं सकता
- GPU के ALU, L1 cache control, threadgroup_barrier आधारित parallel control की क्षमता बिल्कुल जरूरी है
Apple को इस समस्या की परवाह क्यों करनी चाहिए?
- Anukari एक छोटे startup का niche product है, लेकिन इसे समर्पित यूज़र समुदाय और प्रसिद्ध artists की रुचि मिल रही है
- Apple Silicon में इस वर्कलोड को संभालने लायक पर्याप्त प्रदर्शन है, लेकिन सिर्फ clock control policy बदलने से समस्या सुलझ सकती है
GPU Audio API क्यों संभव नहीं है?
- Anukari पारंपरिक DSP नहीं, बल्कि numerical differential equation integrator है, यानी यह game physics engine के ज्यादा करीब है, इसलिए GPU Audio की abstraction level से मेल नहीं खाता
- यह सीधे Metal API का उपयोग करता है, और domain-specific अत्यधिक optimization अनिवार्य है
अनुरोध का सार: GPU ऑडियो के लिए Metal API या macOS performance control policy में रीयल-टाइम प्रोसेसिंग पहचान क्षमता जोड़ने को लेकर Apple इंजीनियरों की प्रतिक्रिया का इंतजार है
1 टिप्पणियां
Hacker News राय
सब लोग नमस्कार, मेरी Metal टीम के सही व्यक्ति से बहुत उत्पादक बातचीत हुई। Apple का ध्यान खींचने में मदद करने के लिए धन्यवाद। मुझे बिल्कुल उम्मीद नहीं थी कि इतना समर्थन मिलेगा
Anukari नाम की उत्पत्ति को लेकर जिज्ञासा है
मुझे दो मशहूर कंपनियों में काम करने का अनुभव है, जिनके Apple App Store में बहुत प्रसिद्ध apps थे
Metal profiler में एक बहुत उपयोगी feature है: application को profile करते समय आप Metal "performance state" चुन सकते हैं। इसे profiler के बाहर configure नहीं किया जा सकता
इस समस्या के लिए API expose करने में दिक्कत यह है कि बहुत से developer हमेशा highest performance state को force कर देंगे। मुझे नहीं पता कि इसे रोका भी जाए और API भी बनी रहे, इसका कोई अच्छा तरीका है या नहीं
इस समस्या को हल करने का सबसे अच्छा तरीका:
दूसरे आख़िरी paragraph में डाला गया link मिस मत कीजिए। वह Mick Gordon द्वारा बनाई गई demo का link है। @anukarimusic ने इसका जवाब दिया है
एक अतिरिक्त बात, Anukari को Mick Gordon sound pack रिलीज़ करना चाहिए और उसके साथ revenue share करना चाहिए। वह व्यक्ति कमाल की चीज़ें बना रहा है। उसका demo शानदार है। जब आपके पास एक powerful tool हो, तो artists के साथ collaboration करना अच्छा business है और दुनिया के लिए भी अच्छा है। अगर आपको Mick Gordon पसंद है। मुझे है
मुझे इस app की ज़रूरत नहीं है, लेकिन यह वाकई बहुत शानदार है। ऐसे apps computing में फिर से "मज़ा" वापस लाते हैं। ऐसा नहीं कि अभी मज़ा नहीं है, लेकिन यह उन पुराने दिनों की याद दिलाता है जब ज़्यादा graphics और experimental programs इधर-उधर नज़र आते थे। यहाँ तक कि demoscene भी