2012-02-09 3 views
1

Я собираюсь начать проект с использованием параллельной обработки, и мне интересно, буду ли я получать больше оптимизаций от использования потоков Java или от программирования Cuda? Кроме того, я не специалист по любой схеме, какой маршрут будет иметь меньшую кривую обучения?Темы Java Threads или Cuda Threads

+0

Я не знаю Cuda, но когда я думаю, что Java и параллельная обработка, я думаю, Scala и/или Akka. – theglauber

+3

какое приложение? Какая платформа? В чем проблема? Каков масштаб работы? – yadab

+0

Я также не знаю, как получить доступ к GPU из JVM. – Luciano

ответ

4

Короткий ответ: Это зависит от проблемы, которую вы пытаетесь решить.

Длинный ответ:

Есть некоторые очень существенные различия между параллельной обработкой в ​​Java и Cuda. Большая разница заключается в том, как рабочие места упаковываются и выполняются. В Java вы собираетесь написать программу, которая загружает данные, а затем вы будете использовать что-то вроде ExecutorService для выполнения ваших задач. В Cuda вы загрузите данные, но затем напишите фрагмент кода, который фактически выполняет выполнение (в Cuda это называется ядром). Звучит похоже, не так ли? Но не совсем. В Cuda есть дополнительные накладные расходы. Графический процессор имеет ограниченную память, поэтому ваше программное обеспечение должно сначала загружать данные, а затем упаковывать их как часть ядра, а затем передавать их на GPU, который затем сохраняет данные и выполняет вычисления. Затем ваше приложение должно получить результаты. Это очень хорошо работает для некоторых вычислительных задач, но на самом деле неэффективно для других вычислительных задач. Все зависит от того, чего вы пытаетесь достичь.

0

Графический процессор полезен, если у вас есть простая задача, которую вы должны выполнять много раз (тысячи или более). Вы можете получить доступ к графическому процессору с помощью OpenCL. Оболочка Java для этого http://www.jocl.org/ Другие - http://jogamp.org/jocl/www/ и http://code.google.com/p/nativelibs4java/wiki/OpenCL, но я не пробовал их.

Процессор намного лучше подходит для программирования общего назначения. Вы можете быть удивлены, сколько вы можете сделать в одном потоке, не говоря уже о Socket со многими ядрами.

+0

OpenGL больше не рекомендуется для общего программирования графических процессоров ... – harrism

+0

Я бы не рекомендовал GPU для общих вычислений. Можете ли вы предложить лучшие библиотеки для Java? –