From 0e0158feb348416e9c06c3ad58c32d5bb3daf31a Mon Sep 17 00:00:00 2001 From: Mateusz Duchnowski Date: Fri, 5 Oct 2018 14:50:33 +0200 Subject: [PATCH] Added basic support for surfaces and textures for CUDA. --- sailfish/backend_cuda.py | 6 ++++++ sailfish/backend_dummy.py | 6 ++++++ sailfish/backend_opencl.py | 6 ++++++ sailfish/subdomain_runner.py | 6 ++++++ 4 files changed, 24 insertions(+) diff --git a/sailfish/backend_cuda.py b/sailfish/backend_cuda.py index ff19f221..c35e1890 100644 --- a/sailfish/backend_cuda.py +++ b/sailfish/backend_cuda.py @@ -190,6 +190,12 @@ def to_buf_async(self, cl_buf, stream=None): def from_buf_async(self, cl_buf, stream=None): cuda.memcpy_dtoh_async(self.buffers[cl_buf], cl_buf, stream) + def get_texture(self, prog, texture_name): + return prog.get_texref(texture_name) + + def get_surface(self, prog, surface_name): + return prog.get_surfref(surface_name) + def build(self, source): if self.options.cuda_nvcc_opts: import shlex diff --git a/sailfish/backend_dummy.py b/sailfish/backend_dummy.py index 817054dc..6109fc81 100644 --- a/sailfish/backend_dummy.py +++ b/sailfish/backend_dummy.py @@ -49,6 +49,12 @@ def to_buf_async(self, *args): def from_buf_async(self, *args): pass + def get_texture(self, prog, texture_name): + pass + + def get_surface(self, prog, surface_name): + pass + def get_defines(self): return { 'warp_size': 32, diff --git a/sailfish/backend_opencl.py b/sailfish/backend_opencl.py index 6f65d299..71aa5630 100644 --- a/sailfish/backend_opencl.py +++ b/sailfish/backend_opencl.py @@ -207,6 +207,12 @@ def get_reduction_kernel(self, reduce_expr, map_expr, neutral, *args): arguments=', '.join(arguments)) return lambda : kernel(*arrays).get() + def get_surface(self, name): + raise NotImplementedError() + + def get_texture(self, name): + raise NotImplementedError() + def sync(self): self.default_queue.finish() diff --git a/sailfish/subdomain_runner.py b/sailfish/subdomain_runner.py index a97ccc3f..ec6b4383 100644 --- a/sailfish/subdomain_runner.py +++ b/sailfish/subdomain_runner.py @@ -957,6 +957,12 @@ def exec_kernel(self, name, args, args_format, needs_iteration=False, self.backend.run_kernel(kernel, self._kernel_grid_full if grid is None else grid) + def get_surface(self, name): + return self.backend.get_surface(self.module, name) + + def get_texture(self, name): + return self.backend.get_texture(self.module, name) + def step(self, sync_req): self._step_boundary(sync_req) self._step_bulk(sync_req)