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

时间:2017-01-10 15:38:19

标签: parallel-processing mpi mpi-io

我有一个文本文件,其中包含带有矩阵尺寸的标题,然后是矩阵。以下是3x3矩阵的示例:

3 3
1 56 8
12 3 0
9 44 81

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

我以为我在字符流中读取并转换为整数,但由于矩阵元素具有可变数字位数,我不知道如何处理此问题。我真的不确定如何处理这个问题?

2 个答案:

答案 0 :(得分:1)

通常,您知道二进制文件中写入的内容的类型和数量(例如,所有整数,10 rowsFromPrefs 3 TableBlock等)。您可以读取字节数,但MPI二进制文件通常作为整数类型读/写,在您的情况下为9个整数(因此数字位数不重要)。您打开文件并阅读类似的内容,

rowsFromBlocks

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

等数据格式的部分原因

答案 1 :(得分:0)

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

现在,如果您的约定说"每个数字都将零填充到6位",那么您可以从(size / nprocs)* rank -th

中读取每个进程

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

或者正如您所观察到的,二进制数据变得更加容易。