Запускаем Java-программы на GPU

На Github выложен исходный код компилятора Rootbeer, с помощью которого можно почти любой Java-код запустить на графическом процессоре, а также легко разделить Java-программу на фрагменты для CPU/GPU.

Компилятор опубликован под лицензией MIT, он прошёл тщательное тестирование и вполне пригоден для использования. По словам автора, это самый продвинутый транслятор байткода Java на платформу CUDA. Судя по всему, OpenCL тоже поддерживается.

Автор программы — преподаватель Сиракузского университета Фил Пратт-Желига (Phil Pratt-Szeliga).

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

Если в Java-программе есть параллелизм, то Rootbeer обнаружит его автоматически. В этом случае на специфических задачах прибавка производительности может составить десятки раз. Например, во время тестирования умножение плотных матриц 4096х4096 на Java с Rootbeer ускорилось в 67 раз, преобразование Фурье (не FFT) — в 54 раза.

Rootbeer использует инструмент для статического анализа и преобразования Java-байткода Soot.

Список неподдерживаемых функций Java в компиляторе: сборщик мусора, нативные методы, отражения (рефлексия), динамический вызов методов.

Анатолий Ализар

 
Версия для печатиВерсия для печати

Рубрики: 

  • 1
  • 2
  • 3
  • 4
  • 5
Всего голосов: 0
Заметили ошибку? Выделите ее мышкой и нажмите Ctrl+Enter!

Читайте также

 

Комментарии

Аватар пользователя mental

Вопрос один: ЗАЧЕМ??? Запускать на GPU уже что угодно можно, но непонятно, кому это надо.

Как зачем? - Одно время были математические библиотеки на Fotran. 

Потом их переписки на Java. 

Теперь эти библиотеки можно ускорить!

Аватар пользователя Al

mental - Это не первое применение видюх не по прямому назначению. Обусловлено более быстрой видеопамятью и мощным специализированным процессором.