Data publikacji: 26 lutego 2025 r.
Poprawianie wydajności zadań systemów uczących się za pomocą podgrup
Po roku prac programistycznych i testów udostępniliśmy funkcję WebGPU dla podgrup, która umożliwia równoległość na poziomie SIMD. Umożliwia wątkom w grupie roboczej komunikowanie się i wykonywanie zbiorczych operacji matematycznych, takich jak obliczanie sumy liczb, oraz oferuje wydajną metodę udostępniania danych między wątkami. Zobacz pierwotną propozycję i wpis w chromestatus.
Dla porównania: podczas testów porównawczych podzgrupowań w Google Meet na niektórych urządzeniach w ramach zastosowania zapakowanych produktów typu dot dla liczb całkowitych dla shaderów mnożenia wektorów i macierzy w Google Meet odnotowano wzrost szybkości od 2,3 do 2,9 raza.
Gdy funkcja "subgroups"
będzie dostępna w ramach GPUAdapter
, poproś o GPUDevice
z tą funkcją, aby uzyskać obsługę grup podrzędnych w WGSL. Warto sprawdzić wartości informacji o adapterze subgroupMinSize
i subgroupMaxSize
, np. jeśli masz zakodowany na stałe algorytm, który wymaga podgrupy o określonej wielkości.
Aby uzyskać dostęp do tych wbudowanych wartości na etapach shaderów obliczeniowych i fragmentowych, musisz też wyraźnie włączyć to rozszerzenie w kodzie WGSL za pomocą enable subgroups;
:
subgroup_invocation_id
: wbudowana wartość indeksu wątku w podgrupie.subgroup_size
: wbudowana wartość dostępu do rozmiaru podgrupy.
Liczne wbudowane funkcje podgrupy (np. subgroupAdd()
, subgroupBallot()
, subgroupBroadcast()
, subgroupShuffle()
) umożliwiają wydajną komunikację i przetwarzanie danych między wywołaniami w ramach podgrupy. Te operacje podgrupy są klasyfikowane jako operacje z pojedynczą instrukcją i wielowątkiem (SIMT). Dodatkowo wbudowane funkcje kwadru, które działają na kwadrze wywołań, ułatwiają komunikację danych w ramach kwadru.
Wartości f16 możesz używać w przypadku podgrup, gdy żądasz funkcji GPUDevice
z funkcjami "shader-f16"
i "subgroups"
.
Poniższy przykład jest dobrym punktem wyjścia do badania podgrup: pokazuje shader, który używa wbudowanej funkcji subgroupExclusiveMul()
do obliczania czynników bez odczytu ani zapisu pamięci w celu przekazywania wyników pośrednich.
Usuń obsługę typów tekstur do filtrowania typu float jako mieszalnych
Teraz, gdy 32-bitowe mieszanie tekstur z przestrzenią zmiennoprzecinkową jest dostępne dzięki funkcji "float32-blendable"
, usunięto nieprawidłową obsługę typów tekstur z przestrzenią zmiennoprzecinkową jako mieszalnych. Zobacz problem 364987733.
Aktualizacje świtu
Dawn wymaga teraz macOS 11 i iOS 14 oraz obsługuje tylko Metal 2.3 lub nowszą. Zobacz problem 381117827.
Nowa metoda GetWGSLLanguageFeatures()
w wgpu::Instance
zastępuje teraz EnumerateWGSLLanguageFeatures()
. Zobacz problem 368672124.
Te typy wiązań mają wartość Undefined
, a ich domyślne wartości w układzie wiązania zostały zmienione. Zobacz problem 377820810.
wgpu::BufferBindingType::Undefined
to terazUniform
wgpu::SamplerBindingType::Undefined
to terazFiltering
wgpu::TextureSampleType::Undefined
to terazFloat
wgpu::StorageTextureAccess::Undefined
to terazWriteOnly
Obejmuje to tylko niektóre najważniejsze informacje. Zapoznaj się z pełną listą commitów.
Co nowego w WebGPU
Lista wszystkich tematów omawianych w cyklu Co nowego w WebGPU.
Chrome 134
- Ulepszanie zadań systemów uczących się za pomocą podgrup
- Usuwanie obsługi typów tekstur do filtrowania typu float jako tekstur do mieszania
- Aktualizacje dotyczące Dawn
Chrome 133
- Dodatkowe formaty wierzchołka unorm8x4-bgra i 1-component
- Zezwalanie na wysyłanie żądań o nieznane limity z nieokreśloną wartością
- Zmiany reguł zgodności z WGSL
- Zwiększenie skuteczności WGSL dzięki odrzuceniu
- Używanie rozmiaru wyświetlania VideoFrame do tekstur zewnętrznych
- Praca z obrazami o orientacji innej niż domyślna za pomocą metody copyExternalImageToTexture
- Ułatwienie pracy programistom
- Włączanie trybu zgodności za pomocą atrybutu featureLevel
- Oczyszczanie eksperymentalnych funkcji podgrup
- Wycofanie limitu maxInterStageShaderComponents
- Aktualizacje dotyczące Dawn
Chrome 132
- Używanie widoku tekstury
- Mieszanie tekstur o typie liczby zmiennoprzecinkowej 32-bitowej
- Atrybut adapterInfo obiektu GPUDevice
- Konfigurowanie kontekstu kanwy z nieprawidłowym formatem powoduje błąd JavaScriptu
- Ograniczenia filtra samplera dotyczące tekstur
- Eksperymenty z podgrupami
- Ułatwienie pracy programistom
- Doświadczalna obsługa 16-bitowych normalizowanych formatów tekstur
- Aktualizacje dotyczące Dawn
Chrome 131
- Odcinki odległości w WGSL
- GPUCanvasContext getConfiguration()
- Punkty i linie nie mogą mieć ustawienia głębi
- Funkcje wbudowane w skanowanie z uwzględnieniem wszystkich grup
- Dodanie eksperymentalnej obsługi pośrednich metod wielokrokowego rysowania
- Opcja kompilacji modułu shadera: ścisła matematyka
- Usuwanie metody requestAdapterInfo() z interfejsu GPUAdapter
- Aktualizacje dotyczące Dawn
Chrome 130
- Mieszanie dwóch źródeł
- Skrócenie czasu kompilacji shaderów na Metalu
- Wycofanie metody requestAdapterInfo() klasy GPUAdapter
- Aktualizacje dotyczące Dawn
Chrome 129
Chrome 128
- Eksperymentowanie z podgrupami
- Wycofanie obsługi ustawiania głębi dla linii i punktów
- Ukrywanie ostrzeżenia DevTools o nieuwzględnionym błędzie, jeśli wywołano preventDefault
- WGSL najpierw interpoluje próbkowanie, a potem
- Aktualizacje dotyczące Dawn
Chrome 127
- Doświadczalna obsługa OpenGL ES na Androidzie
- Atrybut informacji o GPUAdapter
- Ulepszenia interoperacyjności WebAssembly
- Poprawione błędy kodera poleceń
- Aktualizacje dotyczące Dawn
Chrome 126
- Zwiększenie limitu maxTextureArrayLayers
- Optymalizacja przesyłania bufora dla backendu Vulkana
- Ulepszenia dotyczące czasu kompilacji shaderów
- Przesłane bufory poleceń muszą być unikalne
- Aktualizacje dotyczące Dawn
Chrome 125
- Podgrupy (funkcja w trakcie tworzenia)
- Renderowanie na potrzeby wycinka tekstury 3D
- Aktualizacje dotyczące Dawn
Chrome 124
- Tekstury tylko do odczytu i do odczytu i zapisu
- Obsługa pracowników usług i pracowników wspólnych
- 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
- Składnia cukrowa do odwoływania się do elementów złożonych w WGSL
- Oddzielny stan tylko do odczytu dla stempli i głębi
- Aktualizacje dotyczące Dawn
Chrome 122
- Zwiększenie zasięgu dzięki trybowi zgodności (funkcja w trakcie opracowywania)
- Zwiększenie limitu maxVertexAttributes
- Aktualizacje dotyczące Dawn
Chrome 121
- Obsługa WebGPU na Androidzie
- Używanie DXC zamiast FXC do kompilowania shaderów w systemie Windows
- Zapytania o sygnatury czasowe w przelotach obliczeniowych i renderowania
- Domyślne punkty wejścia do modułów shaderów
- Obsługa przestrzeni barw display-p3 jako przestrzeni barw GPUExternalTexture
- Informacje o stosie pamięci
- Aktualizacje dotyczące Dawn
Chrome 120
- Obsługa 16-bitowych wartości zmiennoprzecinkowych w WGSL
- Przekraczanie limitów
- Zmiany stanu głębi cieniowania
- Aktualizacje informacji o adapterze
- Kwantyzacja zapytań dotyczących sygnatury czasowej
- Funkcje wiosenne porządki
Chrome 119
- Filtrowane tekstury o typie liczby zmiennoprzecinkowej 32-bitowej
- Format wierzchołka unorm10-10-10-2
- Format tekstury rgb10a2uint
- Aktualizacje dotyczące Dawn
Chrome 118
- Obsługa HTMLImageElement i ImageData w
copyExternalImageToTexture()
- Dodatkowa obsługa tekstury pamięci tylko do odczytu i z możliwością zapisu
- Aktualizacje dotyczące Dawn
Chrome 117
- Nieustawienie bufora wierzchołka
- Cofnij grupę wiązania
- Błędy w przypadku tworzenia asynchronicznego potoku, gdy urządzenie jest utracone
- Aktualizacje dotyczące tworzenia modułów shaderów SPIR-V
- Ułatwienie pracy programistom
- Buforowanie ścieżek z automatycznie wygenerowanym układem
- Aktualizacje dotyczące Dawn
Chrome 116
- Integracja z WebCodecs
- Utracone urządzenie zwrócone przez GPUAdapter
requestDevice()
- Utrzymanie płynnego odtwarzania filmu, jeśli wywołana zostanie funkcja
importExternalTexture()
- Zgodność ze specyfikacją
- Ułatwienie pracy programistom
- Aktualizacje dotyczące Dawn
Chrome 115
- Obsługiwane rozszerzenia językowe WGSL
- Wstępna obsługa Direct3D 11
- Uzyskaj oddzielny procesor graficzny domyślnie przy zasilaniu z sieci
- Ułatwienie pracy programistom
- Aktualizacje dotyczące Dawn
Chrome 114
- Optymalizacja kodu JavaScript
- getCurrentTexture() na nieskonfigurowanym płótnie powoduje błąd InvalidStateError
- Aktualizacje WGSL
- Aktualizacje dotyczące Dawn