- Anukari, trình mô phỏng âm thanh thời gian thực chạy trên GPU, giải thích vấn đề không thể được đảm bảo hiệu năng có thể dự đoán được trên các thiết bị macOS dùng Apple Silicon và đề nghị được kết nối trực tiếp với đội ngũ Apple Metal
- Anukari là bộ tổng hợp âm thanh dựa trên vật lý, cần tích hợp hàng trăm đối tượng trên GPU cho mỗi khối bộ đệm âm thanh và phụ thuộc hoàn toàn vào hiệu năng ALU của GPU
- Do logic tự động điều chỉnh điện năng/hiệu năng của macOS không nhận diện tốt kiểu tải âm thanh đặc thù này, xung nhịp GPU bị giữ ở mức thấp, dẫn tới suy giảm hiệu năng và hiện tượng giật ngắt
- Để giải quyết, họ đã đưa vào spin kernel đánh lừa GPU bằng cách tạo tải giả với chiến lược “waste makes haste”, nhưng khả năng thất bại ngày càng cao trên các máy Mac hiệu năng cao từ M1 trở về sau
- Các hướng giải pháp được đề xuất gồm đưa khả năng nhận diện thời gian thực vào hàng đợi lệnh GPU hoặc mở rộng khái niệm Audio Workgroup sang Metal
Anukari là gì?
- Anukari là bộ tổng hợp âm thanh thời gian thực 3D dựa trên vật lý, tạo âm thanh bằng cách tính toán các mô hình lò xo-khối lượng quy mô lớn trên GPU
- Nó được dùng trong audio workstation (DAW) dưới dạng AudioUnit/VST3 và gửi yêu cầu tính toán tới GPU theo đơn vị bộ đệm âm thanh
- Tính toán thiên về khối lượng phép toán (=ALU) hơn là bộ nhớ, đồng thời tận dụng threadgroup memory của GPU để đạt xử lý tốc độ cao ở mức tương đương cache L1
Bản chất của vấn đề hiệu năng
- macOS tự động điều chỉnh xung nhịp GPU theo hướng ưu tiên hiệu quả điện năng, và sẽ hạ xung nếu nhận diện tải GPU là thấp
- Anukari có cấu trúc lặp lại các tác vụ thời gian thực ngắn nhưng mật độ cao, nên macOS không nhận diện chính xác tải GPU
- Điều này khiến hệ thống không thể đảm bảo hiệu năng cần thiết để đáp ứng các ràng buộc thời gian thực
Bằng chứng và thử nghiệm
- Dùng Metal Profiler của Apple Xcode để xác nhận trực tiếp chênh lệch xung nhịp theo từng trạng thái hiệu năng
- Ở trạng thái Maximum performance thì chạy mượt, nhưng ở trạng thái Minimum thì xuất hiện hiện tượng ngắt tiếng
Chiến lược “waste makes haste”
- Để buộc xung nhịp GPU tăng lên, Anukari đồng thời chạy tác vụ GPU tạo tải bằng spin loop
- Chiến lược này hiệu quả trên M1, nhưng trên các chip dòng Pro/Max thì tải có thể bị phân tán sang các lõi GPU khác và dẫn tới thất bại
Các giải pháp được đề xuất
- Mở rộng Audio Workgroup sang GPU để nó được nhận diện là tải thời gian thực
- Thêm cờ độ nhạy thời gian thực vào Metal API
- (Hy vọng) Nếu đã có cách làm sẵn, mong được hướng dẫn
Xem xét các phương án khác và giới hạn
- Game Mode hoạt động theo toàn bộ tiến trình nên không thể áp dụng cho Anukari ở dạng plugin
- Trên Windows không có vấn đề này, có thể do quản lý xung nhịp lỏng hơn hoặc cho phép kiểm soát thiết lập
- Chạy nhiều kernel theo kiểu hedging không phù hợp vì làm tăng độ trễ âm thanh và phát sinh vấn đề đồng bộ trạng thái
- Mã GPU đã được tối ưu tới mức cực hạn (
FP16, căn chỉnh nhómSIMD, tối ưu ALU, v.v.)
Vì sao là GPU chứ không phải CPU?
- Anukari thực hiện phép tính vật lý cho 768~1024 đối tượng 48.000 lần mỗi giây và hỗ trợ tới 16 lớp đa âm (polyphony)
- CPU không thể gánh nổi cả về lượng tính toán lẫn mức độ song song
- Khả năng ALU của GPU, kiểm soát cache L1 và điều khiển song song bằng
threadgroup_barrierlà tuyệt đối cần thiết
Vì sao Apple nên quan tâm tới vấn đề này?
- Anukari là một sản phẩm ngách của startup nhỏ, nhưng có cộng đồng người dùng rất nhiệt huyết và được các nghệ sĩ nổi tiếng chú ý
- Apple Silicon có đủ hiệu năng để xử lý kiểu tải này, nhưng chỉ cần thay đổi chính sách điều chỉnh xung nhịp là có thể giải quyết
Vì sao GPU Audio API không khả thi?
- Anukari không phải DSP truyền thống mà là bộ tích phân phương trình vi phân số, tức gần với game physics engine hơn, nên không phù hợp với mức độ trừu tượng của GPU Audio
- Nó dùng trực tiếp Metal API và đòi hỏi tối ưu hóa cực đoan theo miền chuyên biệt
Tóm tắt yêu cầu: Tác giả đang chờ phản hồi từ kỹ sư Apple về việc bổ sung khả năng nhận diện xử lý thời gian thực vào Metal API hoặc chính sách điều chỉnh hiệu năng của macOS cho GPU audio.
1 bình luận
Ý kiến trên Hacker News
Xin chào mọi người, tôi đã có một cuộc trao đổi rất hiệu quả với đúng người bên nhóm Metal. Cảm ơn mọi người đã giúp thu hút sự chú ý của Apple. Tôi hoàn toàn không ngờ lại nhận được nhiều sự ủng hộ đến vậy
Tôi tò mò về nguồn gốc cái tên Anukari
Tôi từng làm ở hai công ty nổi tiếng có các ứng dụng rất nổi tiếng trên Apple App Store
Metal profiler có một tính năng rất hữu ích: bạn có thể chọn “trạng thái hiệu năng” của Metal trong khi profiling ứng dụng. Điều này không thể được cấu hình bên ngoài profiler
Vấn đề của việc công khai một API cho chuyện này là quá nhiều nhà phát triển sẽ luôn ép về trạng thái hiệu năng cao nhất. Tôi không biết có cách nào tốt để ngăn điều đó mà vẫn giữ được API hay không
Cách tốt nhất để giải quyết vấn đề này:
Đừng bỏ lỡ liên kết được ném vào đoạn áp chót. Đó là liên kết đến bản demo do Mick Gordon tạo ra. @anukarimusic đã trả lời về điều này
Nói thêm, Anukari nên phát hành một gói âm thanh của Mick Gordon và chia sẻ doanh thu với anh ấy. Người đó đang tạo ra những thứ đáng kinh ngạc. Bản demo của anh ấy rất xuất sắc. Khi bạn có một công cụ mạnh mẽ, hợp tác với nghệ sĩ là kinh doanh tốt và cũng tốt cho thế giới. Nếu bạn thích Mick Gordon. Tôi thì có
Tôi không cần ứng dụng này, nhưng nó thật sự rất ngầu. Những ứng dụng như thế này mang “niềm vui” trở lại với máy tính. Không phải bây giờ không vui, nhưng nó gợi nhớ về thời trước khi có nhiều chương trình đồ họa và thử nghiệm hơn trôi nổi khắp nơi. Thậm chí cả demoscene nữa