Лучший подход для GPGPU/CUDA/OpenCL в Java?

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

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

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

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

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

85
задан 14 апр. '10 в 0:53
источник поделиться
8 ответов

AFAIK, JavaCL/OpenCL4Java - единственная привязка OpenCL, доступная на всех платформах прямо сейчас (включая MacOS X, FreeBSD, Linux, Windows, Solaris, все в вариантах Intel 32, 64 бит и ppc, благодаря использованию JNA).

В нем есть демонстрации, которые на самом деле отлично работают с Java Web Start, по крайней мере, на Mac и Windows (чтобы избежать случайных сбоев в Linux, см. эта страница wiki, например Particles Demo.

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

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

(Отказ от ответственности: Я JavaCL автор: -))

55
ответ дан 22 июля '10 в 11:47
источник

Вы также можете рассмотреть Aparapi http://aparapi.googlecode.com. Он позволяет писать код на Java и будет пытаться преобразовать байт-код в OpenCL во время выполнения.

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

32
ответ дан 06 окт. '11 в 19:36
источник

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

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

11
ответ дан 15 апр. '10 в 15:32
источник

Я использую JOCL, и я очень доволен этим.

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

11
ответ дан 06 мая '10 в 17:35
источник

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

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

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

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

7
ответ дан 15 авг. '12 в 13:25
источник

Я также могу рекомендовать JOCL от jogamp.org, работает на Linux, Mac и Windows. CONRAD, например, использует OpenCL в комбинации с JOCL.

2
ответ дан 18 дек. '14 в 23:31
источник

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

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

0
ответ дан 11 нояб. '15 в 4:32
источник

Следуя последним достижениям Google, я полагаю, что tensorflow - лучший подход к вычислению на GPU вообще, а не OpenCL только. Tensorflow поддерживает вычисления OpenCL и CUDA с одним и тем же API.

-2
ответ дан 12 мая '17 в 13:33
источник

Другие вопросы по меткам или Задайте вопрос