**Motivations:** - Sync certs_shifted artefacts, script and README. **Root causes:** N/A **Correctifs:** N/A **Evolutions:** - collatz_build_hensel_chain_leaves_shifted.py - README.md - docs/artefacts/collatz/refinement_K/.../certs_shifted/*.json **Pages affectées:** - applications/collatz/collatz_k_scripts/README.md - applications/collatz/collatz_k_scripts/collatz_build_hensel_chain_leaves_shifted.py - docs/artefacts/collatz/refinement_K/palier2p15/hensel_chain_leaves/certs_shifted/
2.6 KiB
Auteur : Équipe 4NK
Optimisation mémoire — génération clauses terminales
Contexte
La génération des clauses terminales pour les paliers élevés (m ≥ 22) provoquait des plantages par manque de mémoire (2^m résidus impairs, chaque clause ~100 octets).
Optimisations appliquées
collatz_generate_terminal_clauses_over_Sm.py
-
Itérateur au lieu de liste :
range(1, mod, 2)instead oflist(range(...))— évite d'allouer ~64 Mo pour m=24. -
Mode streaming (automatique si
total_roots > 500_000) :- Écriture des clauses dans un fichier JSONL temporaire au fur et à mesure
- Assemblage du JSON final sans garder toutes les clauses en mémoire
- Pas de liste
clausesen mémoire pendant la génération
-
Écriture JSON :
json.dump(obj, f)au lieu dejson.dumps()puiswrite()— évite la duplication du string de sortie. -
Option
--streaming: force le mode streaming même pour les petits paliers.
collatz_generate_minorated_descent_clauses_over_Sm.py
json.dump()vers fichier au lieu dejson.dumps().
collatz_build_refinement_certificate_over_Sm_multilevel.py
- Chargement prioritaire de
.residues.json(streaming ijson) au lieu du JSON complet. ResidueBitsetpourleaves_by_metclosedquand m ≥ 20 (≈1 Mo par palier au lieu de centaines de Mo).json.load(f)au lieu dejson.loads(path.read_text())pour le fallback.
collatz_build_hensel_chain_leaves_shifted.py
- Chargement prioritaire de
.residues.jsonpour les clauses terminales (streaming ijson). _ResidueBitsetpourleaves_by_mquand palier ≥ 20.
Format compact .residues.json
Pour les paliers élevés (m ≥ 20), un fichier .residues.json compact est généré ou extrait. Le chargeur multilevel (collatz_build_refinement_certificate_over_Sm_multilevel.py) utilise ce fichier lorsqu'il existe, évitant de charger les JSON de clauses complets (ex. 1,3 Go pour m=24).
- Génération : en mode streaming, le script terminal écrit automatiquement
.residues.json. - Extraction :
collatz_extract_residues_from_clauses_json.pyextrait les résidus d'un JSON existant (par regex en flux pour les fichiers > 100 Mo).
Recommandations pour m=23, m=24
Le mode streaming s'active automatiquement pour m ≥ 20 (2^19 = 524_288 > 500_000). Pour m=23 et m=24, le script peut être exécuté avec :
python3 applications/collatz/collatz_k_scripts/collatz_generate_terminal_clauses_over_Sm.py \
--repo-root . --palier 23 --k-max 16 --t-max 16
Les temps d'exécution sont approximativement : m=22 ~3 min, m=23 ~6 min, m=24 ~12 min (selon la machine).