Что мы можем сделать с OpenCL?

Я читал об OpenCL и нашел эту строку:

OpenCL предоставляет любому приложению доступ к графическому процессору для неграфических вычислений.

Допустим, мне нужно выполнить операцию с интенсивным использованием ЦП или алгоритм на Java или Clojure (или даже, возможно, запустить Hadoop MapReduce), могу ли я выполнить операцию на графическом процессоре с помощью OpenCL? если да, то зачем мне это делать?

Если у нас есть процессор, зачем использовать GPU?

Каковы сценарии приложений OpenCL?

Я читал, что OpenCL обеспечивает параллельное программирование, означает ли это, что целевое задание будет разделено между процессором и графическим процессором? или только через GPU?


person Chiron    schedule 18.04.2011    source источник
comment
youtube.com/watch?v=4LLbQ7WDh8c   -  person Lu4    schedule 26.04.2011
comment
Почему голосование против в любом случае? При голосовании против, пожалуйста, уточните пару строк, чтобы объяснить это.   -  person Chiron    schedule 26.04.2011
comment
Я проголосовал против, потому что я был расстроен, потратив время на этот вопрос, человек не осознает, что он хотел спросить. Как вы ответите Каковы сценарии приложений OpenCL? так или иначе? Вопрос на 100% глупый... Извините...   -  person Lu4    schedule 26.04.2011


Ответы (3)


OpenCL предоставляет переносимый интерфейс для программирования на параллельных машинах. Программы OpenCL могут выполняться на процессоре или графическом процессоре. Я не встречал технологии, которая позволяла бы одновременно запускать код как на ЦП, так и на ГП.

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

Одним из недостатков графических процессоров является то, что они на самом деле являются машинами-мутантами SIMD (Single Instruction Multiple Data); таким образом, большие группы PE вынуждены выполнять одну и ту же операцию в одно и то же время, но с разными данными. Это ограничение несколько усложняет разработку программы.

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

person virtuallinux    schedule 19.04.2011
comment
"OpenCL programs can be run on the CPU or the GPU." - ...или на любом другом устройстве (поддерживающем OpenCL). - person fridojet; 05.09.2012
comment
@virtuallinux Меня интересует применение OpenCL в контексте Java (или Clojure). - person Alister Lee; 26.07.2013

OpenCL был разработан после того, как ученые обнаружили, что архитектура графического процессора способна очень эффективно выполнять вычисления линейной алгебры.

Задачи линейной алгебры, как правило, очень легко распараллеливаются и довольно просты на отдельных элементах. В большинстве векторных и матричных операций нужны только четыре основные математические функции +, -, / и *. Кроме того, некоторые сравнения для максимальных и минимальных поисков позволяют выполнять большую работу в параллельной среде. Если размер задачи настолько велик, что дополнительное время копирования данных из ОЗУ в GPU и обратно намного меньше, чем прирост скорости GPU, достигается большой прирост производительности.

Методы были разработаны с тех пор. Первые расчеты проводились путем преобразования задач в графические задачи и обратно. OpenCL был разработан, чтобы обеспечить чистый интерфейс для вычислений.

OpenCL подходит для задач, которые можно выполнять параллельно без слишком больших зависимостей и которые требуют больших вычислительных мощностей. Классическими примерами являются линейная алгебра, алгоритмы поиска, преобразования сигналов и 3D-сцен, а также проверки на коллизии.

person Rick-Rainer Ludwig    schedule 20.04.2011
comment
подождите... потребовался ученый, чтобы понять, что архитектура процессора, предназначенная для рендеринга 3D в реальном времени, хорошо справляется с векторными и матричными операциями?? лол :D - person JustDanyul; 10.10.2012
comment
Да вроде. Я помню свою лекцию о высокопроизводительных компьютерах и рассказ о парнях-математиках, которые подключили PS2 для выполнения высокопроизводительных вычислений в Швейцарии. Это было до OpenCL. ;-) Использование для науки было после использования для графики. - person Rick-Rainer Ludwig; 10.10.2012
comment
Я пошутил, приятель :) Графические процессоры в основном представляют собой реализации SIMD, разработанные с одной целью. Невероятно быстрая линейная алгебра. Сказать, что ученый обнаружил, что он хорошо справляется с LA, это все равно, что сказать, что однажды ученый обнаружил, что DSP довольно хорошо справляется с определенными типами цифровой обработки сигналов;) - person JustDanyul; 11.10.2012

Intel определенно не в восторге от openCL. Я не думаю, что смогу установить драйверы в своей Linux-системе, они сделали это таким неудобным. Существуют и другие технологии, такие как чипы цифровой обработки сигналов от Texas Instruments. Я бы использовал openCL, если бы мог. Однако есть некоторые преимущества в использовании, скажем, кластера дешевых плат ARM для довольно большого количества приложений. Простота программирования очень важна, а не что-то гипотетическое, но никогда не используемое на самом деле.

person SeanVN    schedule 08.12.2014