first simple part of the interpreter finished
Some checks failed
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, 1.10) (push) Has been cancelled
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, 1.6) (push) Has been cancelled
CI / Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} (x64, ubuntu-latest, pre) (push) Has been cancelled

This commit is contained in:
Daniel 2024-08-03 12:11:43 +02:00
parent 6b7a4b4bca
commit f1f8c3b2a4
9 changed files with 188 additions and 175 deletions

2
Ressources.txt Normal file
View File

@ -0,0 +1,2 @@
https://www.markussteinberger.net/papers/DynMemory.pdf
- Shows the performance impact of dynamically allocating Memory for different allocators (including the CUDA internal which I am using. Might be a topic for "Future Work" so as in the future, one could look into another allocator to gain more performance)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 114 KiB

View File

@ -1,313 +1,313 @@
<mxfile host="app.diagrams.net" modified="2024-07-24T12:37:01.199Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0" etag="LhDBOwM3VCB9XBT4hWlF" version="24.5.4" type="device"> <mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0" version="24.7.4">
<diagram name="Page-1" id="gpsZjoig8lt5hVv5Hzwz"> <diagram name="Page-1" id="gpsZjoig8lt5hVv5Hzwz">
<mxGraphModel dx="1604" dy="920" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0"> <mxGraphModel dx="1195" dy="652" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1169" pageHeight="827" math="0" shadow="0">
<root> <root>
<mxCell id="0" /> <mxCell id="0" />
<mxCell id="1" parent="0" /> <mxCell id="1" parent="0" />
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-13" value="" style="group" vertex="1" connectable="0" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-13" value="" style="group" parent="1" vertex="1" connectable="0">
<mxGeometry x="520" y="360" width="240" height="40" as="geometry" /> <mxGeometry x="520" y="360" width="240" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-1" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="9Xn2HrUYLFHSwPnNgvM3-13"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-1" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="9Xn2HrUYLFHSwPnNgvM3-13" vertex="1">
<mxGeometry width="240" height="40" as="geometry" /> <mxGeometry width="240" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-2" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-13" source="9Xn2HrUYLFHSwPnNgvM3-1" target="9Xn2HrUYLFHSwPnNgvM3-1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-2" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-13" source="9Xn2HrUYLFHSwPnNgvM3-1" target="9Xn2HrUYLFHSwPnNgvM3-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="40" y="60" as="sourcePoint" /> <mxPoint x="40" y="60" as="sourcePoint" />
<mxPoint x="90" y="10" as="targetPoint" /> <mxPoint x="90" y="10" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-3" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-13"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-3" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="80" y="40" as="sourcePoint" /> <mxPoint x="80" y="40" as="sourcePoint" />
<mxPoint x="80" as="targetPoint" /> <mxPoint x="80" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-4" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-13"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-4" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="119.89999999999998" y="40" as="sourcePoint" /> <mxPoint x="119.89999999999998" y="40" as="sourcePoint" />
<mxPoint x="119.89999999999998" as="targetPoint" /> <mxPoint x="119.89999999999998" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-5" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-13"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-5" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="160" y="40" as="sourcePoint" /> <mxPoint x="160" y="40" as="sourcePoint" />
<mxPoint x="160" as="targetPoint" /> <mxPoint x="160" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-6" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-13"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-6" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-13" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="200" y="40" as="sourcePoint" /> <mxPoint x="200" y="40" as="sourcePoint" />
<mxPoint x="200" as="targetPoint" /> <mxPoint x="200" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-14" value="" style="group" vertex="1" connectable="0" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-14" value="" style="group" parent="1" vertex="1" connectable="0">
<mxGeometry x="880" y="360" width="240" height="40" as="geometry" /> <mxGeometry x="880" y="360" width="240" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-7" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="9Xn2HrUYLFHSwPnNgvM3-14"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-7" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="9Xn2HrUYLFHSwPnNgvM3-14" vertex="1">
<mxGeometry width="240" height="40" as="geometry" /> <mxGeometry width="240" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-8" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" source="9Xn2HrUYLFHSwPnNgvM3-7" target="9Xn2HrUYLFHSwPnNgvM3-7" parent="9Xn2HrUYLFHSwPnNgvM3-14"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-8" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-14" source="9Xn2HrUYLFHSwPnNgvM3-7" target="9Xn2HrUYLFHSwPnNgvM3-7" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="40" y="60" as="sourcePoint" /> <mxPoint x="40" y="60" as="sourcePoint" />
<mxPoint x="90" y="10" as="targetPoint" /> <mxPoint x="90" y="10" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-9" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-14"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-9" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-14" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="80" y="40" as="sourcePoint" /> <mxPoint x="80" y="40" as="sourcePoint" />
<mxPoint x="80" as="targetPoint" /> <mxPoint x="80" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-10" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-14"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-10" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-14" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="119.89999999999998" y="40" as="sourcePoint" /> <mxPoint x="119.89999999999998" y="40" as="sourcePoint" />
<mxPoint x="119.89999999999998" as="targetPoint" /> <mxPoint x="119.89999999999998" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-11" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-14"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-11" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-14" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="160" y="40" as="sourcePoint" /> <mxPoint x="160" y="40" as="sourcePoint" />
<mxPoint x="160" as="targetPoint" /> <mxPoint x="160" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-12" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="9Xn2HrUYLFHSwPnNgvM3-14"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-12" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="9Xn2HrUYLFHSwPnNgvM3-14" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="200" y="40" as="sourcePoint" /> <mxPoint x="200" y="40" as="sourcePoint" />
<mxPoint x="200" as="targetPoint" /> <mxPoint x="200" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-37" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-37" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" parent="1" vertex="1">
<mxGeometry x="920" y="520" width="200" height="40" as="geometry" /> <mxGeometry x="920" y="520" width="200" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-39" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-39" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1000" y="520" as="sourcePoint" /> <mxPoint x="1000" y="520" as="sourcePoint" />
<mxPoint x="1040" y="520" as="targetPoint" /> <mxPoint x="1040" y="520" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-40" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-40" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1000" y="560" as="sourcePoint" /> <mxPoint x="1000" y="560" as="sourcePoint" />
<mxPoint x="1040" y="560" as="targetPoint" /> <mxPoint x="1040" y="560" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-41" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-41" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1000" y="600" as="sourcePoint" /> <mxPoint x="1000" y="600" as="sourcePoint" />
<mxPoint x="1040" y="600" as="targetPoint" /> <mxPoint x="1040" y="600" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-57" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-57" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1000" y="480" as="sourcePoint" /> <mxPoint x="1000" y="480" as="sourcePoint" />
<mxPoint x="1040" y="480" as="targetPoint" /> <mxPoint x="1040" y="480" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-23" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-23" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" parent="1" vertex="1">
<mxGeometry x="820" y="540" width="240" height="40" as="geometry" /> <mxGeometry x="820" y="540" width="240" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-25" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-25" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920" y="520" as="sourcePoint" /> <mxPoint x="920" y="520" as="sourcePoint" />
<mxPoint x="960" y="520" as="targetPoint" /> <mxPoint x="960" y="520" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-26" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-26" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920" y="560" as="sourcePoint" /> <mxPoint x="920" y="560" as="sourcePoint" />
<mxPoint x="960" y="560" as="targetPoint" /> <mxPoint x="960" y="560" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-27" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-27" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920" y="600" as="sourcePoint" /> <mxPoint x="920" y="600" as="sourcePoint" />
<mxPoint x="960" y="600" as="targetPoint" /> <mxPoint x="960" y="600" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-28" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-28" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920" y="640" as="sourcePoint" /> <mxPoint x="920" y="640" as="sourcePoint" />
<mxPoint x="960" y="640" as="targetPoint" /> <mxPoint x="960" y="640" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-16" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-16" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" parent="1" vertex="1">
<mxGeometry x="820" y="500" width="160" height="40" as="geometry" /> <mxGeometry x="820" y="500" width="160" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-18" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-18" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="880" y="520" as="sourcePoint" /> <mxPoint x="880" y="520" as="sourcePoint" />
<mxPoint x="920" y="520" as="targetPoint" /> <mxPoint x="920" y="520" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-19" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-19" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="880" y="560" as="sourcePoint" /> <mxPoint x="880" y="560" as="sourcePoint" />
<mxPoint x="920" y="560" as="targetPoint" /> <mxPoint x="920" y="560" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-20" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-20" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="880" y="600" as="sourcePoint" /> <mxPoint x="880" y="600" as="sourcePoint" />
<mxPoint x="920" y="600" as="targetPoint" /> <mxPoint x="920" y="600" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-30" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-30" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" parent="1" vertex="1">
<mxGeometry x="940" y="460" width="80" height="40" as="geometry" /> <mxGeometry x="940" y="460" width="80" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-32" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-32" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="960" y="520" as="sourcePoint" /> <mxPoint x="960" y="520" as="sourcePoint" />
<mxPoint x="1000" y="520" as="targetPoint" /> <mxPoint x="1000" y="520" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-44" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-44" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" parent="1" vertex="1">
<mxGeometry x="1040" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="1040" y="440" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-51" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-51" value="" style="rounded=0;whiteSpace=wrap;html=1;rotation=90;" parent="1" vertex="1">
<mxGeometry x="1040" y="480" width="120" height="40" as="geometry" /> <mxGeometry x="1040" y="480" width="120" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-53" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-53" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1080" y="520" as="sourcePoint" /> <mxPoint x="1080" y="520" as="sourcePoint" />
<mxPoint x="1120" y="520" as="targetPoint" /> <mxPoint x="1120" y="520" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-58" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-58" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="880" y="480" as="sourcePoint" /> <mxPoint x="880" y="480" as="sourcePoint" />
<mxPoint x="920" y="480" as="targetPoint" /> <mxPoint x="920" y="480" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-59" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-59" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="920" y="480" as="sourcePoint" /> <mxPoint x="920" y="480" as="sourcePoint" />
<mxPoint x="960" y="480" as="targetPoint" /> <mxPoint x="960" y="480" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-60" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-60" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="960" y="480" as="sourcePoint" /> <mxPoint x="960" y="480" as="sourcePoint" />
<mxPoint x="1000" y="480" as="targetPoint" /> <mxPoint x="1000" y="480" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-61" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-61" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1040" y="480" as="sourcePoint" /> <mxPoint x="1040" y="480" as="sourcePoint" />
<mxPoint x="1080" y="480" as="targetPoint" /> <mxPoint x="1080" y="480" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-62" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-62" value="" style="endArrow=none;html=1;rounded=0;exitX=0.167;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.167;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1080" y="480" as="sourcePoint" /> <mxPoint x="1080" y="480" as="sourcePoint" />
<mxPoint x="1120" y="480" as="targetPoint" /> <mxPoint x="1120" y="480" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-64" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-64" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="899.83" y="400" as="sourcePoint" /> <mxPoint x="899.83" y="400" as="sourcePoint" />
<mxPoint x="899.83" y="440" as="targetPoint" /> <mxPoint x="899.83" y="440" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-65" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-65" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="939.6700000000001" y="400" as="sourcePoint" /> <mxPoint x="939.6700000000001" y="400" as="sourcePoint" />
<mxPoint x="939.6700000000001" y="440" as="targetPoint" /> <mxPoint x="939.6700000000001" y="440" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-66" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-66" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="979.83" y="400" as="sourcePoint" /> <mxPoint x="979.83" y="400" as="sourcePoint" />
<mxPoint x="979.83" y="440" as="targetPoint" /> <mxPoint x="979.83" y="440" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-67" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-67" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1019.6700000000001" y="400" as="sourcePoint" /> <mxPoint x="1019.6700000000001" y="400" as="sourcePoint" />
<mxPoint x="1019.6700000000001" y="440" as="targetPoint" /> <mxPoint x="1019.6700000000001" y="440" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-68" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-68" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1059.8300000000002" y="400" as="sourcePoint" /> <mxPoint x="1059.8300000000002" y="400" as="sourcePoint" />
<mxPoint x="1059.8300000000002" y="440" as="targetPoint" /> <mxPoint x="1059.8300000000002" y="440" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-69" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-69" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="1099.8300000000002" y="400" as="sourcePoint" /> <mxPoint x="1099.8300000000002" y="400" as="sourcePoint" />
<mxPoint x="1099.8300000000002" y="440" as="targetPoint" /> <mxPoint x="1099.8300000000002" y="440" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-70" value="Parameters" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-70" value="Parameters" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="810" y="370" width="70" height="20" as="geometry" /> <mxGeometry x="810" y="370" width="70" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-71" value="Variable Matrix" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-71" value="Variable Matrix" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="450" y="520" width="70" height="40" as="geometry" /> <mxGeometry x="470" y="540" width="70" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-79" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-79" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="880" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="880" y="440" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-80" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-80" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="880" y="480" width="40" height="40" as="geometry" /> <mxGeometry x="880" y="480" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-81" value="p3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-81" value="p3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="880" y="520" width="40" height="40" as="geometry" /> <mxGeometry x="880" y="520" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-82" value="p4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-82" value="p4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="880" y="560" width="40" height="40" as="geometry" /> <mxGeometry x="880" y="560" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-83" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-83" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="920" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="920" y="440" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-84" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-84" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="920" y="480" width="40" height="40" as="geometry" /> <mxGeometry x="920" y="480" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-85" value="p3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-85" value="p3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="920" y="520" width="40" height="40" as="geometry" /> <mxGeometry x="920" y="520" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-86" value="p4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-86" value="p4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="920" y="560" width="40" height="40" as="geometry" /> <mxGeometry x="920" y="560" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-87" value="&lt;div&gt;p5&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-87" value="&lt;div&gt;p5&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="920" y="600" width="40" height="40" as="geometry" /> <mxGeometry x="920" y="600" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-88" value="p6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-88" value="p6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="920" y="640" width="40" height="40" as="geometry" /> <mxGeometry x="920" y="640" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-89" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-89" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="960" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="960" y="440" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-90" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-90" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="960" y="480" width="40" height="40" as="geometry" /> <mxGeometry x="960" y="480" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-91" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-91" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1000" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="1000" y="440" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-92" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-92" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1000" y="480" width="40" height="40" as="geometry" /> <mxGeometry x="1000" y="480" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-93" value="p3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-93" value="p3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1000" y="520" width="40" height="40" as="geometry" /> <mxGeometry x="1000" y="520" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-94" value="p4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-94" value="p4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1000" y="560" width="40" height="40" as="geometry" /> <mxGeometry x="1000" y="560" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-95" value="&lt;div&gt;p5&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-95" value="&lt;div&gt;p5&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1000" y="600" width="40" height="40" as="geometry" /> <mxGeometry x="1000" y="600" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-96" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-96" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1040" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="1040" y="440" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-97" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-97" value="p1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1080" y="440" width="40" height="40" as="geometry" /> <mxGeometry x="1080" y="440" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-98" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-98" value="p2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1080" y="480" width="40" height="40" as="geometry" /> <mxGeometry x="1080" y="480" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-99" value="p3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-99" value="p3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1080" y="520" width="40" height="40" as="geometry" /> <mxGeometry x="1080" y="520" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-100" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" source="9Xn2HrUYLFHSwPnNgvM3-1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-100" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" parent="1" source="9Xn2HrUYLFHSwPnNgvM3-1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="321" as="sourcePoint" /> <mxPoint x="540" y="321" as="sourcePoint" />
<mxPoint x="900" y="360" as="targetPoint" /> <mxPoint x="900" y="360" as="targetPoint" />
@ -317,7 +317,7 @@
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-101" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-101" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="580" y="360" as="sourcePoint" /> <mxPoint x="580" y="360" as="sourcePoint" />
<mxPoint x="940" y="360" as="targetPoint" /> <mxPoint x="940" y="360" as="targetPoint" />
@ -327,7 +327,7 @@
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-102" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-102" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="360" as="sourcePoint" /> <mxPoint x="620" y="360" as="sourcePoint" />
<mxPoint x="980" y="360" as="targetPoint" /> <mxPoint x="980" y="360" as="targetPoint" />
@ -337,7 +337,7 @@
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-103" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-103" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="660" y="360" as="sourcePoint" /> <mxPoint x="660" y="360" as="sourcePoint" />
<mxPoint x="1020" y="360" as="targetPoint" /> <mxPoint x="1020" y="360" as="targetPoint" />
@ -347,7 +347,7 @@
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-104" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-104" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="360" as="sourcePoint" /> <mxPoint x="700" y="360" as="sourcePoint" />
<mxPoint x="1060" y="360" as="targetPoint" /> <mxPoint x="1060" y="360" as="targetPoint" />
@ -357,7 +357,7 @@
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-105" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-105" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="740" y="360" as="sourcePoint" /> <mxPoint x="740" y="360" as="sourcePoint" />
<mxPoint x="1100" y="360" as="targetPoint" /> <mxPoint x="1100" y="360" as="targetPoint" />
@ -367,135 +367,130 @@
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-107" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-107" value="" style="rounded=0;whiteSpace=wrap;html=1;direction=south;" parent="1" vertex="1">
<mxGeometry x="520" y="480" width="160" height="120" as="geometry" /> <mxGeometry x="560" y="480" width="120" height="160" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-109" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-109" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1" source="9Xn2HrUYLFHSwPnNgvM3-117">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="520" y="520" as="sourcePoint" /> <mxPoint x="720" y="520" as="sourcePoint" />
<mxPoint x="680" y="520" as="targetPoint" /> <mxPoint x="560" y="520" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-110" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-110" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1" source="9Xn2HrUYLFHSwPnNgvM3-123">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="639.66" y="480" as="sourcePoint" /> <mxPoint x="640" y="599.31" as="sourcePoint" />
<mxPoint x="639.66" y="599.31" as="targetPoint" /> <mxPoint x="640" y="480" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-111" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-111" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1" source="9Xn2HrUYLFHSwPnNgvM3-119">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="560" y="480" as="sourcePoint" /> <mxPoint x="599.52" y="600" as="sourcePoint" />
<mxPoint x="560" y="599.31" as="targetPoint" /> <mxPoint x="599.52" y="480.69000000000005" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-112" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-114" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1" source="9Xn2HrUYLFHSwPnNgvM3-117">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="599.66" y="480.69" as="sourcePoint" /> <mxPoint x="720" y="559.76" as="sourcePoint" />
<mxPoint x="599.66" y="600" as="targetPoint" /> <mxPoint x="560" y="559.76" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-114" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-115" value="Expressions" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="520" y="560" as="sourcePoint" />
<mxPoint x="680" y="560" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-115" value="Expressions" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="450" y="370" width="70" height="20" as="geometry" /> <mxGeometry x="450" y="370" width="70" height="20" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-116" value="x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-116" value="x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="520" y="480" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-117" value="x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="560" y="480" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-118" value="x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="600" y="480" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-119" value="x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="640" y="480" width="40" height="40" as="geometry" /> <mxGeometry x="640" y="480" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-120" value="x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-117" value="x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="520" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-121" value="x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="560" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-122" value="x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="600" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-123" value="x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="640" y="520" width="40" height="40" as="geometry" /> <mxGeometry x="640" y="520" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-124" value="x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-118" value="x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="520" y="560" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-125" value="x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="560" y="560" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-126" value="x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="600" y="560" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-127" value="x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="640" y="560" width="40" height="40" as="geometry" /> <mxGeometry x="640" y="560" width="40" height="40" as="geometry" />
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-140" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="9Xn2HrUYLFHSwPnNgvM3-1" target="9Xn2HrUYLFHSwPnNgvM3-119"> <mxCell id="9Xn2HrUYLFHSwPnNgvM3-119" value="x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="600" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-120" value="x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="600" y="480" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-121" value="x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="600" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-122" value="x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="600" y="560" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-123" value="x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="640" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-124" value="x1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="560" y="480" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-125" value="x2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="560" y="520" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-126" value="x3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="560" y="560" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-127" value="x4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;direction=south;" parent="1" vertex="1">
<mxGeometry x="560" y="600" width="40" height="40" as="geometry" />
</mxCell>
<mxCell id="J6L5rIkjYbQ64Ew3ZQAR-1" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" edge="1" parent="1" source="9Xn2HrUYLFHSwPnNgvM3-118">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="440" as="sourcePoint" /> <mxPoint x="720" y="600" as="sourcePoint" />
<mxPoint x="760" y="520" as="targetPoint" /> <mxPoint x="560" y="600" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="J6L5rIkjYbQ64Ew3ZQAR-2" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="540" y="400" as="sourcePoint" />
<mxPoint x="580" y="480" as="targetPoint" />
<Array as="points"> <Array as="points">
<mxPoint x="540" y="440" /> <mxPoint x="540" y="440" />
<mxPoint x="700" y="440" /> <mxPoint x="580" y="440" />
<mxPoint x="700" y="500" />
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-141" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" target="9Xn2HrUYLFHSwPnNgvM3-123"> <mxCell id="J6L5rIkjYbQ64Ew3ZQAR-3" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="500" as="sourcePoint" /> <mxPoint x="580" y="400" as="sourcePoint" />
<mxPoint x="760" y="520" as="targetPoint" /> <mxPoint x="620" y="480" as="targetPoint" />
<Array as="points"> <Array as="points">
<mxPoint x="700" y="540" /> <mxPoint x="580" y="440" />
<mxPoint x="620" y="440" />
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-142" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1"> <mxCell id="J6L5rIkjYbQ64Ew3ZQAR-4" value="" style="endArrow=classic;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="540" as="sourcePoint" /> <mxPoint x="620" y="400" as="sourcePoint" />
<mxPoint x="680" y="580" as="targetPoint" /> <mxPoint x="660" y="480" as="targetPoint" />
<Array as="points"> <Array as="points">
<mxPoint x="700" y="580" /> <mxPoint x="620" y="440" />
<mxPoint x="660" y="440" />
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-144" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> <mxCell id="J6L5rIkjYbQ64Ew3ZQAR-5" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="580" y="440" as="sourcePoint" /> <mxPoint x="660" y="470" as="sourcePoint" />
<mxPoint x="579.83" y="400" as="targetPoint" /> <mxPoint x="660" y="400" as="targetPoint" />
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-145" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> <mxCell id="J6L5rIkjYbQ64Ew3ZQAR-9" value="" style="endArrow=none;html=1;rounded=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1" target="9Xn2HrUYLFHSwPnNgvM3-1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="620" y="440" as="sourcePoint" />
<mxPoint x="619.83" y="400" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-146" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="660" y="440" as="sourcePoint" /> <mxPoint x="660" y="440" as="sourcePoint" />
<mxPoint x="659.83" y="400" as="targetPoint" /> <mxPoint x="710" y="403.5" as="targetPoint" />
<Array as="points">
<mxPoint x="700" y="440" />
</Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-147" value="" style="endArrow=none;html=1;rounded=0;" edge="1" parent="1"> <mxCell id="J6L5rIkjYbQ64Ew3ZQAR-10" value="" style="endArrow=none;html=1;rounded=0;entryX=0.75;entryY=1;entryDx=0;entryDy=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="460" as="sourcePoint" />
<mxPoint x="700" y="400" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="9Xn2HrUYLFHSwPnNgvM3-149" value="" style="endArrow=none;html=1;rounded=0;edgeStyle=orthogonalEdgeStyle;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry"> <mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="700" y="440" as="sourcePoint" /> <mxPoint x="700" y="440" as="sourcePoint" />
<mxPoint x="740" y="400" as="targetPoint" /> <mxPoint x="740" y="400" as="targetPoint" />
<Array as="points">
<mxPoint x="740" y="440" />
</Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
</root> </root>

View File

@ -5,6 +5,7 @@ version = "1.0.0-DEV"
[deps] [deps]
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
[compat] [compat]
julia = "1.6.7" julia = "1.6.7"

View File

@ -3,11 +3,11 @@ module ExpressionProcessing
export expr_to_postfix export expr_to_postfix
export PostfixType export PostfixType
export Operator, ADD, SUBTRACT, MULTIPLY, DIVIDE, POWER, ABS, LOG, EXP, SQRT export Operator, ADD, SUBTRACT, MULTIPLY, DIVIDE, POWER, ABS, LOG, EXP, SQRT
export ElementType, EMPTY, FLOAT64, OPERATOR, INT64 export ElementType, EMPTY, FLOAT64, OPERATOR, INDEX
export ExpressionElement export ExpressionElement
@enum Operator::Int64 ADD=1 SUBTRACT=2 MULTIPLY=3 DIVIDE=4 POWER=5 ABS=6 LOG=7 EXP=8 SQRT=9 @enum Operator::Int64 ADD=1 SUBTRACT=2 MULTIPLY=3 DIVIDE=4 POWER=5 ABS=6 LOG=7 EXP=8 SQRT=9
@enum ElementType EMPTY=0 FLOAT64=1 OPERATOR=2 INT64=3 @enum ElementType EMPTY=0 FLOAT64=1 OPERATOR=2 INDEX=3
struct ExpressionElement struct ExpressionElement
Type::ElementType Type::ElementType
@ -84,7 +84,7 @@ function convert_to_ExpressionElement(element)::ExpressionElement
if element isa Float64 if element isa Float64
return ExpressionElement(FLOAT64, Value) return ExpressionElement(FLOAT64, Value)
elseif element isa Int64 elseif element isa Int64
return ExpressionElement(INT64, Value) return ExpressionElement(INDEX, Value)
elseif element isa Operator elseif element isa Operator
return ExpressionElement(OPERATOR, Value) return ExpressionElement(OPERATOR, Value)
else else

View File

@ -1,5 +1,6 @@
module Interpreter module Interpreter
using CUDA using CUDA
using StaticArrays
using ..ExpressionProcessing using ..ExpressionProcessing
export interpret export interpret
@ -20,7 +21,6 @@ function interpret(expressions::Vector{ExpressionProcessing.PostfixType}, variab
cudaExprs = create_cuda_array(expressions, ExpressionElement(EMPTY, 0)) # column corresponds to data for one expression cudaExprs = create_cuda_array(expressions, ExpressionElement(EMPTY, 0)) # column corresponds to data for one expression
cudaStepsize = CuArray([get_max_inner_length(expressions), get_max_inner_length(parameters)]) # put into seperate cuArray, as this is static and would be inefficient to send seperatly to every kernel cudaStepsize = CuArray([get_max_inner_length(expressions), get_max_inner_length(parameters)]) # put into seperate cuArray, as this is static and would be inefficient to send seperatly to every kernel
println(cudaVars)
# Start kernel for each expression to ensure that no warp is working on different expressions # Start kernel for each expression to ensure that no warp is working on different expressions
for i in eachindex(expressions) for i in eachindex(expressions)
kernel = @cuda launch=false interpret_expression(cudaExprs, cudaVars, cudaParams, cudaStepsize, i) kernel = @cuda launch=false interpret_expression(cudaExprs, cudaVars, cudaParams, cudaStepsize, i)
@ -28,27 +28,41 @@ function interpret(expressions::Vector{ExpressionProcessing.PostfixType}, variab
threads = min(variableRows, config.threads) threads = min(variableRows, config.threads)
blocks = cld(variableRows, threads) blocks = cld(variableRows, threads)
# TODO: Operation stack should be n-dims. nr. of Rows == length of this expression
# nr. of columns == nr. of rows in Vars
# This means every run with different variable set has its own stack
# cudaOperationStack = CuArray{Float64}(undef, get_max_inner_length(expressions), length(expressions))
kernel(cudaExprs, cudaVars, cudaParams, cudaStepsize, i; threads, blocks) kernel(cudaExprs, cudaVars, cudaParams, cudaStepsize, i; threads, blocks)
end end
end end
const MAX_STACK_SIZE = 25 # The max number of values the expression can have. so Constant values, Variables and parameters
function interpret_expression(expressions::CuDeviceArray{ExpressionElement}, variables::CuDeviceArray{Float64}, parameters::CuDeviceArray{Float64}, stepsize::CuDeviceArray{Int}, exprIndex::Int) function interpret_expression(expressions::CuDeviceArray{ExpressionElement}, variables::CuDeviceArray{Float64}, parameters::CuDeviceArray{Float64}, stepsize::CuDeviceArray{Int}, exprIndex::Int)
firstExprIndex = ((exprIndex - 1) * stepsize[1]) + 1 # Inclusive firstExprIndex = ((exprIndex - 1) * stepsize[1]) + 1 # Inclusive
lastExprIndex = firstExprIndex + stepsize[1] - 1 # Inclusive lastExprIndex = firstExprIndex + stepsize[1] - 1 # Inclusive
firstParamIndex = ((exprIndex - 1) * stepsize[2]) + 1 # Inclusive firstParamIndex = ((exprIndex - 1) * stepsize[2]) # Exclusive
# lastParamIndex = firstParamIndex + stepsize[2] - 1 # Inclusive (probably not needed) # lastParamIndex = firstParamIndex + stepsize[2] - 1 # Inclusive (probably not needed)
operationStack = MVector{MAX_STACK_SIZE, Float64}(undef) # Vector{Float64}(undef, MAX_STACK_SIZE) # Try to get this to function with variable size too
operationStackTop = 1
for i in reverse(firstExprIndex:lastExprIndex) # Calculate real "lastExprIndex"
if expressions[i].Type != EMPTY
lastExprIndex = i
break
end
end
for i in 1:5 for i in 1:5
@cuprintln(variables[i]) @cuprintln(variables[i])
end end
# Not the correct approach. Redo this to be more stack based. return
for i in firstExprIndex:lastExprIndex for i in firstExprIndex:lastExprIndex
# TODO Implement interpreter
# - start at firstExprIndex and interpret until the first ExpressionElement is "Empty" or we reached lastExprIndex
if expressions[i].Type == EMPTY if expressions[i].Type == EMPTY
break break
elseif expressions[i].Type == INT64 elseif expressions[i].Type == INDEX
# TODO: Load value from variables/parameters matrix and store for calculation # TODO: Load value from variables/parameters matrix and store for calculation
val = expressions[i].Value val = expressions[i].Value
@ -56,14 +70,14 @@ function interpret_expression(expressions::CuDeviceArray{ExpressionElement}, var
# TODO: access variables # TODO: access variables
else else
val = abs(val) val = abs(val)
# TODO: access parameters operationStack[operationStackTop] = parameters[firstParamIndex + val]
end end
continue operationStackTop += 1
elseif expressions[i].Type == FLOAT64 elseif expressions[i].Type == FLOAT64
# TODO: store value as is for calculation operationStack[operationStackTop] = expressions[i].Value
continue operationStackTop += 1
elseif expressions[i].Type == OPERATOR elseif expressions[i].Type == OPERATOR
# TODO: Perform calculation of the two stored values according to the operator # TODO: Perform calculation of the stored values. Either 1 or 2, depending on the operator
continue continue
else else
# TODO: handle this case. Should not happen but in case it does, it needs to do something # TODO: handle this case. Should not happen but in case it does, it needs to do something

View File

@ -13,7 +13,7 @@ parameters[1][1] = 5
@testset "Test conversion expression element" begin @testset "Test conversion expression element" begin
reference1 = ExpressionElement(FLOAT64, reinterpret(Int64, 1.0)) reference1 = ExpressionElement(FLOAT64, reinterpret(Int64, 1.0))
reference2 = ExpressionElement(INT64, reinterpret(Int64, 1)) reference2 = ExpressionElement(INDEX, reinterpret(Int64, 1))
reference3 = ExpressionElement(OPERATOR, reinterpret(Int64, ADD)) reference3 = ExpressionElement(OPERATOR, reinterpret(Int64, ADD))
@test isequal(reference1, ExpressionProcessing.convert_to_ExpressionElement(1.0)) @test isequal(reference1, ExpressionProcessing.convert_to_ExpressionElement(1.0))

View File

@ -10,8 +10,8 @@ parameters = Vector{Vector{Float64}}(undef, 2)
expressions[1] = :(x1 + 1 * x2 + p1) expressions[1] = :(x1 + 1 * x2 + p1)
expressions[2] = :(5 + x1 + 1 * x2 + p1 + p2) expressions[2] = :(5 + x1 + 1 * x2 + p1 + p2)
variables[1,1] = 2.0 variables[1,1] = 2.0
variables[1,2] = 3.0 variables[2,1] = 3.0
variables[2,1] = 0.0 variables[1,2] = 0.0
variables[2,2] = 5.0 variables[2,2] = 5.0
parameters[1] = Vector{Float64}(undef, 1) parameters[1] = Vector{Float64}(undef, 1)
parameters[2] = Vector{Float64}(undef, 2) parameters[2] = Vector{Float64}(undef, 2)

View File

@ -1,3 +1,4 @@
[deps] [deps]
CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba" CUDA = "052768ef-5323-5732-b1bb-66c8b64840ba"
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"