|
13 | 13 | ) |
14 | 14 | from devito.arch.compiler import OneapiCompiler |
15 | 15 | from devito.data import LEFT, RIGHT |
| 16 | +from devito.exceptions import InvalidArgument |
16 | 17 | from devito.ir import Cluster, Interval, IterationSpace |
17 | 18 | from devito.ir.clusters.algorithms import check_halo_writes |
18 | 19 | from devito.ir.iet import ( |
19 | 20 | Call, Conditional, FindNodes, FindSymbols, Iteration, retrieve_iteration_tree |
20 | 21 | ) |
21 | 22 | from devito.ir.support.space import Backward, Forward |
22 | | -from devito.mpi import MPI |
| 23 | +from devito.mpi import MPI, mpi_raise |
23 | 24 | from devito.mpi.distributed import CustomTopology |
24 | 25 | from devito.mpi.routines import ComputeCall, HaloUpdateCall, HaloUpdateList, MPICall |
25 | 26 | from devito.tools import Bunch |
|
28 | 29 | from examples.seismic.acoustic import acoustic_setup |
29 | 30 |
|
30 | 31 |
|
| 32 | +class TestMPIUtils: |
| 33 | + |
| 34 | + @pytest.mark.parametrize('comm', [None, MPI.COMM_NULL], ids=['none', 'null']) |
| 35 | + @pytest.mark.parametrize('error', [None, '', 'invalid argument']) |
| 36 | + @pytest.mark.parametrize('exception', [ValueError, InvalidArgument]) |
| 37 | + def test_raise_serial(self, comm, error, exception): |
| 38 | + if error is None: |
| 39 | + mpi_raise(error, exception, comm=comm) |
| 40 | + else: |
| 41 | + with pytest.raises(exception, match=f'^{error}$'): |
| 42 | + mpi_raise(error, exception, comm=comm) |
| 43 | + |
| 44 | + @pytest.mark.parametrize('failing_ranks', [(), (0,), (1,), (0, 1)]) |
| 45 | + @pytest.mark.parallel(mode=[(2, 'basic')]) |
| 46 | + def test_raise_collective(self, failing_ranks, mode): |
| 47 | + grid = Grid(shape=(16, 16)) |
| 48 | + rank = grid.distributor.myrank |
| 49 | + error = f'rank {rank}' if rank in failing_ranks else None |
| 50 | + |
| 51 | + if failing_ranks: |
| 52 | + with pytest.raises(InvalidArgument, match=f'^rank {failing_ranks[0]}$'): |
| 53 | + mpi_raise(error, InvalidArgument, comm=grid.comm) |
| 54 | + else: |
| 55 | + mpi_raise(error, InvalidArgument, comm=grid.comm) |
| 56 | + |
| 57 | + |
31 | 58 | class TestDistributor: |
32 | 59 |
|
33 | 60 | @pytest.mark.parallel(mode=[2, 4]) |
|
0 commit comments