首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以使用PMPI接口更改MPI_Probe的计数?

问是否可以使用PMPI接口更改MPI_Probe的计数?
EN

Stack Overflow用户
提问于 2015-10-13 14:06:32
回答 1查看 63关注 0票数 2

假设我有两个进程A和B。A正在向B发送一些数字,但是B不知道有多少。B使用MPI_Probe探测项目的数量,然后分配一个缓冲区来接收这些数量。

我正在使用PMPI接口截取中的发送和接收调用。我的目标是减少网络流量。因此,我决定通过拦截MPI_Send调用来压缩缓冲区A想要发送的内容。压缩后,我发送的不是A最初想发送的n个字节,而是rn个字节。其中r是压缩率和r<1。

由于B正在使用MPI_Probe,因此B看到接收调用正在获取rn个字节,并为rn个字节分配缓冲区。但我想要做的是截取MPI_Recv并解压缩成n字节的rn字节,然后在B想要这些数据的地方填充缓冲区。

现在我的问题是,我如何告诉B,虽然我正在发送rn个字节,但我希望它为n个字节分配内存?我拿不到A或B的密码。我所能做的就是使用PMPI接口。

EN

回答 1

Stack Overflow用户

发布于 2015-10-13 15:03:16

消息大小信息来自MPI_Probe和MPI_Recv,它们是MPI_Status对象的一部分。MPI_Status包含三个可公开访问的字段,即MPI_SOURCE、MPI_TAG和MPI_ERROR。除此之外,它还包含其他信息,其中包括实际的消息大小,但是实现是不透明的,并且不应该直接访问私有字段,因为这些字段是特定于实现和版本的。MPI标准提供了一组“getter”和“setter”,用于提取或设置消息元素的数量。setter是众所周知的,例如MPI_Get_count、MPI_Get_elements等。只有一个setter:

代码语言:javascript
复制
MPI_STATUS_SET_ELEMENTS(status, datatype, count)

您应该能够使用MPI_BYTE设置正确的消息大小(以字节为单位)。

请注意,您应该能够在实际收到消息之前恢复未压缩消息的大小,即您应该以某种方式将其包含在消息信封中(强烈依赖于实现),或者通过单独的隐藏消息传输它(引入额外的延迟,因此可能会抵消使用压缩的好处)。

在任何情况下,都有几个项目试图使用PMPI实现MPI数据的透明压缩。例如,你应该看看that one,并可能尝试与它背后的人建立联系。他们可能愿意分享他们的代码或至少部分实现细节。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33095266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档