2016-11-13 9 views
0

プログラムを開発して、Ax = Bの式をガウス消去法で解いています。私はファイルを持っています。このファイルでは、double型の行列(Cを使用してから行の主な順序)が格納されています。私は、MPIが提供する並列ファイルI/O関数を使用して、ファイルを並行して読み込もうとしています。ファイルに格納されたnxn行列の並列読み込み

私はMPI_File_set_viewについて理解しており、どのプロセスがファイルの異なるビューを持つように論理的に共有ファイルを分割するかを理解しました。私はまた、ビューがetypefiletype、および変位で構成されている必要があることを理解しました。今、私の場合、私は、環状行の分布を持っているんだと、このために私は次のコードを持っている:

int count, blksize, stride,lb,extent; 
    MPI_File fh; 
    MPI_Offset of; 
    /* Define types for etype, ftype 
     etype: Type of data stored in the file. 
     ftype: Description of HOW the data is stored in the file. 
     */ 
    MPI_Datatype etype, ftype,mpi_vect; 
    /* etype: 

    */ 
    count = (n + (size -1))/size; blksize = n; 
    stride = size; 
    lb = 0; extent = n*sizeof(double); 
    MPI_Type_vector(count,blksize,stride,MPI_DOUBLE,&mpi_vect); 
    MPI_Type_create_resized(mpi_vect,lb,extent,&etype); 
    MPI_Type_commit(&etype);  

    /* ftype: Describes the logical division of file. 
     A strided vector of blocksize 1 and count n/size. 
     Stride is size 
    */ 
    MPI_Type_vector(count,1,stride, MPI_DOUBLE, &ftype); 
    MPI_Type_commit(&ftype); 
    MPI_File_open(MPI_COMM_WORLD,filename,MPI_MODE_RDONLY,MPI_INFO_NULL,&fh); 
    MPI_File_set_view(fh,0,etype,ftype,native,MPI_INFO_NULL); 
    /* Assume buf is allocated as an mpi_vector with blocksize equal to row size and stride equal to number of processors */ 
    MPI_File_read(fh,buf,count,mpi_vec,MPI_STATUS_IGNORE); 

私の質問があり、私は適切なETYPEを決定し、FTYPEんどのように?どんな助けもありがとう。

ありがとうございました。

答えて

0

etypeおよびftypeはまだ私をトリップして、私は15年間MPI-IOで作業してきました。そのコンセプトはそれほど厳しいものではありませんが、何らかの理由で命名規則が私に固執しません。

etypeまたは「基本タイプ」は、さまざまなカウントの基本単位を設定します。 MPI_File_read_at_allと呼び出してオフセットを与えると、そのオフセットはetypeの数になります。バイトではありません。

ファイルの特定の領域を読み取るには2つの方法があります。各プロセスでファイルビューを調整して、必要な場所でファイルを表示したり、明示的なオフセットルーチン(例:MPI_File_read_at_all)を使用できます。プロセスごとにファイルビューを作成している場合は、etypeについて心配する必要はないかもしれません:それをMPI_BYTEに設定してください。

+0

私は同意することができます。私は従来のI/Oに戻すことに決めました。 –

+0

それは私が作ろうとしていたものではありませんでした!あなたはかなり近いです。各プロセッサに行列の行を読み込ませますか? –

+0

これは別のシナリオです。ブロックを循環的に読み込むプロセスが必要です。便利なのは、私がアクセスしたい行優先順位です。 –

関連する問題