Difference between revisions of "Int"

From Mesham
Jump to navigationJump to search
m (6 revisions imported)
 
(3 intermediate revisions by the same user not shown)
Line 9: Line 9:
 
=== Default typing ===
 
=== Default typing ===
  
In the absence of further type information, the following types are added to the chain:
+
{{ElementDefaultTypes}}
# [[allocated]]
 
# [[multiple]]
 
# [[stack]]
 
# [[onesided]]
 
  
 
== Example ==
 
== Example ==
  
  var i:Int;
+
  function void main() {
var b:=12;
+
    var i:Int;
 +
    var b:=12;
 +
};
  
In this example variable ''i'' is explicitly declared to be of type ''Int''. On line 2, variable ''b'' is declared and via type inference will also be of type ''Int''
+
In this example variable ''i'' is explicitly declared to be of type ''Int''. On line 2, variable ''b'' is declared and via type inference will also be of type ''Int''.
 +
 
 +
''Since: Version 0.41b''
  
 
== Communication ==
 
== Communication ==

Latest revision as of 15:44, 15 April 2019

Syntax

Int

Semantics

A single whole, 32 bit, number. This is also the type of integer constants.

Default typing

In the absence of further type information, the following types are added to the chain:

Example

function void main() {
   var i:Int;
   var b:=12;
};

In this example variable i is explicitly declared to be of type Int. On line 2, variable b is declared and via type inference will also be of type Int.

Since: Version 0.41b

Communication

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.