Nowości w WebGPU (Chrome 134)

François Beaufort
François Beaufort

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ę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 subgroupMinSizesubgroupMaxSize, 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""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()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 teraz Uniform
  • wgpu::SamplerBindingType::Undefined to teraz Filtering
  • wgpu::TextureSampleType::Undefined to teraz Float
  • wgpu::StorageTextureAccess::Undefined to teraz WriteOnly

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

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113