2014-12-16 4 views
1

작업을 마친 후 동일한 파일에 쓰는 MPI 프로세스가 있습니다. 문제는 결과의 길이가 가변적이어서 각 프로세스가 특정 오프셋에서 작성한다고 가정 할 수 없다는 것입니다.다른 MPI 프로세스에서 같은 파일에 쓰기

가능한 방법은 모든 프로세스에서 파일을 열고 끝에 출력을 작성한 다음 파일을 닫는 것입니다. 그러나 이런 식으로 경쟁 조건이 발생할 수 있습니다.

결과를 예상 한 파일로 열어서 어떻게 쓸 수 있습니까?

+0

당신이하려는 것을 보여주는 몇 가지 샘플 코드는 요구 사항을 더 잘 이해하는 데 도움이됩니다. 하지만 내가하고 싶은 것을 이해하면, [Mpi_file_write_shared] (http://mpi.deino.net/mpi_functions/MPI_File_write_shared.html) 또는 [Mpi_file_write_ordered] (http://mpi.deino.net /mpi_functions/MPI_File_write_ordered.html)이이를 수행하는 일반적인 방법입니다. –

답변

1

공유 파일 또는 순서가 지정된 모드 루틴이 필요하다고 생각할 수 있습니다. 그러나 이러한 루틴은 거의 사용되지 않으므로 잘 최적화되지 않습니다. 따라서 그들은 거의 사용하지 않습니다 ... 꽤 순환 ...)

이 작업을 공동으로 수행하기를 바랍니다. MPI_SCAN을 사용하여 오프셋을 수집 한 다음 MPI 라이브러리에서 I/O를 최적화하도록 MPI_FILE_WRITE_AT_ALL을 호출 할 수 있습니다.

(독립적으로이 일을하는 경우에, 당신은? 토큰을 전달? 뭔가 같은 ... 마스터 슬레이브을해야 할 것 내가 그들을 미워하더라도 공유 파일 포인터 루틴으로 폴백?) 여기

좋은 집단 방법을위한 접근 방식 :

incr = (count*datatype_size); 

/* you can skip this call and assume 'offset' is zero if you don't care 
    about the contents of the file */ 
MPI_File_get_position(mpi_fh, &offset); 

MPI_Scan(&incr, &new_offset, 1, MPI_LONG_LONG_INT, 
         MPI_SUM, MPI_COMM_WORLD); 
new_offset -= incr; 
new_offset += offset; 

ret = MPI_File_write_at_all(mpi_fh, new_offset, buf, count, 
           datatype, status); 
관련 문제