NVIDIA vs AMD: performances GPGPU
J'aimerais entendre des gens ayant une expérience de codage pour les deux. Moi-même, je n'ai que de l'expérience avec NVIDIA.
NVIDIA CUDA semble être beaucoup plus populaire que la concurrence. (Il suffit de compter les balises de question 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'autre part, selon Wikipedia, les cartes ATI/AMD devraient avoir beaucoup plus de potentiel, en particulier par dollar. Le plus rapide NVIDIA carte sur le marché à partir d'aujourd'hui, GeForce 580 (500$), est évalué à 1.6 TFLOPS de précision unique. AMD Radeon 6970 peut être eu pour 370 $ et il est évalué à 2.7 TFlops. Le 580 a 512 unités d'exécution à 772 MHz. Le 6970 a 1536 unités d'exécution à 880 MHz.
Dans quelle mesure cet avantage papier d'AMD est-il réaliste par rapport à NVIDIA, 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?
10 réponses
Métaphoriquement parlant ati a un bon moteur par rapport à nvidia. Mais nvidia a une meilleure voiture: D
C'est surtout parce que nvidia a investi une bonne partie de ses ressources (en argent et en personnes) pour développer d'importantes bibliothèques nécessaires à l'informatique scientifique (BLAS, FFT), puis un bon travail de promotion. Cela 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 serait finir en fonction d'autres problèmes (en fonction de 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 répandue dans l'informatique scientifique), faire pencher la balance en faveur de CUDA (au moins pour l'instant).
MODIFIER Jan 12, 2013
Cela fait deux ans que j'ai fait ce post et il semble toujours attirer des vues parfois. J'Ai Donc ont décidé de clarifier quelques choses
- AMD a intensifié leur jeu. Ils ont maintenant à la fois des bibliothèques BLAS et FFT. De nombreuses bibliothèques tierces se développent également autour D'OpenCL.
- Intel a introduit Xeon Phi dans la nature en supportant à la fois 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 encore l'avantage dans la gamme des bibliothèques disponibles. Cependant ils peuvent ne pas se concentrer sur OpenCL autant qu'ils le faisaient auparavant.
En bref, OpenCL a comblé l'écart au cours des deux dernières années. Il y a de nouveaux joueurs sur le terrain. Mais CUDA est encore un peu en avance sur le peloton.
Je n'ai pas de sentiments forts à propos de CUDA vs OpenCL; probablement OpenCL est l'avenir à long terme, juste à force d'être un standard ouvert.
Mais les cartes NVIDIA vs ATI actuelles pour GPGPU (pas les performances graphiques, mais GPGPU), que j'ai une forte opinion sur. Et pour y arriver, je soulignerai que sur la liste actuelle des 500 meilleurs clusters , NVIDIA conduit les systèmes AMD 4 à 1, et sur gpgpu.org , résultats de recherche (Articles, liens vers des ressources en ligne, etc) pour NVIDIA plus nombreux résultats pour AMD 6: 1.
Une grande partie de cette différence est la quantité d'informations en ligne disponibles. Découvrez le NvidiaCuda Zone par rapport à AMD GPGPU Developer Central . La quantité de choses là-bas pour les développeurs qui démarrent ne se rapproche même pas de la comparaison. Sur le site NVIDIAs, vous trouverez des tonnes de documents - et de code contribué - de 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.-incline massivement nvidias.
(Editeur: les informations contenues dans ce paragraphe ne sont plus exactes.) Et une partie de la différence est également Matériel. Les cartes AMDs ont de meilleures spécifications en termes de flops de pointe, mais pour être en mesure d'obtenir une fraction significative de cela, vous devez non seulement casser votre problème sur beaucoup complètement processeurs de flux indépendants, chaque élément de travail doit également être vectorisé. Étant donné que le code GPGPUing est assez dur, cette complexité architecturale supplémentaire est suffisante pour faire ou casser certains projets.
Et le résultat de tout cela est que la communauté d'utilisateurs NVIDIA continue de croître. Sur les trois ou quatre groupes que je connais qui pensent à construire des clusters GPU, aucun d'entre eux n'envisage sérieusement les cartes AMD. Et cela signifiera encore plus de groupes écrivant des articles, contribuant du code, etc sur la NVIDIA côté.
Je ne suis pas un shill NVIDIA; j'aimerais que ce ne soit pas ainsi ,et qu'il y en ait deux (ou plus!) plates-formes GPGPU tout aussi convaincantes. La concurrence a du bon. 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ù passer leur temps à faire des efforts en ce moment, je ne peux pas en bonne conscience dire que les deux environnements de développement sont également Bien.
Édité pour ajouter : je suppose que ce qui précède est un peu elliptique en termes de réponse à la question initiale, alors laissez-moi le rendre un peu plus explicite. La performance que vous pouvez obtenir à partir d'un morceau de matériel est, dans un monde idéal avec un temps infini disponible, dépend uniquement du matériel sous-jacent et des capacités du langage de programmation; mais en réalité, la quantité de performance que vous pouvez obtenir dans un laps de temps fixe investi est également fortement dépendante des outils devel, bases de code communautaire existantes (par exemple, bibliothèques accessibles au public, etc.). Ces considérations pointent toutes fortement vers NVIDIA.
(Editeur: les informations contenues dans 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.
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 ALU. tant que le problème peut être complètement défini au moment de la compilation et être mappé avec succès à l'architecture d'une manière quelque peu statique ou linéaire, il y a de bonnes chances QU'AMD puisse exécuter l'algorithme plus rapidement que NVIDIA.
D'autre part, le compilateur de NVIDIA fait moins d'analyse au moment de la compilation. Au lieu de cela, NVIDIA a une architecture plus avancée où ils ont passé plus de transistors sur la logique qui est capable de gérer le comportement dynamique de l'algorithme qui émerge seulement 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 sont intéressés à exécuter des calculs, en général mieux cartographier L'architecture de NVIDIA que celle D'AMD.
J'ai fait un codage itératif dans OpenCL. Et les résultats de l'exécution dans NVIDIA et ATI, sont à peu près les mêmes. Près de la même vitesse dans la même valeur ($) cartes.
Dans les deux cas, les vitesses étaient ~10x-30x par rapport à une CPU.
Je n'ai pas testé CUDA, mais je doute que cela puisse résoudre mes problèmes de récupération de mémoire aléatoire 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 que Intel lance des pilotes avec OpenCL pour leurs processeurs. Ce sera une énorme avance à l'avenir (l'exécution de 16, 32 ou 64 threads D'OpenCL dans le CPU est vraiment rapide, et vraiment facile à porter sur GPU).
Ayant 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 du matériel AMD avec CUDA si j'avais une option.
Principales différences de NVIDIA et AMD (OpenCL):
Pour AMD:
Même avec Maxwell, NVidia a encore 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 open standard avec d'autres fournisseurs disponibles.
Pour Nvidia:
A la ligne de matériel Tesla qui est adapté pour des charges de serveur élevées fiables.
Le nouveau Maxwell est beaucoup plus économe en énergie.
Le compilateur et les outils sont beaucoup plus avancés. AMD ne peut toujours pas obtenir pour implémenter
maxregcout
paramètre, de sorte que vous pouvez facilement contrôler l'occupation sur divers matériels et leur compilateur a beaucoup d'idées aléatoires de ce qui est un code optimal qui change avec chaque version, vous devrez peut-être 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 en raison du fait que le compilateur semble toujours être en "bêta".
Je suis nouveau en GPGPU mais j'ai une certaine expérience en informatique scientifique (doctorat en physique). Je suis en train de mettre sur pied une équipe de recherche et je veux aller vers L'utilisation de GPGPU pour mes calculs. Je devais choisir entre les plates-formes disponibles. J'ai décidé de Nvidia, pour quelques raisons: alors QU'ATI pourrait être 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 universitaire programme de soutien à la recherche, on peut demander du soutien, je viens de recevoir une carte TESLA 2075 dont je suis très heureux. Je ne sais pas si ATI ou Intel soutient la recherche de cette façon.
Ce que J'ai entendu parler D'OpenCL, C'est qu'il essaie d'être tout à 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 apprendre un peu plus et écrire des programmes qui utilisent mieux les ressources. Avec la TESLA K10 qui vient de sortir cette année Nvidia est dans la gamme 4.5 TeraFlops donc il n'est pas clair que Nvidia est derrière ... cependant, les micros Intel pourraient s'avérer être 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.
Mon expérience dans l'évaluation des performances en virgule flottante OpenCL a tendance à favoriser les cartes NVIDIA. J'ai travaillé avec quelques benchmarks en virgule flottante sur des cartes NVIDIA allant de la 8600M GT à la GTX 460. Les cartes NVIDIA atteignent régulièrement environ la moitié du pic théorique unique-precisino sur ces benchmarks.
Les cartes ATI avec lesquelles j'ai travaillé atteignent rarement mieux qu'un tiers du pic de précision unique.
Notez que mon expérience avec ATI est biaisée; Je n'ai pu travailler qu'avec un seul Carte série 5000. Mon expérience est principalement avec 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.
Je voudrais ajouter au débat. Pour nous dans le secteur des logiciels, nous pouvons compromettre les performances brutes d'une seule précision à la productivité, mais même cela, je n'ai pas à faire de compromis car, comme déjà souligné, vous ne pouvez pas obtenir autant de performances sur le matériel D'ATI en utilisant OpenCL que si vous écrivez dans CUDA sur le matériel de NVIDIA.
Et oui, avec L'annonce de PGI du compilateur x86 pour CUDA, il n'y aura pas de bonne raison de passer plus de temps et de ressources à écrire 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.
Cuda est certainement populaire que OpenCL à partir d'Aujourd'hui, car il a été publié 3 ou 4 ans avant OpenCL. Depuis OpenCL été a publié, Nvidia n'a pas beaucoup contribué pour la langue car ils se concentrent beaucoup sur CUDA. Ils n'ont même pas publié la version OpenCL 1.2 pour aucun pilote.
En ce qui concerne l'informatique hétérogène ainsi que les appareils portatifs concernés, OpenCl gagnera sûrement plus de popularité dans un proche avenir. À partir de maintenant le plus grand contributeur à OpenCL est AMD, il est visible sur leur site.
Dans mon expérience:
Si vous voulez la meilleure performance absolue, vous devez voir qui est sur la dernière itération matérielle et utiliser leur pile (y compris les dernières versions / bêta).
Si vous voulez la meilleure performance pour l'argent, vous viserez les cartes gamer plutôt que les cartes "professionnelles" et la flexibilité de cibler différentes plates-formes favorise opencl.
Si vous commencez, en particulier, cuda a tendance à être plus poli et avoir plus d'outils et de bibliothèques.
Enfin, ma prise personnelle, après un "support" épouvantable de nvidia (nous avons eu un Tesla mort et il n'a pas été changé pendant des mois, alors qu'un client attendait): la flexibilité de sauter avec opencl vaut le risque de performances légèrement inférieures lorsque nvidia est en avance dans le cycle de sortie.