MPI - Bsend 用法

2024-01-19

当我想在异步发送之后释放资源时,MPI_Bsend 好吗? 这会吗:

MPI_Bsend(&array[0],...)
delete[] array;

阻止我删除我想要发送的内存(问题是,当适当的recv打开时,数组可能已经被删除)?

UPD:

void RectMPIAngleFiller::setglobalFillerbounds1() {

    int_t SIZE = getSolver()->getNumInterpolators() * procnums;
    int_t gridnums = getSolver()->getNumGrids();
    if (layer == 1) {
      if (local_rank == 0) {
    MPI_Isend(&rank_size, 1, MPI_INT, 0, gridnum, MPI_COMM_WORLD);
      }
    } else if (layer == 0) {
      int_t fillernumber = getSolver()->getNumInterpolators();
      int_t local_fillernum = fillernum % fillernumber;
      if (local_rank == 0 && local_fillernum == 0) {
    int_t * incomeSizes = new incomeSizes[gridnums];
    incomeSizes[gridnum] = getSolver()->getNumInterpolators();

    for ( int_t i = 0; i < gridnums; i++) {
      if (i != gridnum)
        MPI_Irecv(&incomeSizes[i], 1, MPI_INT, MPI_ANY_SOURCE, i, MPI_COMM_WORLD, &request);
    }

      }
   }    
}

例如,我现在有这样一个函数(现在可能不正确),它从许多进程收集大小,这些进程可能相同但在不同的类实例上运行,这就是为什么一切都与 Send 相关。

该函数在每个实例的外循环中运行,我希望它在整个循环之后完成。

现在它只接收大小,我不想要这个,并且想要删除一些内部数组并根据同一函数中接收到的大小调整它们的大小。如果我有非常大的数组,Isend 中的内部缓冲区太小而无法存储所有信息。


在 MPI 中,缓冲发送和非阻塞发送之间的区别有点微妙。实际上,它们都可以用来避免死锁,因为两个例程都会在消息传递之前将控制权返回给用户(或者更确切地说,它们将始终返回给用户,但此时不能保证消息已传递)。实际上,这意味着不需要等待匹配的接收被发布,这有助于避免死锁。

然而,MPI_Bsend保证数据已被复制到缓冲区。用户需要确保通过 MPI_Buffer_attach 提供足够的内存来缓冲所有未完成的消息。这是一条消息还是更多消息取决于程序的逻辑。

MPI_Isend 确实不保证该消息已被复制到缓冲区。心智模型是发送已被推迟到稍后 - 您已要求 MPI 在将来方便的某个时间发送消息。您必须等待关联的请求以确保 MPI_Send 已完成。

  • 当 MPI_Bsend 返回时,可以安全地释放发送缓冲区,因为它 保证已被复制到用户提供的缓冲区中。
  • 当 MPI_Isend 返回时,释放发送缓冲区是不安全的。

  • 当 MPI_Wait(&request, &status) 返回时,可以安全地释放 发送缓冲区。这是因为either数据已被复制到 缓冲区(系统缓冲区,not您通过 Buffer_attach 提供的那个)or因为它已被安全地传递到匹配的 MPI_Recv。

MPI 可以自由选择是否缓冲 MPI_Send。实际上,小消息会被缓冲,但大消息不会被缓冲。

尽管 MPI_Ibsend 的存在是为了完整性,但我想不出真正的用例。原则上,它可以在消息复制到用户提供的缓冲区之前返回,因此在等待之后才能释放发送缓冲区。那么您可以将用户代码与副本重叠吗?在实践中似乎有点没有意义。

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

MPI - Bsend 用法 的相关文章

随机推荐

  • 内存泄漏和弱引用

    我遇到了一个问题 看起来像是我的一个应用程序中存在内存泄漏 该应用程序随着时间的推移使用更多的内存 在工作大约一周后它会挂起 我已经检测到并修复了一些与我编写的类相关的泄漏 比较使用 sos dll 进行的堆转储很快就发现了它们 并且这些泄
  • 如何关闭 VS Code 中的“匹配”突出显示?

    我不希望 Visual Studio Code 突出显示匹配的括号 所有出现的同一变量等 我发现它非常分散注意力 但是 我找不到禁用此功能的方法 我似乎能够更改的唯一突出显示选项是 editor selectionHighlight 和 e
  • Excel 宏冻结 Outlook

    我有一个相当重的 Excel 宏 当它运行时 Outlook 冻结 我知道它没有使用所有的 CPU 功率 因为a 我有一台强大的多核机器b 我的所有其他程序 甚至是重型程序 都运行良好 Outlook 和 Excel 似乎正在共享 Exce
  • 在下拉菜单中显示 SQL 数据库中的数据

    我有一个存储名称的数据库 我的数据库查询正在运行 但假设我有 5 个名称想要在下拉菜单中显示 如何使下拉菜单中的默认文本显示这 5 个名称 基本上我想要完成的是 查询我的数据库并将所有客户名称存储到一个变量中 假设数据库中有 5 个名字 我
  • 自动安装 IIS 7 及更高版本的 Powershell 脚本

    我是 powershell 的新手 我需要的是一个 powershell 脚本 可以自动安装 IIS7 或更高版本的过程 我需要对角色服务进行某些配置 任何在这方面的帮助都是值得赞赏的 我发现以下博客很有用 通过使用帮助进行了某些更改 我能
  • C++ for 循环优化问题

    我在 VC 中有以下代码 for int i a 1 b i lt a b i lt someObject gt someFunction i 据我所知 编译器优化了所有这些算术运算 并且它们不会在每个循环上执行 但我不确定它们是否可以告诉
  • 如何在多用户环境中处理表单编辑?

    我的应用程序是带有服务器和客户端的多用户应用程序 在这种形式中 多个用户可以同时访问 他们可以执行保存为草稿或提交操作 问题是我想控制多用户同时编辑表单 例如 用户 X 正在编辑文本字段 复选框的值并执行另存为草稿 同时用户 Y 编辑相同的
  • 自动创建用于 xml 反序列化的 C# 类不起作用

    我正在努力为此 xml 创建反序列化类
  • Elastic Search Kibana PDF 报告

    我正在尝试生成 PDF 报告并使用脚本下载它们 我按照以下说明进行操作 https github com elastic kibana blob master docs user reporting automating report Ge
  • 将全名向量拆分为 2 个独立向量的有效方法

    我有一个由全名组成的向量 名字和姓氏用逗号分隔 这就是前几个元素的样子 gt head val vec 1 Aabye Edgar Aaltonen Arvo Aaltonen Paavo 4 Aalvik Grimsb Kari Aamo
  • SQL SERVER:获取两个日期之间的总天数

    我正在尝试获取两天之间的总天数 1 1 2011 3 1 2011 RETURN 62 可以在 SQL Server 中实现吗 PRINT DATEDIFF DAY 1 1 2011 3 1 2011 会给你你所追求的 这给出了两个日期之间
  • 如何使用 API V2 Moz HTTP 请求

    我正在尝试使用 HTTP 请求通过文件获取内容功能连接到 Moz API V2 但我是新使用这个 你们能帮助我吗 他们的文档中的 HTTP 请求示例 POST v2 url metrics Host lsapi seomoz com Con
  • Java Collections 在使用 Collections.addAll() 时何时抛出 NullPointerException

    在什么条件下会出现Collections addAll 方法抛出一个NullPointerException 官方文档提到 NullPointerException 如果指定的集合包含 null 元素并且此集合不允许 null 元素 或者如
  • 是否有免费的虚拟智能卡可供我用来运行一些测试?

    我想这没有什么区别 但我会尝试使用 Java 应用程序来访问它 更新 我将在公钥 私钥加密系统中使用智能卡 智能卡有不同类型 您没有明确说明您指的是哪种测试 但我猜您正在谈论加密智能卡 JavaCard 开发套件包含一个参考 JCRE 可用
  • libGDX Google Play 游戏服务 - Android

    我正在尝试将 Google play 游戏服务实施到 libGDX 项目中 在我的 android 项目中 MainActivity 如下所示 public class MainActivity extends AndroidApplica
  • 如何将有空间的目录路径传递给Windows shell?

    我正在使用 IEcapt exe 来捕获网站快照 问题是 它无法处理有空间的路径目录 像这样 c program files 有什么方法可以传递这样的目录以使其工作吗 通常只需双引号 Windows 路径即可工作 IEcapt exe C
  • 正则表达式在 String.matches() 中不起作用

    我有一小段代码 String words apf hum dkoe 12f for String s words if s matches a z System out println s 应该打印 dkoe 但它什么也没打印 欢迎来到 J
  • 打开第3层,map.on('moveend',..):区分用户交互和map.setCenter()调用

    我正在为 GIS 应用程序实现 OL 并希望在用户滚动地图时添加 20 秒的超时 之后 GPS 自动跟踪功能应恢复 为此 我正在利用 map on moveend move func 侦听器 问题是它无法区分用户滚动还是位置更改来自map
  • 根据视口大小销毁并初始化 Owl Carousel 2

    我读过很多有关此问题的讨论 但没有一个为我解决这个问题 我正在使用 enquire js 来执行我的视口条件 我的代码如下 var slider home farms slider sliderOptions items 1 animate
  • MPI - Bsend 用法

    当我想在异步发送之后释放资源时 MPI Bsend 好吗 这会吗 MPI Bsend array 0 delete array 阻止我删除我想要发送的内存 问题是 当适当的recv打开时 数组可能已经被删除 UPD void RectMPI