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é WebGPU de sous-groupes, qui permet le parallélisme au niveau SIMD, est désormais disponible. Elle 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 constaté une augmentation de la vitesse de 2,3 à 2,9 fois lors de l'évaluation comparative des sous-groupes par rapport aux produits scalaires d'entiers compressés pour les nuanceurs de multiplication matrice-vecteur sur certains appareils pendant la phase d'évaluation.

Lorsque la fonctionnalité "subgroups" est disponible dans un GPUAdapter, demandez un GPUDevice avec cette fonctionnalité pour bénéficier de la compatibilité avec les sous-groupes dans WGSL. Il est utile de vérifier les valeurs d'informations de l'adaptateur subgroupMinSize et subgroupMaxSize, par exemple si vous disposez d'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-groupes (par exemple, subgroupAdd(), subgroupBallot(), subgroupBroadcast(), subgroupShuffle()) permettent une communication et un calcul efficaces entre les appels 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'appels, facilitent la communication de 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 afin de communiquer les résultats intermédiaires.

Supprimer la compatibilité avec les types de textures filtrables flottantes en tant que mélangeables

Maintenant que le mélange de textures flottantes 32 bits est disponible avec la fonctionnalité "float32-blendable", la compatibilité incorrecte avec les types de textures filtrables flottantes en tant que mélangeables est supprimée. Consultez le problème 364987733.

Mises à jour de Dawn

Dawn nécessite désormais macOS 11 et iOS 14, et n'est compatible qu'avec Metal 2.3+. 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::Undefined est désormais WriteOnly

Cela ne couvre que quelques-uns des principaux points forts. Consultez la liste exhaustive des commits.

Nouveautés de WebGPU

Liste de tout ce qui a été abordé dans la série Nouveautés de WebGPU.

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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