Я собираюсь начать проект с использованием параллельной обработки, и мне интересно, буду ли я получать больше оптимизаций от использования потоков Java или от программирования Cuda? Кроме того, я не специалист по любой схеме, какой маршрут будет иметь меньшую кривую обучения?Темы Java Threads или Cuda Threads
ответ
Короткий ответ: Это зависит от проблемы, которую вы пытаетесь решить.
Длинный ответ:
Есть некоторые очень существенные различия между параллельной обработкой в Java и Cuda. Большая разница заключается в том, как рабочие места упаковываются и выполняются. В Java вы собираетесь написать программу, которая загружает данные, а затем вы будете использовать что-то вроде ExecutorService для выполнения ваших задач. В Cuda вы загрузите данные, но затем напишите фрагмент кода, который фактически выполняет выполнение (в Cuda это называется ядром). Звучит похоже, не так ли? Но не совсем. В Cuda есть дополнительные накладные расходы. Графический процессор имеет ограниченную память, поэтому ваше программное обеспечение должно сначала загружать данные, а затем упаковывать их как часть ядра, а затем передавать их на GPU, который затем сохраняет данные и выполняет вычисления. Затем ваше приложение должно получить результаты. Это очень хорошо работает для некоторых вычислительных задач, но на самом деле неэффективно для других вычислительных задач. Все зависит от того, чего вы пытаетесь достичь.
Графический процессор полезен, если у вас есть простая задача, которую вы должны выполнять много раз (тысячи или более). Вы можете получить доступ к графическому процессору с помощью OpenCL. Оболочка Java для этого http://www.jocl.org/ Другие - http://jogamp.org/jocl/www/ и http://code.google.com/p/nativelibs4java/wiki/OpenCL, но я не пробовал их.
Процессор намного лучше подходит для программирования общего назначения. Вы можете быть удивлены, сколько вы можете сделать в одном потоке, не говоря уже о Socket со многими ядрами.
OpenGL больше не рекомендуется для общего программирования графических процессоров ... – harrism
Я бы не рекомендовал GPU для общих вычислений. Можете ли вы предложить лучшие библиотеки для Java? –
- 1. cuda threads and blocks
- 2. Threads syncronization in CUDA
- 3. Green threads and Native threads in java
- 4. Java Threads vs OS Threads
- 5. Как работает Java Threads
- 6. #blocks, #threads
- 7. Dangling Threads in Java
- 8. Java Threads in Real
- 9. Android Studio Java Threads
- 10. Java Threads «synchronized»
- 11. linux top show java threads?
- 12. Java threads question
- 13. Взрыв памяти Java Threads
- 14. java daemon threads
- 15. java threads: производитель - потребитель
- 16. Java Swing + Threads
- 17. Java Threads: synchronized blocks
- 18. Java Threads and Synchronize
- 19. Понять Java Threads
- 20. Java Threads: Automatic Termination
- 21. Java Threads - NullPointerException
- 22. Java ClassCastException with threads
- 23. Java Threads Busy Waiting
- 24. pauseing threads in java
- 25. Benchmarks for threads java
- 26. Java Threads release правильно
- 27. java threads synchronization
- 28. java threads альтернатива синхронизации
- 29. Java Interlocked Threads
- 30. Java Threads not Running
Я не знаю Cuda, но когда я думаю, что Java и параллельная обработка, я думаю, Scala и/или Akka. – theglauber
какое приложение? Какая платформа? В чем проблема? Каков масштаб работы? – yadab
Я также не знаю, как получить доступ к GPU из JVM. – Luciano