Check in stuff
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
import copy
|
||||
import json
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
configurations = [
|
||||
(1, 1, 1),
|
||||
(1, 1, 2),
|
||||
(1, 2, 2),
|
||||
(2, 2, 2),
|
||||
(2, 2, 4),
|
||||
(2, 4, 4),
|
||||
(4, 4, 4),
|
||||
(4, 4, 8),
|
||||
(4, 8, 8),
|
||||
(8, 8, 8)
|
||||
]
|
||||
|
||||
with open("templates/spheroid_weak.json") as template_file:
|
||||
template = json.load(template_file)
|
||||
|
||||
SIZE_X = 400
|
||||
SIZE_Y = 400
|
||||
SIZE_Z = 400
|
||||
|
||||
for bx, by, bz in configurations:
|
||||
nastja_config = copy.deepcopy(template)
|
||||
nastja_config["Geometry"]["blockcount"] = [bx, by, bz]
|
||||
nastja_config["Geometry"]["blocksize"] = [SIZE_X, SIZE_Y, SIZE_Z]
|
||||
|
||||
# Fill the whole domain with ECM
|
||||
cells_filling = [
|
||||
{
|
||||
"shape": "cube",
|
||||
"box": [
|
||||
[0, 0, 0],
|
||||
[bx * SIZE_X, by * SIZE_Y, bz * SIZE_Z]
|
||||
],
|
||||
"value": 0,
|
||||
"celltype": 0
|
||||
}
|
||||
]
|
||||
|
||||
# Place a bunch of cells in each block to keep each rank busy
|
||||
for z in range(bz):
|
||||
for y in range(by):
|
||||
for x in range(bx):
|
||||
sx = x * SIZE_X
|
||||
sy = y * SIZE_Y
|
||||
sz = z * SIZE_Z
|
||||
cells_filling.append({
|
||||
"shape": "sphere",
|
||||
"pattern": "voronoi",
|
||||
"count": 5500,
|
||||
"radius": 75,
|
||||
"center": [sx + 200, sy + 200, sz + 200],
|
||||
"box": [
|
||||
[sx + 110, sy + 110, sz + 110],
|
||||
[sx + 290, sy + 290, sz + 290]
|
||||
],
|
||||
"celltype": 9
|
||||
})
|
||||
nastja_config["Filling"]["cells"] = cells_filling
|
||||
|
||||
ntasks = bx * by * bz
|
||||
if ntasks < 4:
|
||||
nodes = 1
|
||||
gpus_per_node = ntasks
|
||||
else:
|
||||
assert ntasks % 4 == 0
|
||||
nodes = ntasks // 4
|
||||
gpus_per_node = 4
|
||||
|
||||
label = f"weak400-t{ntasks:04}n{nodes:03}g{gpus_per_node}x{bx}y{by}z{bz}"
|
||||
|
||||
with open(f"configs/measurements/weak/spheroid_{label}.json", "w") as config_file:
|
||||
json.dump(nastja_config, config_file, indent=2)
|
||||
|
||||
batch_config = f"""#!/usr/bin/env bash
|
||||
|
||||
#SBATCH --job-name={label}
|
||||
#SBATCH --account=hkf6
|
||||
#SBATCH --partition=booster
|
||||
#SBATCH --nodes={nodes}
|
||||
#SBATCH --ntasks={ntasks}
|
||||
# Counted per node
|
||||
#SBATCH --gres=gpu:{gpus_per_node}
|
||||
#SBATCH --time=00:15:00
|
||||
#SBATCH --output=logs/{label}-%A_%a.log
|
||||
#SBATCH --error=logs/{label}-%A_%a.log
|
||||
#SBATCH --array=1-5
|
||||
|
||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
||||
OUTPUT_DIR="/p/scratch/cellsinsilico/paul/nastja-out/{label}-${{SLURM_ARRAY_TASK_ID}}"
|
||||
|
||||
echo "outdir is ${{OUTPUT_DIR}}"
|
||||
|
||||
mkdir -p "${{OUTPUT_DIR}}"
|
||||
source "${{SOURCE_DIR}}/activate-nastja-modules"
|
||||
|
||||
srun --unbuffered "${{SOURCE_DIR}}/nastja/build-cuda/nastja" \\
|
||||
-c "${{SOURCE_DIR}}/ma/experiments/configs/measurements/weak/spheroid_{label}.json" \\
|
||||
-o "${{OUTPUT_DIR}}"
|
||||
"""
|
||||
|
||||
with open(f"batch/measurements/weak/{label}", "w", encoding="utf8") as batch_config_file:
|
||||
batch_config_file.write(batch_config)
|
||||
@@ -128,5 +128,19 @@ def strong_dat(db, time):
|
||||
for tasks, time in values:
|
||||
print(f"{tasks}\t{time}")
|
||||
|
||||
@timing.command()
|
||||
@click.option("--db", default="timings.db", help="Path of sqlite database file")
|
||||
def weak_dat(db):
|
||||
db = sqlite3.connect(db)
|
||||
c = db.cursor()
|
||||
res = c.execute("""
|
||||
select tasks, avg(averagetime) as mean from timings group by tasks order by tasks asc
|
||||
""")
|
||||
values = res.fetchall()
|
||||
|
||||
print("gpus\tefficiency")
|
||||
for tasks, mean in values:
|
||||
print(f"{tasks}\t{values[0][1] / mean}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
timing()
|
||||
|
||||
Reference in New Issue
Block a user