Exemple :
Organisation type d'un GeForce. On voit nettement les différentes unités importantes :
- Display processor : affichage 2D (bureau d'OS X/Windows, interface des applications, etc)
- VP2 : Video processing décompression hardware des flux DVD, H264, etc. post processing
- 3D Engine : la plus grosse partie. Celle qui contient les processeurs de flux qui serviront dans OpenCL
Je ne sais plus ce que sont les deux autres unités. Pas importantes ici.
Actuellement, quand on ne se sert de son ordinateur pour surfer, le display processeur est actif et les autres unités sont arrêtés. Quand on regarde une vidéo, l'unité VP s'occupe de la décompression est activée. En 3D, il n'y a que le 3D engine qui est actif, le reste est coupé. Arrêter les unité inactives permet de consommer moins et de réduire la chauffe...
Représentation du 3D Engin en plus détaillé (GeForce 8800 GT desktop).
Les 112 petits carrés verts sont les processeurs de flux. C'est une unité de calcul "relativement simple" qui peut exécuté des opérations mathématiques (pas tous les types). Ce qui fait la puissance d'un GPU, c'est qu'il contient beaucoup de ces petites unités de calcul simples (ici 112). On peut les comparer à un pipeline comme celui qu'on trouve dans le processeur central. Il est parfaitement adapté à tout ce qui est de type calcul parallèle.
Un processeur central contient un pipeline avec des ports spécialisés. A la limite, on pourrait dire "plusieurs pipelines". La différence avec un GPU, c'est qu'il est beaucoup, beaucoup, beaucoup plus polyvalent. Mais aussi beaucoup plus lent. Il n'est pas adapté à du calcul parallèle (c'est pourquoi sur certaines machines on installe des processeurs multicore pour augmenter la puissance de calcul parallèle).
Bref, l'idée d'OpenCL est d'envoyer tout ce qui est parallélisable au GPU et tout ce qui ne l'est pas au CPU. Tout n'est cependant pas parallélisable. Dans l'usage général d'un ordinateur, la compression audio/vidéo, des filtres vidéo ou sur une image et des rendus 3D sont parallélisables. La correction d'un document Word par exemple ne n'est pas vraiment. En fait pour être parallélisable, une application doit faire une opération assez simple un nombre TRES important de fois.
Quand on compressera un film avec OpenCL, le 3D Engine (donc les processeurs de flux) s'occuperont du traitement de l'image et le processeur du son et/ou de la coordination des tâches. Dans le processeur graphique, le display engine et le 3D engine seront actif. Il va donc chauffer comme dans un jeu 3D ! Ca va souffler côté ventilateur sur les portables.
Actuellement quand on compresse un film, le 3D Engin dort, le display engine est actif et le processeur se tape tout le travail. Ca souffle aussi, peut-être moins fort mais plus longtemps.
Tout ceci n'est pas une simple supposition, c'est déjà reel avec l'encodeur Badaboum de NVIDIA et d'autres applications visibles sur le site de CUDA. La seule choses qui restent inconnues :
- Quels gains sur un Core 2 Duo apporte un GeForce 9400 GT et un GeForce 8600/9600m GT ? Les deux derniers pourraient être 2x plus rapides rien que parce qu'ils ont 32 processeurs de flux contre 16 pour le 9400. Combien de temps pour transcoder par exemple.
- Snow Leopard via OpenCL peut-il utiliser plusieurs GPU en même temps ? D'après les documents publiés, oui. En pratique ?