NVIDIA против AMD: производительность GPGPU

105

Я хотел бы услышать мнение людей, имеющих опыт программирования для обоих. Лично у меня только опыт работы с NVIDIA.

NVIDIA CUDA кажется намного более популярной, чем конкуренты. (Просто посчитав вопросительные теги на этом форуме, 'cuda' превосходит 'opencl' 3: 1, а 'nvidia' превосходит 'ati' 15: 1, а тега для 'ati-stream' нет вообще).

С другой стороны, согласно Википедии, карты ATI / AMD должны иметь гораздо больший потенциал, особенно в расчете на доллар. Самая быстрая карта NVIDIA на рынке на сегодняшний день, GeForce 580 (500 долларов США), имеет производительность 1,6 терафлопс с одинарной точностью. AMD Radeon 6970 можно купить за 370 долларов, а его производительность составляет 2,7 терафлопс. 580 имеет 512 исполнительных блоков на 772 МГц. 6970 имеет 1536 исполнительных блоков на 880 МГц.

Насколько реально это бумажное преимущество AMD над NVIDIA и будет ли оно реализовано в большинстве задач GPGPU? Что происходит с целочисленными задачами?

Юджин Смит
источник
1
Интересный вопрос, но я не уверен, что это действительно связано с программированием ?
Paul R
25
По сути, речь идет о двух языках программирования и практических аспектах их реализации. Так что я бы сказал да.
Юджин Смит,
2
Интересно, насколько актуальными стали ответы на этот вопрос в свете C ++ AMP.
Дмитрий Нестерук,
2
В какой-то момент я изучал, почему майнинг биткойнов настолько медленный на оборудовании NVIDIA по сравнению с AMD. Результирующий поток «AMD Radeon в 3 раза быстрее при майнинге биткойнов (производительность хеширования SHA-256)» содержит информацию, которая может вас заинтересовать. ваш вопрос. forum.nvidia.com/…
Roger Dahl
1
Мне кажется, что этот вопрос приведет либо к сбору мнений, в зависимости от того, с какими прикладными областями респонденты знакомы, какое оборудование и программное обеспечение они используют и т. Д .; или исчерпывающий ответ будет слишком широким, чтобы соответствовать формату SO. Голосование закрыто.
njuffa 02

Ответы:

79

Образно говоря, у ati хороший движок по сравнению с nvidia. Но у nvidia есть машина получше: D

В основном это связано с тем, что nvidia вложила много своих ресурсов (денег и людей) в разработку важных библиотек, необходимых для научных вычислений (BLAS, FFT), а затем снова провела хорошую работу по их продвижению. Это может быть причиной того, что CUDA здесь доминирует над тегами по сравнению с ati (или OpenCL).

Что касается преимущества, реализуемого в задачах GPGPU в целом, оно будет зависеть от других проблем (в зависимости от приложения), таких как пропускная способность памяти, хороший компилятор и, возможно, даже драйвер. nvidia, имеющая более зрелый компилятор, более стабильный драйвер для Linux (Linux, потому что его использование широко распространено в научных вычислениях), склоняет чашу весов в пользу CUDA (по крайней мере, на данный момент).


РЕДАКТИРОВАТЬ 12 января 2013 г.

Прошло два года с тех пор, как я написал этот пост, и, кажется, он до сих пор иногда привлекает внимание. Поэтому я решил уточнить несколько вещей.

  • AMD активизировала свою игру. Теперь у них есть библиотеки BLAS и FFT. Многочисленные сторонние библиотеки также появляются вокруг OpenCL.
  • Intel представила Xeon Phi с поддержкой OpenMP и OpenCL. Он также может использовать существующий код x86. как отмечено в комментариях, ограниченный x86 без SSE на данный момент
  • NVIDIA и CUDA по-прежнему имеют преимущество в диапазоне доступных библиотек. Однако, возможно, они не уделяют столько внимания OpenCL, как раньше.

Короче говоря, OpenCL закрыл пробел за последние два года. На поле появились новые игроки. Но CUDA все еще немного опережает остальных.

Паван Яламанчили
источник
4
Xeon Phi имеет лишь ограниченную возможность выполнения кода x86. Нет MMX / SSE / SSE *.
osgx
@osgx Спасибо. Я должен был упомянуть об этом.
Паван Яламанчили
1
@osgx Но он хорошо работает в DP FP
Csaba Toth
4
Xeon Phi имеет 512-битные регистры и инструкции, что в 4 раза больше, чем поддерживает SSE.
зр.
59

У меня нет особых чувств по поводу CUDA vs. OpenCL; по-видимому, OpenCL - это долгосрочное будущее, просто потому, что он является открытым стандартом.

Но современные карты NVIDIA против ATI для GPGPU (не графической производительности, а GPGPU), о которых я твердо придерживаюсь. И чтобы подвести к этому, я отмечу, что в текущем списке 500 крупнейших кластеров NVIDIA опережает системы AMD 4 до 1, а на gpgpu.org результаты поиска (статьи, ссылки на онлайн-ресурсы и т. Д.) Для NVIDIA по количеству драмов РА 6: 1.

Огромная часть этой разницы - это количество доступной онлайн-информации. Оцените NVIDIA CUDA Zone и AMD GPGPU Developer Central . Количество материала для начинающих разработчиков даже близко не сравнивается. На сайте NVIDIA вы найдете тонны статей - и предоставленный код - от людей, вероятно, работающих над проблемами, подобными вашей. Вы найдете множество онлайн-классов от NVIDIA и других источников, а также очень полезные документы, такие как руководство для разработчиков и т. Д. Доступность бесплатных инструментов разработки - профилировщика, cuda-gdb и т. Д. - в значительной степени меняет путь NVIDIA.

(Редактор: информация в этом абзаце больше не является точной.) И некоторая разница также заключается в аппаратном обеспечении. Карты AMD имеют лучшие характеристики с точки зрения пиковых провалов, но чтобы получить значительную часть этого, вам нужно не только разбить проблему на множество полностью независимых потоковых процессоров, но также необходимо векторизовать каждый рабочий элемент. Учитывая, что код GPGPUing достаточно сложен, этой дополнительной архитектурной сложности достаточно, чтобы сделать или сломать некоторые проекты.

И результатом всего этого является то, что сообщество пользователей NVIDIA продолжает расти. Из трех или четырех групп, которые я знаю, думают о создании кластеров графических процессоров, ни одна из них серьезно не рассматривает карты AMD. А это будет означать, что еще больше групп будут писать статьи, вносить свой код и т.д. на стороне NVIDIA.

Я не фанат NVIDIA; Я бы хотел, чтобы это было не так, и чтобы было две (или больше!) Одинаково привлекательных платформы GPGPU. Конкуренция - это хорошо. Возможно, AMD очень скоро активизирует свою игру - и грядущие продукты Fusion выглядят очень привлекательно. Но давая кому-то совет о том, какие карты купить сегодня и где потратить свое время, прикладывая усилия прямо сейчас, я не могу с чистой совестью сказать, что обе среды разработки одинаково хороши.

Отредактировано для добавления : я полагаю, что приведенное выше является немного эллиптическим с точки зрения ответа на исходный вопрос, поэтому позвольте мне сделать его более явным. Производительность, которую вы можете получить от части оборудования, в идеальном мире с бесконечным доступным временем зависит только от базового оборудования и возможностей языка программирования; но в действительности производительность, которую вы можете получить за фиксированное время, также сильно зависит от инструментов разработки, существующих баз кода сообщества (например, общедоступных библиотек и т. д.). Все эти соображения сильно указывают на NVIDIA.

(Редактор: информация в этом абзаце больше не является точной.) Что касается аппаратного обеспечения, требование векторизации в модулях SIMD в картах AMD также затрудняет достижение бумажной производительности, чем с оборудованием NVIDIA.

Джонатан Дурси
источник
2
Я изучаю OpenCL с помощью ATI Stream, ценю замечание о векторизации :) Хотя я понимаю, что преимущества NVIDIA довольно велики, я просто поддерживаю AMD / ATI и саму компанию, и у меня есть время потратить на создание библиотек: Я думаю, производительность OpenCL повысится. определенно увеличится в ближайшие годы, и я бы хотел, чтобы мой код был готов к этому.
Garet Claborn
Было бы интересно узнать, что вы думаете о AMD GCN и OpenCL 1.2 сейчас (2013), что sim-карты ушли в прошлое. Есть чистая разница?
данно,
3
@Jonathan прошло уже 3 года с тех пор, как вы написали этот замечательный пост. Мне было интересно, с вашей точки зрения, платформа, сообщество и экосистема AMD сократили разрыв.
basilikode
Не столько для видео или карт GPGPU, сколько для самих процессоров, я всегда был поклонником Intel, а не AMD, однако недавно AMD собирается выпустить новый процессор ZEN, в котором их тесты на отметку прожига показывают, что при настройках по умолчанию он сопоставим с лучшими процессорами Intel i7. Их новая технология должна улучшаться по мере того, как она работает, поскольку она распознает шаблоны инструкций. Поэтому я думаю, что большая часть их времени и усилий была потрачена на этот новый процессор, а не на технологию GPU. Но я уверен, что после выпуска процессоров Zen у Intel будет что-то получше.
Фрэнсис Куглер,
17

Основное различие между архитектурами AMD и NVIDIA заключается в том, что AMD оптимизирована для задач, в которых поведение алгоритма может быть определено во время компиляции, а NVIDIA оптимизирована для задач, в которых поведение алгоритма может быть определено только во время выполнения.

AMD имеет относительно простую архитектуру, которая позволяет им тратить больше транзисторов на ALU. Пока проблема может быть полностью определена во время компиляции и успешно сопоставлена ​​с архитектурой в некоторой степени статическим или линейным образом, есть хороший шанс, что AMD сможет запустить алгоритм быстрее, чем NVIDIA.

С другой стороны, компилятор NVIDIA делает меньше анализа во время компиляции. Вместо этого NVIDIA имеет более продвинутую архитектуру, в которой они потратили больше транзисторов на логику, способную обрабатывать динамическое поведение алгоритма, которое проявляется только во время выполнения.

Я считаю, что тот факт, что большинство суперкомпьютеров, использующих графические процессоры, идут с NVIDIA, заключается в том, что тип проблемы, над которой ученые заинтересованы в выполнении вычислений, в целом лучше соответствует архитектуре NVIDIA, чем AMD.

Роджер Даль
источник
2
Благодаря GCN (Graphics Core Next) AMD перешла от SIMD и VLIW к архитектуре, более похожей на NVIDIA (SIMT и более гибкое планирование инструкций).
Александр Дубинский
1
@AleksandrDubinsky: И с аппаратным обеспечением Compute Capability 3.0 NVIDIA приблизилась к AMD, удалив динамическое планирование. Я думаю, что их архитектуры сходятся где-то посередине.
Роджер Даль
1
Я слышал это раньше, но не нашел конкретной информации. Где я могу найти более подробную информацию об этом?
Яков Галка
7

Я сделал итеративное кодирование в OpenCL. И результаты его запуска в NVIDIA и ATI практически совпадают. Почти такая же скорость на картах той же стоимости ($).

В обоих случаях скорости были ~ 10x-30x по сравнению с CPU.

Я не тестировал CUDA, но сомневаюсь, что он может волшебным образом решить мои проблемы с произвольной выборкой из памяти. В настоящее время CUDA и OpenCL более или менее одинаковы, и я вижу больше будущего на OpenCL, чем на CUDA. Основная причина в том, что Intel запускает драйверы с OpenCL для своих процессоров. Это будет огромный прогресс в будущем (запуск 16, 32 или 64 потоков OpenCL в ЦП ДЕЙСТВИТЕЛЬНО быстр и действительно прост для переноса на графический процессор).

DarkZeros
источник
7

Потратив некоторое время на OpenCL для карт GCN после нескольких лет использования CUDA для Fermi и Kepler, я по-прежнему предпочитаю CUDA в качестве языка программирования и выбрал бы оборудование AMD с CUDA, если бы у меня была возможность.

Основные отличия NVIDIA и AMD (OpenCL):

Для AMD:

  • Даже с Максвеллом у NVidia все еще есть более длительные задержки команд, а сложные алгоритмы, вероятно, будут на 10 быстрее на AMD (при условии тех же теоретических Tflops) после простой оптимизации для обоих. Для Kepler VS GCN разрыв достигал 60%. В этом смысле сложнее оптимизировать сложные ядра для NVidia.

  • Дешевые карты.

  • OpenCL является открытым стандартом, и доступны другие поставщики.

Для Nvidia:

  • Имеет линейку оборудования Tesla, которая подходит для надежных серверов с высокими нагрузками.

  • Новый Maxwell намного более энергоэффективен.

  • Компилятор и инструменты стали более продвинутыми. AMD по-прежнему не может реализовать maxregcoutпараметр, поэтому вы можете легко контролировать загрузку на различном оборудовании, а их компилятор имеет множество случайных представлений об оптимальном коде, которые меняются с каждой версией, поэтому вам может потребоваться пересматривать старый код каждые пол. в год, потому что он внезапно стал на 40% медленнее.

На этом этапе, если вашей целью является GPGPU, CUDA - единственный выбор, поскольку opencL с AMD не готов для серверной фермы, а писать эффективный код для AMD значительно сложнее из-за того, что компилятор всегда кажется «в бета-версии». .

Владимир Танкович
источник
Спасибо за свежий ответ. Можете ли вы уточнить, в каких единицах "вероятно будет на 10 быстрее"? Процентов?
Александр Дубинский
Личное мнение: одно время карты ATI были в некотором смысле лучше, чем Nvidia, но не имели поддержки обновления драйверов, и со временем AMD полностью выкупила ATI, тогда как Nvidia остается той же компанией. Кроме того, Nvidia по-прежнему имеет лучшую поддержку обновлений драйверов. Это больше относится к пользовательской стороне карт для производительности с приложениями. Не поймите меня неправильно, обе технологии хороши по-своему, и у обеих есть дешевые карты низкого уровня, а также более дорогие карты высокого класса. Со временем я перешел с ATI на Nvidia. Что касается разработки, у Nvidia гораздо лучший набор функций и программируемый API или библиотека.
Фрэнсис Куглер,
6

Я новичок в GPGPU, но у меня есть некоторый опыт работы в области научных вычислений (кандидат физико-математических наук). Я собираю команду исследователей и хочу использовать GPGPU в своих расчетах. Пришлось выбирать между доступными платформами. Я выбрал Nvidia по нескольким причинам: хотя ATI может быть быстрее на бумаге, у Nvidia более зрелая платформа и больше документации, поэтому можно будет приблизиться к максимальной производительности на этой платформе.

У Nvidia также есть программа поддержки академических исследований, можно подать заявку на поддержку, я только что получил карту TESLA 2075, чему я очень рад. Я не знаю, поддерживает ли ATI или Intel исследования таким образом.

Что я слышал об OpenCL, так это то, что он пытается быть всем сразу, это правда, что ваш код OpenCL будет более переносимым, но он также, вероятно, не будет использовать все возможности любой из платформ. Я бы предпочел узнать немного больше и написать программы, которые лучше используют ресурсы. С TESLA K10, который только что вышел в этом году, Nvidia находится в диапазоне 4,5 терафлопс, поэтому неясно, отстает ли Nvidia ... однако Intel MIC могут оказаться настоящим конкурентом, особенно если им удастся переместить блок GPGPU на материнская плата. Но пока я выбрал Nvidia.

Андраш
источник
Взгляните на ответ @ AndrewCooke, чтобы узнать мнение о поддержке (отсутствия) NVidia.
Александр Дубинский
5

Мой опыт в оценке производительности OpenCL с плавающей запятой склонен в пользу карт NVIDIA. Я работал с парой тестов с плавающей запятой на картах NVIDIA, начиная от 8600M GT и заканчивая GTX 460. Карты NVIDIA стабильно достигают примерно половины теоретического пика с одинарной точностью в этих тестах.
Карты ATI, с которыми я работал, редко достигают пика одинарной точности лучше одной трети. Заметьте, что мой опыт работы с ATI искажен; Мне удалось работать только с одной картой серии 5000. Мой опыт в основном связан с картами серии HD 4000, которые никогда не поддерживались должным образом. Поддержка карт серии HD 5000 намного лучше.

virtuallinux
источник
1

Хочу добавить к дискуссии. Для нас, занимающихся программным обеспечением, мы можем поставить под угрозу чистую производительность одинарной точности в пользу продуктивности, но даже это мне не нужно идти на компромисс, поскольку, как уже указывалось, вы не можете достичь такой производительности на оборудовании ATI с использованием OpenCL, как вы можете достичь. если вы пишете на CUDA на оборудовании NVIDIA.

И да, с объявлением PGI о компиляторе x86 для CUDA не будет никаких веских причин тратить больше времени и ресурсов на написание в OpenCL :)

PS: Мои аргументы могут быть необъективными, поскольку мы делаем почти всю нашу работу над GPGPU на CUDA. У нас есть библиотека обработки изображений / компьютерного зрения CUVI (CUDA for Vision and Imaging), которая ускоряет некоторые основные функции IP / CV на CUDA.

Салман Уль Хак
источник
0

Cuda, безусловно, популярнее OpenCL на сегодняшний день, поскольку он был выпущен на 3 или 4 года раньше OpenCL. С тех пор, как был выпущен OpenCL, Nvidia не внесла особого вклада в язык, поскольку они в значительной степени концентрируются на CUDA. Они даже не выпустили версию openCL 1.2 ни для одного драйвера.

Что касается гетерогенных вычислений, а также портативных устройств, OpenCl наверняка приобретет большую популярность в ближайшем будущем. На данный момент самым крупным разработчиком OpenCL является AMD, это видно на их сайте.

шунья
источник
-2

по моему опыту:

  • если вам нужна максимальная абсолютная производительность, вам нужно увидеть, кто использует последнюю версию оборудования, и использовать их стек (включая последние / бета-версии).

  • если вам нужна лучшая производительность за деньги, вы будете нацелены на карты для геймеров, а не на «профессиональные» карты, а гибкость ориентации на разные платформы отдает предпочтение opencl.

  • в частности, если вы только начинаете, cuda будет более отточенной и иметь больше инструментов и библиотек.

наконец, мое личное мнение, после ужасающей «поддержки» со стороны nvidia (мы получили мертвую теслу, и она не менялась месяцами, пока клиент ждал): гибкость перехода с opencl стоит риска немного меньшей производительности когда nvidia впереди в цикле выпуска.

Эндрю Кук
источник
Аналогичный опыт с «поддержкой» от nvidia: сбой libcuda.so(только с OpenCL, CUDA работает) и никакого ответа от них вообще.
eudoxos 09
1
С нашим дилером у нас нет проблем с заменой мертвого tesla, обычно мы получаем новое оборудование до того, как отправим неисправное, так что я предполагаю, что это проблема не NVidia, а проблема вашего дилера.
Гаэтано Мендола
Я думал, что Tesla супер-надежная. Какой маркетинговый фад.
Александр Дубинский
OpenCL не является переносимым по производительности, поэтому невозможно переходить от одного продукта к другому каждый раз, когда одна компания выпускает новый флагман (без поддержки двух оптимизированных веток кода). Кроме того, поддержка NVIDIA OpenCL отстает на несколько версий и, как я подозреваю, в плохом состоянии.
Александр Дубинский