Pull to refresh

Comments 24

1)А CUDA??? Или вы только по тому что поддерживает проц проходились?
2) Почему OpenCL без GPU не обеспечивает производительности? Тут были где-то тесты на хабре, сравнивали с OpenMP. Там были одинаковые производительности показаны.
3) «Страница кода для запуска OpenCL» — ну, если использовать соответствующие обёртки — всего пара строчек)

А так в целом понравилось. Про последние три знал очень мало — почитал теперь)
1) Вы угадали, CPU должен участвовать, за остальным — в блоги к производителям GPU :)
2)Почему не обеспечивает — вопрос сложный, это много от чего зависит. Короткий ответ — накладные расходы. И, правильно, да OpenMP — я же говорю, что и она не обеспечивает :)
3) Смотрела Intel OpenCL SDK (что ж еще? :) ) и оберток не заметила. Если они есть — отлично.
Не знаю… Про производительность это сложный вопрос. На CL есть высокий доступ к вычислительному устройству (в том числе синхронизации различные). При наличие прямых рук производительность там будет не хуже чем на любой другой система использующей процессор. Но мороки будет много.

Обёртки это обычно открытые проекты. Вот тут про некоторые из них написано немного — habrahabr.ru/blogs/hi/124873/
Без них CL ещё более сложен и уныл)
>> Но мороки будет много.
Вот это я и имела в виду. Не факт, что стоит возиться. Я совсем не против OpenCL, но надо быть объективным.

Спасибо за отличный комментарий.
Спасибо за хорошую статью)
Если долго и внимательно смотреть на картинку в начале поста, то она превратится в картинку из этого поста :) — это так и задумано? :)

Отличный обзорный пост! Но его надо продолжить. Тут прозвучала оценка технологий с точки зрения простоты изучения и доступности материалов. Хотелось бы также услышать рекомендации по выбору технологии в зависимости от типов (объемов, сложности, и т.п.) решаемых задач.

Оох… у меня нет времени долго смотреть на картинки :) так что — не знаю.

я знала, что кто-нибудь это обязательно попросит :) Но это проще попросить, чем сделать. Буду думать.
Так это же логично! К примеру, ArBB, судя по твоей замечательной табличке, проигрывает практически всем. Возникает резонный вопрос: зачем-то же его все-таки сделали? Миллионы менеджеров Intel не могут ошибаться! (С)
:)
ArBB — это монстр :), соответственно, ему нужны тяжелые монстровые задачи.
Почему для Clock Plus и TBB нету отдельного жирного подпункта «недостатки» как у остальных, а они упомянуты в тексте? И насколько я понимаю недостаток что не используется GPU относится и к Click Plus, хотя не упомянут в тексте.
спасибо, это не по злому умыслу, а по недосмотру.
Сейчас поправлю.
Но отдельным пунктом недостатки тут выносить не хочется — они уместны в тексте, прсто выделю жирным и добавлю.
Вы вот тоже опечатались clock вместо cilk написали :)
> Вы вот тоже опечатались clock вместо cilk написали :)
Черт :-)
UFO just landed and posted this here
Если мы говорим про работу на CPU, то там все просто. В основе всех библиотек — нативный интерфейс работы с потоками ОС, так что в принципе все библиотеки распараллеливания на CPU «взаимозаменяемы» — то есть, теоретически возможно взять интерфес одной и звать внутри начинку от другой. Но интерфейс каждой из них заточен под внутреннюю структуру (или наоборот:) — то есть, вышеупомянутая штука будет немного медленнее или сильно медленнее, чем это возможно (при вызове быстрейшей библиотеки).
Если же включить сюда и GPU, то нам нужны: код для CPU, специально скомпилированный особым компилятором код для конкретного GPU плюс блок, загружающий этот код на GPU и обрабатывающий потом результаты. Как это можно сделать автоматически, да еще и в рантайме из одного исходного кода, не зная, что куда — я не представляю.
UFO just landed and posted this here
Ну кто-то же должен обернуть, например, каждую итерацию цикла в функцию, потом куда-то ее вынести и скомпилировать отдельной библиотекой, потом надо решить проблему передачи данных туда — выделить для этого память, потом… короче, В итоге мы придем к OpenCL :)
«Страница кода для запуска OpenCL» — это самая вершина айсберга.
Внутри все намного сложнее, зато и возможностей где можно развернуться очень много.
(Сейчас пишу именно на OpenCL'е)
(Выше имелась в виду GPU часть OpenCL'я)
Для полноты картины еще две технологии:

PPL (Parallel Patterns Library)
Это аналог OpenMP от Microsoft, реализован в виде библиотеки средствами языка C++11 (lambda-выражения передаются параметрами функций). Весьма вероятно, что спецификации открыты, но учитывая недостаточную распространенность C++11 и существование OpenMP это дело возможно есть только в vs2010.

Намного более интересна другая вещь — C++ Accelerated Massive Parallelism (C++ AMP). Это замена OpenCL, но с использованием C++, как и PPL — это просто библиотека, которая работает в рамках языка C++11. Это дело недавно демонстрировали в работе, синтаксис немного показали, будет доступно в следующей версии Visual Studio. Важно, что спецификация будет точно открытой.
Некоторые ссылки:
C++ Accelerated Massive Parallelism




Спасибо, интересно. А самое интересное — это как AMP по производительности сравнительно с OpenCL.
Это конечно интересно посмотреть, но реально можно будет сравнить, когда до пользователей дойдет этот инструмент. А вообще рекомендую видео с Herb Sutter — там демонстрируется работа моделирования частиц, GFlops-ы на экран выводятся и на разном железе показано как это все работает, какое ускорение.
Спасибо! Я про такое не знала — Интел велик во всех смыслах :)
А это вы в теории им восхищаетесь или на практике? От этого много чего зависит :)
Sign up to leave a comment.