내 인바이론먼트의 원칙
1. 성능이 필요한 영역에서 정해진 리밋까지 저수준에서 코딩이 가능하다.
(소프트웨어 수준의 리밋)
정해진 리밋 : openMP, openCL, CUDA, MPI, vector instruction intrinsic 혹은 fence operation과 같은 asm
2. 성능이 필요한 영역에서 정해진 리밋까지 병렬화가 가능하다.
(하드웨어 수준의 리밋)
정해진 리밋 : 클러스터, gpu 를 활용해서 연산이 가능.
3. 병렬화를 통한 가속이 필요 없는 영역에서는 Java 생태계를 이용할 것.
사용할 메인 자바 프레임워크: 스프링, 카프카
4. (이부분은 나도 모름) 데이터를 저장하는 방식에 있어서 무궁무진한 가능성이 보장되어야함.
그중에서도 얘넨 꼭 필요하다 : HDFS, MySQL
5. 함수형 프로그래밍 언어가 필요한 영역에서 함수형 언어를 사용가능해야함.
대충 요약하자면
1. MPI, CUDA 를 비롯한 C코드
2. 자바 스프링 코드
3. 스칼라코드 (나머지 영역)
4. 기타
이렇게 세가지 언어를 혼합해서 쓸거같음.
1 2 3 을 조율하는 방법이 뭐가 있을까?
내 욕심은 디폴트는 1, 2, 3이 서로 다른 프로세스로 분리되어서 각 클러스터에 나뉘어 담기고
프로세스간 소켓통신으로 조율하는것임.
근데 좀 더 욕심을 내서
1과 2는 JNI
1과 3도 JNI
2와 3은 JVM 호환성 을 이용해서 한 프로세스 내에서도 코드를 합칠수 있지 않을까 생각되는데,
JNI 어떰?
글구 CUDA같은건 Cuda 컴파일러가 필요한데 JNI가 먹힘?
파이토치가 파이썬이랑 CUDA를 연결한거보면
뭔가 CUDA랑 스칼라를 연결시킬 방법도 있을거같은데
글이 너무 길어져서 요약
:
Cuda C랑 스프링이랑 스칼라랑 섞어쓰는거 잘 working함? 좋은 생각임? 셋을 섞어쓰는 최적의 방법은?
1. 성능이 필요한 영역에서 정해진 리밋까지 저수준에서 코딩이 가능하다.
(소프트웨어 수준의 리밋)
정해진 리밋 : openMP, openCL, CUDA, MPI, vector instruction intrinsic 혹은 fence operation과 같은 asm
2. 성능이 필요한 영역에서 정해진 리밋까지 병렬화가 가능하다.
(하드웨어 수준의 리밋)
정해진 리밋 : 클러스터, gpu 를 활용해서 연산이 가능.
3. 병렬화를 통한 가속이 필요 없는 영역에서는 Java 생태계를 이용할 것.
사용할 메인 자바 프레임워크: 스프링, 카프카
4. (이부분은 나도 모름) 데이터를 저장하는 방식에 있어서 무궁무진한 가능성이 보장되어야함.
그중에서도 얘넨 꼭 필요하다 : HDFS, MySQL
5. 함수형 프로그래밍 언어가 필요한 영역에서 함수형 언어를 사용가능해야함.
대충 요약하자면
1. MPI, CUDA 를 비롯한 C코드
2. 자바 스프링 코드
3. 스칼라코드 (나머지 영역)
4. 기타
이렇게 세가지 언어를 혼합해서 쓸거같음.
1 2 3 을 조율하는 방법이 뭐가 있을까?
내 욕심은 디폴트는 1, 2, 3이 서로 다른 프로세스로 분리되어서 각 클러스터에 나뉘어 담기고
프로세스간 소켓통신으로 조율하는것임.
근데 좀 더 욕심을 내서
1과 2는 JNI
1과 3도 JNI
2와 3은 JVM 호환성 을 이용해서 한 프로세스 내에서도 코드를 합칠수 있지 않을까 생각되는데,
JNI 어떰?
글구 CUDA같은건 Cuda 컴파일러가 필요한데 JNI가 먹힘?
파이토치가 파이썬이랑 CUDA를 연결한거보면
뭔가 CUDA랑 스칼라를 연결시킬 방법도 있을거같은데
글이 너무 길어져서 요약
:
Cuda C랑 스프링이랑 스칼라랑 섞어쓰는거 잘 working함? 좋은 생각임? 셋을 섞어쓰는 최적의 방법은?
뭐야 결론은 jni충임?
JNI로 스칼라코드랑 쿠다코드 합치기 쌉가능? 스칼라 안에 C 집어넣는건 그럭저럭 가능해보이는데 C안에 스칼라는 어케집어넣어?
딱
딱국추