OpenMP와 같은 공유 메모리 모드에서 MPI-3.0을 실행하는 방법


14

5 차원 모집단 균형 모델을 수치 적으로 해결하기 위해 코드를 병렬화하고 있습니다. 현재 FORTRAN에 매우 좋은 MPICH2 병렬 코드가 있지만 매개 변수 값을 늘리면 배열이 너무 커서 분산 메모리 모드에서 실행할 수 없습니다.

각 노드에는 2 개의 8 코어 CPU와 128GB RAM이있는 15 개의 노드가있는 클러스터에 액세스 할 수 있습니다. 공유 메모리 모드에서 MPI-3.0을 사용하여 프로그램을 작성하여 각 프로세스가 각 배열의 자체 사본을 생성하지 않도록하고 싶습니다.

클러스터에서 무엇이든 실행할 수 있으려면 우분투를 실행하는 데스크톱에서 테스트해야합니다. 2 개의 8 코어 CPU와 128GB의 RAM이 있다는 점에서 본질적으로 클러스터의 블레이드입니다. 코드를 작성하고 테스트 할 것이므로 Ubuntu 컴퓨터에서 프로그램을 실행하는 데 응답하십시오.

기본 분산 메모리 모드 대신 OpenMP와 같은 공유 메모리 모드에서 MPI-3.0을 실행하는 방법이 있다는 것을 읽었습니다.

질문 :

  1. 코드를 어떻게 변경해야합니까? 같은 다른 MPI 함수에 대한 호출을 추가해야 MPI_WIN_ALLOCATE합니까?

  2. 공유 메모리 모드에서 MPI-3.0을 실행하기 위해 코드를 어떻게 컴파일합니까? 노드가 여러 개인 경우 이것이 다릅니 까?

가능하면 샘플 컴파일 스크립트를 제공하십시오. 또한 GNU 컴파일러 만 있습니다. 내가 사용하는 클러스터는 인텔 컴파일러를 지원하지 않습니다.


1
예, 공유 메모리 시스템에서 MPI를 실행할 수 있어야합니다. 그러나 실제로 프로그래밍되는 방식은 동일합니다. 공유 메모리 시스템과 분산 메모리 시스템 모두 코드가 동일해야합니다. 실행 방법 은 유일한 차이점입니다.
NoseKnows 전체

또한 이것을 테스트하지는 않았지만 mpiexec -n 8 /path/to/application컴퓨터를 8 개의 다른 노드가 있다고 생각하도록 가짜 명령 을 사용하여 코드를 실행할 수 있다고 생각합니다.
NoseKnows 전체

이미 공유 메모리 시스템에서 실행했지만 OpenMP에서와 같이 컴퓨팅 코어가 RAM을 공유하기를 원합니다. 일부 어레이는 6GB이므로 공유 메모리 모드에서 작동하려면 각 노드의 모든 코어가 필요합니다.
Franklin

2
이것은 연구 프로젝트를위한 것입니다. 따라서 문제 크기를 확대해야합니다. 이미 작업 코드가 있으므로 스케일 업을 방지하는 유일한 방법은 필요한 메모리입니다. MPI-3.0이 일방적 인 커뮤니케이션 범주에 추가 된 새로운 통화 기능과 메모리를 공유 할 수 있음을 제안하는 MPI 컨퍼런스의 일부 문서와 파워 포인트를 보았습니다. MPI_WIN_ALLOCATE_SHARE와 같은 기능
Franklin은

2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/…
Franklin은

답변:


0

또한 Stack Overflow에서이 링크를 찾았습니다. 나는 영원히 내 것과 같은 질문을 찾았다 고 맹세하지만 스택 오버플로에서 질문을 검색하는 가장 좋은 방법은 질문을 시작하고 유사한 게시물을 제안하는 것입니다.

어쨌든 여기는 실제로 openmp와 같은 공유 메모리 모드에서 MPI3.0 +를 실행할 수 있다고 말하는 링크입니다. 내가 찾은 다른 출처와 일부는 당신이 그것을 알아낼 수있는 방법이나 설명을 할 수는 없지만 설명 할 수는 없습니다.

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

이 링크에서 여기에 주어진 조언을 따른 후 USE 'mpi_f08'을 코드 상단에 두는 문제가 발생했습니다. 현재 mpi_f08을 사용하기에 충분한 FORTRAN2008 지원이없는 gfortran-4.8을 사용하고 있습니다. 이 링크의 사람은 아마도 인텔 포트란 2008 컴파일러를 사용했을 것입니다. Fortran2003까지 잘 다루는 USE mpi를 사용할 수 있습니다. 그러나 Fortran 2003에 MPI_WIN_ALLOCATE_SHARED와 같은 원격 메모리 액세스 기능을 사용하는 데 필요한 Type () 함수가 있다고 생각하지 않으므로 FORTRAN2008 없이는 사용할 수 없습니다. 그러나 실제로는 사실을 분명히 말할 수있는 충분한 리소스가 없지만 내가 찾은 것은 그것을 제안합니다.


1
MPI_Win_allocate_shared를 세 개의 Fortran 인터페이스 모두와 함께 사용할 수 있습니다. 또한 Fortran 2003 ISO_C_BINDING 및 C 인터페이스를 사용하여 직접 작성할 수 있습니다.
Jeff

Fortran에서 RMA를 사용하기 위해 Type ()이 필요한 이유를 알려주십시오. 나는 그런 제한이 없다. RMA는 수년간 F77과 함께 사용되었습니다.
Jeff
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.