Les GPU sont devenus beaucoup plus performant pour exécuter du code conditionnel et ils ont de nombreuses astuces pour gérer le control flow graph d'un programme (c'est d'ailleurs assez intéressant en soit). Par ailleurs il faut relativiser l'aspect SI (single instruction) du SIMD sur les GPUs. Sur un GPU tu as des groupes de thread (32 thread forme un groupe est courant) qui exécute la même instruction sur des données différentes. Mais a tout instant t tu as N groupes différent de thread qui sont en vie au même moment chacun de ces groupes pouvant exécuter un programme différent. Autrement dis tu as un programme A et un programme B chacune avec 32 thread à un cycle donné le GPU va soit executer le group de thread A soit le group de thread B (il y a un scheduler qui décide). En général sur un GPU moderne tu peux avoir >256 programmes différent qui s'executent en même temps (les unités SIMD sont groupées en bloque eux même regrouper en plus gros bloque et la granularité du scheduler dépend du design du GPU).
Par ailleurs, jusqu'à récement (jusqu'aux radeon HD6xxx) AMD était plus proche d'un design MIMD que d'un design SIMD en un sens, mais l'expérience du GPGPU leur à montrer que ce n'était pas le design le plus approprié mais qu'au contraire des unités SIMD plus simple sont au finale plus performante pour le GPGPU.
Dans tous les cas l'aspect VLIW est vraiment horrible et les GPU récent sont de plus en plus multi-task et la prochaine génération sera capable de créer de nouveau groupes de thread directement depuis un thread en cour d'exécution.
[^] # 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é à 8.
Les GPU sont devenus beaucoup plus performant pour exécuter du code conditionnel et ils ont de nombreuses astuces pour gérer le control flow graph d'un programme (c'est d'ailleurs assez intéressant en soit). Par ailleurs il faut relativiser l'aspect SI (single instruction) du SIMD sur les GPUs. Sur un GPU tu as des groupes de thread (32 thread forme un groupe est courant) qui exécute la même instruction sur des données différentes. Mais a tout instant t tu as N groupes différent de thread qui sont en vie au même moment chacun de ces groupes pouvant exécuter un programme différent. Autrement dis tu as un programme A et un programme B chacune avec 32 thread à un cycle donné le GPU va soit executer le group de thread A soit le group de thread B (il y a un scheduler qui décide). En général sur un GPU moderne tu peux avoir >256 programmes différent qui s'executent en même temps (les unités SIMD sont groupées en bloque eux même regrouper en plus gros bloque et la granularité du scheduler dépend du design du GPU).
Par ailleurs, jusqu'à récement (jusqu'aux radeon HD6xxx) AMD était plus proche d'un design MIMD que d'un design SIMD en un sens, mais l'expérience du GPGPU leur à montrer que ce n'était pas le design le plus approprié mais qu'au contraire des unités SIMD plus simple sont au finale plus performante pour le GPGPU.
Dans tous les cas l'aspect VLIW est vraiment horrible et les GPU récent sont de plus en plus multi-task et la prochaine génération sera capable de créer de nouveau groupes de thread directement depuis un thread en cour d'exécution.