dev:regtesting
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revision | |||
| dev:regtesting [2023/10/19 14:03] – Update flags krack | dev:regtesting [2026/10/14 08:41] (current) – fstein | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== CP2K Regression Testing ====== | ====== CP2K Regression Testing ====== | ||
| - | CP2K comes with over 3000 test input files (located in [[src> | + | This page has been moved to [[https://manual.cp2k.org/trunk/development/ |
| - | + | ||
| - | ==== Dashboard ==== | + | |
| - | A number of regtests are run automatically by various members of our community. The results of these tests are collected centrally at the [[http://dashboard.cp2k.org | + | |
| - | + | ||
| - | ==== Code Coverage ==== | + | |
| - | We aim that the regression test suite covers all the functionality of CP2K. For this purpose we regularly create [[http://www.cp2k.org/static/ | + | |
| - | + | ||
| - | ===== How does it work? ===== | + | |
| - | + | ||
| - | The regression test suite is run using the [[src> | + | |
| - | It performs the following tasks: | + | |
| - | * performs a realclean build of the source | + | |
| - | * executes a list of tests | + | |
| - | * compares the results (outputs) with those of the last known result (reference) | + | |
| - | * produces a summary | + | |
| - | + | ||
| - | + | ||
| - | ===== Running the regtests ===== | + | |
| - | + | ||
| - | ==== Step 0: make based testing ==== | + | |
| - | + | ||
| - | * If you are able to build and run cp2k on the local machine the easiest way is to start the regtesting | + | |
| - | * Be careful about the value of '' | + | |
| - | * If this fails (e.g. on batch systems), continue with Step 1 else go to interpretation. | + | |
| - | + | ||
| - | ==== Step 1: Preparation ==== | + | |
| - | * Decide on a directory for doing the regtest, there will be plenty of files in this dir (after a while) so make it something like '' | + | |
| - | * Clone a version of cp2k into '' | + | |
| - | * Set up the arch files so that you can cleanly build cp2k (test this) | + | |
| - | + | ||
| - | ==== Step 2: Running ==== | + | |
| - | < | + | |
| - | $ tests/ | + | |
| - | usage: do_regtest.py [-h] [--mpiranks MPIRANKS] [--ompthreads OMPTHREADS] | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | | + | |
| - | + | ||
| - | Runs CP2K regression test suite. | + | |
| - | + | ||
| - | positional arguments: | + | |
| - | arch | + | |
| - | version | + | |
| - | + | ||
| - | options: | + | |
| - | -h, --help | + | |
| - | --mpiranks MPIRANKS | + | |
| - | --ompthreads OMPTHREADS | + | |
| - | --maxtasks MAXTASKS | + | |
| - | --num_gpus NUM_GPUS | + | |
| - | --timeout TIMEOUT | + | |
| - | --maxerrors MAXERRORS | + | |
| - | --mpiexec MPIEXEC | + | |
| - | --smoketest | + | |
| - | --valgrind | + | |
| - | --keepalive | + | |
| - | --flagslow | + | |
| - | --debug | + | |
| - | --restrictdir RESTRICTDIR | + | |
| - | --skipdir SKIPDIR | + | |
| - | --workbasedir WORKBASEDIR | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Step 3: Interpretation ==== | + | |
| - | A test results can be any of the following: | + | |
| - | ^ Test Result | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | + | ||
| - | The last two outcomes generally mean that a bug has been introduced, which requires investigation. | + | |
| - | Since regtesting only yields information relative to a previously known result, it is most useful to do a regtest before and after you make changes. To allow per-test numerical difference higher than that set as a default, add third column in appropriate TEST_FILES file with a relative value of the difference. | + | |
| - | + | ||
| - | + | ||
| - | ===== Adding and Resetting Tests===== | + | |
| - | The test-suite is fully controlled by the following files in the [[src> | + | |
| - | + | ||
| - | ^ File Name ^ Content | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | | '' | + | |
| - | + | ||
| - | ===== Run with sbatch ===== | + | |
| - | + | ||
| - | The '' | + | |
| - | + | ||
| - | What you need: | + | |
| - | + | ||
| - | * '' | + | |
| - | * a CP2K source tree with a built CP2K | + | |
| - | + | ||
| - | ==== Instructions ==== | + | |
| - | + | ||
| - | The way the regtest script works is that it goes through all the directories (for example '' | + | |
| - | + | ||
| - | Also, '' | + | |
| - | + | ||
| - | Append the following to your '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | CP2K_BASE_DIR="/ | + | |
| - | CP2K_TEST_DIR=" | + | |
| - | # CP2K_REGTEST_SCRIPT_DIR="" | + | |
| - | + | ||
| - | CP2K_ARCH=" | + | |
| - | CP2K_VERSION=" | + | |
| - | + | ||
| - | # the following is the default, adjust if you want to run single tests with more than 2 ranks/ | + | |
| - | NTASKS_SINGLE_TEST=2 | + | |
| - | NNODES_SINGLE_TEST=1 | + | |
| - | SRUN_CMD=" | + | |
| - | + | ||
| - | # the following should be sufficiently generic: | + | |
| - | + | ||
| - | mkdir -p " | + | |
| - | cd " | + | |
| - | + | ||
| - | cp2k_rel_dir=$(realpath --relative-to=" | + | |
| - | # srun does not like `-np`, override the complete command instead: | + | |
| - | export cp2k_run_prefix=" | + | |
| - | + | ||
| - | " | + | |
| - | -arch " | + | |
| - | -version " | + | |
| - | -nobuild \ | + | |
| - | -mpiranks ${NTASKS_SINGLE_TEST} \ | + | |
| - | -ompthreads ${OMP_NUM_THREADS} \ | + | |
| - | -maxtasks ${SLURM_NTASKS} \ | + | |
| - | -cp2kdir " | + | |
| - | |& tee " | + | |
| - | + | ||
| - | # the above will output both to the slurm-*.out as well as a log file, | + | |
| - | # if you want only the log file replace the `|& tee` with a `>& | + | |
| - | + | ||
| - | # More options: | + | |
| - | # -farming | + | |
| - | # -retest | + | |
| - | </ | + | |
| - | + | ||
| - | A complete '' | + | |
| - | + | ||
| - | <code bash> | + | |
| - | #!/bin/bash -l | + | |
| - | #SBATCH --time=01: | + | |
| - | #SBATCH --nodes=4 | + | |
| - | #SBATCH --ntasks-per-node=128 | + | |
| - | #SBATCH --cpus-per-task=2 | + | |
| - | #SBATCH --ntasks-per-core=1 | + | |
| - | + | ||
| - | # More SBATCH options: | + | |
| - | # If you need 512GB memory nodes (otherwise only 256GB guaranteed): | + | |
| - | # #SBATCH --mem=497G | + | |
| - | # To run on the debug queue (max 10 nodes, 30 min): | + | |
| - | # # | + | |
| - | + | ||
| - | set -o errexit | + | |
| - | set -o nounset | + | |
| - | set -o pipefail | + | |
| - | + | ||
| - | export MPICH_OFI_STARTUP_CONNECT=1 | + | |
| - | export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} | + | |
| - | export OMP_PROC_BIND=close | + | |
| - | export OMP_PLACES=cores | + | |
| - | + | ||
| - | source " | + | |
| - | + | ||
| - | module load cpeGNU | + | |
| - | module load \ | + | |
| - | cray-fftw \ | + | |
| - | ELPA/ | + | |
| - | libxsmm/ | + | |
| - | libxc/5.1.3 \ | + | |
| - | Libint-CP2K/ | + | |
| - | gcc/ | + | |
| - | + | ||
| - | # Let the user see the currently loaded modules in the slurm log for completeness: | + | |
| - | module list | + | |
| - | + | ||
| - | CP2K_BASE_DIR="/ | + | |
| - | CP2K_TEST_DIR=" | + | |
| - | + | ||
| - | CP2K_ARCH=" | + | |
| - | CP2K_VERSION=" | + | |
| - | + | ||
| - | NTASKS_SINGLE_TEST=2 | + | |
| - | NNODES_SINGLE_TEST=1 | + | |
| - | SRUN_CMD=" | + | |
| - | + | ||
| - | # to run tests across nodes (to check for communication effects), use: | + | |
| - | # NNODES_SINGLE_TEST=4 | + | |
| - | # SRUN_CMD=" | + | |
| - | + | ||
| - | # the following should be sufficiently generic: | + | |
| - | + | ||
| - | mkdir -p " | + | |
| - | cd " | + | |
| - | + | ||
| - | cp2k_rel_dir=$(realpath --relative-to=" | + | |
| - | # srun does not like `-np`, override the complete command instead: | + | |
| - | export cp2k_run_prefix=" | + | |
| - | + | ||
| - | " | + | |
| - | -arch " | + | |
| - | -version " | + | |
| - | -nobuild \ | + | |
| - | -mpiranks ${NTASKS_SINGLE_TEST} \ | + | |
| - | -ompthreads ${OMP_NUM_THREADS} \ | + | |
| - | -maxtasks ${SLURM_NTASKS} \ | + | |
| - | -cp2kdir " | + | |
| - | | + | |
| - | </ | + | |
| - | + | ||
| - | ==== Test parallelization via Farming ==== | + | |
| - | + | ||
| - | Since the startup time of '' | + | |
| - | + | ||
| - | Simply add the option '' | + | |
| - | + | ||
| - | ==== Minimal directory setup ==== | + | |
| - | + | ||
| - | If you want to test a precompiled executable there is a minimal directory layout you have to reproduce to run the regtest: | + | |
| - | + | ||
| - | * '' | + | |
| - | * '' | + | |
| - | * '' | + | |
| - | + | ||
| - | An example if your HPC center uses EasyBuild to provide the CP2K package: | + | |
| - | + | ||
| - | < | + | |
| - | cp2k-prebuilt | + | |
| - | ├── data -> / | + | |
| - | ├── exe | + | |
| - | │ └── prebuilt -> / | + | |
| - | └── tests | + | |
| - | </ | + | |
| - | + | ||
| - | and then update the variables as follows: | + | |
| - | + | ||
| - | <code bash> | + | |
| - | CP2K_BASE_DIR="/ | + | |
| - | CP2K_TEST_DIR=" | + | |
| - | CP2K_REGTEST_SCRIPT_DIR="/ | + | |
| - | + | ||
| - | CP2K_ARCH=" | + | |
| - | CP2K_VERSION=" | + | |
| - | </ | + | |
| - | + | ||
| - | **Note**: if the '' | + | |
dev/regtesting.txt · Last modified: by fstein
