Вопрос

Вычисления общего назначения на графических процессорах (ГПГПУ) — очень привлекательная концепция использования мощности графического процессора для любых вычислений.

Мне бы хотелось использовать GPGPU для обработки изображений, частиц и быстрых геометрических операций.

На данный момент кажется, что двумя претендентами на эту роль являются CUDA и OpenCL.Я хотел бы знать:

  • Можно ли использовать OpenCL с Java на Windows/Mac?
  • Каковы способы взаимодействия библиотек с OpenCL/CUDA?
  • Можно ли использовать JNA напрямую?
  • Я что-то забыл?

Приветствуется любой реальный опыт/примеры/военные истории.

Это было полезно?

Решение

НАСКОЛЬКО МНЕ ИЗВЕСТНО, Javacl / opencl4java Это единственное привязка OpenCL, которое доступно на всех платформах прямо сейчас (включая MacOS X, FreeBSD, Linux, Windows, Solaris, все в Intel 32, 64 бита и варианты PPC, благодаря его использованию Jna.).

Он имеет демонстрацию, которые на самом деле работают штрафом из веб-сайта Java, как минимум на Mac и Windows (чтобы избежать случайных аварий на Linux, см. Эта вики, такой как это Демо-частицы.

Он также поставляется с несколькими коммунальными услугами (GPGPU случайное образование числа, основное параллельное снижение, линейная алгебра) и Scala DSL.

Наконец, это старые привязки доступны (с июня 2009 года) и У него есть активное сообщество пользователей.

(Отказ от ответственности: я Javacl.Автор :-))

Другие советы

Вы также можете рассмотреть Афарапи. Отказ Это позволяет вам записывать свой код в Java и попытается преобразовать Bytecode в OpenCL во время выполнения.

Полное раскрытие. Я разработчик Апарапи.

Ну, CUDA — это модификация C, чтобы написать ядро ​​CUDA, вам нужно написать код на C, а затем скомпилировать его в исполняемую форму с помощью компилятора CUDA от nvidia.Созданный собственный код затем можно было связать с Java с помощью JNI.Итак, технически вы не можете писать код ядра на Java.Есть JCUDA http://www.jcuda.de/jcuda/JCuda.html, он предоставляет вам API cuda для общего управления памятью/устройствами и некоторые методы Java, которые реализованы в CUDA и обертке JNI (FFT, некоторые методы линейной алгебры..и т. д. и т. п.).

С другой стороны, OpenCL — это всего лишь API.Ядра OpenCL представляют собой простые строки, передаваемые в API, поэтому, используя OpenCL из Java, вы сможете указать свои собственные ядра.Привязку OpenCL для Java можно найти здесь. http://www.jocl.org/.

Я использовал жоокл, и я очень доволен этим.

Основным недостатком OpenCL над CUDA (по крайней мере для меня) является отсутствие доступных библиотек (тяга, CUDPP и т. Д.). Однако куда может быть легко перенесена в OpenCl, и, посмотрев на то, как эти библиотеки работают (алгоритмы, стратегии и т. Д.) На самом деле очень хороши, когда вы многому научитесь с ним.

Я знаю, что уже поздно, но взгляните на это: https://github.com/pcpratts/rootbeer1

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

Со страницы проекта:

Rootbeer более продвинут, чем CUDA или OpenCL Java Language Bindings.С помощью привязок разработчик должен сериализовать сложные графы объектов в массивы примитивных типов.С Rootbeer это делается автоматически.Также при привязке к языку разработчик должен написать ядро ​​графического процессора на CUDA или OpenCL.С помощью Rootbeer выполняется статический анализ байт-кода Java (с использованием Soot), и автоматически генерируется код CUDA.

Я также могу порекомендовать JoCl jogamp.org., работает на Linux, Mac и Windows. Конрад, Например, использует сильно OpenCL в сочетании с jocl.

Если вы хотите выполнить некоторые обработки изображений или геометрические операции, вы можете захотеть библиотеку линейной алгебры с поддержкой GPU (например, CUDA). Я бы предположил, что ND4J ведьма является линейным альгебром с поддержкой CUDA GPU, на которой построен deepleperning4j. С этим вам не нужно иметь дело с CUDA напрямую и иметь низкий уровень кода в C. Кроме того, если вы хотите сделать больше вещей с изображением с DL4J, у вас будет доступ к определенным операциям обработки изображений, таких как свертка.

Вы можете взглянуть на API Cuda4J

http://sett.com/gpgpu/the-cuda4j-api.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top