Opublikowano: 26 lutego 2025 r.
Usprawnianie zadań systemów uczących się za pomocą podgrup
Po roku prac rozwojowych i testów dostępna jest już funkcja podgrup WebGPU, która umożliwia równoległość na poziomie SIMD. Pozwala ona wątkom w grupie roboczej komunikować się i wykonywać zbiorcze operacje matematyczne, takie jak obliczanie sumy liczb, oraz zapewnia wydajną metodę udostępniania danych między wątkami. Zobacz oryginalną propozycję i wpis w chromestatus.
Dla porównania, podczas testów origin w Google Meet zaobserwowaliśmy 2,3–2,9-krotny wzrost szybkości w przypadku testowania podgrup w porównaniu z produktami skalarnymi liczb całkowitych w przypadku shaderów mnożenia macierzy przez wektor na niektórych urządzeniach.
Gdy funkcja "subgroups" jest dostępna w GPUAdapter, poproś o GPUDevice z tą funkcją, aby uzyskać obsługę podgrup w WGSL. Warto sprawdzić wartości informacji o adapterze subgroupMinSize i subgroupMaxSize – na przykład jeśli masz zakodowany na stałe algorytm, który wymaga podgrupy o określonym rozmiarze.
Musisz też wyraźnie włączyć to rozszerzenie w kodzie WGSL za pomocą enable subgroups;, aby uzyskać dostęp do tych wbudowanych wartości w etapach shaderów obliczeniowych i fragmentów:
subgroup_invocation_id: wbudowana wartość indeksu wątku w podgrupie.subgroup_size: wbudowana wartość dostępu do rozmiaru podgrupy.
Liczne wbudowane funkcje podgrup (np. subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) umożliwiają wydajną komunikację i obliczenia między wywołaniami w podgrupie. Te operacje podgrup są klasyfikowane jako operacje SIMT (single-instruction multiple-thread). Dodatkowo wbudowane funkcje czworokątne, które działają na czworokącie wywołań, ułatwiają komunikację danych w czworokącie.
Możesz używać wartości f16 z podgrupami, gdy poprosisz o GPUDevice z funkcjami "shader-f16" i "subgroups".
Ten przykład to dobry punkt początkowy do poznawania podgrup. Pokazuje on shader, który używa wbudowanej funkcji subgroupExclusiveMul() do obliczania silni bez odczytywania i zapisywania pamięci w celu komunikowania wyników pośrednich.
Usuwanie obsługi typów tekstur z filtrowaniem zmiennoprzecinkowym jako mieszanych
Teraz, gdy mieszanie tekstur zmiennoprzecinkowych 32-bitowych jest dostępne dzięki funkcji "float32-blendable", usunięto nieprawidłową obsługę typów tekstur z filtrowaniem zmiennoprzecinkowym jako mieszanych. Zobacz problem 364987733.
Aktualizacje Dawn
Dawn wymaga teraz systemu macOS 11 i iOS 14 oraz obsługuje tylko Metal 2.3+. Zobacz problem 381117827.
Nowa metoda GetWGSLLanguageFeatures() w wgpu::Instance zastępuje teraz EnumerateWGSLLanguageFeatures(). Zobacz problem 368672124.
Te typy powiązań mają wartość Undefined, a ich wartości domyślne w układzie powiązań zostały zmienione. Zobacz problem 377820810.
wgpu::BufferBindingType::Undefinedto terazUniformwgpu::SamplerBindingType::Undefinedto terazFilteringwgpu::TextureSampleType::Undefinedto terazFloatwgpu::StorageTextureAccess::Undefinedto terazWriteOnly
To tylko niektóre z najważniejszych informacji. Zapoznaj się z pełną listą zmian.
Co nowego w WebGPU
Lista wszystkich funkcji, które zostały omówione w serii Co nowego w WebGPU.
Chrome 149–150
- Immediates
- Bardziej rygorystyczna weryfikacja w przypadku tymczasowych załączników
- Aktualizacje Dawn
Chrome 147–148
Chrome 146
- Obsługa trybu zgodności WebGPU w OpenGL ES 3.1
- Tymczasowe załączniki
- Rozszerzenie WGSL texture_and_sampler_let
- Aktualizacje Dawn
Chrome 145
- Rozszerzenie WGSL subgroup_uniformity
- Eksperymentalne synchroniczne mapowanie bufora w procesach roboczych
- Aktualizacje Dawn
Chrome 144
- Rozszerzenie WGSL subgroup_id
- Rozszerzenie WGSL uniform_buffer_standard_layout
- WebGPU w systemie Linux
- Szybsze writeBuffer i writeTexture
- Aktualizacje Dawn
Chrome 143
- Przełączanie komponentów tekstury
- Usuwanie użycia tekstury pamięci masowej bgra8unorm tylko do odczytu
- Aktualizacje Dawn
Chrome 142
Chrome 141
- Tint IR ukończony
- Analiza zakresu liczb całkowitych w kompilatorze WGSL
- Aktualizacja SPIR-V 1.4 dla backendu Vulkan
- Aktualizacje Dawn
Chrome 140
- Żądania urządzeń zużywają adapter
- Skrót do używania tekstury, gdy używany jest widok tekstury
- WGSL textureSampleLevel obsługuje tekstury 1D
- Wycofywanie użycia tekstury pamięci masowej bgra8unorm tylko do odczytu
- Usuwanie atrybutu GPUAdapter isFallbackAdapter
- Aktualizacje Dawn
Chrome 139
- Obsługa tekstur 3D w przypadku formatów skompresowanych BC i ASTC
- Nowa funkcja „core-features-and-limits”
- Testowanie origin trybu zgodności WebGPU
- Aktualizacje Dawn
Chrome 138
- Skrót do używania bufora jako zasobu powiązania
- Zmiany wymagań dotyczących rozmiaru w przypadku buforów mapowanych podczas tworzenia
- Raport architektury dla najnowszych GPU
- Wycofywanie atrybutu GPUAdapter isFallbackAdapter
- Aktualizacje Dawn
Chrome 137
- Używanie widoku tekstury do powiązania externalTexture
- Kopiowanie buforów bez określania przesunięć i rozmiaru
- WGSL workgroupUniformLoad używa wskaźnika do atomowego
- Atrybut GPUAdapterInfo powerPreference
- Usuwanie atrybutu GPURequestAdapterOptions compatibilityMode
- Aktualizacje Dawn
Chrome 136
- Atrybut GPUAdapterInfo isFallbackAdapter
- Skrócenie czasu kompilacji shaderów w D3D12
- Zapisywanie i kopiowanie obrazów z elementu canvas
- Zniesienie ograniczeń trybu zgodności
- Aktualizacje Dawn
Chrome 135
- Zezwalanie na tworzenie układu potoku z układem grupy powiązań null
- Zezwalanie na rozszerzanie widoków poza granice docelowych renderowania
- Łatwiejszy dostęp do eksperymentalnego trybu zgodności na Androidzie
- Usuwanie limitu maxInterStageShaderComponents
- Aktualizacje Dawn
Chrome 134
- Usprawnianie zadań systemów uczących się za pomocą podgrup
- Usuwanie obsługi typów tekstur z filtrowaniem zmiennoprzecinkowym jako mieszanych
- Aktualizacje Dawn
Chrome 133
- Dodatkowe formaty wierzchołków unorm8x4-bgra i 1-komponentowe
- Zezwalanie na żądanie nieznanych limitów z wartością niezdefiniowaną
- Zmiany reguł wyrównywania WGSL
- Zwiększenie wydajności WGSL dzięki discard
- Używanie displaySize VideoFrame w przypadku tekstur zewnętrznych
- Obsługa obrazów o orientacji innej niż domyślna za pomocą copyExternalImageToTexture
- Ulepszanie środowiska programisty
- Włączanie trybu zgodności za pomocą featureLevel
- Czyszczenie eksperymentalnych funkcji podgrup
- Wycofywanie limitu maxInterStageShaderComponents
- Aktualizacje Dawn
Chrome 132
- Użycie widoku tekstury
- Mieszanie tekstur zmiennoprzecinkowych 32-bitowych
- Atrybut GPUDevice adapterInfo
- Konfigurowanie kontekstu elementu canvas z nieprawidłowym formatem powoduje błąd JavaScript
- Ograniczenia dotyczące próbnika filtrowania w przypadku tekstur
- Rozszerzone eksperymenty z podgrupami
- Ulepszanie środowiska programisty
- Eksperymentalna obsługa 16-bitowych znormalizowanych formatów tekstur
- Aktualizacje Dawn
Chrome 131
- Odległości przycinania w WGSL
- GPUCanvasContext getConfiguration()
- Prymitywy punktowe i liniowe nie mogą mieć odchylenia głębokości
- Wbudowane funkcje skanowania włącznie dla podgrup
- Eksperymentalna obsługa multi-draw indirect
- Opcja kompilacji modułu shadera strict math
- Usuwanie GPUAdapter requestAdapterInfo()
- Aktualizacje Dawn
Chrome 130
- Mieszanie z 2 źródeł
- Skrócenie czasu kompilacji shaderów w Metal
- Wycofywanie GPUAdapter requestAdapterInfo()
- Aktualizacje Dawn
Chrome 129
Chrome 128
- Eksperymentowanie z podgrupami
- Wycofywanie ustawiania odchylenia głębokości w przypadku linii i punktów
- Ukrywanie ostrzeżenia Narzędzi deweloperskich o nieprzechwyconym błędzie, jeśli preventDefault
- WGSL interpolate sampling first and either
- Aktualizacje Dawn
Chrome 127
- Eksperymentalna obsługa OpenGL ES na Androidzie
- Atrybut GPUAdapter info
- Ulepszenia interoperacyjności WebAssembly
- Ulepszone błędy kodera poleceń
- Aktualizacje Dawn
Chrome 126
- Zwiększenie limitu maxTextureArrayLayers
- Optymalizacja przesyłania bufora w przypadku backendu Vulkan
- Skrócenie czasu kompilacji shaderów
- Przesłane bufory poleceń muszą być unikalne
- Aktualizacje Dawn
Chrome 125
Chrome 124
- Tekstury pamięci masowej tylko do odczytu i do odczytu i zapisu
- Obsługa service workerów i shared workerów
- Nowe atrybuty informacji o adapterze
- Poprawki błędów
- Aktualizacje Dawn
Chrome 123
- Obsługa wbudowanych funkcji DP4a w WGSL
- Nieograniczone parametry wskaźników w WGSL
- Lukier składniowy do dereferencji kompozytów w WGSL
- Oddzielny stan tylko do odczytu w przypadku aspektów szablonu i głębokości
- Aktualizacje Dawn
Chrome 122
- Poszerzanie zasięgu dzięki trybowi zgodności (funkcja w trakcie opracowywania)
- Zwiększenie limitu maxVertexAttributes
- Aktualizacje Dawn
Chrome 121
- Obsługa WebGPU na Androidzie
- Używanie DXC zamiast FXC do kompilacji shaderów w systemie Windows
- Zapytania o sygnaturę czasową w etapach obliczeniowych i renderowania
- Domyślne punkty wejścia do modułów shaderów
- Obsługa display-p3 jako przestrzeni kolorów GPUExternalTexture
- Informacje o stertach pamięci
- Aktualizacje Dawn
Chrome 120
- Obsługa 16-bitowej reprezentacji zmiennoprzecinkowej w WGSL
- Przekraczanie limitów
- Zmiany stanu głębokości i szablonu
- Aktualizacje informacji o adapterze
- Kwantyzacja zapytań o sygnaturę czasową
- Funkcje czyszczenia
Chrome 119
- Tekstury zmiennoprzecinkowe 32-bitowe z filtrowaniem
- Format wierzchołka unorm10-10-10-2
- Format tekstury rgb10a2uint
- Aktualizacje Dawn
Chrome 118
- Obsługa HTMLImageElement i ImageData w
copyExternalImageToTexture() - Eksperymentalna obsługa tekstur pamięci masowej do odczytu i zapisu oraz tylko do odczytu
- Aktualizacje Dawn
Chrome 117
- Usuwanie ustawienia bufora wierzchołków
- Usuwanie ustawienia grupy powiązań
- Wyciszanie błędów podczas asynchronicznego tworzenia potoku, gdy urządzenie jest utracone
- Aktualizacje tworzenia modułu shadera SPIR-V
- Ulepszanie środowiska programisty
- Buforowanie potoków z automatycznie generowanym układem
- Aktualizacje Dawn
Chrome 116
- Integracja WebCodecs
- Utracone urządzenie zwracane przez GPUAdapter
requestDevice() - Płynne odtwarzanie filmu, jeśli wywoływana jest funkcja
importExternalTexture() - Zgodność ze specyfikacją
- Ulepszanie środowiska programisty
- Aktualizacje Dawn
Chrome 115
- Obsługiwane rozszerzenia języka WGSL
- Eksperymentalna obsługa Direct3D 11
- Domyślne używanie dyskretnego GPU po podłączeniu do zasilania
- Ulepszanie środowiska programisty
- Aktualizacje Dawn
Chrome 114
- Optymalizacja JavaScriptu
- getCurrentTexture() w niekonfigurowanym elemencie canvas zgłasza InvalidStateError
- Aktualizacje WGSL
- Aktualizacje Dawn