MPI 中的幽灵细胞交换模式

2024-01-04

我正在使用 MPI 实现分布式图像(灰度)卷积。我现有的模式是在根进程中将图像读取为一维扁平数组,然后将它们分散到所有进程(行分解),然后执行MPI_Gather在根进程中,然后再次将图像作为一维展平数组写出。显然,这不会给出预期的结果,因为使用图像卷积时,边界处的情况会变得棘手。

因此,为了改进上述模式,我想实现所谓的ghost cell exchange模式,其中进程交换它们的行ghost rows.在伪代码中:

if (rank == 0) {
    src = null
    dest = rank + 1
}

if (rank == size - 1) {
    src = rank - 1
    dest = null
} else {
   src = rank - 1
   dest = rank + 1
}

MPI_SendRecv(&sendbuf[offset], slen, dest..
             &recvbuf[offset], rlen, src);

如何为每个进程上的“幽灵行”分配内存?我应该预先分配内存然后分散吗?我不想采用“自定义数据类型”解决方案,因为它对于我正在考虑的问题的范围来说太过分了。


理想情况下,幽灵细胞应该与您的内存块位于同一内存块中。normal细胞。这样,您就可以保持寻址方案简单。在该方案中,图像由多个完整行分布,使用MPI_Scatter and MPI_Gather。在非边界排名中,您为另外两个幽灵行分配足够的内存:

height = total_hight / ranks;
std::vector<float> data(width * (height + 2));
float* image = &data[width];
float* ghost_north = &data[0]
float* ghost_south = &data[width * (height + 1)]
float* inner_north = image;
float* inner_south = &image[width * (height - 1)]
MPI_Scatter(root_image, width * height, MPI_FLOAT,
            image, width * height, MPI_FLOAT, ...);
...
iterations {
    MPI_SendRecv(inner_north, width, MPI_FLOAT, north, tag,
                 ghost_north, width, MPI_FLOAT, north, tag, ...)
    MPI_SendRecv(inner_south, width, MPI_FLOAT, south, tag,
                 ghost_south, width, MPI_FLOAT, south, tag, ...)
   ... compute ...
}
MPI_Gather(image, width * height, MPI_FLOAT,
           root_image, width * height, MPI_FLOAT, ...);

该伪代码不考虑特殊的边界情况。

简单的一维分割的问题是通信成本和额外的光环数据不是最佳的。特别是对于较小的图像和较大数量的参与行列。

这是一个Rolf Rabenseifner 的优秀例子 https://fs.hlrs.de/projects/par/par_prog_ws/pdf/heat_mpi_2.pdf关于 MPI 的数据分解和 halo 通信方法。他还解释了如何改进沟通方法。对于 2D 分解,您将需要派生 MPI 数据类型用于初始通信和垂直边界。

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

MPI 中的幽灵细胞交换模式 的相关文章

  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 如何向WebRequest添加参数?

    我需要从 Web 服务调用一个方法 所以我编写了以下代码 private string urlPath http xxx xxx xxx manager string request urlPath index php org get or
  • C# 中直接从 URL 获取图像尺寸

    我正在尝试使用以下代码直接从网络上获取图片的尺寸 string image http www hephaestusproject com csharp3 png byte imageData new WebClient DownloadDa
  • 无需登录即可在 Intranet 上获取 Web 应用程序的域\用户名

    我的 Intranet 上有一个 Web 应用程序 VS 2005 有几个页面不需要用户登录应用程序 反馈和默认页面 我正在尝试获取要显示和 或发送反馈的域名和用户名 有没有一种方法可以在不需要用户登录的情况下执行此操作 我试过了this
  • std::bind2nd 和 std::bind 与二维数组和结构数组

    我知道 C 有 lambda 并且 std bind1st std bind2nd 和 std bind 已弃用 然而 从C 的基础开始 我们可以更好地理解新特性 所以 我从这个非常简单的代码开始 使用int 数组s 第一个例子 与std
  • 如何检查号码是否只有唯一的数字?

    例如 2345 是唯一的数字 因为没有数字显示两次 但 3324 不是唯一的数字 因为 3 出现了两次 我尝试使用 但我 代码 显示但我没有得到数字我得到了数字 编辑 你不能使用字符串 number 10 number 100 number
  • 静态 OpenCV 库中未定义的引用

    我有一个使用 OpenCV 3 1 的 C 项目 并且使用共享库可以正常工作 但现在我想使用静态库 位于项目目录中的文件夹中 来编译它 因为我希望能够在未安装 OpenCV 的情况下导出它 如果需要还可以编辑和重新编译 这次我重新编译了 O
  • 如何将 Visual-Studio 2010 切换到 c++11

    我是 c 编程新手 我想尝试 c 11 新功能 那么我要问的是如何切换 Visual studio 2010 才能编译 c 11 源代码 你可以参考这个表 VC10 中的 C 0x 核心语言功能 表格 http blogs msdn com
  • 如何在 ASP.NET Core 6.0 Web API 项目中启用 cors?

    在我的 ASP NET Core 6 0 Web API 项目中配置了 CORS 但预检请求收到 http 405 错误 换句话说 不允许使用 HTTP OPTION 看起来 cors 没有启用 我见过的例子config EnableCor
  • C语言中没有循环可以打印数组吗?

    例如 在Python中 如果我们将一个列表作为数组 它会直接用一行代码打印整个数组 有什么办法可以用C语言实现同样的事情吗 简短回答 No 对表格上几乎所有问题的简短回答 用 C 语言做 X 工作能像用 Python 一样简单吗 No 长答
  • 如何从 C# 调用 F# 类型扩展(静态成员函数)

    FSharp 代码的结构如下 我无法控制源代码 namespace FS
  • C# 实体框架我们应该使用 POCO.Id 还是仅使用 POCO 设置关系?

    我在服务方法中遇到一种情况 将 POCO 分配为另一个 POCO 的子对象无法按预期工作 我正在使用实体框架 4 public void ChangeOrderCurrency Currency currency order Currenc
  • PartialView Action 正在调用自身

    我有 MVC 应用程序 它用于从主视图 ProductMaster 将 ProductAreaGrid 列表显示为 PartialView 并且它将在局部视图内将 CreateProductArea 作为 PartialView 我的 Gr
  • C#生成的csv文件通过电子邮件发送嵌入到Lotus Note中电子邮件的底部

    我遇到了一个奇怪的问题 即使用 NET SmtpClient 通过电子邮件发送的 CSV 附件出现在电子邮件底部 而不是 Lotus Note 中的附件 我只是不知道如何解决这个问题 而且我无法访问客户端计算机 这使得调试非常困难 我可以采
  • 从二进制文件读取字节到 long int

    我有两个问题 我有二进制文件的数据 我想使用 read 函数读取前 8 个字节以签署 long int 但我不能 你知道我该怎么做吗 如何直接读取一块数据到字符串中 我可以像所示那样阅读吗 前任 ifstream is is open te
  • 确定相关词的编程方式?

    使用网络服务或软件库 我希望能够识别与词根相关的单词 例如 座位 和 安全带 共享词根 座位 但 西雅图 不会被视为匹配 简单的字符串比较对于这类事情似乎是不可行的 除了定义我自己的字典之外 是否有任何库或 Web 服务不仅可以返回单词定义
  • 如何使用 C# 将表格粘贴到 Ms-Word 文档的末尾

    我有一个预制的 Word 模板 其中有一个表格 我想打开它 然后在文档末尾添加 粘贴 另一个表格 问题是它不会转到文档的末尾 而是将新表格粘贴到原始表格的第一个单元格中 任何帮助将不胜感激 previous code copied a ta
  • 在 lua 中加载 C++ 模块时出现“尝试索引字符串值”错误

    我正在尝试使用 lua 用 C 编写的函数 下面给出的是cpp文件 extern C include lua h include lauxlib h include lualib h static int add 5 lua State L
  • 是否可以检测流是否已被客户端关闭?

    简要介绍一下情况 我有一项服务可以通过套接字接收信息并发送回复 连接不安全 我想设置另一个可以为这些连接提供 TLS 的服务 这个新服务将提供单个端口并根据提供的客户端证书分发连接 我不想使用 stunnel 有几个原因 其中之一是每个接收
  • 查找和替换正则表达式问题

    感谢这里对我其他问题的所有大力帮助 我开始掌握正则表达式 但我仍然对这个一无所知 我的代码是 StreamReader reader new StreamReader fDialog FileName ToString string con

随机推荐

  • 删除 JTable 中的单元格编辑器边框 (Windows LaF)

    我有一个基于 JTextField 的单元格编辑器 带有这个丑陋的黑色边框 忽略左侧的插入符号 有没有办法将其删除 使其看起来与此类似 创建表后 您可以尝试以下操作 DefaultCellEditor editor DefaultCellE
  • 如何制作复杂列表的完全非共享副本? (深拷贝是不够的)

    看一下这段 Python 代码 a 1 2 3 b 4 5 6 c a b b a 1 2 3 4 5 6 4 5 6 1 2 3 c 0 0 append 99 1 2 3 99 4 5 6 4 5 6 1 2 3 99 注意如何修改一个
  • 如何将 bean 注入 Spring Condition 类?

    我正在定义条件 稍后我将检查这些条件以动态加载我的服务接口的两个实现之一 Component public class IsPolicyEnabled implements Condition Autowired private MyPro
  • 如果可以构造 HttpContext 为什么要模拟它呢?

    我一直在 ASP NET 中以某种方式伪造 模拟 存根 HttpContext 在 ASP NET MVC MonoRail 中更容易 但我可以看到 HttpContext 本身可以轻松构建 只需几行代码即可 var tw new Stri
  • 我可以通过计算表达式来确定并可能设置为 null 的属性吗?

    我有一个服务 它接受一个对象 并根据其中的属性执行不同的操作 这样 这些属性中的任何一个都可以为 null 这意味着不执行此操作 我正在尝试创建一个非常简单易用的 API 来在某些属性可能深达多个级别的情况下执行此操作 这是当前实现的示例
  • 错误“命名空间不直接包含字段或方法等成员”

    我正在尝试构建我的 C 项目 但收到错误消息 命名空间不直接包含字段或方法等成员 它标记了 app config 文件的第一个字符 小于号 我检查了所有文件 查找命名空间内直接存在变量或函数的位置 但什么也没发现 app config 看起
  • 如何在 Django 中用 None 保存 FileField?

    我有带有 Avatar 字段的模型配置文件 使用 FileField class Profile models Model avatar models FileField Uploaded avatar of profile storage
  • 查找文件中包含重复字符的行

    我需要一些帮助来查找文本文件中包含重复字符的行 我更喜欢使用 bash 但任何其他方法都可以 一个小例子只是为了让事情变得清楚 文件 txt 1234 11234 abcd 12234 ab321 1233 zs11w 12w2 所需的输出
  • 这两种算法的结果有区别吗?

    这两种算法用于检查有效的会员号码 第一个是公司给我的 第二个是我设计的 从我的测试中我看不出它们在功能上有任何区别 有没有任何情况下任何人都可以看到他们会返回不同的输出 test input 6014355021355010 or 6014
  • 使用适用于 Amazon S3 存储桶的 Java SDK 下载大量文件

    我有大量文件需要从 S3 存储桶下载 我的问题类似于本文 https stackoverflow com questions 1051275 downloading a large number of files from s3除非我想用
  • UIWebView背景颜色

    我正在将 HTML 字符串加载到 UIWebView 中 以便能够查看富文本 到目前为止 一切都很好 但我有一个小问题 在我的 Nib 文件中 我将背景属性设置为绿色 然而 当它显示时 背景是白色的 然后 在类文件中 我添加了以下内容 my
  • Django 外键查询最佳实践

    模型 py class Category models Model name models CharField max length 50 class SubCatergory models Model parent category mo
  • Plotly:并排图之间的 shareX

    我想要两个并排的图共享相同的 X 轴和相同的工具栏 这意味着 通过放大第一个图 第二个图应自动调整大小到相同的缩放区域 一种方法是将图堆叠在另一个之上 使用shareX TRUE 但我需要他们并排 在 python 中似乎有一种方法可以做到
  • 便宜又令人愉快的 rand() 替换

    在对大型游戏程序进行分析后 我发现库函数 rand 消耗了总处理时间的相当一部分 我对随机数生成器的要求不是很繁重 它是否通过大量纯随机性统计测试并不重要 我只是想要一些便宜又令人愉快而且速度非常快的东西 有什么建议么 很少有常用的算法比L
  • 如何使用 useContext 更改 Context 的值?

    使用useContextReact 16 8 的 hook 效果很好 您可以创建组件 使用挂钩并利用上下文值 不会出现任何问题 我不确定如何将更改应用于上下文提供程序值 1 useContext 钩子严格来说是消费上下文值的一种手段吗 2
  • 从 Windows 服务通过调制解调器播放语音

    我正在开发一个 VB NET Windows 服务 该服务持续检查 BMS 数据库是否有新警报 并拨打电话远程警告操作员 我目前正在使用 NET TAPI 包装器和 SAPI 5 3 互操作程序集 我通过电话交谈的步骤是 初始化TAPI接口
  • 如何从主机到 mysql docker 容器执行 mysqldump 命令

    我想为在 docker 容器中运行的数据库创建 mysql 转储 但是 我不想进入容器并执行命令 而是从主机执行此操作 有没有办法做到 我尝试了一些东西 但可能我的命令是错误的 docker exec d mysql sh mysqldum
  • 如何修复 checkmarx 信任边界违规

    我保留用户输入请求中的值 查克马克思抱怨有违反信任边界 从元素请求获取用户输入 该元素的值在没有经过适当清理或验证的情况下流经代码 并最终存储在服务器端 Session 对象中 我还发现这个帖子 https stackoverflow co
  • Java 基本数据类型修饰符是什么?

    好吧 我已经用 Java 编程三年了 现在 我认为自己非常有经验 然而 在查看 Java SE 源代码时 我遇到了一些意想不到的事情 in class Double public static final double MIN NORMAL
  • MPI 中的幽灵细胞交换模式

    我正在使用 MPI 实现分布式图像 灰度 卷积 我现有的模式是在根进程中将图像读取为一维扁平数组 然后将它们分散到所有进程 行分解 然后执行MPI Gather在根进程中 然后再次将图像作为一维展平数组写出 显然 这不会给出预期的结果 因为