1

並列読み取りに少し問題があります

次のようなテキストファイルがあります。

1 4 30 46 
0 2 3 29 
1 11 12 -1 
1 4 5 -1 
0 3 13 14 
3 6 7 8 
5 10 -1 -1 
13 10 -1 -1 
5 9 27 -1 

そして、私はこれらのintを各プロセスで一度に4つ読み込もうとしています。ファイルの行数はプロセスの数と等しく、すべての行に4つのintが含まれています。

int bufsize, count; 
int *buf;
MPI::Status status; 

MPI::File top = MPI::File::Open(MPI::COMM_WORLD, "top.txt", MPI::MODE_RDONLY, MPI::INFO_NULL); 

MPI::Offset filesize = top.Get_size(); 
filesize = filesize / sizeof(int);
bufsize = filesize / wasteland_size + 1;

buf = new int[bufsize * sizeof(int)]; 

top.Set_view(my_rank * bufsize * sizeof(int), MPI_INT, MPI_INT, "native", MPI::INFO_NULL); 
top.Read(buf, bufsize, MPI_INT, status); 
count = status.Get_count(MPI_INT); 

top.Close();

これは私が使用しているコードです。

エラーや警告なしでコンパイルされますが、次の行が出力されます。

540287025 874524723 805969974 857748000 

すべてのプロセスに対して。

4

1 に答える 1

2

問題は、ファイルがテキスト ファイルであるにもかかわらず、そのように解釈されないことです。ファイルから整数をバイナリで読み取っています。

これらの数字のいずれかを 16 進数に変換すると、数字または ASCII のスペースを表す bye で構成されていることがわかります。

ファイル形式を変更して、各数値が 4 バイトとして表されるようにすることをお勧めします。これにより、ファイルを分割することもできます。

于 2013-01-21T22:53:10.707 に答える