Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
developpement:activites:qualification:30ans1code [2019/11/27 17:58]
equemene [Parallélisation avec OpenCL]
developpement:activites:qualification:30ans1code [2019/12/16 12:09]
equemene [Parallélisation avec OpenCL]
Ligne 343: Ligne 343:
 === Intégration des accélérateurs en OpenCL === === Intégration des accélérateurs en OpenCL ===
  
 +== Première comparaison avec la première Tesla ==
  
 +En 2008, Nvidia titre [[https://​www.nvidia.com/​docs/​IO/​43395/​NV_DS_Tesla_PSC_US_Mar09_LowRes.pdf|Tesla Personal Supercomputer]]. Dans une machine au format "​station de travail",​ de 3 à 4 Nvidia Tesla C1060. Avec un puissance estimée à 4 TFlops, l'​article précise que cette station équivaut à 250 ordinateurs personnels.
  
 +La première étape consiste donc à comparer cette machine avec une station de travail gonflée ou un serveur bisocket équivalent. A l'​époque,​ le processeur "fer de lance" de Intel est le Harpertown, un assemblage de 2 Core2 Duo Penryn.
  
 +{{ :​developpement:​activites:​qualification:​c1060_harpertown.png?​500 |}}
 +
 +En Mono, la Tesla C1060 est 3.5x plus rapide que le serveur bi-socket en OpenCL, l'​OpenMP étant très légèrement inférieur en performances. En BB, c'est une toute autre affaire : l'​OpenCL de la Tesla est à peine supérieure à la version OpenMP du serveur bi-socket. La version OpenCL d'AMD, exploitée ici, est dramatiquement inefficace face à l'​OpenMP. Ainsi, déjà, nous constatons que, poiur notre première exploitation de GPU, son comportement n'est pas du tout éauivalent en fonction de la "​charge"​ que nous portons à chaque processus élémentaire.
 +
 +== AMD : les trois dernières générations ==
 +
 +Nous nous propulsons en 2019. Face aux meilleurs de nos processeurs (le Threadripper 1950X et l'​Intel C4145), nous opposons les trois dernières générations AMD : Nano Fury, Vega 64 et Radeon 7 (ou Vega 2).
 +
 +{{ :​developpement:​activites:​qualification:​amdvsbestcpu.png?​500 |}}
 +
 +Nous constatons que ce n'est "​que"​ pour la dernière génération de GPU que AMD dépasse sensiblement nos meilleurs CPU. Avec la Radeon 7, les performances sont entre 2 et 3 fois supérieures en BB et en Mono. Le ratio de performances entre Mono et BB passe de presque 10 à moins de 4, preuve que AMD, dans ses dernières générations adopte un comportement à la charge comparable à celui d'un processeur.
 +
 +== Nvidia : 5 générations de "​Gaming"​ ==
 +
 +A l'​origine,​ c'est bien le détournement des cartes de "​gaming"​ grand initateur de l'​exploitation des GPU en informatique scientifique. Il est donc naturel de comparer nos deux meilleurs processeurs à 5 générations successives de cartes Nvidia en OpenCL : la GTX560Ti (circuit Fermi), la GTX780Ti (circuit Kepler), la GTX980Ti (circuit Maxwell), la GTX 1080 Ti (circuit Pascal) et la RTX Titan (circuit Turing).
 +
 +{{ :​developpement:​activites:​qualification:​nvidiagamervsbestcpu.png?​500 |}}
 +
 +En Mono, nous constatons que, dès la GTX780Ti (de fin 2013), un GPU de Gamer dépasse n'​importe lequel des processeur. La progression en Mono des performances et (presque linéaire) entre Fermi et Turing, à l'​exception de la génération Maxwell, un peu en deça des performances attendues. En BB, c'est bien différent : il faut attendre la toute dernière génération pour obtenir une performance comparable. Il existe toujours également un ratio spectaculaire de performances pour les GPU de Gamer entre Mono et BB : largement supérieur à 10.
 +
 +== Et les accélérateurs non GPU dans tout ça ? ==
 +
 +Nous avons évoqué le Xeon Phi, le coprocesseur arithmétique d'​Intel disposant de 60 coeurs de calcul. Comment le placer dans ce classement ? La solution est d'​abord de le replacer dans son contexte, en 2013-2014 avec des processeurs et des GPU comparables : une machine bi-sockets avec processeurs Westmere et les GPU ou GPGPU GTX780Ti et Tesla K40m.
 +
 +{{ :​developpement:​activites:​qualification:​xeonphivsall.png?​500 |}}
 +
 +Nous constatons que le Xeon Phi 7120P est à peine meilleur en Mono que le système bi-sockets de son époque, mais 2x plus lent que la GTX ou la Tesla. Par contre, il est infiniment meilleur en BB, dépassant même la GTX. Ainsi, le ratio de performances est l'un des meilleurs que nous ayons testés. C'est cependant une pâle satisfaction pour la carte qui devait révolutionner l'​informatique.
 +
 +== Tesla face aux autres... ==
 +
 +Nous avons brièvement testé les Tesla C1060 et Tesla K40m en les comparant aux accélérateurs et processeurs de leur époque. Il est temps de comparer ces 5 générations de Tesla, C1060 (circuit GT200), M2090 (circuit Fermi), K40m (circuit Kepler), P100 (circuit Pascal), V100 (circuit Volta) aux autres GPU de gamer ou AMD.
 +
 +{{ :​developpement:​activites:​qualification:​voltavsall.png?​500 |}}
 +
 +Nous constatons que les Tesla offrent des performances comparables aux cartes de gamer en Mono. La très onéreuse Tesla V100 est même inférieure à l'​onéreuse RTX Titan. Il en est de même de la Tesla P100 avec sa concurrente directe, la GTX 1080 Ti. Par contre, dès que nous passons en BB, le rapport s'​inverse complètement : les Tesla récentes sont entre 5x et 10x plus rapides que les GTX ou RTX équivalentes. D'où vient une telle différence ? Il y a la charge calculatoire d'​abord : beaucoup plus d'​opérations sont nécessaires dans la simulation BB face à Mono. Il y a ensuite la nature des opérations : beaucoup de fonctions transcendantes sont exploitées et, manifestement,​ elles ne sont pas confiées aux mêmes unités de calculs. Une telle différence suggère que les opérations transcendantes sont confiées systématiquement aux unités flottantes 64 bits beaucoup moins nombreuses sur les cartes de Gamer.
 +
 +=== Et CUDA dans tout cela ? ===
 +
 +Pour l'​instant,​ nous nous sommes contentés d'​exploiter le même code gépufié pour tous nos "​périphériques"​ OpenCL, qu'ils soient processeurs,​ GPU, GPGPU de marque Nvidia ou AMD, voire l'​accélérateur Intel.
 +
 +Est-il possible d'​améliorer ses performances,​ celles de Nvidia, en exploitant le langage originel créé par Nvidia pour "​parler"​ au GPU ? La réponse est oui, évidemment,​ mais cela exige un petit portage. Si la nature des "​noyaux"​ de calcul est tout à fait comparable (c'est du C plutôt très simple), la manière de distriubuer le travail n'est pas spécialement comparable.
 +
 +Le portable inital du code en CUDA a été plutôt rapide : il n'a pris qu'une soirée. Il a suffit de remplacer tous les "​workitem"​ par "​BlockIdx"​ et préfixer les fonctions primaires par  "​__device__"​.
 +
 +Mais la première exécution a été plutôt très décevante : en effet, sur la Tesla P100, j'​avais un temps de référence de 1 seconde d'​exécution en OpenCL sur une simulation BB. En CUDA, ce temps est devenu 24 secondes (soit 24x plus lent !). En Mono, le temps était u peu supérieur.
 +
 +En effet, pour exploiter efficacement CUDA, il faut IMPERATIVEMENT solliciter les "​Threads"​.
developpement/activites/qualification/30ans1code.txt · Dernière modification: 2019/12/17 15:34 par equemene