2016-12-06 23 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()エラー:無効な引数です。 ファイルを閉じる前にwaitコマンドもあります。 このエラーは、私がOpenMPIの/ 1.10.1でローカルマシン上OpenMPIの/ 2.0.1 とクラスタ上で使用する場合、それは罰金Mpi_File_iwriteが書き込みに失敗しました。 aio_write()エラー:引数が無効です

+0

回答1が完了し、問題が解決しました。 – BatiCode

答えて

0

MPI_File_iwrite()が非ブロック操作で動作しますが起こります。したがって、呼び出された直後に戻り、返された後にstr世紀の内容を読むことができます。ここでの結果のカップルです:右MPI_File_iwrite()を呼び出した後、バッファstrを変更

  • は良いアイデアではありません。実際には、バッファを変更する前に書き込み操作の完了を確認する必要がありますstrMPI_File_iwrite()から
  • 連続して呼び出すには、スクランブルファイルにつながることができます:書き込み操作の順序は、呼び出しの順序と類似ではないかもしれない...毎回MPI_File_iwrite(...,&request)が呼び出され、要求を上書き
  • ていることを確保するための良い方法です

    • スティックMPI_File_write()または右への各呼び出しの後MPI_Wait(&request,MPI_STATUS_IGNORE);を呼び出す:すべての書き込み動作の完了は...

    2つの溶液を確認することはありません。このようにして、書き込み操作の順序は呼び出しの順序と同じになります。

  • 行の順序は重要ではない場合は、次のコードは、トリックを行う可能性があります:

    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

関連する問題