MPI_Send() 和 MPI_Ssend() 之间的区别?

2024-03-11

I know MPI_Send()是一个阻塞调用,它会等待直到可以安全地修改应用程序缓冲区以供重用。为了使发送调用同步(应该与接收者握手),我们需要使用MPI_Ssend()。 我想知道两者之间的区别。假设我需要在进程之间发送固定数量的字节,哪一个应该花费更长的时间?
对于我来说,代码在 MPI_Send() 调用中运行良好,但无限期地等待 MPI_Ssend()。 可能的原因是什么?

最重要的是,我很确定使用时接收进程正在接收数据MPI_Send(),所以这个推论不会导致使用时等待握手MPI_Ssend() .

或者我可以得出结论:MPI_Send()您可以将数据发送到自我进程,但不能使用MPI_Ssend() ?


两者之间有一个微小但重要的区别(您可以在MPI 3.0 标准 http://mpi-forum.org/docs/mpi-3.0/mpi30-report.pdf#section.3.4文件第 3.4 节)。与定期MPI_SEND,当缓冲区可供重用时,实现将返回给应用程序。这could在接收进程实际发布接收之前。例如,可能是当一条小消息被复制到内部缓冲区并且不再需要应用程序缓冲区时。但是,对于可能无法在内部缓冲的大型消息,调用可能不会返回,直到足够的消息已发送到远程进程而不再需要缓冲区为止。

这和之间的区别MPI_SSEND是后者将always等待直到接收已在接收端发布。即使消息很小并且可以在内部缓冲,它仍然会等待直到另一端开始接收消息。

MPI_SSEND是一种确保两个进程都在执行过程中达到某个点而无需执行任何操作的方法MPI_BARRIER, 例如。如果您的应用程序在同一级别发送和接收数据,则执行任一操作都不安全MPI_SEND OR MPI_SSEND,作为任一could无限期地阻止。相反,你应该使用MPI_ISEND and MPI_IRECV这样调用将立即返回,并且可以同时完成实际的发送/接收(在调用MPI_WAITALL).

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

MPI_Send() 和 MPI_Ssend() 之间的区别? 的相关文章

  • 如何从单独的进程监控应用程序崩溃

    我有一个特定的 net 应用程序 偶尔会因以下 Windows 错误之一而崩溃 application name has encountered a problem and needs to close We are sorry for t
  • 使用AppService的连接持续时间有限制吗?

    我有一个 UWP 应用程序托管应用服务 https learn microsoft com en us windows uwp launch resume how to create and consume an app service在同
  • MPI 矩阵向量乘法返回有时正确有时奇怪的值

    我有以下代码 Start MPI MPI Init argc argv int size atoi argv 1 int delta 10 int rnk int p int root 0 MPI Status mystatus MPI C
  • 将命令行参数传递给已运行的应用程序实例

    我想将应用程序新实例的命令行参数传递给已经运行的应用程序 如果存在 到目前为止 我已经尝试了以下方法 程序 cs string Arguments Environment GetCommandLineArgs int iCurrentPro
  • 使用PM2时如何配置master进程

    我在 NodeJS 中遇到 PM2 问题 如果没有 PM2 我们总是有如下几行代码来配置主进程 if cluster isMaster master process configuration else worker process con
  • 垂直和水平平行度

    最近在并行领域工作 我了解到有两个术语 垂直并行 和 水平并行 有人说openmp 共享内存并行 是垂直并行 而mpi 分布式内存并行 是水平并行 为什么这些术语这么称呼 我不明白原因 这么称呼它们只是术语吗 这些术语似乎没有被广泛使用 也
  • MPI Alltoallv 还是更好的单独发送和接收? (表现)

    我有许多进程 大约 100 到 1000 个 每个进程都必须将一些数据发送到其他一些进程 比如大约 10 个 通常 但并非总是必要 如果 A 发送到 B B 也会发送到 A 每个进程都知道它必须从哪个进程接收多少数据 所以我可以用MPI A
  • Boost MPI 在监听列表时不会释放资源?

    这是一个后续问题如何释放 boost mpi request https stackoverflow com questions 44078901 how do i free a boostmpirequest 我在监听列表而不是单个项目时
  • GProf 输出中缺少函数

    我正在尝试分析一些 C 代码 但最直观地成本最高的函数之一并未出现在 GProf 输出中 int main initialise haloSwap for functions propagate functions void propaga
  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut
  • 了解多个进程的并发文件写入

    从这里 UNIX 中文件追加是原子的吗 https stackoverflow com questions 1154446 is file append atomic in unix 考虑多个进程打开同一个文件并向其追加内容的情况 O AP
  • 如何使用应用程序接口将蓝牙套接字传递给另一个活动

    因此 根据我收集的信息 套接字连接既不可序列化 也不可分割 但我需要将蓝牙连接传递给另一个活动 我不想作为中间人编写服务 所以请不要将此作为解决方案发布 我听说有一种方法可以使用自定义应用程序接口来传递这些类型的对象 但我一生都找不到这样的
  • 使用 MPI 的 Allreduce 对 Python 对象求和

    我正在使用使用 Python 中的字典和计数器构建的稀疏张量数组操作 我想让并行使用这个数组操作成为可能 最重要的是 我最终在每个节点上都有计数器 我想使用 MPI Allreduce 或另一个不错的解决方案 将其添加在一起 例如 使用计数
  • 如何抑制Windows防火墙的Windows安全警报?

    当我从这里找到的 ZeroMQ 指南中用 C 创建 Hello World 示例时 http zguide zeromq org page all Ask and Ye Shall Receive http zguide zeromq or
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 通过 mpi 发送 c++ std::vector

    我知道存储一个std vector
  • 创建进程的多个子进程并维护所有 PID 的共享数组

    我已经分叉了几次 并用 C 创建了一堆子进程 我想将它们所有的 PID 存储在一个共享数组中 PID 的顺序并不重要 例如 我创建了 32 个进程 我想要一个 32 个整数长的数组来存储每个 PID 并且每个进程都可以访问 最好的方法是什么
  • MPI_Type_Create_Hindexed_Block 生成派生数据类型的错误范围

    使用Fortran 我尝试为动态分配的结构构建派生数据类型 但它得到了新类型的错误范围 代码如下 PROGRAM MAIN IMPLICIT NONE INCLUDE mpif h INTEGER I INTEGER MYID NUMPRO
  • 向父进程发出信号,表明子进程已完全初始化

    我正在启动一个公开 WCF 端点的子进程 如何从子进程向父进程发出信号 表明子进程已完全初始化并且现在可以访问端点 我曾考虑过使用信号量来实现此目的 但不太清楚如何实现所需的信号 string pipeUri net pipe localh
  • 如何使用 MPI_Scatterv 将矩阵的行发送到所有进程?

    我正在使用 MPI 接口 我想分割一个矩阵 按行 并将各个部分分配给每个进程 例如 我有这个7x7的方阵M M 0 00 1 00 2 00 3 00 4 00 5 00 6 00 7 00 8 00 9 00 10 00 11 00 12

随机推荐

  • 在 iOS 中创建包含行和列的表格

    I would like to create a table in iOS that have some rows and columns We also have an option to add amounts to the table
  • 无法在 Mac 上安装图表/arithmoi

    我正在尝试安装diagrams 在阴谋集团沙箱中 并且它在期间失败arithmoi安装 给出以下消息 Preprocessing library arithmoi 0 4 1 1 no location info gt Warning Co
  • Android Studio预览片段

    我有以下布局文件
  • C#-Excel 互操作性

    我想从 C 4 0 VS 2010 Express Edition 调用 Excel Sheet 当我宣布 Microsoft Office Interop Excel ApplicationClass excel new Microsof
  • 将应用服务器从 GCM 迁移到 FCM 时,旧客户端会发生什么情况?

    我正在考虑迁移到 FCM 客户端的事情相当简单 您移动一些代码并完成它 但是 在应用程序服务器上 出于显而易见的原因 我还需要支持较旧的客户端 我需要知道将 GCM 项目迁移到 FCM 时会发生什么 FCM 是否也会自动将消息转发到基于 G
  • 如何从opencv中的图像中删除多余的空白? [复制]

    这个问题在这里已经有答案了 我有以下图像 这是一张收据图像 收据周围有很多空白区域 我想裁剪空白区域 我无法手动裁剪它 所以我正在寻找一种可以做到这一点的方法 剪了一张 从以下帖子中尝试了此代码 如何在 OpenCV 中删除图像中的空白 h
  • PHP 的同步 AMQP

    PHP 能否像 RPC 服务一样对待 AMQP 发送消息并阻塞直到返回回复 是否有任何好的示例 是否有任何库以易于使用的方式包装此类功能 我希望拥有代理消息传递系统的灵活性 但避免 Web 层需要了解其异步性质 当然 绝对 看看 RPC 风
  • Automapper:手动映射属性

    我刚刚开始使用 automapper 来映射 DTO实体 它似乎工作得很好 在某些特殊情况下 我只想映射某些属性并执行额外的检查 如果没有自动映射器 代码如下所示 使用fasterflect的PropertyExtensions objec
  • 显示提交 A 已打开且提交 B 未打开的所有分支?

    我有多个分支 并且发现了一个提交 A 它向系统引入了一个错误 随后 这个问题被其中一个分支上的提交 B 修复并合并回 master 但当时它并没有被挑选到所有有问题的分支 我想知道是否有一个命令可以显示所有有提交 A 但没有提交 B 的违规
  • CodeIgniter DB 会话问题:sess_expire_on_close

    当 CI 的会话存储在数据库中时 我遇到了一个非常奇怪的问题 我使用会话来存储有关用户是否登录我的网站的信息 由于某种原因 我的一个来自立陶宛的朋友 我提到了这个国家 以防它以某种方式相关 无法登录 当我监视会话表时 她似乎正在为她访问的每
  • Ruby 可以与 r 交互吗?

    一位朋友需要为她的博士学位做一些 R 编程 由于我是一名程序员 所以请我帮助她 所以我看了一些r http www r project org related http www programmingr com webstuff http
  • 如何在Spring Boot测试中强制事务提交?

    如何在 Spring Boot 中强制事务提交 使用 Spring Data 运行方法时 and not方法之后 我读过这里应该可以 Transactional propagation Propagation REQUIRES NEW 在另
  • 如何对浮点数和复数进行近似结构模式匹配

    我读过并理解浮点数舍入问题 https docs python org 3 tutorial floatingpoint html例如 gt gt gt sum 0 1 10 1 0 False gt gt gt 1 1 2 2 3 3 F
  • Django - 自定义 403 模板

    我正在尝试在 Django 1 5 中使用我的 403 404 500 自定义模板 404 和 500 工作完美 但 403 仍然向我展示内置的 Django 403 模板 我将所有三个模板都放在项目的根模板目录中 它们被命名为 403 h
  • 无法在使用 Arquillian 和 WildFly 的 JPA 集成测试中注入 EntityManager

    我正在尝试使用以下堆栈进行集成测试 App server Embedded WildFly CDI container Weld Database In memory H2 ORM Hibernate JPA Platform Java 8
  • 哪些 C++ 编译器(如果有)进行尾递归优化?

    在我看来 在 C 和 C 中进行尾递归优化都可以很好地工作 但在调试时我似乎从未看到表明这种优化的帧堆栈 这很好 因为堆栈告诉我递归的深度 不过 优化也会很好 有 C 编译器进行此优化吗 为什么 为什么不 我该如何告诉编译器去做呢 对于 M
  • 我可以通过 JNI 从 Node.js 调用 Java 吗?如何调用?

    我可以通过 Node js 调用 JavaJNI 有例子吗 你应该尝试节点java https github com nearinfinity node javanpm 模块是一个编写良好的 JNI 包装器 Node jave 似乎还没有被
  • Google 地图:自动关闭打开的 InfoWindows?

    在我的网站上 http www uptownelite com test html city dallas tx 我正在使用 Google Maps API v3 在地图上放置房屋标记 除非您明确单击关闭图标 否则 InfoWindows
  • 将 @Embeddable 映射到单独的表中

    两个表如 CREATE TABLE foo id INT PRIMARY KEY x TEXT CREATE TABLE bar foo id INT REFERENCES foo id ON DELETE CASCADE y TEXT z
  • MPI_Send() 和 MPI_Ssend() 之间的区别?

    I know MPI Send 是一个阻塞调用 它会等待直到可以安全地修改应用程序缓冲区以供重用 为了使发送调用同步 应该与接收者握手 我们需要使用MPI Ssend 我想知道两者之间的区别 假设我需要在进程之间发送固定数量的字节 哪一个应