Я хотел бы услышать мнение людей, имеющих опыт программирования для обоих. Лично у меня только опыт работы с 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? Что происходит с целочисленными задачами?
Ответы:
Образно говоря, у ati хороший движок по сравнению с nvidia. Но у nvidia есть машина получше: D
В основном это связано с тем, что nvidia вложила много своих ресурсов (денег и людей) в разработку важных библиотек, необходимых для научных вычислений (BLAS, FFT), а затем снова провела хорошую работу по их продвижению. Это может быть причиной того, что CUDA здесь доминирует над тегами по сравнению с ati (или OpenCL).
Что касается преимущества, реализуемого в задачах GPGPU в целом, оно будет зависеть от других проблем (в зависимости от приложения), таких как пропускная способность памяти, хороший компилятор и, возможно, даже драйвер. nvidia, имеющая более зрелый компилятор, более стабильный драйвер для Linux (Linux, потому что его использование широко распространено в научных вычислениях), склоняет чашу весов в пользу CUDA (по крайней мере, на данный момент).
РЕДАКТИРОВАТЬ 12 января 2013 г.
Прошло два года с тех пор, как я написал этот пост, и, кажется, он до сих пор иногда привлекает внимание. Поэтому я решил уточнить несколько вещей.
Короче говоря, OpenCL закрыл пробел за последние два года. На поле появились новые игроки. Но CUDA все еще немного опережает остальных.
источник
У меня нет особых чувств по поводу 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.
источник
Основное различие между архитектурами AMD и NVIDIA заключается в том, что AMD оптимизирована для задач, в которых поведение алгоритма может быть определено во время компиляции, а NVIDIA оптимизирована для задач, в которых поведение алгоритма может быть определено только во время выполнения.
AMD имеет относительно простую архитектуру, которая позволяет им тратить больше транзисторов на ALU. Пока проблема может быть полностью определена во время компиляции и успешно сопоставлена с архитектурой в некоторой степени статическим или линейным образом, есть хороший шанс, что AMD сможет запустить алгоритм быстрее, чем NVIDIA.
С другой стороны, компилятор NVIDIA делает меньше анализа во время компиляции. Вместо этого NVIDIA имеет более продвинутую архитектуру, в которой они потратили больше транзисторов на логику, способную обрабатывать динамическое поведение алгоритма, которое проявляется только во время выполнения.
Я считаю, что тот факт, что большинство суперкомпьютеров, использующих графические процессоры, идут с NVIDIA, заключается в том, что тип проблемы, над которой ученые заинтересованы в выполнении вычислений, в целом лучше соответствует архитектуре NVIDIA, чем AMD.
источник
Я сделал итеративное кодирование в OpenCL. И результаты его запуска в NVIDIA и ATI практически совпадают. Почти такая же скорость на картах той же стоимости ($).
В обоих случаях скорости были ~ 10x-30x по сравнению с CPU.
Я не тестировал CUDA, но сомневаюсь, что он может волшебным образом решить мои проблемы с произвольной выборкой из памяти. В настоящее время CUDA и OpenCL более или менее одинаковы, и я вижу больше будущего на OpenCL, чем на CUDA. Основная причина в том, что Intel запускает драйверы с OpenCL для своих процессоров. Это будет огромный прогресс в будущем (запуск 16, 32 или 64 потоков OpenCL в ЦП ДЕЙСТВИТЕЛЬНО быстр и действительно прост для переноса на графический процессор).
источник
Потратив некоторое время на 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 значительно сложнее из-за того, что компилятор всегда кажется «в бета-версии». .
источник
Я новичок в GPGPU, но у меня есть некоторый опыт работы в области научных вычислений (кандидат физико-математических наук). Я собираю команду исследователей и хочу использовать GPGPU в своих расчетах. Пришлось выбирать между доступными платформами. Я выбрал Nvidia по нескольким причинам: хотя ATI может быть быстрее на бумаге, у Nvidia более зрелая платформа и больше документации, поэтому можно будет приблизиться к максимальной производительности на этой платформе.
У Nvidia также есть программа поддержки академических исследований, можно подать заявку на поддержку, я только что получил карту TESLA 2075, чему я очень рад. Я не знаю, поддерживает ли ATI или Intel исследования таким образом.
Что я слышал об OpenCL, так это то, что он пытается быть всем сразу, это правда, что ваш код OpenCL будет более переносимым, но он также, вероятно, не будет использовать все возможности любой из платформ. Я бы предпочел узнать немного больше и написать программы, которые лучше используют ресурсы. С TESLA K10, который только что вышел в этом году, Nvidia находится в диапазоне 4,5 терафлопс, поэтому неясно, отстает ли Nvidia ... однако Intel MIC могут оказаться настоящим конкурентом, особенно если им удастся переместить блок 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 :)
PS: Мои аргументы могут быть необъективными, поскольку мы делаем почти всю нашу работу над 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 впереди в цикле выпуска.
источник
libcuda.so
(только с OpenCL, CUDA работает) и никакого ответа от них вообще.