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

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

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

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

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

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

92
задан Frederik 13 April 2010 в 21:53
поделиться

3 ответа

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

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

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

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

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

60
ответ дан 24 November 2019 в 06:33
поделиться

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

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

12
ответ дан 24 November 2019 в 06:33
поделиться

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

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

11
ответ дан 24 November 2019 в 06:33
поделиться
Другие вопросы по тегам:

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