问题标签 [mpi-io]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
211 浏览

arrays - MPI 集体输出 5 个特殊形式的非连续 3D 数组

在课程工作的实现过程中,我必须编写 MPI 程序来解决 PDE 连续体力学。(福特兰)

在顺控程序文件中写如下:

在并行程序中,我写如下:/并行化只发生在X轴/

它运作良好。但我不确定是否使用数组 dataTmp。什么解决方案会更快更正确?在整个程序中使用像 dataTmp 这样的 4D 数组怎么样?或者,也许,我应该创建 5 个具有不同位移的特殊 mpi_types。

0 投票
2 回答
611 浏览

fortran - Bluegene 上的 MPI_FILE_READ && little endian

我需要读取(和写入)一些二进制小端文件。我正在使用英特尔 FC 和英特尔 MPI 在 PC 上编写我的 fortran 代码。I/O 在 PC 上运行良好,但最终原因是在 Bluegene/P 上运行程序。Bluegene/P(XL Fortran 编译器)具有大字节序。当我需要非并行 I/O 操作(如 fortran REED & WRITE)时,我正在使用

不幸的是,当我需要并行 I/O 时,例如 MPI_FILE_READ,“SETRTEOPTS('ufmt_littleendian=8')”被忽略。我正在设置视图:

我应该怎么办?我不想创建自己的 DATAREP。还有其他方法吗?速度非常重要。

0 投票
1 回答
2022 浏览

io - 使用 MPI-IO 编写 Fortran 格式的文件

我正在尝试使用 OVERFLOW-PLOT3D q-file 格式(在此处定义:http://overflow.larc.nasa.gov/files/2014/06/Appendix_A.pdf)保存解决方案。对于单个网格,基本上是,

所有变量都是双精度数,除了 NGRID、JD、KD、LD、NQ、NQC 和 IGAM 是整数。我需要使用 MPI-IO 来导出解决方案。如果我举一个非常简单的单处理器示例,下面的代码不起作用,但我不明白为什么。

Tecplot 无法识别该格式。但是,如果我编写一个简单的非 MPI 代码,例如这个:

一切正常。我的 MPI-IO 代码有什么问题?非常感谢您的帮助!

约阿希姆

注意:我不知道这是否相关,但如果我在最后的写入语句之前添加一个 mpi_file_seek(offset),偏移量 = 144。Tecplot 同意加载文件(但数据未正确读取)。这很奇怪,因为正常的偏移量应该是 7 个整数 + 15 个实数 *8 = 148 个字节...

编辑:由于某种原因,您的方法@Jonathan Dursi 似乎不适用于 Tecplot。下面的代码有什么问题吗?(简化为单个处理器)

0 投票
1 回答
317 浏览

c++ - 在 MPI-IO 上交错来自不同处理器的二进制数据

我正在尝试使用 MPI I/O (MPI-2.0, mpich2) 编写二进制文件。

下面是一个最小示例,其中 2 个文件 'chars' 和 'ints' 应分别打印为 '0123...' 和 'abcd...'。

我用字符得到正确的结果,

但是对于整数,它仅在 np = 0 时才有效。对于 np > 0,我得到我不明白的结果:

np = 2:

np = 3:

等等

我的代码是错误的,还是“od -i”根本不适合显示带有整数的二进制文件?

谢谢,

朱里

0 投票
1 回答
126 浏览

fortran - 为什么这两个 MPI-IO 代码的工作方式不同?

我正在学习 MPI-IO 并遵循教程(此处下载 PDF)

对于一项练习,正确的代码是:

然后您只需构建并运行它作为 24 个 MPI 任务。然后进行验证,只需执行 od -i test/dat 您将获得与教程中完全相同的结果,如下所示。

但是,如果我将1更改为num

进入

在此之前定义

在 rm test.dat 之后,然后重新构建文件并运行它,你会得到:

0 投票
1 回答
641 浏览

fortran - 用 MPI IO 写几个分布式数组

我正在重写一个使用 MPI 在一个方向上并行化的数值模拟代码。到目前为止,包含数据的数组由主 MPI 进程保存,这意味着将数据从所有 MPI 进程转移到一个并分配巨大的数组来存储整个事物。它不是很有效也不是很优雅,并且对于大分辨率来说是一个问题。

因此,我尝试使用 MPI-IO 从分布式数组中直接写入文件。我的限制之一是写入的文件需要遵守fortran“未格式化”格式(即每个字段前后的4字节整数表示其大小)。

我编写了一个简单的测试程序,当我只将一个分布式数组写入文件时,它就可以工作。但是,当我编写几个数组时,文件的总大小是错误的,并且与等效的 fortran '未格式化'文件进行比较时,文件是不同的。

这是示例代码:

当行!write(10) w!call saveMPI(w_loc, (i_loc)*(jmax+2)*(kmax+2))被注释时(即我只写 v 数组),代码工作正常:

cmp 不生成输出,因此文件是相同的。但是,如果我取消注释这些行,则生成的文件(mpi.dat 和 fort.10)是不同的。我确定问题出在我定义用于将数据写入文件正确位置的偏移量的方式上,但我不知道如何向 saveMPI 的第二次调用指示初始位置应该是结尾的文件。我错过了什么?

0 投票
1 回答
66 浏览

c - MPI 非标准类型的分布式读取

我正在尝试读取包含 char 和 double 序列的二进制文件。(例如 0 0.125 1 1.4 0 2.3 1 4.5,但写入二进制文件)。我创建了一个简单的结构输入,还有一个 MPI 数据类型,我将调用与该结构对应的 mpi_input。

我想使用 . 并行读取我的文件(即这里使用不同的处理器)MPI_File_read_at_all。我想在这个函数中使用数据类型 mpi_input。

问题是,我认为这个函数需要一个缓冲区,它会一直写入到最后。我尝试使用input *buffer,但这会由于数据结构对齐而产生问题。你对如何做到这一点有任何想法吗?

这是一个最小的工作示例:

这是生成简单二进制文件的代码:

0 投票
1 回答
2603 浏览

c - MPI_File_read_at 逐行

我是 MPI 的新手。我想使用 MPI_File_read_at() 逐行读取 txt 文件中的数据。每一行的长度是不同的,所以当我读取一行时(设置缓冲区的长度),有时它也会读取下一行,将下一行的一部分发送到缓冲区中,这确实会导致问题......所以,我想知道有什么方法可以使用 MPI_File_read_at() 逐行读取数据?让它在每行末尾遇到“\ n”时停止?或者您是否有更好的建议通过使用 MPI_File_read_at() 以外的 MPI 函数逐行读取数据?

我想我的问题是如何使用 MPI_File_read_at() 做与 fgets 相同的事情

0 投票
0 回答
289 浏览

c - 使用 MPI 优化写入共享文件

在我的 MPI 程序中,我需要将一些计算的结果写入单个(共享)文件,其中每个 MPI 进程将其部分数据写入不同的偏移量。很简单。我已经像这样实现它:

这有点简化,data实际上是一个数组,但为了简洁起见,我们假设它是一个单一的值。所有进程同时调用这个例程,并且它工作正常。但是,我不确定这是否是使用 MPI 执行 IO 的最佳方式。会使用MPI_File_write_at_allMPI_File_write_ordered带来更好的性能吗?

不幸的是,我在集群(有 Lustre)上的时间非常有限,所以我无法广泛测试所有可能的实现,而且在我的笔记本电脑上进行测试显然无法很好地衡量 IO 性能。

0 投票
1 回答
622 浏览

c - MPI I/O,单进程和多进程输出的混合

我需要一个 MPI C 代码通过 MPI I/O 将数据写入二进制文件。我需要进程 0 来编写一个短标题,然后我需要整个进程范围来编写它们自己的由标题指示的数组片段。然后我需要进程 0 来编写另一个标题,然后所有进程都编写下一个数组的片段,等等。我想出了以下测试代码,它实际上可以满足我的需求。没有人会比我更惊讶。

我的问题是,我是 MPI I/O 的新手。那我“明白”了吗?我这样做是“正确的方式”还是有一些更有效或更紧凑的方式来做到这一点?

代码是:(顺便说一句,如果您想对此进行测试,请仅使用 4 个 proc 进行尝试。)