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

Reply via email to