2016-12-06 7 views
1
if(my_rank==0) 
    { 
     sprintf(str,"<?xml version=\"1.0\" ?>\n"); 
     MPI_File_iwrite(fp,str,strlen(str), MPI_CHAR,&request); 
     a=a+strlen(str); 
     sprintf(str,"<!DOCTYPE Xdmf SYSTEM \"Xdmf.dtd\" []> \n"); 
     MPI_File_iwrite(fp,str,strlen(str), MPI_CHAR,&request); 
     a=a+strlen(str); 
     sprintf(str,"<Xdmf Version=\"2.0\">\n"); 
     MPI_File_iwrite(fp,str,strlen(str), MPI_CHAR,&request); 
     a=a+strlen(str); 
    } 

aio_write() 오류 : 잘못된 인수입니다. 또한 파일을 닫기 전에 대기 명령이 있습니다. 내가하는 openmpi/1.10.1와 로컬 컴퓨터에서하는 openmpi/2.0.1 와 클러스터에서 사용할 때 이 오류는 잘Mpi_File_iwrite가 쓰기에 실패했습니다. aio_write() 오류 : 잘못된 인수

+0

대답 1 완료, 문제 해결, – BatiCode

답변

0

MPI_File_iwrite()이 비 블로킹 작업입니다 작동 발생합니다. 따라서, 호출 된 직후에 돌아오고 돌아온 후 str 세기의 내용을 읽을 수 있습니다. 버퍼 str 수정

  • 바로 MPI_File_iwrite()를 호출 한 후 좋은 생각이 아니다 : 여기에 결과 몇입니다. 실제로 버퍼를 수정하기 전에 쓰기 작업을 완료해야합니다. str! MPI_File_iwrite()-
  • 연속 통화 스크램블 파일로 이어질 수 : 쓰기 작업의 순서가 호출 순서와 유사하지 않을 수 있습니다 ... 때마다 MPI_File_iwrite(...,&request)가 호출 요청을 덮어 쓰기
  • 을 확인하는 좋은 방법입니다

    • 스틱 MPI_File_write()이나 오른쪽으로각 호출 후 MPI_Wait(&request,MPI_STATUS_IGNORE); 전화 : 모든 쓰기 작업의 완료 ...

    두 솔루션을 확인되지 않습니다. 그런 식으로 쓰기 조작의 순서는 호출 중 하나와 동일합니다.

  • 라인의 순서가 문제가되지 않는 경우, 다음 코드는 트릭을 할 수 있습니다

    if(my_rank==0) 
    { 
        char str[142]; 
        char str2[142]; 
        char str3[142]; 
        MPI_Request requests[3]; 
        snprintf(str,142,"<?xml version=\"1.0\" ?>\n"); 
        MPI_File_iwrite(fp,str,strlen(str), MPI_CHAR,&request[0]); 
        a=a+strlen(str); 
        snprintf(str2,142,"<!DOCTYPE Xdmf SYSTEM \"Xdmf.dtd\" []> \n"); 
        MPI_File_iwrite(fp,str2,strlen(str2), MPI_CHAR,&request[1]); 
        a=a+strlen(str2); 
        snprintf(str3,142,"<Xdmf Version=\"2.0\">\n"); 
        MPI_File_iwrite(fp,str3,strlen(str3), MPI_CHAR,&request[2]); 
        a=a+strlen(str3); 
        MPI_Waitall(3,requests,MPI_STATUSES_IGNORE); 
    } 
    

마지막으로, MPI_File_iwrite()MPI_File_write() 상태에서 열기 MPI의 문서를 그 :

It is erroneous to call this function if MPI_MODE_SEQUENTIAL mode was specified when the file was opened.

+0

이미 MPI_File_write로 전환했습니다. – BatiCode