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() 之间的区别? 的相关文章

  • Microsoft MPI 不运行

    我正在尝试 Microsoft 的 MPI 实现 我从这里安装了CCP sdk http www microsoft com en us download details aspx id 239 http www microsoft com
  • MPI中如何获取物理机的数量

    我可以用MPI Comm size获取处理器总数 但是如何获取真实物理机的数量呢 If by 物理机你的意思是一组处理元素 共享公共内存地址空间 然后是 MPI 3 按类型分割操作MPI COMM SPLIT TYPE可用于便携式获取此类机
  • 如何在python中将MPI信息传递给ctypes

    我的动机是将 MPI 信息有效地从 python 传递到通过 ctypes 调用的 C 函数 我在 python 中使用 mpi4py 进行 MPI 绑定 我想通过一个用 C 编写并通过 python 中的 ctypes 调用的简单示例 M
  • CMake:手动设置 MPI 标头和二进制文件的路径

    我正在开发一个 MPI 应用程序 它需要与 MPI 的特定实现一起运行 我们称之为 MPIvA 在我的工作站上 安装了 MPI 的另一个实现 我们称之为 MPIvB 我的应用程序是使用 CMake 构建的find library MPI 显
  • MPI:MPICH2 在 Windows 局域网中安装和编程

    我正在学习MPI 我遵循的第一个教程是here http curveto blogspot in search label Parallel 我在 Windows 7 上使用 MSVC 2010 成功运行的代码是 include mpi h
  • 通过 mmap 文件进行 IPC:应该使用原子和/或易失性吗?

    我使用 mmap 文件在进程之间共享数据 代码是这样的 struct Shared int Data int file open file dat O RDWR Shared shared static cast
  • MPI_Send() 和 MPI_Ssend() 之间的区别?

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

    我正在尝试在 Python 中执行一些简单的 IPC 如下所示 一个 Python 进程启动另一个进程subprocess 子进程将一些数据发送到管道中 父进程接收它 这是我当前的实现 parent py import pickle imp
  • #pragma 末尾的隐式屏障

    朋友们 我正在尝试学习 openMP 范例 我使用以下代码来理解 omp for pragma int main void int tid int i omp set num threads 5 pragma omp parallel pr
  • msgrcv - SA_RESTART 标志不起作用

    我的使用 IPC 队列在线程之间通信的代码有问题 我需要安全地处理 SIGINT 让程序在关闭之前出现 SIGINT 时完成所有活动线程 不过 我在寻找解决方案方面遇到了严重的问题 因为即使使用带有标志 SA RESTART 的 SIGIN
  • 将一个对象传递给默认 AppDomain,以从进程内创建的子 AppDomain 接收回调

    地点 我正在从我的进程创建一个子应用程序域来加载程序集 我能够调用此 AppDomain 我想将一个对象从我的默认进程 AppDomain 传递到这个新创建的 AppDomain 以接收从新 AppDomain 中加载的程序集到我的默认 A
  • 处理器的 mpi 数量错误

    抱歉 我肯定犯了一个愚蠢的错误 但没有成功 我正在编译一个简单的 mpi hello world include
  • 在Python中与子进程多次通信

    这个问题不是重复的 与一个进程进行多次通信而不破坏管道 https stackoverflow com questions 3065060 communicate multiple times with a process without
  • Android IPC远程服务调用显示错误

    我想做一个关于IPC通信 服务之间的通信 的演示应用程序 我在用AIDL为了那个原因 我发现大部分教程RemoteService和客户端在同一个包中 我实际上是分开做的 同时传递我正在使用的对象Parcelable方法和面临的错误 它说就像
  • 使用 WM_COPYDATA 在进程之间发送数据

    我希望在进程之间发送文本 我发现了很多这样的例子 但没有一个我可以工作 这是我到目前为止所拥有的 对于发送部分 COPYDATASTRUCT CDS CDS dwData 1 CDS cbData 8 CDS lpData NULL Sen
  • MPI+CUDA 与纯 MPI 相比有何优势?

    加速应用程序的常用方法是使用 MPI 或更高级别的库 例如在幕后使用 MPI 的 PETSc 并行化应用程序 然而 现在每个人似乎都对使用 CUDA 来并行化他们的应用程序或使用 MPI 和 CUDA 的混合来解决更雄心勃勃 更大的问题感兴
  • 无法使用 conda 安装 mpi4py 并指定预安装的 mpicc 路径

    我已经尝试安装mpi4py with env MPICC path to openmpi bin mpicc conda install c anaconda mpi4py 但我收到这样的消息 The following NEW packa
  • openMPI/mpich2 不能在多个节点上运行

    我正在尝试在多节点集群上使用 install openMPI 和 mpich2 但在这两种情况下 我在多台计算机上运行时都遇到问题 使用 mpich2 我可以从头节点在特定主机上运行 但是如果我尝试从计算节点到不同节点运行某些内容 我会得到
  • 从一个 Nodejs 应用程序调用另一个 Nodejs 应用程序中的 API 的方法

    我们的应用程序将有一个网站和一个移动应用程序 两者都与同一个 API 后端进行通信 我有一个仅提供 API 服务的 Nodejs 应用程序 还有一个为网站提供 html 页面服务的 Nodejs 应用程序 我正在为这两个应用程序使用 Exp
  • 从 createProcess 外部获取的句柄读取

    我正在尝试创建一个进程 并通过我在外部提供的句柄与其进行通信createProcess功能 stdOutH lt openFile logDir gt stdout log ReadWriteMode hSetBuffering stdOu

随机推荐

  • 在 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 我想知道两者之间的区别 假设我需要在进程之间发送固定数量的字节 哪一个应