2016-10-21 3 views
1

mpi 프로그래밍에 관해서는 io 용으로 언제 공동 작업을 사용해야합니까? 개별 파일 포인터 IO 파일에 대해 공유 파일 포인터 IO 작업을 사용해야하는시기는 언제입니까?MPI IO에 관한 질문

답변

1

집합 MPI I/O은 일반적으로 더 최적화되어 있으며 코드에 일반 I/O 포인트가 있고 모든 프로세스가 동시에 도달하는 경우이를 선호 할 수 있습니다. 오버 헤드를 최소화하기 위해 적은 수의 프로세스를 사용하여 더 적은 수의 큰 데이터 청크를 작성하기 위해 실제 쓰기 (예 : 노드 당 하나)를 수행 할 수 있습니다. 또한 실제 writting 전에 데이터를 수집하기 시작할 수도 있습니다.

예를 들어의 경우, 문제에 대해 잘 분해 된 도메인이 있고 각 시간 단계의 끝에서 업데이트 된 값을 쓰고 싶다면이 방법을 사용하는 것이 좋습니다.

집합 작업은 이름에 _all 부분으로 표시되며 그 반대는 프로세스와 독립적 인 단일 작업 작업 (예 : _all 제외)입니다 (예 : 다른 프로세스에서 다른 데이터를 쓰는 프로세스가있을 수 있음). 기타). 모두 차단 및 비 차단 버전을 모두 가지고 있습니다. "집합 적"은 "차단"을 의미하지 않는다는 것을 명심하십시오.

단일 작업과 전체 작업은 "개별 파일 포인터"버전 (가장 단순함), "명시 적 오프셋"버전 (_at) 및 "공유 파일 포인터"(_shared (단일 작업) 또는 _ordered (전체)).

각 프로세스 내에서 다른 파일을 쓰고 싶다면 개의 개별 파일 포인터을 사용할 수 있습니다. 이것은 프로세스 당 많은 양의 데이터를 쓸 수있을뿐만 아니라 많은 노드를 가지고 있고 대역폭을 줄이기 위해 로컬 방식으로 작성하는 것이 좋습니다. 어떤 시나리오와 파일 시스템이 정확히 유용한 지 모르겠지만 "정상적인"문제에서는 오버 헤드를 줄이기 위해 작은, 작은 데이터 스트림보다는 소수의 큰 데이터 스트림을 갖는 것이 일반적으로 더 좋습니다. 당신은 또한 이것을위한 약간의 사후 처리 이유가있을 수도 있고 단순히 모든 종류의 프로세스가 같은 종류의 데이터를 쓰는 것은 아닙니다.

같은 파일에 대해 이야기 :

당신은 당신의 파일에서 다른 지점으로 각 프로세스를 가리 키도록 오프셋 명시 적으로 사용할 수있다.

주로 프로세스 그룹으로 작업 할 때 공유 포인터 버전을 사용할 수 있습니다. 따라서 각 프로세스는 참조로 공유 포인터에서 시작하여 그 뒤에 적절한 위치에 쓸 수 있습니다.

포인터가 파일보기과도 연결된다는 점에 유의하십시오. 그러나 이것은 또 다른 큰 주제입니다.