tutorial_lud

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

Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||

tutorial_lud [2017/04/19 14:09] 127.0.0.1 external edit |
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. Then we will generate code to execute the alphabets program, and test the generated code for correctness. | + | In this tutorial, we write an Alphabets (or Alpha, for now the two are synonymous) program, starting from a mathematical equation for LU decomposition. Then we will generate code to execute the alpha program, and test the generated code for correctness. |

The equation for LU Decomposition, derived from first principles using simple algebra in {{:foundations.pdf|Foundations}} (pg.3), is as follows: | The equation for LU Decomposition, derived from first principles using simple algebra in {{:foundations.pdf|Foundations}} (pg.3), is as follows: | ||

Line 20: | Line 20: | ||

[Temp note due to : in the last case of L, the condition is "1 < j <= i"] | [Temp note due to : in the last case of L, the condition is "1 < j <= i"] | ||

- | =====Writing Alphabets===== | + | =====Writing Alpha===== |

====Step 1 : Affine System and Parameters ==== | ====Step 1 : Affine System and Parameters ==== | ||

- | Let's start from an empty alphabets file, with LUD as the name of the system, and a positive integer N as its parameter. | + | 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 program may contain multiple systems. | + | 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:** Remember the phrase, "It's not a bug, it's a feature"? Well, in a tutorial, a feature is called a "learning opportunity." | **Caveat:** Remember the phrase, "It's not a bug, it's a feature"? Well, in a tutorial, a feature is called a "learning opportunity." | ||

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:true> | + | <sxh alpha; gutter:true> |

affine LUD {N|N>0} | affine LUD {N|N>0} | ||

. | . | ||

Line 34: | 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/size. In Alphabets, the shape/size is represented with polyhedral domains. | + | 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/size. In Alpha, the shape/size is represented with polyhedral domains. |

For this example, the ''A'' matrix is given, and we are computing two triangular matrices ''L'' and ''U''. ''A'' is an NxN square matrix. The declaration for ''A'' looks as follows: | For this example, the ''A'' matrix is given, and we are computing two triangular matrices ''L'' and ''U''. ''A'' is an NxN square matrix. The declaration for ''A'' looks as follows: | ||

<sxh alphabets; gutter:true> | <sxh alphabets; gutter:true> |

tutorial_lud.txt · Last modified: 2019/04/05 09:02 by sanjay