HPX的内存架构

时间:2017-11-13 13:19:51

标签: hpx

HPX支持Active Global Address Space。在很长一段时间内,我无法弄清楚" AGAS"真的是 ?通过支持HPX-5 memory models进行一些研究。我能够看到的是" AGAS:记忆可以转移到其他地方以平衡系统"但在" PGAS"它无法做到这一点。但是在hpx中,我们仍然使用参数创建远程对象(组件)来创建它(全局地址标识符)。但是在台式机中使用HPX确实隐藏了这一功能,并且还运行HPX,我无法将其与#34; PGAS"区分开来。记忆系统。你能帮我理解一下HPX的这个黑魔法功能吗?

1 个答案:

答案 0 :(得分:2)

您可以将AGAS视为内存中的分布式键/值'数据库。 在本地创建对象时,您将获得使用*thisthis->可访问的标准变体的指针,以访问内部。 但是,您无法将this指针从一个节点传递到另一个节点并随意使用它。 当您创建hpx::组件或注册使用AGAS创建的对象时,它实际上将this指针存储在数据库中,并为您提供hpx::id_type作为句柄(键)。此id可用于本地或远程节点上的函数调用,作为引用对象的方式。

如果将对象从一个节点移动到另一个节点(使用agas函数),则AGAS将更新它的内部值以反映this指针已更改值的事实(它将在内部让它的析构函数在本地调用并调用内容移动到另一个构造的新内容中)并且位于另一个节点上,但是键 - 你对该对象的id_type仍然有效 - 注意这只有在AGAS是进行重定位 - 如果你只是在别处创建一个副本并删除一个本地对象,那就不一样了。

在PGAS系统上,一般来说,所有节点彼此共享一块内存,每个节点都可以访问'通过索引到此共享内存区域,另一个节点上的内存/数据/对象。所以在PGAS中,其他节点上的项目地址是“固定的”。在节点1上的数据处于shared_region + offset * 1的意义上,节点2上的数据处于+ offset * 2,依此类推。这是一个轻微的简化,但你明白了。

在HPX中,对象可以自由浮动,您可以通过id_types引用它们,让AGAS处理“真实”对象。地址查找。这就是' Active'与PGAS相反,在AGAS中。 通过这种方式,数据项(组件)可以从一个地方重新定位到另一个地方,但引用它们的句柄可以是不可变的。 从这个意义上讲,“地址空间”就是这样的。 AGAS的一部分是说hpx :: id_type' s可以被认为是跨越作业中所有节点的地址。