WGSL의 DP4a 내장 함수 지원
DP4a (4개 요소의 점곱 및 누적)는 양자화에 딥 러닝 추론에서 일반적으로 사용되는 GPU 명령어 집합을 나타냅니다. 이 칩은 8비트 정수 점곱을 효율적으로 실행하여 이러한 int8 양자화 모델의 계산을 가속화합니다. 메모리 및 네트워크 대역폭을 최대 75% 절약하고 추론에서 머신러닝 모델의 성능을 f32 버전과 비교하여 개선할 수 있습니다. 그 결과 현재 많은 인기 AI 프레임워크에서 널리 사용되고 있습니다.
이제 navigator.gpu.wgslLanguageFeatures
에 "packed_4x8_integer_dot_product"
WGSL 언어 확장 프로그램이 있으면 dot4U8Packed
및 dot4I8Packed
내장 함수를 사용하여 WGSL 셰이더 코드의 내적 명령어에 8비트 정수의 4컴포넌트 벡터를 패킹하는 32비트 정수 스칼라를 입력으로 사용할 수 있습니다. pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
, unpack4xU8
WGSL 내장 함수를 사용하여 패킹된 8비트 정수의 4컴포넌트 벡터로 패킹 및 언패킹 명령어를 사용할 수도 있습니다.
WGSL 셰이더 코드 상단에서 requires-directive를 사용하여 requires packed_4x8_integer_dot_product;
와의 비호환성 가능성을 알리는 것이 좋습니다. 다음 예시와 문제 tint:1497을 참고하세요.
if (!navigator.gpu.wgslLanguageFeatures.has("packed_4x8_integer_dot_product")) {
throw new Error(`DP4a built-in functions are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires packed_4x8_integer_dot_product;
fn main() {
const result: u32 = dot4U8Packed(0x01020304u, 0x02040405u); // 42
}`,
});
이 사양과 구현을 완료하기 위해 노력해 주신 상하이 Intel 웹 그래픽팀에 특별히 감사드립니다.
WGSL의 제한되지 않은 포인터 매개변수
"unrestricted_pointer_parameters"
WGSL 언어 확장 프로그램은 WGSL 함수에 전달할 수 있는 포인터에 관한 제한을 완화합니다.
storage
,uniform
,workgroup
주소 공간의 매개변수 포인터가 사용자 선언 함수를 가리킵니다.구조체 멤버와 배열 요소에 대한 포인터를 사용자 선언 함수에 전달합니다.
자세한 내용은 함수 매개변수로서의 포인터 | WGSL 둘러보기를 참고하세요.
이 기능은 navigator.gpu.wgslLanguageFeatures
를 사용하여 기능 감지할 수 있습니다. 항상 requires-directive를 사용하여 WGSL 셰이더 코드 상단에 requires unrestricted_pointer_parameters;
와의 비호환성 가능성을 알리는 것이 좋습니다. WGSL 사양 변경사항 및 문제 tint:2053을 참고하세요.
if (!navigator.gpu.wgslLanguageFeatures.has("unrestricted_pointer_parameters")) {
throw new Error(`Unrestricted pointer parameters are not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires unrestricted_pointer_parameters;
@group(0) @binding(0) var<storage, read_write> S : i32;
fn func(pointer : ptr<storage, i32, read_write>) {
*pointer = 42;
}
@compute @workgroup_size(1)
fn main() {
func(&S);
}`
});
WGSL에서 컴포지트의 참조를 해제하기 위한 구문 설탕
navigator.gpu.wgslLanguageFeatures
에 "pointer_composite_access"
WGSL 언어 확장 프로그램이 있으면 이제 데이터를 직접 사용하든 데이터 포인터를 사용하든 동일한 점 (.
) 구문을 사용하여 복잡한 데이터 유형의 구성요소에 액세스할 수 있습니다. 방법은 다음과 같습니다.
foo
가 포인터인 경우foo.bar
는(*foo).bar
를 작성하는 더 편리한 방법입니다. 일반적으로 포인터를 역참조할 수 있는 '참조'로 바꾸려면 별표 (*
)가 필요했지만 이제 포인터와 참조가 훨씬 더 유사해지고 거의 상호 교환이 가능합니다.foo
가 포인터가 아닌 경우: 점 (.
) 연산자는 멤버에 직접 액세스하는 데 익숙한 방식과 정확히 동일하게 작동합니다.
마찬가지로 pa
가 배열의 시작 주소를 저장하는 포인터인 경우 pa[i]
를 사용하면 해당 배열의 'i
번째 요소가 저장된 메모리 위치에 직접 액세스할 수 있습니다.
WGSL 셰이더 코드 상단에서 requires-directive를 사용하여 requires pointer_composite_access;
와의 비호환성 가능성을 알리는 것이 좋습니다. 다음 예시와 문제 색조:2113을 참고하세요.
if (!navigator.gpu.wgslLanguageFeatures.has("pointer_composite_access")) {
throw new Error(`Pointer composite access is not available`);
}
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({ code: `
requires pointer_composite_access;
fn main() {
var a = vec3f();
let p : ptr<function, vec3f> = &a;
let r1 = (*p).x; // always valid.
let r2 = p.x; // requires pointer composite access.
}`
});
스텐실 및 깊이 측면의 별도 읽기 전용 상태
이전에는 렌더링 패스의 읽기 전용 깊이-스텐실 첨부 파일에 깊이와 스텐실이 모두 읽기 전용이어야 했습니다. 이 제한이 해제되었습니다. 이제 스텐실 버퍼가 추가 처리를 위해 픽셀을 식별하도록 작성되는 동안 읽기 전용 방식으로 깊이 측면을 사용할 수 있습니다(예: 접촉 그림자 추적). 문제 dawn:2146을 참고하세요.
새벽 업데이트
wgpuDeviceSetUncapturedErrorCallback()
으로 설정된 포착되지 않은 오류 콜백이 이제 오류가 발생하면 즉시 호출됩니다. 이는 개발자가 디버깅을 위해 일관되게 기대하고 원하는 것입니다. change dawn:173620을 참고하세요.
webgpu.h API의 wgpuSurfaceGetPreferredFormat()
메서드가 구현되었습니다. 문제 dawn:1362를 참고하세요.
여기에서는 몇 가지 주요 사항만 다룹니다. 전체 커밋 목록을 확인하세요.
WebGPU의 새로운 기능
WebGPU의 새로운 기능 시리즈에서 다룬 모든 항목의 목록입니다.
Chrome 140
- 기기 요청이 어댑터를 사용함
- 텍스처 뷰가 사용되는 경우 텍스처를 사용하는 약어
- WGSL textureSampleLevel이 1D 텍스처 지원
- bgra8unorm 읽기 전용 저장소 텍스처 사용 지원 중단
- GPUAdapter isFallbackAdapter 속성 삭제
- 새벽 업데이트
Chrome 139
Chrome 138
- 버퍼를 바인딩 리소스로 사용하는 약식
- 생성 시 매핑된 버퍼의 크기 요구사항 변경
- 최근 GPU의 아키텍처 보고서
- GPUAdapter isFallbackAdapter 속성 지원 중단
- 새벽 업데이트
Chrome 137
- externalTexture 바인딩에 텍스처 뷰 사용
- 오프셋과 크기를 지정하지 않고 버퍼 복사
- 원자에 대한 포인터를 사용하는 WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference 속성
- GPURequestAdapterOptions compatibilityMode 속성 삭제
- 새벽 업데이트
Chrome 136
Chrome 135
- null 바인드 그룹 레이아웃으로 파이프라인 레이아웃 생성 허용
- 뷰포트가 렌더링 타겟 경계를 지나 확장되도록 허용
- Android에서 실험용 호환성 모드에 더 쉽게 액세스
- maxInterStageShaderComponents 한도 삭제
- 새벽 업데이트
Chrome 134
Chrome 133
- 추가 unorm8x4-bgra 및 1컴포넌트 꼭짓점 형식
- 정의되지 않은 값으로 알 수 없는 한도를 요청하도록 허용
- WGSL 정렬 규칙 변경사항
- discard를 사용한 WGSL 성능 향상
- 외부 텍스처에 VideoFrame displaySize 사용
- copyExternalImageToTexture를 사용하여 기본이 아닌 방향의 이미지 처리
- 개발자 환경 개선
- featureLevel로 호환성 모드 사용 설정
- 실험용 하위 그룹 기능 정리
- maxInterStageShaderComponents 한도 지원 중단
- 새벽 업데이트
Chrome 132
- 텍스처 뷰 사용량
- 32비트 부동 소수점 텍스처 혼합
- GPUDevice adapterInfo 속성
- 잘못된 형식으로 캔버스 컨텍스트를 구성하면 JavaScript 오류가 발생함
- 텍스처의 샘플러 제한 필터링
- 확장된 하위 그룹 실험
- 개발자 환경 개선
- 16비트 정규화된 텍스처 형식 실험적 지원
- 새벽 업데이트
Chrome 131
- WGSL에서 거리 클리핑
- GPUCanvasContext getConfiguration()
- 점 및 선 기본 요소에는 깊이 바이어스가 없어야 합니다
- 하위 그룹의 포괄적 검색 기본 제공 함수
- multi-draw indirect 실험적 지원
- 셰이더 모듈 컴파일 옵션 strict math
- GPUAdapter requestAdapterInfo() 삭제
- 새벽 업데이트
Chrome 130
Chrome 129
Chrome 128
- 하위 그룹 실험
- 선과 점의 깊이 편향 설정 지원 중단
- preventDefault인 경우 포착되지 않은 오류 DevTools 경고 숨기기
- WGSL 보간 샘플링이 먼저 실행되고 다음 중 하나가 실행됩니다.
- 새벽 업데이트
Chrome 127
Chrome 126
Chrome 125
Chrome 124
Chrome 123
Chrome 122
Chrome 121
- Android에서 WebGPU 지원
- Windows에서 셰이더 컴파일에 FXC 대신 DXC 사용
- 컴퓨팅 및 렌더링 패스의 타임스탬프 쿼리
- 셰이더 모듈의 기본 진입점
- GPUExternalTexture 색상 공간으로 display-p3 지원
- 메모리 힙 정보
- 새벽 업데이트
Chrome 120
Chrome 119
Chrome 118
Chrome 117
- 꼭짓점 버퍼 설정 해제
- 바인드 그룹 설정 해제
- 기기가 손실된 경우 비동기 파이프라인 생성에서 오류 무시
- SPIR-V 셰이더 모듈 생성 업데이트
- 개발자 환경 개선
- 자동으로 생성된 레이아웃으로 파이프라인 캐싱
- 새벽 업데이트
Chrome 116
- WebCodecs 통합
- GPUAdapter
requestDevice()
에서 반환된 손실된 기기 importExternalTexture()
이 호출되는 경우 동영상 재생을 원활하게 유지- 사양 준수
- 개발자 환경 개선
- 새벽 업데이트