【问题标题】:How to replace MPI_Pack_size if I need to send more than 2GB of data?如果我需要发送超过 2GB 的数据,如何替换 MPI_Pack_size?
【发布时间】:2015-11-15 08:17:25
【问题描述】:

我想使用 MPI 发送和接收超过 2 GB 的数据,我遇到了很多类似下面引用的文章: http://blogs.cisco.com/performance/can-we-count-on-mpi-to-handle-large-datasets, http://blogs.cisco.com/performance/new-things-in-mpi-3-mpi_count 谈论从 MPI 3.0 开始进行的更改,允许发送和接收更大的数据块。

现在大多数函数都接收 MPI_Count 对象而不是 int 作为参数,但不是全部。

如何替换

int MPI_Pack_size(int incount, MPI_Datatype datatype, MPI_Comm comm,
    int *size)

为了获得更大的缓冲区大小? (因为这里的大小最多只能是2GB)

【问题讨论】:

  • 你真的需要 MPI_Pack_size 吗?不能使用更大尺寸的派生类型吗?
  • 为什么需要>2GB的包?这严格在带宽限制的范围内,所以打包应该没有任何价值。
  • @Vladimir F 假设我真的需要超过 2GB,如果我使用更大尺寸的派生类型,它没有帮助,因为 MPI_Pack_size 的 size 参数返回字节数..
  • 但是为什么你需要这个包呢?请参阅 Jeff 的评论。

标签: mpi buffer-overflow


【解决方案1】:

如您所见,由于使用整数指针作为返回值,MPI_Pack 例程(MPI_Pack、MPI_Unpack、MPI_Pack_size、MPI_Pack_external)无法支持超过 32 位的数据。我不知道为什么标准没有提供 MPI_Pack_x、MPI_Unpack_x、MPI_Pack_size_x 和 MPI_Pack_external_x——大概是疏忽?正如 Jeff 所建议的那样,这样做可能是因为打包多个数据不太可能带来太多好处。尽管如此,它还是打破了正交性,没有那些......

一个高质量的实现(我不知道 MPICH 是不是其中之一)应该返回一个关于类型太大的错误,允许你打包更少量的数据。

【讨论】:

    猜你喜欢
    • 2016-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    相关资源
    最近更新 更多