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

Я бы хотел услышать от людей с опытом кодирования для обоих. Я сам имею опыт работы с 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 в отношении AMD по сравнению с NVIDIA, и возможно ли, что это будет реализовано в большинстве задач GPGPU? Что происходит с целыми задачами?

Ответ 1

Метафорически говоря, 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 все еще немного опережает пакет.

Ответ 2

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

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

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

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

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

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Для AMD:

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

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

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

Для Nvidia:

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

  • Новый Максвелл более эффективен.

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

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

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

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

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

Ответ 10

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

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

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

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

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