首页 文章

用MPI发送glib哈希表

提问于
浏览
1

我最近遇到了我的并行程序的问题 . 每个进程都有几个需要与其他进程交换的glib哈希表,这些哈希表可能非常大 . 实现这一目标的最佳方法是什么?

  • 创建派生数据类型

  • 使用mpi打包并解压缩

  • 将键和值作为数组发送(问题,因为在编译时不知道元素的数量)

我之前没有使用过1和2,甚至不知道那是否可能,这就是我问你们的原因..

1 回答

  • 2

    打包/解压缩会创建数据副本:如果 Map 很大,您可以避免这种情况 . 这也排除了你的第三个选择 .

    您确实可以定义自定义数据类型,但这有点棘手 . 有关示例,请参见this answer的结尾(在阅读时将"graph"替换为"map",将"node"替换为"pair") . 我建议你read up关于这些主题,以便深入了解你需要做什么 .

    在编译时不知道元素的数量不应该是一个真正的问题 . 您可以在发送 Map 内容之前发送包含有效负载大小的消息 . 这将使接收进程为接收缓冲区分配足够的内存 .

    您可能还想考虑简单地将 Map 的内容打印到文件,然后让流程读取彼此的输出 . 这要简单得多,但也不如消息传递那么优雅和慢 .

相关问题