WebGPU device와 리소스 한도: 기능 탐색과 장치 손실 대응
WebGPU는 adapter에서 기능·한도를 확인한 뒤 device를 요청하고 GPU 리소스를 생성합니다. 요청한 feature가 보장되지 않는 이유, device.lost 처리, 한도 초과 오류를 다루는 실무 흐름을 설명합니다.
발행·오류 제보: infostoa · 편집 기준
이 글의 개별 작성자와 전문 검토자 정보는 제공되지 않습니다.
WebGPU는 브라우저 페이지가 GPU adapter를 탐색하고, 사용할 기능과 한도에 맞춰 device를 요청한 다음 명령과 리소스를 제출하는 API입니다. GPU가 있는 모든 기기에서 같은 기능이나 크기의 리소스를 쓸 수 있는 것은 아닙니다. 애플리케이션은 adapter가 보고한 지원 범위와 요청한 device의 제약을 기준으로 기능을 선택하고, 장치 손실이나 할당 실패가 발생할 때 복구 경로를 준비해야 합니다.
1. adapter에서 device로 이어지는 설정 단계
페이지는 navigator.gpu.requestAdapter()로 사용할 수 있는 adapter를 요청합니다. 사용 가능한 GPU가 없거나 브라우저 정책상 제공되지 않으면 결과가 없을 수 있으므로, 이를 정상적인 미지원 경로로 처리해야 합니다. adapter를 얻은 뒤에는 features와 limits를 살펴보고 필요한 기능이 있는지 확인합니다. 필요한 선택 기능은 requestDevice()에 명시적으로 요청해야 하며, 요청하지 않은 기능을 사용할 수 있다고 가정하면 안 됩니다.
device는 GPU 작업의 주요 생성 지점입니다. device 요청 시 필요한 최소 한도를 지정할 수 있지만, 지원 한도와 실제로 안전하게 사용할 수 있는 메모리 양은 같은 개념이 아닙니다. 브라우저와 장치가 제공하는 capability를 살핀 후 필요한 수준을 선택하고, 요청 자체가 실패할 때 CPU 경로 또는 더 단순한 렌더링 경로로 전환할 수 있게 설계합니다.
2. 지원 기능과 한도의 의미
WebGPU의 feature 목록과 limit 값은 adapter 또는 device가 지원하고 허용하는 범위를 나타냅니다. 특정 포맷, shader 기능, 리소스 크기가 모든 사용자 환경에 공통으로 제공된다고 보면 안 됩니다. 기능을 요청했지만 지원되지 않으면 device 생성이 거부될 수 있고, 리소스 생성 값이 허용 한도를 넘으면 검증 오류가 발생할 수 있습니다. 코드에서는 선택 기능을 조건부로 사용하고, 경계값과 잘못된 입력을 시험해야 합니다.
한도는 실제 메모리 예산을 알려주는 완전한 게이지가 아닙니다. 브라우저는 하드웨어와 드라이버의 차이를 추상화하고, 요청과 실제 실행 사이에도 자원 압박이나 시스템 상태가 바뀔 수 있습니다. 따라서 maxBufferSize 같은 값을 읽었다고 그 크기의 모든 버퍼를 동시에 할당할 수 있다고 추론하지 않습니다. 필요한 용량부터 작게 만들고, 생성 오류와 GPU 오류를 관측하며 애플리케이션 요구에 맞게 조정합니다.
3. device lost와 자원 오류에 대응하기
GPUDevice.lost Promise는 device가 더 이상 사용할 수 없게 된 상황을 알립니다. 원인에는 장치나 드라이버의 문제, 브라우저가 수행한 종료 등이 포함될 수 있으므로, 페이지는 알림을 받아 기존 device에 의존하는 작업을 중단하고 필요에 따라 adapter와 device를 다시 획득해야 합니다. 복구 과정이 매번 성공한다는 보장은 없으며, 반복 실패 시 기능 축소나 안전한 대체 화면을 제공해야 합니다.
명령 제출 중에는 검증·실행 관련 오류도 고려해야 합니다. device의 uncaptured error 이벤트를 관찰하면 처리되지 않은 GPU 오류를 진단하는 데 도움이 됩니다. 오류가 난 뒤 같은 리소스를 계속 사용한다고 가정하지 말고, 리소스 생성을 작은 단위로 분리해 문제 범위를 찾습니다. 사용자 화면에서는 장치가 끊겼을 때 조용히 멈추는 대신 작업 재시도나 품질 축소 여부를 명확히 처리합니다.
4. 전문가 관점: capability와 복구를 함께 설계하기
W3C 사양은 adapter·device 획득, 기능과 한도 요청, 리소스 검증, device loss 알림을 정의합니다. MDN은 브라우저가 제공하는 GPU 기능의 탐색 방식과 API의 보안·호환 조건을 개발자 관점에서 요약합니다. 두 문서는 WebGPU를 지원하는 모든 환경이 동일한 성능이나 메모리 예산을 제공한다고 말하지 않습니다. 구현 전에 실제 배포 브라우저에서 어떤 adapter가 반환되는지 시험해야 합니다.
초기화는 실패 가능성을 고려해 단계별로 로그와 대체 경로를 준비합니다. adapter 부재, 요구 feature 불일치, device 요청 실패, 리소스 한도 오류, device loss를 각각 구분하면 불필요한 전체 재시작을 줄일 수 있습니다. GPU 경로는 선택적 가속으로 설계하고, CPU 기반 결과나 저사양 모드와의 동작도 확인합니다. capability 탐색은 한 번의 성공 보증이 아니라 현재 환경에 맞는 경로를 고르는 근거입니다.