Что лучше cuda или opencl
Перейти к содержимому

Что лучше cuda или opencl

  • автор:

CUDA vs OpenCL

Решил попробовать CUDA.
Были большие ожидания, мол должен быть клевый язык с фишками, плюшками, интеграцией в VisualStudio.
Но с 2015 где update > 2 не работает, хм, ладно поставил 2013.
Отладка не заработала из коробки ( может ее и нет вообще
И еще был дико возмущен необходимостью писать вот такой код:

__global__ void addKernel(double3 *c, const double3 *a, const double3 *b)

О новое тысячелетие! О космические корабли!((
После этого мираж о суперудобной куде растворился совсем(
Теперь смотрю в сторону брутального OpenCL, уж если брутализировать то шоб прям соусем !

Какие у CUDA нынче плюшки по сравнению с OpenCL?
Пока только одну нашел — студия подсвечивает ошибки в коде
Что еще?

#1
5:59, 12 авг 2016

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

#2
10:15, 12 авг 2016

Arxon
> Какие у CUDA нынче плюшки по сравнению с OpenCL?
Практически никаких 🙂 Возможно может наличие более удобных тулзов. Но Это все спорный момент, для AMD есть CodeXL. С учетом того что возможно новые разработки будут писаться на OpenCL и он на некоторых задачах OpenCL на AMD рвет CUDA на nVidia. Для будущего я бы выбрал OpenCL поддержка всех видеокарт в отличие от nVidia это больший плюс.

#3
12:03, 12 авг 2016

Andrey
> Практически никаких 🙂

Ну да, никаких Tesla в природе не существует. У CUDA R&D поддержка в разы больше, чем у AMD.

> Для будущего я бы выбрал OpenCL поддержка всех видеокарт в отличие от nVidia
> это больший плюс.

CL не только для GPU может быть

#4
12:06, 12 авг 2016

Andrey
> рвет

#5
14:06, 12 авг 2016

CUDA не может компилировать исходники в рантайме, может что-то и добавили, но весьма геморно.
OpenCL не поддерживает перегрузку функций и этот жуткий синтаксис кастов: convert_float, convert_int2 и тд.
Это мои основные претензии, у CUDA вроде с отладкой получше, с интеграцией с GL, с поддержкой фич в отличие от OpenCL на nVidia, но я выбрал OpenCL.
Кстати, OpenCL программы компилируются заметно дольше чем GLSL, возможно они лучше оптимизируются, либо так медленно перегоняются в CUDA ))

#6
21:18, 12 авг 2016

innuendo
> У CUDA R&D поддержка в разы больше, чем у AMD.
неа. У АМД Никак не меньше, и дальше еще будет лучше.
/A\
> OpenCL программы компилируются заметно дольше чем GLSL, возможно они лучше оптимизируются
про оптмизацию врядли, А насчет времени компиляции, то тут предположительно сложность шейдеров иная.

#7
22:11, 12 авг 2016

Andrey
> неа. У АМД Никак не меньше, и дальше еще будет лучше.

У них есть аналог Tesla ?

Напомни, что лично ты делал на compute shaders ?

#8
22:34, 12 авг 2016

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

#9
22:50, 12 авг 2016

Ты что делать хочешь ? Лучше знать оба

#10
23:22, 12 авг 2016

Я вроде слышал, что CUDA быстрее, чем OpenGL и всякие вычислительные кластеры с GPGPU делают с NVidia’вскими карточками.

Но меня возмущает то, что она совместима только с одной IDE, причём её старой версии. Из-за этого я принципиально не буду использовать CUDA без крайней необходимости. Можно конечно наверное и из консоли, но не хочу так красноглазить. На винде это слишком неудобно.

#11
1:49, 13 авг 2016

innuendo
>>Ты что делать хочешь ?
Image processing на сервере

>>Лучше знать оба
Нет смысла знать даже один, главное знать как железка устроена и писать удобно код.

#12
18:38, 13 авг 2016

Arxon
> > > что делать хочешь ?
> Image processing на сервере

Любое железо или только Nvidia ?

Andrey
> про оптмизацию врядли, А насчет времени компиляции, то тут предположительно
> сложность шейдеров иная.

Напомни, что лично ты делал на compute shaders ?

#13
21:34, 13 авг 2016

innuendo
>>Любое железо или только Nvidia ?
Скорее всего нвидиа будет, на амазоне другого нету
Но не в сервере дело, дело в моем личном удобстве при разработке, так как пока нефига не работает расчет и чтоб проверять различные гипотезы не хочется ждать многие минуты. Сейчас не до оптимизаций, брутфорс бы немного скрасил процесс.

Забегая вперед. Есть ли у CUDA движения в сторону Inter Process Communication, всякие темы с шарингом памяти, семфорами?
Копирование туда сюда не впечатляет. Для текущей задачи это совсем не нужно, просто интересно как быстро к гомогенной архитектуре движутся.

#14
10:50, 16 авг 2016

Arxon
> Забегая вперед. Есть ли у CUDA движения в сторону Inter Process Communication,
> всякие темы с шарингом памяти, семфорами?
Ты рамсы попутал? Какие к черту семафоры? На ГПУ используюися барьеры памяти.
Лично я пишу на OpenCl + CodeXL, т.к. на студии уже давно не программирую. В CUDA есть только один плюс — интеграция в студию, где есть встроенный отладчик gpu

Сравнение OpenCL с CUDA, GLSL и OpenMP

image

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

В этом топике приведено сравнение OpenCL с CUDA и шейдерами для GPU, а также с OpenMP для CPU.

Тестирование проводилось на задаче N-тел. Она хорошо ложится на параллельную архитектуру, сложность задачи растёт как O(N 2 ), где N — число тел.

Задача

В качестве тестовой была выбрана задача симуляции эволюции системы частиц.
На скриншотах (они кликабельны) видна задача N точечных зарядов в статическом магнитном поле. По вычислительной сложности она ничем не отличается от классической задачи N тел (разве что картинки не такие красивые).

Во время проведения замеров вывод на экран был отключен, а FPS означает число итераций в секунду (каждая итерация — это следующий шаг в эволюции системы).

Результаты

GPU

Код на GLSL и CUDA для этой задачи был уже написан сотрудниками ННГУ.

NVidia Quadro FX5600

image

Версия драйвера 197.45

CUDA обгоняет OpenCL приблизительно на 13%. При этом, если оценивать теоретически возможную производительность для этой задачи для данной архитектуры, реализация на CUDA достигает её.
(В работе A Performance Comparison of CUDA and OpenCL говорится о том, что производительность ядра OpenCL проигрывает CUDA от 13% до 63% )
Несмотря на то, что тесты проводились на карточке серии Quadro, понятно, что обычный GeForce 8800 GTS или GeForce 250 GTS дадут схожие результаты (все три карточки основаны на чипе G92).

Radeon HD4890

image

ATI Stream SDK версия 2.01

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

CPU

Код с использованием OpenMP был скомпилирован при помощи компиляторов от Intel и Microsoft.
Компания Intel не выпустила своих драйверов для запуска кода OpenCL на центральном процессоре, поэтому был использован ATI Stream SDK.

Intel Core2Duo E8200

image

ATI Stream SDK версия 2.01

Код на OpenMP, скомпилированный при помощи MS VC++ имеет практически идентичную производительность с OpenCL.
Это ещё при том, что Intel не выпустил своего драйвера для интерпретации OpenCL, и используется драйвер от AMD.

Компилятор от Intel поступил не совсем «честно» он полностью развернул основной цикл программы, повторив его где-то 8k раз (число частиц было задано константой в коде) и получив семикратный прирост производительности также благодаря использованию SSE инструкций. Но победителей, конечно, не судят.

Что характерно, на моём стареньком AMD Athlon 3800+ код тоже запустился, но таких выдающихся результатов, как на Intel, конечно, ждать не приходится.

Заключение

  • На данный момент не до конца доработаны драйверы и случаются такие ситуации, когда что-то есть в стандарте, а использовать в реальном коде нельзя. (Например поддержка текстур в программах на OpenCL появилась у карточек ATI только с серии HD5xxx).
  • Драйверы генерируют не оптимальный код для данной конкретной платформы, в этом плане производителям есть куда развиваться.
  • Писать на OpenCL почти то же самое, что писать на CUDA Driver API.
  • Вроде бы больше возможностей, но не всегда удобно. Появляется нечто вроде хвоста строк в 300, который обязательно тянется за любой вашей программой. Это плата за то, что ваш код может быть запущен практически на любом устройстве, предназначенном для параллельных вычислений.
  • Уже сейчас программы на OpenCL показывают достойную производительность по сравнению с конкурентами и могут успешно использоваться для параллельных вычислений общего назначения. А для настоящего джедая, согласитесь, 300 строк кода не помеха, тем более их можно вынести в отдельную библиотеку.
Спасибы

Писали код, проводили замеры и интерпретировали результаты также аспирант ННГУ ВМК Боголепов Денис и студент НГТУ ИРИТ Захаров Максим.
Спасибо им.

В чем различие между OpenGL, DirectX, OpenCL, CUDA?

сразу прошу прощение за очень глупый вопрос, но чем отличается OpenСL от DirectX, OpenGL, CUDA? почему есть сравнение DirectX с OpenGL и OpenCL с CUDA, но нет сравнения допустим OpenCL и DirectX? я догадываюсь что они очень разные, но как я понимаю они все позволяют обращаться к видеокарте и ускорять с помощью нее вычисления. Хотелось бы узнать различие между этими технологиями и что за что отвечает?

Отслеживать
задан 21 апр 2020 в 15:47
Илья Антипанов Илья Антипанов
111 1 1 серебряный знак 9 9 бронзовых знаков
А как вы собираетесь сравнивать сладкое и зелёное?
21 апр 2020 в 16:02

@ArchDemon По идее они не являются «сладким или зеленым», по факту это API для доступа к ресурсам видеокарты. Если бы один обращался к видеокарте, второй к звуковой карте, третий к сетевым параметрам тогда я бы понял что нельзя их сравнивать, но тут все они обращаются к видеокарте и делают на ней просчеты, значит сравнить их можно по скорости работы и применению в разных сферах и где какая технология предпочтительней.

21 апр 2020 в 16:05

Для начала: OpenGL и DirectX предназначены для работы с графикой, а CUDA и OpenCL — для распараллеливания на GPU. Т.е эти внутри этих пар их можно как-то сравнивать, но между — нет.

21 апр 2020 в 16:06

То что сладкое и зелёное принадлежит моему яблоку, ещё не значит эти характеристики можно сравнивать между собой

21 апр 2020 в 16:07

@ArchDemon можно ли с помощью каждой технологии сделать подсчеты с графикой? Если да, то вполне можно сравнить или все таки расписать в чем принципиальное их отличие, где используется одна технология, а где другая. Если обратиться к википедии и сравнить directX и openCL то область применения у них попадает на графику, встает вопрос когда рационально использовать одно а когда другое.

21 апр 2020 в 16:15

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

OpenGL vs DirectX

Это два движка для отрисовки графики.

DirectX — это только для Windows, с C++ и интерфейсами, с закрытым кодом.

OpenGL открытый, есть для многих разных платформ. Внутри код написан в Си стиле.

В принципе любая игра может быть написана на любой из платформ. Да, на них можно сделать расчеты, но неудобно.

OpenCL vs CUDA

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

CUDA — разработка от Nvidia. Закрытые исходники, только для Nvidia. OpenCL — открытое, для разнообразных видеокарт.

Писать на них игры можно, конечно, но эти библиотеки (или это все таки фреймворки?) не предназначены для отрисовки графики.

Что лучше OpenCl (AMD) или CUDA (Nvidia) для рендеринга и обработки видео?

Собрал себе домой новый комп (i7-4770, 32gb ram), но вот видюху пока не купил, не подобрал. Комп планируется использовать для:
— Photoshop (ускоряется через OpenCL, но тут и CPU скорее всего хватит)
— After Effects (ускоряется CUDA для raytracing рендера, не понял, ускоряются ли эффекты/фильтры)
— Cinema 4d (встроенный рендер только CPU, сторонние, которые прикручиваются к C4D есть как OpenCl, так и CUDA, с конкретным рендером не определился еще)
— e-on Vue (только CPU, но вдруг кто знает чего-то про GPU рендер для него)

На видюху у меня осталось около 13т.р. (можно чуть больше). Хочется найти наиболее универсальное решение не только для вышеописанных приложений, но и родственных, н-р, Premiere Pro (вроде бы OpenCl его ускоряет лучше), для других 3d. Мало ли что поменяется.

Nvidia вроде как универсальнее, есть и CUDA и OpenCL. Но, насколько я нагуглил, OpenCl на Nvidia сильно сливает AMD.
Хотя, где-то мне попадалось что это из-за недостаточно оптимизированного драйвера/компилятора. Можно ли надеяться что в будущем OpenCL на Nvidia будет лучше? Еще вычитал что для рендера на видюхе необходимо чтобы вся сцена влезла в ее память, поэтому надо чтобы памяти было не меньше 4 ГБ. Карточки от AMD при таком условии получаются подешевле.

Что посоветуете?
Спасибо!

  • Вопрос задан более трёх лет назад
  • 24343 просмотра

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *