У нас есть собственное приложение c/asm
, использующее GPU (OpenCL) для больших encrypt/decrypt
данных с определенным методом, и оно просто отлично работает, без проблем. Часть проекта (сеть и распространение) разрабатывается JEE
, и нам просто нужно вызвать собственное приложение/библиотеку.
Мы попытались назвать это разделенным-внешним процессом, используя класс Process
. Проблема в том, что мы не можем управлять приложением (событие, обработчики, потоки и т.д.). Мы также попытались просто переключить код C на Java-код, но производительность умерла. За исключением запуска собственного кода как процесса, я думаю о JNA и JNI, но есть некоторые вопросы.
Вопросы:
- Для лучшего (более быстрого) решения для чтения/записи возможно обмен данными с помощью прямой (неуправляемой) памяти [Java (
ByteBuffer#allocateDirect()
)] как в JNI, так и в JNA? - Возможно ли управлять и обрабатывать процесс по собственному коду и получать доступ к памяти GPU (совместно используемой) через Java-код (OpenCL lib)?
- Как насчет производительности? Является ли JNA быстрее, чем JNI?
У нас есть два кластерных устройства AMD W7000 на Redhat Linux6 x64.