facts
비엔비디아(Nvidia) GPU가 아닌 환경에서 CUDA 애플리케이션을 수정 없이 실행하게 돕는 ZLUDA가 버전 6를 공개했다. 이번 릴리스는 최신 프리뷰 빌드인 6-preview.79와 동일한 사양이다. ZLUDA 6의 핵심은 기존에 지원하지 않았던 새로운 워크로드의 추가와 윈도우(Windows) 운영체제에서의 사용성 개선에 있다.
주요 업데이트 사항은 다음과 같다. 먼저 32비트 PhysX(PhysX pre-alpha) 지원이 추가되어, PhysX에 의존하는 구형 게임을 AMD GPU에서 실행할 수 있게 됐다. 또한 기본적인 텍스처(Texture) 지원이 추가됨에 따라 Blender가 ZLUDA 환경에서 작동한다.
인프라 측면에서는 윈도우 로더인 `zluda.exe`가 개선되어 성능 라이브러리 로딩을 자동화했다. 머신러닝(ML) 분야에서는 PyTorch 사용자들의 트레이스(Trace) 데이터를 기반으로 새로운 명령어 추가, 컴파일러 버그 수정, 성능 라이브러리 개선이 이루어졌다. 구체적으로 명령어 관련 PR(#599, #605, #607, #609, #642, #644, #629), 컴파일러 수정(#583, #588, #585, #596, #610, #601, #603), 성능 라이브러리 개선(#587, #615, #619, #620, #621, #624)이 반영됐다.
how-it-works
ZLUDA 6에서 가장 눈에 띄는 기술적 변화는 윈도우 환경의 라이브러리 처리 파이프라인이다. 리눅스(Linux) 환경의 ROCm(Radeon Open Compute)은 유저스페이스 드라이버, 성능 라이브러리, 모니터링 라이브러리가 하나의 호환 버전으로 묶여 제공된다. 반면 윈도우에서는 GPU 드라이버(Adrenalin) 설치 시 런타임 드라이버만 제공되며, 나머지 ROCm 구성 요소는 사용자가 직접 구버전 SDK나 불안정한 나이틀리(Nightly) 빌드를 찾아 설치해야 하는 구조였다.
기존 ZLUDA는 사용자가 적절한 플래그(Flag)를 직접 전달해야 성능 라이브러리를 로드할 수 있었으나, 업데이트된 `zluda.exe`는 이 과정을 자동화한다. 또한 필요한 라이브러리가 누락된 경우 이를 명시적으로 알리고 설치 방법을 안내하는 기능을 갖춰 라이브러리 의존성 해결 과정을 단순화했다.
PhysX 지원의 경우, 32비트 PhysX를 지원함으로써 AMD GPU에서도 파편이나 화염 같은 물리 효과를 구현할 수 있게 됐다. 이는 CUDA 전용으로 작성된 물리 연산 코드를 ZLUDA가 중간에서 해석해 AMD GPU가 이해할 수 있는 명령어로 변환하기 때문에 가능하다. 텍스처 지원 역시 기본적인 수준이지만, 이를 통해 Blender와 PhysX가 요구하는 텍스처 처리 유즈케이스를 충족시켜 애플리케이션 실행 가능 범위를 넓혔다.
implementation-impact
개발자와 실무자가 ZLUDA 6 도입 시 고려해야 할 구체적인 제약과 변화는 다음과 같다.
첫째, 윈도우 환경에서의 배포 및 설정 난이도가 낮아졌다. `zluda.exe`가 성능 라이브러리 로딩을 자동 처리하므로, 이전처럼 복잡한 실행 플래그를 관리할 필요가 없다. 다만, ROCm 라이브러리 자체의 설치 문제는 여전히 사용자의 몫으로 남아 있다.
둘째, 특정 워크로드의 불안정성을 확인해야 한다. PhysX의 경우 유체 시뮬레이션(Fluid simulations)에서 글리치(Glitch)가 발생할 수 있으며, 스팀(Steam) 게임에 ZLUDA를 로드하는 방식이 아직 최적화되지 않았다. 따라서 일반 사용자가 즉시 적용하기보다는 소스 코드를 직접 수정하고 빌드할 수 있는 개발자 수준에서 테스트하는 것이 권장된다.
셋째, PyTorch 기반의 ML 워크로드를 AMD GPU에서 구동하려는 경우, 최신 컴파일러 수정 사항과 명령어 세트가 반영된 버전 6를 통해 실행 안정성이 향상되었음을 기대할 수 있다.
마지막으로, ZLUDA 프로젝트의 운영 주체가 상업적 펀딩에서 개인 프로젝트로 전환됐다. 이에 따라 향후 업데이트 주기가 분기별보다 더 길어질 수 있으며, 기능 추가의 우선순위가 상업적 가치보다는 개발자의 흥미 위주로 결정될 가능성이 높다는 점을 운영 계획에 반영해야 한다.




