HPX supports Active Global Address Space.Over a long period of time, I can't able to figure out what "AGAS" really is ? By doing some research with HPX-5 supported memory models. What I can able to see is in "AGAS: memory can be moved to other localities in order to balance the system" but in "PGAS" it is not able to do so. But in hpx we still create remote objects (components) with the parameter where to create it(Global identifiers of localities). But using HPX in desktop really hides this feature and also running HPX in rostam I can't able to differentiate it with "PGAS" memory system. Could you please help me to understand this black magic feature of HPX ?
1
There are 1 best solutions below
Related Questions in HPX
- Different C++ mangled names in Boost library and in application
- HPX minimal two node example set-up?
- Q How does HPX fair vs 'apache cloud computing' (e.g. vs spark)?
- Un-named function parameters
- Designing an Iterator to throw an exception on dereference
- What is the correct way to use hpx::when_any function?
- Does HPX provide a task-based parallelized iteration function with grain size control?
- Load balancing, scheduler, data layout in HPX
- Performance of MPI parcelport in HPX
- Is it possible to write code that can switch between HPX and C++1x thread?
- HPX build on Mac gives linker errors
- Recursive parallel algorithms with C++/P2300 sender/receiver execution model
- How to use pybind11 to call hpx async function in recursive python code?
- Can't build HPX with CMake on Windows - found [Boost] suitable version "1.75.0", minimum required is "1.61"
- Compilation error with hpx::dataflow and member function
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
You can think of AGAS as being a distributed key/value 'in memory' database. When you create an object locally, you get a pointer of the standard variety that is referable using
*thisorthis->to get access to the internals. However, you cannot pass athispointer from one node to another and use it arbitrarily. When you create anhpx::component or register an object that you created with AGAS, it essentially stores thethispointer in the database and gives you anhpx::id_typeas a handle (key). This id can be used in function calls on local or remote nodes as a way of referencing the object.If you move the object from one node to another (using an agas function), then AGAS will update it's internal value to reflect the fact that the
thispointer has changed value (it will internally have its destructor called locally and invoke a move of contents into a new one constructed elsewhere) and is located on another node, but the key - the id_type that you have for that object is still valid - note that this is only true if AGAS is doing the relocation - if you just create a copy elsewhere and delete a local object, it's not the same.On a PGAS system, generally speaking, all the nodes share a block of memory with each other, and each node can 'access' memory/data/objects on the other node, by indexing into this shared memory area. So in PGAS, the addresses of items on other nodes are 'fixed' in the sense that data on node 1 is at shared_region + offset*1, data on node 2 is at + offset*2 and so on. This is a slight simplification, but you get the idea.
In HPX, objects are free to float about and you can reference them via the id_types and let AGAS handle the 'real' address lookups. That is why the 'Active' is in AGAS, as opposed to PGAS. In this way data items (components) can be relocated from one place to another, but the handles that refer to them can be immutable. In this sense the 'Address Space' part of AGAS is saying that hpx::id_type's can be thought of as addresses that span all the nodes in the job.