All documents · Stage designs and builds
GRChombo на Hetzner AX102-1: сборка и первый запуск
This document is in Russian (original language). Your browser can translate it; the key results are summarised in English on the Results page.
Скрипт: scripts/grchombo/build_grchombo_ax102.sh. Целевая машина: AX102-1
(AMD Ryzen 9 7950X3D, 16 ядер / 32 потока, 128 ГБ DDR5 ECC, 2 × 1.92 ТБ NVMe),
Ubuntu 24.04 LTS из installimage. Рецепт взят из CI GRChombo
(.github/workflows/gcc-tests.yml) и шаблона
InstallNotes/MakeDefsLocalExamples/ubuntu-gcc.Make.defs.local; проверен
29.09.2026 на Ubuntu 24.04.4 (2 vCPU VPS) с GRChombo 37e6595, Chombo (форк
GRChombo) 8684f2e, GRTresna 2e671e1, GCC 13.3, OpenMPI 4.1.6, HDF5 1.10.10,
PETSc 3.19.6.
Что собирается
| Компонент | Откуда | Зачем |
|---|---|---|
| Chombo 3.2 (форк GRChombo) | github.com/GRChombo/Chombo | AMR-библиотека; собираются только BaseTools, BoxTools, AMRTools, AMRElliptic, AMRTimeDependent |
GRChombo, пример ScalarFieldCosmo |
github.com/GRChombo/GRChombo | эволюция BSSN/CCZ4 + массивное скалярное поле в периодическом ящике (старт этапа 1 плана 6.12) |
GRTresna, пример ScalarFieldCosmo |
github.com/GRTLCollaboration/GRTresna | решатель связей (CTTK) для нетривиальных начальных данных; выход подаётся в GRChombo через restart_file |
| Apparent-horizon finder | PETSc из apt (petsc-dev) |
-DUSE_AHFINDER; без него не будет t_hor и M_AH |
| venv | numpy scipy matplotlib h5py yt | чтение plot-файлов Chombo HDF5 (yt понимает формат) |
Флаги: OPT=HIGH DEBUG=FALSE MPI=TRUE OPENMPCC=TRUE, -O3 -march=native
(на Zen 4 с GCC 13 это znver4, включая AVX-512 ветку simd-слоя GRChombo).
-std=c++14 -fopenmp Chombo добавляет сам.
Порядок действий на новой машине
- В Hetzner Robot заказать AX102-1, через
installimageпоставить Ubuntu 24.04 (RAID 1 по умолчанию, ~1.9 ТБ под/). Зайти по ssh. - Скопировать скрипт и запустить целиком (под root или пользователем с sudo):
scp scripts/grchombo/build_grchombo_ax102.sh root@<host>:/root/
tmux new -s build 'bash /root/build_grchombo_ax102.sh all 2>&1 | tee /root/build.log'
Стадии all: pkgs clone config chombo grchombo grtresna env tests smoke python.
Любую можно перезапустить отдельно: bash build_grchombo_ax102.sh chombo grchombo.
Время all на CCX33 (8 vCPU): около 5 минут, см. «Измерения» ниже;
на AX102-1 (16 ядер) не дольше.
3. После сборки:
. /root/grchombo/env.sh && bash /root/build_grchombo_ax102.sh bench
bench гоняет ScalarFieldCosmo N=96³ на 10 шагов в раскладках
16×1, 8×2, 4×4, 32×1 (ранги × OpenMP-потоки; на CCX33 задать
BENCH_CONFIGS="8x1 4x2 4x1") и пишет bench/summary.txt.
Выбрать самую быструю и использовать её в grcrun -n R -t T.
Раскладка и запуск
/root/grchombo/
Chombo/lib/mk/Make.defs.local конфигурация сборки (генерируется стадией config)
GRChombo/Examples/ScalarFieldCosmo/Main_ScalarFieldCosmo3d_ch.Linux.64.mpicxx.gfortran.OPTHIGH.MPI.OPENMPCC.ex
GRTresna/Examples/ScalarFieldCosmo/Main_ScalarFieldCosmo3d_ch.*.ex
env.sh CHOMBO_HOME, PATH, OMP_*, ulimit, venv
bin/grcrun обёртка mpirun с привязкой к ядрам
logs/ логи всех стадий и тестов
smoke/ три проверочных прогона (аналитические НУ; GRTresna; рестарт из GRTresna)
bench/ результаты бенчмарка
VERSIONS.txt коммиты трёх репозиториев на момент сборки
Рестарт из данных GRTresna: restart_file с абсолютным путём (относительный
GRChombo дописывает к hdf5_subpath), а каталоги hdf5_*, pout_*, data_*
надо создать заранее — на пути рестарта код их не создаёт и падает в
H5Fcreate (в smoke 3/3 это учтено).
Запуск: grcrun [-n RANKS] [-t THREADS] [-o log] EXE params.txt. По умолчанию
16 рангов × 1 поток. Если RANKS*THREADS больше 16, включаются SMT-потоки
(-n 32). Под root обёртка сама добавляет --allow-run-as-root.
Переопределения через окружение: GRC_ROOT, NJ, GRCHOMBO_REF/CHOMBO_REF/
GRTRESNA_REF (ветка, тег или коммит), WITH_AH=0 (без PETSc), MARCH, OPT,
DEBUG=TRUE (отладочная сборка, другое имя .ex), EXAMPLES, TESTS,
SMOKE_N, SMOKE_RANKS, BENCH_*, PY_PKGS.
Что дальше (этап 1 плана 6.12)
Пример ScalarFieldCosmo уже содержит всё нужное для теста e = 0: периодический
ящик, начальное K из гамильтоновой связи (InitialK.hpp), диагностики
rho_scaled, K_scaled, среднее по ящику, lineout; AH finder подключён
(AH_activate = 1 в params). Для нашей задачи заменяется InitialScalarData.hpp
(профиль ζ = μ exp(−k²r²/6) в chi = e^{−2ζ}, скалярное поле в осцилляциях с
m ≫ H, т.е. пылевой режим де Йонга) и связи решаются GRTresna
(Examples/ScalarFieldCosmo там же). Единицы: L ящика ≥ 4 r_m, H_i из
scalar_mass и амплитуды, как в de Jong et al. 2022.
Измерения (29.09.2026)
Скрипт прогнан целиком на двух машинах; исправленные по ходу ошибки:
имена артефактов с _ch при NAMESPACE=TRUE, потеря -DUSE_CTTK GRTresna
из-за cxxcppflags = (теперь +=), отсутствие каталога hdf5_* при
рестарте, NaN при dx=4 в smoke-рестарте (теперь dx=2).
| Стадия | CCX33, 8 vCPU EPYC Milan, -j8 |
VPS, 2 vCPU, -j2 |
|---|---|---|
| pkgs (apt) | 30 с | уже стояло |
| clone (3 репозитория) | 5 с | 20 с |
| chombo (5 библиотек) | 35 с | 7 мин |
grchombo ScalarFieldCosmo |
15 с | 1.5 мин |
grtresna ScalarFieldCosmo |
≈1 мин | 50 с |
| tests (сборка + запуск) | 1 мин 43 с (17 тестов) | ≈1.5 мин (3 теста) |
| smoke 1/2/3 | 1 с / 8 с / 2 с (N=32) | 2 с / 10 с / 2 с (N=16) |
| python (venv, yt 4.4.2) | 20 с | 20 с |
Бенчмарк bench на CCX33 (ScalarFieldCosmo, N=96³, один уровень, 10 шагов,
4 физических ядра × 2 SMT): 8×1 — 16.4 с, 4×2 — 16.1 с, 4×1 — 18.3 с,
2×2 — 19.4 с, 2×4 — 20.3 с. SMT даёт ~12 %, гибрид 4×2 не хуже 8×1;
на AX102-1 (16 ядер) ожидать ~0.4 с/шаг при 96³ на одном уровне.
Результат на compute server: /root/grchombo, версии Chombo 8684f2e,
GRChombo 37e6595, GRTresna 2e671e1; 17/17 тестов, 3/3 smoke.
Запуск: . /root/grchombo/env.sh && grcrun -n 8 -t 1 EXE params.txt.