some stuff

This commit is contained in:
WickedJack99
2025-06-29 17:50:13 +02:00
parent ca317618df
commit ed25153613
8 changed files with 935 additions and 31 deletions

View File

@@ -0,0 +1,299 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.1.1 Chrome/132.0.6834.210 Electron/34.3.3 Safari/537.36" version="26.1.1">
<diagram name="Page-1" id="8kZCEwv9xN98wwWR-AVS">
<mxGraphModel dx="1114" dy="658" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="dkMRLSNARAUGIPq-bAnA-1" value="Cluster" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;" vertex="1" parent="1">
<mxGeometry x="120" y="80" width="680" height="560" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-2" value="Node 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="130" y="90" width="290" height="260" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-3" value="Node 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="500" y="90" width="290" height="260" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-4" value="Node 2" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="130" y="370" width="290" height="260" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-5" value="Node 3" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="500" y="370" width="290" height="260" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-6" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-2" target="dkMRLSNARAUGIPq-bAnA-3">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="370" as="sourcePoint" />
<mxPoint x="450" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-7" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-3" target="dkMRLSNARAUGIPq-bAnA-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="370" as="sourcePoint" />
<mxPoint x="450" y="320" as="targetPoint" />
<Array as="points">
<mxPoint x="460" y="285" />
<mxPoint x="460" y="435" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-8" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-4" target="dkMRLSNARAUGIPq-bAnA-5">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="370" as="sourcePoint" />
<mxPoint x="450" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-9" value="Socket 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="140" y="120" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-10" value="Socket 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="290" y="120" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-11" value="Socket 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="510" y="120" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-12" value="Socket 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="660" y="120" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-13" value="Socket 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="140" y="400" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-14" value="Socket 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="290" y="400" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-15" value="Socket 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="510" y="400" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-16" value="Socket 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="660" y="400" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-17" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-15" target="dkMRLSNARAUGIPq-bAnA-16">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="370" as="sourcePoint" />
<mxPoint x="450" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-18" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="630" y="229.5" as="sourcePoint" />
<mxPoint x="660" y="229.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-19" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="260" y="509.5" as="sourcePoint" />
<mxPoint x="290" y="509.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-20" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="260" y="229.5" as="sourcePoint" />
<mxPoint x="290" y="229.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-21" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="245" y="205" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-22" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="190" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-23" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="615" y="205" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-24" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="245" y="485" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-25" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="615" y="485" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-26" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="345" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-27" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="470" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-28" value="Proc 0" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="170" y="140" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-29" value="Proc 1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="320" y="140" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-30" value="Proc 2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="540" y="140" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-31" value="Proc 3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="690" y="140" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-32" value="Proc 4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="170" y="420" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-33" value="Proc 5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="320" y="420" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-34" value="Proc 6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="540" y="420" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-35" value="Proc 7" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="690" y="420" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-36" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-37" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-38" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-39" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-40" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-41" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-42" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-43" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-44" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-45" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-46" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-47" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-48" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-49" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-50" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-51" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-52" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-53" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-54" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-55" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-56" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-57" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-58" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-59" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-60" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-61" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-62" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-63" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-64" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-65" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-66" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-67" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-68" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-69" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-70" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-71" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-72" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-73" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-74" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-75" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-76" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-77" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-78" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-79" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-80" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-81" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-82" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-83" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-84" value="shared&lt;div&gt;Memory&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="245" y="310" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-85" value="shared&lt;div&gt;Memory&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="615" y="310" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-86" value="shared&lt;div&gt;Memory&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="245" y="590" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-87" value="shared&lt;div&gt;Memory&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="615" y="590" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-88" value="MPI com" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="100" width="60" height="30" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -12,7 +12,7 @@ debug: $(SOURCE_FILES)
mpicxx $(SOURCE_FILES) -g -o $(PROGRAM_NAME) ${COMPILER_FLAGS}
run: release
mpirun -np 4 ./$(PROGRAM_NAME) 3072 3e-6 100000
mpirun -np 1 ./$(PROGRAM_NAME) 3072 3e-6 100000
plot: plot.py
python3 plot.py

View File

@@ -0,0 +1,335 @@
<mxfile host="Electron" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/26.1.1 Chrome/132.0.6834.210 Electron/34.3.3 Safari/537.36" version="26.1.1">
<diagram name="Page-1" id="8kZCEwv9xN98wwWR-AVS">
<mxGraphModel dx="1114" dy="658" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="dkMRLSNARAUGIPq-bAnA-1" value="Cluster" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=bottom;labelPosition=center;verticalLabelPosition=top;align=center;" vertex="1" parent="1">
<mxGeometry x="120" y="80" width="680" height="560" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-2" value="Node 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="130" y="90" width="290" height="260" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-3" value="Node 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="500" y="90" width="290" height="260" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-4" value="Node 2" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="130" y="370" width="290" height="260" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-5" value="Node 3" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="500" y="370" width="290" height="260" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-6" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-2" target="dkMRLSNARAUGIPq-bAnA-3">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="370" as="sourcePoint" />
<mxPoint x="450" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-7" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;exitX=0;exitY=0.75;exitDx=0;exitDy=0;entryX=1;entryY=0.25;entryDx=0;entryDy=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-3" target="dkMRLSNARAUGIPq-bAnA-4">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="370" as="sourcePoint" />
<mxPoint x="450" y="320" as="targetPoint" />
<Array as="points">
<mxPoint x="460" y="285" />
<mxPoint x="460" y="435" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-8" value="" style="endArrow=none;dashed=1;html=1;dashPattern=1 3;strokeWidth=2;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-4" target="dkMRLSNARAUGIPq-bAnA-5">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="370" as="sourcePoint" />
<mxPoint x="450" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-9" value="Socket 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="140" y="120" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-10" value="Socket 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="290" y="120" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-11" value="Socket 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="510" y="120" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-12" value="Socket 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="660" y="120" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-13" value="Socket 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="140" y="400" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-14" value="Socket 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="290" y="400" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-15" value="Socket 0" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="510" y="400" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-16" value="Socket 1" style="rounded=0;whiteSpace=wrap;html=1;verticalAlign=top;" vertex="1" parent="1">
<mxGeometry x="660" y="400" width="120" height="220" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-17" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-15" target="dkMRLSNARAUGIPq-bAnA-16">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="370" as="sourcePoint" />
<mxPoint x="450" y="320" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-18" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="630" y="229.5" as="sourcePoint" />
<mxPoint x="660" y="229.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-19" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="260" y="509.5" as="sourcePoint" />
<mxPoint x="290" y="509.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-20" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="260" y="229.5" as="sourcePoint" />
<mxPoint x="290" y="229.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-21" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="245" y="205" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-22" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="190" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-23" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="615" y="205" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-24" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="245" y="485" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-25" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="615" y="485" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-26" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="345" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-27" value="HL" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="470" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-28" value="Proc 0" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="170" y="140" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-29" value="Proc 1" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="320" y="140" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-30" value="Proc 2" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="540" y="140" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-31" value="Proc 3" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="690" y="140" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-32" value="Proc 4" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="170" y="420" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-33" value="Proc 5" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="320" y="420" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-34" value="Proc 6" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="540" y="420" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-35" value="Proc 7" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="690" y="420" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-36" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-37" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-38" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-39" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-40" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-41" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-42" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-43" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-44" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-45" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-46" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-47" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-48" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-49" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-50" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-51" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-52" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-53" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-54" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-55" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="190" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-56" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-57" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="235" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-58" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-59" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="280" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-60" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-61" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-62" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-63" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-64" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-65" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="200" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-66" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-67" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-68" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-69" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-70" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="300" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-71" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-72" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-73" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-74" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-75" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-76" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="520" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-77" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="570" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-78" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-79" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="470" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-80" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-81" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="515" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-82" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="670" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-83" value="Thread" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="720" y="560" width="50" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-84" value="shared&lt;div&gt;Memory&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="245" y="310" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-85" value="shared&lt;div&gt;Memory&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="615" y="310" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-86" value="shared&lt;div&gt;Memory&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="245" y="590" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-87" value="shared&lt;div&gt;Memory&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="615" y="590" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-88" value="MPI com" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="430" y="100" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-89" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="360" y="720" width="240" height="240" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-93" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.163;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-89" target="dkMRLSNARAUGIPq-bAnA-89">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-94" value="" style="endArrow=classic;html=1;rounded=0;exitX=1.004;exitY=0.171;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.329;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="dkMRLSNARAUGIPq-bAnA-89" target="dkMRLSNARAUGIPq-bAnA-89">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="400" y="970" as="sourcePoint" />
<mxPoint x="450" y="920" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-95" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.163;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="360" y="800" as="sourcePoint" />
<mxPoint x="600" y="839" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-96" value="" style="endArrow=classic;html=1;rounded=0;exitX=1.004;exitY=0.171;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.329;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="600" y="840" as="sourcePoint" />
<mxPoint x="359" y="878" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-97" value="" style="endArrow=classic;html=1;rounded=0;exitX=1.004;exitY=0.171;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0;entryY=0.329;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="591" y="920" as="sourcePoint" />
<mxPoint x="350" y="958" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="dkMRLSNARAUGIPq-bAnA-98" style="rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.163;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="360" y="880" as="sourcePoint" />
<mxPoint x="600" y="919" as="targetPoint" />
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

BIN
lab12/exc4/jacobi Executable file

Binary file not shown.

View File

@@ -6,44 +6,73 @@
#include "jacobi.h"
#include "matrix_io.h"
Jacobi::Jacobi() {
Jacobi::Jacobi()
{
MPI_Comm_rank(MPI_COMM_WORLD, &rank_);
MPI_Comm_size(MPI_COMM_WORLD, &numProc_);
MPI_Comm_split_type(MPI_COMM_WORLD, MPI_COMM_TYPE_SHARED, 0, MPI_INFO_NULL, &shm_comm_);
MPI_Comm_rank(shm_comm_, &shm_rank_);
is_first_on_node_ = (shm_rank_ == 0);
}
bool Jacobi::isFirstRank() const {
bool Jacobi::isFirstRank() const
{
return rank_ == 0;
}
bool Jacobi::isLastRank() const {
bool Jacobi::isLastRank() const
{
return rank_ == numProc_ - 1;
}
int Jacobi::numRowsWithHalos(int numRowsWithoutHalos) const {
if (isFirstRank() || isLastRank()) {
int Jacobi::numRowsWithHalos(int numRowsWithoutHalos) const
{
if (isFirstRank() || isLastRank())
{
return numRowsWithoutHalos + 1;
} else {
}
else
{
return numRowsWithoutHalos + 2;
}
}
int Jacobi::numRowsWithoutHalos(int numRowsWithHalos) const {
if (isFirstRank() || isLastRank()) {
int Jacobi::numRowsWithoutHalos(int numRowsWithHalos) const
{
if (isFirstRank() || isLastRank())
{
return numRowsWithHalos - 1;
} else {
}
else
{
return numRowsWithHalos - 2;
}
}
int Jacobi::lowerOffset() const {
int Jacobi::lowerOffset() const
{
return isFirstRank() ? 0 : 1;
}
int Jacobi::upperOffset() const {
int Jacobi::upperOffset() const
{
return isLastRank() ? 0 : 1;
}
void Jacobi::exchangeHaloLayers(Matrix& phi) {
void Jacobi::exchangeHaloLayers(Matrix &phi)
{
if (is_first_on_node_)
{
exchangeHaloLayersNodeMPIProcFirst(phi);
}
else
{
exchangeHaloLayersNodeMPIProcSecond(phi);
}
}
void Jacobi::exchangeHaloLayersNodeMPIProcFirst(Matrix &phi)
{
int n = phi.rows();
int sendSize = phi.cols();
int tag = 0;
@@ -51,8 +80,9 @@ void Jacobi::exchangeHaloLayers(Matrix& phi) {
std::vector<MPI_Request> req;
// Communication with upper partner
if (!isLastRank()) {
int upper = rank_ + 1;
if (!isLastRank())
{
int upper = rank_ - 1;
MPI_Isend(&phi(n - 2, 0), sendSize, MPI_DOUBLE, upper, tag, MPI_COMM_WORLD,
&req.emplace_back());
MPI_Irecv(&phi(n - 1, 0), sendSize, MPI_DOUBLE, upper, tag, MPI_COMM_WORLD,
@@ -60,7 +90,43 @@ void Jacobi::exchangeHaloLayers(Matrix& phi) {
}
// Communication with lower partner
if (!isFirstRank()) {
if (!isFirstRank())
{
// communication with second rank on same node via shared memory
// We write our send row to shared memory row 0
for (int j = 0; j < sendSize; ++j)
shared_rows_[0 * sendSize + j] = phi(n - 2, j); // our last inner row
MPI_Win_sync(win_); // ensure memory visibility
// Wait for second proc to write its row back to shared memory row 1
MPI_Win_sync(win_);
for (int j = 0; j < sendSize; ++j)
phi(n - 1, j) = shared_rows_[1 * sendSize + j]; // halo from second proc
}
// Wait for communication to finish
std::vector<MPI_Status> stat(req.size());
MPI_Waitall(req.size(), req.data(), stat.data());
}
void Jacobi::exchangeHaloLayersNodeMPIProcSecond(Matrix &phi)
{
int n = phi.rows();
int sendSize = phi.cols();
int tag = 0;
std::vector<MPI_Request> req;
// Communication with upper partner
if (!isLastRank())
{
// communication with first rank on same node via shared memory
}
// Communication with lower partner
if (!isFirstRank())
{
int lower = rank_ - 1;
MPI_Isend(&phi(1, 0), sendSize, MPI_DOUBLE, lower, tag, MPI_COMM_WORLD,
&req.emplace_back());
@@ -73,35 +139,42 @@ void Jacobi::exchangeHaloLayers(Matrix& phi) {
MPI_Waitall(req.size(), req.data(), stat.data());
}
Matrix Jacobi::addHaloLayers(const Matrix& withoutHalos) {
Matrix Jacobi::addHaloLayers(const Matrix &withoutHalos)
{
const int numRows = withoutHalos.rows();
const int numCols = withoutHalos.cols();
Matrix withHalos = Matrix::zeros(numRowsWithHalos(numRows), numCols);
for (int i = 0; i < numRows; ++i) {
for (int j = 0; j < numCols; ++j) {
for (int i = 0; i < numRows; ++i)
{
for (int j = 0; j < numCols; ++j)
{
withHalos(i + lowerOffset(), j) = withoutHalos(i, j);
}
}
return withHalos;
}
Matrix Jacobi::removeHaloLayers(const Matrix& withHalos) {
Matrix Jacobi::removeHaloLayers(const Matrix &withHalos)
{
const int numRows = numRowsWithoutHalos(withHalos.rows());
const int numCols = withHalos.cols();
Matrix withoutHalos = Matrix::zeros(numRows, numCols);
for (int i = 0; i < numRows; ++i) {
for (int j = 0; j < numCols; ++j) {
for (int i = 0; i < numRows; ++i)
{
for (int j = 0; j < numCols; ++j)
{
withoutHalos(i, j) = withHalos(i + lowerOffset(), j);
}
}
return withoutHalos;
}
Jacobi::Result Jacobi::run(const Matrix& init, double eps, int maxNumIter) {
Jacobi::Result Jacobi::run(const Matrix &init, double eps, int maxNumIter)
{
std::vector<Matrix> phi(2, addHaloLayers(init));
const int numRows = phi[0].rows();
const int numCols = phi[0].cols();
@@ -109,15 +182,18 @@ Jacobi::Result Jacobi::run(const Matrix& init, double eps, int maxNumIter) {
int nIter = 0;
double dist = std::numeric_limits<double>::max();
int t0 = 0; // array index of current timestep
int t1 = 1; // array index of next timestep
while (dist > eps && nIter < maxNumIter) {
int t0 = 0; // array index of current timestep
int t1 = 1; // array index of next timestep
while (dist > eps && nIter < maxNumIter)
{
dist = 0;
exchangeHaloLayers(phi[t0]);
for (int i = 1; i < numRows - 1; ++i) {
for (int j = 1; j < numCols - 1; ++j) {
for (int i = 1; i < numRows - 1; ++i)
{
for (int j = 1; j < numCols - 1; ++j)
{
phi[t1](i, j) = .25 * (phi[t0](i + 1, j) + phi[t0](i - 1, j) +
phi[t0](i, j + 1) + phi[t0](i, j - 1));

View File

@@ -31,6 +31,9 @@ class Jacobi {
private:
void exchangeHaloLayers(Matrix& phi);
void exchangeHaloLayersNodeMPIProcFirst(Matrix& phi);
void exchangeHaloLayersNodeMPIProcSecond(Matrix& phi);
Matrix addHaloLayers(const Matrix& phi);
Matrix removeHaloLayers(const Matrix& phi);
@@ -43,8 +46,26 @@ class Jacobi {
int numRowsWithHalos(int numRowsWithoutHalos) const;
int numRowsWithoutHalos(int numRowsWithHalos) const;
// Global rank on cluster
int rank_ = MPI_PROC_NULL;
// Local rank on node
int shm_rank_ = MPI_PROC_NULL;
// Communicator for local domain of node
MPI_Comm shm_comm_;
// True if this MPI proc is first on node
bool is_first_on_node_;
// count of MPI procs
int numProc_ = 1;
};
// 4 times horizontal split | with mpi
// 12 times vertical split - with openmp
#endif // JACOBI_H

169
lab12/exc4/jacobi2.cpp Normal file
View File

@@ -0,0 +1,169 @@
#include <cmath>
#include <mpi.h>
#include <cassert>
#include "matrix.h"
#include "jacobi.h"
#include "matrix_io.h"
Jacobi::Jacobi()
{
MPI_Comm_rank(MPI_COMM_WORLD, &rank_);
MPI_Comm_size(MPI_COMM_WORLD, &numProc_);
}
bool Jacobi::isFirstRank() const
{
return rank_ == 0;
}
bool Jacobi::isLastRank() const
{
return rank_ == numProc_ - 1;
}
int Jacobi::numRowsWithHalos(int numRowsWithoutHalos) const
{
if (isFirstRank() || isLastRank())
{
return numRowsWithoutHalos + 1;
}
else
{
return numRowsWithoutHalos + 2;
}
}
int Jacobi::numRowsWithoutHalos(int numRowsWithHalos) const
{
if (isFirstRank() || isLastRank())
{
return numRowsWithHalos - 1;
}
else
{
return numRowsWithHalos - 2;
}
}
int Jacobi::lowerOffset() const
{
return isFirstRank() ? 0 : 1;
}
int Jacobi::upperOffset() const
{
return isLastRank() ? 0 : 1;
}
void Jacobi::exchangeHaloLayers(Matrix &phi)
{
int n = phi.rows();
int sendSize = phi.cols();
int tag = 0;
std::vector<MPI_Request> req;
// Communication with upper partner
if (!isLastRank())
{
int upper = rank_ + 1;
MPI_Isend(&phi(n - 2, 0), sendSize, MPI_DOUBLE, upper, tag, MPI_COMM_WORLD,
&req.emplace_back());
MPI_Irecv(&phi(n - 1, 0), sendSize, MPI_DOUBLE, upper, tag, MPI_COMM_WORLD,
&req.emplace_back());
}
// Communication with lower partner
if (!isFirstRank())
{
int lower = rank_ - 1;
MPI_Isend(&phi(1, 0), sendSize, MPI_DOUBLE, lower, tag, MPI_COMM_WORLD,
&req.emplace_back());
MPI_Irecv(&phi(0, 0), sendSize, MPI_DOUBLE, lower, tag, MPI_COMM_WORLD,
&req.emplace_back());
}
// Wait for communication to finish
std::vector<MPI_Status> stat(req.size());
MPI_Waitall(req.size(), req.data(), stat.data());
}
Matrix Jacobi::addHaloLayers(const Matrix &withoutHalos)
{
const int numRows = withoutHalos.rows();
const int numCols = withoutHalos.cols();
Matrix withHalos = Matrix::zeros(numRowsWithHalos(numRows), numCols);
for (int i = 0; i < numRows; ++i)
{
for (int j = 0; j < numCols; ++j)
{
withHalos(i + lowerOffset(), j) = withoutHalos(i, j);
}
}
return withHalos;
}
Matrix Jacobi::removeHaloLayers(const Matrix &withHalos)
{
const int numRows = numRowsWithoutHalos(withHalos.rows());
const int numCols = withHalos.cols();
Matrix withoutHalos = Matrix::zeros(numRows, numCols);
for (int i = 0; i < numRows; ++i)
{
for (int j = 0; j < numCols; ++j)
{
withoutHalos(i, j) = withHalos(i + lowerOffset(), j);
}
}
return withoutHalos;
}
Jacobi::Result Jacobi::run(const Matrix &init, double eps, int maxNumIter)
{
std::vector<Matrix> phi(2, addHaloLayers(init));
const int numRows = phi[0].rows();
const int numCols = phi[0].cols();
int nIter = 0;
double dist = std::numeric_limits<double>::max();
int t0 = 0; // array index of current timestep
int t1 = 1; // array index of next timestep
#pragma omp parallel num_threads(6) firstprivate(nIter, t0, t1)
while (dist > eps && nIter < maxNumIter)
{
dist = 0;
#pragma omp single
exchangeHaloLayers(phi[t0]);
for (int i = 1; i < numRows - 1; ++i)
{
#pragma omp for schedule(static, numCols / 12) reduction(max : dist)
for (int j = 1; j < numCols - 1; ++j)
{
phi[t1](i, j) = .25 * (phi[t0](i + 1, j) + phi[t0](i - 1, j) +
phi[t0](i, j + 1) + phi[t0](i, j - 1));
const double diff = phi[t1](i, j) - phi[t0](i, j);
dist = std::max(dist, std::abs(diff));
}
}
#pragma omp barrier
#pragma omp single
MPI_Allreduce(MPI_IN_PLACE, &dist, 1, MPI_DOUBLE, MPI_MAX, MPI_COMM_WORLD);
nIter++;
std::swap(t0, t1);
}
return {removeHaloLayers(phi[t0]), dist, nIter};
}

View File

@@ -2,8 +2,12 @@
#SBATCH --job-name=jacobi
#SBATCH --output=jacobi.out
#SBATCH --error=jacobi.err
#SBATCH --ntasks=48
#SBATCH --cpus-per-task=1
#SBATCH --ntasks=8 # 8 MPI processes (1 per socket)
#SBATCH --cpus-per-task=6 # 6 threads per MPI process
#SBATCH --time=01:00:00
srun --mpi=pmix ./jacobi
export OMP_NUM_THREADS=6
export OMP_PROC_BIND=true
export OMP_PLACES=cores
srun --mpi=pmix ./jacobi