upcgasnet

What are the differences between "put" and "store" in Partitioned Global Address Space Languages (PGAS) like UPC?


I am a newbie in the area of parallel programming and different models. I was wondering what is the difference between operations like "put" and "store" in languages that follow the PGAS model. Also, it would be very helpful for me if you can direct me to any appropriate resources. The ones I have been reviewing is not answering all my queries.


Solution

  • In the PGAS model, a "put" operation generally moves data from memory with affinity to the caller (aka local memory), to shared memory (possibly with affinity to a remote peer). A "get" operation moves data in the opposite direction; from possibly remote shared memory to local memory. Together these operations are also referred to under the umbrella of Remote Memory Access (RMA).

    There are a variety of mechanisms for synchronizing the completion of PGAS RMA operations (ie finding out when the operation is "done", for some appropriate definition of "done"); these range from "fully blocking" (ie the RMA injection call stalls the initiating thread until it is "done"), to various mechanisms for synchronizing non-blocking RMA operations (that enable overlap of unrelated work). Assuming a "one-sided" PGAS model, these usually share the property that the completion of the operation is accomplished by action of, or signal to, the caller (the initiating rank).

    The term "store" is not used in a normative way by either UPC or GASNet (the tagged models). Other PGAS models may have specific meanings for "store". In particular, Split-C had a "signalling store" operation with the data movement semantics of a "put" but different in that the completion is signalled to the (possibly remote) rank with affinity to the target memory, instead of the initiating rank.