User Tools

Site Tools


schedule_code_generator_for_code_with_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
schedule_code_generator_for_code_with_subsystem [2014/07/07 14:46]
yun [TargetMapping for the Matrix Multiplication Example]
schedule_code_generator_for_code_with_subsystem [2017/04/19 13:31] (current)
Line 4: Line 4:
  
 The following code is the alpha program for matrix matrix multiplication with dot-product subsystem. ​ The following code is the alpha program for matrix matrix multiplication with dot-product subsystem. ​
-<sxh alphabets; gutter:false>+<sxh alphabets; gutter:true>
 affine matrix_product_SubSyst {N,K,M | N>0 && K>0 && M > 0} // Product between a N*K matrix and a K*M matrix 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 input
Line 41: Line 41:
  
 The following command set the SpaceTimeMap for the (n)th input/​output of a useEuqation identified with lable: The following command set the SpaceTimeMap for the (n)th input/​output of a useEuqation identified with lable:
-<​sxh ​alphabets; gutter:false>+<​sxh ​cs; gutter:true>
 setSpaceTimeMapForUseEquationOptimization(program,​ system, label, isInput, n, SpaceTimeMapForMalloc,​ SpaceTimeMapForValueCopy,​ SpaceTimeMapForMemoryFree);​ setSpaceTimeMapForUseEquationOptimization(program,​ system, label, isInput, n, SpaceTimeMapForMalloc,​ SpaceTimeMapForValueCopy,​ SpaceTimeMapForMemoryFree);​
-<\sxh>+</sxh>
 The parameter isInput sepcifies whether the SpaceTimeMap is specified for input or not, and the last three prarameter specifies the space time map for the three special statement attached to the current input/​output. Those specification can also be specified separately with the following command: The parameter isInput sepcifies whether the SpaceTimeMap is specified for input or not, and the last three prarameter specifies the space time map for the three special statement attached to the current input/​output. Those specification can also be specified separately with the following command:
-<​sxh ​alphabets; gutter:false>+<​sxh ​cs; gutter:true>
 setSpaceTimeMapForMemoryAllocation(program,​ system, label, isInput, n, SpaceTimeMap);​ setSpaceTimeMapForMemoryAllocation(program,​ system, label, isInput, n, SpaceTimeMap);​
 setSpaceTimeMapForValueCopy(program,​ system, label, isInput, n, SpaceTimeMap);​ setSpaceTimeMapForValueCopy(program,​ system, label, isInput, n, SpaceTimeMap);​
 setSpaceTimeMapForMemoryFree(program,​ system, label, isInput, n, SpaceTimeMap);​ setSpaceTimeMapForMemoryFree(program,​ system, label, isInput, n, SpaceTimeMap);​
-<\sxh>+</sxh>
  
 +The following script consists all the commands that specifies the TargetMapping for the matrix multiplication example and generates the code.
 +<sxh cs; gutter:​true>​
 +prog = ReadAlphabets("​./​Matrix_product_SubSyst.ab"​);​
 +rootSystem = "​matrix_product_SubSyst";​
 +subSystem = "​dot_product";​
 +outDir = "​./​test-out/"​+ rootSystem;
 +CheckProgram(prog);​
 +
 +#set the spacetimeMap for the subSystem first
 +setSpaceTimeMap(prog,​ subSystem, "​temp",​ "​(i->​i)"​);​
 +setSpaceTimeMap(prog,​ subSystem, "​Res",​ "​(->​N)"​);​
 +
 +#the identification lable for the useEquation
 +label = "​UseEquation_C";​
 +
 +#set the spacetimeMap for the rootSystem
 +#set the spacetimeMap for the main subsystem call
 +setSpaceTimeMap(prog,​ rootSystem, label, "​(ip,​jp->​1,​ip,​jp,​2)"​);​
 +
 +#set the SpaceTimeMap for the first input of the useEquation
 +setSpaceTimeMapForMemoryAllocation(prog,​ rootSystem, label, 0, 0, "​(ip,​jp->​0,​0,​0,​0)"​);​
 +setSpaceTimeMapForValueCopy(prog,​ rootSystem, label, 0, 0, "​(ip,​jp->​1,​ip,​jp,​0)"​);​
 +setSpaceTimeMapForMemoryFree(prog,​ rootSystem, label, 0, 0, "​(ip,​jp->​2,​0,​0,​0)"​);​
 +
 +#set the SpaceTimeMap for the second input of the useEquation
 +setSpaceTimeMapForUseEquationOptimization(prog,​ rootSystem, label, 0, 1, "​(ip,​jp->​0,​0,​0,​1)",​ "​(ip,​jp->​1,​ip,​jp,​1)",​ "​(ip,​jp->​2,​0,​0,​1)"​);​
 +
 +#set the spaceTimeMap for the first output of the useEquation
 +setSpaceTimeMapForUseEquationOptimization(prog,​ rootSystem, label, 1, 0, "​(ip,​jp->​0,​0,​0,​2)",​ "​(ip,​jp->​1,​ip,​jp,​3)",​ "​(ip,​jp->​2,​0,​0,​2)"​);​
 +
 +#command for generating the code 
 +generateScheduledCode(prog,​ rootSystem, outDir);
 +generateWrapper(prog,​ rootSystem, outDir);
 +generateMakefile(prog,​ rootSystem, outDir);
 +</​sxh>​
 +
 +====TargetMapping for Optimization====
 +The schedule code generator generates three special statements for each input/​output of each useEquation. However, those special statements can be saved under some situation. For example, ​ the <iP, jP>th value of the final matrix C is computed by a dot product of the <​iP>​th row of matrix A and the <​jP>​th column of matrix B
 +by the <iP, jP>th instance of the use equation. Assume that the memory for matrix A, B and C are all allocated in row-wise major, the <​iP>​th row of matrix A can be passed as a pointer of A, no temporary variable is needed. This can be achieved by specifying the memory space for the first input of the useEquation to be the same as A. 
 +
 +The following command is the command that specifies the optimization for the first input of the useEquation C.
 +<sxh cs; gutter:​true>​
 +setMemorySpaceForUseEuqationOptimization(prog,​ rootSystem, label, 0, 0, "​A"​);​
 +</​sxh>​
 +The code generated passes the corresponding pointer of A is passed into the function call.
  
  
schedule_code_generator_for_code_with_subsystem.1404765984.txt.gz ยท Last modified: 2014/07/07 14:46 by yun