desihub / gpu_specter

Scratch work for porting spectroperfectionism extractions to GPUs
BSD 3-Clause "New" or "Revised" License
2 stars 3 forks source link

Update unittests #58

Closed dmargala closed 3 years ago

dmargala commented 3 years ago

This PR adds instructions for generating unit test coverage reports and adds support for testing mpi code paths. Note that a large fraction of the missing lines are inside numba jitted functions that are tested but the coverage tool does not recoginize them as covered.

Setup on Cori:

cd path/to/gpu_specter
module purge
module load cgpu
module load python cuda/11.1.1 gcc openmpi
source activate gpu-specter-dev-cgpu
salloc -N 1 -C gpu -G 1 -c 10 -t 60

Before

> srun -n 1 -c 2 --cpu-bind=cores coverage run -p -m pytest py/gpu_specter
...
> coverage report
Name                                 Stmts   Miss  Cover
--------------------------------------------------------
py/gpu_specter/__init__.py               1      0   100%
py/gpu_specter/core.py                 339    111    67%
py/gpu_specter/extract/__init__.py       0      0   100%
py/gpu_specter/extract/both.py         115      9    92%
py/gpu_specter/extract/cpu.py          308     83    73%
py/gpu_specter/extract/gpu.py          349     61    83%
py/gpu_specter/io.py                    68     26    62%
py/gpu_specter/linalg.py               123     21    83%
py/gpu_specter/polynomial.py            43     16    63%
py/gpu_specter/util.py                  76     22    71%
--------------------------------------------------------
TOTAL                                 1422    349    75%

After:

> srun -n 1 -c 2 --cpu-bind=cores coverage run -p -m pytest py/gpu_specter
...
> srun -n 2 -c 2 --cpu-bind=cores coverage run -p -m pytest py/gpu_specter/test/test_core.py
...
> coverage combine
> coverage report
Name                                 Stmts   Miss  Cover
--------------------------------------------------------
py/gpu_specter/__init__.py               1      0   100%
py/gpu_specter/core.py                 339     31    91%
py/gpu_specter/extract/__init__.py       0      0   100%
py/gpu_specter/extract/both.py         115      9    92%
py/gpu_specter/extract/cpu.py          308     83    73%
py/gpu_specter/extract/gpu.py          349     47    87%
py/gpu_specter/io.py                    68     26    62%
py/gpu_specter/linalg.py               123     21    83%
py/gpu_specter/polynomial.py            43     17    60%
py/gpu_specter/util.py                  76     10    87%
--------------------------------------------------------
TOTAL                                 1422    244    83%

With multiple GPUs:

> salloc -N 1 -C gpu -G 2 -c 20 -t 60
> srun -n 1 -c 2 --cpu-bind=cores coverage run -p -m pytest py/gpu_specter
...
> srun -n 2 -c 2 --cpu-bind=cores coverage run -p -m pytest py/gpu_specter/test/test_core.py
...
> srun -n 4 -c 2 --cpu-bind=cores coverage run -p -m pytest py/gpu_specter/test/test_core.py
...
> coverage combine
> coverage report
Name                                 Stmts   Miss  Cover
--------------------------------------------------------
py/gpu_specter/__init__.py               1      0   100%
py/gpu_specter/core.py                 339     29    91%
py/gpu_specter/extract/__init__.py       0      0   100%
py/gpu_specter/extract/both.py         115      9    92%
py/gpu_specter/extract/cpu.py          308     83    73%
py/gpu_specter/extract/gpu.py          349     47    87%
py/gpu_specter/io.py                    68     26    62%
py/gpu_specter/linalg.py               123     21    83%
py/gpu_specter/polynomial.py            43     17    60%
py/gpu_specter/util.py                  76     10    87%
--------------------------------------------------------
TOTAL                                 1422    242    83%