Java에서의 GPGPU/CUDA/OpenCL에 대한 최선의 접근법
GPGPU(General-Purpose Computing on Graphics Processing Unit)는 GPU의 성능을 모든 종류의 컴퓨팅에 활용할 수 있는 매우 매력적인 개념입니다.
GPGPU를 이미지 처리, 입자, 고속 기하학 연산에 사용하고 싶습니다.
현재 이 분야의 경쟁자는 CUDA와 OpenCL인 것 같습니다.알고 싶습니다.
- Windows/Mac의 Java에서 OpenCL을 사용할 수 있습니까?
- OpenCL/CUDA에 접속하는 라이브러리 방법은 무엇입니까?
- 유고 인민군을 직접 사용하는 것이 선택 사항입니까?
- 내가 뭐 잊은 거라도 있나?
실제 경험/사례/전쟁이야기라면 감사히 생각합니다.
AFIK, JavaCL/OpenCL4Java는 현재 모든 플랫폼에서 사용할 수 있는 유일한 OpenCL 바인딩입니다(MacOS X, FreeBSD, Linux, Windows, Solaris, 모두 JNA 사용으로 인텔 32, 64비트 및 ppc 버전).
적어도 Mac 및 Windows에서는 Java Web Start에서 정상적으로 실행되는 데모가 있습니다(Linux에서 랜덤 크래시를 방지하려면 이 파티클 데모와 같은 Wiki 페이지를 참조하십시오).
또한 몇 가지 유틸리티(GPGPU 난수 생성, 기본 병렬 감소, 선형 대수)와 스칼라 DSL도 포함되어 있습니다.
마지막으로 사용 가능한 가장 오래된 바인딩(2009년 6월 이후)으로 액티브한 사용자 커뮤니티가 있습니다.
(면책자:저는 JavaCL의 저자:-)입니다.
Aparapi도 고려할 수 있습니다.Java에서 코드를 쓸 수 있으며 실행 시 바이트 코드를 OpenCL로 변환하려고 합니다.
완전 공개저는 Aparapi 개발자입니다.
CUDA는 C를 수정한 것으로 CUDA 커널을 작성하려면 C로 코드화한 후 Nvidia의 CUDA 컴파일러를 사용하여 실행 가능한 형식으로 컴파일해야 합니다.생성된 네이티브 코드를 JNI를 사용하여 Java와 연결할 수 있습니다.따라서 기술적으로 Java에서 커널 코드를 작성할 수 없습니다.일반 메모리/디바이스 관리를 위한 cuda의 apis와 CUDA 및 JNI 랩으로 구현된 Java 메서드를 제공하는 JCUDA http://www.jcuda.de/jcuda/JCuda.html,이 있습니다(FFT, 일부 선형 대수법).기타 등)
반면 OpenCL은 API일 뿐입니다.OpenCL 커널은 API에 전달되는 일반 문자열이므로 Java의 OpenCL을 사용하여 자체 커널을 지정할 수 있어야 합니다.java용 OpenCL 바인딩은 http://www.jocl.org/에서 찾을 수 있습니다.
JOCL을 사용하고 있는데 매우 만족하고 있습니다.
CUDA에 대한 OpenCL의 주요 단점은 이용 가능한 라이브러리(Thrust, CUDP 등)가 부족하다는 것입니다.단, CUDA는 OpenCL로 쉽게 이식할 수 있으며, 이러한 라이브러리(알고리즘, 전략 등)가 어떻게 동작하는지를 보면 많은 것을 배울 수 있기 때문에 매우 좋습니다.
늦은 건 알지만 이걸 보세요.https://github.com/pcpratts/rootbeer1
저는 그것을 사용해 본 적은 없지만, 다른 솔루션보다 훨씬 사용하기 쉬운 것 같습니다.
프로젝트 페이지에서:
루트비어는 CUDA 또는 OpenCL Java Language Bindings보다 고급입니다.바인딩을 사용하면 개발자는 개체의 복잡한 그래프를 원시 유형의 배열로 직렬화해야 합니다.Rootbeer를 사용하면 이 작업이 자동으로 수행됩니다.또한 언어 바인딩을 사용하는 경우 개발자는 GPU 커널을 CUDA 또는 OpenCL로 작성해야 합니다.루트비어를 사용하면 Java Bytecode의 정적 분석이 (Sult를 사용하여) 수행되고 CUDA 코드가 자동으로 생성됩니다.
Linux, Mac 및 Windows에서 작동하는 jogamp.org의 JOCL도 추천할 수 있습니다.예를 들어 CONRAD는 JOCL과 함께 OpenCL을 많이 사용합니다.
이미지 처리 또는 기하학적 연산을 수행할 경우 GPU를 지원하는 선형 대수 라이브러리를 사용할 수 있습니다(예: CUDA).DeepLearning4J가 구축된 CUDA GPU를 지원하는 선형 알그레브라 ND4J witch를 제안합니다.이것에 의해, CUDA와 직접 거래할 필요는 없고, c의 낮은 레벨의 코드를 사용할 필요가 있습니다.또, DL4J로 이미지에 관한 작업을 더 하고 싶은 경우는, 컨볼루션등의 특정의 화상 처리 조작에 액세스 할 수 있습니다.
CUDA4J API를 보실 수 있습니다.
http://sett.com/gpgpu/the-cuda4j-api
언급URL : https://stackoverflow.com/questions/2633483/best-approach-for-gpgpu-cuda-opencl-in-java
'programing' 카테고리의 다른 글
| pip을 사용하여 특정 패키지 버전 설치 (0) | 2022.11.24 |
|---|---|
| Amazon EC2, InnoDB: mmap(x바이트) 실패, errno 12로 인한 mysql 중단 시작 (0) | 2022.11.24 |
| MySQL 임시 테이블 vs where in 절 (0) | 2022.11.24 |
| Java String이 모든 공백 공간이 아님을 확인하려면 어떻게 해야 합니까? (0) | 2022.11.24 |
| Python db-api: fetchone vs fetchmany vs fetchall (0) | 2022.11.24 |