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