【问题标题】:MPI: writing and read integers to a fileMPI:向文件写入和读取整数
【发布时间】:2019-03-19 14:11:46
【问题描述】:

刚开始使用 Openmpi。尝试将整数写入和读取文件.. 写入代码:

写入文件的字符无法识别,主要是垃圾。

#include <stdlib.h>
#include <stdio.h>
#include "mpi.h"

#define BUFSIZE 10
#define FIRSTCHAR 1
#define FILENAME "file1.dat"

int main(int argc, char* argv[]) {
  int i, np, me;
  int buf[BUFSIZE];     /* The buffer to write */
  MPI_File myfile;       /* Shared file */

  /* Initialize MPI */
  MPI_Init(&argc, &argv);
  MPI_Comm_rank(MPI_COMM_WORLD, &me);
  MPI_Comm_size(MPI_COMM_WORLD, &np);

  /* Initialize buf with characters. Process 0 uses 'a', process 1 'b', etc. */
  for (i=0; i<BUFSIZE; i++) {
    buf[i] = FIRSTCHAR+(me);
  }

  /* Open the file */
  MPI_File_open (MPI_COMM_WORLD, FILENAME, MPI_MODE_CREATE | MPI_MODE_WRONLY,
         MPI_INFO_NULL, &myfile);
  /* Set the file view */
  MPI_File_set_view(myfile, me*BUFSIZE*sizeof(int), MPI_INT, MPI_INT, 
            "native", MPI_INFO_NULL);
  /* Write buf to the file */
  MPI_File_write(myfile, buf, BUFSIZE*sizeof(int), MPI_INT, MPI_STATUS_IGNORE);
  /* Close the file */
  MPI_File_close(&myfile);
  MPI_Finalize();
  exit(0);
}

不工作..请帮助!

【问题讨论】:

  • 更改 api 的参数 MPI_File_write(myfile, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE); dosent帮助..让它注意

标签: c multiprocessing mpi openmpi


【解决方案1】:

写入的文件不是垃圾,它们只是二进制文件

如果你在 linux 上

首先备份你的文件

cp file file2

然后

试试这个命令从二进制转换成ASCII

hexdump -v -e '7/4 "%10d "' -e '"\n"' file2

还有一个附注:除非您将数百万行写入文件,否则您甚至可能不需要 mpi_file 写入 /load 函数

【讨论】:

  • 嗨!你的辉煌 :D 作品,非常感谢,另外,是的,会写几百万行,所以使用 mpi apis
  • 你能帮我阅读吗,我遇到运行时错误,但它确实从文件中成功读取
【解决方案2】:

ints 以二进制模式写入文件,即它们不会像使用printf 进行屏幕输出那样转换为字符串并打印,而是以某种方式将它们的内存表示复制到文件中。如果您编写代码从文件中读取它们(使用MPI_File_read),它将正常工作。

请注意,二进制格式可能很难自己读取,因为 MPI 尝试跨平台并且可能会写入一些额外的类型信息,因此您应该使用 MPI 从这些文件中读取。

【讨论】:

  • ic,所以通过使用 mpi api 编写,我只有在使用 mpi_read 时才能读回??对吗?
  • 实际上,MPI_File_write 的输出只是二进制;例如,您可以使用 fread(buf, sizeof(char), np*BUFSIZE, fileh); 读取所有 np*BUFSIZE 字符。
【解决方案3】:

这里有一个更简洁的命令来查看你的 ascii 中的二进制文件 在 Linux 上: 按照 pyCthon 的建议备份您的文件:

cp file temp

然后,运行以下命令将文件打印为 ascii 字符:

od -c temp

如果你的数据恰好是整数:

od -i temp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多