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 

我试图在每个进程中一次读取这些整数 4,文件的行数等于进程数,每行包含 4 个整数

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

问题是您的文件是一个文本文件,但它没有被解释为这样。您正在从二进制文件中读取整数。

当您将这些数字中的任何一个转换为十六进制时,您会看到它们由代表 ASCII 中的数字或空格的字节组成。

我建议更改文件格式,以便我将每个数字表示为 4 个字节。这也允许您按照您所做的方式拆分文件。

于 2013-01-21T22:53:10.707 回答