首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MPI-IO读取文本文件?

使用MPI-IO读取文本文件?
EN

Stack Overflow用户
提问于 2017-01-10 23:38:19
回答 2查看 941关注 0票数 0

我有一个文本文件,其中包含一个具有矩阵维度的标题,然后是矩阵。下面是一个3x3矩阵的示例:

代码语言:javascript
复制
3 3
1 56 8
12 3 0
9 44 81

我一直在使用MPI-IO获取垃圾值,发现它只适用于二进制文件,而不适用于文本文件。

我认为我可以读入字符流并转换为整数,但我不确定如何处理这个问题,因为矩阵元素的位数是可变的。我真的不知道该怎么做?

EN

回答 2

Stack Overflow用户

发布于 2017-01-12 00:12:25

通常,您知道写入二进制文件的内容的类型和数量(例如,所有整数、10 int 3 float等)。您可以读取字节数,但MPI二进制文件通常是作为整数个类型进行读/写的,在您的情况下是9个整数(因此位数并不重要)。你打开文件,读起来像这样,

代码语言:javascript
复制
    call MPI_FILE_OPEN(MPI_COMM_WORLD, filename, & 
                   MPI_MODE_RDONLY , MPI_INFO_NULL, fh, ierr)

    bufsize = 3*3
    allocate(buf(bufsize))
    call MPI_FILE_READ_ALL(fh, buf, bufsize, MPI_integer, & 
                           MPI_STATUS_IGNORE, ierr)

对于可变的矩阵大小,您可以使用诸如MPI_File_get_size之类的东西来获取大小并计算出要读取的元素的数量。对于混合数据,您可以将二进制文件的第一部分(或最后一部分)作为头文件,您首先读取它,然后使用它来解码文件的其余部分。你仍然需要知道头部的格式,这可能会有问题,因为当你改变代码/头部格式时,你会破坏向后兼容性。这是使用HDF5 https://support.hdfgroup.org/HDF5/等数据格式的部分原因

票数 1
EN

Stack Overflow用户

发布于 2017-01-12 02:35:45

文本文件很棘手,因为你需要知道“字节”而不是“数字”。例如,1 1 110 15 123355短。

现在,如果您的约定是“每个数字都将被零填充到6位数”,那么您可以让每个进程从( -th /nprocs)*rank中读取

或者,您需要一个索引器来读取文件并记录矩阵中每一行的起始偏移量。

或者,正如您所观察到的,使用二进制数据会变得容易得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41572586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档