35 Velocity_3):
36
37
38 if (Parallelisation is 'Hybrid_Socket' or Parallelisation is 'Hybrid_Node'):
40
41
42 if (Parallelisation is 'Modal'):
43 PROC_Z = [2, 4, 5, 8, 10, 20]
44 PROC_XY = [1, 1, 1, 1, 1, 1]
45
46
47 if (Parallelisation is 'Elemental'):
48 PROC_Z = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
49 PROC_XY = [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
50
51
52
53
54
55 Pairwise = []
56 Allreduce = []
57 Alltoall = []
58
59 Communication = []
60 Serial = []
61
62 Serial_Pairwise = []
63 Serial_Allreduce = []
64 Serial_Alltoall = []
65
66 Total = []
67
68 for i in range(0, len(PROC_Z)):
69
70
71 Communication_Count = 0.0
72
73
74 Simulation = Topology(PROC_Z[i], PROC_XY[i], Num_Core_Per_Socket, Num_Sock_Per_Node, Scheme)
75
76
77 (Num_Element_Msg, Num_Elements) =
Partition(Mesh_File, PROC_XY[i])
78
79
80 Simulation.Input_Communication(BW_Node_To_Node, LAT_Node_To_Node, BW_Socket_To_Socket, LAT_Socket_To_Socket, BW_Core_To_Core, LAT_Core_To_Core)
81
82
83 Simulation.Distribute_Modes(Num_Modes);
84 Simulation.Distribute_Elements(Num_Element_Msg, Num_Elements);
85
86
87 Simulation.CG_Iterations(Pressure, Velocity_1, Velocity_2, Velocity_3)
88
89
90 Simulation.Data_Size(P)
91
92
93 Simulation.Hardware_Constant(Num_Constants, Fit)
94
95
96 Pairwise.append(Simulation.Communication_Pairwise_Exchange())
97 Communication_Count += Pairwise[i]
98
99
100 Allreduce.append(Simulation.Communication_Allreduce())
101 Communication_Count += Allreduce[i]
102
103
104 Alltoall.append(Simulation.Communication_Alltoall())
105 Communication_Count += Alltoall[i]
106
107
108 Serial.append(Simulation.Serial_Compute())
109
110
111 Serial_Pairwise.append(Serial[i] + Pairwise[i])
112 Serial_Allreduce.append(Serial[i] + Allreduce[i])
113 Serial_Alltoall.append(Serial[i] + Alltoall[i])
114
115
116 Communication.append(Communication_Count)
117
118
119 Total.append(Communication[i] + Serial[i])
120
121 if (Parallelisation == 'Hybrid'):
122 fig, ax = plt.subplots()
123 ax.plot(PROC_Z, Total, label = 'Model')
124 ax.set_xlabel('$ R_Z $')
125 ax.set_ylabel('Timestep (s)')
126 ax.set_title('Length of Single Timestep: Model')
127 plt.legend(loc=1)
128 fig.savefig("Output/Figures/Model_Hybrid.png")
129
130 if (Parallelisation == 'Modal'):
131 fig, ax = plt.subplots()
132 ax.plot(PROC_Z, Total, label = 'Model')
133 ax.set_xlabel('$ R_Z $')
134 ax.set_ylabel('Timestep (s)')
135 ax.set_title('Length of Single Timestep: Model')
136 plt.legend(loc=1)
137 fig.savefig("Output/Figures/Model_Modal.png")
138
139 if (Parallelisation == 'Elemental'):
140 fig, ax = plt.subplots()
141 ax.plot(PROC_XY, Total, label = 'Model')
142 ax.set_xlabel('$ R_{XY} $')
143 ax.set_ylabel('Timestep (s)')
144 ax.set_title('Length of Single Timestep: Model')
145 plt.legend(loc=1)
146 fig.savefig("Output/Figures/Model_Elemental.png")
147
148 return(PROC_Z, PROC_XY, Total)
149
150
def Partition(Input_Filename, PROC_XY)
def Find_Topologies(PROC_TOT, Num_Modes)