Obsługa wbudowanych funkcji DP4a w języku WGSL
DP4a (iloczyn skalarny 4 elementów i akumuluj) odnosi się do zestawu instrukcji dotyczących GPU często używanych do wnioskowania w ramach deep learningu na potrzeby kwantyzacji. Efektywnie wykonuje iloczyny punktowe 8-bitowych liczb całkowitych, które przyspieszają obliczanie takich modeli poddanych kwantyzacji int8. Może zaoszczędzić (nawet 75%) pamięci i przepustowości sieci oraz poprawić wydajność wszelkich modeli systemów uczących się w porównaniu z ich wersją F32. W związku z tym jest obecnie intensywnie wykorzystywana w wielu popularnych systemach AI.
Gdy w języku navigator.gpu.wgslLanguageFeatures
obecne jest rozszerzenie języka "packed_4x8_integer_dot_product"
WGSL, możesz teraz używać 32-bitowych skalarów liczb całkowitych układających 4-komponenowe wektory liczb całkowitych jako danych wejściowych do instrukcji dotyczących produktów skalarnych w kodzie cieniowania WGSL za pomocą wbudowanych funkcji dot4U8Packed
i dot4I8Packed
. Możesz też użyć instrukcji pakowania i rozpakowywania za pomocą zapakowanych 4-komponentowych wektorów liczb całkowitych z wbudowanymi funkcjami pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
i unpack4xU8
WGSL.
Zalecamy użycie dyrektywy wymagającej, aby zasygnalizować możliwość braku możliwości przenoszenia za pomocą requires packed_4x8_integer_dot_product;
u góry kodu cieniowania WGSL. Patrz poniższy przykład i odcień problemu: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
}`,
});
Specjalne podziękowania dla zespołu Intela Web Graphics w Szanghaju za przygotowanie specyfikacji i implementacji.
Nieograniczone parametry wskaźnika w WGSL
Rozszerzenie języka "unrestricted_pointer_parameters"
WGSL złagodzi ograniczenia dotyczące przekazywania wskaźników do funkcji WGSL:
Wskaźniki parametrów przestrzeni adresowych
storage
,uniform
iworkgroup
do funkcji zadeklarowanych przez użytkownika.Przekazywanie wskaźników do elementów struktury i elementów tablicy do funkcji zadeklarowanych przez użytkownika.
Aby dowiedzieć się więcej, zapoznaj się z artykułem Pointers as Function Parameters | Tour of WGSL (Wskaźniki jako parametry funkcji | Prezentacja WGSL).
Tę funkcję można wykryć za pomocą navigator.gpu.wgslLanguageFeatures
. Zalecamy, aby zawsze używać dyrektywy wymagającej, aby zasygnalizować możliwość braku możliwości przenoszenia za pomocą requires unrestricted_pointer_parameters;
u góry kodu cienia WGSL. Poniżej znajdziesz przykład ze zmianami specyfikacji WGSL i odcieniem problemu: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);
}`
});
Cukier składniowy do usuwania linków do kompozytów w WGSL
Gdy w navigator.gpu.wgslLanguageFeatures
występuje rozszerzenie języka "pointer_composite_access"
WGSL, Twój kod cieniowania WGSL obsługuje teraz dostęp do komponentów złożonych typów danych, które używają tej samej składni kropki (.
) niezależnie od tego, czy pracujesz bezpośrednio z danymi, czy za pomocą wskaźnika do nich. Działa to w następujący sposób:
Jeśli
foo
jest wskaźnikiem:foo.bar
to wygodniejszy sposób zapisywania(*foo).bar
. Gwiazdka (*
) zwykle jest potrzebna do przekształcenia wskaźnika w „odwołanie”, do którego można się odwoływać. Teraz zarówno wskaźniki, jak i odwołania są znacznie bardziej podobne i prawie wymienne.Jeśli
foo
nie jest wskaźnikiem: operator kropki (.
) działa dokładnie w taki sam sposób jak przy bezpośrednim dostępie do użytkowników.
I podobnie, jeśli pa
jest wskaźnikiem, który przechowuje adres początkowy tablicy, użycie pa[i]
daje bezpośredni dostęp do lokalizacji pamięci, w której znajduje się element 'i
tej tablicy.
Zalecamy użycie dyrektywy wymagającej, aby zasygnalizować możliwość braku możliwości przenoszenia za pomocą requires pointer_composite_access;
u góry kodu cieniowania WGSL. Zobacz ten przykład i odcień problemu: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.
}`
});
Oddzielny stan tylko do odczytu dla aspektów szablonu i głębi
Wcześniej załączone szablony głębokości tylko do odczytu w przebiegach renderowania wymagały, aby oba aspekty (głębokość i szablon) były tylko do odczytu. To ograniczenie zostało zniesione. Teraz możesz korzystać z aspektu głębi w trybie tylko do odczytu, na przykład do śledzenia cieni, a bufor szablonów został zapisany w celu identyfikowania pikseli do dalszego przetwarzania. Zobacz świt problemu:2146.
Powiadomienia o świcie
Wywołanie zwrotne dotyczące nieprzechwyconego błędu z ustawieniem wgpuDeviceSetUncapturedErrorCallback()
jest teraz wywoływane natychmiast po wystąpieniu błędu. Tego oczekują deweloperzy i chcą takie rozwiązanie w przypadku debugowania. Zobacz świt:173620.
Wdrożono metodę wgpuSurfaceGetPreferredFormat()
z interfejsu API webgpu.h. Zobacz świt problemu:1362.
To tylko niektóre z najważniejszych kwestii. Zobacz pełną listę zatwierdzeń.
Co nowego w WebGPU
Lista wszystkich zagadnień omówionych w serii Co nowego w WebGPU.
Chrome 125
Chrome 124
- Tekstury pamięci masowej tylko do odczytu i do odczytu i zapisu
- Skrypty service worker i współdzielone zasoby robocze – pomoc
- Nowe atrybuty informacji o adapterze
- Poprawki błędów
- Informacje o Dawn
Chrome 123
- Obsługa wbudowanych funkcji DP4a w języku WGSL
- Nieograniczone parametry wskaźnika w WGSL
- Cukier składniowy do usuwania linków do kompozytów w WGSL
- Oddzielny stan tylko do odczytu dla aspektów szablonu i głębi
- Informacje o Dawn
Chrome 122
- Rozszerzanie zasięgu dzięki trybowi zgodności (funkcja w fazie opracowywania)
- Zwiększ limit maxVertexAttributes
- Informacje o Dawn
Chrome 121
- Obsługa WebGPU na urządzeniach z Androidem
- Do kompilacji programu do cieniowania w systemie Windows użyj DXC zamiast FXC
- Zapytania o sygnaturę czasową podczas obliczeń obliczeniowych i renderowania
- Domyślne punkty wejścia do modułów cieniowania
- Obsługuj parametr display-p3 jako przestrzeń kolorów GPUExternalTexture
- Informacje o sterach pamięci
- Informacje o Dawn
Chrome 120
- Obsługa 16-bitowych wartości zmiennoprzecinkowych w języku WGSL
- Przekrocz granice
- Zmiany stanu szablonu głębi
- Aktualizacje informacji o adapterze
- Kwantyzowanie zapytań dotyczących sygnatury czasowej
- Funkcje Wiosenne porządki
Chrome 119
- Filtrowanie 32-bitowych tekstur pływających
- formacie wierzchołków unorm10-10-10-2
- Format tekstury rgb10a2uint
- Informacje o Dawn
Chrome 118
- Obsługa formatów HTMLImageElement i ImageData w interfejsie
copyExternalImageToTexture()
- Eksperymentalna obsługa tekstur pamięci masowej tylko do odczytu i zapisu oraz tylko do odczytu
- Informacje o Dawn
Chrome 117
- Nieustawiony bufor wierzchołków
- Cofnij ustawienie grupy powiązań
- Wyciszanie błędów podczas tworzenia potoku asynchronicznego w przypadku utraty urządzenia
- Aktualizacje dotyczące tworzenia modułu cieniowania SPIR-V
- Poprawianie wrażeń deweloperów
- Potoki w pamięci podręcznej z układem generowanym automatycznie
- Informacje o Dawn
Chrome 116
- Integracja z WebCodecs
- Zgubione urządzenie zwrócone przez GPUAdapter
requestDevice()
- Zapewniaj płynne odtwarzanie filmu, jeśli zostanie wywołany element
importExternalTexture()
- Zgodność ze specyfikacją
- Poprawianie wrażeń deweloperów
- Informacje o Dawn
Chrome 115
- Obsługiwane rozszerzenia języka WGSL
- Eksperymentalna obsługa Direct3D 11
- Domyślnie korzystaj z dyskretnego GPU na zasilaniu sieciowym
- Poprawianie wrażeń deweloperów
- Informacje o Dawn
Chrome 114
- Optymalizacja JavaScriptu
- Funkcja getCurrentTexture() w nieskonfigurowanym obszarze roboczym zgłasza nieprawidłową wartość błędu
- Aktualizacje WGSL
- Informacje o Dawn