2013-09-27 2 views
4

MPI 기본 데이터 유형은 MPI_BYTE 및 MPI_PACKED를 제외하고는 호스트 언어의 데이터 유형에 해당합니다. 내 질문은 그 MPI 기본 데이터 형식을 사용하면 어떤 이점이 있습니까? 또는 이와 동등하게, 왜 호스트 언어 데이터 유형을 사용하는 것이 좋지 않은가? MPI 데이터 유형의 이점은 무엇입니까?

나는 슬라이드 (31)에서 윌리엄 Gropp 등으로 튜토리얼을 읽고 "왜 데이터 유형", 그것은 말한다 : 모든 데이터 유형으로 표시되어

  • 때문에, MPI를 구현이 매우으로 시스템에서 프로세스 간 통신을 지원할 수 서로 다른 메모리 표현과 기본 데이터 유형의 길이 (이기종 통신). 메모리의 데이터의
  • 지정 응용 지향 레이아웃
    • 특별한 하드웨어를 사용할 수있게 구현 메모리 대 메모리 카피를 감소 (분산은/수집) 때
사용할

(http://www.mcs.anl.gov/research/projects/mpi/tutorial/mpiintro/ppframe.htm)

설명을 이해하지 못합니다. 첫째, 기본 데이터 유형이 다른 경우 기본 MPI 데이터 유형이 기본 언어의 기본 데이터 유형 (기본 데이터 유형)에 해당하므로 MPI 데이터 유형을 사용하면 차이를 해결할 수없는 이유는 없습니다. 둘째로, 왜 메모리에서의 어플리케이션 지향적 인 레이아웃의 레이아웃은 언급 된 두 가지 이점을 가지고 있습니까?

본인의 원래 질문에 답하는 모든 대답이 허용됩니다. 어떤 대답이라도 윌리엄 그 프프 (William Gropp)의 설명에 대한 제 질문은 해결됩니다.

답변

2

짧은 대답은이 시스템이 MPI에 강력한 입력을 추가한다는 것입니다.

긴 대답은 MPI 데이터 유형의 목적은 MPI 기능에 그들이 무엇을 하는지를 알려주는 것입니다. 예를 들어, little-endian 머신에서 big-endian 머신으로 int를 보내면 MPI는 바이트 순서 변환을 수행 할 수 있습니다. 또 다른 공통점은 MPI가 MPI_DOUBLE의 크기가 얼마나 큰지 알고 있기 때문에 모든 곳에서 sizeof 문을 사용할 필요가 없습니다.

MPI 데이터 유형은 실제 데이터 유형이 아닌 태그입니다. 즉,

double d; 

사용하지

MPI_DOUBLE d; 
+0

마지막 예를 들어 보지 못했습니다. 'd' 변수가 하나의 프로세스에서 다른 프로세스로 보내질 변수라고 가정 해 봅시다. 'd'를 정의 할 때'double d'가 아닌'MPI_DOUBLE d'를 사용합니다. 맞습니까? – user2196452

+0

프로그램에서'double d '를 사용합니다. MPI_Send의 프로토 타입을 보자. 전송할 버퍼로'void * '를 사용합니다. 또한 MPI_Datatype을 요청하여 버퍼에있는 내용을 알려줍니다. MPI_DOUBLE을 두는 곳입니다. – Adam

+0

무슨 뜻인지 알 겠어. 즉, 프로그램에서'double d;'또는'MPI_DOUBLE d;'를 사용할 수 있습니다 (컴파일러가 불평하지 않는다면). mem-to-mem 복사본을 줄이고 특수 하드웨어를 사용할 수 있도록하는 두 가지 이점에 대한 통찰력이 있습니까? – user2196452

2

초등학교 데이터 유형이 다른 경우 기본 MPI 데이터 유형부터 차이를 해결할 수 MPI 데이터 유형을 사용하는 이유는 첫째, 나는 볼 수 없습니다 은 호스트 언어의 기본 데이터 유형 (기본 데이터 유형)에 해당합니다.

주어진 MPI 데이터 유형은 두 가지 다른 기계에서 동일한 기본 유형을 참조 할 필요가 없기 때문에. MPI_INT은 한 컴퓨터에서는 int이고 다른 컴퓨터에서는 long이 될 수 있습니다. 이는 the C++ standard doesn't specify byte size for the various integral types부터 C++에서 특히 유용하므로 int은 실제로 한 시스템에서 다른 시스템보다 더 많은 비트를 가질 수 있습니다.

둘째, 메모리에서이 응용 프로그램 지향 레이아웃의 데이터가 왜 의 두 가지 장점이 있습니까?

MPI_Send()의 인수를 살펴보십시오. 데이터의 시작 부분에 void*을 수신하고 전송할 요소의 수를 수신합니다. 그것은 요소들이 연속적으로 메모리에 연속적으로 정렬되어 있고, 모두 동일한 유형이라고 가정합니다. 가장 운 좋긴하지만 모든 경우에서 이것은 귀하의 신청서에는 사실이 아닙니다. 구조체의 요소가 모두 동일한 유형이 아닌 단순한 구조체 배열이 있더라도 사용자 정의 MPI 데이터 유형없이 이러한 구조체를 보내는 유일한 방법은 각 구조체의 첫 번째 요소를 별도의 배열로 보내고, 두 번째 요소를 각 배열에서 다른 배열로 복사하여 보내십시오. 파생 된 MPI 데이터 유형을 사용하면 데이터를 재배치하거나 복사하지 않고 데이터를 해당 위치에서 직접 가져올 수 있습니다.

두 번째 요점을 참조해야하는 것은 확실하지 않습니다.

관련 문제