gpt4 book ai didi

c++ - (简单例子)MPI parallel io writing garbage

转载 作者:行者123 更新时间:2023-11-28 03:20:24 25 4
gpt4 key购买 nike

我正在尝试使用 MPI 并行 io 让多个进程同时将一个整数缓冲区写入一个文件。为了实现这个目标,我搜索了各种网站:

我试着学习他们的教义。为了测试它们,我在 C++ 中创建了以下简单代码:

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

#define BUFSIZE 100

using namespace std;

int main(int argc, char *argv[])
{
int myrank, buf[BUFSIZE], rcode;
MPI_File thefile;

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &myrank);

for (int i=0; i<BUFSIZE; i++)
buf[i] = myrank * BUFSIZE + i;

rcode = MPI_File_open(MPI_COMM_WORLD, "testfile", MPI_MODE_CREATE | MPI_MODE_RDWR,
MPI_INFO_NULL, &thefile);

if(rcode != MPI_SUCCESS){
cerr << "Did not open file" << endl;
return EXIT_FAILURE;
}

rcode = MPI_File_set_view(thefile, myrank * (MPI_Offset)BUFSIZE * sizeof(int), MPI_INT, MPI_INT,
"native", MPI_INFO_NULL);
if(rcode != MPI_SUCCESS){
cerr << "Problem setting process view" << endl;
return EXIT_FAILURE;
}


MPI_File_write(thefile, buf, BUFSIZE, MPI_INT, MPI_STATUS_IGNORE);
if(rcode != MPI_SUCCESS){
cerr << "Problem writting file" << endl;
return EXIT_FAILURE;
}

MPI_File_close(&thefile);
MPI_Finalize();

return EXIT_SUCCESS;
}

但是,当我尝试与 Kate 一起读取文件时,我得到随机垃圾:一堆正方形、矩形、!$"%&!!/符号,根本没有整数。

我做错了什么?

最佳答案

您似乎对文本/二进制数据有误解。

MPI_File_write(..., MPI_INT,...) 写入的 int 将被写入为二进制数据,而不是 ASCII 或 Unicode 文本。 “一堆正方形、长方形、@#$@#! 符号”对我来说就像您正在使用文本编辑器打开文件并寻找 ASCII 数字一样。

如果你想要格式化输出,你必须自己格式化。如果您希望文本编辑器读取您的文件,您需要编写文本,而不是 ints。

关于c++ - (简单例子)MPI parallel io writing garbage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602521/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com