Compare commits
No commits in common. "075d11b948241e24305713d4e9e61380c2dc2bf8" and "4661646b4f4d297aafdc1403617a44f41009007c" have entirely different histories.
075d11b948
...
4661646b4f
1
experiments/.gitignore
vendored
1
experiments/.gitignore
vendored
@ -7,4 +7,3 @@ batch/measurements/strong/*
|
|||||||
configs/measurements/strong/*
|
configs/measurements/strong/*
|
||||||
*.dat
|
*.dat
|
||||||
*.db
|
*.db
|
||||||
eval/generated/*
|
|
||||||
|
@ -1,24 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
#SBATCH --job-name=julian-animation
|
|
||||||
#SBATCH --account=hkf6
|
|
||||||
#SBATCH --partition=booster
|
|
||||||
#SBATCH --nodes=8
|
|
||||||
#SBATCH --ntasks=32
|
|
||||||
# Counted per node
|
|
||||||
#SBATCH --gres=gpu:4
|
|
||||||
#SBATCH --time=03:30:00
|
|
||||||
#SBATCH --output=logs/%x-%A_%a.log
|
|
||||||
#SBATCH --error=logs/%x-%A_%a.log
|
|
||||||
|
|
||||||
SOURCE_DIR=/p/project/cellsinsilico/paulslustigebude
|
|
||||||
OUTPUT_DIR="/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}"
|
|
||||||
|
|
||||||
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/${SLURM_JOB_NAME}.json" \
|
|
||||||
-o "${OUTPUT_DIR}"
|
|
@ -1,330 +0,0 @@
|
|||||||
{
|
|
||||||
"Comments": [
|
|
||||||
"Celltype Usage",
|
|
||||||
"0 Dynamic ECM",
|
|
||||||
"1-5 Not Used",
|
|
||||||
"6 Liquid ",
|
|
||||||
"7 Apoptotic cell Type ",
|
|
||||||
"8 Basic Non Dividing Cell type (surrounding)",
|
|
||||||
"9 Cancer"
|
|
||||||
],
|
|
||||||
"Application": "Cells",
|
|
||||||
"CellsInSilico": {
|
|
||||||
"ecmdegradation": {
|
|
||||||
"enabled": "false",
|
|
||||||
"steps": 99999,
|
|
||||||
"stochastic": "true",
|
|
||||||
"probability": 0.5
|
|
||||||
},
|
|
||||||
"energyfunctions": [
|
|
||||||
"Volume00",
|
|
||||||
"Surface01",
|
|
||||||
"Motility00",
|
|
||||||
"Adhesion01",
|
|
||||||
"DynamicECM00"
|
|
||||||
],
|
|
||||||
"liquid": 6,
|
|
||||||
"volume": {
|
|
||||||
"default": {
|
|
||||||
"storage": "const",
|
|
||||||
"value": 500
|
|
||||||
},
|
|
||||||
"lambda": [
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
7.5,
|
|
||||||
7.5,
|
|
||||||
7.5
|
|
||||||
],
|
|
||||||
"sizechange": [
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
-0.05,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"surface": {
|
|
||||||
"default": {
|
|
||||||
"storage": "const",
|
|
||||||
"value": 400
|
|
||||||
},
|
|
||||||
"lambda": [
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
5.625,
|
|
||||||
5.625,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"sizechange": [
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
-0.05,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"adhesion": {
|
|
||||||
"matrix": [
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
450
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
450,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
50
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"temperature": 50,
|
|
||||||
"division": {
|
|
||||||
"enabled": "true",
|
|
||||||
"condition": [
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"centerofmass": {
|
|
||||||
"steps": 1
|
|
||||||
},
|
|
||||||
"signaling": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"orientation": {
|
|
||||||
"enabled": true,
|
|
||||||
"motility": "persistentRandomWalk",
|
|
||||||
"persistenceMagnitude": 0.0,
|
|
||||||
"recalculationtime": 200,
|
|
||||||
"motilityamount": [
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"visitor": {
|
|
||||||
"stepwidth": 10,
|
|
||||||
"checkerboard": "01"
|
|
||||||
},
|
|
||||||
"cleaner": {
|
|
||||||
"killDistance": 20
|
|
||||||
},
|
|
||||||
"dynamicecm": {
|
|
||||||
"enabled": true,
|
|
||||||
"stepsPerMcs": 100,
|
|
||||||
"pushSteps": 10,
|
|
||||||
"pushWeight": 2,
|
|
||||||
"ecmCellID": 0,
|
|
||||||
"deltat": 0.1,
|
|
||||||
"eta": 0.25,
|
|
||||||
"k0": 0.1,
|
|
||||||
"k1": 0.1,
|
|
||||||
"c": 4,
|
|
||||||
"alpha": 2,
|
|
||||||
"d": 0.3,
|
|
||||||
"phi": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Geometry": {
|
|
||||||
"blockcount": [
|
|
||||||
2,
|
|
||||||
4,
|
|
||||||
4
|
|
||||||
],
|
|
||||||
"blocksize": [
|
|
||||||
200,
|
|
||||||
100,
|
|
||||||
100
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Settings": {
|
|
||||||
"randomseed": 0,
|
|
||||||
"timesteps": 5000,
|
|
||||||
"statusoutput": 1
|
|
||||||
},
|
|
||||||
"WriteActions": ["ParallelVTK_Cells", "ParallelVTK_Displacement"],
|
|
||||||
"Writers": {
|
|
||||||
"CellInfo": {
|
|
||||||
"field": "",
|
|
||||||
"groupsize": 0,
|
|
||||||
"steps": 1,
|
|
||||||
"writer": "CellInfo"
|
|
||||||
},
|
|
||||||
"ParallelVTK_Cells": {
|
|
||||||
"field": "cells",
|
|
||||||
"outputtype": "UInt32",
|
|
||||||
"printhints": false,
|
|
||||||
"steps": 100,
|
|
||||||
"writer": "ParallelVtkImage"
|
|
||||||
},
|
|
||||||
"ParallelVTK_Displacement": {
|
|
||||||
"writer": "ParallelVtkImage",
|
|
||||||
"outputtype": "Float32",
|
|
||||||
"field": "dynamicecm",
|
|
||||||
"components": [
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
2
|
|
||||||
],
|
|
||||||
"steps": 100
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Include": "measurements/strong/config_filling_1.json"
|
|
||||||
}
|
|
@ -1,10 +0,0 @@
|
|||||||
generate-batch-strong-cpu:
|
|
||||||
python scripts/substitute.py strong-batch.j2 < strong-cpu.json
|
|
||||||
|
|
||||||
generate-batch-strong-gpu:
|
|
||||||
python scripts/substitute.py strong-batch.j2 < strong-gpu.json
|
|
||||||
|
|
||||||
clean-logs:
|
|
||||||
rm logs/*
|
|
||||||
|
|
||||||
.PHONY: generate-batch-strong-cpu clean-logs
|
|
File diff suppressed because it is too large
Load Diff
@ -1,10 +0,0 @@
|
|||||||
label nodes mean_time std_time speedup speedup_std
|
|
||||||
1 1 1132.1093720291667 18.428644622186628 1.0 0.016278148629010596
|
|
||||||
2 2 619.9614289104168 7.890810670766857 1.8260964621925766 0.029725469622481192
|
|
||||||
4 4 348.657283046875 3.3739994706945122 3.247054993762918 0.052856043795043856
|
|
||||||
8 8 200.79244575312498 1.259910347938215 5.63820699420684 0.09177957145282603
|
|
||||||
16 16 111.37033198671875 0.3943541234366863 10.16526889911915 0.16547175799372044
|
|
||||||
32 32 65.69918741145833 0.43464214827532205 17.231710415823503 0.28050034328084494
|
|
||||||
64 64 38.56257490957031 0.12227397957602136 29.35772247273364 0.4778893698204027
|
|
||||||
128 128 21.433497051595047 0.14016683538819355 52.81962944749218 0.8598057786755426
|
|
||||||
256 256 13.247708324598525 0.030540850807946187 85.45699711149668 1.3910817003698723
|
|
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +0,0 @@
|
|||||||
label nodes tasks mean_time std_time speedup speedup_std
|
|
||||||
1 1 1 157.5217688 0.5311809049610176 1.0 0.003372111099358209
|
|
||||||
1 1 2 120.15237200000001 0.299200156243067 1.3110167213344732 0.004420894037456185
|
|
||||||
1 1 4 75.69762635 0.5769735213369493 2.0809340582447473 0.007017140834839633
|
|
||||||
2 2 8 52.110670325 0.940887445857671 3.022831366735062 0.010193323203255446
|
|
||||||
4 4 16 28.215493675000005 0.5598524922936691 5.582811012077745 0.018825858979446598
|
|
||||||
8 8 32 12.422501156249998 0.31940690526235005 12.680358554102268 0.04275957782413007
|
|
||||||
16 16 64 7.70770194375 0.04068644910316383 20.43693048194875 0.06891560011499148
|
|
|
@ -1 +0,0 @@
|
|||||||
module load SciPy-Stack
|
|
@ -1,36 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import json
|
|
||||||
|
|
||||||
|
|
||||||
def print_table(data, spec):
|
|
||||||
print("\t".join(column for column in spec.keys()))
|
|
||||||
|
|
||||||
for data_item in data:
|
|
||||||
values = []
|
|
||||||
for retrieve in spec.values():
|
|
||||||
raw_value = retrieve(data_item)
|
|
||||||
values.append(raw_value if isinstance(raw_value, str) else str(raw_value))
|
|
||||||
print("\t".join(values))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
p = argparse.ArgumentParser(description="Turn files generated by timing.py into pgf datafiles")
|
|
||||||
p.add_argument("timing_file")
|
|
||||||
args = p.parse_args()
|
|
||||||
|
|
||||||
with open(args.timing_file, "r", encoding="utf8") as f:
|
|
||||||
jobs = json.load(f)
|
|
||||||
|
|
||||||
scaling_spec = {
|
|
||||||
"label": lambda job: job["accounting"][0]["nodes"]["count"],
|
|
||||||
"nodes": lambda job: job["accounting"][0]["nodes"]["count"],
|
|
||||||
"tasks": lambda job: job["accounting"][0]["tasks"]["count"],
|
|
||||||
"mean_time": lambda job: job["means"]["TimeStep"],
|
|
||||||
"std_time": lambda job: job["stds"]["TimeStep"],
|
|
||||||
"speedup": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"],
|
|
||||||
"speedup_std": lambda job: jobs[0]["stds"]["TimeStep"] / job["means"]["TimeStep"],
|
|
||||||
}
|
|
||||||
print_table(jobs, scaling_spec)
|
|
@ -1,35 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
import copy
|
|
||||||
import json
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
SIZE = [384, 384, 384]
|
|
||||||
|
|
||||||
with (Path(__file__).parent.parent / "templates" / "strong-cpu.json").open(encoding="utf8") as f:
|
|
||||||
template = json.load(f)
|
|
||||||
|
|
||||||
configs = [
|
|
||||||
[ 4, 4, 3],
|
|
||||||
[ 4, 4, 6],
|
|
||||||
[ 4, 4, 12],
|
|
||||||
[ 4, 8, 12],
|
|
||||||
[ 8, 8, 12],
|
|
||||||
[ 8, 8, 24],
|
|
||||||
[ 8, 16, 24],
|
|
||||||
[ 16, 16, 24],
|
|
||||||
[ 16, 16, 48]
|
|
||||||
]
|
|
||||||
|
|
||||||
out_path = Path(__file__).parent.parent / "generated" / "config"
|
|
||||||
|
|
||||||
for c in configs:
|
|
||||||
nc = copy.deepcopy(template)
|
|
||||||
nc["Geometry"]["blockcount"] = c
|
|
||||||
nc["Geometry"]["blocksize"] = [bs // bc for bc, bs in zip(c, SIZE)]
|
|
||||||
|
|
||||||
nc_out_path = out_path / f"strong-cpu-{c[0]:02}-{c[1]:02}-{c[2]:02}.json"
|
|
||||||
print(f"Dumping {(c[0] * c[1] * c[2]) // 48} to {nc_out_path}")
|
|
||||||
with nc_out_path.open("w", encoding="utf8") as f:
|
|
||||||
json.dump(nc, f)
|
|
@ -1,34 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
import copy
|
|
||||||
import json
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
SIZE = [384, 384, 384]
|
|
||||||
|
|
||||||
with (Path(__file__).parent.parent / "templates" / "strong-gpu.json").open(encoding="utf8") as f:
|
|
||||||
template = json.load(f)
|
|
||||||
|
|
||||||
configs = [
|
|
||||||
[ 1, 1, 1],
|
|
||||||
[ 1, 1, 2],
|
|
||||||
[ 1, 2, 2],
|
|
||||||
[ 2, 2, 2],
|
|
||||||
[ 2, 2, 4],
|
|
||||||
[ 2, 4, 4],
|
|
||||||
[ 4, 4, 4],
|
|
||||||
[ 4, 4, 8],
|
|
||||||
]
|
|
||||||
|
|
||||||
out_path = Path(__file__).parent.parent / "generated" / "config"
|
|
||||||
|
|
||||||
for c in configs:
|
|
||||||
nc = copy.deepcopy(template)
|
|
||||||
nc["Geometry"]["blockcount"] = c
|
|
||||||
nc["Geometry"]["blocksize"] = [bs // bc for bc, bs in zip(c, SIZE)]
|
|
||||||
|
|
||||||
nc_out_path = out_path / f"strong-gpu-{c[0]:02}-{c[1]:02}-{c[2]:02}.json"
|
|
||||||
print(f"Dumping {(c[0] * c[1] * c[2])} to {nc_out_path}")
|
|
||||||
with nc_out_path.open("w", encoding="utf8") as f:
|
|
||||||
json.dump(nc, f)
|
|
@ -1,21 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
import jinja2
|
|
||||||
import json
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
data = json.load(sys.stdin)
|
|
||||||
|
|
||||||
templates_env = jinja2.Environment(
|
|
||||||
loader=jinja2.FileSystemLoader(Path(__file__).parent.parent / "templates"),
|
|
||||||
autoescape=jinja2.select_autoescape()
|
|
||||||
)
|
|
||||||
|
|
||||||
for possibly_incomplete_batch in data["batches"]:
|
|
||||||
batch = dict(list(data["common"].items()) + list(possibly_incomplete_batch.items()))
|
|
||||||
out_path = Path(__file__).parent.parent / "generated" / "batch" / batch["name"]
|
|
||||||
t = templates_env.get_template(sys.argv[1])
|
|
||||||
print(f"Dumping to {out_path}")
|
|
||||||
t.stream(**batch).dump(str(out_path))
|
|
@ -1,92 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import json
|
|
||||||
import pandas
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
|
|
||||||
def load_timing_file(timing_path: Path):
|
|
||||||
df = pandas.read_csv(timing_path, delim_whitespace=True)
|
|
||||||
headers = list(df["#Name"][1:])
|
|
||||||
times = list(df["TotalTime"][1:])
|
|
||||||
return pandas.DataFrame([times], columns=headers)
|
|
||||||
|
|
||||||
|
|
||||||
def load_all_timings(outdir_path: Path):
|
|
||||||
timingdir_path = outdir_path / "timing"
|
|
||||||
timing_paths = sorted(timingdir_path.iterdir())
|
|
||||||
|
|
||||||
print(f"Loading {len(timing_paths)} timing files from {timingdir_path}...", file=sys.stderr)
|
|
||||||
dfs = []
|
|
||||||
for i, timing_path in enumerate(timing_paths, 1):
|
|
||||||
dfs.append(load_timing_file(timing_path))
|
|
||||||
sys.stderr.write("\x1b[1K\r")
|
|
||||||
sys.stderr.flush()
|
|
||||||
print(f"[{i:8}/{len(timing_paths):8}] {i/len(timing_paths)*100:6.2f}%", file=sys.stderr, end="", flush=True)
|
|
||||||
print(file=sys.stderr, flush=True)
|
|
||||||
|
|
||||||
return pandas.concat(dfs)
|
|
||||||
|
|
||||||
|
|
||||||
def load_mean_timings(outdir_path: Path):
|
|
||||||
df = load_all_timings(outdir_path)
|
|
||||||
return df.mean() / 1000000
|
|
||||||
|
|
||||||
|
|
||||||
def get_outdirs(jobid: str):
|
|
||||||
print(f"Globbing for {jobid}...", file=sys.stderr)
|
|
||||||
return sorted(Path("/p/scratch/cellsinsilico/paul/nastja-out").glob(f"*{jobid}*"))
|
|
||||||
|
|
||||||
|
|
||||||
def load_array_mean_timings(jobid: str):
|
|
||||||
mts = [
|
|
||||||
load_mean_timings(outdir_path)
|
|
||||||
for outdir_path
|
|
||||||
in get_outdirs(jobid)
|
|
||||||
]
|
|
||||||
|
|
||||||
return pandas.DataFrame(list(mts), columns=mts[0].index)
|
|
||||||
|
|
||||||
|
|
||||||
def get_mean_mean_totaltimes(jobid: str):
|
|
||||||
return load_array_mean_timings(jobid).mean()
|
|
||||||
|
|
||||||
|
|
||||||
def get_std_mean_totaltimes(jobid: str):
|
|
||||||
return load_array_mean_timings(jobid).std()
|
|
||||||
|
|
||||||
|
|
||||||
def get_accounting_data(jobid: str):
|
|
||||||
sacct_results = subprocess.run(
|
|
||||||
["sacct", "--json", "--jobs", jobid],
|
|
||||||
check=True, # Throw on non-zero exit code,
|
|
||||||
capture_output=True
|
|
||||||
)
|
|
||||||
return json.loads(sacct_results.stdout.decode("utf8"))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
p = argparse.ArgumentParser(description="Load and analzye data from nastja timing files")
|
|
||||||
p.add_argument("jobid", nargs="+")
|
|
||||||
p.add_argument("--prettify", action="store_true")
|
|
||||||
args = p.parse_args()
|
|
||||||
|
|
||||||
results = []
|
|
||||||
for i, jobid in enumerate(args.jobid, 1):
|
|
||||||
print(f"({i:2}/{len(args.jobid):2}) Loading accounting data for {jobid}", file=sys.stderr)
|
|
||||||
accounting_data = get_accounting_data(jobid)
|
|
||||||
array_mean_timings = load_array_mean_timings(jobid)
|
|
||||||
|
|
||||||
results.append({
|
|
||||||
"jobid": jobid,
|
|
||||||
"means": array_mean_timings.mean().to_dict(),
|
|
||||||
"stds": array_mean_timings.std().to_dict(),
|
|
||||||
"accounting": [array_job["steps"][-1] for array_job in accounting_data["jobs"]]
|
|
||||||
})
|
|
||||||
print(json.dumps(results, indent=2 if args.prettify else None))
|
|
@ -1,67 +0,0 @@
|
|||||||
{
|
|
||||||
"common": {
|
|
||||||
"account": "cellsinsilico",
|
|
||||||
"partition": "batch",
|
|
||||||
"extra_sbatch_line": "",
|
|
||||||
"logfile_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a",
|
|
||||||
"nastja_binary_path": "/p/project/cellsinsilico/paulslustigebude/nastja/build-nocuda/nastja",
|
|
||||||
"config_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json",
|
|
||||||
"output_dir_path": "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}"
|
|
||||||
},
|
|
||||||
"batches": [
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-04-04-03",
|
|
||||||
"nodes": 1,
|
|
||||||
"tasks": 48,
|
|
||||||
"time": "00:30:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-04-04-06",
|
|
||||||
"nodes": 2,
|
|
||||||
"tasks": 96,
|
|
||||||
"time": "00:30:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-04-04-12",
|
|
||||||
"nodes": 4,
|
|
||||||
"tasks": 192,
|
|
||||||
"time": "00:10:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-04-08-12",
|
|
||||||
"nodes": 8,
|
|
||||||
"tasks": 384,
|
|
||||||
"time": "00:10:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-08-08-12",
|
|
||||||
"nodes": 16,
|
|
||||||
"tasks": 768,
|
|
||||||
"time": "00:10:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-08-08-24",
|
|
||||||
"nodes": 32,
|
|
||||||
"tasks": 1536,
|
|
||||||
"time": "00:10:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-08-16-24",
|
|
||||||
"nodes": 64,
|
|
||||||
"tasks": 3072,
|
|
||||||
"time": "00:10:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-16-16-24",
|
|
||||||
"nodes": 128,
|
|
||||||
"tasks": 6144,
|
|
||||||
"time": "00:10:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-cpu-16-16-48",
|
|
||||||
"nodes": 256,
|
|
||||||
"tasks": 12288,
|
|
||||||
"time": "00:10:00"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,63 +0,0 @@
|
|||||||
{
|
|
||||||
"common": {
|
|
||||||
"account": "cellsinsilico",
|
|
||||||
"partition": "gpus",
|
|
||||||
"extra_sbatch_line": "#SBATCH --gres=gpu:4",
|
|
||||||
"logfile_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a",
|
|
||||||
"nastja_binary_path": "/p/project/cellsinsilico/paulslustigebude/nastja/build-cuda/nastja",
|
|
||||||
"config_path": "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json",
|
|
||||||
"output_dir_path": "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}"
|
|
||||||
},
|
|
||||||
"batches": [
|
|
||||||
{
|
|
||||||
"name": "strong-gpu-01-01-01",
|
|
||||||
"nodes": 1,
|
|
||||||
"tasks": 1,
|
|
||||||
"time": "00:15:00",
|
|
||||||
"extra_sbatch_line": "#SBATCH --gres=gpu:1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-gpu-01-01-02",
|
|
||||||
"nodes": 1,
|
|
||||||
"tasks": 2,
|
|
||||||
"time": "00:15:00",
|
|
||||||
"extra_sbatch_line": "#SBATCH --gres=gpu:2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-gpu-01-02-02",
|
|
||||||
"nodes": 1,
|
|
||||||
"tasks": 4,
|
|
||||||
"time": "00:15:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-gpu-02-02-02",
|
|
||||||
"nodes": 2,
|
|
||||||
"tasks": 8,
|
|
||||||
"time": "00:15:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-gpu-02-02-04",
|
|
||||||
"nodes": 4,
|
|
||||||
"tasks": 16,
|
|
||||||
"time": "00:15:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-gpu-02-04-04",
|
|
||||||
"nodes": 8,
|
|
||||||
"tasks": 32,
|
|
||||||
"time": "00:15:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-gpu-04-04-04",
|
|
||||||
"nodes": 16,
|
|
||||||
"tasks": 64,
|
|
||||||
"time": "00:15:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "strong-gpu-04-04-08",
|
|
||||||
"nodes": 32,
|
|
||||||
"tasks": 128,
|
|
||||||
"time": "00:15:00"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
#SBATCH --job-name={{ name }}
|
|
||||||
#SBATCH --account={{ account }}
|
|
||||||
#SBATCH --partition={{ partition }}
|
|
||||||
#SBATCH --nodes={{ nodes }}
|
|
||||||
#SBATCH --ntasks={{ tasks }}
|
|
||||||
# Counted per node
|
|
||||||
{{ extra_sbatch_line }}
|
|
||||||
#SBATCH --time={{ time }}
|
|
||||||
#SBATCH --output={{ logfile_path }}
|
|
||||||
#SBATCH --error={{ logfile_path }}
|
|
||||||
#SBATCH --array=1-5
|
|
||||||
|
|
||||||
NASTJA_BINARY="{{ nastja_binary_path }}"
|
|
||||||
CONFIG_FILE="{{ config_path }}"
|
|
||||||
OUTPUT_DIR="{{ output_dir_path }}"
|
|
||||||
module load Stages/2024 GCC/12.3.0 ParaStationMPI/5.9.2-1 CMake/3.26.3 mold/1.11.0 jq/1.6 git Python
|
|
||||||
|
|
||||||
echo "${NASTJA_BINARY_PATH}"
|
|
||||||
echo "${CONFIG_FILE}"
|
|
||||||
echo "${OUTPUT_DIR}"
|
|
||||||
|
|
||||||
cat "${CONFIG_FILE}"
|
|
||||||
|
|
||||||
mkdir -p "${OUTPUT_DIR}"
|
|
||||||
|
|
||||||
srun "${NASTJA_BINARY}" \
|
|
||||||
-c "${CONFIG_FILE}" \
|
|
||||||
-o "${OUTPUT_DIR}"
|
|
||||||
|
|
@ -1,258 +0,0 @@
|
|||||||
{
|
|
||||||
"Application": "Cells",
|
|
||||||
"CellsInSilico": {
|
|
||||||
"2D": false,
|
|
||||||
"adhesion": {
|
|
||||||
"matrix": [
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 450.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0]
|
|
||||||
],
|
|
||||||
"polarityenabled": false
|
|
||||||
},
|
|
||||||
"centerofmass": {
|
|
||||||
"steps": 1
|
|
||||||
},
|
|
||||||
"cleaner": {
|
|
||||||
"killdistance": 0,
|
|
||||||
"steps": 100
|
|
||||||
},
|
|
||||||
"contactinhibition": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"division": {
|
|
||||||
"condition": [
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"
|
|
||||||
],
|
|
||||||
"enabled": true,
|
|
||||||
"halveSignals": false
|
|
||||||
},
|
|
||||||
"dynamicecm": {
|
|
||||||
"alpha": 2.0,
|
|
||||||
"beta": 0.5,
|
|
||||||
"c": 4.0,
|
|
||||||
"deltat": 0.10000000149011612,
|
|
||||||
"ecmCellID": 0,
|
|
||||||
"enabled": true,
|
|
||||||
"eta": 0.25,
|
|
||||||
"k0": 0.10000000149011612,
|
|
||||||
"k1": 0.10000000149011612,
|
|
||||||
"lambda": 10.0,
|
|
||||||
"phi": 1.0,
|
|
||||||
"pushSteps": 10,
|
|
||||||
"pushWeight": 0.5,
|
|
||||||
"stepsPerMcs": 100
|
|
||||||
},
|
|
||||||
"ecmdegradation": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"energyfunctions": [
|
|
||||||
"Volume00",
|
|
||||||
"Surface01",
|
|
||||||
"Motility00",
|
|
||||||
"Adhesion01",
|
|
||||||
"DynamicECM00"
|
|
||||||
],
|
|
||||||
"liquid": 6,
|
|
||||||
"logcellproperties": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"orientation": {
|
|
||||||
"enabled": true,
|
|
||||||
"motility": "persistentRandomWalk",
|
|
||||||
"motilityamount": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"numRandomNumbers": 5,
|
|
||||||
"persistenceMagnitude": 0.0,
|
|
||||||
"persistentDecay": 0.8,
|
|
||||||
"recalculationtime": 200
|
|
||||||
},
|
|
||||||
"polarity": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"signaling": {
|
|
||||||
"constant": false,
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"surface": {
|
|
||||||
"default": {
|
|
||||||
"storage": "const",
|
|
||||||
"value": 400.0
|
|
||||||
},
|
|
||||||
"lambda": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
5.625,
|
|
||||||
5.625,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"sizechange": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
-0.05,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"temperature": 50.0,
|
|
||||||
"visitor": {
|
|
||||||
"checkerboard": "01",
|
|
||||||
"stepwidth": 10
|
|
||||||
},
|
|
||||||
"volume": {
|
|
||||||
"default": {
|
|
||||||
"storage": "const",
|
|
||||||
"value": 500.0
|
|
||||||
},
|
|
||||||
"lambda": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
7.5,
|
|
||||||
7.5,
|
|
||||||
7.5
|
|
||||||
],
|
|
||||||
"sizechange": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
-0.05,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DefineFunctions": [
|
|
||||||
"r_angle()=360*rnd()",
|
|
||||||
"r_size()=400*rnd()"
|
|
||||||
],
|
|
||||||
"Filling": {
|
|
||||||
"cells": [
|
|
||||||
{
|
|
||||||
"box": [
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
384,
|
|
||||||
384,
|
|
||||||
384
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"celltype": 0,
|
|
||||||
"component": 0,
|
|
||||||
"pattern": "const",
|
|
||||||
"seed": 0,
|
|
||||||
"shape": "cube",
|
|
||||||
"value": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"box": [
|
|
||||||
[117, 117, 177],
|
|
||||||
[267, 267, 267]
|
|
||||||
],
|
|
||||||
"celltype": 9,
|
|
||||||
"center": [192, 192, 192],
|
|
||||||
"component": 0,
|
|
||||||
"count": 5500,
|
|
||||||
"pattern": "voronoi",
|
|
||||||
"radius": 75,
|
|
||||||
"seed": 758960,
|
|
||||||
"shape": "sphere",
|
|
||||||
"value": 8
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"initialoutput": false,
|
|
||||||
"randomseed": 758959
|
|
||||||
},
|
|
||||||
"Geometry": {
|
|
||||||
"blockcount": [
|
|
||||||
4,
|
|
||||||
4,
|
|
||||||
3
|
|
||||||
],
|
|
||||||
"blockdefault": "fill",
|
|
||||||
"blocksize": [
|
|
||||||
96,
|
|
||||||
96,
|
|
||||||
128
|
|
||||||
],
|
|
||||||
"blocktype": [
|
|
||||||
[
|
|
||||||
[
|
|
||||||
1
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Settings": {
|
|
||||||
"deltat": 1.0,
|
|
||||||
"deltax": 1.0,
|
|
||||||
"handleFPE": "signal",
|
|
||||||
"logger": {
|
|
||||||
"group": 0,
|
|
||||||
"steps": 100
|
|
||||||
},
|
|
||||||
"randomseed": 42,
|
|
||||||
"statusoutput": 1,
|
|
||||||
"timestepguard": 1,
|
|
||||||
"timesteps": 5
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,263 +0,0 @@
|
|||||||
{
|
|
||||||
"Application": "Cells",
|
|
||||||
"CellsInSilico": {
|
|
||||||
"2D": false,
|
|
||||||
"adhesion": {
|
|
||||||
"matrix": [
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 450.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0],
|
|
||||||
[0.0, 450.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 50.0]
|
|
||||||
],
|
|
||||||
"polarityenabled": false
|
|
||||||
},
|
|
||||||
"centerofmass": {
|
|
||||||
"steps": 1
|
|
||||||
},
|
|
||||||
"cleaner": {
|
|
||||||
"killdistance": 0,
|
|
||||||
"steps": 100
|
|
||||||
},
|
|
||||||
"contactinhibition": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"division": {
|
|
||||||
"condition": [
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"",
|
|
||||||
"( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"
|
|
||||||
],
|
|
||||||
"enabled": true,
|
|
||||||
"halveSignals": false
|
|
||||||
},
|
|
||||||
"dynamicecm": {
|
|
||||||
"alpha": 2.0,
|
|
||||||
"beta": 0.5,
|
|
||||||
"c": 4.0,
|
|
||||||
"deltat": 0.10000000149011612,
|
|
||||||
"ecmCellID": 0,
|
|
||||||
"enabled": true,
|
|
||||||
"eta": 0.25,
|
|
||||||
"k0": 0.10000000149011612,
|
|
||||||
"k1": 0.10000000149011612,
|
|
||||||
"lambda": 10.0,
|
|
||||||
"phi": 1.0,
|
|
||||||
"pushSteps": 10,
|
|
||||||
"pushWeight": 0.5,
|
|
||||||
"stepsPerMcs": 100
|
|
||||||
},
|
|
||||||
"ecmdegradation": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"energyfunctions": [
|
|
||||||
"Volume00",
|
|
||||||
"Surface01",
|
|
||||||
"Motility00",
|
|
||||||
"Adhesion01",
|
|
||||||
"DynamicECM00"
|
|
||||||
],
|
|
||||||
"liquid": 6,
|
|
||||||
"logcellproperties": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"orientation": {
|
|
||||||
"enabled": true,
|
|
||||||
"motility": "persistentRandomWalk",
|
|
||||||
"motilityamount": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
],
|
|
||||||
"numRandomNumbers": 5,
|
|
||||||
"persistenceMagnitude": 0.0,
|
|
||||||
"persistentDecay": 0.8,
|
|
||||||
"recalculationtime": 200
|
|
||||||
},
|
|
||||||
"polarity": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"signaling": {
|
|
||||||
"constant": false,
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"surface": {
|
|
||||||
"default": {
|
|
||||||
"storage": "const",
|
|
||||||
"value": 400.0
|
|
||||||
},
|
|
||||||
"lambda": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
5.625,
|
|
||||||
5.625,
|
|
||||||
1.0
|
|
||||||
],
|
|
||||||
"sizechange": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
-0.05,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"temperature": 50.0,
|
|
||||||
"visitor": {
|
|
||||||
"checkerboard": "01",
|
|
||||||
"stepwidth": 10
|
|
||||||
},
|
|
||||||
"volume": {
|
|
||||||
"default": {
|
|
||||||
"storage": "const",
|
|
||||||
"value": 500.0
|
|
||||||
},
|
|
||||||
"lambda": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
7.5,
|
|
||||||
7.5,
|
|
||||||
7.5
|
|
||||||
],
|
|
||||||
"sizechange": [
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
-0.05,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0,
|
|
||||||
0.0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"DefineFunctions": [
|
|
||||||
"r_angle()=360*rnd()",
|
|
||||||
"r_size()=400*rnd()"
|
|
||||||
],
|
|
||||||
"Filling": {
|
|
||||||
"cells": [
|
|
||||||
{
|
|
||||||
"box": [
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
[
|
|
||||||
384,
|
|
||||||
384,
|
|
||||||
384
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"celltype": 0,
|
|
||||||
"component": 0,
|
|
||||||
"pattern": "const",
|
|
||||||
"seed": 0,
|
|
||||||
"shape": "cube",
|
|
||||||
"value": 0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"box": [
|
|
||||||
[117, 117, 177],
|
|
||||||
[267, 267, 267]
|
|
||||||
],
|
|
||||||
"celltype": 9,
|
|
||||||
"center": [192, 192, 192],
|
|
||||||
"component": 0,
|
|
||||||
"count": 5500,
|
|
||||||
"pattern": "voronoi",
|
|
||||||
"radius": 75,
|
|
||||||
"seed": 758960,
|
|
||||||
"shape": "sphere",
|
|
||||||
"value": 8
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"initialoutput": false,
|
|
||||||
"randomseed": 758959
|
|
||||||
},
|
|
||||||
"Geometry": {
|
|
||||||
"blockcount": [
|
|
||||||
4,
|
|
||||||
4,
|
|
||||||
3
|
|
||||||
],
|
|
||||||
"blockdefault": "fill",
|
|
||||||
"blocksize": [
|
|
||||||
96,
|
|
||||||
96,
|
|
||||||
128
|
|
||||||
],
|
|
||||||
"blocktype": [
|
|
||||||
[
|
|
||||||
[
|
|
||||||
1
|
|
||||||
]
|
|
||||||
]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"Settings": {
|
|
||||||
"deltat": 1.0,
|
|
||||||
"deltax": 1.0,
|
|
||||||
"handleFPE": "signal",
|
|
||||||
"logger": {
|
|
||||||
"group": 0,
|
|
||||||
"steps": 100
|
|
||||||
},
|
|
||||||
"randomseed": 42,
|
|
||||||
"statusoutput": 1,
|
|
||||||
"timestepguard": 1,
|
|
||||||
"timesteps": 5,
|
|
||||||
"cuda": {
|
|
||||||
"subblocks": {
|
|
||||||
"blockDim": [8, 8, 8]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,107 +0,0 @@
|
|||||||
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,19 +128,5 @@ def strong_dat(db, time):
|
|||||||
for tasks, time in values:
|
for tasks, time in values:
|
||||||
print(f"{tasks}\t{time}")
|
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__":
|
if __name__ == "__main__":
|
||||||
timing()
|
timing()
|
||||||
|
@ -1,100 +0,0 @@
|
|||||||
{
|
|
||||||
"Comments": ["Celltype Usage", "0 Dynamic ECM", "1-5 Not Used", "6 Liquid ", "7 Apoptotic cell Type ", "8 Basic Non Dividing Cell type (surrounding)", "9 Cancer"],
|
|
||||||
"Application": "Cells",
|
|
||||||
"CellsInSilico": {
|
|
||||||
"ecmdegradation": {
|
|
||||||
"enabled": "false",
|
|
||||||
"steps": 99999,
|
|
||||||
"stochastic": "true",
|
|
||||||
"probability": 0.5
|
|
||||||
},
|
|
||||||
"energyfunctions": ["Volume00", "Surface01", "Motility00", "Adhesion01", "DynamicECM00"],
|
|
||||||
"liquid": 6,
|
|
||||||
"volume": {
|
|
||||||
"default": {
|
|
||||||
"storage": "const",
|
|
||||||
"value": 500
|
|
||||||
},
|
|
||||||
"lambda": [0, 0, 0, 0, 0, 0, 0, 7.5, 7.5, 7.5],
|
|
||||||
"sizechange": [0, 0, 0, 0, 0, 0, 0, -0.05, 0, 0, 0, 0, 0, 0, 0]
|
|
||||||
},
|
|
||||||
"surface": {
|
|
||||||
"default": {
|
|
||||||
"storage": "const",
|
|
||||||
"value": 400
|
|
||||||
},
|
|
||||||
"lambda": [0, 0, 0, 0, 0, 0, 0, 5.625, 5.625, 1],
|
|
||||||
"sizechange": [0, 0, 0, 0, 0, 0, 0, -0.05, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
||||||
},
|
|
||||||
"adhesion": {
|
|
||||||
"matrix": [
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 450],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
||||||
[0, 450, 0, 0, 0, 0, 0, 0, 0, 50]
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"temperature": 50,
|
|
||||||
"division": {
|
|
||||||
"enabled": "true",
|
|
||||||
"condition": ["", "", "", "", "", "", "", "", "", "( volume >= 0.9 * volume0 ) & ( rnd() <= 0.00001 ) & generation < 1"]
|
|
||||||
},
|
|
||||||
"centerofmass": {
|
|
||||||
"steps": 1
|
|
||||||
},
|
|
||||||
"signaling": {
|
|
||||||
"enabled": false
|
|
||||||
},
|
|
||||||
"orientation": {
|
|
||||||
"enabled": true,
|
|
||||||
"motility": "persistentRandomWalk",
|
|
||||||
"persistenceMagnitude": 0.0,
|
|
||||||
"recalculationtime": 200,
|
|
||||||
"motilityamount": [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
|
|
||||||
},
|
|
||||||
"visitor": {
|
|
||||||
"stepwidth": 10,
|
|
||||||
"checkerboard": "01"
|
|
||||||
},
|
|
||||||
"cleaner": {
|
|
||||||
"killDistance": 20
|
|
||||||
},
|
|
||||||
"dynamicecm": {
|
|
||||||
"enabled": true,
|
|
||||||
"stepsPerMcs": 100,
|
|
||||||
"pushSteps": 10,
|
|
||||||
"pushWeight": 2,
|
|
||||||
"ecmCellID": 0,
|
|
||||||
"deltat": 0.1,
|
|
||||||
"eta": 0.25,
|
|
||||||
"k0": 0.1,
|
|
||||||
"k1": 0.1,
|
|
||||||
"c": 4,
|
|
||||||
"alpha": 2,
|
|
||||||
"d": 0.3,
|
|
||||||
"phi": 1
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"Geometry": {
|
|
||||||
"blockcount": null,
|
|
||||||
"blocksize": null
|
|
||||||
},
|
|
||||||
"Settings": {
|
|
||||||
"randomseed": 0,
|
|
||||||
"timesteps": 20,
|
|
||||||
"statusoutput": 1
|
|
||||||
},
|
|
||||||
"DefineFunctions": [
|
|
||||||
"r_angle()=360*rnd()",
|
|
||||||
"r_size()=400*rnd()"
|
|
||||||
],
|
|
||||||
"Filling": {
|
|
||||||
"cells": null
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user