From 2797f50236c512939a604175a6e7572ec1303f72 Mon Sep 17 00:00:00 2001 From: "Timothy A. Smith" <tasmith4@illinois.edu> Date: Mon, 17 Jun 2019 12:33:37 -0500 Subject: [PATCH] move kernel fixtures into test.py --- test.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 50 insertions(+), 6 deletions(-) diff --git a/test.py b/test.py index dbc6261..17e7f8f 100644 --- a/test.py +++ b/test.py @@ -16,8 +16,6 @@ from pyopencl.tools import ( # noqa pytest_generate_tests_for_pyopencl as pytest_generate_tests) -import kernel_fixtures as kernel - _QUEUE = [] @@ -185,6 +183,52 @@ def split_map_to_list(string, map_func, splitter): return list(map(map_func, string.split(splitter))) +def with_root_kernel(prg, root_name): + # FIXME This is a little less beautiful than it could be + new_prg = prg.copy(name=root_name) + for name in prg: + clbl = new_prg[name] + if isinstance(clbl, lp.LoopKernel) and clbl.is_called_from_host: + new_prg = new_prg.with_kernel(clbl.copy(is_called_from_host=False)) + + new_prg = new_prg.with_kernel(prg[root_name].copy(is_called_from_host=True)) + return new_prg + + +def kernel_roe_eigensystem(queue, prg, params, states, metrics_frozen): + R_dev = setup_empty_array_on_device(queue, params.mat_bounds()) + Rinv_dev = setup_empty_array_on_device(queue, params.mat_bounds()) + lam_dev = setup_empty_array_on_device(queue, params.vec_bounds()) + + prg = with_root_kernel(prg, "roe_eigensystem") + prg(queue, nvars=params.nvars, ndim=params.ndim, d=params.d, + states=states, metrics_frozen=metrics_frozen, + R=R_dev, R_inv=Rinv_dev, lambda_roe=lam_dev) + + return R_dev.get(), Rinv_dev.get(), lam_dev.get() + + +def kernel_mult_mat_vec(queue, prg, alpha, a, b): + c_dev = setup_empty_array_on_device(queue, b.shape) + + prg = with_root_kernel(prg, "mult_mat_vec") + prg(queue, a=a, b=b, c=c_dev, alpha=alpha) + + return c_dev.get() + + +def kernel_compute_flux_derivatives(queue, prg, params, arrays): + flux_derivatives_dev = setup_empty_array_on_device(queue, (params.nvars, params.ndim, + params.nx_halo, params.ny_halo, params.nz_halo)) + + prg(queue, nvars=params.nvars, ndim=params.ndim, + states=arrays.states, fluxes=arrays.fluxes, metrics=arrays.metrics, + metric_jacobians=arrays.metric_jacobians, + flux_derivatives=flux_derivatives_dev) + + return flux_derivatives_dev.get() + + def compare_arrays(a, b): assert a == approx(b) @@ -286,7 +330,7 @@ def test_roe_uniform_grid(ctx_factory, states_str, fluxes_str, direction): params = setup_roe_params(nvars=5, ndim=3, direction=direction) states = array_from_string(states_str) metrics_frozen = setup_identity(params.ndim) - R, Rinv, lam = kernel.roe_eigensystem(queue, prg, params, states, metrics_frozen) + R, Rinv, lam = kernel_roe_eigensystem(queue, prg, params, states, metrics_frozen) compare_roe_identity(states, R, Rinv) @@ -301,7 +345,7 @@ def test_matvec(ctx_factory): a = setup_random_array(10, 10) b = setup_random_array(10) - c = kernel.mult_mat_vec(queue, prg, alpha=1.0, a=a, b=b) + c = kernel_mult_mat_vec(queue, prg, alpha=1.0, a=a, b=b) compare_arrays(a@b, c) @@ -315,7 +359,7 @@ def test_compute_flux_derivatives(ctx_factory): params = setup_flux_derivative_params(ndim=3, nvars=5, n=10) arrays = setup_random_flux_derivative_arrays(params) - kernel.compute_flux_derivatives(queue, prg, params, arrays) + kernel_compute_flux_derivatives(queue, prg, params, arrays) #@pytest.mark.slow @@ -327,7 +371,7 @@ def test_compute_flux_derivatives_gpu(ctx_factory): params = setup_flux_derivative_params(ndim=3, nvars=5, n=10) arrays = setup_random_flux_derivative_arrays_on_device(ctx_factory, params) - kernel.compute_flux_derivatives(queue, prg, params, arrays) + kernel_compute_flux_derivatives(queue, prg, params, arrays) # This lets you run 'python test.py test_case(cl._csc)' without pytest. -- GitLab