(简单的例子)MPI并行io写入垃圾
(simple example) MPI parallel io writing garbage
我正试图使多个进程同时使用MPI并行io将整数缓冲区写入文件。为了实现这个目标,我搜索了各种网站:
- MPI和并行IO
- Google图书搜索 基于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
s将被写入二进制数据,而不是ASCII或Unicode文本。"一堆正方形、矩形,@#$@#!"对我来说,"symbols"读起来就好像你正在用文本编辑器打开文件并寻找ASCII数字。
如果你想要格式化的输出,你必须自己格式化。如果你想让文本编辑器读取你的文件,你需要写文本,而不是int
s。
相关文章:
- Seg Fault Issue C++ (file IO / getline)
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 为什么在读取文件大小时文件IO速度会发生变化
- C++17中的并行执行策略
- 并行用于C++17中数组索引范围内的循环
- 如何在Elixir中调用递归函数并行
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 遍历并行数组以确定C++中的最大数字
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 并行标准::复制复杂性
- Agora.io 虚幻引擎插件构建错误
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- Boost::Mpi是否支持并行IO
- (简单的例子)MPI并行io写入垃圾
- MPI并行IO在ASCII格式(我怎么做?)