НВИДИА против АМД: производительность графических процессоров



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



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



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



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

501   10  

10 ответов:

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

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

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


EDIT12 января 2013

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я не тестировал CUDA, но я сомневаюсь, что он может решить мои проблемы с случайной памятью волшебным образом. В настоящее время CUDA и OpenCL более или менее одинаковы, и я вижу больше будущего на OpenCL, чем на CUDA. Основная причина заключается в том, что Intel запускает драйверы с OpenCL для своих процессоров. Это будет огромный прогресс в будущем (запуск 16, 32 или 64 потоков OpenCL в CPU очень быстро и очень легко переносится на GPU).

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

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

для AMD:

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

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

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

Для Nvidia:

  • имеет линию оборудования Тесла которая соответствующая для надежных высоких нагрузок сервера.

  • новый Максвелл путь больше силы эффективный.

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

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

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

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

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

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

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

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

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

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

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

мой опыт:

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

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

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

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

Comments

    Ничего не найдено.