MPI 中的相同发送和接收缓冲区

2024-03-21

在我的代码中,每个进程都作用于数组的特定部分。我希望每个进程将其处理的部分发送到其他进程,并从其他进程接收其他部分。为此我使用了MPI_Allgatherv但我保持发送和接收缓冲区相同:

MPI_Allgatherv (&vel[0],  localSizesFaceV[rank], MPI_DOUBLE, &vel[0],  localSizesFaceV, displsFaceV, MPI_DOUBLE, MPI_COMM_WORLD);

我之前使用此函数用于具有不同发送和接收缓冲区的其他目的,并且它有效。所以我确信其他参数没有问题。

2个进程的情况下,其中一个进程不返回。当我将发送缓冲区复制到另一个时std::vector

vector <double> vel2;
vel2 = vel;

并使用vel2作为发送缓冲区,然后所有进程都返回。为什么?


一般来说,MPI 要求参数没有别名。这是明确提到的本标准第2.3章 http://www.mpi-forum.org/docs/mpi-3.1/mpi31-report.pdf#section.2.3.

除非另有指定,否则为 OUT 或 INOUT 类型的参数 不能使用传递给 MPI 过程的任何其他参数作为别名。

这解释了为什么您的代码有问题。但是,可以非常轻松地解决您的问题,而无需显式复制缓冲区:MPI_IN_PLACE关键词。它指定通信将在相关的地方使用输出缓冲区作为输入缓冲区“就地”完成。

你的代码将变成:

MPI_Allgatherv( MPI_IN_PLACE, 0, MPI_DATATYPE_NULL, &vel[0],  localSizesFaceV, displsFaceV, MPI_DOUBLE, MPI_COMM_WORLD);

注意:发送缓冲区使用的实际类型是无关的。你可以保留MPI_DOUBLE如果你愿意,但我更喜欢使用MPI_DATATYPE_NULL明确该参数被忽略。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MPI 中的相同发送和接收缓冲区 的相关文章

随机推荐

  • 如何从这个承诺层蛋糕中返回布尔值?

    我有一个控制器方法 它接受一个字符串参数 这样我就可以测试用户是否有能力 用户拥有许多角色 并且角色附加了一系列权限 我们需要检查它是否包含该功能 我知道这过于冗长 但为了理解 我就这样保留了 稍后会重构 App WorkspaceInde
  • 估计 GPU 的 FLOPS 效率(CUDA 示例)

    在我看来 我并不完全理解 FLOPS 的概念 在CUDA SAMPLES中 有矩阵乘法示例 0 Simple matrixMul 在此示例中 每个矩阵乘法的 FLOP 浮点运算 数量通过以下公式计算 double flopsPerMatri
  • 如何知道是否有ajax请求和ajax成功

    我想知道我该如何编码 if there is any ajax request loader css display block on success loader css display none Note 我不会在每个 ajax 请求函
  • iOS 8 - 如何确定前台应用程序以及获取正在运行的应用程序列表

    在 iOS 7 0 及更低版本上 SBFrontmostApplicationDisplayIdentifier来自跳板框架指定了在前台运行的应用程序 但该功能已被阻止 被视为漏洞 请参阅专门针对它的常见漏洞和暴露页面here http c
  • 如何断开 XMPPPY 客户端对象的连接

    使用 XMPPPY 连接到 XMPP 服务器非常简单 from xmpp client import Client as XMPPClient self xmppClient XMPPClient jabber foo com if not
  • 使用 C# 驱动程序时分析 MongoDB 查询

    有没有办法记录 MongoDB C 驱动程序生成并发送到 mongodb 的实际查询 就像在 SQL Server 中一样 您可以使用 SQL Profiler 来显示所有传入的查询 您可以启用分析并按照 pingw33n 的建议在 mon
  • PowerMockito 正在调用真正的方法而不是模拟的私有方法

    我有一个类 它有一个私有方法 并在其主体中调用另一个私有方法 所以我想调用第一个私有方法并模拟第二个 这是一个例子 public class ClassWithPrivateMethod private int count public C
  • 如何使用 argparse 将列表作为命令行参数传递?

    我正在尝试将列表作为参数传递给命令行程序 有没有一个argparse https docs python org 3 library argparse html将列表作为选项传递的选项 parser add argument l list
  • 为什么 Pyglet 不能正确绘制多边形?

    我随机创建点用于使用 Pyglet 绘制多边形 但 Pyglet 大多数时候都不能正确完成工作 好吧 我尝试用另一个图形模块绘制多边形 实际上它有效 但如果 Pyglet 工作正常 它会让我的工作变得更容易 我用它来绘制多边形和点 以方便您
  • 无需插件的 jQuery 链式动画

    在使用 jQuery 之前 我可以做一个带有延迟的链式动画 如下所示 element delay 45 animate 45 delay 45 animate 45 delay 45 animate 45 现在 自从更新到 v1 6 1 以
  • 子查询是邪恶的吗?

    这个问题是在一位朋友的评论之后提出的 他说 当一个查询有很多子查询时 就表明数据库存在设计缺陷 必须避免它们 他还表示 许多书籍都提出了同样的建议 我部分同意 但我认为这些查询具有复杂的逻辑 需要大量子查询 或者为了避免子查询 查询的物化视
  • 带 read 和 IFS 的 Bash while 循环

    我必须解析以下格式的文件 line1 param1 line1 param2 line1 param3 line1 param2 line2 param2 line2 param3 line1 param3 line3 param2 lin
  • 我可以在 python 中“伪造”一个包(或至少一个模块)以用于测试目的吗?

    我想用 python 伪造一个包 我想定义一些东西以便代码可以做 from somefakepackage morefakestuff import somethingfake somefakepackage 是在代码中定义的 其下面的所有
  • 如何处理drive api的最大导出限制大小文件

    我正在尝试下载一些 google doc 文件 但之后我需要使用导出方法转换为 microsoft word mimetype 它工作正常 直到找到一个大小超过 10 mb 的文件 api 文档说这是限制导出文档的大小 但我确实需要下载这些
  • 在 ElasticSearch 中获取 SearchResponse 的结果

    我正在尝试使用 ES 作为我的 MongoDB 的索引 我已经成功地集成了它们 但我发现搜索 API 相当复杂且令人困惑 Java API 也没有太大帮助 我能够找到完全匹配的内容 但是如何才能得到这个结果呢 这是我的代码 Node nod
  • JAX-WS Web 服务线程安全和性能问题

    我从其他一些帖子以及我对 JAX WS Web 服务的理解中了解到它们不是线程安全的 我的 Web 服务将被 100 个客户端调用 我们需要能够每秒处理大约 200 个事务 我的网络服务将与数据库交互以执行其工作 如果我在访问数据库的代码周
  • WebBrowser 控制会话中下载文件

    我在用着WebBrowser control浏览登录页面并下载文件 由于我找不到使用我正在使用的控件自动管理下载的方法WebClient类来尝试实现这一目标 问题是自从WebClient与浏览器不在同一上下文 会话中 我下载的只是安全错误屏
  • 如何使用树表显示 Oracle SQL 表中的所有行?

    我有这张表 为每个区域创建表 id area INT 主键 名称 VARCHAR2 200 id areapadre INT 引用 perarea id area 添加以下内容是为了访问数据 我的目的是创建一个层次结构 在树视图中显示区域及
  • 从 python 中的文本文件中读取特定列

    我有一个文本文件 其中包含一个由数字组成的表格 例如 5 10 6 6 20 1 7 30 4 8 40 3 9 23 1 4 13 6 例如 如果我想要仅包含在第二列中的数字 我如何将该列提取到列表中 f open file r line
  • MPI 中的相同发送和接收缓冲区

    在我的代码中 每个进程都作用于数组的特定部分 我希望每个进程将其处理的部分发送到其他进程 并从其他进程接收其他部分 为此我使用了MPI Allgatherv但我保持发送和接收缓冲区相同 MPI Allgatherv vel 0 localS