Какая работа извлекает выгоду из OpenCL

В первую очередь:

  • Я хорошо знаю, что OpenCL волшебно не делает все быстрее
  • Я хорошо знаю, что OpenCL имеет ограничения

Таким образом, теперь к моему вопросу, я используюсь, чтобы сделать другое научное программирование использования вычислений. Некоторые вещи, с которыми я работаю, довольно интенсивны в отношении сложности и количества вычислений. ТАКИМ ОБРАЗОМ, я задавался вопросом, возможно, я мог ускорить вещи bu использование OpenCL.

Так, что я хотел бы получить известие от Вас всех, ответы на некоторые следующие [премия для ссылок]:

*Какие проблемы вычислений/алгоритмов/общих подходит для OpenCL

*Каковы общие руководящие принципы для определения, если некоторый конкретный код извлек бы выгоду миграцией к OpenCL?

С уважением

6
задан Daniel 19 May 2010 в 22:32
поделиться

3 ответа

Я думаю, это хороший вопрос, и это то, что я пытаюсь выяснить для своего собственного исследования.

В настоящее время существуют сильные ограничения на возможности GPU, поскольку они требуют, чтобы отдельные потоки выполняли точно такой же код на разных наборах данных, т.е. задача / алгоритм должны быть "параллельными данным". Очевидные проблемы с параллельными данными включают моделирование методом Монте-Карло (когда многие модели MC выполняются параллельно), обработку изображений и, менее очевидно, моделирование молекулярной динамики. Численное интегрирование (Монте-Карло или иное) - еще одно научное приложение, которое можно легко перенести на GPU.

Другое основное ограничение заключается в том, что память на поток очень ограничена, поэтому для эффективного выполнения на GPU алгоритм должен иметь высокую арифметическую интенсивность. Необходимым, но недостаточным условием для того, чтобы алгоритм стал кандидатом на выполнение на GPU, является то, что на CPU алгоритм должен быть сильно привязан к процессору, а не к памяти.

Я считаю, что со временем все больше и больше проблем будут подтасовываться так, чтобы их можно было решать с помощью этой парадигмы, просто потому, что можно получить такой большой выигрыш в производительности, но самые низко висящие плоды - это явно параллельные проблемы с данными. Массовое многоядерное программирование, на мой взгляд, будет становиться все более важным и распространенным в научных кругах в течение следующего десятилетия.

Я немного поиграл с этим, и мне удалось впихнуть проблему обратного следования в подходящий формат для выполнения на GPU (используя CUDA). К вашему сведению, я описал это в докладе: http://lattice.complex.unimelb.edu.au/home/sites/default/files/mydocuments/clisby_cuda0509.pdf

9
ответ дан 8 December 2019 в 17:19
поделиться

Он хорошо подходит для задач, которые могут быть выражены как несколько небольших программ, работающих параллельно над большими кусками простых структур данных.

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

3
ответ дан 8 December 2019 в 17:19
поделиться

Что касается алгоритмов, то они должны быть параллельными данным. То есть данные одного набора не должны иметь зависимостей от предыдущих наборов. Чтобы провести аналогию, рассмотрим сортировку вставкой, где один элемент сравнивается с другими элементами, чтобы найти его правильное место. Это "не" параллельность данных, поскольку на каждом шаге требуется доступ к N-1 элементам. Теперь, если вам нужна сортировка с помощью openCL, вам придется реализовать битоновую сортировку, которая является типом сортировочной сети.

Даже если они параллельны по данным, возникает вопрос компромисса между FLOPS и задержками в памяти. Если каждые данные должны извлекаться из глобальной памяти, то улучшение производительности может быть незначительным. Задержки памяти GPU намного выше, чем у CPU. Для борьбы с этим в GPU есть локальная память, которую можно использовать.

2
ответ дан 8 December 2019 в 17:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: