schedule_code_generator_for_code_with_subsystem

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

schedule_code_generator_for_code_with_subsystem [2014/07/07 14:37] yun [TargetMapping for the Matrix Multiplication Example] |
schedule_code_generator_for_code_with_subsystem [2017/04/19 13:31] |
||
---|---|---|---|

Line 1: | Line 1: | ||

- | ======Schedule Code Generator for SubSystem====== | ||

- | Given an affine system with subsystems/useEquations, this page shows how to specify the targetmapping for the system and generate the code. | ||

- | ====Matrix Multiplication with subsystem==== | ||

- | |||

- | The following code is the alpha program for matrix matrix multiplication with dot-product subsystem. | ||

- | <sxh alphabets; gutter:false> | ||

- | affine matrix_product_SubSyst {N,K,M | N>0 && K>0 && M > 0} // Product between a N*K matrix and a K*M matrix | ||

- | input | ||

- | float A {i,k | 0<=i<N && 0<=k<K}; | ||

- | float B {k,j | 0<=k<K && 0<=j<M}; | ||

- | output | ||

- | float C {i,j | 0<=i<N && 0<=j<M}; | ||

- | let | ||

- | use {iP,jP|0<=iP<N && 0<=jP<M} dot_product[K] ((pi,pj,k->pi,k)@A,(pi,pj,k->k,pj)@B) returns (C); | ||

- | . | ||

- | |||

- | affine dot_product {N| N>0} // Product between 2 vector of size N | ||

- | input | ||

- | float vect1 {i | 0<=i<N }; | ||

- | float vect2 {i | 0<=i<N }; | ||

- | output | ||

- | float Res; | ||

- | local | ||

- | float temp {i | 0<=i<N}; | ||

- | let | ||

- | temp[i] = case | ||

- | {i|i==0} : vect1[0] * vect2[0]; | ||

- | {i |0<i<N} : temp[i-1] + vect1[i]*vect2[i]; | ||

- | esac; | ||

- | Res[] = temp[N-1]; | ||

- | . | ||

- | |||

- | </sxh> | ||

- | |||

- | The program contains two systems. The dot_product system takes two vectors as inputs and computes the doc product of these two vectors. The matrix_product_SubSyst computes matrix C=A*B, the (ip,jp)th element for the answer matrix C is computed by calling the dot product subsystem, and the (ip)th row of A, and (jp)th column of B is passed as input to the subsystem call. | ||

- | |||

- | ====TargetMapping for the Matrix Multiplication Example==== | ||

- | The schedule code generator treats every subsystem call (an instance of the subsystem) as an function call in C. In order to ensure the correctness of the code, each instance of the subsystem call is attached with three special statement by default. The three statements are memory allocation statement, value copy statement and memory free statement. The memory allocation statement allocates a temporary variable for the corresponding input, and the value copy statement copies the corresponding values into the temporary variable before it is passed into the function call, and the memory free statement frees the memory when the temproary is not useful. | ||

- | |||

- | In order for schedule code generator to generate the code, other than specify the schedule for the useEquation, a schedule has to be specified for each special statement of each input/ouput of the useEquation. | ||

- | |||

- | The following command set the SpaceTimeMap for the (n)th input/output of a useEuqation: | ||

- | |||

schedule_code_generator_for_code_with_subsystem.txt ยท Last modified: 2017/04/19 13:31 (external edit)