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.