Difference between revisions of "Ready"

From Mesham
Jump to navigationJump to search
m
m (6 revisions imported)
 
(One intermediate revision by the same user not shown)
Line 9: Line 9:
 
== Example ==
 
== Example ==
  
  var a:Int::allocated[single[on[1]]];
+
  function void main() {
var b:Int::allocated[single[on[2]]] :: ready[];
+
    var a:Int::allocated[single[on[1]]];
var c:Int::allocated[single[on[2]]] :: ready[] :: nonblocking[];
+
    var b:Int::allocated[single[on[2]]] :: ready[];
a:=b;
+
    var c:Int::allocated[single[on[2]]] :: ready[] :: nonblocking[];
a:=c;
+
    a:=b;
 +
    a:=c;
 +
};
  
 
The send of assignment ''a:=b'' will only begin once the receive from process 1 has been issued. With the statement ''a:=c'' the send, even though it is [[nonblocking]], will only start once a matching receive has been issued too.
 
The send of assignment ''a:=b'' will only begin once the receive from process 1 has been issued. With the statement ''a:=c'' the send, even though it is [[nonblocking]], will only start once a matching receive has been issued too.

Latest revision as of 15:44, 15 April 2019

Syntax

ready[ ]

Semantics

The ready type will force P2P Send to start only if a matching receive has been posted by the target processor. When used in conjunction with the nonblocking type, communication start will wait until a matching receive is posted. This type acts as a form of handshaking and can improve performance in some uses.

Example

function void main() {
   var a:Int::allocated[single[on[1]]];
   var b:Int::allocated[single[on[2]]] :: ready[];
   var c:Int::allocated[single[on[2]]] :: ready[] :: nonblocking[];
   a:=b;
   a:=c;
};

The send of assignment a:=b will only begin once the receive from process 1 has been issued. With the statement a:=c the send, even though it is nonblocking, will only start once a matching receive has been issued too.

Since: Version 0.5