Obsługa wbudowanych funkcji DP4a w WGSL
DP4a (Dot Product of 4 Elements and Accumulate) to zestaw instrukcji GPU powszechnie używanych w procesie wnioskowania w uczeniu głębokim na potrzeby kwantyzacji. Wydajnie wykonuje 8-bitowe iloczyny skalarne, aby przyspieszyć obliczenia takich modeli skwantyzowanych do 8 bitów. Może zaoszczędzić (do 75%) pamięci i przepustowości sieci oraz zwiększyć skuteczność dowolnych modeli uczenia maszynowego w zakresie wnioskowania w porównaniu z ich wersją f32. Dlatego jest obecnie szeroko stosowany w wielu popularnych platformach AI.
Gdy w navigator.gpu.wgslLanguageFeatures
występuje "packed_4x8_integer_dot_product"
rozszerzenie języka WGSL, możesz teraz używać 32-bitowych skalarów całkowitych zawierających 4-elementowe wektory 8-bitowych liczb całkowitych jako danych wejściowych do instrukcji iloczynu skalarnego w kodzie shadera WGSL za pomocą wbudowanych funkcji dot4U8Packed
i dot4I8Packed
. Możesz też używać instrukcji pakowania i rozpakowywania z spakowanymi 4-elementowymi wektorami 8-bitowych liczb całkowitych z funkcjami wbudowanymi WGSL pack4xI8
, pack4xU8
, pack4xI8Clamp
, pack4xU8Clamp
, unpack4xI8
i unpack4xU8
.
Zalecamy użycie dyrektywy requires, aby zasygnalizować potencjalną nieprzenośność za pomocą requires packed_4x8_integer_dot_product;
na początku kodu shadera WGSL. Zapoznaj się z tym przykładem i problemem z odcieniem: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 Web Graphics firmy Intel w Szanghaju za doprowadzenie do ukończenia tej specyfikacji i jej wdrożenia.
Parametry wskaźnika bez ograniczeń w WGSL
"unrestricted_pointer_parameters"
WGSL rozszerzenie języka łagodzi ograniczenia dotyczące wskaźników, które można przekazywać 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 zdefiniowanych przez użytkownika.
Więcej informacji znajdziesz w artykule Pointers As Function Parameters | Tour of WGSL (Wskaźniki jako parametry funkcji | Przewodnik po WGSL).
Tę funkcję można wykryć za pomocą navigator.gpu.wgslLanguageFeatures
. Zalecamy, aby zawsze używać dyrektywy requires, aby zasygnalizować potencjalną nieprzenośność za pomocą requires unrestricted_pointer_parameters;
na początku kodu shadera WGSL. Zobacz ten przykład, zmiany w specyfikacji WGSL i problem 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);
}`
});
Uproszczona składnia dereferencji typów złożonych w WGSL
Gdy w navigator.gpu.wgslLanguageFeatures
występuje "pointer_composite_access"
rozszerzenie językaWGSL, kod shadera WGSL obsługuje teraz dostęp do komponentów złożonych typów danych przy użyciu tej samej składni z kropką (.
), niezależnie od tego, czy pracujesz bezpośrednio z danymi, czy ze wskaźnikiem do nich. Jak to działa:
Jeśli
foo
jest wskaźnikiem:foo.bar
to wygodniejszy sposób zapisu(*foo).bar
. Gwiazdka (*
) jest zwykle potrzebna, aby przekształcić wskaźnik w „odwołanie”, które można wyłuskać, ale teraz wskaźniki i odwołania są do siebie znacznie bardziej podobne i niemal wymienne.Jeśli
foo
nie jest wskaźnikiem: operator kropki (.
) działa tak, jak zwykle, czyli umożliwia bezpośredni dostęp do elementów.
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 jest przechowywany element 'i
tej tablicy.
Zalecamy użycie dyrektywy requires, aby zasygnalizować potencjalną nieprzenośność za pomocą requires pointer_composite_access;
na początku kodu shadera WGSL. Zobacz ten przykład i issue tint: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łączniki głębi i wzorca tylko do odczytu w przepustkach renderowania wymagały, aby oba aspekty (głębia i wzorzec) były tylko do odczytu. To ograniczenie zostało zniesione. Teraz możesz używać aspektu głębi w trybie tylko do odczytu, np. do śledzenia cieni kontaktowych, podczas gdy bufor szablonu jest zapisywany w celu identyfikacji pikseli do dalszego przetwarzania. Zobacz problem dawn:2146.
Aktualizacje o świcie
Nieobsłużone wywołanie zwrotne błędu ustawione za pomocą wgpuDeviceSetUncapturedErrorCallback()
jest teraz wywoływane natychmiast po wystąpieniu błędu. Tego właśnie deweloperzy oczekują i potrzebują do debugowania. Zobacz change dawn:173620.
Zaimplementowano metodę wgpuSurfaceGetPreferredFormat()
z interfejsu webgpu.h API. Zobacz problem dawn:1362.
Obejmuje to tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zatwierdzeń.
Nowości w WebGPU
Lista wszystkich tematów omówionych w serii Co nowego w WebGPU.
Chrome 140
- Żądania dotyczące urządzeń wykorzystują adapter
- Skrót do używania tekstury w miejscu, w którym używany jest widok tekstury
- Funkcja WGSL textureSampleLevel obsługuje tekstury 1D
- Wycofanie użycia tekstury pamięci tylko do odczytu bgra8unorm
- Usunięcie atrybutu GPUAdapter isFallbackAdapter
- Aktualizacje dotyczące Dawn
Chrome 139
- Obsługa tekstur 3D w przypadku formatów skompresowanych BC i ASTC
- Nowa funkcja „core-features-and-limits”
- Testowanie wersji próbnej trybu zgodności WebGPU
- Aktualizacje dotyczące Dawn
Chrome 138
- Skrót do używania bufora jako zasobu wiążącego
- Zmiany wymagań dotyczących rozmiaru buforów mapowanych podczas tworzenia
- Raport o architekturze najnowszych układów GPU
- Wycofanie atrybutu GPUAdapter isFallbackAdapter
- Aktualizacje dotyczące Dawn
Chrome 137
- Używanie widoku tekstury do wiązania externalTexture
- Kopiowanie buforów bez określania przesunięć i rozmiaru
- WGSL workgroupUniformLoad using pointer to atomic
- Atrybut powerPreference interfejsu GPUAdapterInfo
- Usunięcie atrybutu compatibilityMode z interfejsu GPURequestAdapterOptions
- Aktualizacje dotyczące Dawn
Chrome 136
- Atrybut GPUAdapterInfo isFallbackAdapter
- Krótszy czas kompilacji shaderów w D3D12
- Zapisywanie i kopiowanie obrazów z płótna
- Ograniczenia trybu zgodności pomiaru wzrostu
- Aktualizacje dotyczące Dawn
Chrome 135
- Zezwalaj na tworzenie układu potoku z układem grupy wiązań o wartości null
- Zezwalaj na wykraczanie obszarów widoku poza granice docelowych obszarów renderowania
- Łatwiejszy dostęp do eksperymentalnego trybu zgodności na Androidzie
- Usuwanie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 134
- Ulepszanie zadań systemów uczących się za pomocą podgrup
- Usunięcie obsługi typów tekstur z możliwością filtrowania zmiennoprzecinkowego jako mieszalnych
- Aktualizacje dotyczące Dawn
Chrome 133
- Dodatkowe formaty wierzchołków unorm8x4-bgra i 1-component
- Zezwalaj na żądanie nieznanych limitów z niezdefiniowaną wartością
- Zmiany w regułach wyrównywania WGSL
- Wzrost wydajności WGSL dzięki odrzucaniu
- Używanie parametru VideoFrame displaySize w przypadku tekstur zewnętrznych
- Obsługa obrazów o orientacji innej niż domyślna za pomocą funkcji copyExternalImageToTexture
- Poprawianie komfortu pracy programistów
- Włączanie trybu zgodności za pomocą parametru featureLevel
- Usuwanie funkcji eksperymentalnych podgrup
- Wycofanie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 132
- Korzystanie z widoku tekstury
- Mieszanie tekstur zmiennoprzecinkowych 32-bitowych
- Atrybut adapterInfo interfejsu GPUDevice
- Konfigurowanie kontekstu elementu canvas w nieprawidłowym formacie powoduje błąd JavaScriptu
- Ograniczenia dotyczące próbkowania tekstur
- Eksperymentowanie z rozszerzonymi podgrupami
- Poprawianie komfortu pracy programistów
- Eksperymentalna obsługa 16-bitowych znormalizowanych formatów tekstur
- Aktualizacje dotyczące Dawn
Chrome 131
- Obcinanie odległości w WGSL
- GPUCanvasContext getConfiguration()
- Elementy pierwotne punktów i linii nie mogą mieć odchylenia głębi
- Wbudowane funkcje skanowania obejmującego podgrupy
- Eksperymentalna obsługa rysowania pośredniego
- Opcja kompilacji modułu cieniowania strict math
- Usunięcie metody GPUAdapter requestAdapterInfo()
- Aktualizacje dotyczące Dawn
Chrome 130
- Miksowanie z 2 źródeł
- Krótszy czas kompilacji cieniowania w Metal
- Wycofanie metody GPUAdapter requestAdapterInfo()
- Aktualizacje dotyczące Dawn
Chrome 129
- Obsługa HDR w trybie mapowania tonów na płótnie
- Rozszerzona obsługa podgrup
- Aktualizacje dotyczące Dawn
Chrome 128
- Eksperymentowanie z podgrupami
- Wycofanie ustawiania odchylenia głębi dla linii i punktów
- Ukrywanie ostrzeżenia Narzędzi deweloperskich o nieprzechwyconym błędzie, jeśli użyto preventDefault
- WGSL interpolate sampling first and either
- Aktualizacje dotyczące Dawn
Chrome 127
- Eksperymentalna obsługa OpenGL ES na Androidzie
- Atrybut informacji GPUAdapter
- Ulepszenia interoperacyjności WebAssembly
- Poprawione błędy kodera poleceń
- Aktualizacje dotyczące Dawn
Chrome 126
- Zwiększanie limitu maxTextureArrayLayers
- Optymalizacja przesyłania bufora na potrzeby backendu Vulkan
- Ulepszenia czasu kompilacji cieniowania
- Przesłane bufory poleceń muszą być unikalne
- Aktualizacje dotyczące Dawn
Chrome 125
- Podgrupy (funkcja w trakcie opracowywania)
- Renderowanie do wycinka tekstury 3D
- Aktualizacje dotyczące Dawn
Chrome 124
- Tekstury pamięci tylko do odczytu i do odczytu i zapisu
- Obsługa pracowników usługowych i współdzielonych
- Nowe atrybuty informacji o adapterze
- Poprawki błędów
- Aktualizacje dotyczące Dawn
Chrome 123
- Obsługa wbudowanych funkcji DP4a w WGSL
- Parametry wskaźnika bez ograniczeń w WGSL
- Uproszczona składnia dereferencji typów złożonych w WGSL
- Oddzielny stan tylko do odczytu dla aspektów szablonu i głębi
- Aktualizacje dotyczące Dawn
Chrome 122
- Zwiększanie zasięgu dzięki trybowi zgodności (funkcja w trakcie opracowywania)
- Zwiększanie limitu maxVertexAttributes
- Aktualizacje dotyczące Dawn
Chrome 121
- Obsługa WebGPU na Androidzie
- Używanie DXC zamiast FXC do kompilacji cieniowania w systemie Windows
- Zapytania o sygnatury czasowe w przypadku obliczeń i renderowania
- Domyślne punkty wejścia do modułów cieniowania
- Obsługa przestrzeni kolorów display-p3 jako przestrzeni kolorów GPUExternalTexture
- Informacje o obszarach pamięci
- Aktualizacje dotyczące Dawn
Chrome 120
- Obsługa 16-bitowych wartości zmiennoprzecinkowych w WGSL
- Przekraczaj granice
- Zmiany stanu bufora głębi i szablonu
- Aktualizacje informacji o adapterze
- Kwantyzacja zapytań dotyczących sygnatur czasowych
- Funkcje wiosennych porządków
Chrome 119
- Filtrowane tekstury zmiennoprzecinkowe 32-bitowe
- unorm10-10-10-2 vertex format
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa elementów HTMLImageElement i ImageData w
copyExternalImageToTexture()
- Eksperymentalna obsługa tekstur pamięci do odczytu i zapisu oraz tylko do odczytu
- Aktualizacje dotyczące Dawn
Chrome 117
- Usuwanie bufora wierzchołków
- Usuwanie powiązania grupy
- Wyciszanie błędów podczas asynchronicznego tworzenia potoku, gdy urządzenie zostanie utracone
- Aktualizacje dotyczące tworzenia modułów cieniowania SPIR-V
- Poprawianie komfortu pracy programistów
- Buforowanie potoków z automatycznie generowanym układem
- Aktualizacje dotyczące Dawn
Chrome 116
- Integracja WebCodecs
- Zwrócono utracone urządzenie przez GPUAdapter
requestDevice()
- Zapewnij płynne odtwarzanie wideo, jeśli wywoływana jest funkcja
importExternalTexture()
- Zgodność ze specyfikacją
- Poprawianie komfortu pracy programistów
- Aktualizacje dotyczące Dawn
Chrome 115
- Obsługiwane rozszerzenia języka WGSL
- Eksperymentalna obsługa Direct3D 11
- Domyślne korzystanie z osobnego procesora graficznego po podłączeniu do zasilania sieciowego
- Poprawianie komfortu pracy programistów
- Aktualizacje dotyczące Dawn
Chrome 114
- Optymalizacja JavaScript
- getCurrentTexture() w nieskonfigurowanym elemencie canvas zgłasza błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn