Какие рабочие преимущества от OpenCL - PullRequest
6 голосов
/ 20 мая 2010

Прежде всего:

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

Так что теперь на мой вопрос, я привык делать разные научные расчеты с использованием программирования. Некоторые из вещей, с которыми я работаю, довольно интенсивны с точки зрения сложности и количества вычислений. Так что мне было интересно, может быть, я мог бы ускорить процесс, используя OpenCL.

Итак, я бы хотел услышать от вас ответы на некоторые из следующих [бонусов за ссылки]:

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

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

Привет

Ответы [ 3 ]

9 голосов
/ 20 мая 2010

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

В настоящее время существуют серьезные ограничения в отношении возможностей графических процессоров, поскольку они требуют, чтобы отдельные потоки выполняли один и тот же код на разных наборах данных, т. Е. Проблема / алгоритм должны быть «параллельными данным». Очевидно, что проблемы параллельности данных включают симуляции Монте-Карло (где много симуляций MC выполняются параллельно), обработку изображений и менее очевидные симуляции молекулярной динамики. Числовая интеграция (Монте-Карло или другое) - это еще одно научное приложение, которое можно легко перенести на работу на графическом процессоре.

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

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

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

3 голосов
/ 20 мая 2010

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

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

2 голосов
/ 07 июня 2010

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

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

...