This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Last revision Both sides next revision | ||
tutorial_lud [2015/03/02 12:05] guillaume old revision restored (2014/05/30 11:49) |
tutorial_lud [2018/06/19 15:45] sanjay |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | In this tutorial, we write an Alphabets program, starting from a mathematical equation for LU decomposition. | + | In this tutorial, we write an Alphabets |
The equation for LU Decomposition, | The equation for LU Decomposition, | ||
- | < | + | |
- | $U_{i, | + | /*< |
+ | $$ | ||
+ | | ||
1=i\le j & A_{i,j}\\ | 1=i\le j & A_{i,j}\\ | ||
1<i\le j & A_{i, | 1<i\le j & A_{i, | ||
- | \end{cases} | + | \end{cases}\\ |
L_{i, | L_{i, | ||
- | 1=j\le i & \frac{A_{i, | + | 1 = i\le j & \frac{A_{i, |
- | 1<i\le j & \frac{1}{U_{j, | + | 1< i\le j & \frac{1}{U_{j, |
- | \end{cases}$ | + | \end{cases} |
- | </latex> | + | $$ |
+ | /*<\latex>*/ | ||
+ | |||
+ | |||
+ | [Temp note due to : in the last case of L, the condition is "1 < j <= i"] | ||
- | =====Writing | + | =====Writing |
====Step 1 : Affine System and Parameters ==== | ====Step 1 : Affine System and Parameters ==== | ||
- | Let's start from an empty alphabets | + | Let's start from an empty alpha file, with LUD as the name of the system, and a positive integer N as its parameter. |
- | A system (Affine System) takes its name from system of affine recurrence equations, and represents a block of computation. An Alphabets | + | A system (Affine System) takes its name from system of affine recurrence equations, and represents a block of computation. An Alpha program may contain multiple systems. |
**Caveat: | **Caveat: | ||
Parameters are runtime constants represented with some symbol in the code. In this example, parameter N will be used to define the size of the matrices, which is not known until runtime. | Parameters are runtime constants represented with some symbol in the code. In this example, parameter N will be used to define the size of the matrices, which is not known until runtime. | ||
- | <sxh alphabets; gutter:false> | + | <sxh alphabets; gutter:true> |
affine LUD {N|N>0} | affine LUD {N|N>0} | ||
. | . | ||
Line 28: | Line 34: | ||
====Step 2 : Variable Declarations==== | ====Step 2 : Variable Declarations==== | ||
- | In most cases, a computation uses some inputs and produces outputs. Such variables must be declared with a name, a data type, and a shape/ | + | In most cases, a computation uses some inputs and produces outputs. Such variables must be declared with a name, a data type, and a shape/ |
For this example, the '' | For this example, the '' | ||
- | <sxh alphabets; gutter:false> | + | <sxh alphabets; gutter:true> |
float A {i, | float A {i, | ||
</ | </ | ||
Similarly, '' | Similarly, '' | ||
- | <sxh alphabets; gutter:false> | + | <sxh alphabets; gutter:true> |
// The convention is that i is the vertical axis going down, and j is the horizontal axis | // The convention is that i is the vertical axis going down, and j is the horizontal axis | ||
float L {i, | float L {i, | ||
Line 40: | Line 46: | ||
</ | </ | ||
Now these variable declarations need to be placed at appropriate places to specify whether they are input/ | Now these variable declarations need to be placed at appropriate places to specify whether they are input/ | ||
- | '' | + | '' |
- | <sxh alphabets; gutter:false> | + | <sxh alphabets; gutter:true> |
affine LUD {N|N>0} | affine LUD {N|N>0} | ||
- | given | + | input float A {i, |
- | float A {i, | + | output |
- | returns | + | |
float L {i, | float L {i, | ||
float U {i, | float U {i, | ||
Line 142: | Line 147: | ||
L = case | L = case | ||
| | ||
- | | + | |
esac; | esac; | ||
</ | </ | ||
====Final Alphabets Program==== | ====Final Alphabets Program==== | ||
- | Combine all of the above, and you will get the Alphabets program for LU decomposition. Don't forget the keyword '' | + | Combine all of the above, and you will get the Alphabets program for LU decomposition. Don't forget the keyword |
- | <sxh alphabets; gutter:false> | + | <sxh alphabets; gutter:true> |
affine LUD {N|N>0} | affine LUD {N|N>0} | ||
- | given | + | input |
float A {i, | float A {i, | ||
- | returns | + | output |
float L {i, | float L {i, | ||
float U {i, | float U {i, | ||
- | through | + | let |
| | ||
{|1==i} : A[i,j]; | {|1==i} : A[i,j]; | ||
Line 161: | Line 166: | ||
L = case | L = case | ||
{i,j|1==j} : A / (i, | {i,j|1==j} : A / (i, | ||
- | {i,j|1<i} : (A - reduce(+, (i, | + | {i,j|1<j} : (A - reduce(+, (i, |
esac; | esac; | ||
. | . | ||
Line 168: | Line 173: | ||
Analyses, transformations, | Analyses, transformations, | ||
Given below is an example script for that does several things using the LUD program we wrote above. | Given below is an example script for that does several things using the LUD program we wrote above. | ||
- | <sxh cs; gutter:false> | + | <sxh cs; gutter:true> |
# read program and store the internal representation in variable prog | # read program and store the internal representation in variable prog | ||
prog = ReadAlphabets(" | prog = ReadAlphabets(" | ||
Line 224: | Line 229: | ||
====OOPS WHAT HAPPENED==== | ====OOPS WHAT HAPPENED==== | ||
You will see that when you execute the code, **//it will produce an error// | You will see that when you execute the code, **//it will produce an error// | ||
+ |