1*bd882c8aSJames Wright // Copyright (c) 2017-2022, Lawrence Livermore National Security, LLC and other CEED contributors. 2*bd882c8aSJames Wright // All Rights Reserved. See the top-level LICENSE and NOTICE files for details. 3*bd882c8aSJames Wright // 4*bd882c8aSJames Wright // SPDX-License-Identifier: BSD-2-Clause 5*bd882c8aSJames Wright // 6*bd882c8aSJames Wright // This file is part of CEED: http://github.com/ceed 7*bd882c8aSJames Wright 8*bd882c8aSJames Wright #ifndef _ceed_sycl_common_hpp 9*bd882c8aSJames Wright #define _ceed_sycl_common_hpp 10*bd882c8aSJames Wright 11*bd882c8aSJames Wright #include <ceed/backend.h> 12*bd882c8aSJames Wright #include <ceed/jit-source/sycl/sycl-types.h> 13*bd882c8aSJames Wright 14*bd882c8aSJames Wright #include <sycl/sycl.hpp> 15*bd882c8aSJames Wright #include <type_traits> 16*bd882c8aSJames Wright 17*bd882c8aSJames Wright #define CeedCallSycl(ceed, ...) \ 18*bd882c8aSJames Wright do { \ 19*bd882c8aSJames Wright try { \ 20*bd882c8aSJames Wright __VA_ARGS__; \ 21*bd882c8aSJames Wright } catch (sycl::exception const &e) { \ 22*bd882c8aSJames Wright return CeedError((ceed), CEED_ERROR_BACKEND, e.what()); \ 23*bd882c8aSJames Wright } \ 24*bd882c8aSJames Wright } while (0); 25*bd882c8aSJames Wright 26*bd882c8aSJames Wright using CeedBackendFunction = int (*)(); 27*bd882c8aSJames Wright 28*bd882c8aSJames Wright template <typename R, class... Args> 29*bd882c8aSJames Wright int CeedSetBackendFunctionCpp(Ceed ceed, const char *type, void *object, const char *fname, R (*f)(Args...)) { 30*bd882c8aSJames Wright static_assert(std::is_same_v<int, R>, "Ceed backend functions must return int"); 31*bd882c8aSJames Wright // Kris: this is potentially undefined behavior by C++ standards 32*bd882c8aSJames Wright auto *bf = reinterpret_cast<CeedBackendFunction>(f); 33*bd882c8aSJames Wright return CeedSetBackendFunction(ceed, type, object, fname, bf); 34*bd882c8aSJames Wright } 35*bd882c8aSJames Wright 36*bd882c8aSJames Wright typedef struct { 37*bd882c8aSJames Wright sycl::context sycl_context; 38*bd882c8aSJames Wright sycl::device sycl_device; 39*bd882c8aSJames Wright sycl::queue sycl_queue; 40*bd882c8aSJames Wright } Ceed_Sycl; 41*bd882c8aSJames Wright 42*bd882c8aSJames Wright CEED_INTERN int CeedSyclGetResourceRoot(Ceed ceed, const char *resource, char **resource_root); 43*bd882c8aSJames Wright 44*bd882c8aSJames Wright CEED_INTERN int CeedSyclInit(Ceed ceed, const char *resource); 45*bd882c8aSJames Wright 46*bd882c8aSJames Wright CEED_INTERN int CeedDestroy_Sycl(Ceed ceed); 47*bd882c8aSJames Wright 48*bd882c8aSJames Wright CEED_EXTERN int CeedSetSyclStream(Ceed ceed, void *handle); 49*bd882c8aSJames Wright 50*bd882c8aSJames Wright #endif // _ceed_sycl_common_h 51