MPI Alltoallv 还是更好的单独发送和接收? (表现)

2024-05-04

我有许多进程(大约 100 到 1000 个),每个进程都必须将一些数据发送到其他一些进程(比如大约 10 个)。 (通常,但并非总是必要,如果 A 发送到 B,B 也会发送到 A。)每个进程都知道它必须从哪个进程接收多少数据。

所以我可以用MPI_Alltoallv,许多或大部分消息长度为零。 不过,我听说对于表现原因better to use several MPI_send and MPI_recv通讯而不是全球的MPI_Alltoallv。 我不明白的是:如果一系列发送和接收调用比一个 Alltoallv 调用更有效,why is 全部不是 just 实施为 a 一系列的发送和接收?

对于我(和其他人?)来说,仅使用一个全局调用会方便得多。另外,我可能不得不担心不会遇到多个发送和接收的死锁情况(可以通过某种奇偶策略或更复杂的策略修复?或者通过使用缓冲发送/接收?)。

你同意吗MPI_Alltoallv是必要的slower比,比方说,10MPI_Send and MPI_Recv;如果是的话为什么以及多少?


通常,集体的默认建议是相反的:尽可能使用集体操作,而不是编写自己的代码。 MPI 库拥有的有关通信模式的信息越多,其内部优化的机会就越多。

除非有特殊的硬件支持,集体呼叫实际上是在发送和接收方面在内部实现的。但实际的通信模式可能不仅仅是一系列发送和接收。例如,使用树来广播一段数据可能比使用相同的等级将其发送到一堆接收器更快。优化集体沟通需要做很多工作,而且很难做得更好。

话说回来,MPI_Alltoallv有点不同。在 MPI 级别针对所有不规则通信场景进行优化可能很困难,因此可以想象一些自定义通信代码可以做得更好。例如,一个实现MPI_Alltoallv可能正在同步:它可能要求所有进程“签入”,即使它们必须发送 0 长度的消息。我认为这样的实现不太可能,但是这是野外的一个 http://www-01.ibm.com/support/docview.wss?uid=isg1IZ58190.

所以真正的答案是“这取决于”。如果库实现MPI_Alltoallv与任务不匹配,自定义通信代码将获胜。但在走这条路之前,请检查 MPI-3 邻居集合是否适合您的问题。

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

MPI Alltoallv 还是更好的单独发送和接收? (表现) 的相关文章

  • Javascript 定时通知 - setTimeout、setInterval

    我正在创建一个网络应用程序 允许用户管理日历 CRUD 事件 任务 提醒等 我正在尝试实现一个功能 他们将在事件 任务前 x 分钟收到弹出提醒 根据我的理解 使用 javascript 确实只有一种方法可以做到这一点 登录时 检查数据库中是
  • 模块化算术和 NTT(有限域 DFT)优化

    我想使用 NTT 进行快速平方 参见快速大数平方计算 https stackoverflow com q 18465326 2521214 但即使对于非常大的数字 结果也很慢 超过 12000 位 所以我的问题是 有没有办法优化我的 NTT
  • 在 C# 中创建加密随机数的最快、线程安全的方法?

    请注意 在多个线程上并行生成随机数时 加密随机数生成器不是线程安全的 使用的发电机是RNGCryptoServiceProvider它似乎重复了很长一段随机位 128 位 重现此情况的代码如下所示 缺乏使用锁来保护访问RNGCryptoSe
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 正则表达式库基准

    我最近一直想知道正则表达式实现的性能 并且很难想出很多有用的信息 它很容易对浏览器 javascript 正则表达式性能进行基准测试 网上有很多工具 Chrome 和 Opera 中的 javascript 正则表达式实现几乎摧毁了所有其他
  • Javascript 播放声音性能重吗?

    我正在用 Javascript 制作一个简单的游戏 当一个物体与墙壁碰撞时 它会发出 砰 的声音 声音的响度取决于物体的速度 速度越高 gt 声音越大 播放功能 playSound function id vol ID of the sou
  • 处理大数据二进制文件

    我正在处理包含原始数据的大型二进制文件 每个大约 2 GB 这些文件具有明确定义的结构 其中每个文件都是一个数组events 每个事件都是一个数组data banks Each event and data bank有一个结构 header
  • C++ Exp 与 Log:哪个更快?

    我有一个 C 应用程序 需要比较两个值并决定哪个值更大 唯一的复杂之处是一个数字在对数空间中表示 而另一个则不是 例如 double log num 1 log 1 23 double num 2 1 24 如果我想比较num 1 and
  • 并行化斐波那契序列生成器

    我正在学习并行化 在一项练习中 我得到了一些我应该提高性能的算法 其中之一是斐波那契数列生成器 array 0 0 array 1 1 for q 2 q lt MAX q array q array q 1 array q 2 我怀疑 这
  • jQuery 选择器:为什么 $("#id").find("p") 比 $("#id p") 更快

    该页面的作者 http 24ways org 2011 your jquery now with less suck http 24ways org 2011 your jquery now with less suck断言 jQuery
  • UITableView 由于阴影和边框而滞后

    我有以下代码来向 UITableViewCell 的背景添加边框颜色和阴影 我的问题是这段代码会导致 tableView 本身出现巨大的滞后 请你告诉我如何优化我的代码 防止 UITableView 的滞后 if cell viewWith
  • 匹配集合 Parallel.Foreach

    我正在尝试为 matchcollection 创建一个 Parallel Foreach 循环 它在我构建的刮刀中 我只需要知道在 Parallel Foreach 中放入什么 MatchCollection m Regex Matches
  • 确保 Clojure 中只有一个服务实例正在运行/启动/停止的规范方法?

    我正在用 Neo4j 支持的 Clojure 编写一个有状态服务器 它可以服务套接字请求 例如 HTTP 当然 这意味着我需要能够从该服务器内启动和停止套接字服务器 在设计方面 我希望能够在此服务器中声明一个 服务 并启动和停止它 我在 C
  • 计算元组中与模式匹配的元素

    我有一个矩阵m我想计算零的数量 m 2 0 2 2 4 4 5 4 0 9 4 8 2 2 0 0 我当前的代码如下 def zeroCount M return item for row in M for item in row coun
  • 通过 mpi 发送 c++ std::vector

    我知道存储一个std vector
  • 具有单个成员的结构是否具有与成员类型相同的性能?

    Does struct单个成员是否具有与成员类型相同的性能 内存使用和速度 Example 这段代码是一个struct与单个成员 struct my int int value 是的表现my int与 一样int 同意 harper htt
  • Julia Threads.@threads 比单线程性能慢

    我正在尝试求解一维热方程的数值 我正在使用有限差分 并且在 Julia 中使用 threads 指令时遇到一些问题 特别是下面有相同代码的两个版本 第一个是单线程 而另一个使用 threads 除了 thread指令之外 它们是相同的 fu
  • 错误:process_executor.py:702: ... 当一些作业被分配给执行器时,工作人员停止了。这可能是由于工作超时太短造成的

    根据主题中的错误 修复方法是什么 环境 Python 3 9 或 3 10 Windows 10 x64 使用时出现错误joblib https joblib readthedocs io en latest 对于并行处理 result c
  • 索引在 NOT IN 或 <> 子句中起作用吗?

    我读过 至少 Oracle 数据库中的普通索引基本上是 B 树结构 因此存储处理适当根节点的记录 小于 根的记录被迭代地存储在树的左侧部分 而 大于 根的记录被存储在右侧部分 正是这种存储方法有助于通过树遍历实现更快的扫描 因为深度和广度都

随机推荐