L'appelation SIMT de NVidia c'est plus du marketing qu'autre choses, c'est du SIMD au final comme sur AMD ou Intel mais pas du SIMD comme les extensions CPU ou les anciens SIMD des annees 90.
Ton exemple est completement faut a moins que tu es eu a faire a un bug driver. Le GPU (AMD, Intel ou NVidia) utilise un mask pour savoir qu'elle thread sont actif. Quand il y a une branch les threads qui ne passe pas le test sont masque, oui les instructions de la branch vont s'executer pour les 32 threads mais les resultats ne seront jamais ecris ni dans les registres ni en memoire pour les threads qui n'ont pas passe le test (bref ca tourne dans le vide). De plus si aucun thread n'est actif alors les instructions sont completement ignores. Si tu veux comprendre comment marche plus finement tout ca l'emulateur open source de GPU AMD/NVidia implemente le meme algorithme (sans certains details/optimizations/tricks) http://multi2sim.org/ le manuel en particulier donne une description tres claire du fonctionnement des GPU AMD ou NVidia.
Pour les acces memoire c'est comme ca pour tout les GPUs mais il faut vraiment avoir un programme qui fait des acces memoire massivement aleatoire pour voir les performances s'effondrer avec les acces memoire. Que ca soit NVidia ou AMD, le GPUs pour chaque groupe de thread va essayer de batcher ensemble les acces memoire (memory access coalescing). Il faut savoir que sur un GPU en general chaque acces a la VRAM retourne une grosse quantite de memoire (depends de la taille du bus) souvent > 256bits.
AMD n'est plus VLIW depuis les HD77xx mais sinon ca marchait comme NVidia tu avais un groupe de 32thread qui executait la meme instruction VLIW pour chaque threads.
[^] # Re: Et les cartes graphiques ?
Posté par glisse . En réponse à la dépêche Kalray un processeur massivement parallèle très impressionnant : Qu’il est loin le temps de mon ZX81. Évalué à 3.
L'appelation SIMT de NVidia c'est plus du marketing qu'autre choses, c'est du SIMD au final comme sur AMD ou Intel mais pas du SIMD comme les extensions CPU ou les anciens SIMD des annees 90.
Ton exemple est completement faut a moins que tu es eu a faire a un bug driver. Le GPU (AMD, Intel ou NVidia) utilise un mask pour savoir qu'elle thread sont actif. Quand il y a une branch les threads qui ne passe pas le test sont masque, oui les instructions de la branch vont s'executer pour les 32 threads mais les resultats ne seront jamais ecris ni dans les registres ni en memoire pour les threads qui n'ont pas passe le test (bref ca tourne dans le vide). De plus si aucun thread n'est actif alors les instructions sont completement ignores. Si tu veux comprendre comment marche plus finement tout ca l'emulateur open source de GPU AMD/NVidia implemente le meme algorithme (sans certains details/optimizations/tricks) http://multi2sim.org/ le manuel en particulier donne une description tres claire du fonctionnement des GPU AMD ou NVidia.
Pour les acces memoire c'est comme ca pour tout les GPUs mais il faut vraiment avoir un programme qui fait des acces memoire massivement aleatoire pour voir les performances s'effondrer avec les acces memoire. Que ca soit NVidia ou AMD, le GPUs pour chaque groupe de thread va essayer de batcher ensemble les acces memoire (memory access coalescing). Il faut savoir que sur un GPU en general chaque acces a la VRAM retourne une grosse quantite de memoire (depends de la taille du bus) souvent > 256bits.
AMD n'est plus VLIW depuis les HD77xx mais sinon ca marchait comme NVidia tu avais un groupe de 32thread qui executait la meme instruction VLIW pour chaque threads.