Назад в библиотеку

OpenCL и CUDA. Распространненые заблуждения

Автор: Hindriksen V.

Перевод с англ.: Р.Ю. Никишин

Источник: Hindriksen V. OpenCL и CUDA misconceptions [Электронный ресурс] / Режим доступа: http://streamcomputing.eu/blog/2011-06-22/opencl-vs-cuda-misconceptions/

Введение

В прошлом году я объяснил основные различия между технологиями CUDA и OpenCL. Теперь я хочу, разъяснить некоторые устоявшиеся ложные (частично) истории вокруг, касательно противостояния CUDA и OpenCL. Сегодня часто можно услышать мнения, что одна из технологий лучше другой, когда на самом деле в некоторых аспектах лучше CUDA, в то время, как в других – OpenCL.

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



Как вы знаете еще со школы, не стоит доверять информации из одного источника, не проверив еще несколько! Прочитайте также статьи, которые утверждают и объясняют почему CUDA имеет более лучшее будущее, чем OpenCL.

Тренды

Термин "CUDA" употреблялось в течение долгого времени, как сленг. Например, существуют некоторые ночные клубы с таким названием в Канаде, автомобиль 71-го года выпуска (Плимут, американский производитель автомобилей недалеко от Канады) и документальный фильм (также из Канады). И если обратить внимание на график трендов, созданный Google, заметно, что CUDA (красный цвет) более обширна, чем OpenCL (синий цвет), несмотря, на то, что OpenCL несколько проще, чем CUDA. Ниже представлен график, в котором я установил состояние показателей до 2007-го года в ноль. Ясно видно, что темп развития CUDA за последние 2 года не столь велик, как многие думают. И в конце 2011-го года, как видно, линии развития гораздо ближе, чем хотели бы того NVIDIA. Другими словами, если у вас было ощущение, что CUDA только растет, то относительно OpenCL согласно Google Trends, этот рост не выглядит таким быстрым.



SimplyHired дает сравнительный обзор «CUDA и OpenCL». Хотя CUDA постоянно растет, этот рост относительно OpenCL не велик, и иногда линии даже пересекаются. Интересно, что можно заметить даты пиков развития CUDA. Но я не могу объяснить резкое падение и для CUDA и для OpenCL началась в марте 2011-го года.

Обратите внимание на потенциал R&D (Research&Development) в разработке новых методов.. Я нашел в Yahoo Finance ежегодные расходы на R&D (данные на последний квартал). Для самых важных X86-компаний в OpenCL это:

Становится понятно, что совсем скоро, он не может тягаться с NVIDIA. И даже не потому, что R&D будет вкладывать в OpenCL, а потому, что R&D вкладывает такие суммы в CUDA .

Набор утилит

Ситуация с CUDA и OpenCL напоминает, как итальянцы и французы борются за то, чей язык красивее, в то время как они оба романские языки. Однако есть некоторые различия. CUDA старается быть создавать один пакет для разработчиков, в то время как OpenCL в основном создает языки описания. Для OpenC: SDK, IDE, отладчик и т.д. - от разных производителей - так что если у вас есть Intel SandyBridge и AMD Radeon, вам нужно дополнительное программное обеспечение при работе над оптимизацией производительности ядра на различных аппаратных платформах. На самом деле это не совсем удобно, но это действительно необходимо. Вам нужно дополнительно скачивать это программное обеспечение, но оно доступно, в отличие от того, как чаще всего с этим бывают трудности.

Сегодня VisualStudio поддерживает технологии от NVIDIA, AMD и Intel. XCode OSX предоставляет все необходимео для разработчиков на OpenCL. В прошлом году техническая поддержка для CUDA был лучше, но OpenCL уже догнала конкурента в этом аспекте.

Библиотеки

Где CUDA имеет наибольшее преимущество над OpenCL так это библиотеки. CUDA поддерживает шаблоны , которые предоставляют хорошие возможности. Есть даже бесплатная библиотека Math-Libary,:

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

Одним из примеров бесплатно математического программного обеспечения для OpenCL является ViennaCL , полная библиотека для работы с линейной алгеброй и итерационными методами.

Разнотипное программирование

Хотя OpenCL работает на различных аппаратных платформах, все же программное обеспечение должно быть адаптировано для каждой архитектуры. Это не так сложно: вам нужны различные типы машин, чтобы быть быстрым в различных областях. Если CUDA будет работать, как на процессорах Intel и графических процессорах NVIDIA, возникнет проблема: производительность GPU-оптимизированных ядер не будет быстро работать на CPU - так же, как с OpenCL Вам нужно написать код специально для процессоров. Утверждение, что CUDA лучше, потому что его производительность примерно одинакова на всех частях аппаратной среды, в которой она работает – фальшивка. Она просто не касается проблемы, зависимости концепции программы от аппаратного обеспечения, которую OpenCL пытается решить.

Как вы думаете, почему мы никогда не видели x86-реализация CUDA, которая была разработана в прошлом году? На самом деле недавно она была объявлена, как публичная бета-версия, но все еще без оптимизации производительности и стоимостью 299 $, - в составе комплекта Portland compiler. Оптимизированные версия будет выпущена в конце 2011 года.

Книги

Книги – хорошие помощники в измерении ожидаемой популярности. Но в них также описываются новые технологии (книги, изданные изготовителем программного обеспечения / оборудования).

Поскольку для CUDA существуют больше книг (на английском языке), чем для OpenCL, можно подумать, что CUDA лучше. Недавно было выпущено GPU Gems - наиболее удачное издание. Из свежих выпусков я нашел только "Многоядерные программирования с CUDA и OpenCL" и есть 3 книги, которые рассказывают об OpenCL. Тогда я понял, что британские разработчики CUDA хорошо работают над издательством книг.

4.0> 1.1?

Некоторые считают так: версия 4.0 больше, чем версия 1.1, поэтому CUDA гораздо более развита. Я понимаю, что «версия 1.0» звучит, как что-то новое, а версия «версия 1.1», как что-то немного исправленное. Но на самом деле OpenCL 1.1 уже имеет поддержку облачных вычислений, которая CUDA только добавил в последнее время. И, как уже упоминалось, для CUDA до сих пор нет поддержки других графических карт, которые имели, так как OpenCL 1.0.

Часто говорят, что CUDA имеет 2 года преимущества. Но почти за год до того, как CUDA 1.0 был запущен, ATI уже провели большое количество исследований на GPGPU, прежде чем выбрали OpenCL. Драйвера для CUDA и для AMD OpenCL одинаково мощные. Кроме того, поскольку многие компании вложили свои знания и опыт других продуктов в OpenCL, можно с уверенностью утверждать, что технология намного старше, чем название и номера версии.

Заключение

Более подробно о различиях между CUDA 4.0, OpenCL 1.0 и OpenCL 1.1, читайте в моих следующих статьяхю А данных в этой статье достаточно, чтобы сделать следующий вывод:

CUDA

OpenCL