1 điểm bởi GN⁺ 2025-05-07 | 1 bình luận | Chia sẻ qua WhatsApp
  • 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đề 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ì?

  • Anukaribộ 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

  1. Mở rộng Audio Workgroup sang GPU để nó được nhận diện là tải thời gian thực
  2. Thêm cờ độ nhạy thời gian thực vào Metal API
  3. (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óm SIMD, 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_barrier là 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đượ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

 
GN⁺ 2025-05-07
Ý 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

    • Có lẽ một số bạn đã thấy bài Show HN về Anukari
    • Trong luồng đó có nhắc đến chủ đề hiệu năng trên macOS. Về cơ bản, Anukari hoạt động khá tốt trên Apple silicon, đặc biệt là phần cứng M1 bản tiêu chuẩn. Tôi đã thực hiện toàn bộ quá trình thử nghiệm trên M1 cơ bản và nó chạy rất tuyệt. Phần cứng này thật ấn tượng
    • Tuy nhiên, để làm được điều đó, tôi đã phải triển khai một cách khắc phục bất thường nhằm buộc macOS tăng xung nhịp GPU để xử lý âm thanh đủ nhanh. Các heuristic thông thường của macOS cho trạng thái hiệu năng GPU không hiểu được kiểu tải công việc khác thường của Anukari
    • Dù sao đi nữa, cuối cùng tôi cũng có thời gian để ghi lại chi tiết toàn bộ tình huống để có thể nhờ giúp đỡ trong việc liên hệ đúng người ở Apple, có lẽ là người làm về Metal API
    • Xin hãy giúp đỡ :)
  • 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

    • Nhóm của Apple mà chúng tôi trao đổi hoàn toàn không quan tâm đến vấn đề của chúng tôi. Nhưng họ thường mời chúng tôi đến văn phòng để thảo luận về các tính năng mới nhất mà họ sẽ công bố tại WWDC. Việc tương tác với họ luôn bắt đầu và kết thúc như vậy. Chúng tôi phải tốn ticket hỗ trợ kỹ thuật chỉ để có được chút hiểu biết về lý do phần mềm đầy lỗi của họ không hoạt động
    • Bộ phận quan hệ nhà phát triển của Apple không phải là những người nghiêm túc
  • 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

    • Có lẽ tồn tại một API riêng tư cho việc này. Có thể đi theo hướng reverse engineering sẽ dễ hơn. Miễn là không cần đặc quyền đặc biệt
  • 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:

    • Tìm kỹ sư hiểu rõ vấn đề nhất thông qua các video WWDC
    • Gửi email trực tiếp theo định dạng này: mthomson@apple.com (Michael Thomson)
  • Đừ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

    • Ngay đến ngày thứ hai, nó đã hoàn toàn phá hủy mọi bản demo tôi từng làm, và tôi đã dùng nó mỗi ngày kể từ đó
  • 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