Nouveautés de WebGPU (Chrome 134)

François Beaufort
François Beaufort

Publié le 26 février 2025

Améliorer les charges de travail de machine learning avec des sous-groupes

Après un an de développement et d'essais, la fonctionnalité de sous-groupes WebGPU permettant le parallélisme au niveau SIMD est désormais disponible. Il permet aux threads d'un groupe de travail de communiquer et d'exécuter des opérations mathématiques collectives, comme le calcul d'une somme de nombres, et offre une méthode efficace de partage de données entre les threads. Consultez la proposition d'origine et l'entrée chromestatus.

À titre de référence, Google Meet a vu sa vitesse augmenter de 2,3 à 2,9 fois lors de tests comparatifs de sous-groupes par rapport aux produits scalaires d'entiers compressés pour les nuanceurs de multiplication matrice-vecteur sur certains appareils pendant la version d'évaluation de l'origine.

Lorsque la fonctionnalité "subgroups" est disponible dans un GPUAdapter, demandez un GPUDevice avec cette fonctionnalité pour obtenir la prise en charge des sous-groupes dans WGSL. Il est utile de vérifier les valeurs d'informations sur les adaptateurs subgroupMinSize et subgroupMaxSize, par exemple si vous avez un algorithme codé en dur qui nécessite un sous-groupe d'une certaine taille.

Vous devez également activer explicitement cette extension dans votre code WGSL avec enable subgroups; pour accéder aux valeurs intégrées suivantes dans les étapes de calcul et de nuanceur de fragment :

  • subgroup_invocation_id : valeur intégrée pour l'index du thread dans le sous-groupe.

  • subgroup_size : valeur intégrée pour l'accès à la taille du sous-groupe.

Les nombreuses fonctions intégrées de sous-groupe (par exemple, subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) permettent une communication et un calcul efficaces entre les appels au sein d'un sous-groupe. Ces opérations de sous-groupes sont classées comme des opérations SIMT (single-instruction multiple-thread). De plus, les fonctions intégrées quad, qui fonctionnent sur un quad d'invocations, facilitent la communication des données au sein du quad.

Vous pouvez utiliser des valeurs f16 avec des sous-groupes lorsque vous demandez un GPUDevice avec les fonctionnalités "shader-f16" et "subgroups".

L'exemple suivant est un bon point de départ pour explorer les sous-groupes : il montre un nuanceur qui utilise la fonction intégrée subgroupExclusiveMul() pour calculer les factorielles sans lire ni écrire de mémoire pour communiquer les résultats intermédiaires.

Supprimer la prise en charge des types de textures filtrables flottantes en tant que textures pouvant être mélangées

Maintenant que la fusion de textures float 32 bits est disponible avec la fonctionnalité "float32-blendable", la prise en charge incorrecte des types de textures filtrables float en tant que textures fusionnables est supprimée. Consultez le problème 364987733.

Mises à jour de l'Aube

Dawn nécessite désormais macOS 11 et iOS 14, et n'est compatible qu'avec Metal 2.3 et versions ultérieures. Consultez le problème 381117827.

La nouvelle méthode GetWGSLLanguageFeatures() de wgpu::Instance remplace désormais EnumerateWGSLLanguageFeatures(). Consultez le problème 368672124.

Les types de liaison suivants ont une valeur Undefined et leurs valeurs par défaut dans la mise en page de liaison ont été modifiées. Consultez le problème 377820810.

  • wgpu::BufferBindingType::Undefined est désormais Uniform.
  • wgpu::SamplerBindingType::Undefined est désormais Filtering.
  • wgpu::TextureSampleType::Undefined est désormais Float.
  • wgpu::StorageTextureAccess::Undefineddevient WriteOnly

Il ne s'agit que de quelques-uns des points clés. Consultez la liste exhaustive des commits.

Nouveautés de WebGPU

Liste de tous les sujets abordés dans la série Nouveautés de 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