2010-12-12 65 views
1

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

  • 创建派生数据类型
  • 使用MPI包并解压
  • 发送键&值作为阵列(问题,因为元素的量没有在编译时已知)

我没有使用1 & 2之前,甚至不知道这是否可能,这就是为什么我问你们。

+0

您可能还想调查在MPI-2中实现的单面内存访问。我强调'可能'一词。 – 2010-12-12 15:01:34

回答

2

打包/解压缩创建您的数据的副本:如果你r地图很大,你会想避免这种情况。这也排除了你的第三种选择。

你确实可以定义一个自定义数据类型,但它会有点棘手。举例来说(参见this answer的结尾)(读取时用“对”替换“图”和“对”)。我建议您在这些主题上提供read up以深入了解您需要做的事情。

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

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