【问题标题】:MPI reading simple dataframe or txt fileMPI 读取简单的数据框或 txt 文件
【发布时间】:2021-06-10 12:50:31
【问题描述】:

我有这个数据框:

date,AA,BB,CC
2018-01-01 00:00:00,45.73,0.0,1
2018-01-01 01:00:00,44.16,0.0,2
2018-01-01 02:00:00,42.24,0.0,3
2018-01-01 03:00:00,39.29,0.0,5
2018-01-01 04:00:00,36.0,0.0,6
2018-01-01 05:00:00,41.99,0.0,7
2018-01-01 06:00:00,42.25,0.0,8

我想知道是否可以使用 MPI I/O 范例来读取它。

特别是,我想根据处理器的数量来划分行。假设你有 4 个处理器。我希望每个处理器读取两行:处理器 0,第 1,2 行;处理器 1,第 3,4 行;等等。

我研究了一些材料。据我所知,我必须做一种偏移并将文件写在一行中。另一种可能性是使用与子网格相关的东西。

但是,您可以注意到,每一行中都有不同类型的变量。

你们谁能给点胶水吗?到目前为止,我发现的有关 MPI I/O 的内容非常理论化,没有实际示例。

谢谢, 迭戈

【问题讨论】:

    标签: input mpi mpi-io


    【解决方案1】:

    MPI-IO 非常适合二进制数据。它不太适合文本数据。

    如果这是二进制数据,我希望有一个标题和一个索引。 Rank 0 可以读取该标头和索引,向数据所在的每个人广播,然后可能会发生一些记录的算法分解(例如,每个 rank 读取 N 条记录)

    对于这样的 ascii 文件,您是对的:您如何拆分文件?

    这些文件有多大?如果它们有几兆字节(所以没那么大),读取 rank 0 上的数据并从那里分发

    另一种方法可能是生成索引——数据帧的一部分或单独的二进制索引。该索引会将记录映射到文件偏移量,现在您可以将读取工作拆分到所有进程中。

    【讨论】:

    • 我不确定你的答案是否理解。我的文件可能非常大,最大可达 10 GB。我可以将我的文件转换为二进制文件吗?如果是这样,我可以尝试学习以应用您的第一个建议。我可以在哪里学习如何应用您的最后建议。就如我所告诉你的。我是 MPI-IO 的新手
    • 好的,10 GiB 足够大,无法进行读取和广播。使用 MPI-IO 读取文本文件没有很好的方法。不时出现:stackoverflow.com/questions/41572586/…stackoverflow.com/questions/12939279/…
    • 好的。把它转换成二进制文件然后用 MPI-IO 读取呢?
    • 二进制可以工作:你必须定义一个固定的格式。 'timestamp'、'AA'、'BB' 和 'CC' 字段可能各有 64 位。那么您的 MPI-IO 阅读器知道“记录”是 32 个字节。如果您有 100 个进程读取此文件,并且您知道文件总大小,则可以根据排名进行分解: $ ((filesize/record_size)/nprocs)*rank $ 将为您获取每个进程的起始记录
    • 然而,与其考虑 MPI-IO,不如考虑 HDF5 或(并行)NetCDF?你仍然想考虑“二进制”而不是“文本”,但是你会开始考虑更高级别的“数组行”而不是对位和字节进行操作
    猜你喜欢
    • 2022-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多