문제

C ++에서 구현 된 프로그램이 있으며 이제 MPI 지원을 추가하려고합니다. 네임 스페이스 MPI 및 모든 것이있는 C ++에 대한 MPI 바인딩이 있습니다.

제 경우에는 클러스터에 병렬화 된 프로세스가되기에 적합한 특정 객체가 있습니다.

내 질문은 다음과 같습니다.

  • 누구든지 전에 이런 일을 한 적이 있습니까? 이것을 구현하는 방법에 대한 조언을 얻을 수 있습니까?
  • 생성자 내부에서 MPI를 초기화하려면 어떻게합니까? 클래스 생성자 내부에서 MPI를 초기화 한 후 모든 중간 통화도 병렬화됩니까?

예를 들어:

MyClass obj;

x = x; //this will be parallelized ?
onj.calc();

y = x++; //this will be parallelized ?

z = obj.result();
도움이 되었습니까?

해결책

나는 정말로 그것을 집어 올리는 것이 좋습니다 Gropp MPI 책, 그것은 실제로 기본 MPI에 도움이됩니다!

다른 팁

MPI는 자동으로 아무것도 병렬화하지 않으며 노드간에 데이터를 전송하기위한 인터페이스 만 제공합니다. 코드는 각 노드에서 독립적으로 일반적인 순차적 코드로 작성되며 가끔씩 다른 노드로 데이터를 보내거나 다른 노드에서 데이터를 수신하려고합니다.

오래된 실에 chiming, 나는 OpenMPI를 발견하고 부스트 :: MPI 함께 일하는 것이 좋습니다. 라이브러리의 객체 지향 디자인은 약간 볼트로 고정 될 수 있지만, 특히 많은 유형의 자동 서식화와 수집/감소 및 기능을 수집하기위한 다소 확장 가능한 인터페이스와 함께 순수한 MPI보다 작업하는 것이 훨씬 더 좋았습니다. 사용자 유형.

배경 정보로 :

MPI를 사용하는 대부분의 응용 프로그램은 Fortran 또는 C로 작성됩니다. MPI의 모든 주요 구현은 C로 작성됩니다.

MPI C ++ 바인딩에 대한 지원은 기껏해야 스케치입니다. 일부 MPI 데이터 유형을 사용할 수 없습니다 (예 : MPI_Double), I/O에 문제가 있으며 헤더가 소스 파일에 포함 된 순서가 있습니다. MPI 라이브러리가 C로 제작되고 응용 프로그램이 Fortran 또는 C ++로 구축 된 경우 이름 관리 문제가 있습니다. MPICH2 FAQ에는 이러한 문제를 해결하는 데 도움이되는 항목이 있습니다. 나는 Open MPI에 익숙하지 않으며 Fortran과 C ++의 특별한 행동입니다.

구체적인 질문 :

MPI가 아닌 것이 무엇인지, 그리고 응용 프로그램 코드가 MPI 라이브러리와 어떻게 상호 작용 해야하는지에 대한 근본적인 잘못 이해가 있다고 생각합니다.

MPI를 사용한 병렬 프로그래밍 MPI로 프로그래밍하는 학습에 대한 훌륭한 참조입니다. 코드 예제는 C에 있으며 대부분의 MPI API는 예에 표시됩니다. 이 책을 통해 병렬 프로그래밍이 무엇인지 배우는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top