Hi Praveen --
To provide some context for all your questions on domain maps, could you
tell us a bit about who you are, what you are working on, what your goal
is?
1. UPC++ - PGAS library link
<https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&cad=rja&uact=8&ved=0ahUKEwjil7_A197VAhUIso8KHWutBssQFghTMAc&url=http%3A%2F%2Fieeexplore.ieee.org%2Fdocument%2F6877339%2F&usg=AFQjCNG_vMBcm9ejjrFQHPiEq5fdq3vjlg>
2. Bulk library link <https://github.com/jwbuurlage/Bulk>
3. Distributed array protocol link
<https://distributed-array-protocol.readthedocs.io/en/rel-0.10.0/index.html>.
All are inspired by Chapel. But I personally believe that Chapel domain
maps are something more special than them. All these are doing the same
kind of functionality I can't able to identify the special features of
chapel domain maps. What are the special features of domain maps which beat
these similar implementations ?
I'm not sufficiently familiar with these other languages to be able to
compare between them.
In the previous question
<https://stackoverflow.com/questions/45642821/continuation-on-how-do-dmapped-domains-in-chapel-language-get-actually-mapped>
from @brad's comment I came to know associative's domains indexes does not
require (+,*,/) operators.Then how can the indexes are mapped to the
locales by using block-distribution formula low<=idx<=high --->
floor((idx-low)*N / (high-low+1)). Did chapel does some mapping from
non-integer index set to integers ?
Block distributions don't support associative domains; they only support
rectangular domains. The domain map for an associative domain would need
to use some other strategy (like hashing) in order to map indices to
locales or memory locations.
I also found all these approaches uses a mapping from global indexes to
local indexes. Like this
Global Index ----> Map object -----> Local Index.
But Chapel following the notion of Creating a global descriptors for domain
map, domains, arrays. And also local descriptors for these 3 classes.
Whether this style of creating local descriptors is needed in the context
of Chapel language itself ?
Or It has particular advantage than other solutions ? As far as I know
Chapel only creates Local descriptors on all target locales.
The use of global and local descriptors is an implementation choice which
is available to the author of a domain map, but not required. At least a
single descriptor of some sort is required for each of (i) a domain map,
(ii) a domain, (iii) an array so that the compiler has an object for each
variable of these types created by the user's Chapel program and can
dispatch methods to that object. Beyond that, the domain map author can
do whatever they like -- the compiler doesn't know anything other than how
to call methods on the descriptors returned when these variables are
created.
By convention in our distributions...
* the descriptor mentioned above is the global descriptor.
* it's replicated on each locale to avoid communication back to the
original locale, as described on SO.
* there is also a local per-locale descriptor so that different locales
can store different things (e.g., yours can store {1..n/2} and mine
can store {n/2+1..n}).
* methods dispatched on the global descriptors are often implemented
by forwarding to the local descriptors
-Brad
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Chapel-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-users