TAO Language

The TAO language will be extended with some new instructions and constructs in order to support the new predefined data types.

localint (integers managed by the nodes)

standard sintax all variable kinds as for reals (temporary, register, stack) all the type constructors (record, matrix) bitwise operators: and,or,not,xor,ash,lsh,rot

double (IEEE double precision floating point numbers)

standard sinta all variable kinds as for reals (temporary, register, stack all the type constructors (record, matrix) double are allocated on two contiguous memory locations or ontwo contiguous virtual registers.

real2 (couple of single precision fp numbers used ia a vector fashion)

The pre-defined types for APEmille TAO are thus 6: real, real2, complex, double, localint, integer

New features and new sintax.

local addressing

broadcast

A localint predefined variable called "broadcaster" is replicated on all nodes.

If broadcaster==1 the node is a data source in the broadcast

operations. The "broadcast" instruction lets the programmer specify

whether the broadcast should be performed along one axis, on a plane

or towards all the nodes in the mesh.

type conversions

It is possible to convert data of a type into data of a different type (both Tmille and Jmille data).

The following conversions are possible (where r, d, i, li, c are respectively real, double ,integer, localint and complex variables)

r=real(d)

r=real(li)

r=real(i)

c=complex(r)

c=complex(d)

d=double(r)

d=double(li)

d=double(i)

li=localint(r)

li=localint(d)

li=localint(i)

i=integer(li) !! i gets the value of li of node [0,0,0]

NB: Variables on the right sides can be replaced by expressions of the same type, except for the latter conversion which allows only a variable. Conversions can of course be used inside expressions, e.g. r=real(d)+real(i)+r3[i+localint(r2)]

Implicit conversions

The following sintax is allowed in assignments:

li=i

i=li !! I gets the value of li from node [0,0,0]

In the former case an integer expression can be used as right value, on the other hand the latter allows only a localint variable because it uses the broadcast instruction.In fact 'li' is broadcasted from node [0,0,0] to all the nodes in the mesh, from these nodes it is sent to their Cmille and then each Cmille sends it to its own Tmille; li must be a variable as the broadcast operation is only able to send data from one node's memory to the other nodes' registers and expressions are normally kept on registers.

i=li of [x,y,z] !! I gets the value of li from the selected node

i=li of 12.0 !! Another way to select the node (node_abs_id)

i=li of node 5 !! Each I gets the value of li from node 5 of its board; values will be different on different Tmilles.

In these cases li is again a variable and not an expression.

constructors for double and complex

c=complex(r,r2) the same as c.re=r c.im=r2

c=complex(d,d2) the same as c.re=complex(real(d)) c.im=complex(real(d2))

d=<int_const int_const>

The two constants are used as less significant and most significant parts of the double d.