diff options
| author | J08nY | 2025-08-02 12:08:01 +0200 |
|---|---|---|
| committer | J08nY | 2025-08-02 12:08:01 +0200 |
| commit | 41c1ae528d34493b43f808208aee024ceea052e7 (patch) | |
| tree | a0ae075e88a84da8df7f481e6e7c653ac554bc16 /analysis | |
| parent | 47a09e109462a424979230f0cac819124a166682 (diff) | |
| download | ECTester-41c1ae528d34493b43f808208aee024ceea052e7.tar.gz ECTester-41c1ae528d34493b43f808208aee024ceea052e7.tar.zst ECTester-41c1ae528d34493b43f808208aee024ceea052e7.zip | |
Speed up multiples generation.
Make each worker write in a tempfile. Removes the unpickling bottleneck
of the parent that is scheduling the workers.
Diffstat (limited to 'analysis')
| -rw-r--r-- | analysis/scalarmults/common.py | 6 | ||||
| -rw-r--r-- | analysis/scalarmults/simulate.ipynb | 559 |
2 files changed, 540 insertions, 25 deletions
diff --git a/analysis/scalarmults/common.py b/analysis/scalarmults/common.py index c2369f6..f92aac5 100644 --- a/analysis/scalarmults/common.py +++ b/analysis/scalarmults/common.py @@ -176,6 +176,12 @@ class MultIdent: error_model = f"+{self.error_model}" if self.error_model is not None else "" return f"{name}{args}{kwargs}{countermeasure}{error_model}" + def __getstate__(self): + state = self.__dict__.copy() + # Remove cached properties + state.pop("partial", None) + return state + def __lt__(self, other): if not isinstance(other, MultIdent): return NotImplemented diff --git a/analysis/scalarmults/simulate.ipynb b/analysis/scalarmults/simulate.ipynb index 4c06b10..dae8d06 100644 --- a/analysis/scalarmults/simulate.ipynb +++ b/analysis/scalarmults/simulate.ipynb @@ -10,7 +10,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "b4386513-cc14-434b-a748-2863f8657452", "metadata": {}, "outputs": [], @@ -18,10 +18,11 @@ "import itertools\n", "import gc\n", "import glob\n", + "import hashlib\n", "import pickle\n", "import random\n", "import re\n", - "import hashlib\n", + "import tempfile\n", "\n", "import warnings\n", "warnings.filterwarnings(\n", @@ -61,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "3463a7bd-34d8-458b-8ceb-dddf99de21dc", "metadata": {}, "outputs": [], @@ -78,10 +79,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "170c11fc-86cf-4eb1-bf4e-b2e44b2d7ac5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Scalar multipliers considered: 65\n", + "Scalar multipliers (with a single countermeasure) considered: 390\n", + "Error models considered: 32\n", + "Total configurations considered: 12480\n" + ] + } + ], "source": [ "nmults = len(all_mults)\n", "nmults_ctr = len(all_mults_with_ctr)\n", @@ -104,7 +116,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "4d5c7f10-618f-4612-b594-81d1607b0d1d", "metadata": {}, "outputs": [], @@ -115,15 +127,15 @@ "use_init = True\n", "use_multiply = True\n", "params = get_params(category, curve, \"projective\")\n", - "num_workers = 20\n", + "num_workers = 30\n", "bits = params.order.bit_length()\n", - "samples = 100\n", + "samples = 1000\n", "selected_mults = all_mults" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "07bc266d-35eb-4f6d-bdba-e9f6f66827f1", "metadata": {}, "outputs": [], @@ -154,7 +166,42 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, + "id": "6f3e9ffa-19e8-46b2-a6ad-1d318d5c8e17", + "metadata": {}, + "outputs": [], + "source": [ + "def simulate_multiples_direct(mult: MultIdent,\n", + " params: DomainParameters,\n", + " bits: int,\n", + " fname: str,\n", + " samples: int = 100,\n", + " use_init: bool = True,\n", + " use_multiply: bool = True,\n", + " seed: bytes | None = None) -> MultResults:\n", + " results = []\n", + " if seed is not None:\n", + " random.seed(seed)\n", + "\n", + " # If no countermeasure is used, we have fully random scalars.\n", + " # Otherwise, fix one per chunk.\n", + " if mult.countermeasure is None:\n", + " scalars = [random.randint(1, 2**bits) for _ in range(samples)]\n", + " else:\n", + " one = random.randint(1, 2**bits)\n", + " scalars = [one for _ in range(samples)]\n", + "\n", + " for scalar in scalars:\n", + " results.append(multiple_graph(scalar, params, mult.klass, mult.partial, use_init, use_multiply))\n", + " result = MultResults(results, samples)\n", + " with open(fname, \"wb\") as f:\n", + " pickle.dump((mult, result), f)\n", + " return fname" + ] + }, + { + "cell_type": "code", + "execution_count": 7, "id": "64799c16-8113-4eff-81de-6a3e547eb5c5", "metadata": {}, "outputs": [], @@ -181,7 +228,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "ac630a08-4120-41cf-b3bb-1827ef469542", "metadata": {}, "outputs": [], @@ -220,28 +267,439 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "84359084-4116-436c-92cd-d43fdfeca842", - "metadata": { - "scrolled": true - }, - "outputs": [], + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "b7c686d503d14bb69250747a881fe3f4", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Computing multiple graphs.: 0%| | 0/390 [00:00<?, ?it/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Got SlidingWindow_w:6,recode:LTR.\n", + "Got SlidingWindow_w:5,recode:LTR+bt.\n", + "Got SlidingWindow_w:4,recode:LTR.\n", + "Got SlidingWindow_w:3,recode:LTR+bt.\n", + "Got SlidingWindow_w:5,recode:LTR+multiplicative.\n", + "Got SlidingWindow_w:5,recode:LTR+gsr.\n", + "Got SlidingWindow_w:4,recode:LTR+multiplicative.\n", + "Got SlidingWindow_w:2,recode:LTR.\n", + "Got SlidingWindow_w:3,recode:LTR+multiplicative.\n", + "Got SlidingWindow_w:4,recode:LTR+gsr.\n", + "Got SlidingWindow_w:3,recode:LTR.\n", + "Got SlidingWindow_w:2,recode:LTR+bt.\n", + "Got SlidingWindow_w:3,recode:LTR+gsr.\n", + "Got SlidingWindow_w:6,recode:LTR+gsr.\n", + "Got SlidingWindow_w:5,recode:LTR.\n", + "Got SlidingWindow_w:4,recode:LTR+bt.\n", + "Got SlidingWindow_w:6,recode:LTR+bt.\n", + "Got SlidingWindow_w:4,recode:LTR+euclidean.\n", + "Got SlidingWindow_w:5,recode:LTR+euclidean.\n", + "Got SlidingWindow_w:3,recode:LTR+euclidean.\n", + "Got SlidingWindow_w:4,recode:LTR+additive.\n", + "Got SlidingWindow_w:2,recode:LTR+multiplicative.\n", + "Got SlidingWindow_w:6,recode:LTR+euclidean.\n", + "Got SlidingWindow_w:2,recode:LTR+gsr.\n", + "Got SlidingWindow_w:6,recode:LTR+multiplicative.\n", + "Got SlidingWindow_w:2,recode:RTL.\n", + "Got SlidingWindow_w:2,recode:LTR+euclidean.\n", + "Got SlidingWindow_w:6,recode:LTR+additive.\n", + "Got SlidingWindow_w:5,recode:LTR+additive.\n", + "Got SlidingWindow_w:3,recode:LTR+additive.\n", + "Got SlidingWindow_w:3,recode:RTL.\n", + "Got SlidingWindow_w:2,recode:RTL+gsr.\n", + "Got SlidingWindow_w:2,recode:RTL+bt.\n", + "Got SlidingWindow_w:3,recode:RTL+multiplicative.\n", + "Got SlidingWindow_w:3,recode:RTL+gsr.\n", + "Got SlidingWindow_w:3,recode:RTL+bt.\n", + "Got SlidingWindow_w:5,recode:RTL.\n", + "Got SlidingWindow_w:4,recode:RTL.\n", + "Got SlidingWindow_w:2,recode:LTR+additive.\n", + "Got SlidingWindow_w:2,recode:RTL+multiplicative.\n", + "Got SlidingWindow_w:4,recode:RTL+bt.\n", + "Got SlidingWindow_w:4,recode:RTL+gsr.\n", + "Got SlidingWindow_w:5,recode:RTL+gsr.\n", + "Got SlidingWindow_w:4,recode:RTL+multiplicative.\n", + "Got SlidingWindow_w:5,recode:RTL+multiplicative.\n", + "Got SlidingWindow_w:3,recode:RTL+euclidean.\n", + "Got SlidingWindow_w:6,recode:RTL.\n", + "Got SlidingWindow_w:5,recode:RTL+bt.\n", + "Got SlidingWindow_w:6,recode:RTL+gsr.\n", + "Got SlidingWindow_w:2,recode:RTL+euclidean.\n", + "Got SlidingWindow_w:5,recode:RTL+euclidean.\n", + "Got SlidingWindow_w:4,recode:RTL+euclidean.\n", + "Got SlidingWindow_w:3,recode:RTL+additive.\n", + "Got SlidingWindow_w:5,recode:RTL+additive.\n", + "Got SlidingWindow_w:6,recode:RTL+bt.\n", + "Got SlidingWindow_w:4,recode:RTL+additive.\n", + "Got FixedWindowLTR_m:2+gsr.\n", + "Got SlidingWindow_w:6,recode:RTL+multiplicative.\n", + "Got FixedWindowLTR_m:4.\n", + "Got SlidingWindow_w:2,recode:RTL+additive.\n", + "Got FixedWindowLTR_m:2.\n", + "Got FixedWindowLTR_m:2+bt.\n", + "Got SlidingWindow_w:6,recode:RTL+euclidean.\n", + "Got FixedWindowLTR_m:8.\n", + "Got FixedWindowLTR_m:2+multiplicative.\n", + "Got SlidingWindow_w:6,recode:RTL+additive.\n", + "Got FixedWindowLTR_m:4+bt.\n", + "Got FixedWindowLTR_m:8+bt.\n", + "Got FixedWindowLTR_m:4+gsr.\n", + "Got FixedWindowLTR_m:4+multiplicative.\n", + "Got FixedWindowLTR_m:16.\n", + "Got FixedWindowLTR_m:16+gsr.\n", + "Got FixedWindowLTR_m:8+gsr.\n", + "Got FixedWindowLTR_m:2+euclidean.\n", + "Got FixedWindowLTR_m:8+multiplicative.\n", + "Got FixedWindowLTR_m:16+multiplicative.\n", + "Got FixedWindowLTR_m:4+euclidean.\n", + "Got FixedWindowLTR_m:16+bt.\n", + "Got FixedWindowLTR_m:32+bt.\n", + "Got FixedWindowLTR_m:64.\n", + "Got FixedWindowLTR_m:32.\n", + "Got FixedWindowLTR_m:8+euclidean.\n", + "Got FixedWindowLTR_m:32+gsr.\n", + "Got FixedWindowLTR_m:2+additive.\n", + "Got FixedWindowLTR_m:32+multiplicative.\n", + "Got FixedWindowLTR_m:64+gsr.\n", + "Got FixedWindowLTR_m:8+additive.\n", + "Got FixedWindowLTR_m:4+additive.\n", + "Got FixedWindowLTR_m:16+additive.\n", + "Got FixedWindowLTR_m:64+bt.\n", + "Got FixedWindowLTR_m:16+euclidean.\n", + "Got FixedWindowLTR_m:32+euclidean.\n", + "Got FixedWindowLTR_m:64+multiplicative.\n", + "Got WindowBooth_w:3.\n", + "Got WindowBooth_w:2+gsr.\n", + "Got WindowBooth_w:2+bt.\n", + "Got WindowBooth_w:2.\n", + "Got FixedWindowLTR_m:32+additive.\n", + "Got WindowBooth_w:4.\n", + "Got WindowBooth_w:3+bt.\n", + "Got FixedWindowLTR_m:64+euclidean.\n", + "Got WindowBooth_w:3+gsr.\n", + "Got FixedWindowLTR_m:64+additive.\n", + "Got WindowBooth_w:4+gsr.\n", + "Got WindowBooth_w:5.\n", + "Got WindowBooth_w:5+gsr.\n", + "Got WindowBooth_w:2+multiplicative.\n", + "Got WindowBooth_w:6.\n", + "Got WindowBooth_w:3+multiplicative.\n", + "Got WindowBooth_w:5+bt.\n", + "Got WindowBooth_w:4+bt.\n", + "Got WindowBooth_w:6+gsr.\n", + "Got WindowBooth_w:6+bt.\n", + "Got WindowBooth_w:2+additive.\n", + "Got WindowNAF_w:2.\n", + "Got WindowBooth_w:4+multiplicative.\n", + "Got WindowBooth_w:5+multiplicative.\n", + "Got WindowBooth_w:3+euclidean.\n", + "Got WindowBooth_w:3+additive.\n", + "Got WindowBooth_w:4+additive.\n", + "Got WindowNAF_w:4.\n", + "Got WindowBooth_w:2+euclidean.\n", + "Got WindowNAF_w:2+gsr.\n", + "Got WindowNAF_w:3.\n", + "Got WindowNAF_w:2+multiplicative.\n", + "Got WindowBooth_w:5+additive.\n", + "Got WindowNAF_w:2+bt.\n", + "Got WindowNAF_w:3+bt.\n", + "Got WindowBooth_w:6+additive.\n", + "Got WindowNAF_w:3+gsr.\n", + "Got WindowNAF_w:3+multiplicative.\n", + "Got WindowBooth_w:6+multiplicative.\n", + "Got WindowNAF_w:4+gsr.\n", + "Got WindowNAF_w:4+bt.\n", + "Got WindowNAF_w:2+euclidean.\n", + "Got WindowBooth_w:4+euclidean.\n", + "Got WindowNAF_w:5.\n", + "Got WindowNAF_w:4+multiplicative.\n", + "Got WindowNAF_w:5+bt.\n", + "Got WindowNAF_w:6.\n", + "Got WindowNAF_w:6+bt.\n", + "Got WindowNAF_w:3+euclidean.\n", + "Got WindowNAF_w:5+gsr.\n", + "Got WindowBooth_w:5+euclidean.\n", + "Got WindowNAF_w:5+multiplicative.\n", + "Got WindowBooth_w:6+euclidean.\n", + "Got WindowNAF_w:6+gsr.\n", + "Got WindowNAF_w:3+additive.\n", + "Got WindowNAF_w:5+euclidean.\n", + "Got WindowNAF_w:2+additive.\n", + "Got BinaryNAF_always:False,dir:LTR+bt.\n", + "Got BinaryNAF_always:False,dir:LTR.\n", + "Got WindowNAF_w:4+euclidean.\n", + "Got BinaryNAF_always:False,dir:LTR+gsr.\n", + "Got WindowNAF_w:6+multiplicative.\n", + "Got WindowNAF_w:4+additive.\n", + "Got BinaryNAF_always:False,dir:RTL.\n", + "Got BinaryNAF_always:False,dir:LTR+multiplicative.\n", + "Got WindowNAF_w:6+euclidean.\n", + "Got WindowNAF_w:5+additive.\n", + "Got WindowNAF_w:6+additive.\n", + "Got BinaryNAF_always:False,dir:RTL+gsr.\n", + "Got BinaryNAF_always:False,dir:RTL+multiplicative.\n", + "Got BinaryNAF_always:True,dir:LTR.\n", + "Got BinaryNAF_always:False,dir:RTL+bt.\n", + "Got BinaryNAF_always:False,dir:LTR+euclidean.\n", + "Got BinaryNAF_always:True,dir:LTR+gsr.\n", + "Got BinaryNAF_always:False,dir:LTR+additive.\n", + "Got BinaryNAF_always:True,dir:LTR+multiplicative.\n", + "Got BinaryNAF_always:True,dir:RTL.\n", + "Got BinaryNAF_always:False,dir:RTL+euclidean.\n", + "Got LTR_always:False,complete:True+bt.\n", + "Got BinaryNAF_always:True,dir:LTR+bt.\n", + "Got LTR_always:False,complete:True+gsr.\n", + "Got LTR_always:False,complete:True.\n", + "Got BinaryNAF_always:True,dir:RTL+multiplicative.\n", + "Got BinaryNAF_always:True,dir:RTL+gsr.\n", + "Got BinaryNAF_always:True,dir:LTR+euclidean.\n", + "Got BinaryNAF_always:True,dir:RTL+bt.\n", + "Got BinaryNAF_always:False,dir:RTL+additive.\n", + "Got LTR_always:False,complete:False.\n", + "Got LTR_always:True,complete:True.\n", + "Got LTR_always:False,complete:False+gsr.\n", + "Got LTR_always:False,complete:True+multiplicative.\n", + "Got LTR_always:True,complete:True+gsr.\n", + "Got BinaryNAF_always:True,dir:LTR+additive.\n", + "Got LTR_always:False,complete:False+multiplicative.\n", + "Got LTR_always:False,complete:False+bt.\n", + "Got LTR_always:True,complete:True+bt.\n", + "Got LTR_always:False,complete:True+additive.\n", + "Got BinaryNAF_always:True,dir:RTL+euclidean.\n", + "Got BinaryNAF_always:True,dir:RTL+additive.\n", + "Got RTL_always:False,complete:True.\n", + "Got LTR_always:False,complete:False+euclidean.\n", + "Got LTR_always:True,complete:False.\n", + "Got LTR_always:True,complete:False+gsr.\n", + "Got LTR_always:False,complete:True+euclidean.\n", + "Got RTL_always:False,complete:True+bt.\n", + "Got RTL_always:False,complete:True+gsr.\n", + "Got LTR_always:True,complete:False+bt.\n", + "Got LTR_always:False,complete:False+additive.\n", + "Got LTR_always:True,complete:False+multiplicative.\n", + "Got RTL_always:False,complete:False.\n", + "Got LTR_always:True,complete:True+additive.\n", + "Got LTR_always:True,complete:True+multiplicative.\n", + "Got RTL_always:False,complete:False+gsr.\n", + "Got RTL_always:False,complete:True+multiplicative.\n", + "Got RTL_always:True,complete:True+gsr.\n", + "Got LTR_always:True,complete:False+euclidean.\n", + "Got RTL_always:True,complete:True.\n", + "Got RTL_always:True,complete:True+bt.\n", + "Got RTL_always:False,complete:False+bt.\n", + "Got RTL_always:False,complete:False+multiplicative.\n", + "Got RTL_always:True,complete:False.\n", + "Got RTL_always:False,complete:True+additive.\n", + "Got Coron.\n", + "Got RTL_always:True,complete:False+gsr.\n", + "Got RTL_always:False,complete:False+euclidean.\n", + "Got FullPrecomp_always:False,complete:True.\n", + "Got RTL_always:True,complete:False+multiplicative.\n", + "Got LTR_always:True,complete:False+additive.\n", + "Got RTL_always:True,complete:False+bt.\n", + "Got RTL_always:False,complete:False+additive.\n", + "Got RTL_always:False,complete:True+euclidean.\n", + "Got Coron+bt.\n", + "Got Coron+gsr.\n", + "Got FullPrecomp_always:False,complete:True+bt.\n", + "Got FullPrecomp_always:False,complete:True+gsr.\n", + "Got Coron+multiplicative.\n", + "Got RTL_always:True,complete:False+euclidean.\n", + "Got FullPrecomp_always:False,complete:True+additive.\n", + "Got FullPrecomp_always:True,complete:True.\n", + "Got FullPrecomp_always:True,complete:True+gsr.\n", + "Got RTL_always:True,complete:True+multiplicative.\n", + "Got RTL_always:True,complete:True+additive.\n", + "Got FullPrecomp_always:False,complete:False.\n", + "Got FullPrecomp_always:False,complete:False+gsr.\n", + "Got FullPrecomp_always:False,complete:True+multiplicative.\n", + "Got Coron+euclidean.\n", + "Got LTR_always:True,complete:True+euclidean.\n", + "Got FullPrecomp_always:False,complete:True+euclidean.\n", + "Got FullPrecomp_always:False,complete:False+additive.\n", + "Got FullPrecomp_always:True,complete:True+bt.\n", + "Got FullPrecomp_always:False,complete:False+bt.\n", + "Got RTL_always:True,complete:False+additive.\n", + "Got FullPrecomp_always:True,complete:False.\n", + "Got RTL_always:True,complete:True+euclidean.\n", + "Got Coron+additive.\n", + "Got FullPrecomp_always:True,complete:True+additive.\n", + "Got FullPrecomp_always:True,complete:False+bt.\n", + "Got FullPrecomp_always:False,complete:False+multiplicative.\n", + "Got FullPrecomp_always:True,complete:False+gsr.\n", + "Got SimpleLadder_complete:True.\n", + "Got FullPrecomp_always:False,complete:False+euclidean.\n", + "Got SimpleLadder_complete:True+gsr.\n", + "Got FullPrecomp_always:True,complete:False+multiplicative.\n", + "Got SimpleLadder_complete:False.\n", + "Got Comb_w:2,always:True.\n", + "Got SimpleLadder_complete:True+bt.\n", + "Got FullPrecomp_always:True,complete:False+additive.\n", + "Got SimpleLadder_complete:False+gsr.\n", + "Got SimpleLadder_complete:False+bt.\n", + "Got FullPrecomp_always:True,complete:True+multiplicative.\n", + "Got SimpleLadder_complete:False+multiplicative.\n", + "Got Comb_w:3,always:True.\n", + "Got FullPrecomp_always:True,complete:False+euclidean.\n", + "Got Comb_w:2,always:True+gsr.\n", + "Got Comb_w:3,always:True+bt.\n", + "Got Comb_w:2,always:True+bt.\n", + "Got Comb_w:3,always:True+gsr.\n", + "Got FullPrecomp_always:True,complete:True+euclidean.\n", + "Got Comb_w:4,always:True+gsr.\n", + "Got Comb_w:2,always:True+additive.\n", + "Got Comb_w:4,always:True.\n", + "Got SimpleLadder_complete:True+multiplicative.\n", + "Got SimpleLadder_complete:False+euclidean.\n", + "Got Comb_w:3,always:True+additive.\n", + "Got SimpleLadder_complete:True+additive.\n", + "Got Comb_w:4,always:True+bt.\n", + "Got Comb_w:2,always:True+multiplicative.\n", + "Got Comb_w:5,always:True.\n", + "Got Comb_w:5,always:True+gsr.\n", + "Got SimpleLadder_complete:False+additive.\n", + "Got Comb_w:5,always:True+additive.\n", + "Got Comb_w:4,always:True+additive.\n", + "Got Comb_w:5,always:True+bt.\n", + "Got Comb_w:6,always:True.\n", + "Got Comb_w:6,always:True+bt.\n", + "Got Comb_w:3,always:True+multiplicative.\n", + "Got Comb_w:6,always:True+gsr.\n", + "Got Comb_w:4,always:True+multiplicative.\n", + "Got Comb_w:2,always:False.\n", + "Got Comb_w:6,always:True+additive.\n", + "Got Comb_w:3,always:True+euclidean.\n", + "Got SimpleLadder_complete:True+euclidean.\n", + "Got Comb_w:3,always:False.\n", + "Got Comb_w:2,always:False+bt.\n", + "Got Comb_w:2,always:False+gsr.\n", + "Got Comb_w:3,always:False+gsr.\n", + "Got Comb_w:2,always:True+euclidean.\n", + "Got Comb_w:3,always:False+bt.\n", + "Got Comb_w:5,always:True+multiplicative.\n", + "Got Comb_w:4,always:False.\n", + "Got Comb_w:3,always:False+additive.\n", + "Got Comb_w:4,always:True+euclidean.\n", + "Got Comb_w:4,always:False+gsr.\n", + "Got Comb_w:5,always:True+euclidean.\n", + "Got Comb_w:2,always:False+additive.\n", + "Got Comb_w:4,always:False+bt.\n", + "Got Comb_w:4,always:False+additive.\n", + "Got Comb_w:6,always:True+multiplicative.\n", + "Got Comb_w:6,always:True+euclidean.\n", + "Got Comb_w:5,always:False+gsr.\n", + "Got Comb_w:5,always:False.\n", + "Got Comb_w:3,always:False+multiplicative.\n", + "Got Comb_w:2,always:False+multiplicative.\n", + "Got Comb_w:5,always:False+additive.\n", + "Got Comb_w:4,always:False+multiplicative.\n", + "Got Comb_w:5,always:False+bt.\n", + "Got BGMW_w:2,dir:LTR.\n", + "Got Comb_w:2,always:False+euclidean.\n", + "Got Comb_w:3,always:False+euclidean.\n", + "Got Comb_w:6,always:False+bt.\n", + "Got Comb_w:6,always:False.\n", + "Got Comb_w:6,always:False+additive.\n", + "Got BGMW_w:3,dir:LTR+gsr.\n", + "Got BGMW_w:2,dir:LTR+bt.\n", + "Got Comb_w:6,always:False+gsr.\n", + "Got BGMW_w:3,dir:LTR.\n", + "Got Comb_w:4,always:False+euclidean.\n", + "Got BGMW_w:2,dir:LTR+gsr.\n", + "Got BGMW_w:2,dir:LTR+additive.\n", + "Got BGMW_w:3,dir:LTR+bt.\n", + "Got Comb_w:5,always:False+multiplicative.\n", + "Got BGMW_w:3,dir:LTR+additive.\n", + "Got BGMW_w:4,dir:LTR.\n", + "Got BGMW_w:4,dir:LTR+gsr.\n", + "Got BGMW_w:4,dir:LTR+bt.\n", + "Got BGMW_w:5,dir:LTR+gsr.\n", + "Got BGMW_w:4,dir:LTR+additive.\n", + "Got BGMW_w:2,dir:LTR+multiplicative.\n", + "Got BGMW_w:5,dir:LTR.\n", + "Got BGMW_w:5,dir:LTR+bt.\n", + "Got BGMW_w:3,dir:LTR+multiplicative.\n", + "Got BGMW_w:3,dir:LTR+euclidean.\n", + "Got Comb_w:5,always:False+euclidean.\n", + "Got BGMW_w:2,dir:LTR+euclidean.\n", + "Got BGMW_w:6,dir:LTR.\n", + "Got BGMW_w:5,dir:LTR+additive.\n", + "Got BGMW_w:2,dir:RTL.\n", + "Got BGMW_w:4,dir:LTR+multiplicative.\n", + "Got BGMW_w:6,dir:LTR+gsr.\n", + "Got BGMW_w:2,dir:RTL+gsr.\n", + "Got BGMW_w:6,dir:LTR+bt.\n", + "Got BGMW_w:6,dir:LTR+additive.\n", + "Got Comb_w:6,always:False+multiplicative.\n", + "Got Comb_w:6,always:False+euclidean.\n", + "Got BGMW_w:2,dir:RTL+bt.\n", + "Got BGMW_w:2,dir:RTL+additive.\n", + "Got BGMW_w:3,dir:RTL.\n", + "Got BGMW_w:5,dir:LTR+multiplicative.\n", + "Got BGMW_w:3,dir:RTL+bt.\n", + "Got BGMW_w:4,dir:LTR+euclidean.\n", + "Got BGMW_w:3,dir:RTL+gsr.\n", + "Got BGMW_w:4,dir:RTL.\n", + "Got BGMW_w:6,dir:LTR+multiplicative.\n", + "Got BGMW_w:2,dir:RTL+multiplicative.\n", + "Got BGMW_w:4,dir:RTL+gsr.\n", + "Got BGMW_w:5,dir:LTR+euclidean.\n", + "Got BGMW_w:4,dir:RTL+bt.\n", + "Got BGMW_w:5,dir:RTL.\n", + "Got BGMW_w:2,dir:RTL+euclidean.\n", + "Got BGMW_w:5,dir:RTL+gsr.\n", + "Got BGMW_w:5,dir:RTL+bt.\n", + "Got BGMW_w:4,dir:RTL+additive.\n", + "Got BGMW_w:6,dir:LTR+euclidean.\n", + "Got BGMW_w:3,dir:RTL+additive.\n", + "Got BGMW_w:6,dir:RTL.\n", + "Got BGMW_w:3,dir:RTL+euclidean.\n", + "Got BGMW_w:5,dir:RTL+additive.\n", + "Got BGMW_w:4,dir:RTL+euclidean.\n", + "Got BGMW_w:3,dir:RTL+multiplicative.\n", + "Got BGMW_w:6,dir:RTL+gsr.\n", + "Got BGMW_w:4,dir:RTL+multiplicative.\n", + "Got BGMW_w:6,dir:RTL+bt.\n", + "Got BGMW_w:6,dir:RTL+additive.\n", + "Got BGMW_w:5,dir:RTL+euclidean.\n", + "Got BGMW_w:5,dir:RTL+multiplicative.\n", + "Got BGMW_w:6,dir:RTL+multiplicative.\n", + "Got BGMW_w:6,dir:RTL+euclidean.\n" + ] + } + ], "source": [ "chunk_id = randbytes(4).hex()\n", - "with TaskExecutor(max_workers=num_workers, initializer=silence) as pool:\n", - " for mult in all_mults_with_ctr:\n", + "with TaskExecutor(max_workers=num_workers, initializer=silence) as pool, tempfile.TemporaryDirectory() as tmp_dirname:\n", + " tmp_path = Path(tmp_dirname)\n", + " for i, mult in enumerate(all_mults_with_ctr):\n", " pool.submit_task(mult,\n", - " simulate_multiples,\n", - " mult, params, bits, samples, seed=chunk_id, use_init=use_init, use_multiply=use_multiply)\n", + " simulate_multiples_direct,\n", + " mult, params, bits, tmp_path / f\"{i}.pickle\", samples, seed=chunk_id, use_init=use_init, use_multiply=use_multiply)\n", " with open(f\"multiples_{bits}_{'init' if use_init else 'noinit'}_{'mult' if use_multiply else 'nomult'}_chunk{chunk_id}.pickle\",\"wb\") as h:\n", " for mult, future in tqdm(pool.as_completed(), desc=\"Computing multiple graphs.\", total=len(pool.tasks)):\n", " print(f\"Got {mult}.\")\n", " if error := future.exception():\n", " print(\"Error!\", error)\n", " continue\n", - " res = future.result()\n", - " pickle.dump((mult, res), h)\n", - " gc.collect()" + " fpath = future.result()\n", + " with fpath.open(\"rb\") as f:\n", + " h.write(f.read())\n", + " fpath.unlink()" ] }, { @@ -257,7 +715,57 @@ "execution_count": null, "id": "fbab8333-b8f1-4890-b38a-7bb34f5ffb02", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "e682673036ab4053a6a2a5fc60194691", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Processing chunks: 0%| | 0/1 [00:00<?, ?it/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing chunk 66897617, no probmaps found.\n" + ] + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "5d0ac8b447b942f1bb6e31ee9efc9694", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading chunk 66897617.: 0%| | 0/390 [00:00<?, ?it/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "1dfe709e6f37433aaa4dd6d0c4823373", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Processing 66897617.: 0%| | 0/12480 [00:00<?, ?it/s]" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "with TaskExecutor(max_workers=num_workers, initializer=silence) as pool:\n", " for in_fname in tqdm(glob.glob(f\"multiples_{bits}_{'init' if use_init else 'noinit'}_{'mult' if use_multiply else 'nomult'}_chunk*.pickle\"), desc=\"Processing chunks\", smoothing=0):\n", @@ -292,6 +800,7 @@ " f.truncate(last_end)\n", " if not cfgs_todo:\n", " print(f\"Chunk complete. Continuing...\")\n", + " continue\n", " else:\n", " print(f\"Chunk missing {len(cfgs_todo)} probmaps, computing...\")\n", " else:\n", @@ -414,7 +923,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.13.5" + "version": "3.12.3" } }, "nbformat": 4, |
