gpt4 book ai didi

c - MPI 中 MPI_offset 的范围

转载 作者:行者123 更新时间:2023-12-04 00:45:40 28 4
gpt4 key购买 nike

我使用 MPI2.2 标准用 C 编写并行程序。我有 64 位机器。

/* MPI offset is long long*/

MPI_Offset my_offset; printf ("%3d: my offset = %lld\n", my_rank, my_offset);

int count;
MPI_Get_count(&status, MPI_BYTE, &count);

printf ("%3d: read =%d\n", my_rank, count);

我正在逐字节读取一个非常大的文件。为了并行读取文件,我正在使用偏移变量为每个进程设置偏移量。我对 MPI_offset 类型的数据类型感到困惑,即 "whither it is signed or unsigned"长的 ?

我的第二个问题是关于 MPI_Get_count() 函数中使用的“计数变量范围”的限制。因为这里使用此函数从每个进程的缓冲区中读取所有元素 so i think it should also be of the long long type to read such a very large file.

最佳答案

MPI_Offset的大小不是由标准定义的 - 粗略地说,它是尽可能大的。 ROMIO 是一种广泛使用的 MPI-IO 底层实现,在支持它们的系统上使用 8 字节整数。您可能可以通过查看系统的 mpi.h 来确定。

MPI_Offset 是非常明确的签名;有像 MPI_File_seek 这样的函数,其中 MPI_Offset 类型的值取负值是完全合理的。

MPI_Get_count 返回一个正常整数大小的整数,这肯定会导致一些大文件 IO 策略出现问题。

通常,出于多种原因,在执行 MPI-IO 时最好不要使用像字节这样的小的低级 IO 单位;在性能和代码可读性方面,以基础数据类型为单位表示 IO 会更好。这样一来,这些尺寸限制就不再是一个问题了。但是,如果您的基础数据类型确实是字节,那么选项并不多。

关于c - MPI 中 MPI_offset 的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9341336/

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