This commit is contained in:
Efim Beshmenev
2026-07-10 22:26:37 +03:00
parent 7f9dc067a1
commit 8614dfe22a
3757 changed files with 95267 additions and 663 deletions
+53 -10
View File
@@ -9,17 +9,58 @@ The conclusion is: Sort of. I believe there isn't a shape that is _completely_ i
Build `Szilassi.slnx` as `Release|x64`, then open
`build\msbuild\bin\x64\Release\PolyhedronGui.exe`.
For an independent overnight run, leave `Threads` at `0`, set the desired number of
minutes, and click **Глобальный поиск 59**. This mode does not use the supplied near-miss:
The GUI intentionally has only **Запустить поиск** and **Остановить поиск** buttons.
Select an inclusive topology range, then start the search. Existing checkpoints are
loaded automatically. Stop waits for the current short CUDA kernel, synchronizes the
device, writes a durable checkpoint, and only then exits.
The GUI creates a fresh seed automatically for every new process. It is shown in the
GUI log and saved in the durable, Git-tracked `runs/<UUID>/run.tsv` manifest together
with the topology range and search parameters, so a run can be reproduced without
typing a seed into the interface.
The search process and CUDA stream run at low scheduling priority, so foreground work
keeps priority. There is no artificial duty-cycle throttle. Kernels remain short for
responsive stopping and Windows WDDM stability.
Leave `GPU chains` at `0` for automatic sizing. The CUDA backend derives the chain count
from the selected GPU's SM count and measured kernel occupancy, so Ada `sm_89` and
Blackwell `sm_120` use different appropriate values. Each selected topology keeps its
annealing session resident on the device, so refresh cycles cannot discard cooling,
stagnation, or restart state. The full 59-topology range uses about 1.4 GB of VRAM on
the 12 GB RTX 4070 Ti; narrower ranges allocate proportionally less.
For an independent overnight run, set the desired number of minutes and topology range.
This mode does not use the supplied near-miss:
it gives every topology fresh random starts, then alternates depth passes over the best
30/16/8 topologies with periodic breadth refreshes over all 59. A clean stop saves each
topology under `runtime\global_search\topology_N`; pressing the same button later resumes only
those checkpoints. `runtime\global_search\leaderboard.tsv` is the current ranking.
topology under `results\search\topology_N`; pressing the same button later resumes only
those checkpoints. `results\search\leaderboard.tsv` is the current ranking.
Coordinates and optimizer states use 64-bit `double`. Candidates with at most 12 total
defects are automatically reclassified with the custom `WideReal` double-double type
(about 31 decimal digits), and every claimed `0/0` is serialized and checked again at
multiple tolerances down to `1e-13`. OBJ and plane checkpoints retain 17 digits.
The CUDA hot path uses standard FP32 math. Persistent chains retain their RNG, cooling,
stagnation, and restart state between batches; fixed fresh cohorts preserve global
exploration during breadth/refresh passes. Every returned shortlist is reconstructed and checked on
the CPU in `double`; candidates with at most 12 total defects are reclassified with the
custom `WideReal` double-double type (about 31 decimal digits). Every claimed `0/0` is
serialized and checked again at multiple tolerances down to `1e-13`.
CUDA Toolkit 13.3 with Visual Studio integration is required for the GPU backend. The
build contains native targets for Ada `sm_89` and Blackwell `sm_120`. Without the Toolkit,
the project builds a diagnostic stub and refuses `--cuda` instead of silently falling
back to the CPU.
### Checkpoints and Git
Search state is stored in `results/search`, which is intentionally tracked by Git.
Each checkpoint is an immutable, self-contained `.szcp` file with CRC-32 and exact FP32
bit patterns. It is flushed to disk and atomically published; a damaged newest generation
is ignored in favor of the previous valid one.
For several computers, assign non-overlapping topology ranges. Each process uses a unique
run UUID, so checkpoint filenames do not collide. Commit `results/search` normally on each
computer and merge the branches with Git. `leaderboard.tsv`, run logs, and temporary files
are derived and ignored, so they cannot create merge conflicts; the next search start
rescans checkpoints, repeats CPU/DD validation, and rebuilds the leaderboard.
## Project layout
@@ -29,7 +70,8 @@ multiple tolerances down to `1e-13`. OBJ and plane checkpoints retain 17 digits.
* `src/NeighborlyCore` — shared geometry and utility code.
* `data` — topology definitions and input models.
* `results/topologies` and `results/showcases` — saved research models.
* `runtime` — generated candidates, reports, logs, and resumable search state.
* `results/search` — Git-mergeable search states and durable checkpoint generations.
* `runtime` — temporary stop files, reports, logs, and local candidates.
* `scripts` — helper launch and reporting scripts.
All Visual Studio projects are collected by the root `Szilassi.slnx`. MSBuild output is
@@ -39,7 +81,8 @@ centralized under `build/msbuild`; CMake output remains under `build/vs2026`.
To start a search, build and run the `Szilassi` project.
### Requirements
* C++17 compatible compiler (I'm using MSVC 2019).
* C++17 compatible compiler (Visual Studio 2026 is configured by the current presets).
* [CUDA Toolkit 13.3](https://developer.nvidia.com/cuda-downloads) with Visual Studio integration for GPU search.
* [Eigen-3.4.0](https://eigen.tuxfamily.org/) though similar versions should work as well.
* [Cairo-1.17.2](https://www.cairographics.org/) (optional) this is only needed to render paper cutouts.