From fc1b17b00c80f445e97dcb4e393ed73ad47b8e82 Mon Sep 17 00:00:00 2001 From: "Timothy A. Smith" <tasmith4@illinois.edu> Date: Mon, 27 May 2019 23:36:28 -0500 Subject: [PATCH] move bulk of compute_flux_derivative_gpu code into test fixture --- kernel_fixtures.py | 25 +++++++++++++++++++++++++ setup_fixtures.py | 19 +++++++++++++++++++ test.py | 34 ++++------------------------------ 3 files changed, 48 insertions(+), 30 deletions(-) diff --git a/kernel_fixtures.py b/kernel_fixtures.py index e905363..0640e8c 100644 --- a/kernel_fixtures.py +++ b/kernel_fixtures.py @@ -45,3 +45,28 @@ def compute_flux_derivatives(ctx_factory, params, arrays): metric_jacobians=arrays.metric_jacobians, flux_derivatives=flux_derivatives_dev) return flux_derivatives_dev.get() + +def compute_flux_derivatives_gpu(ctx_factory, params, arrays): + prg = fixtures.get_gpu_transformed_weno() + + queue = fixtures.get_queue(ctx_factory) + + nx_halo = params.nx + params.nhalo + ny_halo = params.ny + params.nhalo + nz_halo = params.nz + params.nhalo + + flux_derivatives_dev = cl.array.empty(queue, (params.nvars, params.ndim, + nx_halo, ny_halo, nz_halo), dtype=np.float32, order="F") + + prg = prg.copy(target=lp.PyOpenCLTarget(queue.device)) + + if 1: + with open("gen-code.cl", "w") as outf: + outf.write(lp.generate_code_v2(prg).device_code()) + + prg = lp.set_options(prg, no_numpy=True) + + 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) diff --git a/setup_fixtures.py b/setup_fixtures.py index 9e24722..b576866 100644 --- a/setup_fixtures.py +++ b/setup_fixtures.py @@ -1,5 +1,7 @@ import numpy as np +import fixtures + class FluxDerivativeParams: def __init__(self, nvars, ndim, nx, ny, nz): @@ -36,3 +38,20 @@ def random_flux_derivative_arrays(params): metric_jacobians = random_array(nx_halo, ny_halo, nz_halo) return FluxDerivativeArrays(states, fluxes, metrics, metric_jacobians) + + +def random_flux_derivative_arrays_on_device(ctx_factory, params): + queue = fixtures.get_queue(ctx_factory) + + nvars = params.nvars + ndim = params.ndim + nx_halo = params.nx + params.nhalo + ny_halo = params.ny + params.nhalo + nz_halo = params.nz + params.nhalo + + states = fixtures.f_array(queue, nvars, nx_halo, ny_halo, nz_halo) + fluxes = fixtures.f_array(queue, nvars, ndim, nx_halo, ny_halo, nz_halo) + metrics = fixtures.f_array(queue, ndim, ndim, nx_halo, ny_halo, nz_halo) + metric_jacobians = fixtures.f_array(queue, nx_halo, ny_halo, nz_halo) + + return FluxDerivativeArrays(states, fluxes, metrics, metric_jacobians) diff --git a/test.py b/test.py index 00b21ef..914e029 100644 --- a/test.py +++ b/test.py @@ -32,41 +32,15 @@ def test_matvec(ctx_factory): def test_compute_flux_derivatives(ctx_factory): params = setup.FluxDerivativeParams(ndim=3, nvars=5, nx=10, ny=10, nz=10) arrays = setup.random_flux_derivative_arrays(params) + kernel.compute_flux_derivatives(ctx_factory, params, arrays) -@pytest.mark.skip("slow") def test_compute_flux_derivatives_gpu(ctx_factory): - prg = fixtures.get_gpu_transformed_weno() - - queue = fixtures.get_queue(ctx_factory) - - ndim = 3 - nvars = 5 - nx = 10 - ny = 10 - nz = 10 - - states = fixtures.f_array(queue, nvars, nx+6, ny+6, nz+6) - fluxes = fixtures.f_array(queue, nvars, ndim, nx+6, ny+6, nz+6) - metrics = fixtures.f_array(queue, ndim, ndim, nx+6, ny+6, nz+6) - metric_jacobians = fixtures.f_array(queue, nx+6, ny+6, nz+6) - - flux_derivatives_dev = cl.array.empty(queue, (nvars, ndim, nx+6, ny+6, - nz+6), dtype=np.float32, order="F") - - prg = prg.copy(target=lp.PyOpenCLTarget(queue.device)) - - if 1: - with open("gen-code.cl", "w") as outf: - outf.write(lp.generate_code_v2(prg).device_code()) - - prg = lp.set_options(prg, no_numpy=True) + params = setup.FluxDerivativeParams(ndim=3, nvars=5, nx=10, ny=10, nz=10) + arrays = setup.random_flux_derivative_arrays_on_device(ctx_factory, params) - prg(queue, nvars=nvars, ndim=ndim, - states=states, fluxes=fluxes, metrics=metrics, - metric_jacobians=metric_jacobians, - flux_derivatives=flux_derivatives_dev) + kernel.compute_flux_derivatives_gpu(ctx_factory, params, arrays) # This lets you run 'python test.py test_case(cl._csc)' without pytest. -- GitLab