Question

Je voudrais entendre des gens ayant une expérience de codage pour les deux. Moi-même, je n'ai une expérience avec NVIDIA.

NVIDIA CUDA semble être beaucoup plus populaire que la concurrence. (Il suffit de compter les balises question sur ce forum, 'Cuda' surclasse 'OpenCL' 3: 1 et 'nvidia' surclasse '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 devrait avoir beaucoup plus de potentiel, en particulier par dollar. La carte la plus rapide NVIDIA sur le marché d'aujourd'hui, GeForce 580 (500 $), est évalué à 1,6 TFlops simple précision. 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.

Comment réaliste est que l'avantage du papier d'AMD sur NVIDIA, et est-il susceptible d'être réalisé dans la plupart des tâches GPGPU? Qu'advient-il des tâches entières?

Était-ce utile?

La solution

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

Ceci est principalement parce que nvidia a investi une bonne quantité de ses ressources (en argent et les gens) pour développer des bibliothèques importantes nécessaires pour le calcul scientifique (BLAS, FFT), puis un bon travail à nouveau dans la promotion. Cela peut être la raison CUDA domine les balises ici par rapport à ati (ou OpenCL)

En ce qui concerne l'avantage d'être réalisé dans les tâches GPGPU en général, il se retrouverait en fonction d'autres questions (en fonction de l'application) telles 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 parce que, son utilisation est largement répandue dans le calcul scientifique), faire pencher la balance en faveur de CUDA (au moins pour l'instant).


EDIT 12 janvier 2013

Il a été deux ans que je fait ce poste et il semble encore attirer des vues parfois. J'ai donc décidé de clarifier quelques choses

  • AMD a intensifié leur jeu. Ils ont maintenant les deux bibliothèques BLAS et FFT. De nombreuses bibliothèques de tiers sont de culture aussi autour OpenCL.
  • Intel a introduit Xeon Phi dans la nature supportant à la fois OpenMP et OpenCL. Il a également le code x86 existant utilisation de la capacité. comme il est indiqué dans les commentaires, x86 limité sans SSE pour l'instant
  • NVIDIA CUDA et ont encore l'avantage dans la gamme des bibliothèques disponibles. Cependant, ils ne peuvent pas être l'accent sur OpenCL autant qu'ils le faisaient auparavant.

En bref OpenCL a fermé l'écart au cours des deux dernières années. Il y a de nouveaux joueurs sur le terrain. Mais CUDA est toujours en tête du peloton de bits.

Autres conseils

Je n'ai pas de sentiments forts sur CUDA vs OpenCL; probablement OpenCL est l'avenir à long terme, à force d'être une norme ouverte.

Mais NVIDIA courant jour vs cartes ATI pour GPGPU (pas de performances graphiques, mais GPGPU), que je fais ont une forte opinion sur. Et pour le plomb en cela, je vais signaler que sur le liste Top 500 actuel des grands groupes , conduit NVIDIA AMD 4 systèmes à 1, et sur gpgpu.org , des résultats de recherche (documents, liens vers en ligne ressources, etc.) pour NVIDIA plus nombreux que les résultats pour AMD 6: 1.

Une partie énorme de cette différence est la quantité d'information disponible en ligne. Consultez le NVIDIA CUDA Zone contre AMD GPGPU Developer Central. La quantité de choses là-bas pour les développeurs démarrage ne vient même pas proche de la comparaison. Sur place, vous trouverez de NVIDIA tonnes de papiers - et le code contribué - des personnes qui travaillent probablement sur des problèmes tels que le vôtre. Vous trouverez tonnes de cours en ligne, de NVIDIA et d'ailleurs, et des documents très utiles comme les développeurs de guide de bonnes pratiques, etc. La disponibilité des outils gratuits devel - le profileur, le cuda-gdb, etc - incline vers une écrasante majorité de NVIDIA façon.

(éditeur: les informations contenues dans le présent paragraphe ne sont plus exactes.) Et une partie de la différence est aussi matériel. cartes AMDS ont de meilleures spécifications en termes de pic flops, mais pour être en mesure d'obtenir une fraction importante de cela, vous devez non seulement briser votre problème vers le haut sur de nombreux processeurs de flux complètement indépendants, chaque élément de travail doit également être vectorisé. Étant donné que GPGPUing code les est assez dur, que la complexité architecturale supplémentaire est suffisant pour faire ou défaire certains projets.

Et le résultat de tout cela est que la communauté des utilisateurs NVIDIA continue de croître. Sur les trois ou quatre groupes que je connais envisage de construire des clusters GPU, aucun d'entre eux envisagent sérieusement les cartes AMD. Et cela signifie encore plus de groupes rédaction de documents, contribuer au code, etc du côté NVIDIA.

Je ne suis pas Shill NVIDIA; Je voudrais qu'il pas de cette façon, et qu'il y avait deux (ou plus!) Plates-formes GPGPU tout aussi convaincants. La concurrence est bonne. Peut-être que AMD va intensifier son jeu très bientôt - et les produits de fusion à venir chercher très convaincant. Mais pour donner des conseils de quelqu'un de cartes à acheter aujourd'hui, et où passer leur temps à mettre les efforts en ce moment, je ne peux pas en bonne conscience de dire que les deux environnements de développement sont tout aussi bien.

Edité 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 faire un peu plus explicite. Les performances que vous pouvez obtenir à partir d'un morceau de matériel est, dans un monde idéal avec le temps infini disponible, dépend uniquement du matériel sous-jacent et les capacités du langage de programmation; mais en réalité, la quantité de performance que vous pouvez obtenir en un montant fixe de temps investi est également fortement dépendante devel outils, bases de code communautaire existantes (par exemple, des bibliothèques accessibles au public, etc.). Ces considérations tous les points fortement à NVIDIA.

(éditeur:. Les informations contenues dans le présent paragraphe ne sont plus exactes) En termes de matériel, l'exigence de vectorisation au sein des unités SIMD dans les cartes AMD font également obtenir des performances de papier encore plus difficile qu'avec le matériel NVIDIA

.

La principale différence entre les architectures de AMD et NVIDIA est que AMD est optimisé pour des problèmes où le comportement de l'algorithme peut être déterminée à la compilation alors que NVIDIA est optimisé pour des problèmes où le comportement de l'algorithme ne peut être déterminé à Exécuter- temps.

AMD a une architecture relativement simple qui leur permet de passer plus de transistors sur UMM. Tant que le problème peut être entièrement défini lors de la compilation et être mappé avec succès à l'architecture d'une manière quelque peu statique ou linéaire, il y a une bonne chance que AMD sera en mesure d'exécuter l'algorithme plus rapide que NVIDIA.

D'autre part, le compilateur de NVIDIA est en train de faire une analyse moins 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 à l'exécution.

Je crois que le fait que la plupart des supercalculateurs GPU NVIDIA vont avec utilisation est que le type de problème que les scientifiques sont intéressés par des calculs en cours d'exécution sur, la carte générale mieux l'architecture de NVIDIA que

AMD.

J'ai fait quelques itérative de codage en OpenCL. Et les résultats de celui-ci en cours d'exécution dans NVIDIA et ATI, sont à peu près les mêmes. Près de la même vitesse dans les cartes même valeur ($).

Dans les deux cas, les vitesses étaient ~ 10x-30x comparer à une unité centrale de traitement.

Je n'ai pas testé CUDA, mais je doute qu'il pourrait résoudre chercher ma mémoire au hasard problèmes comme par magie. De nos jours, CUDA et OpenCL sont plus ou moins la même chose, et je vois plus d'avenir sur OpenCL que sur CUDA. La raison principale est que Intel lance les pilotes OpenCL pour leurs processeurs. Ce sera un énorme progrès dans l'avenir (en cours d'exécution 16, 32 ou 64 fils de OpenCL dans CPU est vraiment rapide, et vraiment facile à port GPU).

Après avoir passé quelque temps avec OpenCL pour les cartes GCN après quelques années de CUDA pour Fermi et Kepler, je préfère encore CUDA comme un langage de programmation et choisirais 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 toujours commande plus latences et des algorithmes complexes sont susceptibles d'être 10 plus rapide sur AMD (en supposant même Tflops théoriques) après optimisation facile pour les deux. L'écart était de 60% pour Kepler VS GCN. Il est plus difficile d'optimiser les noyaux complexes pour NVidia dans ce sens.

  • Cartes bon marché.

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

Pour Nvidia:

  • A la ligne Tesla de matériel qui convient à de fortes charges de serveur fiables.

  • New Maxwell est bien plus efficace de l'énergie.

  • compilateur et des outils sont beaucoup plus avancés. AMD ne peut toujours pas obtenir à mettre en œuvre paramètre maxregcout, de sorte que vous pouvez facilement contrôler l'occupation sur différents matériels et leur compilateur a beaucoup d'idées au hasard de ce qui est un code optimal que le changement avec chaque version, vous devrez peut-être revoir l'ancien code tous les un demi-année, car il est soudainement devenu 40% plus lent.

À ce stade, si GPGPU est votre objectif, CUDA est le seul choix, puisque OpenCL avec AMD est pas prêt pour 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 version bêta ».

Je suis nouveau à GPGPU mais j'ai une certaine expérience dans le calcul scientifique (doctorat en physique). Je suis en train de constituer une équipe de recherche et je veux aller vers l'utilisation GPGPU pour mes calculs. Je devais choisir entre les plates-formes disponibles. J'ai décidé de Nvidia, pour deux raisons. ATI alors peut-être plus rapide sur le papier, Nvidia a une plate-forme plus mature et plus de documentation il sera possible de se rapprocher de la performance de pointe sur cette plate-forme

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

Ce que j'ai entendu parler OpenCL est qu'il essaie d'être tout à la fois, il est vrai que votre code OpenCL sera plus facile à transporter, mais il est aussi susceptible de ne pas exploiter les capacités de deux plates-formes. Je préfère apprendre un peu plus et les programmes qui utilisent mieux écrire les ressources. Avec le TESLA K10 qui vient de sortir cette année Nvidia est dans les 4,5 téraflops plage donc il est clair que Nvidia est derrière ... mais Intel pourrait se révéler à revenu intermédiaire comme un concurrent réel, surtout si elles réussissent à déplacer l'unité de GPGPU à 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 à privilégier les cartes NVIDIA. J'ai travaillé avec quelques points de repère flottant de points sur les cartes NVIDIA allant de la 8600M GT aux cartes NVIDIA GTX 460. toujours obtenir environ la moitié simple precisino théorique maximum sur ces points de référence.
Les cartes ATI j'ai travaillé atteignent rarement plus d'un tiers de crête simple précision. Notez que mon expérience avec ATI est biaisé; Je n'ai pu travailler avec une carte de la série 5000. Mon expérience est la plupart du temps avec des cartes de la série HD 4000, qui n'a jamais été bien pris en charge. Soutien pour les cartes de la série HD 5000 est beaucoup mieux.

Je voudrais ajouter au débat. Pour nous dans l'entreprise de logiciels, nous pouvons compromettre la performance simple précision brute à la productivité, mais même que je ne les ai pas compromis puisque, comme nous l'avons souligné, vous ne pouvez pas obtenir autant les performances sur le matériel de ATI utilisant OpenCL que vous pouvez réaliser si vous écrivez à CUDA sur le matériel de NVIDIA.

Et oui, avec l'annonce de PGI du compilateur x86 pour CUDA, il n'y aura pas une bonne raison de passer plus de temps et de ressources dans l'écriture OpenCL:)

P.S: Mon argument pourrait être biaisée puisque nous faisons presque tout notre travail GPGPU sur CUDA. Nous avons une image bibliothèque Traitement / Vision par ordinateur Cuvi (CUDA pour Vision et imagerie) qui accélère des activités de base IP / fonctionnalité CV sur CUDA.

Cuda est certainement populaire que OpenCL d'aujourd'hui, comme il a été libéré 3 ou 4 ans avant OpenCL. Depuis OpenCL été a publié, Nvidia n'a pas beaucoup contribué à la langue qu'ils se concentrent beaucoup plus sur CUDA. Ils ont même pas publié la version 1.2 OpenCL pour tout conducteur.

En ce qui concerne l'informatique hétérogène, ainsi que les appareils portatifs comme concernés OpenCL popularité sûrement plus dans un gain proche avenir. A ce jour le plus grand contributeur à OpenCL est AMD, il est visible sur leur site.

dans mon expérience:

  • si vous voulez la meilleure performance absolue, alors vous devez voir qui est sur la dernière itération du matériel, et d'utiliser leur pile (y compris les dernières versions bêta /).

  • si vous voulez la meilleure performance pour l'argent que vous viserons à des cartes de joueur plutôt que les cartes « professionnels » et la flexibilité des plates-formes différentes faveurs ciblant OpenCL.

  • si vous débutez, en particulier, cuda a tendance à être plus poli et ont plus d'outils et de bibliothèques.

enfin, mon point de vue personnel, après épouvantable « soutien » 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é nécessaire pour navire de saut avec OpenCL vaut le risque de performance légèrement plus faible lorsque nvidia sont en avance dans le cycle de sortie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top