-
Notifications
You must be signed in to change notification settings - Fork 2
/
battery.py
51 lines (33 loc) · 1.29 KB
/
battery.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import multiprocessing as mp
import os, psutil
# Multiple instances of this function are spawn
def run_test(test_case: str):
'''
Run a single test-case on two specific CPU sockets
'''
case_name = test_case.replace('/', '_')
# Compute the dedicated CPU sockets based on the MPI rank
rank = mp.current_process()._identity[0]
cpu_1, cpu_2 = (rank-1)+(rank-1), rank+(rank-1)
print(f'Rank {rank} : CPU {cpu_1, cpu_2} - {case_name}')
# Bind the MPI process to specific CPU sokets
opt = f'mpiexec --bind-to core --cpu-set {cpu_1},{cpu_2} -n 2'
run = f'{opt} python3 {base}/examples/{test_case}/main.py'
# Run the test-case and plot the results
os.mkdir(case_name)
os.chdir(case_name)
os.system(f'{run} 2>&1 | tee workspace.txt > /dev/null')
os.chdir('..')
# Get the base folder and total number of physical cores
base = os.path.dirname(__file__)
n_proc = psutil.cpu_count(logical = False)
# List of test cases to run in the battery
test_list = list()
test_list.append('2D/dam_break')
test_list.append('2D/rubber_gate')
test_list.append('2D/thermo_square')
test_list.append('2D/vertical_container')
test_list.append('3D/clamped_plate')
# Run the battery on all available physical cores
pool = mp.Pool(n_proc//2)
pool.map(run_test, test_list)