내 표준에 따라 몇 가지 매우 큰 계산을 수행하는 코드를 개발 중입니다. 단일 CPU 예상을 기반으로 예상 실행 시간은 ~ 10 CPU 년이며 메모리 요구 사항은 ~ 64GB입니다. IO가 거의 필요하지 않습니다. 문제의 코드의 직렬 버전 (C로 작성)은 충분히 잘 작동하고 있으며 코드를 가장 잘 병렬화하는 방법에 대해 생각해 봐야합니다.하이브리드 OpenMP + 혼합 분산 및 공유 메모리 용 OpenMPI?
나는 노드 당 ~ 64GB RAM 및 16 코어의 클러스터에 액세스 할 수 있습니다. 아마도 나는 예를 들어. < = 8 노드. 단일 노드의 스레드간에 메모리를 공유하고 다른 노드에서 별도의 메모리를 사용하고 노드간에 통신을 거의 사용하지 않는 설치를 생각해 봅니다.
필자가 지금까지 읽은 바있는 솔루션은 하이브리드 OpenMP + OpenMPI 디자인을 사용하고 OpenMP를 사용하여 개별 컴퓨팅 노드의 스레드를 관리하며 OpenMPI를 사용하여 노드간에 정보를 전달하는 것입니다 : https://www.rc.colorado.edu/crcdocs/openmpi-openmp
제 질문은이 병렬 처리를 구현하는 "최선의"방법인지 여부입니다. 나는 경험 많은 C 프로그래머이지만 병렬 프로그래밍에 대한 경험이 매우 제한되어있다. (OpenMP로 조금은, OpenMPI에는 아무것도 없다. 과거의 대부분의 일은 당황했다.) 다른 대안으로 OpenMPI를 사용하여 단일 호스트에서 효율적으로 메모리를 공유 할 수 있습니까? 그렇다면 OpenMP를 사용하는 것을 피할 수 있습니다. OpenMP를 사용하면 작업이 약간 더 간단 해집니다 (두 개가 아닌 하나의 API).