【问题标题】:passing AABB tree: serialization of AABB tree?传递AABB树:AABB树的序列化?
【发布时间】:2013-11-12 16:41:51
【问题描述】:

我正在尝试并行化我的代码,并且我正在使用 CGAL 的 AABB 树进行干扰检测(顺便说一句,效率相当不错 :))。 在单台机器上没问题(我不是说它是多线程的,但那是另一回事了),但我现在想一次进行多项分析,我将使用 MPI 将我的软件生成到多台计算机上。障碍在不同的分析中没有变化,因此我的 AABB 树对于所有孩子都是相同的。 为了尽量减少开销,我想避免重新读取和重新构建我的树,实际上,甚至不是写入文件/读取文件操作。

通过 MPI 函数的 SPAWN,我可以给子字符串数组,我想将 AABB 树与其他全局变量一起作为参数传递,以跳过读取文件部分的开销。

第一个问题:这意味着在 argv 中传递类似 1.5MB+ 的内容,这有什么问题吗?

第二个问题:如何通过树?我在thread 中读到了一些有趣的东西,但它已经过时了,并且没有后续行动。有没有人在此期间进行连载?有什么新的指令可以做到吗?否则我会尝试做这样的功能,至少在我的情况下(即,Simple_cartesian 内核,Triangle_3 原语)。欢迎任何帮助:)

【问题讨论】:

  • 关于你的第一个问题:in-ulm.de/~mascheck/various/argmax
  • 太棒了!非常感谢,这真的很有帮助。它确实告诉我我有一些余量:)
  • 阅读更完整,我不会尝试将树作为参数传递。我只是尝试将数据写入文件,并避免重新构建树。谢谢 Erbureth!

标签: c++ mpi cgal aabb


【解决方案1】:

不幸的是,您引用的线程中的答案仍然有效:CGAL 不提供任何帮助序列化 AABB 树的东西。您的 AABB 树中有什么类型的原语?

【讨论】:

  • 我正在使用 Simple_cartesian 内核中的 Triangle_3。我不使用 KD 树,因为我只需要交叉点查询。我查看了链接中回答的 AABB_node、AABB_search_tree、成员 m_primitives 和 m_p_root_node。感谢您的快速回答!
  • 你似乎对 CGAL 了如指掌,所以我希望你能多容忍我一点 :) 你对将 AABB_tree.h 成员“Primitives m_primitives”和“Node* m_p_root_node”有何想法" 公开,并将 m_primitives 的数据(因为它是一个 std::vector,内存排列继续)和 m_p_root_node 指向的数据(即第一个 AABB)到最后一个 AABB 复制到字符中(例如这个 [code] ( ideone.com/7H8dy) 来自这个 [线程] (stackoverflow.com/questions/11353642/vector-serialization))。 (下一条评论...)
  • 要结束最后一部分,也许重新启用 AABB_node.h 的复制构造函数/赋值运算符?还是我完全错了?
  • 不,你没有错。但我怀疑这样的补丁能否在 CGAL 中被正式接受。困难在于 AABB 树代码不控制存储在其中的原语的类型。
  • 我不打算制作补丁(至少现在不打算在这种状态下)。首先,我会编译 CGAL 并进行所需的修改,如果它有效,则创建一个朋友函数来复制或复制。回到真正的问题,我重新阅读了旧邮件,但我忘记了 search_tree。但话又说回来,我想复制类的成员 m_p_tree 指向的数据。我知道 AABB_tree 不控制甚至不知道原语的类型,但这有关系吗?通过AABB_tree的m_p_root_node指向的数据复制Nodes,嵌入了AABB_node类型,不是吗?
猜你喜欢
  • 2017-12-26
  • 2018-12-11
  • 1970-01-01
  • 1970-01-01
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多