Skip to content

Commit fd02fc5

Browse files
committed
TL: update to write parallel decomposition
1 parent 964556d commit fd02fc5

File tree

3 files changed

+51
-7
lines changed

3 files changed

+51
-7
lines changed

pySDC/playgrounds/dedalus/problems/rbc.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ def initField(self, initPath, seed):
225225
def runSimulation(cls, runDir, tEnd, baseDt, tBeg=0, logEvery=100,
226226
dtWrite=None, writeVort=False, writeTau=False,
227227
timeScheme="RK443", timeParallel=False, groupTimeProcs=False,
228+
writeDecomposition=False,
228229
**pParams):
229230

230231
cls.log(f"RBC simulation in {runDir}")
@@ -243,7 +244,7 @@ def runSimulation(cls, runDir, tEnd, baseDt, tBeg=0, logEvery=100,
243244

244245
if timeParallel:
245246
assert timeScheme == "SDC", "need timeScheme=SDC for timeParallel"
246-
_, sComm, _ = SDCIMEX_MPI.initSpaceTimeComms(groupTime=groupTimeProcs)
247+
tComm, sComm, gComm = SDCIMEX_MPI.initSpaceTimeComms(groupTime=groupTimeProcs)
247248
pParams.update(sComm=sComm)
248249
if timeParallel == "MPI":
249250
TimeStepper = SDCIMEX_MPI
@@ -255,6 +256,30 @@ def runSimulation(cls, runDir, tEnd, baseDt, tBeg=0, logEvery=100,
255256

256257
p = cls(**pParams)
257258

259+
if writeDecomposition:
260+
if MPI_RANK == 0:
261+
with open("{runDir}/distrib.txt", "r") as f:
262+
f.write("Parallel distribution on compute cores\n")
263+
f.write(f" -- space parallelization on {p.sComm.Get_size()} procs\n")
264+
if timeParallel:
265+
f.write(f" -- time parallelization on {tComm.Get_size()} procs\n")
266+
f.write(f" -- global parallelization on {gComm.Get_size()} procs\n")
267+
coords = [p.grids[axis] for axis in p.axes]
268+
labels = ["x", "y", "z"]
269+
COMM_WORLD.Barrier()
270+
sleep(0.0001*MPI_RANK)
271+
with open("{runDir}/distrib.txt", "a") as f:
272+
if timeParallel:
273+
out = f"P{gComm.Get_rank()}-S{sComm.Get_rank()}-T{tComm.Get_rank()} :\n"
274+
else:
275+
out = f"P{MPI_RANK} :\n"
276+
out += f" -- cpu {os.sched_getaffinity(0)} on {socket.gethostname()}\n"
277+
out += "\n".join(
278+
f" -- {d} {c.shape} : [{c.min(initial=np.inf)}, {c.max(initial=-np.inf)}]"
279+
for d, c in zip(labels, coords)
280+
)
281+
COMM_WORLD.Barrier()
282+
258283
dt = baseDt/p.resFactor
259284
nSteps = round(float(tEnd-tBeg)/dt, ndigits=3)
260285
if float(tEnd-tBeg) != round(nSteps*dt, ndigits=3):

pySDC/playgrounds/dedalus/scripts/plotScaling.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,20 @@
1111

1212
folder = "_benchJusuf"
1313

14-
methods = ["RK443", "SDC", "SDC-MPI"]
14+
schemes = ["RK443", "SDC", "SDC-MPI", "SDC-MPI2"]
1515
R = 2
1616

1717
useNSpS = False
1818
nSpS = {
1919
"RK443": 23,
2020
"SDC": 17,
2121
"SDC-MPI": 17,
22+
"SDC-MPI2": 17,
2223
}
2324

2425
results = {}
2526

26-
for scheme in methods:
27+
for scheme in schemes:
2728

2829
files = glob.glob(f"{folder}/R{R}_{scheme}_*.json")
2930

@@ -44,7 +45,9 @@
4445

4546
results[scheme].sort(key=lambda p: p[0])
4647

47-
symbols = ["o", "^", "s"]
48+
symbols = ["o", "^", "s", "p"]
49+
50+
4851
plt.figure("scaling"+"-nSpS"*useNSpS)
4952
for scheme, sym in zip(results.keys(), symbols):
5053
res = np.array(results[scheme]).T
@@ -58,3 +61,16 @@
5861
else:
5962
plt.ylabel("$t_{wall}/N_{DoF}/N_{steps}$")
6063
plt.tight_layout()
64+
65+
66+
plt.figure("PinT-speedup")
67+
schemes = ["SDC-MPI", "SDC-MPI2"]
68+
nProcSpace, tSDC = np.array(results["SDC"]).T
69+
for scheme, sym in zip(schemes, symbols):
70+
_, tSDCPinT = np.array(results[scheme]).T
71+
speedup = tSDC[:-2]/tSDCPinT
72+
plt.semilogx(nProcSpace[:-2], speedup, label=scheme)
73+
plt.legend()
74+
plt.grid(True)
75+
plt.xlabel("$N_{p,S}$"), plt.ylabel("PinT Speedup")
76+
plt.tight_layout()

pySDC/playgrounds/dedalus/scripts/run_rbc.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,15 @@
5555
parser.add_argument(
5656
"--groupTimeProcs", help="wether or not grouping the time processes",
5757
action="store_true")
58+
parser.add_argument(
59+
"--writeDecomposition", help="write the parallel space-time decomposition in a file",
60+
action="store_true")
5861

5962
parser.add_argument(
6063
"--nNodesSDC", help="number of time nodes per step for SDC",
6164
default=4, type=int)
6265
parser.add_argument(
63-
"--nSweepSDC", help="number of sweep per step for SDC",
66+
"--nSweepsSDC", help="number of sweeps per time step for SDC",
6467
default=4, type=int)
6568
parser.add_argument(
6669
"--implSweepSDC", help="implicit sweep type for SDC",
@@ -80,9 +83,9 @@
8083
dim = params.pop("dim")
8184
ProblemClass = RBCProblem2D if dim == 2 else RBCProblem3D
8285
SDCIMEX.setParameters(
83-
nNodes=params.pop("nNodesSDC"),
86+
nNodes=params.pop("nNodesSDC"),
8487
nodeType="LEGENDRE", quadType="RADAU-RIGHT",
85-
nSweeps=params.pop("nSweepSDC"),
88+
nSweeps=params.pop("nSweepsSDC"),
8689
initSweep="COPY",
8790
implSweep=params.pop("implSweepSDC"), explSweep=params.pop("explSweepSDC"),
8891
)

0 commit comments

Comments
 (0)