Skip to content
Snippets Groups Projects
Commit 2797f502 authored by Timothy A. Smith's avatar Timothy A. Smith
Browse files

move kernel fixtures into test.py

parent d5afdfbb
No related branches found
No related tags found
2 merge requests!11Utility refactoring,!8Test refactoring
Pipeline #18129 passed
......@@ -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.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment