Difference between revisions of "Template:ElementTypeCommunication"
(Created page with 'When a variable is assigned to another, depending on where each variable is allocated to, there may be communication required to achieve this assignment. Table \ref{tab:eltypecom…') |
m (5 revisions imported) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 13: | Line 13: | ||
| single[on[i]] | | single[on[i]] | ||
| multiple[] | | multiple[] | ||
− | | | + | | individual processes write values to process i |
|- | |- | ||
| multiple[] | | multiple[] | ||
| single[on[i]] | | single[on[i]] | ||
− | | | + | | individual processes read values from process i |
|- | |- | ||
− | | single[i] | + | | single[on[i]] |
− | | single[i] | + | | single[on[i]] |
| local assignment where i==i | | local assignment where i==i | ||
|- | |- | ||
− | | single[i] | + | | single[on[i]] |
− | | single[j] | + | | single[on[j]] |
| communication from j to i where i!=j | | communication from j to i where i!=j | ||
|} | |} | ||
Line 33: | Line 33: | ||
var b:Int :: allocated[single[on[2]]]; | var b:Int :: allocated[single[on[2]]]; | ||
var p; | var p; | ||
− | par p from 0 to 3 | + | par p from 0 to 3 { |
− | |||
if (p==2) b:=p; | if (p==2) b:=p; | ||
a:=b; | a:=b; | ||
+ | sync; | ||
}; | }; | ||
− | This code will result in | + | This code will result in each process reading the value of ''b'' from process 2 and then writing this into ''a''. As already noted, in absence of allocation information the default of allocating to all processes is used. In this example the variable ''a'' can be assumed to additionally have the type ''allocated[multiple]''. Note that communication groups are the same as multiple in this context and share the same semantics. All variables marked multiple are private to their containing process. |
Latest revision as of 15:44, 15 April 2019
When a variable is assigned to another, depending on where each variable is allocated to, there may be communication required to achieve this assignment. Table \ref{tab:eltypecomm} details the communication rules in the assignment \emph{assignmed variable := assigning variable}. If the communication is issued from MPMD programming style then this will be one sided. The default communication listed here is guaranteed to be safe, which may result in a small performance hit.
Assigned Variable | Assigning Variable | Semantics |
---|---|---|
multiple[] | multiple[] | local assignment |
single[on[i]] | multiple[] | individual processes write values to process i |
multiple[] | single[on[i]] | individual processes read values from process i |
single[on[i]] | single[on[i]] | local assignment where i==i |
single[on[i]] | single[on[j]] | communication from j to i where i!=j |
Communication Example
var a:Int; var b:Int :: allocated[single[on[2]]]; var p; par p from 0 to 3 { if (p==2) b:=p; a:=b; sync; };
This code will result in each process reading the value of b from process 2 and then writing this into a. As already noted, in absence of allocation information the default of allocating to all processes is used. In this example the variable a can be assumed to additionally have the type allocated[multiple]. Note that communication groups are the same as multiple in this context and share the same semantics. All variables marked multiple are private to their containing process.