2012-02-09 7 views
1

병렬 처리를 사용하여 프로젝트를 시작하려고합니다. Java 쓰레드 또는 Cuda 프로그래밍을 사용하여 더 많은 최적화를 얻을 수 있을지 궁금합니다. 또한 나는 어느 쪽의 계획이라도 전문가가 아니다, 어느 길이 더 작은 학습 곡선을 가질 것이냐?Java 쓰레드 또는 Cuda 쓰레드

+0

Cuda는 잘 모르겠지만 자바와 병렬 처리를 생각할 때 Scala와 Akka를 생각합니다. – theglauber

+3

어떤 종류의 응용 프로그램입니까? 어떤 플랫폼? 문제가있는 도메인은 무엇입니까? 관련된 업무의 규모는 무엇입니까? – yadab

+0

또한 JVM에서 GPU에 액세스 할 수 있다는 사실을 알지 못합니다. – Luciano

답변

4

짧은 답변 : 해결하려는 문제에 따라 다릅니다.

긴 대답 :

Java 및 CUDA는 병렬 처리 사이의 아주 근본적인 차이가 있습니다. 큰 차이점은 작업을 패키지화하고 실행하는 방법입니다. Java에서는 데이터를로드하는 프로그램을 작성한 다음 ExecutorService와 같은 것을 사용하여 태스크를 실행합니다. Cuda에서는 데이터를로드하지만 실제로 실행을 수행하는 코드를 작성합니다 (Cuda에서는 커널이라고 함). 비슷한 소리예요? 그러나 정말로. Cuda에 관련된 추가 메모리 오버 헤드가 있습니다. GPU는 메모리가 제한되어있어 소프트웨어가 먼저 데이터를로드 한 다음 커널의 일부로 패키징 한 다음 GPU로 보내 데이터를 저장하고 계산을 수행합니다. 그런 다음 응용 프로그램에서 결과를 검색해야합니다. 이것은 일부 계산 문제에 대해서는 정말 잘 작동하지만 다른 계산 문제에는 실제로 비효율적입니다. 그것은 모두 당신이 성취하고자하는 것에 달려 있습니다.

0

GPU는 여러 번 (수천 또는 그 이상) 수행해야하는 간단한 작업이있는 경우 유용합니다. OpenCL을 사용하여 GPU에 액세스 할 수 있습니다. 이것에 대한 자바 래퍼는 http://www.jocl.org/입니다. 다른 사람은 http://jogamp.org/jocl/www/http://code.google.com/p/nativelibs4java/wiki/OpenCL입니다.하지만 시도하지는 않았습니다.

CPU가 범용 프로그래밍에 훨씬 좋습니다. 많은 코어가있는 Socket에서 혼자서 쓰지 않고 얼마나 많은 일을 처리 할 수 ​​있는지 놀랄 것입니다.

+0

OpenGL은 GPU의 범용 프로그래밍에 더 이상 권장되지 않습니다 ... – harrism

+0

GPU를 일반용 컴퓨팅에 사용하지 않는 것이 좋습니다. Java에 대한 더 나은 라이브러리를 제안 할 수 있습니까? –