Compare commits
6
Commits
075d11b948
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dee3c87c66 | ||
|
|
3ba78c5f11 | ||
|
|
dac08095c4 | ||
|
|
79227e93d9 | ||
|
|
d41d8b564b | ||
|
|
59d5935567 |
@@ -4,6 +4,9 @@ generate-batch-strong-cpu:
|
|||||||
generate-batch-strong-gpu:
|
generate-batch-strong-gpu:
|
||||||
python scripts/substitute.py strong-batch.j2 < strong-gpu.json
|
python scripts/substitute.py strong-batch.j2 < strong-gpu.json
|
||||||
|
|
||||||
|
generate-batch-strong-booster:
|
||||||
|
python scripts/substitute.py strong-batch.j2 < strong-booster.json
|
||||||
|
|
||||||
clean-logs:
|
clean-logs:
|
||||||
rm logs/*
|
rm logs/*
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
label,BC:cells,BC:dynamicecm,Sweep:Cells,Sweep:DynamicECM,Sweep:DynamicECMDampers,Filling,Other
|
||||||
|
CPU,0.04629667717328299,3.88243023434036,0.002164069189058585,82.18255346583861,13.842310640806883,0.005797982839735358,0.03844692981207934
|
||||||
|
GPU,0.034897486509106485,41.227398706349675,13.180664898871365,22.432483220415783,19.749714111977486,1.9939606413394697,1.3808809345371023
|
||||||
|
Booster,0.09128030041871667,42.736382370072874,12.260298369798207,22.36492489089858,16.070196185259338,4.364304866307413,2.1126130172448816
|
||||||
|
@@ -0,0 +1,4 @@
|
|||||||
|
label,BC:cells,BC:dynamicecm,Sweep:Cells,Sweep:DynamicECM,Sweep:DynamicECMDampers,Other
|
||||||
|
CPU,0.9047934333333334,75.87579921250001,0.04229322083333333,1606.12465625,270.5255006333333,0.8646950250000001
|
||||||
|
GPU,0.11372260000000001,134.35027680000002,42.952648800000006,73.102122,64.3596162,10.9978052
|
||||||
|
Booster,0.155221,72.67267939999999,20.848482800000003,38.0312728,27.327165999999995,11.013917200000002
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
|||||||
|
label nodes tasks mean_time std_time speedup speedup_std speedup_error
|
||||||
|
1 1 1 161.08257980000002 1.0725827874500897 1.0 0.0066585895804611986 0.004614167168572558
|
||||||
|
1 1 2 109.2771463 1.3498701967829918 1.474073813730255 0.018208823861030076 0.012618071172974463
|
||||||
|
1 1 4 94.5763083 2.921107861707173 1.7032022363258181 0.052605536545441436 0.03645377698685362
|
||||||
|
2 2 8 75.06436665 5.345617315509918 2.145926049720424 0.15281950626022228 0.10589851499069955
|
||||||
|
4 4 16 42.842002025 1.5314070839490197 3.759921856733072 0.13440013758310768 0.09313454370387199
|
||||||
|
8 8 32 16.40522446875 4.395440141154071 9.818980539208297 2.6307924825691393 1.823046180232846
|
||||||
|
16 16 64 9.361684956249999 5.010216046116417 17.206579857449583 9.208671612370724 6.381283859970849
|
||||||
|
32 32 128 5.214438346875 0.113661681579046 30.891645290338204 0.6733604113945479 0.4666149588180552
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -1,10 +1,10 @@
|
|||||||
label nodes mean_time std_time speedup speedup_std
|
label nodes tasks mean_time std_time speedup speedup_std speedup_error
|
||||||
1 1 1132.1093720291667 18.428644622186628 1.0 0.016278148629010596
|
1 1 48 1953.3832839708334 14.087268287606769 1.0 0.007211727674340593 0.004711662080569187
|
||||||
2 2 619.9614289104168 7.890810670766857 1.8260964621925766 0.029725469622481192
|
2 2 96 1046.3540047312501 6.0880471399828595 1.866847429396085 0.010861959816590314 0.007096480413505672
|
||||||
4 4 348.657283046875 3.3739994706945122 3.247054993762918 0.052856043795043856
|
4 4 192 566.0709002166666 5.005298021298787 3.4507749527897755 0.030512356378918384 0.019934739500893344
|
||||||
8 8 200.79244575312498 1.259910347938215 5.63820699420684 0.09177957145282603
|
8 8 384 318.1225953708333 9.706195475255436 6.1403475024896865 0.18734731205020752 0.12240024387280224
|
||||||
16 16 111.37033198671875 0.3943541234366863 10.16526889911915 0.16547175799372044
|
16 16 768 178.56471887994792 9.393026972005948 10.939357428631386 0.5754422263707719 0.375955587895571
|
||||||
32 32 65.69918741145833 0.43464214827532205 17.231710415823503 0.28050034328084494
|
32 32 1536 99.82801128216144 1.4413062581268035 19.56748670921274 0.28251330150299214 0.18457535698195485
|
||||||
64 64 38.56257490957031 0.12227397957602136 29.35772247273364 0.4778893698204027
|
64 64 3072 55.75610567220052 1.0303316198245824 35.034428255357376 0.6474103379133267 0.42297475410337343
|
||||||
128 128 21.433497051595047 0.14016683538819355 52.81962944749218 0.8598057786755426
|
128 128 6144 31.589132888118492 0.32226687791817415 61.83719226764697 0.6308523555205254 0.41215687227340997
|
||||||
256 256 13.247708324598525 0.030540850807946187 85.45699711149668 1.3910817003698723
|
256 256 12288 19.11704500200738 0.18528928846832715 102.18018965617955 0.9903672160087601 0.6470399144590566
|
||||||
|
|||||||
|
@@ -0,0 +1,9 @@
|
|||||||
|
label,BC:cells,BC:dynamicecm,Sweep:Cells,Sweep:DynamicECM,Sweep:DynamicECMDampers,Filling,Other
|
||||||
|
1,0.034897486509106485,41.227398706349675,13.180664898871365,22.432483220415783,19.749714111977486,1.9939606413394697,1.3808809345371023
|
||||||
|
2,0.7137918070198439,50.7137377526309,8.923981074147767,19.35772833011394,17.571497161475467,1.320924803923136,1.3983390706889622
|
||||||
|
4,0.6647403410134337,58.291944402330074,7.087118055335309,16.67352093599457,15.236952119238136,1.092645293437499,0.953078852650984
|
||||||
|
8,0.6788278363464717,65.05900206274784,5.2089254465999275,14.249993130938188,13.176763096049008,0.7851584656500297,0.8413299616685318
|
||||||
|
16,1.441574901760373,61.1245906198054,4.832237599492141,16.029377636605524,14.996293924006913,0.716990077435801,0.858935240893841
|
||||||
|
32,3.3736940900007966,47.94830950907802,5.622259685491874,21.238716402604393,19.97281149065964,0.8196124452570666,1.0245963769081996
|
||||||
|
64,6.284545018581091,45.28808866195176,4.502683326147901,21.66574860147326,20.522789117514915,0.6460791296539419,1.0900661446771265
|
||||||
|
128,11.788574344478201,40.04977497065291,3.2677482351392375,22.1995263401806,21.209134936528987,0.4598839494487746,1.0253572235712836
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -1,8 +1,9 @@
|
|||||||
label nodes tasks mean_time std_time speedup speedup_std
|
label nodes tasks mean_time std_time speedup speedup_std speedup_error
|
||||||
1 1 1 157.5217688 0.5311809049610176 1.0 0.003372111099358209
|
1 1 1 316.56674059999995 1.3298279828832311 1.0 0.004200782370133899 0.002910993666206366
|
||||||
1 1 2 120.15237200000001 0.299200156243067 1.3110167213344732 0.004420894037456185
|
1 1 2 239.7297573 1.3705192585818793 1.3205150005797797 0.007549297425250635 0.00523139621453709
|
||||||
1 1 4 75.69762635 0.5769735213369493 2.0809340582447473 0.007017140834839633
|
1 1 4 150.86725470000002 1.463195211854327 2.098313124537819 0.020350616990413285 0.014102258089746373
|
||||||
2 2 8 52.110670325 0.940887445857671 3.022831366735062 0.010193323203255446
|
2 2 8 103.758313 1.3959932139830615 3.051001230137579 0.041049019495199714 0.028445519245192213
|
||||||
4 4 16 28.215493675000005 0.5598524922936691 5.582811012077745 0.018825858979446598
|
4 4 16 56.423368849999996 0.8293394846143929 5.610560784514376 0.08246688711191473 0.057146637198176795
|
||||||
8 8 32 12.422501156249998 0.31940690526235005 12.680358554102268 0.04275957782413007
|
8 8 32 24.168551143749998 0.5503559531334744 13.09829202078025 0.29826872726631265 0.20668968287257275
|
||||||
16 16 64 7.70770194375 0.04068644910316383 20.43693048194875 0.06891560011499148
|
16 16 64 15.05716248125 0.04648043269670786 21.024329185144023 0.06490066896072916 0.044973869063161365
|
||||||
|
32 32 128 9.9111531140625 0.08848604506395903 31.940455056721632 0.28516203039001964 0.19760720531719309
|
||||||
|
|||||||
|
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
|||||||
|
nodes tasks mean_time std_time efficiency efficiency_error
|
||||||
|
1 1 41.98463099999999 1.4067920862965122 1.0 0.023219381860496473
|
||||||
|
1 2 49.85189340000001 1.7669363566083227 0.8421872899214694 0.020685165974491628
|
||||||
|
1 4 59.9694977 2.209151778903949 0.7000997608822725 0.01787171173813342
|
||||||
|
2 8 72.810012625 0.5538313058789631 0.5766326565034021 0.003039461920431096
|
||||||
|
4 16 84.718001525 5.20969191162485 0.4955809892140865 0.021118450727088397
|
||||||
|
8 32 87.22569569999999 1.7018797711775082 0.4813332890390463 0.0065079080866405825
|
||||||
|
16 64 85.36740952500001 1.0197522041876155 0.49181099946232654 0.004071100890302765
|
||||||
|
32 128 87.5995021046875 0.8707125543332932 0.47927933368645675 0.003301208459097849
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -0,0 +1,10 @@
|
|||||||
|
nodes tasks mean_time std_time efficiency efficiency_error
|
||||||
|
1 48 234.09125610833334 4.9756238110995765 1.0 0.013886639526655382
|
||||||
|
2 96 234.09269640000002 1.9886350551995884 0.9999938473447108 0.005550081636855162
|
||||||
|
4 192 239.06532950520833 1.8931447841474947 0.9791936647310181 0.005066063671757703
|
||||||
|
8 384 241.32357499479167 0.977728668984766 0.9700306160033705 0.0025676679349660694
|
||||||
|
16 768 260.8008324059896 12.802824235961744 0.8975863073317291 0.028787758154736998
|
||||||
|
32 1536 266.59983470546877 13.970338204797093 0.8780622702446538 0.03006125980502309
|
||||||
|
64 3072 281.61153985800786 25.95560834859075 0.8312559074332151 0.05005532970709546
|
||||||
|
128 6144 293.4177162058594 10.8076489888669 0.7978088683101088 0.019198998510810975
|
||||||
|
256 12288 310.9775802693196 14.459893325743863 0.7527592693518308 0.022867934404056486
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
|||||||
|
nodes tasks mean_time std_time efficiency efficiency_error
|
||||||
|
1 1 60.658062599999994 1.8711952545625232 1.0 0.021376748626269895
|
||||||
|
1 2 80.6903592 1.1554429061827625 0.751738661240214 0.007459415624087278
|
||||||
|
1 4 89.01234124999999 1.3979557323025515 0.6814567704677693 0.00741639040919915
|
||||||
|
2 8 101.357940575 4.784240687736861 0.5984539766286584 0.01957478845779047
|
||||||
|
4 16 106.2530252 1.5044057675724636 0.5708831582519497 0.005601211794070455
|
||||||
|
8 32 113.70197445 2.069642901549501 0.5334829310873062 0.006729131548114211
|
||||||
|
16 64 119.22770070624999 0.7600051865549382 0.5087581345667959 0.00224730403456563
|
||||||
|
32 128 121.8124414140625 0.5170666166834136 0.4979627852118346 0.0014647476739746731
|
||||||
|
@@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
|
import math
|
||||||
|
|
||||||
|
|
||||||
def print_table(data, spec):
|
def print_table(data, spec):
|
||||||
@@ -19,11 +20,13 @@ def print_table(data, spec):
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
p = argparse.ArgumentParser(description="Turn files generated by timing.py into pgf datafiles")
|
p = argparse.ArgumentParser(description="Turn files generated by timing.py into pgf datafiles")
|
||||||
p.add_argument("timing_file")
|
p.add_argument("timing_file")
|
||||||
|
p.add_argument("--weak", action="store_true")
|
||||||
args = p.parse_args()
|
args = p.parse_args()
|
||||||
|
|
||||||
with open(args.timing_file, "r", encoding="utf8") as f:
|
with open(args.timing_file, "r", encoding="utf8") as f:
|
||||||
jobs = json.load(f)
|
jobs = json.load(f)
|
||||||
|
|
||||||
|
if not args.weak:
|
||||||
scaling_spec = {
|
scaling_spec = {
|
||||||
"label": lambda job: job["accounting"][0]["nodes"]["count"],
|
"label": lambda job: job["accounting"][0]["nodes"]["count"],
|
||||||
"nodes": lambda job: job["accounting"][0]["nodes"]["count"],
|
"nodes": lambda job: job["accounting"][0]["nodes"]["count"],
|
||||||
@@ -31,6 +34,19 @@ if __name__ == "__main__":
|
|||||||
"mean_time": lambda job: job["means"]["TimeStep"],
|
"mean_time": lambda job: job["means"]["TimeStep"],
|
||||||
"std_time": lambda job: job["stds"]["TimeStep"],
|
"std_time": lambda job: job["stds"]["TimeStep"],
|
||||||
"speedup": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"],
|
"speedup": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"],
|
||||||
"speedup_std": lambda job: jobs[0]["stds"]["TimeStep"] / job["means"]["TimeStep"],
|
# Standard deviation scaled to speedup
|
||||||
|
"speedup_std": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]),
|
||||||
|
# 95% confidence interval
|
||||||
|
"speedup_error": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]) / math.sqrt(len(jobs)) * 1.96,
|
||||||
}
|
}
|
||||||
|
else:
|
||||||
|
scaling_spec = {
|
||||||
|
"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"],
|
||||||
|
"efficiency": lambda job: jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"],
|
||||||
|
"efficiency_error": lambda job: (jobs[0]["means"]["TimeStep"] / job["means"]["TimeStep"]) * (job["stds"]["TimeStep"] / job["means"]["TimeStep"]) / math.sqrt(len(jobs)) * 1.96,
|
||||||
|
}
|
||||||
|
|
||||||
print_table(jobs, scaling_spec)
|
print_table(jobs, scaling_spec)
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import copy
|
||||||
|
import json
|
||||||
|
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
SIZE = [384, 384, 384]
|
||||||
|
|
||||||
|
with (Path(__file__).parent.parent / "templates" / "strong-booster.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-booster-{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)
|
||||||
+207
@@ -0,0 +1,207 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
|
||||||
|
import jinja2
|
||||||
|
import json
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Tuple
|
||||||
|
|
||||||
|
|
||||||
|
SIZE = (192, 192, 192)
|
||||||
|
|
||||||
|
|
||||||
|
templates_env = jinja2.Environment(
|
||||||
|
loader=jinja2.FileSystemLoader(Path(__file__).parent.parent / "templates"),
|
||||||
|
autoescape=jinja2.select_autoescape()
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class Experiment:
|
||||||
|
job_name: str
|
||||||
|
account: str
|
||||||
|
partition: str
|
||||||
|
nastja_binary_path: str
|
||||||
|
nodes: int
|
||||||
|
tasks: int
|
||||||
|
num_blocks: Tuple[int, int, int]
|
||||||
|
domain_scale: Tuple[int, int, int]
|
||||||
|
time: str = "00:15:00"
|
||||||
|
extra_sbatch_line: str = ""
|
||||||
|
logfile_path: str = "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/logs/%x-%A.%a"
|
||||||
|
config_path: str = "/p/project/cellsinsilico/paulslustigebude/ma/experiments/eval/generated/config/${SLURM_JOB_NAME}.json"
|
||||||
|
output_dir_path: str = "/p/scratch/cellsinsilico/paul/nastja-out/${SLURM_JOB_NAME}-${SLURM_ARRAY_JOB_ID}.${SLURM_ARRAY_TASK_ID}"
|
||||||
|
|
||||||
|
def get_config(self):
|
||||||
|
with (Path(__file__).parent.parent / "templates" / "weak.json").open(encoding="utf8") as f:
|
||||||
|
config = json.load(f)
|
||||||
|
|
||||||
|
size = (
|
||||||
|
SIZE[0] * self.domain_scale[0],
|
||||||
|
SIZE[1] * self.domain_scale[1],
|
||||||
|
SIZE[2] * self.domain_scale[2],
|
||||||
|
)
|
||||||
|
blocksize = (
|
||||||
|
size[0] // self.num_blocks[0],
|
||||||
|
size[1] // self.num_blocks[1],
|
||||||
|
size[2] // self.num_blocks[2],
|
||||||
|
)
|
||||||
|
config["Geometry"] = {
|
||||||
|
"blockcount": list(self.num_blocks),
|
||||||
|
"blocksize": list(blocksize),
|
||||||
|
}
|
||||||
|
|
||||||
|
cells_filling = [{
|
||||||
|
"box": [
|
||||||
|
[0, 0, 0],
|
||||||
|
list(size)
|
||||||
|
],
|
||||||
|
"celltype": 0,
|
||||||
|
"component": 0,
|
||||||
|
"pattern": "const",
|
||||||
|
"seed": 0,
|
||||||
|
"shape": "cube",
|
||||||
|
"value": 0,
|
||||||
|
}]
|
||||||
|
for z in range(self.domain_scale[2]):
|
||||||
|
for y in range(self.domain_scale[1]):
|
||||||
|
for x in range(self.domain_scale[0]):
|
||||||
|
cx = x * SIZE[0] + SIZE[0] // 2
|
||||||
|
cy = y * SIZE[1] + SIZE[1] // 2
|
||||||
|
cz = z * SIZE[2] + SIZE[2] // 2
|
||||||
|
cells_filling.append({
|
||||||
|
"shape": "sphere",
|
||||||
|
"pattern": "voronoi",
|
||||||
|
"count": 715,
|
||||||
|
"radius": 38,
|
||||||
|
"center": [cx, cy, cz],
|
||||||
|
"box": [
|
||||||
|
[cx - 38, cy - 38, cz - 38],
|
||||||
|
[cx + 38, cy + 38, cz + 38]
|
||||||
|
],
|
||||||
|
"celltype": 9,
|
||||||
|
"seed": 758960,
|
||||||
|
})
|
||||||
|
|
||||||
|
config["Filling"]["cells"] = cells_filling
|
||||||
|
|
||||||
|
return config
|
||||||
|
|
||||||
|
def write_batch_file(self, out_path: Path):
|
||||||
|
t = templates_env.get_template("strong-batch.j2")
|
||||||
|
t.stream(
|
||||||
|
name=self.job_name,
|
||||||
|
account=self.account,
|
||||||
|
partition=self.partition,
|
||||||
|
nodes=self.nodes,
|
||||||
|
tasks=self.tasks,
|
||||||
|
extra_sbatch_line=self.extra_sbatch_line,
|
||||||
|
time=self.time,
|
||||||
|
logfile_path=self.logfile_path,
|
||||||
|
nastja_binary_path=self.nastja_binary_path,
|
||||||
|
config_path=self.config_path,
|
||||||
|
output_dir_path=self.output_dir_path,
|
||||||
|
).dump(str(out_path))
|
||||||
|
|
||||||
|
|
||||||
|
def make_cpu_ex(x: int, y: int, z: int) -> Experiment:
|
||||||
|
num_blocks = x * y * z
|
||||||
|
assert num_blocks % 48 == 0
|
||||||
|
num_nodes = num_blocks // 48
|
||||||
|
|
||||||
|
assert x % 4 == 0
|
||||||
|
assert y % 4 == 0
|
||||||
|
assert z % 3 == 0
|
||||||
|
|
||||||
|
return Experiment(
|
||||||
|
job_name=f"weak-cpu-{x:02}-{y:02}-{z:02}",
|
||||||
|
account="cellsinsilico",
|
||||||
|
partition="batch",
|
||||||
|
nastja_binary_path="/p/project/cellsinsilico/paulslustigebude/nastja/build-nocuda/nastja",
|
||||||
|
nodes=num_nodes,
|
||||||
|
tasks=num_blocks,
|
||||||
|
num_blocks=(x, y, z),
|
||||||
|
domain_scale=(x // 4, y // 4, z // 3),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def make_gpu_ex(x: int, y: int, z: int) -> Experiment:
|
||||||
|
num_blocks = x * y * z
|
||||||
|
gpus_per_node = num_blocks if num_blocks <= 4 else 4
|
||||||
|
num_nodes = 1 if num_blocks <= 4 else num_blocks // 4
|
||||||
|
|
||||||
|
return Experiment(
|
||||||
|
job_name=f"weak-gpu-{x:02}-{y:02}-{z:02}",
|
||||||
|
account="cellsinsilico",
|
||||||
|
partition="gpus",
|
||||||
|
extra_sbatch_line=f"#SBATCH --gres=gpu:{gpus_per_node}",
|
||||||
|
nastja_binary_path="/p/project/cellsinsilico/paulslustigebude/nastja/build-cuda/nastja",
|
||||||
|
nodes=num_nodes,
|
||||||
|
tasks=num_blocks,
|
||||||
|
num_blocks=(x, y, z),
|
||||||
|
domain_scale=(x, y, z),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def make_booster_ex(x: int, y: int, z: int) -> Experiment:
|
||||||
|
num_blocks = x * y * z
|
||||||
|
gpus_per_node = num_blocks if num_blocks <= 4 else 4
|
||||||
|
num_nodes = 1 if num_blocks <= 4 else num_blocks // 4
|
||||||
|
|
||||||
|
return Experiment(
|
||||||
|
job_name=f"weak-booster-{x:02}-{y:02}-{z:02}",
|
||||||
|
account="hkf6",
|
||||||
|
partition="booster",
|
||||||
|
extra_sbatch_line=f"#SBATCH --gres=gpu:{gpus_per_node}",
|
||||||
|
nastja_binary_path="/p/project/cellsinsilico/paulslustigebude/nastja/build-cuda/nastja",
|
||||||
|
nodes=num_nodes,
|
||||||
|
tasks=num_blocks,
|
||||||
|
num_blocks=(x, y, z),
|
||||||
|
domain_scale=(x, y, z),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
experiments = [
|
||||||
|
make_cpu_ex(4, 4, 3),
|
||||||
|
make_cpu_ex(4, 4, 6),
|
||||||
|
make_cpu_ex(4, 4, 12),
|
||||||
|
make_cpu_ex(4, 8, 12),
|
||||||
|
make_cpu_ex(8, 8, 12),
|
||||||
|
make_cpu_ex(8, 8, 24),
|
||||||
|
make_cpu_ex(8, 16, 24),
|
||||||
|
make_cpu_ex(16, 16, 24),
|
||||||
|
make_cpu_ex(16, 16, 48),
|
||||||
|
|
||||||
|
make_gpu_ex(1, 1, 1),
|
||||||
|
make_gpu_ex(1, 1, 2),
|
||||||
|
make_gpu_ex(1, 2, 2),
|
||||||
|
make_gpu_ex(2, 2, 2),
|
||||||
|
make_gpu_ex(2, 2, 4),
|
||||||
|
make_gpu_ex(2, 4, 4),
|
||||||
|
make_gpu_ex(4, 4, 4),
|
||||||
|
make_gpu_ex(4, 4, 8),
|
||||||
|
|
||||||
|
make_booster_ex(1, 1, 1),
|
||||||
|
make_booster_ex(1, 1, 2),
|
||||||
|
make_booster_ex(1, 2, 2),
|
||||||
|
make_booster_ex(2, 2, 2),
|
||||||
|
make_booster_ex(2, 2, 4),
|
||||||
|
make_booster_ex(2, 4, 4),
|
||||||
|
make_booster_ex(4, 4, 4),
|
||||||
|
make_booster_ex(4, 4, 8),
|
||||||
|
]
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
outdir = Path(__file__).parent.parent / "generated"
|
||||||
|
|
||||||
|
for e in experiments:
|
||||||
|
print(f"Generating config for {e.job_name}", file=sys.stderr)
|
||||||
|
config_path = (outdir / "config" / e.job_name).with_suffix(".json")
|
||||||
|
with config_path.open("w", encoding="utf8") as f:
|
||||||
|
json.dump(e.get_config(), f, indent=2)
|
||||||
|
print(f"Generating batch file for {e.job_name}", file=sys.stderr)
|
||||||
|
e.write_batch_file(outdir / "batch" / e.job_name)
|
||||||
Executable
+24
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import pandas
|
||||||
|
|
||||||
|
|
||||||
|
def show_seconds(s: float) -> str:
|
||||||
|
return f"{s:.2f}s"
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
p = argparse.ArgumentParser(description="Make a latex table from a timings tsv")
|
||||||
|
p.add_argument("timingfile")
|
||||||
|
p.add_argument("--weak", action="store_true")
|
||||||
|
args = p.parse_args()
|
||||||
|
|
||||||
|
df = pandas.read_csv(args.timingfile, sep="\t")
|
||||||
|
|
||||||
|
for i in range(len(df)):
|
||||||
|
if not args.weak:
|
||||||
|
print(f"{df['nodes'][i]} & {df['tasks'][i]} & {show_seconds(df['mean_time'][i])} & {show_seconds(df['std_time'][i])} & {df['speedup'][i]:.02f} & {df['speedup_error'][i]:.02f} \\\\")
|
||||||
|
else:
|
||||||
|
print(f"{df['nodes'][i]} & {df['tasks'][i]} & {show_seconds(df['mean_time'][i])} & {show_seconds(df['std_time'][i])} & {df['efficiency'][i]:.02f} & {df['efficiency_error'][i]:.02f} \\\\")
|
||||||
Executable
+61
@@ -0,0 +1,61 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
import timing
|
||||||
|
|
||||||
|
|
||||||
|
ignore = ["TimeStep"]
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
p = argparse.ArgumentParser()
|
||||||
|
p.add_argument("jobs", nargs="+")
|
||||||
|
p.add_argument("--normalize", action="store_true")
|
||||||
|
p.add_argument("--extra-columns", nargs="*")
|
||||||
|
args = p.parse_args()
|
||||||
|
|
||||||
|
columns = [
|
||||||
|
"BC:cells",
|
||||||
|
"BC:dynamicecm",
|
||||||
|
"Sweep:Cells",
|
||||||
|
"Sweep:DynamicECM",
|
||||||
|
"Sweep:DynamicECMDampers",
|
||||||
|
] + (args.extra_columns or [])
|
||||||
|
|
||||||
|
dfs = dict()
|
||||||
|
labels = []
|
||||||
|
for label, jobid in [jobarg.split(":") for jobarg in args.jobs]:
|
||||||
|
jobs, excluded_array_indices = timing.get_jobs(jobid)
|
||||||
|
df = timing.load_array_mean_timings(jobid, excluded_array_indices).mean()
|
||||||
|
dfs[label] = df
|
||||||
|
labels.extend(df.index)
|
||||||
|
|
||||||
|
labels = set(labels)
|
||||||
|
print(",".join(["label"] + columns + ["Other"]))
|
||||||
|
|
||||||
|
values_by_label = dict()
|
||||||
|
for label, df in dfs.items():
|
||||||
|
values = {"Other": 0}
|
||||||
|
for c in df.index:
|
||||||
|
if c in ignore:
|
||||||
|
continue
|
||||||
|
elif c not in columns:
|
||||||
|
values["Other"] += df[c]
|
||||||
|
print(f"Others+= {c}={df[c]}", file=sys.stderr)
|
||||||
|
else:
|
||||||
|
values[c] = df[c]
|
||||||
|
values_by_label[label] = values
|
||||||
|
|
||||||
|
if args.normalize:
|
||||||
|
print("Normalizing data to 100%...", file=sys.stderr)
|
||||||
|
for values in values_by_label.values():
|
||||||
|
row_length = sum(values.values())
|
||||||
|
for c in values.keys():
|
||||||
|
values[c] *= 100 / row_length
|
||||||
|
|
||||||
|
for label, values in values_by_label.items():
|
||||||
|
print(label + "," + ",".join(f"{values[c]}" for c in columns + ["Other"]))
|
||||||
@@ -44,12 +44,13 @@ def get_outdirs(jobid: str):
|
|||||||
return sorted(Path("/p/scratch/cellsinsilico/paul/nastja-out").glob(f"*{jobid}*"))
|
return sorted(Path("/p/scratch/cellsinsilico/paul/nastja-out").glob(f"*{jobid}*"))
|
||||||
|
|
||||||
|
|
||||||
def load_array_mean_timings(jobid: str):
|
def load_array_mean_timings(jobid: str, excluded_array_indices):
|
||||||
mts = [
|
mts = []
|
||||||
load_mean_timings(outdir_path)
|
for outdir_path in get_outdirs(jobid):
|
||||||
for outdir_path
|
if any(str(outdir_path).endswith(str(i)) for i in excluded_array_indices):
|
||||||
in get_outdirs(jobid)
|
print(f"Not loading timings for {outdir_path} because it was excluded.", file=sys.stderr)
|
||||||
]
|
continue
|
||||||
|
mts.append(load_mean_timings(outdir_path))
|
||||||
|
|
||||||
return pandas.DataFrame(list(mts), columns=mts[0].index)
|
return pandas.DataFrame(list(mts), columns=mts[0].index)
|
||||||
|
|
||||||
@@ -71,22 +72,45 @@ def get_accounting_data(jobid: str):
|
|||||||
return json.loads(sacct_results.stdout.decode("utf8"))
|
return json.loads(sacct_results.stdout.decode("utf8"))
|
||||||
|
|
||||||
|
|
||||||
|
def get_jobs(jobid: str):
|
||||||
|
accounting_data = get_accounting_data(jobid)
|
||||||
|
jobs = []
|
||||||
|
excluded_array_indices = []
|
||||||
|
for array_job in accounting_data["jobs"]:
|
||||||
|
# Get metadata related to array
|
||||||
|
array_main_job = array_job["array"]["job_id"]
|
||||||
|
array_index = array_job["array"]["task_id"]
|
||||||
|
# The last step is the actual job we want the data for
|
||||||
|
# The steps before set up cluster etc.
|
||||||
|
last_step = array_job["steps"][-1]
|
||||||
|
if last_step["state"] != "COMPLETED":
|
||||||
|
print(f"WARNING: {array_main_job}.{array_index} has state {last_step['state']}, excluding it from measurements", file=sys.stderr)
|
||||||
|
excluded_array_indices.append(array_index)
|
||||||
|
continue
|
||||||
|
jobs.append(last_step)
|
||||||
|
|
||||||
|
return jobs, excluded_array_indices
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
p = argparse.ArgumentParser(description="Load and analzye data from nastja timing files")
|
p = argparse.ArgumentParser(description="Load and analzye data from nastja timing files")
|
||||||
p.add_argument("jobid", nargs="+")
|
p.add_argument("jobid", nargs="+")
|
||||||
p.add_argument("--prettify", action="store_true")
|
p.add_argument("--prettify", action="store_true")
|
||||||
|
p.add_argument("--dump-timings", action="store_true")
|
||||||
args = p.parse_args()
|
args = p.parse_args()
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
for i, jobid in enumerate(args.jobid, 1):
|
for i, jobid in enumerate(args.jobid, 1):
|
||||||
print(f"({i:2}/{len(args.jobid):2}) Loading accounting data for {jobid}", file=sys.stderr)
|
print(f"({i:2}/{len(args.jobid):2}) Loading accounting data for {jobid}", file=sys.stderr)
|
||||||
accounting_data = get_accounting_data(jobid)
|
jobs, excluded_array_indices = get_jobs(jobid)
|
||||||
array_mean_timings = load_array_mean_timings(jobid)
|
array_mean_timings = load_array_mean_timings(jobid, excluded_array_indices)
|
||||||
|
if args.dump_timings:
|
||||||
|
print(array_mean_timings, file=sys.stderr)
|
||||||
|
|
||||||
results.append({
|
results.append({
|
||||||
"jobid": jobid,
|
"jobid": jobid,
|
||||||
"means": array_mean_timings.mean().to_dict(),
|
"means": array_mean_timings.mean().to_dict(),
|
||||||
"stds": array_mean_timings.std().to_dict(),
|
"stds": array_mean_timings.std().to_dict(),
|
||||||
"accounting": [array_job["steps"][-1] for array_job in accounting_data["jobs"]]
|
"accounting": jobs
|
||||||
})
|
})
|
||||||
print(json.dumps(results, indent=2 if args.prettify else None))
|
print(json.dumps(results, indent=2 if args.prettify else None))
|
||||||
|
|||||||
@@ -0,0 +1,63 @@
|
|||||||
|
{
|
||||||
|
"common": {
|
||||||
|
"account": "hkf6",
|
||||||
|
"partition": "booster",
|
||||||
|
"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-booster-01-01-01",
|
||||||
|
"nodes": 1,
|
||||||
|
"tasks": 1,
|
||||||
|
"time": "00:15:00",
|
||||||
|
"extra_sbatch_line": "#SBATCH --gres=gpu:1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "strong-booster-01-01-02",
|
||||||
|
"nodes": 1,
|
||||||
|
"tasks": 2,
|
||||||
|
"time": "00:15:00",
|
||||||
|
"extra_sbatch_line": "#SBATCH --gres=gpu:2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "strong-booster-01-02-02",
|
||||||
|
"nodes": 1,
|
||||||
|
"tasks": 4,
|
||||||
|
"time": "00:15:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "strong-booster-02-02-02",
|
||||||
|
"nodes": 2,
|
||||||
|
"tasks": 8,
|
||||||
|
"time": "00:15:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "strong-booster-02-02-04",
|
||||||
|
"nodes": 4,
|
||||||
|
"tasks": 16,
|
||||||
|
"time": "00:15:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "strong-booster-02-04-04",
|
||||||
|
"nodes": 8,
|
||||||
|
"tasks": 32,
|
||||||
|
"time": "00:15:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "strong-booster-04-04-04",
|
||||||
|
"nodes": 16,
|
||||||
|
"tasks": 64,
|
||||||
|
"time": "00:15:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "strong-booster-04-04-08",
|
||||||
|
"nodes": 32,
|
||||||
|
"tasks": 128,
|
||||||
|
"time": "00:15:00"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -13,19 +13,19 @@
|
|||||||
"name": "strong-cpu-04-04-03",
|
"name": "strong-cpu-04-04-03",
|
||||||
"nodes": 1,
|
"nodes": 1,
|
||||||
"tasks": 48,
|
"tasks": 48,
|
||||||
"time": "00:30:00"
|
"time": "01:00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "strong-cpu-04-04-06",
|
"name": "strong-cpu-04-04-06",
|
||||||
"nodes": 2,
|
"nodes": 2,
|
||||||
"tasks": 96,
|
"tasks": 96,
|
||||||
"time": "00:30:00"
|
"time": "01:00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "strong-cpu-04-04-12",
|
"name": "strong-cpu-04-04-12",
|
||||||
"nodes": 4,
|
"nodes": 4,
|
||||||
"tasks": 192,
|
"tasks": 192,
|
||||||
"time": "00:10:00"
|
"time": "00:20:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "strong-cpu-04-08-12",
|
"name": "strong-cpu-04-08-12",
|
||||||
|
|||||||
@@ -0,0 +1,263 @@
|
|||||||
|
{
|
||||||
|
"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": 10,
|
||||||
|
"cuda": {
|
||||||
|
"subblocks": {
|
||||||
|
"blockDim": [8, 8, 8]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -253,6 +253,6 @@
|
|||||||
"randomseed": 42,
|
"randomseed": 42,
|
||||||
"statusoutput": 1,
|
"statusoutput": 1,
|
||||||
"timestepguard": 1,
|
"timestepguard": 1,
|
||||||
"timesteps": 5
|
"timesteps": 10
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -253,7 +253,7 @@
|
|||||||
"randomseed": 42,
|
"randomseed": 42,
|
||||||
"statusoutput": 1,
|
"statusoutput": 1,
|
||||||
"timestepguard": 1,
|
"timestepguard": 1,
|
||||||
"timesteps": 5,
|
"timesteps": 10,
|
||||||
"cuda": {
|
"cuda": {
|
||||||
"subblocks": {
|
"subblocks": {
|
||||||
"blockDim": [8, 8, 8]
|
"blockDim": [8, 8, 8]
|
||||||
|
|||||||
@@ -0,0 +1,193 @@
|
|||||||
|
{
|
||||||
|
"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.1,
|
||||||
|
"ecmCellID": 0,
|
||||||
|
"enabled": true,
|
||||||
|
"eta": 0.25,
|
||||||
|
"k0": 0.1,
|
||||||
|
"k1": 0.1,
|
||||||
|
"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": {
|
||||||
|
"initialoutput": false,
|
||||||
|
"randomseed": 758959
|
||||||
|
},
|
||||||
|
"Settings": {
|
||||||
|
"randomseed": 42,
|
||||||
|
"statusoutput": 1,
|
||||||
|
"timesteps": 10
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user