User Tools

Site Tools


tutorial_subsystem

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
tutorial_subsystem [2014/07/12 07:00]
guillaume Part 1 posted
tutorial_subsystem [2017/04/19 13:31] (current)
Line 7: Line 7:
  
 Let us assume that we want to compute the mean of the values of a vector. It is feasible through the following Alpha system: Let us assume that we want to compute the mean of the values of a vector. It is feasible through the following Alpha system:
-<sxh alphabets; gutter:false>+<sxh alphabets; gutter:true>
 affine mean {N | N>0} affine mean {N | N>0}
 input input
Line 21: Line 21:
 </​sxh>​ </​sxh>​
  
-However, let us assume that you already have another Alpha system which computes the sum of the elements of a vector. It is possible to use this affine system (instead of rewriting its equation in the main system), by calling it through a "use equation"+However, let us assume that you already have another Alpha system which computes the sum of the elements of a vector. It is possible to use this affine system (instead of rewriting its equation in the main system), by calling it through a **use equation**
-<sxh alphabets; gutter:false>+<sxh alphabets; gutter:true>
 affine sum {P| P>0} // Computes the sum of the elements of a vector of size P affine sum {P| P>0} // Computes the sum of the elements of a vector of size P
 input input
Line 49: Line 49:
  
 In general, the syntax of a use equation is the following: In general, the syntax of a use equation is the following:
-<sxh alphabets; gutter:false>+<sxh alphabets; gutter:true>
 use subsystem_name[list of parameters] (list of input expressions) returns (list of output variables); use subsystem_name[list of parameters] (list of input expressions) returns (list of output variables);
 </​sxh>​ </​sxh>​
  
-If your subsystem ​have several parameters/​inputs/​outputs,​ you have to provide them in the order in which they are declared.+If your subsystem ​has several parameters/​inputs/​outputs,​ you have to provide them in the order in which they are declared.
  
  
Line 59: Line 59:
 ====Extension domain==== ====Extension domain====
  
-(incoming)+ 
 +Let us assume that you have a system which computes a dot product of two vectors: 
 +<sxh alphabets; gutter:​true>​ 
 +affine dotProduct {N | N>0} 
 +input 
 + float v1 {k | 0<​=k<​N};​ 
 + float v2 {k | 0<​=k<​N};​ 
 +output 
 + float Res {|}; 
 +let 
 + Res = reduce(+, [k], v1[k]*v2[k])
 +
 +</​sxh>​ 
 + 
 +If you want to compute a matrix vector multiplication using this affine system, you will need to instanciate it once per rows of the matrix. Thus, you will need a parametrised number of call to the "​dotProduct"​ system. 
 + 
 +It is possible to do it by using an extension domain: 
 +<sxh alphabets; gutter:​true>​ 
 +affine dotProduct {N | N>0} 
 +input 
 + float v1 {k | 0<​=k<​N};​ 
 + float v2 {k | 0<​=k<​N};​ 
 +output 
 + float Res {|}; 
 +let 
 + Res = reduce(+, [k], v1[k]*v2[k]);​ 
 +
 + 
 +affine matrixVectorProduct {R,S | (R,​S)>​0} 
 +input 
 + float mat {i,j | 0<​=i<​R && 0<​=j<​S }; 
 + float vect {j | 0<​=j<​S};​ 
 +output 
 + float vectRes {i | 0<​=i<​R};​ 
 +let 
 + use {k | 0<​=k<​R} dotProduct[R] ( mat, (k,​j->​j)@vect) returns (vectRes);​ 
 +
 +</​sxh>​ 
 + 
 +The set "{k | 0≤k<​R}"​ before the subsystem name is called the **extension domain**. We are calling the system "​dotProduct"​ once, for each instance of "​k"​ in the extension domain. We can use the indexes of the extension domain to parametrize the parameters, inputs given to the subsystem and the outputs computed by the subsystem:​ 
 +  - the indexes can be used to specify the parameters (ex: "​R+k"​) 
 +  - the first dimensions of the input expressions correspond to the dimensions of the extension domain. For example, each row of "​mat"​ will be sent to a different instance of the subsystem (ex: in the previous example, the third instance of "​dotProduct"​ will receive "​(j->​3,​j)@mat"​ and "​(j->​j)@vect"​ as inputs). 
 +  - the first dimensions of the output variables correspond to the dimensions of the extension domain. All the results from every subsystem call are gathered inside common variables (ex: "​vectRes[3]"​ is the output of the third instance of "​dotProduct"​) 
 + 
 + 
 +Apart from the compatibility of dimensions, the input expressions must be defined at least on the points asked by the subsystem, and the output variable must be defined on a subset of the domain of the subsystem output.
  
  
 ====Transformations involving subsystems==== ====Transformations involving subsystems====
  
-(incomingafter the previous incoming)+**InlineSubSystem:​** Inline the equations of a subsystem inside the affine system calling it. The use equation of the main system is replaced by the equations of the subsystem ​(which are adapted)and new local variables are added. 
 + 
 +The command is: ''​void InlineSubSystem(Program program, String systemName, String label)''​ where ''​label''​ is the label of the inlined use equation. 
 + 
 + 
 +**OutlineSubSystem:​** Given a list of equations of an affine systemm, outline them inside a new system and replace these equation by a use equation. The current version (July 2014do not allow to specify an extension domain, however this is a work in progress. 
 + 
 +The command is ''​void OutlineSubSystem(Program program, String system, String listEquations)''​ where ''​listEquations''​ is the list of label of the equations to be outlined.
tutorial_subsystem.1405170052.txt.gz · Last modified: 2014/07/12 07:00 by guillaume