병렬 처리를 사용하여 프로젝트를 시작하려고합니다. Java 쓰레드 또는 Cuda 프로그래밍을 사용하여 더 많은 최적화를 얻을 수 있을지 궁금합니다. 또한 나는 어느 쪽의 계획이라도 전문가가 아니다, 어느 길이 더 작은 학습 곡선을 가질 것이냐?Java 쓰레드 또는 Cuda 쓰레드
답변
짧은 답변 : 해결하려는 문제에 따라 다릅니다.
긴 대답 :
Java 및 CUDA는 병렬 처리 사이의 아주 근본적인 차이가 있습니다. 큰 차이점은 작업을 패키지화하고 실행하는 방법입니다. Java에서는 데이터를로드하는 프로그램을 작성한 다음 ExecutorService와 같은 것을 사용하여 태스크를 실행합니다. Cuda에서는 데이터를로드하지만 실제로 실행을 수행하는 코드를 작성합니다 (Cuda에서는 커널이라고 함). 비슷한 소리예요? 그러나 정말로. Cuda에 관련된 추가 메모리 오버 헤드가 있습니다. GPU는 메모리가 제한되어있어 소프트웨어가 먼저 데이터를로드 한 다음 커널의 일부로 패키징 한 다음 GPU로 보내 데이터를 저장하고 계산을 수행합니다. 그런 다음 응용 프로그램에서 결과를 검색해야합니다. 이것은 일부 계산 문제에 대해서는 정말 잘 작동하지만 다른 계산 문제에는 실제로 비효율적입니다. 그것은 모두 당신이 성취하고자하는 것에 달려 있습니다.
GPU는 여러 번 (수천 또는 그 이상) 수행해야하는 간단한 작업이있는 경우 유용합니다. OpenCL을 사용하여 GPU에 액세스 할 수 있습니다. 이것에 대한 자바 래퍼는 http://www.jocl.org/입니다. 다른 사람은 http://jogamp.org/jocl/www/과 http://code.google.com/p/nativelibs4java/wiki/OpenCL입니다.하지만 시도하지는 않았습니다.
CPU가 범용 프로그래밍에 훨씬 좋습니다. 많은 코어가있는 Socket에서 혼자서 쓰지 않고 얼마나 많은 일을 처리 할 수 있는지 놀랄 것입니다.
OpenGL은 GPU의 범용 프로그래밍에 더 이상 권장되지 않습니다 ... – harrism
GPU를 일반용 컴퓨팅에 사용하지 않는 것이 좋습니다. Java에 대한 더 나은 라이브러리를 제안 할 수 있습니까? –
- 1. OS에서 Java 쓰레드 죽이기
- 2. 쓰레드 생성
- 3. 커스텀 쓰레드?
- 4. 쓰레드 우선, 쓰레드 마지막 및 "도트"형식
- 5. 클로저에 쓰레드 안전 팝?
- 6. Clojure의 쓰레드 된 코멘트
- 7. 안드로이드, 쓰레드 사용
- 8. Qt 크로스 쓰레드 콜
- 9. Grails/java 단일 리소스 풀링 쓰레드 큐
- 10. Hibernate SessionFactory 쓰레드 안전
- 11. 소켓과 멀티 쓰레드 (안드로이드)
- 12. 안드로이드 쓰레드 클래스 재사용
- 13. 안드로이드 - 쓰레드 추적하기
- 14. 서블릿 다중 쓰레드
- 15. 쓰레드 확인 방법
- 16. 파이썬과 GNU 포터블 쓰레드
- 17. 파이썬 멀티 쓰레드
- 18. 안드로이드 쓰레드 안전 SharedPreferences
- 19. 파이썬 다중 쓰레드 크롤러
- 20. Java에서 쓰레드 매달기
- 21. 안드로이드 쓰레드 큐
- 22. 3 안드로이드 쓰레드, 구조체
- 23. 레일 옵저버에서 쓰레드 사용하기
- 24. 자바 스레드 멀티 쓰레드
- 25. SQLAlchemy에서 쓰레드 세션이 만료됩니까?
- 26. 쓰레드 잠금 설명
- 27. 리눅스의 쓰레드 제어 블록
- 28. 슬리핑 쓰레드 리소스에 접근하기
- 29. 자바 쓰레드 개념
- 30. MFC 프로젝트의 쓰레드 문제
Cuda는 잘 모르겠지만 자바와 병렬 처리를 생각할 때 Scala와 Akka를 생각합니다. – theglauber
어떤 종류의 응용 프로그램입니까? 어떤 플랫폼? 문제가있는 도메인은 무엇입니까? 관련된 업무의 규모는 무엇입니까? – yadab
또한 JVM에서 GPU에 액세스 할 수 있다는 사실을 알지 못합니다. – Luciano