NVIDIA vs AMD: производительность GPGPU - PullRequest
103 голосов
/ 09 января 2011

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

Ответы [ 10 ]

79 голосов
/ 09 января 2011

Образно говоря, у 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 все еще немного впереди.

59 голосов
/ 10 января 2011

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

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

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

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

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

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

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

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

17 голосов
/ 24 марта 2012

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

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

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

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

7 голосов
/ 26 октября 2014

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

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

Для AMD:

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

  • Недорогие карты.

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

Для Nvidia:

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

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

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

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

7 голосов
/ 27 мая 2011

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

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

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

6 голосов
/ 04 сентября 2012

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

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

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

5 голосов
/ 09 января 2011

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

1 голос
/ 10 января 2011

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

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

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

0 голосов
/ 07 апреля 2013

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

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

0 голосов
/ 28 февраля 2012

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

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

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

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

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

...