HPX支持主动全球地址Space.Over很长一段时间,我不知道到底什么是"AGAS“?通过对HPX-5支持的记忆模型进行一些研究.我能看到的是"AGAS:内存可以移动到其他地方以平衡系统“,但是在"PGAS”中却不能这样做。但是在hpx中,我们仍然使用要创建它的参数(全局标识符)来创建远程对象(组件)。但是在桌面上使用HPX确实隐藏了这个特性,而且在rostam中运行HPX,我无法将它与"PGAS“内存系统区分开来。你能帮我理解一下HPX的黑魔法功能吗?
发布于 2017-11-22 11:26:44
您可以将AGAS看作是“内存中”数据库中的分布式密钥/值。当您在本地创建一个对象时,您将得到一个标准类型的指针,该指针可以使用*this或this->来访问内部。但是,不能将this指针从一个节点传递到另一个节点并任意使用。创建hpx::组件或注册使用AGAS创建的对象时,它实际上将this指针存储在数据库中,并将hpx::id_type作为句柄(键)提供给您。此id可用于本地或远程节点上的函数调用,作为引用对象的一种方式。
如果您将对象从一个节点移动到另一个节点(使用agas函数),那么AGAS将更新它的内部值,以反映以下事实:this指针已经更改了值(它将在内部调用析构函数,并将内容移动到在别处构造的新节点),并位于另一个节点上,但键--您为该对象拥有的id_type仍然有效--请注意,只有在AGAS进行重新定位时,这才是正确的--如果您只是在其他地方创建副本并删除本地对象,则不一样。
一般来说,在PGAS系统上,所有节点共享一个内存块,每个节点都可以通过索引到这个共享内存区域来“访问”另一个节点上的内存/数据/对象。因此,在PGAS中,其他节点上的项的地址是“固定的”,即节点1上的数据位于shared_region +偏移量*1,节点2上的数据位于+偏移量*2,依此类推。这有点简单化,但你明白了。
在HPX中,对象可以自由浮动,您可以通过id_types引用它们,并让AGAS处理“真实”地址查找。这就是为什么'Active‘是在AGAS,而不是PGAS。通过这种方式,数据项(组件)可以从一个地方迁移到另一个地方,但是引用它们的句柄可以是不可变的。从这个意义上说,AGAS的“Address”部分表示,hpx::id_type的地址可以看作是跨越作业中所有节点的地址。
https://stackoverflow.com/questions/47265310
复制相似问题