プログラムを開発して、Ax = Bの式をガウス消去法で解いています。私はファイルを持っています。このファイルでは、double型の行列(Cを使用してから行の主な順序)が格納されています。私は、MPIが提供する並列ファイルI/O関数を使用して、ファイルを並行して読み込もうとしています。ファイルに格納されたnxn行列の並列読み込み
私はMPI_File_set_view
について理解しており、どのプロセスがファイルの異なるビューを持つように論理的に共有ファイルを分割するかを理解しました。私はまた、ビューがetype
、filetype
、および変位で構成されている必要があることを理解しました。今、私の場合、私は、環状行の分布を持っているんだと、このために私は次のコードを持っている:
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んどのように?どんな助けもありがとう。
ありがとうございました。
私は同意することができます。私は従来のI/Oに戻すことに決めました。 –
それは私が作ろうとしていたものではありませんでした!あなたはかなり近いです。各プロセッサに行列の行を読み込ませますか? –
これは別のシナリオです。ブロックを循環的に読み込むプロセスが必要です。便利なのは、私がアクセスしたい行優先順位です。 –