c - 使用 MPI 发送 glib 哈希表

标签 c hashtable mpi glib

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

  • 创建派生数据类型
  • 使用 mpi 打包和解压
  • 将键和值作为数组发送(问题,因为在编译时不知道元素的数量)

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

最佳答案

打包/解包创建您的数据的副本:如果您的 map 很大,您将希望避免这种情况。这也排除了您的第三个选项。

您确实可以定义自定义数据类型,但这会有点棘手。见this answer的结尾举个例子(在阅读时用“map”替换“graph”,用“pair”替换“node”)。我建议你read up了解这些主题,以深入了解您需要做什么。

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

您可能还想考虑简单地将 map 的内容打印到文件中,然后让进程读取彼此的输出。这比消息传递更直接,但也不那么优雅且慢得多。

关于c - 使用 MPI 发送 glib 哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4421905/

相关文章:

python - numpy ndarray 是均匀的和矩形的(子数组必须具有相同的长度)因为它在引擎盖下使用 C 数组吗?

algorithm - 哈希表和子串匹配

java - 是否有解决此错误的方法...Collections 类型中的方法 synchronizedSet(Set<T>, Object) 不可见

c++ - 使用 boost::mpi::packed_oarchive 和 packed_iarchive 进行未知子类的 MPI 传输

MPI_Iprobe 与 MPI_Probe

c - 什么是标记结构以及它们与普通结构有何不同?

c - 根据输入来格式化文本文件

c - 为什么用 argv[] 调用 sscanf() 只能使用一次?

powershell - Sync'd Hashtable 不是 PowerShell 显示友好的。尝试:[HashTable]::Synchronized(@{})

linux - 为什么 MPI 不能优雅地完成?