Nowości w WebGPU (Chrome 134)

François Beaufort
François Beaufort

Data publikacji: 26 lutego 2025 r.

Ulepszanie zadań systemów uczących się za pomocą podgrup

Po roku prac rozwojowych i testów udostępniliśmy funkcję podgrup WebGPU, 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 zapewnia wydajną metodę udostępniania danych między wątkami. Zobacz oryginalną propozycjęwpis na stronie chromestatus.

Dla porównania: w przypadku Google Meet podczas testów porównawczych podgrup z wektorami liczb całkowitych w przypadku shaderów mnożenia macierzy przez wektor na niektórych urządzeniach w trakcie testów szybkość wzrosła 2,3–2,9 raza.

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 subgroupMinSizesubgroupMaxSize, np. jeśli masz zakodowany na stałe algorytm, który wymaga podgrupy o określonej wielkości.

Musisz też wyraźnie włączyć to rozszerzenie w kodzie WGSL za pomocą enable subgroups;, aby uzyskać dostęp do tych wbudowanych wartości na etapach cieniowania obliczeniowego 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 typu single-instruction multiple-thread (SIMT). Dodatkowo 4 wbudowane funkcje, które działają na czterech wywołaniach, ułatwiają komunikację danych w ramach czwórki.

Wartości f16 możesz stosować w przypadku podgrup, gdy wysyłasz żądanie GPUDevice z funkcjami "shader-f16""subgroups".

Poniższy przykład to dobry punkt wyjścia do poznania podgrup. Pokazuje on shader, który używa wbudowanej funkcji subgroupExclusiveMul() do obliczania silni bez odczytywania ani zapisywania pamięci w celu przekazywania wyników pośrednich.

Usunięcie obsługi typów tekstur z możliwością filtrowania zmiennoprzecinkowego jako mieszanych

Teraz, gdy mieszanie tekstur 32-bitowych zmiennoprzecinkowych jest dostępne w ramach funkcji "float32-blendable", usunięto nieprawidłową obsługę typów tekstur zmiennoprzecinkowych z możliwością filtrowania jako tekstur z możliwością mieszania. Zobacz problem 364987733.

Aktualizacje o świcie

Dawn wymaga teraz systemu macOS 11 i iOS 14 oraz obsługuje tylko Metal 2.3 lub nowszy. Więcej informacji znajdziesz w tym artykule.

Nowa GetWGSLLanguageFeatures() metoda 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::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 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

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

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