web-dev-qa-db-fra.com

NVIDIA vs AMD: performances GPGPU

J'aimerais entendre des personnes ayant une expérience du codage pour les deux. Moi, je n'ai qu'une expérience avec NVIDIA.

NVIDIA CUDA semble être beaucoup plus populaire que la concurrence. (Juste en comptant les balises de questions sur ce forum, 'cuda' surpasse 'opencl' 3: 1 et 'nvidia' surpasse 'ATI' 15: 1, et il n'y a pas de balise pour 'ATI-stream' du tout).

D'un autre côté, selon Wikipedia, les cartes ATI/AMD devraient avoir beaucoup plus de potentiel, en particulier par dollar. La carte NVIDIA la plus rapide du marché à ce jour, la GeForce 580 (500 $), est évaluée à 1,6 TFlops simple précision. AMD Radeon 6970 peut être acheté pour 370 $ et il est évalué à 2,7 TFlops. Le 580 possède 512 unités d'exécution à 772 MHz. Le 6970 possède 1536 unités d'exécution à 880 MHz.

Dans quelle mesure cet avantage papier d'AMD par rapport à NVIDIA est-il réaliste et est-il susceptible d'être réalisé dans la plupart des tâches GPGPU? Que se passe-t-il avec les tâches entières?

103
Eugene Smith

Métaphoriquement parlant, ATI a un bon moteur par rapport à nvidia. Mais nvidia a une meilleure voiture: D

Cela est principalement dû au fait que nvidia a investi une bonne partie de ses ressources (en argent et en personnes) pour développer des bibliothèques importantes nécessaires au calcul scientifique (BLAS, FFT), puis un bon travail à nouveau pour le promouvoir. C'est peut-être la raison pour laquelle CUDA domine les balises ici par rapport à ATI (ou OpenCL)

Quant à l'avantage réalisé dans les tâches GPGPU en général, il finirait par dépendre d'autres problèmes (selon l'application) tels que la bande passante de transfert de mémoire, un bon compilateur et probablement même le pilote. nvidia ayant un compilateur plus mature, un pilote plus stable sur linux (linux car, son utilisation est largement répandue dans le calcul scientifique), penche la balance en faveur de CUDA (du moins pour l'instant).


MODIFIER 12 janvier 2013

Cela fait deux ans que j'ai fait ce post et il semble toujours attirer des vues parfois. J'ai donc décidé de clarifier certaines choses

  • AMD a intensifié son jeu. Ils ont maintenant les bibliothèques BLAS et FFT. De nombreuses bibliothèques tierces apparaissent également autour d'OpenCL.
  • Intel a introduit Xeon Phi dans la nature en prenant en charge OpenMP et OpenCL. Il a également la possibilité d'utiliser le code x86 existant. comme indiqué dans les commentaires, x86 limité sans SSE pour l'instant
  • NVIDIA et CUDA ont toujours l'Edge dans la gamme de bibliothèques disponibles. Cependant, ils peuvent ne pas se concentrer sur OpenCL autant qu'avant.

En bref, OpenCL a comblé l'écart au cours des deux dernières années. Il y a de nouveaux acteurs sur le terrain. Mais CUDA est toujours un peu en avance sur le peloton.

79
Pavan Yalamanchili

Je n'ai pas de sentiments forts à propos de CUDA vs OpenCL; sans doute OpenCL est l'avenir à long terme, à force d'être un standard ouvert.

Mais les cartes NVIDIA vs ATI actuelles pour GPGPU (pas les performances graphiques, mais GPGPU), sur lesquelles j'ai une opinion bien arrêtée. Et pour commencer, je soulignerai que sur la liste actuelle des 500 meilleurs clusters du Top 5 , NVIDIA mène les systèmes AMD 4 à 1, et sur gpgpu.org , les résultats de recherche (articles, liens vers des ressources en ligne, etc.) pour NVIDIA sont plus nombreux que AMD 6: 1.

Une grande partie de cette différence est la quantité d'informations en ligne disponibles. Découvrez NVIDIA CUDA Zone contre AMD GPGPU Developer Central . La quantité de choses là-bas pour les développeurs qui démarrent n'est même pas proche de la comparaison. Sur le site NVIDIA, vous trouverez des tonnes de documents - et du code fourni - par des personnes travaillant probablement sur des problèmes comme le vôtre. Vous trouverez des tonnes de cours en ligne, de NVIDIA et ailleurs, et des documents très utiles comme le guide des meilleures pratiques des développeurs, etc. La disponibilité d'outils de développement gratuits - le profileur, le cuda-gdb, etc.

(Éditeur: les informations dans ce paragraphe ne sont plus exactes.) Et une partie de la différence est également matérielle. Les cartes AMD ont de meilleures spécifications en termes de flops de pointe, mais pour pouvoir en obtenir une fraction significative, vous devez non seulement répartir votre problème sur de nombreux processeurs de flux complètement indépendants, mais chaque élément de travail doit également être vectorisé. Étant donné que le code GPGPUing est assez difficile, cette complexité architecturale supplémentaire est suffisante pour faire ou défaire certains projets.

Et le résultat de tout cela est que la communauté des utilisateurs de NVIDIA continue de croître. Parmi les trois ou quatre groupes que je connais qui envisagent de créer des grappes de GPU, aucun d'entre eux n'envisage sérieusement les cartes AMD. Et cela signifiera encore plus de groupes écrivant des articles, contribuant au code, etc. du côté de NVIDIA.

Je ne suis pas un shill NVIDIA; Je souhaite que ce ne soit pas de cette façon, et qu'il y ait deux (ou plus!) Plates-formes GPGPU tout aussi convaincantes. La concurrence est bonne. Peut-être qu'AMD intensifiera son jeu très bientôt - et les produits de fusion à venir semblent très convaincants. Mais en donnant à quelqu'un des conseils sur les cartes à acheter aujourd'hui, et où dépenser son temps en ce moment, je ne peux pas en toute conscience dire que les deux environnements de développement sont également bons.

Modifié pour ajouter : Je suppose que ce qui précède est un peu elliptique en termes de réponse à la question d'origine, alors permettez-moi de le rendre un peu plus explicite. Les performances que vous pouvez obtenir à partir d'un matériel sont, dans un monde idéal avec un temps infini disponible, dépendant uniquement du matériel sous-jacent et des capacités du langage de programmation; mais en réalité, la quantité de performances que vous pouvez obtenir dans un temps fixe investi dépend également fortement des outils de développement, des bases de code de communauté existantes (par exemple, les bibliothèques accessibles au public, etc.). Ces considérations pointent toutes fortement vers NVIDIA.

(Éditeur: les informations de ce paragraphe ne sont plus exactes.) En termes de matériel, l'exigence de vectorisation au sein des unités SIMD dans les cartes AMD rend également la performance du papier encore plus difficile qu'avec le matériel NVIDIA.

59
Jonathan Dursi

La principale différence entre les architectures AMD et NVIDIA est qu'AMD est optimisé pour les problèmes où le comportement de l'algorithme peut être déterminé au moment de la compilation tandis que NVIDIA est optimisé pour les problèmes où le comportement de l'algorithme ne peut être déterminé qu'au moment de l'exécution.

AMD a une architecture relativement simple qui leur permet de dépenser plus de transistors sur les ALU. Tant que le problème peut être entièrement défini au moment de la compilation et être correctement mappé à l'architecture d'une manière quelque peu statique ou linéaire, il y a de fortes chances pour qu'AMD puisse exécuter l'algorithme plus rapidement que NVIDIA.

D'un autre côté, le compilateur de NVIDIA effectue moins d'analyses au moment de la compilation. Au lieu de cela, NVIDIA a une architecture plus avancée où ils ont passé plus de transistors sur une logique capable de gérer le comportement dynamique de l'algorithme qui n'apparaît qu'au moment de l'exécution.

Je crois que le fait que la plupart des supercalculateurs qui utilisent des GPU vont avec NVIDIA est que le type de problème sur lequel les scientifiques souhaitent effectuer des calculs, correspond généralement mieux à l'architecture de NVIDIA qu'à AMD.

17
Roger Dahl

J'ai fait du codage itératif dans OpenCL. Et les résultats de son exécution dans NVIDIA et ATI sont à peu près les mêmes. Près de la même vitesse dans les cartes de même valeur ($).

Dans les deux cas, les vitesses étaient ~ 10x-30x par rapport à un CPU.

Je n'ai pas testé CUDA, mais je doute qu'il puisse résoudre mes problèmes de récupération de mémoire aléatoire comme par magie. De nos jours, CUDA et OpenCL sont plus ou moins les mêmes, et je vois plus d'avenir sur OpenCL que sur CUDA. La raison principale est qu'Intel lance des pilotes avec OpenCL pour leurs processeurs. Ce sera une énorme avancée à l'avenir (l'exécution de 16, 32 ou 64 threads d'OpenCL dans le processeur est VRAIMENT rapide et très facile à porter sur le GPU).

7
DarkZeros

Après avoir passé du temps avec OpenCL pour les cartes GCN après quelques années de CUDA pour Fermi et Kepler, je préfère toujours CUDA comme langage de programmation et choisirais le matériel AMD avec CUDA si j'avais une option.

Principales différences entre NVIDIA et AMD (OpenCL):

Pour AMD:

  • Même avec Maxwell, NVidia a toujours des latences de commande plus longues et les algorithmes complexes sont susceptibles d'être 10 plus rapides sur AMD (en supposant les mêmes Tflops théoriques) après des optimisations faciles pour les deux. L'écart était jusqu'à 60% pour Kepler VS GCN. Il est plus difficile d'optimiser les noyaux complexes pour NVidia dans ce sens.

  • Cartes bon marché.

  • OpenCL est un standard ouvert avec d'autres fournisseurs disponibles.

Pour Nvidia:

  • Possède la gamme de matériel Tesla qui convient aux charges de serveur élevées et fiables.

  • Le nouveau Maxwell est bien plus économe en énergie.

  • Le compilateur et les outils sont bien plus avancés. AMD ne parvient toujours pas à implémenter le paramètre maxregcout, vous pouvez donc facilement contrôler l'occupation sur divers matériels et leur compilateur a beaucoup d'idées aléatoires sur ce qu'est un code optimal qui change avec chaque version, vous devrez donc peut-être de revoir l'ancien code tous les six mois, car il est soudainement devenu 40% plus lent.

À ce stade, si GPGPU est votre objectif, CUDA est le seul choix, car opencL avec AMD n'est pas prêt pour la batterie de serveurs et il est beaucoup plus difficile d'écrire du code efficace pour AMD car le compilateur semble toujours être "en version bêta" .

7
Vladimir Tankovich

Je suis nouveau sur GPGPU mais j'ai une certaine expérience en informatique scientifique (PhD en physique). Je suis en train de constituer une équipe de recherche et je veux aller vers l'utilisation de GPGPU pour mes calculs. J'ai dû choisir entre les plateformes disponibles. J'ai opté pour Nvidia, pour deux raisons: bien que ATI soit plus rapide sur le papier, Nvidia a une plate-forme plus mature et plus de documentation, il sera donc possible de se rapprocher des performances de pointe sur cette plate-forme.

Nvidia a également un programme de soutien à la recherche universitaire, on peut demander un soutien, je viens de recevoir une carte TESLA 2075 dont je suis très heureux. Je ne sais pas si ATI ou Intel prend en charge la recherche de cette façon.

Ce que j'ai entendu à propos d'OpenCL, c'est qu'il essaie de tout faire à la fois, il est vrai que votre code OpenCL sera plus portable mais il est également susceptible de ne pas exploiter toutes les capacités de l'une ou l'autre plate-forme. Je préfère en savoir un peu plus et écrire des programmes qui utilisent mieux les ressources. Avec le TESLA K10 qui vient de sortir cette année, Nvidia fait partie de la gamme 4,5 TeraFlops, il n'est donc pas clair que Nvidia est à la traîne ... mais les MIC Intel pourraient s'avérer un véritable concurrent, surtout s'ils réussissent à déplacer l'unité GPGPU vers la carte mère. Mais pour l'instant, j'ai choisi Nvidia.

6
Andras

Mon expérience dans l'évaluation des performances en virgule flottante OpenCL tend à privilégier les cartes NVIDIA. J'ai travaillé avec quelques points de repère à virgule flottante sur des cartes NVIDIA allant du 8600M GT au GTX 460. Les cartes NVIDIA atteignent constamment environ la moitié du pic théorique unique sur ces points de repère.
Les cartes ATI avec lesquelles j'ai travaillé atteignent rarement mieux qu'un tiers du pic simple précision. Notez que mon expérience avec ATI est biaisée; Je n'ai pu travailler qu'avec une seule carte série 5000. Mon expérience concerne principalement les cartes de la série HD 4000, qui n'ont jamais été bien prises en charge. La prise en charge des cartes de la série HD 5000 est bien meilleure.

5
virtuallinux

Je voudrais ajouter au débat. Pour nous, dans le domaine des logiciels, nous pouvons compromettre les performances brutes de simple précision en termes de productivité, mais même que je n'ai pas à faire de compromis car, comme déjà indiqué, vous ne pouvez pas obtenir autant de performances sur le matériel ATI utilisant OpenCL que vous pouvez le faire. si vous écrivez en CUDA sur le matériel NVIDIA.

Et oui, avec l'annonce par PGI du compilateur x86 pour CUDA, il n'y aura aucune bonne raison de passer plus de temps et de ressources à écrire en OpenCL :)

P.S: Mon argument pourrait être biaisé puisque nous faisons presque tout notre travail GPGPU sur CUDA. Nous avons une bibliothèque de traitement d'image/vision par ordinateur CUVI (CUDA pour la vision et l'imagerie) qui accélère certaines fonctionnalités IP/CV de base sur CUDA.

1
Salman Ul Haq

Cuda est certainement populaire qu'OpenCL à ce jour, car il est sorti 3 ou 4 ans avant OpenCL. Depuis la sortie d'OpenCL, Nvidia n'a pas beaucoup contribué à la langue car ils se concentrent beaucoup sur CUDA. Ils n'ont même pas publié de version openCL 1.2 pour aucun pilote.

En ce qui concerne l'informatique hétérogène ainsi que les appareils portables, OpenCl gagnera sûrement plus de popularité dans un avenir proche. AMD est désormais le plus gros contributeur d'OpenCL, il est visible sur leur site.

0
shunya