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 des sous-groupes 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, telles que le calcul d'une somme de nombres, et offre une méthode efficace de partage de données entre les threads. Consultez la proposition initiale et l'entrée chromestatus.
Pour information, Google Meet a vu sa vitesse augmenter de 2,3 à 2,9 fois lors des tests comparatifs des sous-groupes par rapport aux produits scalaires entiers empaquetés pour les nuanceurs de multiplication matricielle-vectorielle sur certains appareils lors du test de l'origine.
Lorsque la fonctionnalité "subgroups"
est disponible dans un GPUAdapter
, demandez un GPUDevice
avec cette fonctionnalité pour bénéficier de la prise en charge des 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 aux étapes de calcul et de nuanceur de fragment:
subgroup_invocation_id
: valeur intégrée pour l'indice du fil de discussion 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 invocations d'un sous-groupe. Ces opérations de sous-groupe sont classées comme des opérations SIMT (single-instruction multiple-thread). De plus, les fonctions intégrées au quad, qui fonctionnent sur un quad d'appels, facilitent la communication des données au sein du quad.
Vous pouvez utiliser des valeurs f16 avec des sous-groupes lorsque vous demandez une GPUDevice
avec des 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 facteurs sans lire ni écrire de mémoire pour communiquer les résultats intermédiaires.
Suppression de la compatibilité des types de textures filtrables à virgule flottante en tant que mélangeables
Maintenant que le mélange des textures à virgule flottante 32 bits est disponible avec la fonctionnalité "float32-blendable"
, la compatibilité incorrecte des types de textures filtrables à virgule flottante en tant que mélangeables est supprimée. Consultez le problème 364987733.
Informations Dawn
Dawn nécessite désormais macOS 11 et iOS 14, et n'est compatible qu'avec Metal 2.3 ou version ultérieure. Consultez l'article 381117827.
La nouvelle méthode GetWGSLLanguageFeatures()
de wgpu::Instance
remplace désormais EnumerateWGSLLanguageFeatures()
. Voir le problème 368672124.
Les types de liaisons suivants ont une valeur Undefined
, et leurs valeurs par défaut dans la mise en page de la liaison ont été modifiées. Consultez le problème 377820810.
wgpu::BufferBindingType::Undefined
est désormaisUniform
.wgpu::SamplerBindingType::Undefined
est désormaisFiltering
.wgpu::TextureSampleType::Undefined
est désormaisFloat
.wgpu::StorageTextureAccess::Undefined
devientWriteOnly
Il ne s'agit là que de quelques-uns des points clés. 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 134
- Améliorer les charges de travail de machine learning avec des sous-groupes
- Suppression de la prise en charge des types de textures filtrables à virgule flottante comme mélangeables
- Informations sur Dawn
Chrome 133
- Formats de sommets unorm8x4-bgra et à un seul composant supplémentaires
- Autoriser les limites inconnues à être demandées avec une valeur non définie
- Modifications des règles d'alignement WGSL
- Amélioration des performances WGSL avec la suppression
- Utiliser la taille d'affichage VideoFrame pour les textures externes
- Gérer les images avec des orientations autres que par défaut à l'aide de copyExternalImageToTexture
- Améliorer l'expérience des développeurs
- Activer le mode de compatibilité avec featureLevel
- Nettoyage des fonctionnalités expérimentales des sous-groupes
- Abandon de la limite maxInterStageShaderComponents
- Informations sur Dawn
Chrome 132
- Utilisation de la vue Texture
- Mélange de textures à virgule flottante 32 bits
- Attribut adapterInfo de GPUDevice
- Configurer le contexte de canevas avec un format non valide génère une erreur JavaScript
- Filtrer les restrictions d'échantillonneur sur les textures
- Test étendu des sous-groupes
- Améliorer l'expérience des développeurs
- Compatibilité expérimentale avec les formats de texture normalisés 16 bits
- Informations sur Dawn
Chrome 131
- Couper les distances en WGSL
- GPUCanvasContext getConfiguration()
- Les primitives de point et de ligne ne doivent pas comporter de biais de profondeur.
- Fonctions intégrées d'analyse inclusive pour les sous-groupes
- Compatibilité expérimentale avec le multi-dessin indirect
- Option de compilation du module de nuanceur "math strict"
- Suppression de la méthode requestAdapterInfo() de GPUAdapter
- Informations sur Dawn
Chrome 130
- Mélange de deux sources
- Améliorations du temps de compilation des nuanceurs sur Metal
- Obsolete de la méthode requestAdapterInfo() de GPUAdapter
- Informations sur Dawn
Chrome 129
- Compatibilité HDR avec le mode de mappage des tons du canevas
- Prise en charge des sous-groupes étendus
- Informations sur Dawn
Chrome 128
- Tester les sous-groupes
- Abandon du paramètre de biais de profondeur pour les lignes et les points
- Masquer l'avertissement DevTools d'erreur non capturée si preventDefault
- WGSL effectue d'abord l'interpolation de l'échantillonnage, puis
- Informations sur Dawn
Chrome 127
- Compatibilité expérimentale d'OpenGL ES sur Android
- Attribut info de GPUAdapter
- Améliorations de l'interopérabilité WebAssembly
- Amélioration des erreurs de l'encodeur de commandes
- Informations sur Dawn
Chrome 126
- Augmentation de la limite maxTextureArrayLayers
- Optimisation de l'importation de tampons pour le backend Vulkan
- Améliorations du temps de compilation des nuanceurs
- Les tampons de commande envoyés doivent être uniques
- Informations sur Dawn
Chrome 125
- Sous-groupes (fonctionnalité en cours de développement)
- Affichage d'une tranche de texture 3D
- Informations sur Dawn
Chrome 124
- Textures de stockage en lecture seule et en lecture/écriture
- Compatibilité avec les service workers et les workers partagés
- Nouveaux attributs d'informations sur l'adaptateur
- Corrections de bugs
- Informations sur Dawn
Chrome 123
- Compatibilité des fonctions intégrées DP4a avec WGSL
- Paramètres de pointeur non restreints dans WGSL
- Syntaxe simplifiée pour le déréférencement des composites en WGSL
- État en lecture seule distinct pour les aspects du pochoir et de la profondeur
- Informations sur Dawn
Chrome 122
- Élargir la couverture avec le mode de compatibilité (fonctionnalité en cours de développement)
- Augmentation de la limite maxVertexAttributes
- Informations sur Dawn
Chrome 121
- Compatibilité avec WebGPU sur Android
- Utiliser DXC au lieu de FXC pour la compilation de nuanceurs sous Windows
- Requêtes de code temporel dans les passes de calcul et de rendu
- Points d'entrée par défaut vers les modules de nuanceurs
- Compatibilité avec display-p3 en tant qu'espace de couleurs GPUExternalTexture
- Informations sur les tas de mémoire
- Informations sur Dawn
Chrome 120
- Compatibilité avec les valeurs à virgule flottante 16 bits dans WGSL
- Repousser les limites
- Modifications apportées à l'état du tampon de profondeur
- Modifications des informations sur les adaptateurs
- Quantification des requêtes d'horodatage
- Fonctionnalités de nettoyage de printemps
Chrome 119
- Textures à virgule flottante 32 bits filtrables
- Format de sommet unorm10-10-10-2
- Format de texture rgb10a2uint
- Informations sur Dawn
Chrome 118
- Compatibilité avec HTMLImageElement et ImageData dans
copyExternalImageToTexture()
- Compatibilité expérimentale avec la texture de stockage en lecture-écriture et en lecture seule
- Informations sur Dawn
Chrome 117
- Désactiver le tampon de sommets
- Désactiver le groupe de liaisons
- Ignorer les erreurs de création de pipeline asynchrone en cas de perte de l'appareil
- Mise à jour de la création de modules de nuanceurs SPIR-V
- Améliorer l'expérience des développeurs
- Mise en cache des pipelines avec une mise en page générée automatiquement
- Informations sur Dawn
Chrome 116
- Intégration de WebCodecs
- Appareil égaré renvoyé par GPUAdapter
requestDevice()
- Maintenir la fluidité de la lecture vidéo si
importExternalTexture()
est appelé - Conformité aux spécifications
- Améliorer l'expérience des développeurs
- Informations sur Dawn
Chrome 115
- Extensions de langage WGSL prises en charge
- Compatibilité expérimentale avec Direct3D 11
- Obtenir un GPU distinct par défaut sur l'alimentation secteur
- Améliorer l'expérience des développeurs
- Informations sur Dawn
Chrome 114
- Optimiser JavaScript
- getCurrentTexture() sur un canevas non configuré génère une erreur InvalidStateError
- Mises à jour de WGSL
- Informations sur Dawn