-
GPU 실시간 오디오 시뮬레이터 Anukari가 Apple Silicon macOS 기기에서 예측 가능한 성능을 보장받지 못하는 문제를 설명하며, Apple Metal 팀에 직접 연결되길 요청함
-
Anukari는 물리 기반 오디오 합성기로, 오디오 버퍼 블록마다 GPU에서 수백 개의 객체를 통합해야 하며, GPU ALU 성능에 전적으로 의존함
- macOS의 자동 전력/성능 조절 로직이 이 특수한 오디오 워크로드를 잘 인식하지 못해, GPU 클럭이 낮게 유지되고 성능 저하 및 끊김 현상이 발생함
- 이를 해결하기 위해 “waste makes haste” 전략으로 가짜 부하를 유발해 GPU를 속이는 spin kernel을 도입했지만, M1 이후의 고성능 Mac에서는 실패 가능성이 높아짐
- 해결책으로는 GPU 명령큐의 실시간 인식 기능 도입 또는 Audio Workgroup 개념을 Metal까지 확장하는 방안 등을 제안함
Anukari란 무엇인가?
-
Anukari는 실시간 3D 물리 기반 오디오 합성기로, 대규모 스프링-질량 모델을 GPU에서 계산하여 오디오를 생성함
- 오디오 워크스테이션(DAW)에서 AudioUnit/VST3 형태로 사용되며, 오디오 버퍼 단위로 GPU에 계산을 요청함
- 계산은 메모리보다는 연산량(=ALU) 중심이며, GPU의 threadgroup memory를 활용해 L1 캐시 수준의 고속 처리를 구현함
성능 문제의 본질
- macOS는 전력 효율성 중심으로 GPU 클럭을 자동 조절하며, GPU 부하가 낮게 감지되면 클럭을 낮춤
- Anukari는 짧고 고밀도의 실시간 작업을 반복하는 구조로 인해, macOS가 GPU 부하를 제대로 인식하지 못함
- 이는 실시간 제약 조건을 만족시키기 위해 필요한 성능을 확보하지 못하게 만듦
증거와 테스트
- Apple Xcode의 Metal Profiler를 통해 성능 상태별 클럭 차이를 직접 확인
-
Maximum performance 상태에서는 매끄럽게 작동하지만, Minimum 상태에서는 음성 끊김이 발생함
“waste makes haste” 전략
- GPU 클럭을 강제로 높이기 위해, Anukari는 spin loop 부하 생성용 GPU 작업을 동시에 수행함
- 이 전략은 M1에서는 효과적이지만, Pro/Max급 칩에서는 오히려 부하가 다른 GPU 코어로 분산되며 실패할 가능성이 있음
제안하는 해결책
-
Audio Workgroup을 GPU까지 확장하여 실시간 워크로드로 인식되게 하기
- Metal API에 실시간 민감도 플래그 추가
- (희망적) 이미 존재하는 방법이 있다면 안내받기를 희망
기타 대안 검토 및 한계
-
Game Mode는 전체 프로세스 기반이라 플러그인 형태의 Anukari에는 적용 불가
-
Windows에서는 문제 없음, 클럭 관리가 느슨하거나 설정 제어 가능성 때문
-
헤징 방식의 멀티 커널 실행은 오디오 지연 증가 및 상태 동기화 문제로 부적절
-
GPU 코드 최적화는 이미 극한까지 수행됨 (FP16 사용, SIMD 그룹 정렬, ALU 최적화 등)
왜 CPU가 아닌 GPU인가?
- Anukari는 768~1024개 객체의 물리 연산을 초당 48,000번 수행하며, 16중 복성(폴리포니)까지 지원
- CPU는 계산량과 병렬성 모두에서 감당 불가능함
-
GPU의 ALU, L1 캐시 제어, threadgroup_barrier 병렬 제어 능력이 절대적으로 필요함
Apple이 이 문제를 왜 신경 써야 하는가?
- Anukari는 소규모 스타트업의 틈새형 제품이지만, 열정적인 유저층과 유명 아티스트의 관심을 받고 있음
- Apple Silicon은 이 워크로드를 충분히 처리할 수 있는 성능을 갖추고 있으나, 클럭 조절 정책만 바뀌면 해결 가능
GPU Audio API는 왜 불가능한가?
- Anukari는 전통적 DSP가 아니라 수치 미분 방정식 통합기, 즉 게임 물리 엔진에 가깝기 때문에 GPU Audio의 추상화 수준과 맞지 않음
- Metal API를 직접 사용하며, 도메인 특화된 극단적 최적화가 필수임
요청 요약: GPU 오디오를 위해 Metal API 또는 macOS 성능 조절 정책에 실시간 처리 인식 기능을 추가해줄 Apple 엔지니어의 응답을 기다림