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