c++ - 每个处理器具有不同计数值的 MPI_File_write_all

标签 c++ mpi mpi-io

这可能是个愚蠢的问题,但是,

我希望 N 处理器用不同的 offset 在同一个文件中写入所有不同的 byte count 以使数据连续。

我想使用 MPI_File_write_all(file,data,count,type,status)(单个文件指针,集体,阻塞)函数。

第一个问题每个处理器可以为count参数指定不同的值吗? 我找不到 MPI 3.0 引用中提到的任何内容。 (我的本意是不可能?)

目前我发现的是以下两个问题:

  1. 当我想写入大量 MPI_BYTES 时,MPI_File_write... 函数中的整数(32 位)count 太小了,溢出了当然!

  2. 我不(不能)/想要在 MPI 中使用派生数据类型,因为如上所述所有处理器写入不同的字节数并且类型是MPI_BYTES

感谢您对此主题的任何帮助!

最佳答案

你在这里总结了几个问题

  • 当然,进程可以为集体 MPI_File_write_all 例程指定不同甚至零数量的数据。不仅 count 参数可以不同,datatype 参数也没有理由需要相同。

  • 问题 #1:如果您想写入超过 int 的 MPI_BYTE 数据,则必须创建一个新的数据类型。例如,假设您想写入 90 亿字节。创建一个大小为 10 亿的重叠群类型,然后写入其中的 9 个。 (如果你要写入的数据量不能整除,你可能需要后缀或结构类型)。

  • 问题 #2:让每个 MPI 进程创建自己的数据类型或数据类型计数根本不是问题。

关于c++ - 每个处理器具有不同计数值的 MPI_File_write_all,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19681860/

相关文章:

c++ - 带有 if 语句的嵌套 for 循环的时间复杂度

c++ - 为什么这需要 Boost lib 文件?

c++ - capture 如何将基类中的 this 派生为 lambda 函数?

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

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

c++ - C扩展一个指针数组

python - mpi4py:动态数据处理

time - 在科学集群上使用并行处理时 $time 意味着什么?

c++ - 通过直接转换为 char 数组来序列化 POD 数据是否安全?